From 3e8e6bd54395f30e682b90a66cce45a9a4254c7e Mon Sep 17 00:00:00 2001 From: Elijah Duffy Date: Fri, 27 Mar 2026 17:53:32 -0700 Subject: [PATCH] attempt to harden ensure_bucket reliability --- .../server/src/officeconvert_server/storage.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/python/packages/server/src/officeconvert_server/storage.py b/python/packages/server/src/officeconvert_server/storage.py index 20f1d94..940092c 100644 --- a/python/packages/server/src/officeconvert_server/storage.py +++ b/python/packages/server/src/officeconvert_server/storage.py @@ -39,9 +39,19 @@ class S3Store: ) def ensure_bucket(self, bucket_name: str) -> None: - """Create a bucket if it does not already exist.""" - if not self._client.bucket_exists(bucket_name): + """Create a bucket if it does not already exist. + + Uses CreateBucket only, not HeadBucket. Some S3-compatible stores + (including SeaweedFS) mishandle or over-restrict HeadBucket; the MinIO + client's bucket_exists() maps non-NoSuchBucket errors to failures. + Idempotent create covers the same contract with fewer round trips. + """ + try: self._client.make_bucket(bucket_name) + except S3Error as exc: + if exc.code in ("BucketAlreadyOwnedByYou", "BucketAlreadyExists"): + return + raise def presigned_put_url(self, bucket_name: str, object_key: str, *, ttl_seconds: int) -> str: """Generate a presigned PUT URL for a single object upload."""