-
Notifications
You must be signed in to change notification settings - Fork 24.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Simplify Blobstore Consistency Check in Tests #73992
Simplify Blobstore Consistency Check in Tests #73992
Conversation
With work to make repo APIs more async incoming in elastic#73570 we need a non-blocking way to run this check. This adds that async check and removes the need to manually pass executors around as well.
Pinging @elastic/es-distributed (Team:Distributed) |
test/framework/src/main/java/org/elasticsearch/repositories/blobstore/BlobStoreTestUtil.java
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM 👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, one orthogonal comment. Also +1 to what Francisco said.
@@ -113,15 +112,13 @@ public static void assertConsistency(BlobStoreRepository repository, Executor ex | |||
assertIndexUUIDs(repository, repositoryData); | |||
assertSnapshotUUIDs(repository, repositoryData); | |||
assertShardIndexGenerations(blobContainer, repositoryData.shardGenerations()); | |||
return null; | |||
} catch (AssertionError e) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe we're catching the AssertionError
here in order to re-throw it on the calling thread so that we can use this within assertBusy()
for the third-party tests that allow for S3 to be eventually-consistent. Do we need that any more, now that S3 is properly consistent?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good question ... I guess you could make the same argument for other eventual consistency code (mainly EventuallyConsistentMockRepository
and just drop that stuff as well. But I always figured that we may still have other S3 compatible implementations out there in the wild that are eventually consistent and so it's nice to have this stuff in tests for third party testing? (not sure ... I don't know of any and would also be happy to drop all of it to save some LoC :))
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we could reasonably say a third (fourth?) party implementation that has weaker consistency than the real S3 is not compatible. The repo analysis API fails on inconsistent listings:
Lines 580 to 585 in 68817d7
final RepositoryVerificationException repositoryVerificationException = new RepositoryVerificationException( | |
request.repositoryName, | |
"expected blobs " + missingBlobs + " missing in [" + request.repositoryName + ":" + blobPath + "]" | |
); | |
logger.debug("failing due to missing blobs", repositoryVerificationException); | |
fail(repositoryVerificationException); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fair point, I'll open a follow-up that drops all these tests in a bit then :)
Thanks Francisco and David! |
With work to make repo APIs more async incoming in elastic#73570 we need a non-blocking way to run this check. This adds that async check and removes the need to manually pass executors around as well.
With work to make repo APIs more async incoming in #73570
we need a non-blocking way to run this check. This adds that async
check and removes the need to manually pass executors around as well.