Andrey Yarovoy created HDDS-16760:
-------------------------------------

             Summary: Remove the per-call InfoBucket from rooted-ofs listStatus
                 Key: HDDS-16760
                 URL: https://issues.apache.org/jira/browse/HDDS-16760
             Project: Apache Ozone
          Issue Type: Improvement
          Components: Ozone Manager
            Reporter: Andrey Yarovoy


`BasicRootedOzoneClientAdapterImpl.listStatus` issues a `getBucketDetails` 
(`InfoBucket`) RPC on every
call, so a file system client doing N listings sends 2N OM requests. On 
metadata-heavy `ofs` workloads
this makes `InfoBucket` one of the highest-volume RPCs OM serves — compare OM's 
`NumBucketInfos` counter
against `NumListStatus`.

The fetch does two jobs, and both have to be addressed before it can be dropped.

*Layout check.* `OzoneFSUtils.validateBucketLayout` rejects `OBJECT_STORE`. 
Move it into OM, following
HDDS-15925: `OmMetadataReader.listStatus` and `listStatusLight` lack the check 
today, and
`ResolvedBucket` already carries the link-resolved layout, so it costs no extra 
lookup. `listStatus` has
no object-store caller — nothing in `s3gateway` calls it, and 
`DeleteKeyHandler`'s call is gated on
`isFileSystemOptimized()` — so the rejection can be unconditional, with no 
protobuf change.

*Orphan-link pre-check.* `isSourcePathExist()` makes `listStatus` return an 
empty list when a link
bucket's source has been deleted. OM already fails that case with 
`BUCKET_NOT_FOUND` via
`resolveBucketLink(..., allowDanglingBuckets=false)`. Move the disambiguation 
to the error path: list
optimistically with a locally built handle, and only on `BUCKET_NOT_FOUND` do 
the `getBucket()` plus link
resolve that picks between the empty list and `FileNotFoundException`.

The client then drops the fetch behind a new `OzoneManagerVersion` constant, 
retaining the current path
as the fallback for an older OM.

No protobuf change, no new configuration, no new result code. Released behavior 
is preserved in both the
orphan and not-found cases.

Two points for review: a direct Java client calling `OzoneBucket.listStatus` on 
an OBS bucket starts
receiving `NOT_SUPPORTED_OPERATION`, and dropping the fetch also drops the 
BUCKET/READ ACL check that
`getBucketDetails` performed.



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