mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-05-22 23:07:04 +00:00

* [NOD-1566] Add a dependency to golang-lru. * [NOD-1566] Add caching to blockstore.go. * [NOD-1566] Add LRUCache to all store objects and initialize them. * [NOD-1566] Add caching to acceptanceDataStore. * [NOD-1566] Add caching to blockHeaderStore. * [NOD-1566] Implement a simpler LRU cache. * [NOD-1566] Use the simpler cache implementation everywhere. * [NOD-1566] Remove dependency in golang-lru. * [NOD-1566] Fix object reuse issues in store Get functions. * [NOD-1566] Add caching to blockRelationStore. * [NOD-1566] Add caching to blockStatusStore. * [NOD-1566] Add caching to ghostdagDataStore. * [NOD-1566] Add caching to multisetStore. * [NOD-1566] Add caching to reachabilityDataStore. * [NOD-1566] Add caching to utxoDiffStore. * [NOD-1566] Add caching to reachabilityReindexRoot. * [NOD-1566] Add caching to pruningStore. * [NOD-1566] Add caching to headerTipsStore. * [NOD-1566] Add caching to consensusStateStore. * [NOD-1566] Add comments explaining why we don't discard staging at the normal location in consensusStateStore. * [NOD-1566] Make go vet happy. * [NOD-1566] Fix merge errors. * [NOD-1566] Add a missing break statement. * [NOD-1566] Run go mod tidy. * [NOD-1566] Remove serializedUTXOSetCache.
75 lines
2.4 KiB
Go
75 lines
2.4 KiB
Go
package consensusstatestore
|
|
|
|
import (
|
|
"github.com/golang/protobuf/proto"
|
|
"github.com/kaspanet/kaspad/domain/consensus/database/serialization"
|
|
"github.com/kaspanet/kaspad/domain/consensus/model"
|
|
"github.com/kaspanet/kaspad/domain/consensus/model/externalapi"
|
|
"github.com/kaspanet/kaspad/domain/consensus/utils/dbkeys"
|
|
)
|
|
|
|
var virtualDiffParentsKey = dbkeys.MakeBucket().Key([]byte("virtual-diff-parents"))
|
|
|
|
func (css *consensusStateStore) VirtualDiffParents(dbContext model.DBReader) ([]*externalapi.DomainHash, error) {
|
|
if css.virtualDiffParentsStaging != nil {
|
|
return externalapi.CloneHashes(css.virtualDiffParentsStaging), nil
|
|
}
|
|
|
|
if css.virtualDiffParentsCache != nil {
|
|
return externalapi.CloneHashes(css.virtualDiffParentsCache), nil
|
|
}
|
|
|
|
virtualDiffParentsBytes, err := dbContext.Get(virtualDiffParentsKey)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
virtualDiffParents, err := css.deserializeVirtualDiffParents(virtualDiffParentsBytes)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
css.virtualDiffParentsCache = virtualDiffParents
|
|
return externalapi.CloneHashes(virtualDiffParents), nil
|
|
}
|
|
|
|
func (css *consensusStateStore) StageVirtualDiffParents(tipHashes []*externalapi.DomainHash) {
|
|
css.virtualDiffParentsStaging = externalapi.CloneHashes(tipHashes)
|
|
}
|
|
|
|
func (css *consensusStateStore) commitVirtualDiffParents(dbTx model.DBTransaction) error {
|
|
if css.virtualDiffParentsStaging == nil {
|
|
return nil
|
|
}
|
|
|
|
virtualDiffParentsBytes, err := css.serializeVirtualDiffParents(css.virtualDiffParentsStaging)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
err = dbTx.Put(virtualDiffParentsKey, virtualDiffParentsBytes)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
css.virtualDiffParentsCache = css.virtualDiffParentsStaging
|
|
|
|
// Note: we don't discard the staging here since that's
|
|
// being done at the end of Commit()
|
|
return nil
|
|
}
|
|
|
|
func (css *consensusStateStore) serializeVirtualDiffParents(virtualDiffParentsBytes []*externalapi.DomainHash) ([]byte, error) {
|
|
virtualDiffParents := serialization.VirtualDiffParentsToDBHeaderVirtualDiffParents(virtualDiffParentsBytes)
|
|
return proto.Marshal(virtualDiffParents)
|
|
}
|
|
|
|
func (css *consensusStateStore) deserializeVirtualDiffParents(virtualDiffParentsBytes []byte) ([]*externalapi.DomainHash,
|
|
error) {
|
|
|
|
dbVirtualDiffParents := &serialization.DbVirtualDiffParents{}
|
|
err := proto.Unmarshal(virtualDiffParentsBytes, dbVirtualDiffParents)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return serialization.DBVirtualDiffParentsToVirtualDiffParents(dbVirtualDiffParents)
|
|
}
|