diff --git a/chain/store/splitstore/liveset.go b/chain/store/splitstore/liveset.go index 17024bf37..31961f4d5 100644 --- a/chain/store/splitstore/liveset.go +++ b/chain/store/splitstore/liveset.go @@ -25,5 +25,5 @@ func NewLiveSetEnv(path string, useLMDB bool) (LiveSetEnv, error) { return NewLMDBLiveSetEnv(filepath.Join(path, "sweep.lmdb")) } - return nil, fmt.Errorf("FIXME: non-lmdb livesets") + return nil, fmt.Errorf("TODO: non-lmdb livesets") } diff --git a/chain/store/splitstore/splitstore.go b/chain/store/splitstore/splitstore.go index 680ec2a5b..a307e995c 100644 --- a/chain/store/splitstore/splitstore.go +++ b/chain/store/splitstore/splitstore.go @@ -31,8 +31,6 @@ const ( var baseEpochKey = dstore.NewKey("baseEpoch") -var UseLMDB = true // TODO snake this through DI - var log = logging.Logger("splitstore") func init() { @@ -66,15 +64,15 @@ var _ bstore.Blockstore = (*SplitStore)(nil) // NewSplitStore creates a new SplitStore instance, given a path for the hotstore dbs and a cold // blockstore. The SplitStore must be attached to the ChainStore with Start in order to trigger // compaction. -func NewSplitStore(path string, ds dstore.Datastore, cold, hot bstore.Blockstore) (*SplitStore, error) { +func NewSplitStore(path string, ds dstore.Datastore, cold, hot bstore.Blockstore, useLMDB bool) (*SplitStore, error) { // the tracking store - snoop, err := NewTrackingStore(path, UseLMDB) + snoop, err := NewTrackingStore(path, useLMDB) if err != nil { return nil, err } // the liveset env - env, err := NewLiveSetEnv(path, UseLMDB) + env, err := NewLiveSetEnv(path, useLMDB) if err != nil { snoop.Close() //nolint:errcheck return nil, err diff --git a/node/builder.go b/node/builder.go index d4569a402..7f13aaee0 100644 --- a/node/builder.go +++ b/node/builder.go @@ -615,7 +615,7 @@ func Repo(r repo.Repo) Option { Override(new(dtypes.HotBlockstore), modules.LMDBHotBlockstore)), If(!cfg.UseLMDB, Override(new(dtypes.HotBlockstore), modules.BadgerHotBlockstore)), - Override(new(dtypes.SplitBlockstore), modules.SplitBlockstore), + Override(new(dtypes.SplitBlockstore), modules.SplitBlockstore(cfg)), Override(new(dtypes.ChainBlockstore), modules.ChainSplitBlockstore), Override(new(dtypes.StateBlockstore), modules.StateSplitBlockstore), Override(new(dtypes.BaseBlockstore), From(new(dtypes.SplitBlockstore))), diff --git a/node/modules/blockstore.go b/node/modules/blockstore.go index 7b6100bd0..f82fe4602 100644 --- a/node/modules/blockstore.go +++ b/node/modules/blockstore.go @@ -15,6 +15,7 @@ import ( "github.com/filecoin-project/lotus/blockstore" "github.com/filecoin-project/lotus/chain/store/splitstore" + "github.com/filecoin-project/lotus/node/config" "github.com/filecoin-project/lotus/node/modules/dtypes" "github.com/filecoin-project/lotus/node/modules/helpers" "github.com/filecoin-project/lotus/node/repo" @@ -95,23 +96,25 @@ func BadgerHotBlockstore(lc fx.Lifecycle, r repo.LockedRepo) (dtypes.HotBlocksto return hot, err } -func SplitBlockstore(lc fx.Lifecycle, r repo.LockedRepo, ds dtypes.MetadataDS, cold dtypes.ColdBlockstore, hot dtypes.HotBlockstore) (dtypes.SplitBlockstore, error) { - path, err := r.SplitstorePath() - if err != nil { - return nil, err - } +func SplitBlockstore(cfg *config.Blockstore) func(lc fx.Lifecycle, r repo.LockedRepo, ds dtypes.MetadataDS, cold dtypes.ColdBlockstore, hot dtypes.HotBlockstore) (dtypes.SplitBlockstore, error) { + return func(lc fx.Lifecycle, r repo.LockedRepo, ds dtypes.MetadataDS, cold dtypes.ColdBlockstore, hot dtypes.HotBlockstore) (dtypes.SplitBlockstore, error) { + path, err := r.SplitstorePath() + if err != nil { + return nil, err + } - ss, err := splitstore.NewSplitStore(path, ds, cold, hot) - if err != nil { - return nil, err - } - lc.Append(fx.Hook{ - OnStop: func(context.Context) error { - return ss.Close() - }, - }) + ss, err := splitstore.NewSplitStore(path, ds, cold, hot, cfg.UseLMDB) + if err != nil { + return nil, err + } + lc.Append(fx.Hook{ + OnStop: func(context.Context) error { + return ss.Close() + }, + }) - return ss, err + return ss, err + } } func StateFlatBlockstore(lc fx.Lifecycle, mctx helpers.MetricsCtx, bs dtypes.ColdBlockstore) (dtypes.StateBlockstore, error) {