3
3
package iavl
4
4
5
5
import (
6
- "context"
7
6
"crypto/sha256"
8
7
"encoding/hex"
9
8
"fmt"
@@ -64,16 +63,19 @@ func testTreeBuild(t *testing.T, multiTree *MultiTree, opts *testutil.TreeBuildO
64
63
workingSize int64
65
64
writeLeaves int64
66
65
writeTime time.Duration
66
+ hashCount int64
67
67
)
68
68
for _ , tr := range multiTree .Trees {
69
69
m := tr .sql .metrics
70
70
workingBytes += tr .workingBytes
71
71
workingSize += tr .workingSize
72
72
writeLeaves += m .WriteLeaves
73
73
writeTime += m .WriteTime
74
+ hashCount += tr .metrics .TreeHash
74
75
m .WriteDurations = nil
75
76
m .WriteLeaves = 0
76
77
m .WriteTime = 0
78
+ tr .metrics .TreeHash = 0
77
79
}
78
80
fmt .Printf ("leaves=%s time=%s last=%s μ=%s version=%d work-size=%s work-bytes=%s %s\n " ,
79
81
humanize .Comma (cnt ),
@@ -86,11 +88,12 @@ func testTreeBuild(t *testing.T, multiTree *MultiTree, opts *testutil.TreeBuildO
86
88
MemUsage ())
87
89
88
90
if writeTime > 0 {
89
- fmt .Printf ("writes: cnt=%s wr/s=%s dur/wr=%s dur=%s\n " ,
91
+ fmt .Printf ("writes: cnt=%s wr/s=%s dur/wr=%s dur=%s hashes=%s \n " ,
90
92
humanize .Comma (writeLeaves ),
91
93
humanize .Comma (int64 (float64 (writeLeaves )/ writeTime .Seconds ())),
92
94
time .Duration (int64 (writeTime )/ writeLeaves ),
93
95
writeTime .Round (time .Millisecond ),
96
+ humanize .Comma (hashCount ),
94
97
)
95
98
}
96
99
@@ -158,7 +161,6 @@ func TestTree_Hash(t *testing.T) {
158
161
var err error
159
162
160
163
tmpDir := t .TempDir ()
161
- //tmpDir := "/tmp/iavl-test"
162
164
t .Logf ("levelDb tmpDir: %s\n " , tmpDir )
163
165
164
166
require .NoError (t , err )
@@ -187,8 +189,7 @@ func TestTree_Hash(t *testing.T) {
187
189
188
190
func TestTree_Build_Load (t * testing.T ) {
189
191
// build the initial version of the tree with periodic checkpoints
190
- //tmpDir := t.TempDir()
191
- tmpDir := "/tmp/iavl-v2-test"
192
+ tmpDir := t .TempDir ()
192
193
opts := testutil .NewTreeBuildOptions ().With10_000 ()
193
194
multiTree := NewMultiTree (tmpDir , TreeOptions {CheckpointInterval : 4000 , HeightFilter : 0 , StateStorage : false })
194
195
itrs , ok := opts .Iterator .(* bench.ChangesetIterators )
@@ -215,86 +216,58 @@ func TestTree_Build_Load(t *testing.T) {
215
216
opts .UntilHash = "3a037f8dd67a5e1a9ef83a53b81c619c9ac0233abee6f34a400fb9b9dfbb4f8d"
216
217
testTreeBuild (t , mt , opts )
217
218
require .NoError (t , mt .Close ())
218
-
219
- t .Log ("export the tree at version 12,000 and import it into a sql db in pre-order" )
220
- traverseOrder := PreOrder
221
- restorePreOrderMt := NewMultiTree (t .TempDir (), TreeOptions {CheckpointInterval : 4000 })
222
- for sk , tree := range multiTree .Trees {
223
- require .NoError (t , restorePreOrderMt .MountTree (sk ))
224
- exporter := tree .Export (traverseOrder )
225
-
226
- restoreTree := restorePreOrderMt .Trees [sk ]
227
- _ , err := restoreTree .sql .WriteSnapshot (context .Background (), tree .Version (), exporter .Next , SnapshotOptions {WriteCheckpoint : true , TraverseOrder : traverseOrder })
228
- require .NoError (t , err )
229
- require .NoError (t , restoreTree .LoadSnapshot (tree .Version (), traverseOrder ))
230
- }
231
- require .NoError (t , restorePreOrderMt .Close ())
232
-
233
- t .Log ("export the tree at version 12,000 and import it into a sql db in post-order" )
234
- traverseOrder = PostOrder
235
- restorePostOrderMt := NewMultiTree (t .TempDir (), TreeOptions {CheckpointInterval : 4000 })
236
- for sk , tree := range multiTree .Trees {
237
- require .NoError (t , restorePostOrderMt .MountTree (sk ))
238
- exporter := tree .Export (traverseOrder )
239
-
240
- restoreTree := restorePostOrderMt .Trees [sk ]
241
- _ , err := restoreTree .sql .WriteSnapshot (context .Background (), tree .Version (), exporter .Next , SnapshotOptions {WriteCheckpoint : true , TraverseOrder : traverseOrder })
242
- require .NoError (t , err )
243
- require .NoError (t , restoreTree .LoadSnapshot (tree .Version (), traverseOrder ))
244
- }
245
- require .Equal (t , restorePostOrderMt .Hash (), restorePreOrderMt .Hash ())
246
-
247
- t .Log ("build tree to version 20,000 and verify hash" )
248
- require .NoError (t , opts .Iterator .Next ())
249
- require .Equal (t , int64 (12_001 ), opts .Iterator .Version ())
250
- opts .Until = 20_000
251
- opts .UntilHash = "25907b193c697903218d92fa70a87ef6cdd6fa5b9162d955a4d70a9d5d2c4824"
252
- testTreeBuild (t , restorePostOrderMt , opts )
253
- require .NoError (t , restorePostOrderMt .Close ())
254
219
}
255
220
256
221
// pre-requisites for the 2 tests below:
257
222
// $ go run ./cmd gen tree --db /tmp/iavl-v2 --limit 1 --type osmo-like-many
258
223
// $ go run ./cmd snapshot --db /tmp/iavl-v2 --version 1
259
224
// mkdir -p /tmp/osmo-like-many/v2 && go run ./cmd gen emit --start 2 --limit 5000 --type osmo-like-many --out /tmp/osmo-like-many/v2
260
225
func TestOsmoLike_HotStart (t * testing.T ) {
261
- tmpDir := "/tmp /iavl-v2"
262
- // logDir := "/tmp/ osmo-like-many- v2"
263
- logDir := "/Users/mattk/src/scratch/osmo-like-many/v2"
226
+ tmpDir := "/Users/mattk/.costor /iavl-v2"
227
+ logDir := "/Users/mattk/src/devmos/ osmo-like-many/ v2"
228
+
264
229
pool := NewNodePool ()
265
- multiTree , err := ImportMultiTree (pool , 1 , tmpDir , TreeOptions {HeightFilter : 0 , StateStorage : false })
230
+ multiTree , err := ImportMultiTree (pool , 1 , tmpDir , TreeOptions {
231
+ HeightFilter : 0 ,
232
+ StateStorage : false ,
233
+ CheckpointInterval : 1001 ,
234
+ })
266
235
require .NoError (t , err )
267
236
require .NotNil (t , multiTree )
268
237
opts := testutil .CompactedChangelogs (logDir )
269
238
opts .SampleRate = 250_000
270
239
271
- opts .Until = 1_000
272
- opts .UntilHash = "557663181d9ab97882ecfc6538e3b4cfe31cd805222fae905c4b4f4403ca5cda"
240
+ // opts.Until = 1_000
241
+ // opts.UntilHash = "557663181d9ab97882ecfc6538e3b4cfe31cd805222fae905c4b4f4403ca5cda"
242
+ opts .Until = 500
243
+ opts .UntilHash = "2670bd5767e70f2bf9e4f723b5f205759e39afdb5d8cfb6b54a4a3ecc27a1377"
273
244
274
245
testTreeBuild (t , multiTree , opts )
275
246
}
276
247
277
248
func TestOsmoLike_ColdStart (t * testing.T ) {
278
- tmpDir := "/tmp/iavl-v2"
249
+ tmpDir := "/Users/mattk/.costor/iavl-v2"
250
+ logDir := "/Users/mattk/src/devmos/osmo-like-many/v2"
279
251
280
252
treeOpts := DefaultTreeOptions ()
281
- treeOpts .CheckpointInterval = - 1
282
- treeOpts .CheckpointMemory = 1.5 * 1024 * 1024 * 1024
283
- treeOpts .StateStorage = false
253
+ treeOpts .CheckpointInterval = 50
254
+ // treeOpts.CheckpointMemory = 1.5 * 1024 * 1024 * 1024
255
+ treeOpts .StateStorage = true
284
256
treeOpts .HeightFilter = 1
285
- treeOpts .EvictionDepth = 16
257
+ // treeOpts.EvictionDepth = 22
286
258
treeOpts .MetricsProxy = newPrometheusMetricsProxy ()
287
259
multiTree := NewMultiTree (tmpDir , treeOpts )
288
260
require .NoError (t , multiTree .MountTrees ())
289
261
require .NoError (t , multiTree .LoadVersion (1 ))
290
- // require.NoError(t, multiTree.WarmLeaves())
262
+ require .NoError (t , multiTree .WarmLeaves ())
291
263
292
- // logDir := "/tmp/osmo-like-many-v2"
293
- opts := testutil .CompactedChangelogs ("/Users/mattk/src/scratch/osmo-like-many/v2" )
264
+ opts := testutil .CompactedChangelogs (logDir )
294
265
opts .SampleRate = 250_000
295
266
296
- opts .Until = 1_000
297
- opts .UntilHash = "557663181d9ab97882ecfc6538e3b4cfe31cd805222fae905c4b4f4403ca5cda"
267
+ // opts.Until = 1_000
268
+ // opts.UntilHash = "557663181d9ab97882ecfc6538e3b4cfe31cd805222fae905c4b4f4403ca5cda"
269
+ opts .Until = 500
270
+ opts .UntilHash = "2670bd5767e70f2bf9e4f723b5f205759e39afdb5d8cfb6b54a4a3ecc27a1377"
298
271
299
272
testTreeBuild (t , multiTree , opts )
300
273
}
0 commit comments