Skip to content

Commit b1da814

Browse files
committed
Add sleep after runtime.GC() to allow GC to complete
1 parent cf6d253 commit b1da814

File tree

1 file changed

+41
-17
lines changed

1 file changed

+41
-17
lines changed

internal/api/memory_test.go

+41-17
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,8 @@ func TestMemoryLeakScenarios(t *testing.T) {
167167

168168
key := []byte("key1")
169169
val := []byte("value1")
170-
db.Set(key, val)
170+
err := db.Set(key, val)
171+
require.NoError(t, err)
171172

172173
iter, err := db.Iterator([]byte("key1"), []byte("zzzz"))
173174
require.NoError(t, err)
@@ -179,7 +180,8 @@ func TestMemoryLeakScenarios(t *testing.T) {
179180

180181
writeDone := make(chan error, 1)
181182
go func() {
182-
db.Set([]byte("key2"), []byte("value2"))
183+
err := db.Set([]byte("key2"), []byte("value2"))
184+
require.NoError(t, err)
183185
writeDone <- nil
184186
}()
185187

@@ -198,8 +200,10 @@ func TestMemoryLeakScenarios(t *testing.T) {
198200
db := testdb.NewMemDB()
199201
defer db.Close()
200202

201-
db.Set([]byte("a"), []byte("value-a"))
202-
db.Set([]byte("b"), []byte("value-b"))
203+
err := db.Set([]byte("a"), []byte("value-a"))
204+
require.NoError(t, err)
205+
err = db.Set([]byte("b"), []byte("value-b"))
206+
require.NoError(t, err)
203207

204208
iter, err := db.Iterator([]byte("a"), []byte("z"))
205209
require.NoError(t, err)
@@ -211,7 +215,8 @@ func TestMemoryLeakScenarios(t *testing.T) {
211215
}
212216
require.NoError(t, iter.Close(), "closing iterator should succeed")
213217

214-
db.Set([]byte("c"), []byte("value-c"))
218+
err = db.Set([]byte("c"), []byte("value-c"))
219+
require.NoError(t, err)
215220
},
216221
},
217222
{
@@ -254,6 +259,9 @@ func TestMemoryLeakScenarios(t *testing.T) {
254259
ReleaseCache(c)
255260
}
256261
runtime.GC()
262+
// Wait to allow GC to complete.
263+
time.Sleep(5 * time.Second)
264+
257265
allocAfterRelease := getAlloc()
258266

259267
require.Less(t, allocAfterRelease, baseAlloc*2,
@@ -271,7 +279,8 @@ func TestMemoryLeakScenarios(t *testing.T) {
271279

272280
keys := [][]byte{[]byte("a"), []byte("b"), []byte("c")}
273281
for _, k := range keys {
274-
db.Set(k, []byte("val:"+string(k)))
282+
err := db.Set(k, []byte("val:"+string(k)))
283+
require.NoError(t, err)
275284
}
276285

277286
subCases := []struct {
@@ -331,7 +340,8 @@ func TestStressHighVolumeInsert(t *testing.T) {
331340

332341
for i := 0; i < totalInserts; i++ {
333342
key := []byte(fmt.Sprintf("key_%d", i))
334-
db.Set(key, []byte("value"))
343+
err := db.Set(key, []byte("value"))
344+
require.NoError(t, err)
335345
}
336346
runtime.GC()
337347
runtime.ReadMemStats(&mEnd)
@@ -353,7 +363,8 @@ func TestBulkDeletionMemoryRecovery(t *testing.T) {
353363
for i := 0; i < totalInserts; i++ {
354364
key := []byte(fmt.Sprintf("bulk_key_%d", i))
355365
keys[i] = key
356-
db.Set(key, []byte("bulk_value"))
366+
err := db.Set(key, []byte("bulk_value"))
367+
require.NoError(t, err)
357368
}
358369
runtime.GC()
359370
var mBefore runtime.MemStats
@@ -383,7 +394,8 @@ func TestPeakMemoryTracking(t *testing.T) {
383394
var m runtime.MemStats
384395
for i := 0; i < totalOps; i++ {
385396
key := []byte(fmt.Sprintf("peak_key_%d", i))
386-
db.Set(key, []byte("peak_value"))
397+
err := db.Set(key, []byte("peak_value"))
398+
require.NoError(t, err)
387399
if i%1000 == 0 {
388400
runtime.GC()
389401
runtime.ReadMemStats(&m)
@@ -411,7 +423,8 @@ func TestRepeatedCreateDestroyCycles(t *testing.T) {
411423
runtime.ReadMemStats(&mStart)
412424
for i := 0; i < cycles; i++ {
413425
db := testdb.NewMemDB()
414-
db.Set([]byte("cycle_key"), []byte("cycle_value"))
426+
err := db.Set([]byte("cycle_key"), []byte("cycle_value"))
427+
require.NoError(t, err)
415428
db.Close()
416429
}
417430
runtime.GC()
@@ -460,7 +473,8 @@ func TestConcurrentAccess(t *testing.T) {
460473
defer wg.Done()
461474
for j := 0; j < opsPerGoroutine; j++ {
462475
key := []byte(fmt.Sprintf("concurrent_key_%d_%d", id, j))
463-
db.Set(key, []byte("concurrent_value"))
476+
err := db.Set(key, []byte("concurrent_value"))
477+
require.NoError(t, err)
464478
}
465479
}(i)
466480
}
@@ -503,7 +517,8 @@ func TestLockingAndRelease(t *testing.T) {
503517
db := testdb.NewMemDB()
504518
defer db.Close()
505519

506-
db.Set([]byte("conflict_key"), []byte("initial"))
520+
err := db.Set([]byte("conflict_key"), []byte("initial"))
521+
require.NoError(t, err)
507522

508523
ready := make(chan struct{})
509524
release := make(chan struct{})
@@ -519,7 +534,8 @@ func TestLockingAndRelease(t *testing.T) {
519534
<-ready
520535
done := make(chan struct{})
521536
go func() {
522-
db.Set([]byte("conflict_key"), []byte("updated"))
537+
err := db.Set([]byte("conflict_key"), []byte("updated"))
538+
require.NoError(t, err)
523539
close(done)
524540
}()
525541

@@ -553,7 +569,8 @@ func TestLongRunningWorkload(t *testing.T) {
553569

554570
for i := 0; i < iterations; i++ {
555571
key := []byte(fmt.Sprintf("workload_key_%d", i))
556-
db.Set(key, []byte("workload_value"))
572+
err := db.Set(key, []byte("workload_value"))
573+
require.NoError(t, err)
557574
if i%2 == 0 {
558575
db.Delete(key)
559576
}
@@ -590,6 +607,10 @@ func TestMemoryMetrics(t *testing.T) {
590607
_ = make([]byte, 128)
591608
}
592609
runtime.GC()
610+
611+
// Wait a moment to allow GC to complete.
612+
time.Sleep(5 * time.Second)
613+
593614
runtime.ReadMemStats(&mAfter)
594615
t.Logf("Mallocs: before=%d, after=%d, diff=%d", mBefore.Mallocs, mAfter.Mallocs, mAfter.Mallocs-mBefore.Mallocs)
595616
t.Logf("Frees: before=%d, after=%d, diff=%d", mBefore.Frees, mAfter.Frees, mAfter.Frees-mBefore.Frees)
@@ -620,7 +641,8 @@ func TestRandomMemoryAccessPatterns(t *testing.T) {
620641
for j := 0; j < ops; j++ {
621642
if j%2 == 0 {
622643
key := []byte(fmt.Sprintf("rand_key_%d_%d", seed, j))
623-
db.Set(key, []byte("rand_value"))
644+
err := db.Set(key, []byte("rand_value"))
645+
require.NoError(t, err)
624646
} else {
625647
// Randomly delete some keys.
626648
key := []byte(fmt.Sprintf("rand_key_%d_%d", seed, j-1))
@@ -824,7 +846,8 @@ func TestWasmIteratorMemoryLeaks(t *testing.T) {
824846

825847
// Populate DB with data
826848
for i := 0; i < 1000; i++ {
827-
db.Set([]byte(fmt.Sprintf("key%d", i)), []byte(fmt.Sprintf("val%d", i)))
849+
err := db.Set([]byte(fmt.Sprintf("key%d", i)), []byte(fmt.Sprintf("val%d", i)))
850+
require.NoError(t, err)
828851
}
829852

830853
gasMeter := NewMockGasMeter(100000000)
@@ -917,7 +940,8 @@ func TestWasmLongRunningMemoryStability(t *testing.T) {
917940
&igasMeter, store, api, &querier, 100000000, false)
918941
require.NoError(t, err)
919942
case 2:
920-
db.Set([]byte(fmt.Sprintf("key%d", i)), []byte("value"))
943+
err := db.Set([]byte(fmt.Sprintf("key%d", i)), []byte("value"))
944+
require.NoError(t, err)
921945
_, _, err = Execute(cache, checksum, env, info, []byte(`{"release":{}}`),
922946
&igasMeter, store, api, &querier, 100000000, false)
923947
require.NoError(t, err)

0 commit comments

Comments
 (0)