Package org.apache.pulsar.broker.service
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>
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.apache.pulsar.broker.service.Topic
Topic.PublishContext -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected org.apache.bookkeeper.mledger.util.StatsBucketsprotected final BrokerServiceprotected final LongAdderprotected booleanprotected Booleanprotected booleanprotected booleanprotected longprotected final ReentrantReadWriteLockprotected final LongAdderprotected static final longprotected booleanprotected final ConcurrentHashMap<String,Producer> protected longprotected final Stringprotected ResourceGroupPublishLimiterprotected booleanprotected final Stringprotected final org.apache.pulsar.common.policies.data.HierarchyTopicPoliciesprotected PublishRateLimiter -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected CompletableFuture<Void>addConsumerToSubscription(Subscription subscription, Consumer consumer) voidaddFilteredEntriesCount(int filtered) addProducer(Producer producer, CompletableFuture<Void> producerQueuedFuture) Tries to add a producer to the topic.CompletableFuture<org.apache.pulsar.common.protocol.schema.SchemaVersion>addSchema(org.apache.pulsar.common.protocol.schema.SchemaData schema) Add a schema to the topic.checkSchemaCompatibleForConsumer(org.apache.pulsar.common.protocol.schema.SchemaData schema) Check if schema is compatible with current topic schema.protected voidvoidlongvoidbooleanCompletableFuture<org.apache.pulsar.common.protocol.schema.SchemaVersion>Delete the schema if this topic has a schema defined for it.voidprotected voidvoidprotected voidprotected voidit sets cnx auto-readable if producer's cnx is disabled due to publish-throttling.protected ConsumergetActiveConsumer(Subscription subscription) Get BrokerService.longlongorg.apache.pulsar.common.policies.data.impl.DispatchRateImpllongorg.apache.pulsar.common.policies.data.HierarchyTopicPoliciesGet HierarchyTopicPolicies.org.apache.pulsar.common.policies.data.InactiveTopicPolicieslonglonggetName()abstract intabstract intgetNumberOfSameAddressConsumers(String clientAddress) protected intgetNumberOfSameAddressConsumers(String clientAddress, List<? extends Subscription> subscriptions) intgetNumberOfSameAddressProducers(String clientAddress) org.apache.pulsar.common.policies.data.impl.DispatchRateImplorg.apache.pulsar.common.policies.data.SchemaCompatibilityStrategybooleanorg.apache.pulsar.common.policies.data.SubscribeRateorg.apache.pulsar.common.policies.data.impl.DispatchRateImplgetSubscriptionDispatchRate(String subscriptionName) Optional<org.apache.pulsar.common.policies.data.TopicPolicies>GetTopicPoliciesfor this topic.protected intvoidhandleConsumerAdded(String subscriptionName, String consumerName) protected voidhandleProducerRemoved(Producer producer) protected booleanWhether a topic has had a schema defined for it.longincrease the publishing limited times.voidincrementPublishCount(int numOfMessages, long msgSizeInBytes) protected abstract CompletableFuture<Long>incrementTopicEpoch(Optional<Long> currentEpoch) protected CompletableFuture<Optional<Long>>incrementTopicEpochIfNeeded(Producer producer, CompletableFuture<Void> producerQueuedFuture) protected voidinternalAddProducer(Producer producer) booleanprotected booleanbooleanbooleanprotected booleanisExceedMaximumMessageSize(int size, Topic.PublishContext publishContext) protected booleanisProducersExceeded(Producer producer) booleanbooleanisResourceGroupPublishRateExceeded(int numMessages, int bytes) booleanprotected booleanprotected booleanisSameAddressProducersExceeded(Producer producer) protected abstract booleanbooleanisTopicPublishRateExceeded(int numberMessages, int bytes) voidvoidrecordAddLatency(long latency, TimeUnit unit) record add-latency.protected voidvoidremoveProducer(Producer producer) voidresetBrokerPublishCountAndEnableReadIfRequired(boolean doneBrokerReset) voidprotected abstract CompletableFuture<Long>setTopicEpoch(long newEpoch) toString()protected voidvoidvoidvoidvoidvoidvoidvoidvoidupdate topic publish dispatcher for this topic.voidupdateResourceGroupLimiter(Optional<org.apache.pulsar.common.policies.data.Policies> optPolicies) protected voidupdateTopicPolicy(org.apache.pulsar.common.policies.data.TopicPolicies data) protected voidupdateTopicPolicyByNamespacePolicy(org.apache.pulsar.common.policies.data.Policies namespacePolicies) Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.apache.pulsar.broker.service.Topic
addSchemaIfIdleOrCheckCompatible, asyncGetStats, checkBackloggedCursors, checkBacklogQuotaExceeded, checkCursorsToCacheEntries, checkDeduplicationSnapshot, checkGC, checkIfTransactionBufferRecoverCompletely, checkInactiveSubscriptions, checkMessageDeduplicationInfo, checkMessageExpiry, checkReplication, close, createSubscription, delete, deleteForcefully, endTxn, getBacklogQuota, getBrokerDispatchRateLimiter, getDispatchRateLimiter, getInternalStats, getLastMessageId, getLastPosition, getReplicators, getStats, getSubscribeRateLimiter, getSubscription, getSubscriptions, initialize, isPersistent, isReplicated, isSystemTopic, onPoliciesUpdate, publishMessage, publishTxnMessage, subscribe, subscribe, truncate, unsubscribe, updateRatesMethods inherited from interface org.apache.pulsar.broker.service.TopicPolicyListener
onUpdate
-
Field Details
-
POLICY_UPDATE_FAILURE_RETRY_TIME_SECONDS
protected static final long POLICY_UPDATE_FAILURE_RETRY_TIME_SECONDS- See Also:
-
topic
-
producers
-
brokerService
-
replicatorPrefix
-
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 org.apache.bookkeeper.mledger.util.StatsBuckets addEntryLatencyStatsUsec -
isEncryptionRequired
protected volatile boolean isEncryptionRequired -
isAllowAutoUpdateSchema
-
topicPublishRateLimiter
-
resourceGroupPublishLimiter
-
preciseTopicPublishRateLimitingEnable
protected boolean preciseTopicPublishRateLimitingEnable -
resourceGroupRateLimitingEnabled
protected boolean resourceGroupRateLimitingEnabled -
publishRateLimitedTimes
protected volatile long publishRateLimitedTimes -
topicEpoch
-
msgOutFromRemovedSubscriptions
-
bytesOutFromRemovedSubscriptions
-
-
Constructor Details
-
AbstractTopic
-
-
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() -
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
-
registerTopicPolicyListener
protected void registerTopicPolicyListener() -
unregisterTopicPolicyListener
protected void unregisterTopicPolicyListener() -
isSameAddressProducersExceeded
-
getNumberOfSameAddressProducers
-
isConsumersExceededOnTopic
protected boolean isConsumersExceededOnTopic() -
isSameAddressConsumersExceededOnTopic
-
getNumberOfConsumers
public abstract int getNumberOfConsumers() -
getNumberOfSameAddressConsumers
-
getNumberOfSameAddressConsumers
protected int getNumberOfSameAddressConsumers(String clientAddress, List<? extends Subscription> subscriptions) -
addConsumerToSubscription
protected CompletableFuture<Void> addConsumerToSubscription(Subscription subscription, Consumer consumer) -
getActiveConsumer
-
disableCnxAutoRead
public void disableCnxAutoRead()- Specified by:
disableCnxAutoReadin interfaceTopic
-
enableCnxAutoRead
public void enableCnxAutoRead()- Specified by:
enableCnxAutoReadin interfaceTopic
-
hasLocalProducers
protected boolean hasLocalProducers() -
toString
-
getProducers
- Specified by:
getProducersin interfaceTopic
-
getBrokerService
Description copied from interface:TopicGet BrokerService.- Specified by:
getBrokerServicein interfaceTopic- Returns:
-
getName
-
isEncryptionRequired
public boolean isEncryptionRequired()- Specified by:
isEncryptionRequiredin interfaceTopic
-
getSchemaValidationEnforced
public boolean getSchemaValidationEnforced()- Specified by:
getSchemaValidationEnforcedin interfaceTopic
-
markBatchMessagePublished
public void markBatchMessagePublished() -
getReplicatorPrefix
-
hasSchema
Description copied from interface:TopicWhether a topic has had a schema defined for it. -
addSchema
public CompletableFuture<org.apache.pulsar.common.protocol.schema.SchemaVersion> addSchema(org.apache.pulsar.common.protocol.schema.SchemaData schema) Description copied from interface:TopicAdd a schema to the topic. This will fail if the new schema is incompatible with the current schema. -
deleteSchema
Description copied from interface:TopicDelete the schema if this topic has a schema defined for it.- Specified by:
deleteSchemain interfaceTopic
-
checkSchemaCompatibleForConsumer
public CompletableFuture<Void> checkSchemaCompatibleForConsumer(org.apache.pulsar.common.protocol.schema.SchemaData schema) Description copied from interface:TopicCheck if schema is compatible with current topic schema.- Specified by:
checkSchemaCompatibleForConsumerin interfaceTopic
-
addProducer
public CompletableFuture<Optional<Long>> addProducer(Producer producer, CompletableFuture<Void> producerQueuedFuture) Description copied from interface:TopicTries to add a producer to the topic. Several validations will be performed.- Specified by:
addProducerin interfaceTopicproducerQueuedFuture- 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
-
incrementTopicEpoch
-
recordAddLatency
Description copied from interface:Topicrecord add-latency.- Specified by:
recordAddLatencyin interfaceTopic
-
increasePublishLimitedTimes
public long increasePublishLimitedTimes()Description copied from interface:Topicincrease the publishing limited times.- Specified by:
increasePublishLimitedTimesin interfaceTopic
-
checkTopicPublishThrottlingRate
public void checkTopicPublishThrottlingRate()- Specified by:
checkTopicPublishThrottlingRatein interfaceTopic
-
incrementPublishCount
public void incrementPublishCount(int numOfMessages, long msgSizeInBytes) - Specified by:
incrementPublishCountin interfaceTopic
-
resetTopicPublishCountAndEnableReadIfRequired
public void resetTopicPublishCountAndEnableReadIfRequired()- Specified by:
resetTopicPublishCountAndEnableReadIfRequiredin interfaceTopic
-
updateDispatchRateLimiter
public void updateDispatchRateLimiter() -
resetBrokerPublishCountAndEnableReadIfRequired
public void resetBrokerPublishCountAndEnableReadIfRequired(boolean doneBrokerReset) - Specified by:
resetBrokerPublishCountAndEnableReadIfRequiredin interfaceTopic
-
enableProducerReadForPublishRateLimiting
protected void enableProducerReadForPublishRateLimiting()it sets cnx auto-readable if producer's cnx is disabled due to publish-throttling. -
enableProducerReadForPublishBufferLimiting
protected void enableProducerReadForPublishBufferLimiting() -
disableProducerRead
protected void disableProducerRead() -
checkTopicFenced
- Throws:
BrokerServiceException
-
internalAddProducer
- Throws:
BrokerServiceException
-
removeProducer
- Specified by:
removeProducerin interfaceTopic
-
handleProducerRemoved
-
handleConsumerAdded
-
decrementUsageCount
public void decrementUsageCount() -
currentUsageCount
public long currentUsageCount() -
isPublishRateExceeded
public boolean isPublishRateExceeded()- Specified by:
isPublishRateExceededin interfaceTopic
-
isResourceGroupPublishRateExceeded
public boolean isResourceGroupPublishRateExceeded(int numMessages, int bytes) - Specified by:
isResourceGroupPublishRateExceededin interfaceTopic
-
isResourceGroupRateLimitingEnabled
public boolean isResourceGroupRateLimitingEnabled()- Specified by:
isResourceGroupRateLimitingEnabledin interfaceTopic
-
isTopicPublishRateExceeded
public boolean isTopicPublishRateExceeded(int numberMessages, int bytes) - Specified by:
isTopicPublishRateExceededin interfaceTopic
-
isBrokerPublishRateExceeded
public boolean isBrokerPublishRateExceeded()- Specified by:
isBrokerPublishRateExceededin interfaceTopic
-
getTopicPublishRateLimiter
-
getBrokerPublishRateLimiter
-
updateResourceGroupLimiter
public void updateResourceGroupLimiter(Optional<org.apache.pulsar.common.policies.data.Policies> optPolicies) -
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() -
getInactiveTopicPolicies
public org.apache.pulsar.common.policies.data.InactiveTopicPolicies getInactiveTopicPolicies() -
getTopicPolicies
GetTopicPoliciesfor this topic.- Returns:
- TopicPolicies, if they exist. Otherwise, the value will not be present.
-
deleteTopicPolicies
-
getWaitingProducersCount
protected int getWaitingProducersCount() -
isExceedMaximumMessageSize
-
updatePublishDispatcher
public void updatePublishDispatcher()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:TopicGet HierarchyTopicPolicies.- Specified by:
getHierarchyTopicPoliciesin interfaceTopic- 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()
-