From e92af021227e6b78090f3b932d543c3501a0ba15 Mon Sep 17 00:00:00 2001 From: Cassandra Heart <7929478+CassOnMars@users.noreply.github.com> Date: Tue, 2 Apr 2024 02:13:28 -0500 Subject: [PATCH] qol: div-by-zero fix, minor patch on sync (#155) --- node/consensus/ceremony/consensus_frames.go | 16 ++++++++++++++++ node/consensus/ceremony/message_handler.go | 10 +++++++++- node/consensus/ceremony/peer_messaging.go | 6 ++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/node/consensus/ceremony/consensus_frames.go b/node/consensus/ceremony/consensus_frames.go index a9ca423..4565567 100644 --- a/node/consensus/ceremony/consensus_frames.go +++ b/node/consensus/ceremony/consensus_frames.go @@ -269,6 +269,22 @@ func (e *CeremonyDataClockConsensusEngine) collect( e.logger.Info("no peers available for sync, waiting") time.Sleep(5 * time.Second) } else if maxFrame > latest.FrameNumber { + masterHead, err := e.masterTimeReel.Head() + if err != nil { + panic(err) + } + + if masterHead.FrameNumber < maxFrame { + e.logger.Info( + "master frame synchronization needed to continue, waiting", + zap.Uint64("master_frame_head", masterHead.FrameNumber), + zap.Uint64("max_data_frame_target", maxFrame), + ) + + time.Sleep(30 * time.Second) + continue + } + latest, err = e.sync(latest, maxFrame, peerId) if err == nil { break diff --git a/node/consensus/ceremony/message_handler.go b/node/consensus/ceremony/message_handler.go index 891cfd9..b77864b 100644 --- a/node/consensus/ceremony/message_handler.go +++ b/node/consensus/ceremony/message_handler.go @@ -347,6 +347,14 @@ func (e *CeremonyDataClockConsensusEngine) handleClockFrameData( } }() } - e.dataTimeReel.Insert(frame, e.latestFrameReceived < frame.FrameNumber) + + head, err := e.dataTimeReel.Head() + if err != nil { + panic(err) + } + + if frame.FrameNumber > head.FrameNumber { + e.dataTimeReel.Insert(frame, e.latestFrameReceived < frame.FrameNumber) + } return nil } diff --git a/node/consensus/ceremony/peer_messaging.go b/node/consensus/ceremony/peer_messaging.go index 81a2bfa..8ba127f 100644 --- a/node/consensus/ceremony/peer_messaging.go +++ b/node/consensus/ceremony/peer_messaging.go @@ -31,6 +31,12 @@ func (e *CeremonyDataClockConsensusEngine) GetDataFrame( var err error if request.FrameNumber == 0 { frame, err = e.dataTimeReel.Head() + if frame.FrameNumber == 0 { + return nil, errors.Wrap( + errors.New("not currently syncable"), + "get data frame", + ) + } } else { frame, _, err = e.clockStore.GetDataClockFrame( e.filter,