0
0

added configurable options to leveldb

This commit is contained in:
Marty Schoch 2015-01-13 16:24:51 -05:00
parent d6e6f655c9
commit 362d240b09
3 changed files with 66 additions and 27 deletions

View File

@ -29,15 +29,13 @@ type Store struct {
writer sync.Mutex
}
func Open(path string, createIfMissing bool, errorIfExists bool) (*Store, error) {
func Open(path string, config map[string]interface{}) (*Store, error) {
rv := Store{
path: path,
opts: levigo.NewOptions(),
}
opts := levigo.NewOptions()
opts.SetCreateIfMissing(createIfMissing)
opts.SetErrorIfExists(errorIfExists)
rv.opts = opts
applyConfig(rv.opts, config)
var err error
rv.db, err = levigo.Open(rv.path, rv.opts)
@ -118,19 +116,52 @@ func StoreConstructor(config map[string]interface{}) (store.KVStore, error) {
if !ok {
return nil, fmt.Errorf("must specify path")
}
createIfMissing := false
cim, ok := config["create_if_missing"].(bool)
if ok {
createIfMissing = cim
}
errorIfExists := true
eie, ok := config["error_if_exists"].(bool)
if ok {
errorIfExists = eie
}
return Open(path, createIfMissing, errorIfExists)
return Open(path, config)
}
func init() {
registry.RegisterKVStore(Name, StoreConstructor)
}
func applyConfig(o *levigo.Options, config map[string]interface{}) (
*levigo.Options, error) {
cim, ok := config["create_if_missing"].(bool)
if ok {
o.SetCreateIfMissing(cim)
}
eie, ok := config["error_if_exists"].(bool)
if ok {
o.SetErrorIfExists(eie)
}
wbs, ok := config["write_buffer_size"].(float64)
if ok {
o.SetWriteBufferSize(int(wbs))
}
bs, ok := config["block_size"].(float64)
if ok {
o.SetBlockSize(int(bs))
}
bri, ok := config["block_restart_interval"].(float64)
if ok {
o.SetBlockRestartInterval(int(bri))
}
lcc, ok := config["lru_cache_capacity"].(float64)
if ok {
lruCache := levigo.NewLRUCache(int(lcc))
o.SetCache(lruCache)
}
bfbpk, ok := config["bloom_filter_bits_per_key"].(float64)
if ok {
bf := levigo.NewBloomFilter(int(bfbpk))
o.SetFilterPolicy(bf)
}
return o, nil
}

View File

@ -19,10 +19,14 @@ import (
"github.com/blevesearch/bleve/index/store"
)
var leveldbTestOptions = map[string]interface{}{
"create_if_missing": true,
}
func TestLevelDBStore(t *testing.T) {
defer os.RemoveAll("test")
s, err := Open("test", true, true)
s, err := Open("test", leveldbTestOptions)
if err != nil {
t.Fatal(err)
}
@ -34,7 +38,7 @@ func TestLevelDBStore(t *testing.T) {
func TestReaderIsolation(t *testing.T) {
defer os.RemoveAll("test")
s, err := Open("test", true, true)
s, err := Open("test", leveldbTestOptions)
if err != nil {
t.Fatal(err)
}

View File

@ -18,8 +18,12 @@ import (
"github.com/blevesearch/bleve/index/store/leveldb"
)
var leveldbTestOptions = map[string]interface{}{
"create_if_missing": true,
}
func BenchmarkLevelDBIndexing1Workers(b *testing.B) {
s, err := leveldb.Open("test", true, true)
s, err := leveldb.Open("test", leveldbTestOptions)
if err != nil {
b.Fatal(err)
}
@ -30,7 +34,7 @@ func BenchmarkLevelDBIndexing1Workers(b *testing.B) {
}
func BenchmarkLevelDBIndexing2Workers(b *testing.B) {
s, err := leveldb.Open("test", true, true)
s, err := leveldb.Open("test", leveldbTestOptions)
if err != nil {
b.Fatal(err)
}
@ -41,7 +45,7 @@ func BenchmarkLevelDBIndexing2Workers(b *testing.B) {
}
func BenchmarkLevelDBIndexing4Workers(b *testing.B) {
s, err := leveldb.Open("test", true, true)
s, err := leveldb.Open("test", leveldbTestOptions)
if err != nil {
b.Fatal(err)
}
@ -54,7 +58,7 @@ func BenchmarkLevelDBIndexing4Workers(b *testing.B) {
// batches
func BenchmarkLevelDBIndexing1Workers10Batch(b *testing.B) {
s, err := leveldb.Open("test", true, true)
s, err := leveldb.Open("test", leveldbTestOptions)
if err != nil {
b.Fatal(err)
}
@ -65,7 +69,7 @@ func BenchmarkLevelDBIndexing1Workers10Batch(b *testing.B) {
}
func BenchmarkLevelDBIndexing2Workers10Batch(b *testing.B) {
s, err := leveldb.Open("test", true, true)
s, err := leveldb.Open("test", leveldbTestOptions)
if err != nil {
b.Fatal(err)
}
@ -76,7 +80,7 @@ func BenchmarkLevelDBIndexing2Workers10Batch(b *testing.B) {
}
func BenchmarkLevelDBIndexing4Workers10Batch(b *testing.B) {
s, err := leveldb.Open("test", true, true)
s, err := leveldb.Open("test", leveldbTestOptions)
if err != nil {
b.Fatal(err)
}
@ -87,7 +91,7 @@ func BenchmarkLevelDBIndexing4Workers10Batch(b *testing.B) {
}
func BenchmarkLevelDBIndexing1Workers100Batch(b *testing.B) {
s, err := leveldb.Open("test", true, true)
s, err := leveldb.Open("test", leveldbTestOptions)
if err != nil {
b.Fatal(err)
}
@ -98,7 +102,7 @@ func BenchmarkLevelDBIndexing1Workers100Batch(b *testing.B) {
}
func BenchmarkLevelDBIndexing2Workers100Batch(b *testing.B) {
s, err := leveldb.Open("test", true, true)
s, err := leveldb.Open("test", leveldbTestOptions)
if err != nil {
b.Fatal(err)
}
@ -109,7 +113,7 @@ func BenchmarkLevelDBIndexing2Workers100Batch(b *testing.B) {
}
func BenchmarkLevelDBIndexing4Workers100Batch(b *testing.B) {
s, err := leveldb.Open("test", true, true)
s, err := leveldb.Open("test", leveldbTestOptions)
if err != nil {
b.Fatal(err)
}