apache/pulsar · error · RestException

e

Error message

e

What it means

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.

Source

Thrown at pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java:3398

                    }

                    return pulsar().getBrokerService().getManagedLedgerConfig(topicName)
                            .thenCompose(config -> {
                                ManagedLedgerOfflineBacklog offlineTopicBacklog =
                                        new ManagedLedgerOfflineBacklog(config.getDigestType(), config.getPassword(),
                                                pulsar().getAdvertisedAddress(), false);
                                try {
                                    PersistentOfflineTopicStats estimateOfflineTopicStats =
                                            offlineTopicBacklog.estimateUnloadedTopicBacklog(
                                                    pulsar().getBrokerService()
                                                            .getManagedLedgerFactoryForTopic(topicName,
                                                                    config.getStorageClassName()),
                                                    topicName);
                                    pulsar().getBrokerService()
                                            .cacheOfflineTopicStats(topicName, estimateOfflineTopicStats);
                                    return CompletableFuture.completedFuture(estimateOfflineTopicStats);
                                } catch (Exception e) {
                                    throw new RestException(e);
                                }
                            });

                });
    }

    @SuppressWarnings("deprecation")
    protected CompletableFuture<Map<BacklogQuota.BacklogQuotaType, BacklogQuota>> internalGetBacklogQuota(
            boolean applied, boolean isGlobal) {
        return getTopicPoliciesAsyncWithRetry(topicName, isGlobal)
            .thenApply(op -> {
                Map<BacklogQuota.BacklogQuotaType, BacklogQuota> quotaMap = op
                        .map(TopicPolicies::getBackLogQuotaMap)
                        .map(map -> {
                            HashMap<BacklogQuota.BacklogQuotaType, BacklogQuota> hashMap = new HashMap<>();
                            map.forEach((key, value) -> hashMap.put(BacklogQuota.BacklogQuotaType.valueOf(key), value));
                            return hashMap;
                        }).orElse(new HashMap<>());

View on GitHub (pinned to 820761864e)

Solutions

  1. Inspect the nested cause in the REST response/logs for the real failure
  2. Confirm the ledger/digest/password configuration matches the topic's offloaded data
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java:3398 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/d6f932d1638a70f9. Report an issue: GitHub.