Skip to content

Commit 7e35a87

Browse files
authored
Merge pull request #6683 from multiversx/subround-endround-v2-fixes
Subround endround v2 fixes
2 parents 7b02128 + 5d2773f commit 7e35a87

File tree

2 files changed

+29
-18
lines changed

2 files changed

+29
-18
lines changed

consensus/spos/bls/v2/subroundEndRound.go

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,9 @@ func (sr *subroundEndRound) doEndRoundJob(_ context.Context) bool {
219219
return false
220220
}
221221

222+
sr.mutProcessingEndRound.Lock()
223+
defer sr.mutProcessingEndRound.Unlock()
224+
222225
return sr.doEndRoundJobByNode()
223226
}
224227

@@ -240,14 +243,16 @@ func (sr *subroundEndRound) commitBlock() error {
240243
}
241244

242245
func (sr *subroundEndRound) doEndRoundJobByNode() bool {
243-
if !sr.waitForSignalSync() {
244-
return false
246+
if sr.shouldSendProof() {
247+
if !sr.waitForSignalSync() {
248+
return false
249+
}
245250
}
246251

247-
sr.mutProcessingEndRound.Lock()
248-
defer sr.mutProcessingEndRound.Unlock()
249-
250-
proof := sr.sendProof()
252+
proof, ok := sr.sendProof()
253+
if !ok {
254+
return false
255+
}
251256

252257
err := sr.commitBlock()
253258
if err != nil {
@@ -277,41 +282,42 @@ func (sr *subroundEndRound) doEndRoundJobByNode() bool {
277282
return true
278283
}
279284

280-
func (sr *subroundEndRound) sendProof() data.HeaderProofHandler {
285+
func (sr *subroundEndRound) sendProof() (data.HeaderProofHandler, bool) {
281286
if !sr.shouldSendProof() {
282-
return nil
287+
return nil, true
283288
}
284289

285290
bitmap := sr.GenerateBitmap(bls.SrSignature)
286291
err := sr.checkSignaturesValidity(bitmap)
287292
if err != nil {
288293
log.Debug("sendProof.checkSignaturesValidity", "error", err.Error())
289-
return nil
294+
return nil, false
290295
}
291296

292297
// Aggregate signatures, handle invalid signers and send final info if needed
293298
bitmap, sig, err := sr.aggregateSigsAndHandleInvalidSigners(bitmap)
294299
if err != nil {
295300
log.Debug("sendProof.aggregateSigsAndHandleInvalidSigners", "error", err.Error())
296-
return nil
301+
return nil, false
297302
}
298303

299304
ok := sr.ScheduledProcessor().IsProcessedOKWithTimeout()
300305
// placeholder for subroundEndRound.doEndRoundJobByLeader script
301306
if !ok {
302-
return nil
307+
return nil, false
303308
}
304309

305310
roundHandler := sr.RoundHandler()
306311
if roundHandler.RemainingTime(roundHandler.TimeStamp(), roundHandler.TimeDuration()) < 0 {
307312
log.Debug("sendProof: time is out -> cancel broadcasting final info and header",
308313
"round time stamp", roundHandler.TimeStamp(),
309314
"current time", time.Now())
310-
return nil
315+
return nil, false
311316
}
312317

313318
// broadcast header proof
314-
return sr.createAndBroadcastProof(sig, bitmap)
319+
proof, err := sr.createAndBroadcastProof(sig, bitmap)
320+
return proof, err == nil
315321
}
316322

317323
func (sr *subroundEndRound) shouldSendProof() bool {
@@ -519,7 +525,7 @@ func (sr *subroundEndRound) computeAggSigOnValidNodes() ([]byte, []byte, error)
519525
return bitmap, sig, nil
520526
}
521527

522-
func (sr *subroundEndRound) createAndBroadcastProof(signature []byte, bitmap []byte) *block.HeaderProof {
528+
func (sr *subroundEndRound) createAndBroadcastProof(signature []byte, bitmap []byte) (*block.HeaderProof, error) {
523529
headerProof := &block.HeaderProof{
524530
PubKeysBitmap: bitmap,
525531
AggregatedSignature: signature,
@@ -531,14 +537,14 @@ func (sr *subroundEndRound) createAndBroadcastProof(signature []byte, bitmap []b
531537

532538
err := sr.BroadcastMessenger().BroadcastEquivalentProof(headerProof, []byte(sr.SelfPubKey()))
533539
if err != nil {
534-
return nil
540+
return nil, err
535541
}
536542

537543
log.Debug("step 3: block header proof has been sent",
538544
"PubKeysBitmap", bitmap,
539545
"AggregateSignature", signature)
540546

541-
return headerProof
547+
return headerProof, nil
542548
}
543549

544550
func (sr *subroundEndRound) createAndBroadcastInvalidSigners(invalidSigners []byte) {
@@ -710,7 +716,7 @@ func (sr *subroundEndRound) waitForSignalSync() bool {
710716
case <-timerBetweenStatusChecks.C:
711717
if sr.IsSubroundFinished(sr.Current()) {
712718
log.Trace("subround already finished", "subround", sr.Name())
713-
return false
719+
return true
714720
}
715721

716722
if sr.checkReceivedSignatures() {

consensus/spos/worker.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,12 @@ func (wrk *Worker) AddReceivedHeaderHandler(handler func(data.HeaderHandler)) {
312312

313313
// ReceivedProof process the received proof, calling each received proof handler registered in worker instance
314314
func (wrk *Worker) ReceivedProof(proofHandler consensus.ProofHandler) {
315-
// TODO: add preliminary checks
315+
if check.IfNilReflect(proofHandler) {
316+
log.Trace("ReceivedProof: nil proof handler")
317+
return
318+
}
319+
320+
log.Trace("ReceivedProof:", "proof header", proofHandler.GetHeaderHash())
316321

317322
wrk.mutReceivedProofHandler.RLock()
318323
for _, handler := range wrk.receivedProofHandlers {

0 commit comments

Comments
 (0)