Skip to content

Commit 5214e00

Browse files
Merge pull request #768 from ava-labs/improve-cchain-snowman
Improve cchain snowman
2 parents 3c9f1cb + 9478ea8 commit 5214e00

29 files changed

+893
-95
lines changed

.ci/run_e2e_tests.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ echo "Using Avalanche Image: $AVALANCHE_IMAGE"
1717

1818
DOCKER_REPO="avaplatform"
1919
BYZANTINE_IMAGE="$DOCKER_REPO/avalanche-byzantine:v0.1.5-rc.1"
20-
TEST_SUITE_IMAGE="$DOCKER_REPO/avalanche-testing:v0.10.5-rc.2"
20+
TEST_SUITE_IMAGE="$DOCKER_REPO/avalanche-testing:v0.10.5-rc.3"
2121

2222
# If Docker Credentials are not available skip the Byzantine Tests
2323
if [[ -z ${DOCKER_USERNAME} ]]; then

chains/atomic/shared_memory.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,11 @@ func (s *state) RemoveValue(key []byte) error {
276276
return s.valueDB.Put(key, valueBytes)
277277
}
278278

279+
// Don't allow the removal of something that was already removed.
280+
if !value.Present {
281+
return errDuplicatedOperation
282+
}
283+
279284
for _, trait := range value.Traits {
280285
traitDB := prefixdb.New(trait, s.indexDB)
281286
if err := traitDB.Delete(key); err != nil {

chains/atomic/shared_memory_test.go

Lines changed: 75 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ import (
1414
)
1515

1616
func TestSharedMemory(t *testing.T) {
17+
assert := assert.New(t)
18+
1719
m := Memory{}
1820
err := m.Initialize(logging.NoLog{}, memdb.New())
19-
if err != nil {
20-
t.Fatal(err)
21-
}
21+
assert.NoError(err)
2222

2323
chainID0 := ids.GenerateTestID()
2424
chainID1 := ids.GenerateTestID()
@@ -34,7 +34,7 @@ func TestSharedMemory(t *testing.T) {
3434
{3},
3535
},
3636
}})
37-
assert.NoError(t, err)
37+
assert.NoError(err)
3838

3939
err = sm0.Put(chainID1, []*Element{{
4040
Key: []byte{4},
@@ -44,33 +44,89 @@ func TestSharedMemory(t *testing.T) {
4444
{3},
4545
},
4646
}})
47-
assert.NoError(t, err)
47+
assert.NoError(err)
4848

4949
values, _, _, err := sm0.Indexed(chainID1, [][]byte{{2}}, nil, nil, 1)
50-
assert.NoError(t, err)
51-
assert.Empty(t, values, "wrong indexed values returned")
50+
assert.NoError(err)
51+
assert.Empty(values, "wrong indexed values returned")
5252

5353
values, _, _, err = sm1.Indexed(chainID0, [][]byte{{2}}, nil, nil, 0)
54-
assert.NoError(t, err)
55-
assert.Empty(t, values, "wrong indexed values returned")
54+
assert.NoError(err)
55+
assert.Empty(values, "wrong indexed values returned")
5656

5757
values, _, _, err = sm1.Indexed(chainID0, [][]byte{{2}}, nil, nil, 1)
58-
assert.NoError(t, err)
59-
assert.Equal(t, [][]byte{{1}}, values, "wrong indexed values returned")
58+
assert.NoError(err)
59+
assert.Equal([][]byte{{1}}, values, "wrong indexed values returned")
6060

6161
values, _, _, err = sm1.Indexed(chainID0, [][]byte{{2}}, nil, nil, 2)
62-
assert.NoError(t, err)
63-
assert.Equal(t, [][]byte{{1}, {5}}, values, "wrong indexed values returned")
62+
assert.NoError(err)
63+
assert.Equal([][]byte{{1}, {5}}, values, "wrong indexed values returned")
6464

6565
values, _, _, err = sm1.Indexed(chainID0, [][]byte{{2}}, nil, nil, 3)
66-
assert.NoError(t, err)
67-
assert.Equal(t, [][]byte{{1}, {5}}, values, "wrong indexed values returned")
66+
assert.NoError(err)
67+
assert.Equal([][]byte{{1}, {5}}, values, "wrong indexed values returned")
6868

6969
values, _, _, err = sm1.Indexed(chainID0, [][]byte{{3}}, nil, nil, 3)
70-
assert.NoError(t, err)
71-
assert.Equal(t, [][]byte{{1}, {5}}, values, "wrong indexed values returned")
70+
assert.NoError(err)
71+
assert.Equal([][]byte{{1}, {5}}, values, "wrong indexed values returned")
7272

