Skip to content

Commit 291d1d7

Browse files
authored
Expose merkledb defaults (#3748)
Signed-off-by: Joshua Kim <[email protected]>
1 parent bf7f283 commit 291d1d7

File tree

8 files changed

+66
-64
lines changed

8 files changed

+66
-64
lines changed

x/merkledb/db.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,21 @@ type MerkleDB interface {
159159
Prefetcher
160160
}
161161

162+
func NewConfig() Config {
163+
return Config{
164+
BranchFactor: BranchFactor16,
165+
Hasher: DefaultHasher,
166+
RootGenConcurrency: 0,
167+
HistoryLength: 300,
168+
ValueNodeCacheSize: units.MiB,
169+
IntermediateNodeCacheSize: units.MiB,
170+
IntermediateWriteBufferSize: units.KiB,
171+
IntermediateWriteBatchSize: 256 * units.KiB,
172+
TraceLevel: InfoTrace,
173+
Tracer: trace.Noop,
174+
}
175+
}
176+
162177
type Config struct {
163178
// BranchFactor determines the number of children each node can have.
164179
BranchFactor BranchFactor

x/merkledb/db_test.go

Lines changed: 13 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,18 @@ import (
1414
"testing"
1515
"time"
1616

17-
"github.com/prometheus/client_golang/prometheus"
1817
"github.com/stretchr/testify/require"
1918

2019
"github.com/ava-labs/avalanchego/database"
2120
"github.com/ava-labs/avalanchego/database/dbtest"
2221
"github.com/ava-labs/avalanchego/database/memdb"
2322
"github.com/ava-labs/avalanchego/ids"
24-
"github.com/ava-labs/avalanchego/trace"
2523
"github.com/ava-labs/avalanchego/utils/hashing"
2624
"github.com/ava-labs/avalanchego/utils/maybe"
2725
"github.com/ava-labs/avalanchego/utils/set"
2826
"github.com/ava-labs/avalanchego/utils/units"
2927
)
3028

31-
const defaultHistoryLength = 300
32-
3329
// newDB returns a new merkle database with the underlying type so that tests can access unexported fields
3430
func newDB(ctx context.Context, db database.Database, config Config) (*merkleDB, error) {
3531
db, err := New(ctx, db, config)
@@ -39,22 +35,6 @@ func newDB(ctx context.Context, db database.Database, config Config) (*merkleDB,
3935
return db.(*merkleDB), nil
4036
}
4137

42-
func newDefaultConfig() Config {
43-
return Config{
44-
BranchFactor: BranchFactor16,
45-
Hasher: DefaultHasher,
46-
RootGenConcurrency: 0,
47-
HistoryLength: defaultHistoryLength,
48-
ValueNodeCacheSize: units.MiB,
49-
IntermediateNodeCacheSize: units.MiB,
50-
IntermediateWriteBufferSize: units.KiB,
51-
IntermediateWriteBatchSize: 256 * units.KiB,
52-
Reg: prometheus.NewRegistry(),
53-
TraceLevel: InfoTrace,
54-
Tracer: trace.Noop,
55-
}
56-
}
57-
5838
func Test_MerkleDB_Get_Safety(t *testing.T) {
5939
require := require.New(t)
6040

@@ -134,7 +114,7 @@ func Test_MerkleDB_DB_Load_Root_From_DB(t *testing.T) {
134114
db, err := New(
135115
context.Background(),
136116
baseDB,
137-
newDefaultConfig(),
117+
NewConfig(),
138118
)
139119
require.NoError(err)
140120

@@ -162,7 +142,7 @@ func Test_MerkleDB_DB_Load_Root_From_DB(t *testing.T) {
162142
db, err = New(
163143
context.Background(),
164144
baseDB,
165-
newDefaultConfig(),
145+
NewConfig(),
166146
)
167147
require.NoError(err)
168148

@@ -176,7 +156,7 @@ func Test_MerkleDB_DB_Rebuild(t *testing.T) {
176156

177157
initialSize := 5_000
178158

179-
config := newDefaultConfig()
159+
config := NewConfig()
180160
config.ValueNodeCacheSize = uint(initialSize)
181161
config.IntermediateNodeCacheSize = uint(initialSize)
182162

@@ -233,7 +213,7 @@ func Test_MerkleDB_Failed_Batch_Commit(t *testing.T) {
233213
db, err := New(
234214
context.Background(),
235215
memDB,
236-
newDefaultConfig(),
216+
NewConfig(),
237217
)
238218
require.NoError(err)
239219

@@ -254,7 +234,7 @@ func Test_MerkleDB_Value_Cache(t *testing.T) {
254234
db, err := New(
255235
context.Background(),
256236
memDB,
257-
newDefaultConfig(),
237+
NewConfig(),
258238
)
259239
require.NoError(err)
260240

@@ -903,13 +883,13 @@ const (
903883
)
904884

905885
func runRandDBTest(require *require.Assertions, r *rand.Rand, rt randTest, tokenSize int) {
906-
db, err := getBasicDBWithBranchFactor(tokenSizeToBranchFactor[tokenSize])
886+
config := NewConfig()
887+
config.BranchFactor = tokenSizeToBranchFactor[tokenSize]
888+
db, err := New(context.Background(), memdb.New(), config)
907889
require.NoError(err)
908890

909-
const (
910-
maxProofLen = 100
911-
maxPastRoots = defaultHistoryLength
912-
)
891+
maxProofLen := 100
892+
maxPastRoots := int(config.HistoryLength)
913893

914894
var (
915895
values = make(map[Key][]byte) // tracks content of the trie
@@ -966,7 +946,7 @@ func runRandDBTest(require *require.Assertions, r *rand.Rand, rt randTest, token
966946
end,
967947
root,
968948
tokenSize,
969-
db.hasher,
949+
config.Hasher,
970950
))
971951
case opGenerateChangeProof:
972952
root, err := db.GetMerkleRoot(context.Background())
@@ -1301,7 +1281,7 @@ func TestCrashRecovery(t *testing.T) {
13011281
merkleDB, err := newDatabase(
13021282
context.Background(),
13031283
baseDB,
1304-
newDefaultConfig(),
1284+
NewConfig(),
13051285
&mockMetrics{},
13061286
)
13071287
require.NoError(err)
@@ -1319,7 +1299,7 @@ func TestCrashRecovery(t *testing.T) {
13191299
newMerkleDB, err := newDatabase(
13201300
context.Background(),
13211301
baseDB,
1322-
newDefaultConfig(),
1302+
NewConfig(),
13231303
&mockMetrics{},
13241304
)
13251305
require.NoError(err)

x/merkledb/helpers_test.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,18 @@ func getBasicDB() (*merkleDB, error) {
2020
return newDatabase(
2121
context.Background(),
2222
memdb.New(),
23-
newDefaultConfig(),
23+
NewConfig(),
2424
&mockMetrics{},
2525
)
2626
}
2727

28-
func getBasicDBWithBranchFactor(bf BranchFactor) (*merkleDB, error) {
29-
config := newDefaultConfig()
28+
func getBasicDBWithBranchFactor(bf BranchFactor) (MerkleDB, error) {
29+
config := NewConfig()
3030
config.BranchFactor = bf
31-
return newDatabase(
31+
return New(
3232
context.Background(),
3333
memdb.New(),
3434
config,
35-
&mockMetrics{},
3635
)
3736
}
3837

x/merkledb/history_test.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ func Test_History_Simple(t *testing.T) {
2222
db, err := newDB(
2323
context.Background(),
2424
memdb.New(),
25-
newDefaultConfig(),
25+
NewConfig(),
2626
)
2727
require.NoError(err)
2828
batch := db.NewBatch()
@@ -87,7 +87,7 @@ func Test_History_Large(t *testing.T) {
8787
numIters := 250
8888

8989
for i := 1; i < 5; i++ {
90-
config := newDefaultConfig()
90+
config := NewConfig()
9191
// History must be large enough to get the change proof
9292
// after this loop.
9393
config.HistoryLength = uint(numIters)
@@ -149,7 +149,7 @@ func Test_History_Large(t *testing.T) {
149149
func Test_History_Bad_GetValueChanges_Input(t *testing.T) {
150150
require := require.New(t)
151151

152-
config := newDefaultConfig()
152+
config := NewConfig()
153153
config.HistoryLength = 5
154154

155155
db, err := newDB(
@@ -215,7 +215,7 @@ func Test_History_Bad_GetValueChanges_Input(t *testing.T) {
215215
func Test_History_Trigger_History_Queue_Looping(t *testing.T) {
216216
require := require.New(t)
217217

218-
config := newDefaultConfig()
218+
config := NewConfig()
219219
config.HistoryLength = 2
220220

221221
db, err := newDB(
@@ -274,7 +274,7 @@ func Test_History_Trigger_History_Queue_Looping(t *testing.T) {
274274
func Test_History_Values_Lookup_Over_Queue_Break(t *testing.T) {
275275
require := require.New(t)
276276

277-
config := newDefaultConfig()
277+
config := NewConfig()
278278
config.HistoryLength = 4
279279
db, err := newDB(
280280
context.Background(),
@@ -327,7 +327,7 @@ func Test_History_RepeatedRoot(t *testing.T) {
327327
db, err := newDB(
328328
context.Background(),
329329
memdb.New(),
330-
newDefaultConfig(),
330+
NewConfig(),
331331
)
332332
require.NoError(err)
333333
batch := db.NewBatch()
@@ -371,7 +371,7 @@ func Test_History_ExcessDeletes(t *testing.T) {
371371
db, err := newDB(
372372
context.Background(),
373373
memdb.New(),
374-
newDefaultConfig(),
374+
NewConfig(),
375375
)
376376
require.NoError(err)
377377
batch := db.NewBatch()
@@ -403,7 +403,7 @@ func Test_History_DontIncludeAllNodes(t *testing.T) {
403403
db, err := newDB(
404404
context.Background(),
405405
memdb.New(),
406-
newDefaultConfig(),
406+
NewConfig(),
407407
)
408408
require.NoError(err)
409409
batch := db.NewBatch()
@@ -431,7 +431,7 @@ func Test_History_Branching2Nodes(t *testing.T) {
431431
db, err := newDB(
432432
context.Background(),
433433
memdb.New(),
434-
newDefaultConfig(),
434+
NewConfig(),
435435
)
436436
require.NoError(err)
437437
batch := db.NewBatch()
@@ -459,7 +459,7 @@ func Test_History_Branching3Nodes(t *testing.T) {
459459
db, err := newDB(
460460
context.Background(),
461461
memdb.New(),
462-
newDefaultConfig(),
462+
NewConfig(),
463463
)
464464
require.NoError(err)
465465
batch := db.NewBatch()
@@ -484,7 +484,7 @@ func Test_History_Branching3Nodes(t *testing.T) {
484484
func Test_History_MaxLength(t *testing.T) {
485485
require := require.New(t)
486486

487-
config := newDefaultConfig()
487+
config := NewConfig()
488488
config.HistoryLength = 2
489489
db, err := newDB(
490490
context.Background(),
@@ -519,7 +519,7 @@ func Test_Change_List(t *testing.T) {
519519
db, err := newDB(
520520
context.Background(),
521521
memdb.New(),
522-
newDefaultConfig(),
522+
NewConfig(),
523523
)
524524
require.NoError(err)
525525

x/merkledb/metrics_test.go

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

1616
func Test_Metrics_Basic_Usage(t *testing.T) {
17-
config := newDefaultConfig()
17+
config := NewConfig()
1818
// Set to nil so that we use a mockMetrics instead of the real one inside
1919
// merkledb.
2020
config.Reg = nil
@@ -54,7 +54,7 @@ func Test_Metrics_Initialize(t *testing.T) {
5454
db, err := New(
5555
context.Background(),
5656
memdb.New(),
57-
newDefaultConfig(),
57+
NewConfig(),
5858
)
5959
require.NoError(t, err)
6060

x/merkledb/proof_test.go

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/stretchr/testify/require"
1414

1515
"github.com/ava-labs/avalanchego/database"
16+
"github.com/ava-labs/avalanchego/database/memdb"
1617
"github.com/ava-labs/avalanchego/ids"
1718
"github.com/ava-labs/avalanchego/utils/hashing"
1819
"github.com/ava-labs/avalanchego/utils/maybe"
@@ -675,11 +676,17 @@ func Test_ChangeProof_Missing_History_For_EndRoot(t *testing.T) {
675676
t.Logf("Seed: %d", seed)
676677
rand := rand.New(rand.NewSource(seed)) // #nosec G404
677678

678-
db, err := getBasicDB()
679+
config := NewConfig()
680+
db, err := newDatabase(
681+
context.Background(),
682+
memdb.New(),
683+
config,
684+
&mockMetrics{},
685+
)
679686
require.NoError(err)
680687

681688
roots := []ids.ID{}
682-
for i := 0; i < defaultHistoryLength+1; i++ {
689+
for i := 0; i < int(config.HistoryLength)+1; i++ {
683690
key := make([]byte, 16)
684691
_, _ = rand.Read(key)
685692
require.NoError(db.Put(key, nil))
@@ -1879,11 +1886,6 @@ func FuzzProofVerification(f *testing.F) {
18791886

18801887
// Generate change proofs and verify that they are valid.
18811888
func FuzzChangeProofVerification(f *testing.F) {
1882-
const (
1883-
numKeyValues = defaultHistoryLength / 2
1884-
deletePortion = 0.25
1885-
)
1886-
18871889
f.Fuzz(func(
18881890
t *testing.T,
18891891
startBytes []byte,
@@ -1894,7 +1896,13 @@ func FuzzChangeProofVerification(f *testing.F) {
18941896
require := require.New(t)
18951897
rand := rand.New(rand.NewSource(randSeed)) // #nosec G404
18961898

1897-
db, err := getBasicDB()
1899+
config := NewConfig()
1900+
db, err := newDatabase(
1901+
context.Background(),
1902+
memdb.New(),
1903+
config,
1904+
&mockMetrics{},
1905+
)
18981906
require.NoError(err)
18991907

19001908
startRootID, err := db.GetMerkleRoot(context.Background())
@@ -1906,8 +1914,8 @@ func FuzzChangeProofVerification(f *testing.F) {
19061914
require,
19071915
rand,
19081916
[]database.Database{db},
1909-
numKeyValues,
1910-
deletePortion,
1917+
config.HistoryLength/2,
1918+
0.25,
19111919
)
19121920

19131921
endRootID, err := db.GetMerkleRoot(context.Background())

x/merkledb/trie_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -917,7 +917,7 @@ func Test_Trie_MultipleStates(t *testing.T) {
917917
db, err := New(
918918
context.Background(),
919919
rdb,
920-
newDefaultConfig(),
920+
NewConfig(),
921921
)
922922
require.NoError(err)
923923
defer db.Close()

x/merkledb/view_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ var hashChangedNodesTests = []struct {
5353
}
5454

5555
func makeViewForHashChangedNodes(t require.TestingT, numKeys uint64, parallelism uint) *view {
56-
config := newDefaultConfig()
56+
config := NewConfig()
5757
config.RootGenConcurrency = parallelism
5858
db, err := newDatabase(
5959
context.Background(),

0 commit comments

Comments
 (0)