HDDS-16211. Avoid the throwaway list copy in OMAllocateBlockRequest quota check - #11057
Open
rich7420 wants to merge 1 commit into
Open
HDDS-16211. Avoid the throwaway list copy in OMAllocateBlockRequest quota check#11057rich7420 wants to merge 1 commit into
rich7420 wants to merge 1 commit into
Conversation
…uota check getLatestVersionLocations().getLocationList().size() allocated a flattened list on every block allocation just to read its size. Use getLocationListCount(), which sums the per-version list sizes with no allocation; the value is identical and the multiplication already widens to long.
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
What changes were proposed in this pull request?
OMAllocateBlockRequest.validateAndUpdateCache computes the already-allocated key size only to multiply by the block size, but calls getLocationList() (documented as not O(1)) purely to read size(), then discards the list — on every block allocation, under the bucket write lock:
long hadAllocatedKeySize =
openKeyInfo.getLatestVersionLocations().getLocationList().size()
* ozoneManager.getScmBlockSize();
Fix: use getLocationListCount() (values().stream().mapToLong(List::size).sum()), which returns the same total with no allocation. The result already widens to long for the multiplication, so the value is unchanged. Behavior unchanged.
What is the link to the Apache JIRA
https://issues.apache.org/jira/browse/HDDS-16211
How was this patch tested?
https://github.com/rich7420/ozone/actions/runs/32219890598