123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- // Copyright 2016 ego authors
- //
- // Licensed under the Apache License, Version 2.0 (the "License"): you may
- // not use this file except in compliance with the License. You may obtain
- // a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- // License for the specific language governing permissions and limitations
- // under the License.
- package store
- import (
- "fmt"
- "os"
- )
- const (
- // DefaultStore default store engine
- DefaultStore = "ldb"
- // DefaultStore = "bad"
- // DefaultStore = "bolt"
- )
- var supportedStore = map[string]func(path string) (Store, error){
- "ldb": OpenLeveldb,
- "bg": OpenBadger, // bad to bg
- "bolt": OpenBolt,
- // "kv": OpenKV,
- // "ledisdb": Open,
- }
- // RegisterStore register store engine
- func RegisterStore(name string, fn func(path string) (Store, error)) {
- supportedStore[name] = fn
- }
- // Store is store interface
- type Store interface {
- // type KVBatch interface {
- Set(k, v []byte) error
- Get(k []byte) ([]byte, error)
- Delete(k []byte) error
- Has(k []byte) (bool, error)
- ForEach(fn func(k, v []byte) error) error
- Close() error
- WALName() string
- }
- // OpenStore open store engine
- func OpenStore(path string, args ...string) (Store, error) {
- storeName := DefaultStore
- if len(args) > 0 && args[0] != "" {
- storeName = args[0]
- } else {
- storeEnv := os.Getenv("Riot_Store_Engine")
- if storeEnv != "" {
- storeName = storeEnv
- }
- }
- if fn, has := supportedStore[storeName]; has {
- return fn(path)
- }
- return nil, fmt.Errorf("unsupported store engine: %v", storeName)
- }
|