7373
values, _, _, err = sm1.Indexed(chainID0, [][]byte{{2}, {3}}, nil, nil, 3)
74-
assert.NoError(t, err)
75-
assert.Equal(t, [][]byte{{1}, {5}}, values, "wrong indexed values returned")
74+
assert.NoError(err)
75+
assert.Equal([][]byte{{1}, {5}}, values, "wrong indexed values returned")
76+
}
77+
78+
func TestSharedMemoryCantDuplicatePut(t *testing.T) {
79+
assert := assert.New(t)
80+
81+
m := Memory{}
82+
err := m.Initialize(logging.NoLog{}, memdb.New())
83+
assert.NoError(err)
84+
85+
chainID0 := ids.GenerateTestID()
86+
chainID1 := ids.GenerateTestID()
87+
88+
sm := m.NewSharedMemory(chainID0)
89+
90+
err = sm.Put(chainID1, []*Element{
91+
{
92+
Key: []byte{0},
93+
Value: []byte{1},
94+
},
95+
{
96+
Key: []byte{0},
97+
Value: []byte{2},
98+
},
99+
})
100+
assert.Error(err, "shouldn't be able to write duplicated keys")
101+
102+
err = sm.Put(chainID1, []*Element{{
103+
Key: []byte{0},
104+
Value: []byte{1},
105+
}})
106+
assert.NoError(err)
107+
108+
err = sm.Put(chainID1, []*Element{{
109+
Key: []byte{0},
110+
Value: []byte{1},
111+
}})
112+
assert.Error(err, "shouldn't be able to write duplicated keys")
113+
}
114+
115+
func TestSharedMemoryCantDuplicateRemove(t *testing.T) {
116+
assert := assert.New(t)
117+
118+
m := Memory{}
119+
err := m.Initialize(logging.NoLog{}, memdb.New())
120+
assert.NoError(err)
121+
122+
chainID0 := ids.GenerateTestID()
123+
chainID1 := ids.GenerateTestID()
124+
125+
sm := m.NewSharedMemory(chainID0)
126+
127+
err = sm.Remove(chainID1, [][]byte{{0}})
128+
assert.NoError(err)
129+
130+
err = sm.Remove(chainID1, [][]byte{{0}})
131+
assert.Error(err, "shouldn't be able to remove duplicated keys")
76132
}

