-
Notifications
You must be signed in to change notification settings - Fork 767
tiered_storage: fix bad_optional_access #30303
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
Merged
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
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.
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.
This seems reasonable to me, but also makes me wonder, should the caller be doing something different than a bad optional access? My guess it that it'll end up as a thrown exception / error case anyway, but wondering if there is a less surprising error scenario worth ironing out
It seems like this
redpanda/src/v/cloud_storage/remote_partition.cc
Lines 141 to 143 in bcaa00a
manifest.begin()and I'm wondering if we need a lower_bound there tooThere 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.
cc @Lazin for thoughts, given you authored this code and the remote_partition.cc snippet
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 it doesn't solve all edge cases. It will work if the manifest is not logically empty (all segments are below
_start_offset). If thelower_boundreturnsendthere will be bad optional access anyway.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.
Re: Andrew's concern: there's code a bit below that skips forward and handles this case.
Re: Evgeny's: You're right that if all segments are below _start_offset that this function would return nullopt. That'd be correct as there's no offset to return. The problem would be the .value call in first_uploaded_offset. However, where that's called it's guarded by an is_data_available vassert, which guarantees there is some segment at or above the start offset to be found, so the option will not be empty. I pushed the vassert into the first_uploaded_offset call and documented it as a precondition. Bottom line, I think this handles all bad optional accesses. The other outcome is a vassert trip indicating a specific bug.