added moss RegistryCollectionOptions
The moss RegistryCollectionOptions allows applications to register moss-related callback API functions and other advanced feature usage at process initialization time. For example, this could be used for moss's OnError(), OnEvent() and logging callback options.
This commit is contained in:
parent
57919a77f5
commit
76b9365928
@ -25,6 +25,10 @@ import (
|
|||||||
"github.com/blevesearch/bleve/registry"
|
"github.com/blevesearch/bleve/registry"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// RegistryCollectionOptions should be treated as read-only after
|
||||||
|
// process init()'ialization.
|
||||||
|
var RegistryCollectionOptions = map[string]moss.CollectionOptions{}
|
||||||
|
|
||||||
const Name = "moss"
|
const Name = "moss"
|
||||||
|
|
||||||
type Store struct {
|
type Store struct {
|
||||||
@ -36,47 +40,48 @@ type Store struct {
|
|||||||
s *stats
|
s *stats
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// New initializes a moss storage with values from the optional
|
||||||
|
// config["mossCollectionOptions"] (a JSON moss.CollectionOptions).
|
||||||
|
// Next, values from the RegistryCollectionOptions, named by the
|
||||||
|
// optional config["mossCollectionOptionsName"], take precedence.
|
||||||
|
// Finally, base case defaults are taken from
|
||||||
|
// moss.DefaultCollectionOptions.
|
||||||
func New(mo store.MergeOperator, config map[string]interface{}) (
|
func New(mo store.MergeOperator, config map[string]interface{}) (
|
||||||
store.KVStore, error) {
|
store.KVStore, error) {
|
||||||
return NewEx(mo, config, moss.CollectionOptions{})
|
options := moss.DefaultCollectionOptions // Copy.
|
||||||
}
|
|
||||||
|
|
||||||
func NewEx(mo store.MergeOperator, config map[string]interface{},
|
v, ok := config["mossCollectionOptionsName"]
|
||||||
options moss.CollectionOptions) (store.KVStore, error) {
|
|
||||||
debug := moss.DefaultCollectionOptions.Debug
|
|
||||||
v, ok := config["mossDebug"]
|
|
||||||
if ok {
|
if ok {
|
||||||
debugF, ok := v.(float64)
|
name, ok := v.(string)
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, fmt.Errorf("moss store,"+
|
return nil, fmt.Errorf("moss store,"+
|
||||||
" could not parse config[mossDebug]: %v", v)
|
" could not parse config[mossCollectionOptionsName]: %v", v)
|
||||||
}
|
}
|
||||||
|
|
||||||
debug = int(debugF)
|
options, ok = RegistryCollectionOptions[name] // Copy.
|
||||||
}
|
|
||||||
|
|
||||||
minMergePercentage := moss.DefaultCollectionOptions.MinMergePercentage
|
|
||||||
v, ok = config["mossMinMergePercentage"]
|
|
||||||
if ok {
|
|
||||||
minMergePercentage, ok = v.(float64)
|
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, fmt.Errorf("moss store,"+
|
return nil, fmt.Errorf("moss store,"+
|
||||||
" could not parse config[mossMinMergePercentage]: %v", v)
|
" could not find RegistryCollectionOptions, name: %s", name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
maxPreMergerBatches := moss.DefaultCollectionOptions.MaxPreMergerBatches
|
v, ok = config["mossCollectionOptions"]
|
||||||
v, ok = config["mossMaxPreMergerBatches"]
|
|
||||||
if ok {
|
if ok {
|
||||||
maxPreMergerBatchesF, ok := v.(float64)
|
b, err := json.Marshal(v) // Convert from map[string]interface{}.
|
||||||
if !ok {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("moss store,"+
|
return nil, fmt.Errorf("moss store,"+
|
||||||
" could not parse config[mossMaxPreMergerBatches]: %v", v)
|
" could not marshal config[mossCollectionOptions]: %v", v)
|
||||||
}
|
}
|
||||||
|
|
||||||
maxPreMergerBatches = int(maxPreMergerBatchesF)
|
err = json.Unmarshal(b, &options)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("moss store,"+
|
||||||
|
" could not unmarshal config[mossCollectionOptions]: %v", v)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------
|
||||||
|
|
||||||
mossLowerLevelStoreName := ""
|
mossLowerLevelStoreName := ""
|
||||||
v, ok = config["mossLowerLevelStoreName"]
|
v, ok = config["mossLowerLevelStoreName"]
|
||||||
if ok {
|
if ok {
|
||||||
@ -101,26 +106,6 @@ func NewEx(mo store.MergeOperator, config map[string]interface{},
|
|||||||
|
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
|
|
||||||
if options.MergeOperator == nil {
|
|
||||||
options.MergeOperator = mo
|
|
||||||
}
|
|
||||||
|
|
||||||
if options.MinMergePercentage <= 0 {
|
|
||||||
options.MinMergePercentage = minMergePercentage
|
|
||||||
}
|
|
||||||
|
|
||||||
if options.MaxPreMergerBatches <= 0 {
|
|
||||||
options.MaxPreMergerBatches = maxPreMergerBatches
|
|
||||||
}
|
|
||||||
|
|
||||||
if options.Debug <= 0 {
|
|
||||||
options.Debug = debug
|
|
||||||
}
|
|
||||||
|
|
||||||
if options.Log == nil {
|
|
||||||
options.Log = func(format string, a ...interface{}) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
var llStore store.KVStore
|
var llStore store.KVStore
|
||||||
if options.LowerLevelInit == nil &&
|
if options.LowerLevelInit == nil &&
|
||||||
options.LowerLevelUpdate == nil &&
|
options.LowerLevelUpdate == nil &&
|
||||||
@ -153,6 +138,8 @@ func NewEx(mo store.MergeOperator, config map[string]interface{},
|
|||||||
|
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
|
|
||||||
|
options.MergeOperator = mo
|
||||||
|
|
||||||
ms, err := moss.NewCollection(options)
|
ms, err := moss.NewCollection(options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
Loading…
Reference in New Issue
Block a user