From 7b961be2852d89870f44e3f27c9ee13354b12032 Mon Sep 17 00:00:00 2001 From: Jimmy Hu Date: Tue, 11 Dec 2018 18:47:49 +0800 Subject: dex: Pull blocks from blockdb if cache miss (#84) --- dex/cache.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'dex/cache.go') diff --git a/dex/cache.go b/dex/cache.go index 96ba2d765..c95038e1d 100644 --- a/dex/cache.go +++ b/dex/cache.go @@ -21,6 +21,7 @@ import ( "sync" coreCommon "github.com/dexon-foundation/dexon-consensus/common" + coreBlockdb "github.com/dexon-foundation/dexon-consensus/core/blockdb" coreTypes "github.com/dexon-foundation/dexon-consensus/core/types" ) @@ -47,14 +48,16 @@ type cache struct { blockCache map[coreCommon.Hash]*coreTypes.Block voteCache map[coreTypes.Position]map[voteKey]*coreTypes.Vote votePosition []coreTypes.Position + db coreBlockdb.BlockDatabase voteSize int size int } -func newCache(size int) *cache { +func newCache(size int, db coreBlockdb.BlockDatabase) *cache { return &cache{ blockCache: make(map[coreCommon.Hash]*coreTypes.Block), voteCache: make(map[coreTypes.Position]map[voteKey]*coreTypes.Vote), + db: db, size: size, } } @@ -111,6 +114,14 @@ func (c *cache) blocks(hashes coreCommon.Hashes) []*coreTypes.Block { for _, hash := range hashes { if block, exist := c.blockCache[hash]; exist { cacheBlocks = append(cacheBlocks, block) + } else { + block, err := c.db.Get(hash) + if err != nil { + continue + } + // Blocks request from the cache do not need the finalization info. + block.Finalization = coreTypes.FinalizationResult{} + cacheBlocks = append(cacheBlocks, &block) } } return cacheBlocks -- cgit v1.2.3