{"record":{"id":"71bbd344010957bf","repo":"apache/pulsar","slug":"managedledgerstorageclass-storageclassname-not","errorCode":null,"errorMessage":"ManagedLedgerStorageClass ${storageClassName} not found for topic ${topicName}","messagePattern":"ManagedLedgerStorageClass (.+?) not found for topic (.+?)","errorType":"exception","errorClass":"ManagedLedgerException","httpStatus":null,"severity":"error","filePath":"pulsar-broker/src/main/java/org/apache/pulsar/broker/service/BrokerService.java","lineNumber":1630,"sourceCode":"            });\n         });\n\n        return future;\n    }\n\n    public CompletableFuture<ManagedLedgerFactory> getManagedLedgerFactoryForTopic(TopicName topicName) {\n        return getManagedLedgerConfig(topicName)\n                .thenApply(config -> {\n                    String storageClassName = config.getStorageClassName();\n                    return getManagedLedgerFactoryForTopic(topicName, storageClassName);\n                });\n    }\n\n    public ManagedLedgerFactory getManagedLedgerFactoryForTopic(TopicName topicName, String storageClassName) {\n        Optional<ManagedLedgerStorageClass> managedLedgerStorageClass =\n                managedLedgerStorage.getManagedLedgerStorageClass(storageClassName);\n        if (!managedLedgerStorageClass.isPresent()) {\n            throw new CompletionException(new ManagedLedgerException(\n                    \"ManagedLedgerStorageClass \" + storageClassName + \" not found for topic \" + topicName));\n        }\n        return managedLedgerStorageClass\n                .get()\n                .getManagedLedgerFactory();\n    }\n\n    public void deleteTopicAuthenticationWithRetry(String topic, CompletableFuture<Void> future, int count) {\n        if (count == 0) {\n            log.error().attr(\"topic\", topic).log(\"The number of retries has exhausted for topic\");\n            future.completeExceptionally(new MetadataStoreException(\"The number of retries has exhausted\"));\n            return;\n        }\n        // Check whether there are auth policies for the topic\n        authorizationService.removePermissionsAsync(TopicName.get(topic))\n                    .thenAccept(v -> {\n                        log.info().attr(\"topic\", topic).log(\"Successfully delete authentication policies for topic\");\n                        future.complete(null);","sourceCodeStart":1612,"sourceCodeEnd":1648,"githubUrl":"https://github.com/apache/pulsar/blob/820761864ed8e2a7d2e52dd9763ad2ae117c1395/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/BrokerService.java#L1612-L1648","documentation":"getManagedLedgerFactoryForTopic could not resolve the configured managed-ledger storage class name for the topic: no storage-class plugin matching that name is registered, so the ledger factory (and default BookKeeper factory) cannot be selected.","triggerScenarios":"Thrown at pulsar-broker/src/main/java/org/apache/pulsar/broker/service/BrokerService.java:1630 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Fix the storage-class configuration so it names a registered class","Ensure the extended storage provider is on the classpath and loaded"],"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"}