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)