main/keys.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ const (
6969
snowAvalancheNumParentsKey = "snow-avalanche-num-parents"
7070
snowAvalancheBatchSizeKey = "snow-avalanche-batch-size"
7171
snowConcurrentRepollsKey = "snow-concurrent-repolls"
72+
snowOptimalProcessingKey = "snow-optimal-processing"
7273
snowEpochFirstTransition = "snow-epoch-first-transition"
7374
snowEpochDuration = "snow-epoch-duration"
7475
whitelistedSubnetsKey = "whitelisted-subnets"

main/params.go

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -175,20 +175,20 @@ func avalancheFlagSet() *flag.FlagSet {
175175
fs.Uint(maxNonStakerPendingMsgsKey, uint(router.DefaultMaxNonStakerPendingMsgs), "Maximum number of messages a non-staker is allowed to have pending.")
176176
fs.Float64(stakerMsgReservedKey, router.DefaultStakerPortion, "Reserve a portion of the chain message queue's space for stakers.")
177177
fs.Float64(stakerCPUReservedKey, router.DefaultStakerPortion, "Reserve a portion of the chain's CPU time for stakers.")
178-
fs.Uint(maxPendingMsgsKey, 1024, "Maximum number of pending messages. Messages after this will be dropped.")
178+
fs.Uint(maxPendingMsgsKey, 4096, "Maximum number of pending messages. Messages after this will be dropped.")
179179

180180
// Network Timeouts:
181-
fs.Duration(networkInitialTimeoutKey, 5*time.Second, "Initial timeout value of the adaptive timeout manager, in nanoseconds.")
182-
fs.Duration(networkMinimumTimeoutKey, 500*time.Millisecond, "Minimum timeout value of the adaptive timeout manager, in nanoseconds.")
183-
fs.Duration(networkMaximumTimeoutKey, 10*time.Second, "Maximum timeout value of the adaptive timeout manager, in nanoseconds.")
184-
fs.Duration(networkTimeoutIncreaseKey, 60*time.Millisecond, "Increase of network timeout after a failed request, in nanoseconds.")
185-
fs.Duration(networkTimeoutReductionKey, 12*time.Millisecond, "Decrease of network timeout after a successful request, in nanoseconds.")
186-
fs.Uint(sendQueueSizeKey, 1<<10, "Max number of messages waiting to be sent to peers.")
181+
fs.Duration(networkInitialTimeoutKey, 5*time.Second, "Initial timeout value of the adaptive timeout manager.")
182+
fs.Duration(networkMinimumTimeoutKey, 3*time.Second, "Minimum timeout value of the adaptive timeout manager.")
183+
fs.Duration(networkMaximumTimeoutKey, 10*time.Second, "Maximum timeout value of the adaptive timeout manager.")
184+
fs.Duration(networkTimeoutIncreaseKey, 100*time.Millisecond, "Increase of network timeout after a failed request.")
185+
fs.Duration(networkTimeoutReductionKey, 5*time.Millisecond, "Decrease of network timeout after a successful request.")
186+
fs.Uint(sendQueueSizeKey, 4096, "Max number of messages waiting to be sent to peers.")
187187

188188
// Benchlist Parameters:
189189
fs.Int(benchlistFailThresholdKey, 10, "Number of consecutive failed queries before benchlisting a node.")
190190
fs.Bool(benchlistPeerSummaryEnabledKey, false, "Enables peer specific query latency metrics.")
191-
fs.Duration(benchlistDurationKey, time.Hour, "Amount of time a peer is benchlisted after surpassing the threshold.")
191+
fs.Duration(benchlistDurationKey, 30*time.Minute, "Amount of time a peer is benchlisted after surpassing the threshold.")
192192
fs.Duration(benchlistMinFailingDurationKey, 5*time.Minute, "Minimum amount of time messages to a peer must be failing before the peer is benched.")
193193

194194
// Plugins:
@@ -207,6 +207,7 @@ func avalancheFlagSet() *flag.FlagSet {
207207
fs.Int(snowAvalancheNumParentsKey, 5, "Number of vertexes for reference from each new vertex")
208208
fs.Int(snowAvalancheBatchSizeKey, 30, "Number of operations to batch in each new vertex")
209209
fs.Int(snowConcurrentRepollsKey, 4, "Minimum number of concurrent polls for finalizing consensus")
210+
fs.Int(snowOptimalProcessingKey, 50, "Optimal number of processing vertices in consensus")
210211
fs.Int64(snowEpochFirstTransition, 1607626800, "Unix timestamp of the first epoch transaction, in seconds. Defaults to 12/10/2020 @ 7:00pm (UTC)")
211212
fs.Duration(snowEpochDuration, 6*time.Hour, "Duration of each epoch")
212213

@@ -282,6 +283,7 @@ func setNodeConfig(v *viper.Viper) error {
282283
Config.ConsensusParams.Parents = v.GetInt(snowAvalancheNumParentsKey)
283284
Config.ConsensusParams.BatchSize = v.GetInt(snowAvalancheBatchSizeKey)
284285
Config.ConsensusParams.ConcurrentRepolls = v.GetInt(snowConcurrentRepollsKey)
286+
Config.ConsensusParams.OptimalProcessing = v.GetInt(snowOptimalProcessingKey)
285287

286288
Config.ConsensusGossipFrequency = v.GetDuration(consensusGossipFrequencyKey)
287289
Config.ConsensusShutdownTimeout = v.GetDuration(consensusShutdownTimeoutKey)

node/node.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ var (
6767
genesisHashKey = []byte("genesisID")
6868

6969
// Version is the version of this code
70-
Version = version.NewDefaultVersion(constants.PlatformName, 1, 1, 5)
70+
Version = version.NewDefaultVersion(constants.PlatformName, 1, 2, 0)
7171
versionParser = version.NewDefaultParser()
7272
beaconConnectionTimeout = 1 * time.Minute
7373
)

scripts/build_coreth.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ BUILD_DIR="$AVALANCHE_PATH/build" # Where binaries go
1313
PLUGIN_DIR="$BUILD_DIR/plugins" # Where plugin binaries (namely coreth) go
1414
BINARY_PATH="$PLUGIN_DIR/evm"
1515

16-
CORETH_VER="v0.3.22"
16+
CORETH_VER="v0.3.23"
1717

1818
CORETH_PATH="$GOPATH/pkg/mod/github.com/ava-labs/coreth@$CORETH_VER"
1919

snow/consensus/avalanche/consensus.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ type Consensus interface {
2828
// Returns the parameters that describe this avalanche instance
2929
Parameters() Parameters
3030

31+
// Returns the number of vertices processing
32+
NumProcessing() int
33+
3134
// Returns true if the transaction is virtuous.
3235
// That is, no transaction has been added that conflicts with it
3336
IsVirtuous(snowstorm.Tx) bool

0 commit comments

Comments
 (0)