From 38b211e260a8e57ef241fef67986a7d1a6105ebe Mon Sep 17 00:00:00 2001 From: msutton Date: Mon, 14 Mar 2022 13:40:18 +0200 Subject: [PATCH] Make sure there are no negative numbers in the report --- .../flows/v4/blockrelay/ibd_progress_reporter.go | 12 ++++++++++-- .../flows/v5/blockrelay/ibd_progress_reporter.go | 10 +++++++++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/app/protocol/flows/v4/blockrelay/ibd_progress_reporter.go b/app/protocol/flows/v4/blockrelay/ibd_progress_reporter.go index 3ecc57636..bd6d1d973 100644 --- a/app/protocol/flows/v4/blockrelay/ibd_progress_reporter.go +++ b/app/protocol/flows/v4/blockrelay/ibd_progress_reporter.go @@ -10,6 +10,10 @@ type ibdProgressReporter struct { } func newIBDProgressReporter(lowDAAScore uint64, highDAAScore uint64, objectName string) *ibdProgressReporter { + if highDAAScore <= lowDAAScore { + // Avoid a zero or negative diff + highDAAScore = lowDAAScore + 1 + } return &ibdProgressReporter{ lowDAAScore: lowDAAScore, highDAAScore: highDAAScore, @@ -22,13 +26,17 @@ func newIBDProgressReporter(lowDAAScore uint64, highDAAScore uint64, objectName func (ipr *ibdProgressReporter) reportProgress(processedDelta int, highestProcessedDAAScore uint64) { ipr.processed += processedDelta - + // Avoid exploding numbers in the percentage report, since the original `highDAAScore` might have been only a hint if highestProcessedDAAScore > ipr.highDAAScore { ipr.highDAAScore = highestProcessedDAAScore + 1 // + 1 for keeping it at 99% ipr.totalDAAScoreDifference = ipr.highDAAScore - ipr.lowDAAScore } - relativeDAAScore := highestProcessedDAAScore - ipr.lowDAAScore + relativeDAAScore := uint64(0) + if highestProcessedDAAScore > ipr.lowDAAScore { + // Avoid a negative diff + relativeDAAScore = highestProcessedDAAScore - ipr.lowDAAScore + } progressPercent := int((float64(relativeDAAScore) / float64(ipr.totalDAAScoreDifference)) * 100) if progressPercent > ipr.lastReportedProgressPercent { log.Infof("IBD: Processed %d %s (%d%%)", ipr.processed, ipr.objectName, progressPercent) diff --git a/app/protocol/flows/v5/blockrelay/ibd_progress_reporter.go b/app/protocol/flows/v5/blockrelay/ibd_progress_reporter.go index 2e6c4f378..bd6d1d973 100644 --- a/app/protocol/flows/v5/blockrelay/ibd_progress_reporter.go +++ b/app/protocol/flows/v5/blockrelay/ibd_progress_reporter.go @@ -10,6 +10,10 @@ type ibdProgressReporter struct { } func newIBDProgressReporter(lowDAAScore uint64, highDAAScore uint64, objectName string) *ibdProgressReporter { + if highDAAScore <= lowDAAScore { + // Avoid a zero or negative diff + highDAAScore = lowDAAScore + 1 + } return &ibdProgressReporter{ lowDAAScore: lowDAAScore, highDAAScore: highDAAScore, @@ -28,7 +32,11 @@ func (ipr *ibdProgressReporter) reportProgress(processedDelta int, highestProces ipr.highDAAScore = highestProcessedDAAScore + 1 // + 1 for keeping it at 99% ipr.totalDAAScoreDifference = ipr.highDAAScore - ipr.lowDAAScore } - relativeDAAScore := highestProcessedDAAScore - ipr.lowDAAScore + relativeDAAScore := uint64(0) + if highestProcessedDAAScore > ipr.lowDAAScore { + // Avoid a negative diff + relativeDAAScore = highestProcessedDAAScore - ipr.lowDAAScore + } progressPercent := int((float64(relativeDAAScore) / float64(ipr.totalDAAScoreDifference)) * 100) if progressPercent > ipr.lastReportedProgressPercent { log.Infof("IBD: Processed %d %s (%d%%)", ipr.processed, ipr.objectName, progressPercent)