Skip to content
File

Blob: cmd/server/kv_provider.go

go54 lines
1package server
2 
3import (
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 
15func noop() {}
16 
17func 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}