Prevent "index out of bounds" error when sync::SegmentedCache
was created with a non-power-of-two segments
#117
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.
This PR fixes
sync::SegmentedCache
to create the correct number of internal segments when the specified number of segments is not a power of two (e.g. 5).When a segmented cache is created with such a number of segments (e.g. 5), the number of the actual internal segments should be rounded up to a nearest power of two (e.g. 8). However the old code only created 5 of segments and caused a panic with "index out of bounds" when writing to or reading from the cache.
In addition to fixing the bug, add an unit test
sync::segment::tests::non_power_of_two_segments
to detect similar bugs in the future.