Huang Kuan Hao created HDDS-16673:
-------------------------------------

             Summary: Avoid redundant ListBuckets RPCs when S3 bucket listing 
reaches the end
                 Key: HDDS-16673
                 URL: https://issues.apache.org/jira/browse/HDDS-16673
             Project: Apache Ozone
          Issue Type: Sub-task
            Reporter: Huang Kuan Hao
            Assignee: Huang Kuan Hao


RootEndpoint checks the bucket iterator again for a continuation token after 
the listing loop has already observed an empty page. OzoneVolume's bucket 
iterator does not retain the exhausted state, so this sends a duplicate 
ListBuckets RPC for non-empty final pages in paginated ListBuckets and 
ListDirectoryBuckets requests.

Check the response limit before calling hasNext() in the loop, and perform the 
post-loop lookahead only when the limit is reached. Keep that lookahead for 
full pages, since reaching the requested limit alone does not establish whether 
more buckets remain. This saves one ListBuckets RPC for affected requests while 
retaining the initial listing request, existing authorization, bucket 
filtering, and continuation-token construction.

Regression tests should use the real OzoneVolume iterator and verify:
* The terminal empty page is fetched only once for both underfilled and 
exact-limit final pages.
* Full pages with more results retain a continuation token, and continuation 
requests return the remaining results correctly.
* Empty lists, bucket results, and owner information retain their existing 
behavior.
* ListDirectoryBuckets retains its FSO filtering with mixed bucket layouts and 
its existing max-directory-buckets=0 behavior.

AWS API references:
* 
[ListBuckets|https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html]:
 max-buckets ranges from 1 to 10000; ContinuationToken indicates more buckets 
can be listed.
* 
[ListDirectoryBuckets|https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListDirectoryBuckets.html]:
 max-directory-buckets ranges from 0 to 1000; ContinuationToken is used for 
pagination.



--
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