Skip to content

Commit 9282b2d

Browse files
committed
remove concrete database db in scaffold and node builder
1 parent 86ff29d commit 9282b2d

File tree

2 files changed

+9
-110
lines changed

2 files changed

+9
-110
lines changed

cmd/node_builder.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"context"
55
"time"
66

7-
"github.com/cockroachdb/pebble/v2"
87
"github.com/dgraph-io/badger/v2"
98
"github.com/jordanschalm/lockctx"
109
madns "github.com/multiformats/go-multiaddr-dns"
@@ -206,8 +205,6 @@ type NodeConfig struct {
206205
ConfigManager *updatable_configs.Manager
207206
MetricsRegisterer prometheus.Registerer
208207
Metrics Metrics
209-
DB *badger.DB
210-
PebbleDB *pebble.DB
211208
ProtocolDB storage.DB
212209
SecretsDB *badger.DB
213210
Storage Storage

cmd/scaffold.go

Lines changed: 9 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import (
1212
"time"
1313

1414
gcemd "cloud.google.com/go/compute/metadata"
15-
"github.com/cockroachdb/pebble/v2"
1615
"github.com/dgraph-io/badger/v2"
1716
"github.com/hashicorp/go-multierror"
1817
dht "github.com/libp2p/go-libp2p-kad-dht"
@@ -83,9 +82,6 @@ import (
8382
"github.com/onflow/flow-go/state/protocol/events/gadgets"
8483
"github.com/onflow/flow-go/storage"
8584
bstorage "github.com/onflow/flow-go/storage/badger"
86-
"github.com/onflow/flow-go/storage/badger/operation"
87-
"github.com/onflow/flow-go/storage/dbops"
88-
"github.com/onflow/flow-go/storage/operation/badgerimpl"
8985
"github.com/onflow/flow-go/storage/operation/pebbleimpl"
9086
"github.com/onflow/flow-go/storage/store"
9187
sutil "github.com/onflow/flow-go/storage/util"
@@ -1084,98 +1080,25 @@ func (fnb *FlowNodeBuilder) initProfiler() error {
10841080
return nil
10851081
}
10861082

1087-
func (fnb *FlowNodeBuilder) initBadgerDB() error {
1088-
// if the badger DB is already set, use it.
1089-
// the badger DB might be set by the follower engine
1090-
if fnb.BaseConfig.badgerDB != nil {
1091-
fnb.DB = fnb.BaseConfig.badgerDB
1083+
// create protocol protocol db
1084+
func (fnb *FlowNodeBuilder) initProtocolDB() error {
1085+
// if the protocol DB is already set, use it
1086+
// the protocol DB might be set by the follower engine
1087+
if fnb.BaseConfig.protocolDB != nil {
1088+
fnb.ProtocolDB = fnb.BaseConfig.protocolDB
10921089
return nil
10931090
}
10941091

1095-
// if the badger DB is not set, then the datadir must be provided to initialize
1096-
// the badger DB
1097-
// since we've set an default directory for the badger DB, this check
1098-
// is not necessary, but rather a sanity check
1099-
if fnb.BaseConfig.datadir == NotSet {
1100-
return fmt.Errorf("missing required flag '--datadir'")
1101-
}
1102-
1103-
// Pre-create DB path (Badger creates only one-level dirs)
1104-
err := os.MkdirAll(fnb.BaseConfig.datadir, 0700)
1105-
if err != nil {
1106-
return fmt.Errorf("could not create datadir (path: %s): %w", fnb.BaseConfig.datadir, err)
1107-
}
1108-
1109-
// we initialize the database with options that allow us to keep the maximum
1110-
// item size in the trie itself (up to 1MB) and where we keep all level zero
1111-
// tables in-memory as well; this slows down compaction and increases memory
1112-
// usage, but it improves overall performance and disk i/o
1113-
opts := badger.
1114-
DefaultOptions(fnb.BaseConfig.datadir).
1115-
WithKeepL0InMemory(true).
1116-
WithLogger(sutil.NewLogger(fnb.Logger.With().Str("badgerdb", "protocol").Logger())).
1117-
1118-
// the ValueLogFileSize option specifies how big the value of a
1119-
// key-value pair is allowed to be saved into badger.
1120-
// exceeding this limit, will fail with an error like this:
1121-
// could not store data: Value with size <xxxx> exceeded 1073741824 limit
1122-
// Maximum value size is 10G, needed by execution node
1123-
// TODO: finding a better max value for each node type
1124-
WithValueLogFileSize(128 << 23).
1125-
WithValueLogMaxEntries(100000) // Default is 1000000
1126-
1127-
publicDB, err := bstorage.InitPublic(opts)
1128-
if err != nil {
1129-
return fmt.Errorf("could not open public db: %w", err)
1130-
}
1131-
fnb.DB = publicDB
1132-
1133-
fnb.ShutdownFunc(func() error {
1134-
if err := publicDB.Close(); err != nil {
1135-
return fmt.Errorf("error closing protocol database: %w", err)
1136-
}
1137-
return nil
1138-
})
1139-
1140-
fnb.Component("badger log cleaner", func(node *NodeConfig) (module.ReadyDoneAware, error) {
1141-
return bstorage.NewCleaner(node.Logger, node.DB, node.Metrics.CleanCollector, flow.DefaultValueLogGCWaitDuration), nil
1142-
})
1143-
1144-
return nil
1145-
}
1146-
1147-
func (fnb *FlowNodeBuilder) initPebbleDB() error {
1148-
// if the pebble DB is already set, use it
1149-
// the pebble DB might be set by the follower engine
1150-
if fnb.BaseConfig.pebbleDB != nil {
1151-
fnb.PebbleDB = fnb.BaseConfig.pebbleDB
1152-
return nil
1153-
}
1154-
1155-
db, closer, err := scaffold.InitPebbleDB(fnb.Logger.With().Str("pebbledb", "protocol").Logger(), fnb.BaseConfig.pebbleDir)
1092+
pebbleDB, closer, err := scaffold.InitPebbleDB(fnb.Logger.With().Str("pebbledb", "protocol").Logger(), fnb.BaseConfig.pebbleDir)
11561093
if err != nil {
11571094
return err
11581095
}
11591096

1160-
fnb.PebbleDB = db
1097+
fnb.ProtocolDB = pebbleimpl.ToDB(pebbleDB)
11611098
fnb.ShutdownFunc(closer.Close)
11621099
return nil
11631100
}
11641101

1165-
// create protocol db according to the badger or pebble db
1166-
func (fnb *FlowNodeBuilder) initProtocolDB(bdb *badger.DB, pdb *pebble.DB) error {
1167-
if dbops.IsBadgerBased(fnb.DBOps) {
1168-
fnb.ProtocolDB = badgerimpl.ToDB(bdb)
1169-
fnb.Logger.Info().Msg("initProtocolDB: using badger protocol db")
1170-
} else if dbops.IsPebbleBatch(fnb.DBOps) {
1171-
fnb.ProtocolDB = pebbleimpl.ToDB(pdb)
1172-
fnb.Logger.Info().Msgf("initProtocolDB: using pebble protocol db")
1173-
} else {
1174-
return fmt.Errorf(dbops.UsageErrMsg, fnb.DBOps)
1175-
}
1176-
return nil
1177-
}
1178-
11791102
func (fnb *FlowNodeBuilder) initSecretsDB() error {
11801103

11811104
// if the secrets DB is disabled (only applicable for Consensus Follower,
@@ -1245,17 +1168,6 @@ func (fnb *FlowNodeBuilder) initStorageLockManager() error {
12451168
}
12461169

12471170
func (fnb *FlowNodeBuilder) initStorage() error {
1248-
1249-
// in order to void long iterations with big keys when initializing with an
1250-
// already populated database, we bootstrap the initial maximum key size
1251-
// upon starting
1252-
err := operation.RetryOnConflict(fnb.DB.Update, func(tx *badger.Txn) error {
1253-
return operation.InitMax(tx)
1254-
})
1255-
if err != nil {
1256-
return fmt.Errorf("could not initialize max tracker: %w", err)
1257-
}
1258-
12591171
headers := store.NewHeaders(fnb.Metrics.Cache, fnb.ProtocolDB)
12601172
guarantees := store.NewGuarantees(fnb.Metrics.Cache, fnb.ProtocolDB, fnb.BaseConfig.guaranteesCacheSize,
12611173
store.DefaultCacheSize)
@@ -2141,17 +2053,7 @@ func (fnb *FlowNodeBuilder) onStart() error {
21412053
return err
21422054
}
21432055

2144-
// we always initialize both badger and pebble databases
2145-
// even if we only use one of them, this simplify the code and checks
2146-
if err := fnb.initBadgerDB(); err != nil {
2147-
return err
2148-
}
2149-
2150-
if err := fnb.initPebbleDB(); err != nil {
2151-
return err
2152-
}
2153-
2154-
if err := fnb.initProtocolDB(fnb.DB, fnb.PebbleDB); err != nil {
2056+
if err := fnb.initProtocolDB(); err != nil {
21552057
return err
21562058
}
21572059

0 commit comments

Comments
 (0)