summaryrefslogtreecommitdiff
path: root/ledger/tracker.go
diff options
context:
space:
mode:
Diffstat (limited to 'ledger/tracker.go')
-rw-r--r--ledger/tracker.go11
1 files changed, 11 insertions, 0 deletions
diff --git a/ledger/tracker.go b/ledger/tracker.go
index b5d608c2b..57b1e52c4 100644
--- a/ledger/tracker.go
+++ b/ledger/tracker.go
@@ -91,6 +91,9 @@ type ledgerTracker interface {
// effort, and all the trackers contribute to that effort. All the trackers are being handed a
// pointer to the deferredCommitRange, and have the ability to either modify it, or return a
// nil. If nil is returned, the commit would be skipped.
+ // The contract:
+ // offset must not be greater than the received dcr.offset value of non zero
+ // oldBase must not be modifed if non zero
produceCommittingTask(committedRound basics.Round, dbRound basics.Round, dcr *deferredCommitRange) *deferredCommitRange
// prepareCommit, commitRound and postCommit are called when it is time to commit tracker's data.
@@ -321,10 +324,18 @@ func (tr *trackerRegistry) scheduleCommit(blockqRound, maxLookback basics.Round)
}
cdr := &dcc.deferredCommitRange
for _, lt := range tr.trackers {
+ base := cdr.oldBase
+ offset := cdr.offset
cdr = lt.produceCommittingTask(blockqRound, dbRound, cdr)
if cdr == nil {
break
}
+ if offset > 0 && cdr.offset > offset {
+ tr.log.Warnf("tracker %T produced offset %d but expected not greater than %d, dbRound %d, latestRound %d", lt, cdr.offset, offset, dbRound, blockqRound)
+ }
+ if base > 0 && base != cdr.oldBase {
+ tr.log.Warnf("tracker %T modified oldBase %d that expected to be %d, dbRound %d, latestRound %d", lt, cdr.oldBase, base, dbRound, blockqRound)
+ }
}
if cdr != nil {
dcc.deferredCommitRange = *cdr