diff options
author | Jimmy Hu <jimmy.hu@dexon.org> | 2018-12-11 18:47:49 +0800 |
---|---|---|
committer | Wei-Ning Huang <w@dexon.org> | 2018-12-19 20:54:27 +0800 |
commit | 4c31b498bcc0db8926ad2610afa4533fc20ef737 (patch) | |
tree | 7bd33b286cc47841e87c6129f63561e50e332ff1 /dex/cache.go | |
parent | 4149d8a61a63c6df8e9ce6799203c369aa840c90 (diff) | |
download | dexon-4c31b498bcc0db8926ad2610afa4533fc20ef737.tar dexon-4c31b498bcc0db8926ad2610afa4533fc20ef737.tar.gz dexon-4c31b498bcc0db8926ad2610afa4533fc20ef737.tar.bz2 dexon-4c31b498bcc0db8926ad2610afa4533fc20ef737.tar.lz dexon-4c31b498bcc0db8926ad2610afa4533fc20ef737.tar.xz dexon-4c31b498bcc0db8926ad2610afa4533fc20ef737.tar.zst dexon-4c31b498bcc0db8926ad2610afa4533fc20ef737.zip |
dex: Pull blocks from blockdb if cache miss (#84)
Diffstat (limited to 'dex/cache.go')
-rw-r--r-- | dex/cache.go | 13 |
1 files changed, 12 insertions, 1 deletions
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 |