File
Blob: cmd/server/kv_provider.go
| 1 | package server |
| 2 | |
| 3 | import ( |
| 4 | "fmt" |
| 5 | "time" |
| 6 | |
| 7 | "go.miragespace.co/specter/kv/aof" |
| 8 | "go.miragespace.co/specter/kv/memory" |
| 9 | "go.miragespace.co/specter/kv/sqlite3" |
| 10 | "go.miragespace.co/specter/spec/chord" |
| 11 | |
| 12 | "go.uber.org/zap" |
| 13 | ) |
| 14 | |
| 15 | func noop() {} |
| 16 | |
| 17 | func getKVProvider(logger *zap.Logger, option string, datadir string, cachedir string) (chord.KVProvider, func(), error) { |
| 18 | switch option { |
| 19 | case "memory": |
| 20 | kv := memory.WithHashFn(chord.Hash) |
| 21 | logger.Warn("Using memory as storage backend without persistence") |
| 22 | return kv, noop, nil |
| 23 | case "aof": |
| 24 | kv, err := aof.New(aof.Config{ |
| 25 | Logger: logger, |
| 26 | HasnFn: chord.Hash, |
| 27 | DataDir: datadir, |
| 28 | FlushInterval: time.Second * 3, |
| 29 | }) |
| 30 | if err != nil { |
| 31 | return nil, nil, err |
| 32 | } |
| 33 | go kv.Start() |
| 34 | logger.Info("Using Append-only File backed memory storage backend") |
| 35 | return kv, kv.Stop, nil |
| 36 | case "sqlite": |
| 37 | if err := sqlite3.Initialize(cachedir); err != nil { |
| 38 | return nil, nil, fmt.Errorf("initializing sqlite3 dependency: %w", err) |
| 39 | } |
| 40 | kv, err := sqlite3.New(sqlite3.Config{ |
| 41 | Logger: logger, |
| 42 | HashFn: chord.Hash, |
| 43 | DataDir: datadir, |
| 44 | }) |
| 45 | if err != nil { |
| 46 | return nil, nil, err |
| 47 | } |
| 48 | logger.Info("Using SQLite storage backend") |
| 49 | return kv, kv.Close, nil |
| 50 | default: |
| 51 | return nil, nil, fmt.Errorf("unknown kv provider: %s", option) |
| 52 | } |
| 53 | } |