feat(vlog): making vlog threshold dynamic 6ce3b7c (#1635)
diff --git a/value_test.go b/value_test.go
index ff10e3b..a05ec5b 100644
--- a/value_test.go
+++ b/value_test.go
@@ -33,6 +33,47 @@
"github.com/stretchr/testify/require"
)
+func TestDynamicValueThreshold(t *testing.T) {
+ dir, err := ioutil.TempDir("", "badger-test")
+ y.Check(err)
+ defer removeDir(dir)
+ kv, _ := Open(getTestOptions(dir).WithValueThreshold(32).WithVLogPercentile(0.99))
+ defer kv.Close()
+ log := &kv.vlog
+ for vl := 32; vl <= 1024; vl = vl + 4 {
+ for i := 0; i < 1000; i++ {
+ val := make([]byte, vl)
+ y.Check2(rand.Read(val))
+ e1 := &Entry{
+ Key: []byte(fmt.Sprintf("samplekey_%d_%d", vl, i)),
+ Value: val,
+ meta: bitValuePointer,
+ }
+ b := new(request)
+ b.Entries = []*Entry{e1}
+ log.write([]*request{b})
+ }
+ t.Logf("value threshold is %d \n", log.db.valueThreshold())
+ }
+
+ for vl := 511; vl >= 31; vl = vl - 4 {
+ for i := 0; i < 5000; i++ {
+ val := make([]byte, vl)
+ y.Check2(rand.Read(val))
+ e1 := &Entry{
+ Key: []byte(fmt.Sprintf("samplekey_%d_%d", vl, i)),
+ Value: val,
+ meta: bitValuePointer,
+ }
+ b := new(request)
+ b.Entries = []*Entry{e1}
+ log.write([]*request{b})
+ }
+ t.Logf("value threshold is %d \n", log.db.valueThreshold())
+ }
+ require.Equal(t, log.db.valueThreshold(), int64(995))
+}
+
func TestValueBasic(t *testing.T) {
dir, err := ioutil.TempDir("", "badger-test")
y.Check(err)
@@ -45,7 +86,7 @@
// Use value big enough that the value log writes them even if SyncWrites is false.
const val1 = "sampleval012345678901234567890123"
const val2 = "samplevalb012345678901234567890123"
- require.True(t, len(val1) >= kv.opt.ValueThreshold)
+ require.True(t, int64(len(val1)) >= kv.vlog.db.valueThreshold())
e1 := &Entry{
Key: []byte("samplekey"),
@@ -595,7 +636,7 @@
v3 = []byte("value3-01234567890123456789012012345678901234567890123")
)
// Values need to be long enough to actually get written to value log.
- require.True(t, len(v3) >= kv.opt.ValueThreshold)
+ require.True(t, int64(len(v3)) >= kv.vlog.db.valueThreshold())
// Create truncated vlog to simulate a partial append.
// k0 - single transaction, k1 and k2 in another transaction
@@ -1029,7 +1070,7 @@
db, err := Open(opt)
require.NoError(t, err)
- require.Greater(t, len(v), db.opt.ValueThreshold)
+ require.Greater(t, int64(len(v)), db.vlog.db.valueThreshold())
txnSet(t, db, k, v, 0)
require.NoError(t, db.Close())
@@ -1058,7 +1099,7 @@
db, err := Open(opt)
require.NoError(t, err)
- require.Greater(t, len(v), db.opt.ValueThreshold)
+ require.Greater(t, int64(len(v)), db.vlog.db.valueThreshold())
txnSet(t, db, k, v, 0)
path := db.vlog.fpath(1)