0
0

configurable mossStoreOptions and DeferredSort defaults to true

This commit is contained in:
Steve Yen 2016-06-07 17:38:43 -07:00
parent 92cf2a8974
commit 4e531ae11b
2 changed files with 29 additions and 17 deletions

View File

@ -15,6 +15,7 @@
package moss
import (
"encoding/json"
"fmt"
"os"
"sync"
@ -26,12 +27,11 @@ import (
)
func initLowerLevelStore(
mo store.MergeOperator,
config map[string]interface{},
lowerLevelStoreName string,
lowerLevelStoreConfig map[string]interface{},
lowerLevelMaxBatchSize uint64,
logf func(format string, a ...interface{}),
options moss.CollectionOptions,
) (moss.Snapshot, moss.LowerLevelUpdate, store.KVStore, error) {
if lowerLevelStoreConfig == nil {
lowerLevelStoreConfig = map[string]interface{}{}
@ -45,7 +45,7 @@ func initLowerLevelStore(
}
if lowerLevelStoreName == "mossStore" {
return InitMossStore(mo, lowerLevelStoreConfig)
return InitMossStore(lowerLevelStoreConfig, options)
}
constructor := registry.KVStoreConstructorByName(lowerLevelStoreName)
@ -54,7 +54,7 @@ func initLowerLevelStore(
" could not find lower level store: %s", lowerLevelStoreName)
}
kvStore, err := constructor(mo, lowerLevelStoreConfig)
kvStore, err := constructor(options.MergeOperator, lowerLevelStoreConfig)
if err != nil {
return nil, nil, nil, err
}
@ -64,7 +64,7 @@ func initLowerLevelStore(
config: config,
llConfig: lowerLevelStoreConfig,
kvStore: kvStore,
logf: logf,
logf: options.Log,
}
llUpdate := func(ssHigher moss.Snapshot) (ssLower moss.Snapshot, err error) {
@ -409,7 +409,7 @@ func (lli *llIterator) CurrentEx() (
// ------------------------------------------------
func InitMossStore(mo store.MergeOperator, config map[string]interface{}) (
func InitMossStore(config map[string]interface{}, options moss.CollectionOptions) (
moss.Snapshot, moss.LowerLevelUpdate, store.KVStore, error) {
path, ok := config["path"].(string)
if !ok {
@ -422,12 +422,23 @@ func InitMossStore(mo store.MergeOperator, config map[string]interface{}) (
path, err)
}
s, err := moss.OpenStore(path, moss.StoreOptions{ // TODO: more options.
CollectionOptions: moss.CollectionOptions{
MergeOperator: mo,
},
CompactionPercentage: 0.0,
})
storeOptions := moss.StoreOptions{
CollectionOptions: options,
}
v, ok := config["mossStoreOptions"]
if ok {
b, err := json.Marshal(v) // Convert from map[string]interface{}.
if err != nil {
return nil, nil, nil, err
}
err = json.Unmarshal(b, &storeOptions)
if err != nil {
return nil, nil, nil, err
}
}
s, err := moss.OpenStore(path, storeOptions)
if err != nil {
return nil, nil, nil, fmt.Errorf("lower: moss.OpenStore, path: %s, err: %v",
path, err)
@ -443,7 +454,7 @@ func InitMossStore(mo store.MergeOperator, config map[string]interface{}) (
return nil, err
}
sw.AddRef() // Ref-count to be owned bysnapshot wrapper.
sw.AddRef() // Ref-count to be owned by snapshot wrapper.
return moss.NewSnapshotWrapper(ss, sw), nil
}

View File

@ -65,6 +65,9 @@ func New(mo store.MergeOperator, config map[string]interface{}) (
}
}
options.MergeOperator = mo
options.DeferredSort = true
v, ok = config["mossCollectionOptions"]
if ok {
b, err := json.Marshal(v) // Convert from map[string]interface{}.
@ -125,11 +128,11 @@ func New(mo store.MergeOperator, config map[string]interface{}) (
}
lowerLevelInit, lowerLevelUpdate, lowerLevelStore, err :=
initLowerLevelStore(mo, config,
initLowerLevelStore(config,
mossLowerLevelStoreName,
mossLowerLevelStoreConfig,
mossLowerLevelMaxBatchSize,
options.Log)
options)
if err != nil {
return nil, err
}
@ -141,8 +144,6 @@ func New(mo store.MergeOperator, config map[string]interface{}) (
// --------------------------------------------------
options.MergeOperator = mo
ms, err := moss.NewCollection(options)
if err != nil {
return nil, err