Skip to content
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 by Bors] - Update segment.rs #2950

Closed

Conversation

morenol
Copy link
Contributor

@morenol morenol commented Jan 20, 2023

Currently when using Isolation::ReadCommitted, we read records until current HW.

self.read_records(offset, Some(self.get_hw()), max_len)

Here, there are two scenarios. If Start offset is greater or equal than base offset of current active segment. Then read_records is call in that segment. If HW is greater than last offset in that segment it will fail. (I think that this scenario should not happen since current active segment should be ok)

.records_slice(start_offset, max_offset)

On the other hand, if the start offset is in a old segment, it calls find_slice, that first checks in which segment is the start offset and then call read_records there. This read_records will fail if that HW offset is not in the current segment.

.find_slice(start_offset, max_offset)

This PR updates read_records to truncate max_offset to end_offset of current segment if it is larger than that so we can read records of that segment without failures

@sehz sehz added this to the 0.10.4 milestone Jan 20, 2023
@sehz sehz added SPU SPU related storage labels Jan 20, 2023
Copy link
Contributor

@nacardin nacardin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not very familiar in this area, but looks logical to me

@morenol
Copy link
Contributor Author

morenol commented Jan 20, 2023

bors r+

bors bot pushed a commit that referenced this pull request Jan 20, 2023
Currently when using `Isolation::ReadCommitted`, we read records until current HW. https://github.com/infinyon/fluvio/blob/934544dec2403cd65113eda5c2a6fb6b509793d4/crates/fluvio-storage/src/replica.rs#L106

Here, there are two scenarios. If Start offset is greater or equal than base offset of current active segment. Then read_records is call in that segment. If HW is greater than last offset in that segment it will fail. (I think that this scenario should not happen since current active segment should be ok)
https://github.com/infinyon/fluvio/blob/934544dec2403cd65113eda5c2a6fb6b509793d4/crates/fluvio-storage/src/replica.rs#L348

On the other hand, if the start offset is in a old segment, it calls find_slice, that first checks in which segment is the start offset and then call `read_records` there. This read_records will fail if that HW offset is not in the current segment.

https://github.com/infinyon/fluvio/blob/934544dec2403cd65113eda5c2a6fb6b509793d4/crates/fluvio-storage/src/replica.rs#L361

This PR updates read_records to truncate max_offset to end_offset of current segment if it is larger than that so we can read records of that segment without failures


Co-authored-by: Luis Moreno <morenol@users.noreply.github.com>
@bors
Copy link

bors bot commented Jan 20, 2023

Pull request successfully merged into master.

Build succeeded:

@bors bors bot changed the title Update segment.rs [Merged by Bors] - Update segment.rs Jan 20, 2023
@bors bors bot closed this Jan 20, 2023
@bors bors bot deleted the do-not-fail-if-max-offset-is-not-in-current-segment branch January 20, 2023 19:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
SPU SPU related storage
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants