{"record":{"id":"85612b054f99f3fd","repo":"apache/pulsar","slug":"serviceendpoint-must-specified-for-driver-offlo","errorCode":null,"errorMessage":"ServiceEndpoint must specified for ${driver} offload","messagePattern":"ServiceEndpoint must specified for (.+?) offload","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"tiered-storage/jcloud/src/main/java/org/apache/bookkeeper/mledger/offload/jcloud/provider/JCloudBlobStoreProvider.java","lineNumber":419,"sourceCode":"        contextBuilder.endpoint(config.getServiceEndpoint());\n\n        if (config.getProviderCredentials() != null) {\n            return contextBuilder\n                    .credentialsSupplier(config.getCredentials()::get)\n                    .buildView(BlobStoreContext.class)\n                    .getBlobStore();\n        } else {\n            log.warn().attr(\"driver\", config.getDriver()).attr(\"bucket\", config.getBucket())\n                    .log(\"The credentials is null\");\n            return contextBuilder\n                    .buildView(BlobStoreContext.class)\n                    .getBlobStore();\n        }\n    };\n\n    static final ConfigValidation S3_VALIDATION = (TieredStorageConfiguration config) -> {\n        if (Strings.isNullOrEmpty(config.getServiceEndpoint())) {\n            throw new IllegalArgumentException(\n                    \"ServiceEndpoint must specified for \" + config.getDriver() + \" offload\");\n        }\n\n        if (Strings.isNullOrEmpty(config.getBucket())) {\n            throw new IllegalArgumentException(\n                    \"Bucket cannot be empty for \" + config.getDriver() + \" offload\");\n        }\n\n        if (config.getMaxBlockSizeInBytes() < (5 * 1024 * 1024)) {\n            throw new IllegalArgumentException(\n                    \"ManagedLedgerOffloadMaxBlockSizeInBytes cannot be less than 5MB for \"\n                            + config.getDriver() + \" offload\");\n        }\n    };\n\n    static final CredentialBuilder S3_CREDENTIAL_BUILDER = (TieredStorageConfiguration config) -> {\n        if (config.getCredentials() != null) {\n            return;","sourceCodeStart":401,"sourceCodeEnd":437,"githubUrl":"https://github.com/apache/pulsar/blob/820761864ed8e2a7d2e52dd9763ad2ae117c1395/tiered-storage/jcloud/src/main/java/org/apache/bookkeeper/mledger/offload/jcloud/provider/JCloudBlobStoreProvider.java#L401-L437","documentation":"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.","triggerScenarios":"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.","commonSituations":"See trigger scenarios.","solutions":["Set managedLedgerOffloadServiceEndpoint to the S3-compatible endpoint URL"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"820761864ed8e2a7d2e52dd9763ad2ae117c1395","analyzedAt":"2026-09-06T00:14:20.138Z","contentChangedAt":"2026-09-06T00:14:20.138Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}