Skip to content

Commit ddd1106

Browse files
committed
go/oasis-node/cmd/storage: Improve compact commands helpers
Make it symetric with the prune command helpers.
1 parent 3c92596 commit ddd1106

1 file changed

Lines changed: 47 additions & 59 deletions

File tree

go/oasis-node/cmd/storage/compact.go

Lines changed: 47 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,9 @@ import (
66
"path/filepath"
77
"strings"
88

9-
badgerDB "github.com/dgraph-io/badger/v4"
109
"github.com/spf13/cobra"
1110

12-
"github.com/oasisprotocol/oasis-core/go/common/logging"
11+
"github.com/oasisprotocol/oasis-core/go/common"
1312
cmtDBProvider "github.com/oasisprotocol/oasis-core/go/consensus/cometbft/db/badger"
1413
cmdCommon "github.com/oasisprotocol/oasis-core/go/oasis-node/cmd/common"
1514
"github.com/oasisprotocol/oasis-core/go/runtime/registry"
@@ -44,41 +43,16 @@ WARNING: Ensure you have at least as much of a free disk as your largest databas
4443

4544
logger.Info("Starting database compactions. This may take a while...")
4645

47-
// Compact CometBFT managed databases: block store, evidence and state (NOT application state).
48-
if err := compactCometDBs(dataDir); err != nil {
49-
return fmt.Errorf("failed to compact CometBFT managed databases: %w", err)
46+
if err := compactConsensusDBs(dataDir); err != nil {
47+
return fmt.Errorf("failed to compact consensus databases: %w", err)
5048
}
5149

52-
// Compact consensus NodeDB (application state).
53-
if err := compactConsensusNodeDB(dataDir); err != nil {
54-
return fmt.Errorf("failed to compact consensus NodeDB: %w", err)
55-
}
56-
57-
// Compact Runtime Databases (history and state DB).
5850
runtimes, err := registry.GetConfiguredRuntimeIDs()
5951
if err != nil {
6052
return fmt.Errorf("failed to get configured runtimes: %w", err)
6153
}
6254
for _, rt := range runtimes {
63-
if err := func() error {
64-
history, err := openRuntimeLightHistory(dataDir, rt)
65-
if err != nil {
66-
return fmt.Errorf("failed to open runtime history: %w", err)
67-
}
68-
defer history.Close()
69-
if err := history.Compact(); err != nil {
70-
return fmt.Errorf("failed to compact runtime history: %w", err)
71-
}
72-
ndb, err := openRuntimeStateDB(dataDir, rt)
73-
if err != nil {
74-
return fmt.Errorf("failed to open runtime state DB: %w", err)
75-
}
76-
defer ndb.Close()
77-
if err := ndb.Compact(); err != nil {
78-
return fmt.Errorf("failed to compact runtime state DB: %w", err)
79-
}
80-
return nil
81-
}(); err != nil {
55+
if err := compactRuntimeDBs(dataDir, rt); err != nil {
8256
return fmt.Errorf("failed to compact runtime dbs (runtime ID: %s): %w", rt, err)
8357
}
8458
}
@@ -90,35 +64,27 @@ WARNING: Ensure you have at least as much of a free disk as your largest databas
9064
return cmd
9165
}
9266

93-
func compactCometDBs(dataDir string) error {
94-
paths, err := findCometDBs(dataDir)
95-
if err != nil {
96-
return fmt.Errorf("failed to find database instances: %w", err)
97-
}
98-
for _, path := range paths {
99-
if err := compactCometDB(path); err != nil {
100-
return fmt.Errorf("failed to compact %s: %w", path, err)
101-
}
67+
func compactConsensusDBs(dataDir string) error {
68+
// Compact CometBFT managed databases: block store, evidence and state (NOT application state).
69+
if err := compactCometDBs(dataDir); err != nil {
70+
return fmt.Errorf("failed to compact CometBFT managed databases: %w", err)
10271
}
103-
return nil
104-
}
10572

106-
func compactCometDB(path string) error {
107-
logger := logger.With("path", path)
108-
db, err := cmtDBProvider.OpenBadger(path, logger)
73+
// Compact consensus NodeDB (application state).
74+
ndb, close, err := openConsensusNodeDB(dataDir)
10975
if err != nil {
110-
return fmt.Errorf("failed to open BadgerDB: %w", err)
76+
return fmt.Errorf("failed to open consensus NodeDB: %w", err)
11177
}
112-
defer db.Close()
78+
defer close()
11379

114-
if err := flattenBadgerDB(db, logger); err != nil {
115-
return fmt.Errorf("failed to compact %s: %w", path, err)
80+
if err := ndb.Compact(); err != nil {
81+
return fmt.Errorf("failed to compact consensus node DB: %w", err)
11682
}
11783

11884
return nil
11985
}
12086

121-
func findCometDBs(dataDir string) ([]string, error) {
87+
func compactCometDBs(dataDir string) error {
12288
dir := fmt.Sprintf("%s/consensus/data", dataDir)
12389

12490
var dbDirs []string
@@ -132,17 +98,29 @@ func findCometDBs(dataDir string) ([]string, error) {
13298
return nil
13399
})
134100
if err != nil {
135-
return nil, fmt.Errorf("failed to walk dir %s: %w", dir, err)
101+
return fmt.Errorf("failed to walk dir %s: %w", dir, err)
136102
}
137103

138104
if len(dbDirs) == 0 {
139-
return nil, fmt.Errorf("zero database instances found")
105+
return fmt.Errorf("zero database instances found")
140106
}
141107

142-
return dbDirs, nil
108+
for _, dbDir := range dbDirs {
109+
if err := compactCometDB(dbDir); err != nil {
110+
return fmt.Errorf("failed to compact %s: %w", dbDir, err)
111+
}
112+
}
113+
return nil
143114
}
144115

145-
func flattenBadgerDB(db *badgerDB.DB, logger *logging.Logger) error {
116+
func compactCometDB(path string) error {
117+
logger := logger.With("path", path)
118+
db, err := cmtDBProvider.OpenBadger(path, logger)
119+
if err != nil {
120+
return fmt.Errorf("failed to open BadgerDB: %w", err)
121+
}
122+
defer db.Close()
123+
146124
logger.Info("compacting")
147125

148126
if err := db.Flatten(1); err != nil {
@@ -154,12 +132,22 @@ func flattenBadgerDB(db *badgerDB.DB, logger *logging.Logger) error {
154132
return nil
155133
}
156134

157-
func compactConsensusNodeDB(dataDir string) error {
158-
ndb, close, err := openConsensusNodeDB(dataDir)
135+
func compactRuntimeDBs(dataDir string, rt common.Namespace) error {
136+
history, err := openRuntimeLightHistory(dataDir, rt)
159137
if err != nil {
160-
return fmt.Errorf("failed to open consensus NodeDB: %w", err)
138+
return fmt.Errorf("failed to open runtime history: %w", err)
161139
}
162-
defer close()
163-
164-
return ndb.Compact()
140+
defer history.Close()
141+
if err := history.Compact(); err != nil {
142+
return fmt.Errorf("failed to compact runtime history: %w", err)
143+
}
144+
ndb, err := openRuntimeStateDB(dataDir, rt)
145+
if err != nil {
146+
return fmt.Errorf("failed to open runtime state DB: %w", err)
147+
}
148+
defer ndb.Close()
149+
if err := ndb.Compact(); err != nil {
150+
return fmt.Errorf("failed to compact runtime state DB: %w", err)
151+
}
152+
return nil
165153
}

0 commit comments

Comments
 (0)