@@ -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-
11791102func (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
12471170func (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