MCPcopy
hub / github.com/dgraph-io/badger / TestPartialAppendToValueLog

Function TestPartialAppendToValueLog

value_test.go:586–658  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

584}
585
586func TestPartialAppendToValueLog(t *testing.T) {
587 dir, err := ioutil.TempDir("", "badger-test")
588 require.NoError(t, err)
589 defer removeDir(dir)
590
591 // Create skeleton files.
592 opts := getTestOptions(dir)
593 opts.Truncate = true
594 opts.ValueLogFileSize = 100 * 1024 * 1024 // 100Mb
595 opts.ValueThreshold = 32
596 kv, err := Open(opts)
597 require.NoError(t, err)
598 require.NoError(t, kv.Close())
599
600 var (
601 k0 = []byte("k0")
602 k1 = []byte("k1")
603 k2 = []byte("k2")
604 k3 = []byte("k3")
605 v0 = []byte("value0-01234567890123456789012012345678901234567890123")
606 v1 = []byte("value1-01234567890123456789012012345678901234567890123")
607 v2 = []byte("value2-01234567890123456789012012345678901234567890123")
608 v3 = []byte("value3-01234567890123456789012012345678901234567890123")
609 )
610 // Values need to be long enough to actually get written to value log.
611 require.True(t, len(v3) >= kv.opt.ValueThreshold)
612
613 // Create truncated vlog to simulate a partial append.
614 // k0 - single transaction, k1 and k2 in another transaction
615 buf := createVlog(t, []*Entry{
616 {Key: k0, Value: v0},
617 {Key: k1, Value: v1},
618 {Key: k2, Value: v2},
619 })
620 buf = buf[:len(buf)-6]
621 require.NoError(t, ioutil.WriteFile(vlogFilePath(dir, 0), buf, 0777))
622
623 // Badger should now start up
624 kv, err = Open(opts)
625 require.NoError(t, err)
626
627 require.NoError(t, kv.View(func(txn *Txn) error {
628 item, err := txn.Get(k0)
629 require.NoError(t, err)
630 require.Equal(t, v0, getItemValue(t, item))
631
632 _, err = txn.Get(k1)
633 require.Equal(t, ErrKeyNotFound, err)
634 _, err = txn.Get(k2)
635 require.Equal(t, ErrKeyNotFound, err)
636 return nil
637 }))
638
639 // When K3 is set, it should be persisted after a restart.
640 txnSet(t, kv, k3, v3, 0)
641 require.NoError(t, kv.Close())
642 kv, err = Open(opts)
643 require.NoError(t, err)

Callers

nothing calls this directly

Calls 14

removeDirFunction · 0.85
getTestOptionsFunction · 0.85
OpenFunction · 0.85
createVlogFunction · 0.85
vlogFilePathFunction · 0.85
getItemValueFunction · 0.85
txnSetFunction · 0.85
checkKeysFunction · 0.85
ViewMethod · 0.80
replayFunctionMethod · 0.80
CloseMethod · 0.65
GetMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…