Description
Loosely connected to #1434 where the potential issue was first recognised.
Backers seem to retry failed validation (once per error type). In general it would be better to have backing stricter than approval voting / disputes. This is currently the case for timeouts but another aspect should be respecting transient errors and not doing any retries in in the backing stage. This reduces the chance of nondeterministic blocks getting backed and honest backers getting slashed.
Call path in question:
polkadot-sdk/polkadot/node/core/backing/src/lib.rs
always delegates backing validation to fn request_candidate_validation
which in turn send a message CandidateValidationMessage::ValidateFromExhaustive
. This particular message triggers a fn validate_candidate_exhaustive
which leads directly to fn validate_candidate_with_retry
. Backing uses the validation implementation with a retry instead of the fn validate_candidate
.
fn validate_candidate_with_retry
allows the validation to be retried in cases of:
- completely invalid candidate
- ambiguous worker death
- internal error
Each case can be retried once. So it is possible that multiple retires will be attempted.
This can be somewhat easily amended by passing extra details in the message and changing the behaviour in candidate validation in case of backing validation. The new behaviour will simply refer to the non retry version of the func.
Metadata
Assignees
Labels
Type
Projects
Status
Completed