apache/pulsar · error · IllegalArgumentException

Bucket cannot be empty for Local offload

Error message

Bucket cannot be empty for Local offload

What it means

Tiered-storage config validation in JCloudBlobStoreProvider's TRANSIENT driver: the bucket (or container) setting required for transient S3-compatible offload is empty, so the blob-store target is undefined and validation aborts; the managedLedgerOffloadBucket configuration key is the faulty input.

Source

Thrown at tiered-storage/jcloud/src/main/java/org/apache/bookkeeper/mledger/offload/jcloud/provider/JCloudBlobStoreProvider.java:216

            return S3_BLOB_STORE_BUILDER.getBlobStore(config);
        }

        @Override
        public void buildCredentials(TieredStorageConfiguration config) {
            S3_CREDENTIAL_BUILDER.buildCredentials(config);
        }

        @Override
        public void validate(TieredStorageConfiguration config) throws IllegalArgumentException {
            S3_VALIDATION.validate(config);
        }
    },

    TRANSIENT("transient", new AnonymousProviderMetadata(new TransientApiMetadata(), "")) {
        @Override
        public void validate(TieredStorageConfiguration config) throws IllegalArgumentException {
            if (Strings.isNullOrEmpty(config.getBucket())) {
                throw new IllegalArgumentException(
                    "Bucket cannot be empty for Local offload");
            }
        }

        @Override
        public BlobStore getBlobStore(TieredStorageConfiguration config) {

            ContextBuilder contextBuilder =  ContextBuilder.newBuilder("transient");
            ShadedJCloudsUtils.addStandardModules(contextBuilder);
            BlobStoreContext ctx = contextBuilder
                    .buildView(BlobStoreContext.class);

            BlobStore bs = ctx.getBlobStore();

            if (!bs.containerExists(config.getBucket())) {
                Location loc = new LocationBuilder()
                        .scope(LocationScope.HOST)
                        .id(UUID.randomUUID() + "")

View on GitHub (pinned to 820761864e)

Solutions

  1. Set managedLedgerOffloadBucket in the broker configuration
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at tiered-storage/jcloud/src/main/java/org/apache/bookkeeper/mledger/offload/jcloud/provider/JCloudBlobStoreProvider.java:216 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of apache/pulsar@820761864e (2026-09-06). Data as JSON: /api/errors/41d88e529ef4af1c. Report an issue: GitHub.