doppelganger: guard against reordering (#4691)

This commit is contained in:
Jacek Sieka 2023-03-03 18:38:48 +01:00 committed by GitHub
parent 65aee9cf22
commit fec580c39c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 25 additions and 8 deletions

View File

@ -278,10 +278,18 @@ proc doppelgangerChecked*(validator: AttachedValidator, epoch: Epoch) =
if validator.doppelCheck.isNone():
debug "Doppelganger first check",
validator = shortLog(validator), epoch
elif validator.doppelCheck.get() + 1 notin [epoch, epoch + 1]:
debug "Doppelganger stale check",
validator = shortLog(validator),
checked = validator.doppelCheck.get(), epoch
else:
let check = validator.doppelCheck.get()
if check > epoch:
# Shouldn't happen but due to `await`, it may - consider turning into
# assert
debug "Doppelganger reordered check",
validator = shortLog(validator), check, epoch
return
if check - epoch > 1:
debug "Doppelganger stale check",
validator = shortLog(validator), check, epoch
validator.doppelCheck = Opt.some epoch
@ -290,10 +298,19 @@ proc doppelgangerActivity*(validator: AttachedValidator, epoch: Epoch) =
if validator.doppelActivity.isNone():
debug "Doppelganger first activity",
validator = shortLog(validator), epoch
elif validator.doppelActivity.get() + 1 notin [epoch, epoch + 1]:
debug "Doppelganger stale activity",
validator = shortLog(validator),
checked = validator.doppelActivity.get(), epoch
else:
let activity = validator.doppelActivity.get()
if activity > epoch:
# Shouldn't happen but due to `await`, it may - consider turning into
# assert
debug "Doppelganger reordered activity",
validator = shortLog(validator), activity, epoch
return
if activity - epoch > 1:
# We missed work in some epoch
debug "Doppelganger stale activity",
validator = shortLog(validator), activity, epoch
validator.doppelActivity = Opt.some epoch