-
Notifications
You must be signed in to change notification settings - Fork 151
Expand file tree
/
Copy pathdbs.go
More file actions
101 lines (87 loc) · 3.3 KB
/
Copy pathdbs.go
File metadata and controls
101 lines (87 loc) · 3.3 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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package storage
import (
"fmt"
"path/filepath"
cometbftDB "github.com/cometbft/cometbft-db"
cmtCfg "github.com/cometbft/cometbft/config"
cmtState "github.com/cometbft/cometbft/state"
"github.com/cometbft/cometbft/store"
"github.com/oasisprotocol/oasis-core/go/common"
"github.com/oasisprotocol/oasis-core/go/config"
"github.com/oasisprotocol/oasis-core/go/consensus/cometbft/abci"
cmtCommon "github.com/oasisprotocol/oasis-core/go/consensus/cometbft/common"
cmtDB "github.com/oasisprotocol/oasis-core/go/consensus/cometbft/db"
runtimeConfig "github.com/oasisprotocol/oasis-core/go/runtime/config"
"github.com/oasisprotocol/oasis-core/go/runtime/history"
"github.com/oasisprotocol/oasis-core/go/storage/api"
"github.com/oasisprotocol/oasis-core/go/worker/storage"
)
func openConsensusNodeDB(dataDir string) (api.NodeDB, func(), error) {
ldb, ndb, _, err := abci.InitStateStorage(
&abci.ApplicationConfig{
DataDir: filepath.Join(dataDir, cmtCommon.StateDir),
StorageBackend: config.GlobalConfig.Storage.Backend,
MemoryOnlyStorage: false,
ReadOnlyStorage: false,
DisableCheckpointer: true,
},
)
if err != nil {
return nil, nil, fmt.Errorf("failed to initialize ABCI storage backend: %w", err)
}
// Close and Cleanup both only close NodeDB. Still closing both explicitly,
// to prevent resource leaks if things change in the future.
close := func() {
ndb.Close()
ldb.Cleanup()
}
return ndb, close, nil
}
func openConsensusBlockstoreDB(dataDir string) (cometbftDB.DB, error) {
cmtConfig := cmtCfg.DefaultConfig()
cmtConfig.SetRoot(filepath.Join(dataDir, cmtCommon.StateDir))
dbProvider, err := cmtDB.Provider()
if err != nil {
return nil, fmt.Errorf("failed to obtain db provider: %w", err)
}
return cmtDB.OpenBlockstoreDB(dbProvider, cmtConfig)
}
func openConsensusBlockstore(dataDir string) (*store.BlockStore, error) {
blockstoreDB, err := openConsensusBlockstoreDB(dataDir)
if err != nil {
return nil, fmt.Errorf("failed to open blockstore: %w", err)
}
return store.NewBlockStore(blockstoreDB), nil
}
func openConsensusStateDB(dataDir string) (cometbftDB.DB, error) {
cmtConfig := cmtCfg.DefaultConfig()
cmtConfig.SetRoot(filepath.Join(dataDir, cmtCommon.StateDir))
dbProvider, err := cmtDB.Provider()
if err != nil {
return nil, fmt.Errorf("failed to obtain db provider: %w", err)
}
return cmtDB.OpenStateDB(dbProvider, cmtConfig)
}
func openConsensusStatestore(dataDir string) (cmtState.Store, error) {
stateDB, err := openConsensusStateDB(dataDir)
if err != nil {
return nil, fmt.Errorf("failed to open state db: %w", err)
}
return cmtDB.OpenStateStore(stateDB), nil
}
func openRuntimeStateDB(dataDir string, runtimeID common.Namespace) (api.NodeDB, error) {
rtDir := runtimeConfig.GetRuntimeStateDir(dataDir, runtimeID)
backend, err := storage.NewLocalBackend(rtDir, runtimeID)
if err != nil {
return nil, fmt.Errorf("failed to open storage backend (runtimeID: %s): %w", runtimeID, err)
}
return backend.NodeDB(), err
}
func openRuntimeLightHistory(dataDir string, rt common.Namespace) (history.History, error) {
rtDir := runtimeConfig.GetRuntimeStateDir(dataDir, rt)
history, err := history.New(rt, rtDir, history.NewNonePrunerFactory(), true)
if err != nil {
return nil, fmt.Errorf("failed to open new light history: %w", err)
}
return history, nil
}