spec_exec: fix can_be_ignored function #1124
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
ref: #1083
This is a first iteration of fixing #1083 - one we can merge before 0.15. I think this is crucial for speculative execution's performance - current implementation does not ignore any of the DbErrors. If any DbError is returned from database, we return prematurely without further investigation.
Previous implementation did not make much sense. We would prematurely return from speculative execution for some errors which could be ignored.
I adjusted the function, so we use
#[deny(clippy::wildcard_enum_match_arm)]
lint. It will force the developer to think before adjusting this function if new QueryError variant is introduced.I categorized the errors (see the comments in the code) and justified why each of them needs to be ignored or not.
Note: In the comments, I mention that there are some error variants we don't expect there. It's true, because not all of the
QueryError
variants could be constructed at this stage. I'm currently working on narrowing the error type passed to this function (as well as errors passed toRetrySession::decide_should_retry
andLBP::on_query_failure
).Pre-review checklist
./docs/source/
.Fixes:
annotations to PR description.