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  }