From 7e4cb9da841903fd50d4549ae58bb7202dbbe323 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Fri, 9 Apr 2021 15:29:16 +0200 Subject: [PATCH] Fix fallback chainstore --- node/builder.go | 11 +++++++---- node/modules/blockstore.go | 8 ++++---- node/modules/dtypes/storage.go | 8 ++++++++ 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/node/builder.go b/node/builder.go index f5dacab5e42..c884b169b8b 100644 --- a/node/builder.go +++ b/node/builder.go @@ -612,18 +612,21 @@ func Repo(r repo.Repo) Option { If(cfg.Splitstore.HotStoreType == "badger", Override(new(dtypes.HotBlockstore), modules.BadgerHotBlockstore)), Override(new(dtypes.SplitBlockstore), modules.SplitBlockstore(cfg)), - Override(new(dtypes.ChainBlockstore), modules.ChainSplitBlockstore), - Override(new(dtypes.StateBlockstore), modules.StateSplitBlockstore), + Override(new(dtypes.BasicChainBlockstore), modules.ChainSplitBlockstore), + Override(new(dtypes.BasicStateBlockstore), modules.StateSplitBlockstore), Override(new(dtypes.BaseBlockstore), From(new(dtypes.SplitBlockstore))), Override(new(dtypes.ExposedBlockstore), From(new(dtypes.SplitBlockstore))), ), If(!cfg.EnableSplitstore, - Override(new(dtypes.ChainBlockstore), modules.ChainFlatBlockstore), - Override(new(dtypes.StateBlockstore), modules.StateFlatBlockstore), + Override(new(dtypes.BasicChainBlockstore), modules.ChainFlatBlockstore), + Override(new(dtypes.BasicStateBlockstore), modules.StateFlatBlockstore), Override(new(dtypes.BaseBlockstore), From(new(dtypes.UniversalBlockstore))), Override(new(dtypes.ExposedBlockstore), From(new(dtypes.UniversalBlockstore))), ), + Override(new(dtypes.ChainBlockstore), From(new(dtypes.BasicChainBlockstore))), + Override(new(dtypes.StateBlockstore), From(new(dtypes.BasicStateBlockstore))), + If(os.Getenv("LOTUS_ENABLE_CHAINSTORE_FALLBACK") == "1", Override(new(dtypes.ChainBlockstore), modules.FallbackChainBlockstore), Override(new(dtypes.StateBlockstore), modules.FallbackStateBlockstore), diff --git a/node/modules/blockstore.go b/node/modules/blockstore.go index c1c52fafe75..787d782b7ea 100644 --- a/node/modules/blockstore.go +++ b/node/modules/blockstore.go @@ -94,11 +94,11 @@ func SplitBlockstore(cfg *config.Chainstore) func(lc fx.Lifecycle, r repo.Locked } } -func StateFlatBlockstore(_ fx.Lifecycle, _ helpers.MetricsCtx, bs dtypes.UniversalBlockstore) (dtypes.StateBlockstore, error) { +func StateFlatBlockstore(_ fx.Lifecycle, _ helpers.MetricsCtx, bs dtypes.UniversalBlockstore) (dtypes.BasicStateBlockstore, error) { return bs, nil } -func StateSplitBlockstore(_ fx.Lifecycle, _ helpers.MetricsCtx, bs dtypes.SplitBlockstore) (dtypes.StateBlockstore, error) { +func StateSplitBlockstore(_ fx.Lifecycle, _ helpers.MetricsCtx, bs dtypes.SplitBlockstore) (dtypes.BasicStateBlockstore, error) { return bs, nil } @@ -110,11 +110,11 @@ func ChainSplitBlockstore(_ fx.Lifecycle, _ helpers.MetricsCtx, bs dtypes.SplitB return bs, nil } -func FallbackChainBlockstore(cbs dtypes.ChainBlockstore) dtypes.ChainBlockstore { +func FallbackChainBlockstore(cbs dtypes.BasicChainBlockstore) dtypes.ChainBlockstore { return &blockstore.FallbackStore{Blockstore: cbs} } -func FallbackStateBlockstore(sbs dtypes.StateBlockstore) dtypes.StateBlockstore { +func FallbackStateBlockstore(sbs dtypes.BasicStateBlockstore) dtypes.StateBlockstore { return &blockstore.FallbackStore{Blockstore: sbs} } diff --git a/node/modules/dtypes/storage.go b/node/modules/dtypes/storage.go index 216ccc1b186..e35d02811a7 100644 --- a/node/modules/dtypes/storage.go +++ b/node/modules/dtypes/storage.go @@ -36,12 +36,20 @@ type ( // BaseBlockstore is something, coz DI BaseBlockstore blockstore.Blockstore + // BasicChainBlockstore is like ChainBlockstore, but without the optional + // network fallback support + BasicChainBlockstore blockstore.Blockstore + // ChainBlockstore is a blockstore to store chain data (tipsets, blocks, // messages). It is physically backed by the BareMonolithBlockstore, but it // has a cache on top that is specially tuned for chain data access // patterns. ChainBlockstore blockstore.Blockstore + // BasicStateBlockstore is like StateBlockstore, but without the optional + // network fallback support + BasicStateBlockstore blockstore.Blockstore + // StateBlockstore is a blockstore to store state data (state tree). It is // physically backed by the BareMonolithBlockstore, but it has a cache on // top that is specially tuned for state data access patterns.