{"record":{"id":"0e889acb1217c9bd","repo":"apache/dolphinscheduler","slug":"resource-alibaba-cloud-obs-bucket-name-is-empty","errorCode":null,"errorMessage":"resource.alibaba.cloud.obs.bucket.name is empty","messagePattern":"resource\\.alibaba\\.cloud\\.obs\\.bucket\\.name is empty","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"critical","filePath":"dolphinscheduler-storage-plugin/dolphinscheduler-storage-obs/src/main/java/org/apache/dolphinscheduler/plugin/storage/obs/ObsStorageOperator.java","lineNumber":246,"sourceCode":"                }\n            }\n            storageEntityList.addAll(tempList);\n        }\n\n        return storageEntityList;\n    }\n\n    @Override\n    public StorageEntity getStorageEntity(String resourceAbsolutePath) {\n        resourceAbsolutePath = transformObsKeyToAbsolutePath(resourceAbsolutePath);\n\n        ObsObject object = obsClient.getObject(bucketName, resourceAbsolutePath);\n        return transformObsObjectToStorageEntity(object);\n    }\n\n    private void ensureBucketSuccessfullyCreated(String bucketName) {\n        if (StringUtils.isBlank(bucketName)) {\n            throw new IllegalArgumentException(\"resource.alibaba.cloud.obs.bucket.name is empty\");\n        }\n\n        boolean existsBucket = obsClient.headBucket(bucketName);\n        if (!existsBucket) {\n            throw new IllegalArgumentException(\n                    \"bucketName: \" + bucketName + \" is not exists, you need to create them by yourself\");\n        }\n\n        log.info(\"bucketName: {} has been found\", bucketName);\n    }\n\n    protected StorageEntity transformObsObjectToStorageEntity(ObsObject object) {\n        ObjectMetadata metadata = object.getMetadata();\n        String fileAbsolutePath = transformObsKeyToAbsolutePath(object.getObjectKey());\n        ResourceMetadata resourceMetaData = getResourceMetaData(fileAbsolutePath);\n        String fileExtension = com.google.common.io.Files.getFileExtension(resourceMetaData.getResourceAbsolutePath());\n\n        return StorageEntity.builder()","sourceCodeStart":228,"sourceCodeEnd":264,"githubUrl":"https://github.com/apache/dolphinscheduler/blob/02eac45a1b6676e639fcbfb4be2243de5771b05d/dolphinscheduler-storage-plugin/dolphinscheduler-storage-obs/src/main/java/org/apache/dolphinscheduler/plugin/storage/obs/ObsStorageOperator.java#L228-L264","documentation":"ObsStorageOperator.ensureBucketSuccessfullyCreated throws IllegalArgumentException when the configured OBS bucket name is blank. Called from the constructor/init path, this fails operator initialization before any OBS request is made.","triggerScenarios":"Initializing ObsStorageOperator with resource.alibaba.cloud.obs.bucket.name unset or empty in the storage configuration (yaml/env).","commonSituations":"Missing or misnamed config key in common.properties / storage plugin config; environment variable not propagated; copying a config template and forgetting to fill in the bucket name.","solutions":["Set resource.alibaba.cloud.obs.bucket.name to a valid non-blank bucket name in the storage config","Verify the config file actually loaded (check startup logs for resolved properties)","If using env substitution, confirm the env var is exported in the scheduler's environment"],"exampleFix":"// before\nresource.alibaba.cloud.obs.bucket.name=\n// after\nresource.alibaba.cloud.obs.bucket.name=my-dolphin-resources","handlingStrategy":"validation","validationCode":"String bucket = config.get(\"resource.alibaba.cloud.obs.bucket.name\");\nif (bucket == null || bucket.isBlank()) {\n    throw new IllegalStateException(\"resource.alibaba.cloud.obs.bucket.name must be set before init\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    storageOperator = new ObsStorageOperator(cfg);\n} catch (IllegalArgumentException e) {\n    log.error(\"OBS storage misconfigured: {}\", e.getMessage());\n    throw e;\n}","preventionTips":["Validate all required storage config keys at deployment/startup","Keep a config checklist for the OBS plugin (bucket, endpoint, keys)","Use startup smoke tests that construct the operator before scheduling tasks"],"tags":["config","obs","missing-config"],"backgroundTag":"missing-required-config-field","analyzedSha":"02eac45a1b6676e639fcbfb4be2243de5771b05d","analyzedAt":"2026-09-06T17:43:00.555Z","contentChangedAt":"2026-09-06T17:43:00.555Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}