Class AbstractTopic

java.lang.Object
org.apache.pulsar.broker.service.AbstractTopic
All Implemented Interfaces:
Topic, TopicPolicyListener<org.apache.pulsar.common.policies.data.TopicPolicies>
Direct Known Subclasses:
NonPersistentTopic, PersistentTopic

public abstract class AbstractTopic extends Object implements Topic, TopicPolicyListener<org.apache.pulsar.common.policies.data.TopicPolicies>
  • Field Details

    • POLICY_UPDATE_FAILURE_RETRY_TIME_SECONDS

      protected static final long POLICY_UPDATE_FAILURE_RETRY_TIME_SECONDS
      See Also:
    • topic

      protected final String topic
    • createFuture

      protected volatile CompletableFuture<Optional<Topic>> createFuture
    • producers

      protected final ConcurrentHashMap<String,Producer> producers
    • brokerService

      protected final BrokerService brokerService
    • replicatorPrefix

      protected final String replicatorPrefix
    • lock

      protected final ReentrantReadWriteLock lock
    • isFenced

      protected volatile boolean isFenced
    • topicPolicies

      protected final org.apache.pulsar.common.policies.data.HierarchyTopicPolicies topicPolicies
    • lastActive

      protected volatile long lastActive
    • hasBatchMessagePublished

      protected volatile boolean hasBatchMessagePublished
    • addEntryLatencyStatsUsec

      protected StatsBuckets addEntryLatencyStatsUsec
    • isEncryptionRequired

      protected volatile boolean isEncryptionRequired
    • isAllowAutoUpdateSchema

      protected volatile Boolean isAllowAutoUpdateSchema
    • topicPublishRateLimiter

      protected volatile PublishRateLimiter topicPublishRateLimiter
    • resourceGroupPublishLimiter

      protected volatile ResourceGroupPublishLimiter resourceGroupPublishLimiter
    • preciseTopicPublishRateLimitingEnable

      protected boolean preciseTopicPublishRateLimitingEnable
    • resourceGroupRateLimitingEnabled

      protected boolean resourceGroupRateLimitingEnabled
    • publishRateLimitedTimes

      protected volatile long publishRateLimitedTimes
    • userCreatedProducerCount

      protected volatile int userCreatedProducerCount
    • topicEpoch

      protected volatile Optional<Long> topicEpoch
    • msgOutFromRemovedSubscriptions

      protected final LongAdder msgOutFromRemovedSubscriptions
    • bytesOutFromRemovedSubscriptions

      protected final LongAdder bytesOutFromRemovedSubscriptions
    • entryFilters

      protected volatile org.apache.commons.lang3.tuple.Pair<String,List<EntryFilter>> entryFilters
  • Constructor Details

  • Method Details

    • getSubscribeRate

      public org.apache.pulsar.common.policies.data.SubscribeRate getSubscribeRate()
    • getSubscriptionDispatchRate

      public org.apache.pulsar.common.policies.data.impl.DispatchRateImpl getSubscriptionDispatchRate(String subscriptionName)
    • getSchemaCompatibilityStrategy

      public org.apache.pulsar.common.policies.data.SchemaCompatibilityStrategy getSchemaCompatibilityStrategy()
    • getDispatchRate

      public org.apache.pulsar.common.policies.data.impl.DispatchRateImpl getDispatchRate()
    • getEntryFiltersPolicy

      public org.apache.pulsar.common.policies.data.EntryFilters getEntryFiltersPolicy()
      Specified by:
      getEntryFiltersPolicy in interface Topic
    • getEntryFilters

      public List<EntryFilter> getEntryFilters()
      Specified by:
      getEntryFilters in interface Topic
    • getReplicatorDispatchRate

      public org.apache.pulsar.common.policies.data.impl.DispatchRateImpl getReplicatorDispatchRate()
    • updateTopicPolicy

      protected void updateTopicPolicy(org.apache.pulsar.common.policies.data.TopicPolicies data)
    • updateTopicPolicyByNamespacePolicy

      protected void updateTopicPolicyByNamespacePolicy(org.apache.pulsar.common.policies.data.Policies namespacePolicies)
    • isProducersExceeded

      public boolean isProducersExceeded(String producerName)
    • isProducersExceeded

      protected boolean isProducersExceeded(Producer producer)
    • isProducersExceeded

      protected boolean isProducersExceeded(boolean isRemote)
    • registerTopicPolicyListener

      protected void registerTopicPolicyListener()
    • unregisterTopicPolicyListener

      protected void unregisterTopicPolicyListener()
    • isSameAddressProducersExceeded

      protected boolean isSameAddressProducersExceeded(Producer producer)
    • getNumberOfSameAddressProducers

      public int getNumberOfSameAddressProducers(String clientAddress)
    • isConsumersExceededOnTopic

      public boolean isConsumersExceededOnTopic()
    • isSameAddressConsumersExceededOnTopic

      protected boolean isSameAddressConsumersExceededOnTopic(Consumer consumer)
    • getNumberOfConsumers

      public abstract int getNumberOfConsumers()
    • getNumberOfSameAddressConsumers

      public abstract int getNumberOfSameAddressConsumers(String clientAddress)
    • getNumberOfSameAddressConsumers

      protected int getNumberOfSameAddressConsumers(String clientAddress, List<? extends Subscription> subscriptions)
    • addConsumerToSubscription

      protected CompletableFuture<Void> addConsumerToSubscription(Subscription subscription, Consumer consumer)
    • getActiveConsumer

      protected Consumer getActiveConsumer(Subscription subscription)
    • disableCnxAutoRead

      public void disableCnxAutoRead()
      Specified by:
      disableCnxAutoRead in interface Topic
    • enableCnxAutoRead

      public void enableCnxAutoRead()
      Specified by:
      enableCnxAutoRead in interface Topic
    • hasLocalProducers

      protected boolean hasLocalProducers()
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • getProducers

      public Map<String,Producer> getProducers()
      Specified by:
      getProducers in interface Topic
    • getBrokerService

      public BrokerService getBrokerService()
      Description copied from interface: Topic
      Get BrokerService.
      Specified by:
      getBrokerService in interface Topic
      Returns:
    • getName

      public String getName()
      Specified by:
      getName in interface Topic
    • isEncryptionRequired

      public boolean isEncryptionRequired()
      Specified by:
      isEncryptionRequired in interface Topic
    • getSchemaValidationEnforced

      public boolean getSchemaValidationEnforced()
      Specified by:
      getSchemaValidationEnforced in interface Topic
    • markBatchMessagePublished

      public void markBatchMessagePublished()
    • getReplicatorPrefix

      public String getReplicatorPrefix()
    • getSchemaId

      protected String getSchemaId()
    • hasSchema

      public CompletableFuture<Boolean> hasSchema()
      Description copied from interface: Topic
      Whether a topic has had a schema defined for it.
      Specified by:
      hasSchema in interface Topic
    • addSchema

      public CompletableFuture<org.apache.pulsar.common.protocol.schema.SchemaVersion> addSchema(org.apache.pulsar.common.protocol.schema.SchemaData schema)
      Description copied from interface: Topic
      Add a schema to the topic. This will fail if the new schema is incompatible with the current schema.
      Specified by:
      addSchema in interface Topic
    • deleteSchema

      public CompletableFuture<org.apache.pulsar.common.protocol.schema.SchemaVersion> deleteSchema()
      Description copied from interface: Topic
      Delete the schema if this topic has a schema defined for it.
      Specified by:
      deleteSchema in interface Topic
    • checkSchemaCompatibleForConsumer

      public CompletableFuture<Void> checkSchemaCompatibleForConsumer(org.apache.pulsar.common.protocol.schema.SchemaData schema)
      Description copied from interface: Topic
      Check if schema is compatible with current topic schema.
      Specified by:
      checkSchemaCompatibleForConsumer in interface Topic
    • addProducer

      public CompletableFuture<Optional<Long>> addProducer(Producer producer, CompletableFuture<Void> producerQueuedFuture)
      Description copied from interface: Topic
      Tries to add a producer to the topic. Several validations will be performed.
      Specified by:
      addProducer in interface Topic
      Parameters:
      producer - Producer to add
      producerQueuedFuture - a future that will be triggered if the producer is being queued up prior of getting established
      Returns:
      the "topic epoch" if there is one or empty
    • incrementTopicEpochIfNeeded

      protected CompletableFuture<Optional<Long>> incrementTopicEpochIfNeeded(Producer producer, CompletableFuture<Void> producerQueuedFuture)
    • setTopicEpoch

      protected abstract CompletableFuture<Long> setTopicEpoch(long newEpoch)
    • incrementTopicEpoch

      protected abstract CompletableFuture<Long> incrementTopicEpoch(Optional<Long> currentEpoch)
    • recordAddLatency

      public void recordAddLatency(long latency, TimeUnit unit)
      Description copied from interface: Topic
      record add-latency.
      Specified by:
      recordAddLatency in interface Topic
    • increasePublishLimitedTimes

      public long increasePublishLimitedTimes()
      Description copied from interface: Topic
      increase the publishing limited times.
      Specified by:
      increasePublishLimitedTimes in interface Topic
    • checkTopicPublishThrottlingRate

      public void checkTopicPublishThrottlingRate()
      Specified by:
      checkTopicPublishThrottlingRate in interface Topic
    • incrementPublishCount

      public void incrementPublishCount(int numOfMessages, long msgSizeInBytes)
      Specified by:
      incrementPublishCount in interface Topic
    • resetTopicPublishCountAndEnableReadIfRequired

      public void resetTopicPublishCountAndEnableReadIfRequired()
      Specified by:
      resetTopicPublishCountAndEnableReadIfRequired in interface Topic
    • updateDispatchRateLimiter

      public void updateDispatchRateLimiter()
    • resetBrokerPublishCountAndEnableReadIfRequired

      public void resetBrokerPublishCountAndEnableReadIfRequired(boolean doneBrokerReset)
      Specified by:
      resetBrokerPublishCountAndEnableReadIfRequired in interface Topic
    • enableProducerReadForPublishRateLimiting

      protected void enableProducerReadForPublishRateLimiting()
      it sets cnx auto-readable if producer's cnx is disabled due to publish-throttling.
    • disableProducerRead

      protected void disableProducerRead()
    • checkTopicFenced

      protected void checkTopicFenced() throws BrokerServiceException
      Throws:
      BrokerServiceException
    • internalAddProducer

      protected CompletableFuture<Void> internalAddProducer(Producer producer)
    • removeProducer

      public void removeProducer(Producer producer)
      Specified by:
      removeProducer in interface Topic
    • handleProducerRemoved

      protected void handleProducerRemoved(Producer producer)
    • handleConsumerAdded

      public void handleConsumerAdded(String subscriptionName, String consumerName)
    • decrementUsageCount

      public void decrementUsageCount()
    • currentUsageCount

      public long currentUsageCount()
    • isPublishRateExceeded

      public boolean isPublishRateExceeded()
      Specified by:
      isPublishRateExceeded in interface Topic
    • isResourceGroupPublishRateExceeded

      public boolean isResourceGroupPublishRateExceeded(int numMessages, int bytes)
      Specified by:
      isResourceGroupPublishRateExceeded in interface Topic
    • isResourceGroupRateLimitingEnabled

      public boolean isResourceGroupRateLimitingEnabled()
      Specified by:
      isResourceGroupRateLimitingEnabled in interface Topic
    • isTopicPublishRateExceeded

      public boolean isTopicPublishRateExceeded(int numberMessages, int bytes)
      Specified by:
      isTopicPublishRateExceeded in interface Topic
    • isBrokerPublishRateExceeded

      public boolean isBrokerPublishRateExceeded()
      Specified by:
      isBrokerPublishRateExceeded in interface Topic
    • getTopicPublishRateLimiter

      public PublishRateLimiter getTopicPublishRateLimiter()
    • getBrokerPublishRateLimiter

      public PublishRateLimiter getBrokerPublishRateLimiter()
    • updateResourceGroupLimiter

      @Deprecated public void updateResourceGroupLimiter(Optional<org.apache.pulsar.common.policies.data.Policies> optPolicies)
      Deprecated.
      Avoid using the deprecated method #NamespaceResources.getPoliciesIfCached(NamespaceName) and we can use #updateResourceGroupLimiter(Policies) to instead of it.
    • updateResourceGroupLimiter

      public void updateResourceGroupLimiter(@Nonnull org.apache.pulsar.common.policies.data.Policies namespacePolicies)
    • updateEntryFilters

      public void updateEntryFilters()
    • getMsgInCounter

      public long getMsgInCounter()
    • getBytesInCounter

      public long getBytesInCounter()
    • getMsgOutCounter

      public long getMsgOutCounter()
    • getBytesOutCounter

      public long getBytesOutCounter()
    • isDeleteWhileInactive

      public boolean isDeleteWhileInactive()
    • deletePartitionedTopicMetadataWhileInactive

      public boolean deletePartitionedTopicMetadataWhileInactive()
    • isTerminated

      protected abstract boolean isTerminated()
    • isMigrated

      protected abstract boolean isMigrated()
    • getInactiveTopicPolicies

      public org.apache.pulsar.common.policies.data.InactiveTopicPolicies getInactiveTopicPolicies()
    • getTopicPolicies

      public Optional<org.apache.pulsar.common.policies.data.TopicPolicies> getTopicPolicies()
      Get TopicPolicies for this topic.
      Returns:
      TopicPolicies, if they exist. Otherwise, the value will not be present.
    • deleteTopicPolicies

      public CompletableFuture<Void> deleteTopicPolicies()
    • getWaitingProducersCount

      protected int getWaitingProducersCount()
    • isExceedMaximumMessageSize

      protected boolean isExceedMaximumMessageSize(int size, Topic.PublishContext publishContext)
    • updatePublishRateLimiter

      public void updatePublishRateLimiter()
      update topic publish dispatcher for this topic.
    • updateBrokerSubscriptionTypesEnabled

      public void updateBrokerSubscriptionTypesEnabled()
    • getHierarchyTopicPolicies

      public org.apache.pulsar.common.policies.data.HierarchyTopicPolicies getHierarchyTopicPolicies()
      Description copied from interface: Topic
      Get HierarchyTopicPolicies.
      Specified by:
      getHierarchyTopicPolicies in interface Topic
      Returns:
    • updateBrokerSubscriptionDispatchRate

      public void updateBrokerSubscriptionDispatchRate()
    • updateBrokerReplicatorDispatchRate

      public void updateBrokerReplicatorDispatchRate()
    • updateBrokerDispatchRate

      public void updateBrokerDispatchRate()
    • addFilteredEntriesCount

      public void addFilteredEntriesCount(int filtered)
    • getFilteredEntriesCount

      public long getFilteredEntriesCount()
    • updateBrokerPublishRate

      public void updateBrokerPublishRate()
    • updateBrokerSubscribeRate

      public void updateBrokerSubscribeRate()
    • getMigratedClusterUrl

      public Optional<org.apache.pulsar.common.policies.data.ClusterData.ClusterUrl> getMigratedClusterUrl()
    • getMigratedClusterUrlAsync

      public static CompletableFuture<Optional<org.apache.pulsar.common.policies.data.ClusterData.ClusterUrl>> getMigratedClusterUrlAsync(PulsarService pulsar)
    • getMigratedClusterUrl

      public static Optional<org.apache.pulsar.common.policies.data.ClusterData.ClusterUrl> getMigratedClusterUrl(PulsarService pulsar)