github.com/prysmaticlabs/prysm@v1.4.4/beacon-chain/db/kv/state_summary_cache.go (about) 1 package kv 2 3 import ( 4 "sync" 5 6 pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1" 7 ) 8 9 const stateSummaryCachePruneCount = 128 10 11 // stateSummaryCache caches state summary object. 12 type stateSummaryCache struct { 13 initSyncStateSummaries map[[32]byte]*pb.StateSummary 14 initSyncStateSummariesLock sync.RWMutex 15 } 16 17 // newStateSummaryCache creates a new state summary cache. 18 func newStateSummaryCache() *stateSummaryCache { 19 return &stateSummaryCache{ 20 initSyncStateSummaries: make(map[[32]byte]*pb.StateSummary), 21 } 22 } 23 24 // put saves a state summary to the initial sync state summaries cache. 25 func (c *stateSummaryCache) put(r [32]byte, b *pb.StateSummary) { 26 c.initSyncStateSummariesLock.Lock() 27 defer c.initSyncStateSummariesLock.Unlock() 28 c.initSyncStateSummaries[r] = b 29 } 30 31 // has checks if a state summary exists in the initial sync state summaries cache using the root 32 // of the block. 33 func (c *stateSummaryCache) has(r [32]byte) bool { 34 c.initSyncStateSummariesLock.RLock() 35 defer c.initSyncStateSummariesLock.RUnlock() 36 _, ok := c.initSyncStateSummaries[r] 37 return ok 38 } 39 40 // get retrieves a state summary from the initial sync state summaries cache using the root of 41 // the block. 42 func (c *stateSummaryCache) get(r [32]byte) *pb.StateSummary { 43 c.initSyncStateSummariesLock.RLock() 44 defer c.initSyncStateSummariesLock.RUnlock() 45 b := c.initSyncStateSummaries[r] 46 return b 47 } 48 49 // len retrieves the state summary count from the state summaries cache. 50 func (c *stateSummaryCache) len() int { 51 c.initSyncStateSummariesLock.RLock() 52 defer c.initSyncStateSummariesLock.RUnlock() 53 return len(c.initSyncStateSummaries) 54 } 55 56 // GetAll retrieves all the beacon state summaries from the initial sync state summaries cache, the returned 57 // state summaries are unordered. 58 func (c *stateSummaryCache) getAll() []*pb.StateSummary { 59 c.initSyncStateSummariesLock.RLock() 60 defer c.initSyncStateSummariesLock.RUnlock() 61 62 summaries := make([]*pb.StateSummary, 0, len(c.initSyncStateSummaries)) 63 for _, b := range c.initSyncStateSummaries { 64 summaries = append(summaries, b) 65 } 66 return summaries 67 } 68 69 // Clear clears out the initial sync state summaries cache. 70 func (c *stateSummaryCache) clear() { 71 c.initSyncStateSummariesLock.Lock() 72 defer c.initSyncStateSummariesLock.Unlock() 73 c.initSyncStateSummaries = make(map[[32]byte]*pb.StateSummary) 74 }