[ 
https://issues.apache.org/jira/browse/HDDS-16357?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

ASF GitHub Bot updated HDDS-16357:
----------------------------------
    Labels: pull-request-available  (was: )

> Recon fileCount API does not normalize the fileSize query parameter
> -------------------------------------------------------------------
>
>                 Key: HDDS-16357
>                 URL: https://issues.apache.org/jira/browse/HDDS-16357
>             Project: Apache Ozone
>          Issue Type: Bug
>          Components: Ozone Recon
>            Reporter: Henry Chen
>            Assignee: Henry Chen
>            Priority: Minor
>              Labels: pull-request-available
>
> The Recon endpoint GET /api/v1/utilization/fileCount returns an empty result
> for any fileSize that is not an exact power of two.
> File counts are stored in a histogram keyed by
> (volume, bucket, fileSizeUpperBound), where the upper bound is computed by
> ReconUtils.getFileSizeUpperBound(). The write path applies this normalization
> in FileSizeCountTaskHelper#getFileSizeCountKey(), but the read path in
> UtilizationEndpoint#getFileCounts() builds the lookup key from the raw
> fileSize query parameter, so the key never matches unless the caller happens
> to pass a bin boundary.
> Steps to reproduce (bucket contains two 100000-byte keys, stored in bin 
> 131072):
>   GET /api/v1/utilization/fileCount?volume=vol1&bucket=bucket1&fileSize=100000
>   -> []                                   (expected: count 2 in bin 131072)
>   GET /api/v1/utilization/fileCount?volume=vol1&bucket=bucket1&fileSize=131072
>   -> [{"fileSize":131072,"count":2}]      (only works on an exact bin 
> boundary)
> The sibling endpoint /utilization/containerCount does normalize its parameter
> via ReconUtils.getContainerSizeUpperBound(), so the two APIs behave
> inconsistently.
> A second, related inconsistency: when the lookup does succeed, the response
> echoes the raw fileSize instead of the bin upper bound. The unfiltered branch
> of the same endpoint returns key.getFileSizeUpperBound(), so the meaning of
> the fileSize field in the response changes depending on whether the query
> parameter was supplied.
> Fix: normalize the parameter with ReconUtils.getFileSizeUpperBound() before
> building FileSizeCountKey, and set the normalized value on the response.
> Existing tests in TestEndpoints#testGetFileCounts only query exact bin
> boundaries, which is why this was not caught.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to