apache/pulsar · error · ManagedLedgerException
ManagedLedgerStorageClass ${storageClassName} not found for
Error message
ManagedLedgerStorageClass ${storageClassName} not found for topic ${topicName} What it means
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.
Source
Thrown at pulsar-broker/src/main/java/org/apache/pulsar/broker/service/BrokerService.java:1630
});
});
return future;
}
public CompletableFuture<ManagedLedgerFactory> getManagedLedgerFactoryForTopic(TopicName topicName) {
return getManagedLedgerConfig(topicName)
.thenApply(config -> {
String storageClassName = config.getStorageClassName();
return getManagedLedgerFactoryForTopic(topicName, storageClassName);
});
}
public ManagedLedgerFactory getManagedLedgerFactoryForTopic(TopicName topicName, String storageClassName) {
Optional<ManagedLedgerStorageClass> managedLedgerStorageClass =
managedLedgerStorage.getManagedLedgerStorageClass(storageClassName);
if (!managedLedgerStorageClass.isPresent()) {
throw new CompletionException(new ManagedLedgerException(
"ManagedLedgerStorageClass " + storageClassName + " not found for topic " + topicName));
}
return managedLedgerStorageClass
.get()
.getManagedLedgerFactory();
}
public void deleteTopicAuthenticationWithRetry(String topic, CompletableFuture<Void> future, int count) {
if (count == 0) {
log.error().attr("topic", topic).log("The number of retries has exhausted for topic");
future.completeExceptionally(new MetadataStoreException("The number of retries has exhausted"));
return;
}
// Check whether there are auth policies for the topic
authorizationService.removePermissionsAsync(TopicName.get(topic))
.thenAccept(v -> {
log.info().attr("topic", topic).log("Successfully delete authentication policies for topic");
future.complete(null);View on GitHub (pinned to 820761864e)
Solutions
- Fix the storage-class configuration so it names a registered class
- Ensure the extended storage provider is on the classpath and loaded
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at pulsar-broker/src/main/java/org/apache/pulsar/broker/service/BrokerService.java:1630 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/71bbd344010957bf.
Report an issue: GitHub.