@@ -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