@@ -25,7 +25,7 @@ import (
2525 "sync"
2626 "time"
2727
28- "github.com/allegro/bigcache "
28+ "github.com/VictoriaMetrics/fastcache "
2929 "github.com/ethereum/go-ethereum/common"
3030 "github.com/ethereum/go-ethereum/ethdb"
3131 "github.com/ethereum/go-ethereum/log"
@@ -69,7 +69,7 @@ const secureKeyLength = 11 + 32
6969type Database struct {
7070 diskdb ethdb.KeyValueStore // Persistent storage for matured trie nodes
7171
72- cleans * bigcache. BigCache // GC friendly memory cache of clean node RLPs
72+ cleans * fastcache. Cache // GC friendly memory cache of clean node RLPs
7373 dirties map [common.Hash ]* cachedNode // Data and references relationships of dirty nodes
7474 oldest common.Hash // Oldest tracked node, flush-list head
7575 newest common.Hash // Newest tracked node, flush-list tail
@@ -296,16 +296,9 @@ func NewDatabase(diskdb ethdb.KeyValueStore) *Database {
296296// before its written out to disk or garbage collected. It also acts as a read cache
297297// for nodes loaded from disk.
298298func NewDatabaseWithCache (diskdb ethdb.KeyValueStore , cache int ) * Database {
299- var cleans * bigcache. BigCache
299+ var cleans * fastcache. Cache
300300 if cache > 0 {
301- cleans , _ = bigcache .NewBigCache (bigcache.Config {
302- Shards : 1024 ,
303- LifeWindow : time .Hour ,
304- MaxEntriesInWindow : cache * 1024 ,
305- MaxEntrySize : 512 ,
306- HardMaxCacheSize : cache ,
307- Hasher : trienodeHasher {},
308- })
301+ cleans = fastcache .New (cache * 1024 * 1024 )
309302 }
310303 return & Database {
311304 diskdb : diskdb ,
@@ -381,7 +374,7 @@ func (db *Database) insertPreimage(hash common.Hash, preimage []byte) {
381374func (db * Database ) node (hash common.Hash ) node {
382375 // Retrieve the node from the clean cache if available
383376 if db .cleans != nil {
384- if enc , err := db .cleans .Get (string ( hash [:])); err == nil && enc != nil {
377+ if enc := db .cleans .Get (nil , hash [:]); enc != nil {
385378 memcacheCleanHitMeter .Mark (1 )
386379 memcacheCleanReadMeter .Mark (int64 (len (enc )))
387380 return mustDecodeNode (hash [:], enc )
@@ -401,7 +394,7 @@ func (db *Database) node(hash common.Hash) node {
401394 return nil
402395 }
403396 if db .cleans != nil {
404- db .cleans .Set (string ( hash [:]) , enc )
397+ db .cleans .Set (hash [:], enc )
405398 memcacheCleanMissMeter .Mark (1 )
406399 memcacheCleanWriteMeter .Mark (int64 (len (enc )))
407400 }
@@ -417,7 +410,7 @@ func (db *Database) Node(hash common.Hash) ([]byte, error) {
417410 }
418411 // Retrieve the node from the clean cache if available
419412 if db .cleans != nil {
420- if enc , err := db .cleans .Get (string ( hash [:])); err == nil && enc != nil {
413+ if enc := db .cleans .Get (nil , hash [:]); enc != nil {
421414 memcacheCleanHitMeter .Mark (1 )
422415 memcacheCleanReadMeter .Mark (int64 (len (enc )))
423416 return enc , nil
@@ -435,7 +428,7 @@ func (db *Database) Node(hash common.Hash) ([]byte, error) {
435428 enc , err := db .diskdb .Get (hash [:])
436429 if err == nil && enc != nil {
437430 if db .cleans != nil {
438- db .cleans .Set (string ( hash [:]) , enc )
431+ db .cleans .Set (hash [:], enc )
439432 memcacheCleanMissMeter .Mark (1 )
440433 memcacheCleanWriteMeter .Mark (int64 (len (enc )))
441434 }
@@ -832,7 +825,7 @@ func (c *cleaner) Put(key []byte, rlp []byte) error {
832825 }
833826 // Move the flushed node into the clean cache to prevent insta-reloads
834827 if c .db .cleans != nil {
835- c .db .cleans .Set (string ( hash [:]) , rlp )
828+ c .db .cleans .Set (hash [:], rlp )
836829 }
837830 return nil
838831}
0 commit comments