apache/pulsar · error · RestException

Topic partitions were not yet created

Error message

Topic partitions were not yet created

What it means

The partitioned topic's metadata exists but its actual partitions have not been created yet (partitions == 0 or null metadata), so an operation requiring concrete partition topics fails; typically resolved by triggering partition creation or retrying.

Source

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

        if (!topicName.isPartitioned()) {
            return FutureUtil.failedFuture(new RestException(Status.NOT_FOUND,
                    getTopicNotFoundErrorMessage(topicName.toString())));
        }

        return getPartitionedTopicMetadataAsync(
                TopicName.get(topicName.getPartitionedTopicName()), false, false)
                .thenAccept(partitionedTopicMetadata -> {
                    if (partitionedTopicMetadata == null || partitionedTopicMetadata.partitions == 0) {
                        final String topicErrorType = partitionedTopicMetadata
                                == null ? "has no metadata" : "has zero partitions";
                        throw new RestException(Status.NOT_FOUND, String.format(
                                "Partitioned Topic not found: %s %s", topicName.toString(), topicErrorType));
                    }
                })
                .thenCompose(__ -> internalGetListAsync(Optional.empty(), null))
                .thenApply(topics -> {
                    if (!topics.contains(topicName.toString())) {
                        throw new RestException(Status.NOT_FOUND, "Topic partitions were not yet created");
                    }
                    throw new RestException(Status.NOT_FOUND,
                        getPartitionedTopicNotFoundErrorMessage(topicName.toString()));
            });
    }

    /**
     * Find the subscription or create it when automatic subscription creation is allowed.
     */
    private CompletableFuture<Subscription> findOrCreateSubscriptionAsync(String subName, PersistentTopic topic) {
        Subscription subscription = topic.getSubscription(subName);
        if (subscription != null) {
            return CompletableFuture.completedFuture(subscription);
        }

        return pulsar().getBrokerService().isAllowAutoSubscriptionCreationAsync(topicName)
                .thenCompose(isAllowed -> {
                    Subscription existingSubscription = topic.getSubscription(subName);

View on GitHub (pinned to 820761864e)

Solutions

  1. Re-run partition creation (update partitions) so actual partitions are materialized
  2. Inspect broker logs for a failed earlier creation attempt
Defensive patterns

Strategy: validation

When it happens

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