-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsetup_versiondb.go
More file actions
82 lines (66 loc) · 2.03 KB
/
Copy pathsetup_versiondb.go
File metadata and controls
82 lines (66 loc) · 2.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
//go:build rocksdb
package store
import (
"os"
"path/filepath"
storetypes "cosmossdk.io/store/types"
servertypes "github.com/cosmos/cosmos-sdk/server/types"
"github.com/initia-labs/store/config"
"github.com/initia-labs/store/types"
"github.com/initia-labs/store/versiondb"
"github.com/initia-labs/store/versiondb/tsrocksdb"
)
// SetupVersionDB sets up the versiondb multi-store if enabled in app options.
func SetupVersionDB(
app types.App,
streamingManager *storetypes.StreamingManager,
appOpts servertypes.AppOptions,
) error {
if config := config.GetVersionDBConfig(appOpts); config.Enable {
dataDir := filepath.Join(getDBDir(appOpts), "versiondb")
if err := os.MkdirAll(dataDir, os.ModePerm); err != nil {
return err
}
versionDB, err := tsrocksdb.NewStore(dataDir)
if err != nil {
return err
}
cms := app.CommitMultiStore()
cmsVersion := cms.LatestVersion()
qmsVersion, err := versionDB.GetLatestVersion()
if err != nil {
return err
}
if cmsVersion > 0 && cmsVersion < qmsVersion {
app.Logger().Info(
"versiondb is ahead of commit multi store, resetting versiondb to match",
"versiondb_version", qmsVersion,
"commit_multi_store_version", cmsVersion,
)
versionDB.Close()
versionDB, err = tsrocksdb.NewStoreAtVersion(dataDir, cmsVersion)
if err != nil {
return err
}
}
keys := app.GetKVStoreKey()
tkeys := app.GetTransientStoreKey()
// always listen for all keys to simplify configuration
exposedKeys := make([]storetypes.StoreKey, 0, len(keys))
for _, key := range keys {
exposedKeys = append(exposedKeys, key)
}
cms.AddListeners(exposedKeys)
// register in app streaming manager
streamingManager.ABCIListeners = append(streamingManager.ABCIListeners,
versiondb.NewStreamingService(versionDB),
)
delegatedStoreKeys := make(map[storetypes.StoreKey]struct{})
for _, k := range tkeys {
delegatedStoreKeys[k] = struct{}{}
}
app.SetQueryMultiStore(versiondb.NewMultiStore(cms, versionDB, keys, delegatedStoreKeys))
return nil
}
return nil
}