github.com/treeverse/lakefs@v1.24.1-0.20240520134607-95648127bfb0/pkg/kv/local/driver.go (about) 1 package local 2 3 import ( 4 "context" 5 "fmt" 6 "sync" 7 8 "github.com/dgraph-io/badger/v4" 9 "github.com/treeverse/lakefs/pkg/kv" 10 "github.com/treeverse/lakefs/pkg/kv/kvparams" 11 "github.com/treeverse/lakefs/pkg/logging" 12 ) 13 14 const ( 15 DriverName = "local" 16 ) 17 18 var ( 19 driverLock = &sync.Mutex{} 20 dbMap = make(map[string]*Store) 21 ) 22 23 type Driver struct{} 24 25 func (d *Driver) Open(ctx context.Context, kvParams kvparams.Config) (kv.Store, error) { 26 params := kvParams.Local 27 if params == nil { 28 return nil, fmt.Errorf("missing %s settings: %w", DriverName, kv.ErrDriverConfiguration) 29 } 30 31 driverLock.Lock() 32 defer driverLock.Unlock() 33 connection, ok := dbMap[params.Path] 34 if !ok { 35 // no database open for this path 36 var logger logging.Logger = logging.DummyLogger{} 37 if params.EnableLogging { 38 logger = logging.FromContext(ctx).WithField("store", "local") 39 } 40 opts := badger.DefaultOptions(params.Path) 41 opts.Logger = &BadgerLogger{logger} 42 db, err := badger.Open(opts) 43 if err != nil { 44 return nil, err 45 } 46 connection = &Store{ 47 db: db, 48 logger: logger, 49 prefetchSize: params.PrefetchSize, 50 path: params.Path, 51 } 52 dbMap[params.Path] = connection 53 } 54 connection.refCount++ 55 return connection, nil 56 } 57 58 //nolint:gochecknoinits 59 func init() { 60 kv.Register(DriverName, &Driver{}) 61 }