From 7247ba29babbbb86aa8fe4aaec53feba54f8a492 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 3 May 2025 16:27:42 -0400 Subject: [PATCH 1/4] On creation add timestamp to block request --- controller/consensus.go | 1 + 1 file changed, 1 insertion(+) diff --git a/controller/consensus.go b/controller/consensus.go index 3e0c2f0d7d..ecc0cc8865 100644 --- a/controller/consensus.go +++ b/controller/consensus.go @@ -229,6 +229,7 @@ func (c *Controller) sendBlockRequests(start, stop uint64, queue map[uint64]bloc // Add new request to queue queue[height] = blockSyncRequest{ + timestamp: time.Now(), height: height, peerPublicKey: peerPublicKey, } From 8d329191710a99533b39d2ffd601c8ecfdcb5784 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 3 May 2025 17:29:47 -0400 Subject: [PATCH 2/4] Moved request timeout check until after queue processing --- controller/consensus.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/controller/consensus.go b/controller/consensus.go index ecc0cc8865..d1714d1b9d 100644 --- a/controller/consensus.go +++ b/controller/consensus.go @@ -112,8 +112,6 @@ func (c *Controller) Sync() { for _, peer := range peers { syncingPeers = append(syncingPeers, lib.BytesToString(peer.Address.PublicKey)) } - // Remove requests that have timed out - c.applyTimeouts(queue) // Calculate the height to stop at when updating queue stopHeight := min(fsmHeight+blockSyncQueueSize, maxHeight) // Send block requests for any missing heights in the queue @@ -141,6 +139,8 @@ func (c *Controller) Sync() { maxHeight, minVDFIterations = m, v c.log.Debugf("Updated chain %d with max height: %d and iterations %d", c.Config.ChainId, maxHeight, minVDFIterations) } + // Remove any block requests that have timed out + c.applyTimeouts(queue) } } // Syncing complete From 1e3e2f6850890d7ccd2b378a7fe3edd273c0fddc Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 3 May 2025 17:54:30 -0400 Subject: [PATCH 3/4] Added lock around HandlePeerBlock --- controller/consensus.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/controller/consensus.go b/controller/consensus.go index d1714d1b9d..534a5200be 100644 --- a/controller/consensus.go +++ b/controller/consensus.go @@ -168,8 +168,14 @@ func (c *Controller) processQueue(startHeight, stopHeight uint64, queue map[uint blockMsg := req.blockMessage // start timing the HandlePeerBlock call start := time.Now() + // lock the controller + c.Lock() // process the block message received from the peer - if _, err := c.HandlePeerBlock(blockMsg, true); err != nil { + _, err := c.HandlePeerBlock(blockMsg, true) + // unlock controller + c.Unlock() + // check error from HandlePeerBlock + if err != nil { h := blockMsg.BlockAndCertificate.Header.Height // log this unexpected behavior c.log.Warnf("Syncing peer block height %d invalid:\n%s", h, err.Error()) @@ -177,6 +183,8 @@ func (c *Controller) processQueue(startHeight, stopHeight uint64, queue map[uint c.P2P.ChangeReputation(req.message.Sender.Address.PublicKey, p2p.InvalidBlockRep) break } + // unlock controller + c.Unlock() // calculate and log the elapsed time elapsed := time.Since(start) c.log.Infof("Block %d sync complete. HandlePeerBlock took %s", height, elapsed) From 5aed17bf65e6b8eb8799d2eacf335c23a30e87c3 Mon Sep 17 00:00:00 2001 From: Andrew Nguyen Date: Sat, 3 May 2025 22:11:27 -0400 Subject: [PATCH 4/4] Update consensus.go --- controller/consensus.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/controller/consensus.go b/controller/consensus.go index 534a5200be..310c6789f5 100644 --- a/controller/consensus.go +++ b/controller/consensus.go @@ -183,8 +183,6 @@ func (c *Controller) processQueue(startHeight, stopHeight uint64, queue map[uint c.P2P.ChangeReputation(req.message.Sender.Address.PublicKey, p2p.InvalidBlockRep) break } - // unlock controller - c.Unlock() // calculate and log the elapsed time elapsed := time.Since(start) c.log.Infof("Block %d sync complete. HandlePeerBlock took %s", height, elapsed)