apache/pulsar · error · IllegalArgumentException

ServiceEndpoint must specified for ${driver} offload

Error message

ServiceEndpoint must specified for ${driver} offload

What it means

Blob-store construction guard when building the jclouds context: an serviceEndpoint is required for the named driver (endpoint() called with the config value), and the configuration lacked it — the missing managedLedgerOffloadServiceEndpoint for that driver is the faulty input; credentials may also be null, logged as a warning.

Source

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

        contextBuilder.endpoint(config.getServiceEndpoint());

        if (config.getProviderCredentials() != null) {
            return contextBuilder
                    .credentialsSupplier(config.getCredentials()::get)
                    .buildView(BlobStoreContext.class)
                    .getBlobStore();
        } else {
            log.warn().attr("driver", config.getDriver()).attr("bucket", config.getBucket())
                    .log("The credentials is null");
            return contextBuilder
                    .buildView(BlobStoreContext.class)
                    .getBlobStore();
        }
    };

    static final ConfigValidation S3_VALIDATION = (TieredStorageConfiguration config) -> {
        if (Strings.isNullOrEmpty(config.getServiceEndpoint())) {
            throw new IllegalArgumentException(
                    "ServiceEndpoint must specified for " + config.getDriver() + " offload");
        }

        if (Strings.isNullOrEmpty(config.getBucket())) {
            throw new IllegalArgumentException(
                    "Bucket cannot be empty for " + config.getDriver() + " offload");
        }

        if (config.getMaxBlockSizeInBytes() < (5 * 1024 * 1024)) {
            throw new IllegalArgumentException(
                    "ManagedLedgerOffloadMaxBlockSizeInBytes cannot be less than 5MB for "
                            + config.getDriver() + " offload");
        }
    };

    static final CredentialBuilder S3_CREDENTIAL_BUILDER = (TieredStorageConfiguration config) -> {
        if (config.getCredentials() != null) {
            return;

View on GitHub (pinned to 820761864e)

Solutions

  1. Set managedLedgerOffloadServiceEndpoint to the S3-compatible endpoint URL
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:419 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/85612b054f99f3fd. Report an issue: GitHub.