{"record":{"id":"d6f932d1638a70f9","repo":"apache/pulsar","slug":"e","errorCode":null,"errorMessage":"e","messagePattern":"e","errorType":"http","errorClass":"RestException","httpStatus":500,"severity":"error","filePath":"pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java","lineNumber":3398,"sourceCode":"                    }\n\n                    return pulsar().getBrokerService().getManagedLedgerConfig(topicName)\n                            .thenCompose(config -> {\n                                ManagedLedgerOfflineBacklog offlineTopicBacklog =\n                                        new ManagedLedgerOfflineBacklog(config.getDigestType(), config.getPassword(),\n                                                pulsar().getAdvertisedAddress(), false);\n                                try {\n                                    PersistentOfflineTopicStats estimateOfflineTopicStats =\n                                            offlineTopicBacklog.estimateUnloadedTopicBacklog(\n                                                    pulsar().getBrokerService()\n                                                            .getManagedLedgerFactoryForTopic(topicName,\n                                                                    config.getStorageClassName()),\n                                                    topicName);\n                                    pulsar().getBrokerService()\n                                            .cacheOfflineTopicStats(topicName, estimateOfflineTopicStats);\n                                    return CompletableFuture.completedFuture(estimateOfflineTopicStats);\n                                } catch (Exception e) {\n                                    throw new RestException(e);\n                                }\n                            });\n\n                });\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    protected CompletableFuture<Map<BacklogQuota.BacklogQuotaType, BacklogQuota>> internalGetBacklogQuota(\n            boolean applied, boolean isGlobal) {\n        return getTopicPoliciesAsyncWithRetry(topicName, isGlobal)\n            .thenApply(op -> {\n                Map<BacklogQuota.BacklogQuotaType, BacklogQuota> quotaMap = op\n                        .map(TopicPolicies::getBackLogQuotaMap)\n                        .map(map -> {\n                            HashMap<BacklogQuota.BacklogQuotaType, BacklogQuota> hashMap = new HashMap<>();\n                            map.forEach((key, value) -> hashMap.put(BacklogQuota.BacklogQuotaType.valueOf(key), value));\n                            return hashMap;\n                        }).orElse(new HashMap<>());","sourceCodeStart":3380,"sourceCodeEnd":3416,"githubUrl":"https://github.com/apache/pulsar/blob/820761864ed8e2a7d2e52dd9763ad2ae117c1395/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java#L3380-L3416","documentation":"Generic catch-all: the offline-topic backlog estimation code wraps an unexpected lower-level exception (identified only as 'e') while computing PersistentOfflineTopicStats with the managed-ledger digest config; the original cause is carried by the enclosing exception.","triggerScenarios":"Thrown at pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java:3398 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Inspect the nested cause in the REST response/logs for the real failure","Confirm the ledger/digest/password configuration matches the topic's offloaded data"],"exampleFix":null,"handlingStrategy":"try-catch","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-14T05:17:10.506Z"}