{"record":{"id":"d16eb3ac23708eb2","repo":"rustfs/rustfs","slug":"notimplemented","errorCode":"NotImplemented","errorMessage":"The list_buckets API is not implemented in this build.","messagePattern":"The list_buckets API is not implemented in this build\\.","errorType":"error_code","errorClass":"std::io::Error","httpStatus":null,"severity":"error","filePath":"crates/ecstore/src/client/api_list.rs","lineNumber":41,"sourceCode":"    api_s3_datatypes::{\n        ListBucketResult, ListBucketV2Result, ListMultipartUploadsResult, ListObjectPartsResult, ListVersionsResult, ObjectPart,\n    },\n    credentials,\n    transition_api::{ReaderImpl, RequestMetadata, TransitionClient, collect_response_body},\n};\nuse crate::storage_api_contracts::bucket::BucketInfo;\nuse http::{HeaderMap, StatusCode};\nuse http_body_util::BodyExt;\nuse hyper::body::Body;\nuse hyper::body::Bytes;\nuse rustfs_config::MAX_S3_CLIENT_RESPONSE_SIZE;\nuse rustfs_utils::hash::EMPTY_STRING_SHA256_HASH;\nuse std::collections::HashMap;\nuse std::io::ErrorKind;\n\nimpl TransitionClient {\n    pub fn list_buckets(&self) -> Result<Vec<BucketInfo>, std::io::Error> {\n        Err(std::io::Error::new(\n            ErrorKind::Unsupported,\n            credentials::ErrorResponse {\n                sts_error: credentials::STSError {\n                    r#type: \"\".to_string(),\n                    code: \"NotImplemented\".to_string(),\n                    message: \"The list_buckets API is not implemented in this build.\".to_string(),\n                },\n                request_id: \"\".to_string(),\n            },\n        ))\n    }\n\n    pub async fn list_objects_v2_query(\n        &self,\n        bucket_name: &str,\n        object_prefix: &str,\n        continuation_token: &str,\n        fetch_owner: bool,","sourceCodeStart":23,"sourceCodeEnd":59,"githubUrl":"https://github.com/rustfs/rustfs/blob/35af688cd9d41b4346fbe27dcf7250ba72046c1f/crates/ecstore/src/client/api_list.rs#L23-L59","documentation":"TransitionClient::list_buckets is an intentional stub in this build: it returns ErrorKind::Unsupported wrapping an embedded ErrorResponse whose code is \"NotImplemented\". The remote-tier client deliberately does not support bucket enumeration; the trait surface exists but the operation is unimplemented, so any code path that reaches it fails deterministically.","triggerScenarios":"Calling client.list_buckets() on a TransitionClient; generic tooling that enumerates buckets via a shared client trait dispatching to this implementation.","commonSituations":"Ported S3 tooling that assumes all clients implement ListBuckets; scripts trying to discover tier buckets through the transition client.","solutions":["Do not use the transition client for bucket enumeration; enumerate buckets through the S3 API/admin layer of the target system instead","Detect the stub by checking io ErrorKind::Unsupported plus embedded code \"NotImplemented\" and fall back to a capable client"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":"fn is_not_implemented(err: &std::io::Error) -> bool {\n    err.kind() == std::io::ErrorKind::Unsupported\n        && err.get_ref().and_then(|e| e.downcast_ref::<credentials::ErrorResponse>()).is_some_and(|r| r.sts_error.code == \"NotImplemented\")\n}","tryCatchPattern":"match client.list_buckets() {\n    Err(err) if is_not_implemented(&err) => {\n        // fall back to an S3/admin API that enumerates buckets on the target system\n    }\n    other => other?,\n}","preventionTips":["Do not route bucket discovery through the transition client; use a client whose trait implementation supports it","Centralize the ErrorKind::Unsupported + \"NotImplemented\" detection so stubbed APIs fail with a clear message"],"tags":["rustfs","client","not-implemented","listbuckets","tiering"],"backgroundTag":"api-not-implemented","analyzedSha":"35af688cd9d41b4346fbe27dcf7250ba72046c1f","analyzedAt":"2026-08-20T21:57:04.799Z","contentChangedAt":"2026-08-20T21:57:04.799Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}