From 28e8331ca13ba530b48027fb7cca060cab0beccf Mon Sep 17 00:00:00 2001 From: Cassandra Heart Date: Tue, 26 Nov 2024 23:24:05 -0600 Subject: [PATCH] refined to work across the board --- node/consensus/data/consensus_frames.go | 3 +-- node/consensus/data/data_clock_consensus_engine.go | 8 +++++--- node/consensus/data/main_data_loop.go | 3 +++ node/consensus/data/message_validators.go | 7 ++++--- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/node/consensus/data/consensus_frames.go b/node/consensus/data/consensus_frames.go index 82c4983..9743cd2 100644 --- a/node/consensus/data/consensus_frames.go +++ b/node/consensus/data/consensus_frames.go @@ -251,8 +251,7 @@ func (e *DataClockConsensusEngine) GetAheadPeers(frameNumber uint64) []internal. if v.timestamp <= config.GetMinimumVersionCutoff().UnixMilli() { continue } - if bytes.Compare(v.version, config.GetMinimumVersion()) < 0 || - v.patchVersion < config.GetMinimumPatchVersion() { + if bytes.Compare(v.version, config.GetMinimumVersion()) < 0 { continue } maxDiff = max(maxDiff, v.maxFrame-frameNumber) diff --git a/node/consensus/data/data_clock_consensus_engine.go b/node/consensus/data/data_clock_consensus_engine.go index 4d83e0c..f40fb51 100644 --- a/node/consensus/data/data_clock_consensus_engine.go +++ b/node/consensus/data/data_clock_consensus_engine.go @@ -121,7 +121,9 @@ type DataClockConsensusEngine struct { dependencyMapMx sync.Mutex stagedTransactions *protobufs.TokenRequests stagedTransactionsSet map[string]struct{} - stagedTransactionsMx sync.RWMutex + stagedTransactionsMx sync.Mutex + validationFilter map[string]struct{} + validationFilterMx sync.Mutex peerMapMx sync.RWMutex peerAnnounceMapMx sync.Mutex lastKeyBundleAnnouncementFrame uint64 @@ -270,8 +272,8 @@ func NewDataClockConsensusEngine( rateLimit, time.Minute, ), - requestSyncCh: make(chan struct{}, 1), - stagedTransactionsSet: map[string]struct{}{}, + requestSyncCh: make(chan struct{}, 1), + validationFilter: map[string]struct{}{}, } logger.Info("constructing consensus engine") diff --git a/node/consensus/data/main_data_loop.go b/node/consensus/data/main_data_loop.go index 4c08bef..334bfb5 100644 --- a/node/consensus/data/main_data_loop.go +++ b/node/consensus/data/main_data_loop.go @@ -145,6 +145,9 @@ func (e *DataClockConsensusEngine) runLoop() { case <-e.ctx.Done(): return case dataFrame := <-dataFrameCh: + e.validationFilterMx.Lock() + e.validationFilter = make(map[string]struct{}, len(e.validationFilter)) + e.validationFilterMx.Unlock() if e.GetFrameProverTries()[0].Contains(e.provingKeyAddress) { if err = e.publishProof(dataFrame); err != nil { e.logger.Error("could not publish", zap.Error(err)) diff --git a/node/consensus/data/message_validators.go b/node/consensus/data/message_validators.go index c95ae18..cbde617 100644 --- a/node/consensus/data/message_validators.go +++ b/node/consensus/data/message_validators.go @@ -83,9 +83,10 @@ func (e *DataClockConsensusEngine) validateTxMessage(peerID peer.ID, message *pb frameNumber, mint.Signature.PublicKey.KeyValue, ) - e.stagedTransactionsMx.RLock() - _, ok := e.stagedTransactionsSet[id] - e.stagedTransactionsMx.RUnlock() + e.validationFilterMx.Lock() + _, ok := e.validationFilter[id] + e.validationFilter[id] = struct{}{} + e.validationFilterMx.Unlock() if ok { e.pubSub.AddPeerScore([]byte(peerID), -1000000) return p2p.ValidationResultReject