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 StatsBuckets
protected final BrokerService
protected final LongAdder
protected CompletableFuture<Optional<Topic>>
protected org.apache.commons.lang3.tuple.Pair<String,
List<EntryFilter>> protected boolean
protected Boolean
protected boolean
protected boolean
protected long
protected final ReentrantReadWriteLock
protected final LongAdder
protected static final long
protected boolean
protected final ConcurrentHashMap<String,
Producer> protected long
protected final String
protected ResourceGroupPublishLimiter
protected boolean
protected final String
protected final org.apache.pulsar.common.policies.data.HierarchyTopicPolicies
protected PublishRateLimiter
protected int
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected CompletableFuture<Void>
addConsumerToSubscription
(Subscription subscription, Consumer consumer) void
addFilteredEntriesCount
(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 void
void
long
void
boolean
CompletableFuture<org.apache.pulsar.common.protocol.schema.SchemaVersion>
Delete the schema if this topic has a schema defined for it.void
protected void
void
protected void
it sets cnx auto-readable if producer's cnx is disabled due to publish-throttling.protected Consumer
getActiveConsumer
(Subscription subscription) Get BrokerService.long
long
org.apache.pulsar.common.policies.data.impl.DispatchRateImpl
org.apache.pulsar.common.policies.data.EntryFilters
long
org.apache.pulsar.common.policies.data.HierarchyTopicPolicies
Get HierarchyTopicPolicies.org.apache.pulsar.common.policies.data.InactiveTopicPolicies
Optional<org.apache.pulsar.common.policies.data.ClusterData.ClusterUrl>
static Optional<org.apache.pulsar.common.policies.data.ClusterData.ClusterUrl>
getMigratedClusterUrl
(PulsarService pulsar) static CompletableFuture<Optional<org.apache.pulsar.common.policies.data.ClusterData.ClusterUrl>>
long
long
getName()
abstract int
abstract int
getNumberOfSameAddressConsumers
(String clientAddress) protected int
getNumberOfSameAddressConsumers
(String clientAddress, List<? extends Subscription> subscriptions) int
getNumberOfSameAddressProducers
(String clientAddress) org.apache.pulsar.common.policies.data.impl.DispatchRateImpl
org.apache.pulsar.common.policies.data.SchemaCompatibilityStrategy
protected String
boolean
org.apache.pulsar.common.policies.data.SubscribeRate
org.apache.pulsar.common.policies.data.impl.DispatchRateImpl
getSubscriptionDispatchRate
(String subscriptionName) Optional<org.apache.pulsar.common.policies.data.TopicPolicies>
GetTopicPolicies
for this topic.protected int
void
handleConsumerAdded
(String subscriptionName, String consumerName) protected void
handleProducerRemoved
(Producer producer) protected boolean
Whether a topic has had a schema defined for it.long
increase the publishing limited times.void
incrementPublishCount
(int numOfMessages, long msgSizeInBytes) protected abstract CompletableFuture<Long>
incrementTopicEpoch
(Optional<Long> currentEpoch) protected CompletableFuture<Optional<Long>>
incrementTopicEpochIfNeeded
(Producer producer, CompletableFuture<Void> producerQueuedFuture) protected CompletableFuture<Void>
internalAddProducer
(Producer producer) boolean
boolean
boolean
boolean
protected boolean
isExceedMaximumMessageSize
(int size, Topic.PublishContext publishContext) protected abstract boolean
protected boolean
isProducersExceeded
(boolean isRemote) boolean
isProducersExceeded
(String producerName) protected boolean
isProducersExceeded
(Producer producer) boolean
boolean
isResourceGroupPublishRateExceeded
(int numMessages, int bytes) boolean
protected boolean
protected boolean
isSameAddressProducersExceeded
(Producer producer) protected abstract boolean
boolean
isTopicPublishRateExceeded
(int numberMessages, int bytes) void
void
recordAddLatency
(long latency, TimeUnit unit) record add-latency.protected void
void
removeProducer
(Producer producer) void
resetBrokerPublishCountAndEnableReadIfRequired
(boolean doneBrokerReset) void
protected abstract CompletableFuture<Long>
setTopicEpoch
(long newEpoch) toString()
protected void
void
void
void
void
void
void
void
void
void
update topic publish dispatcher for this topic.void
updateResourceGroupLimiter
(Optional<org.apache.pulsar.common.policies.data.Policies> optPolicies) Deprecated.void
updateResourceGroupLimiter
(org.apache.pulsar.common.policies.data.Policies namespacePolicies) protected void
updateTopicPolicy
(org.apache.pulsar.common.policies.data.TopicPolicies data) protected void
updateTopicPolicyByNamespacePolicy
(org.apache.pulsar.common.policies.data.Policies namespacePolicies) Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.apache.pulsar.broker.service.Topic
addSchemaIfIdleOrCheckCompatible, asyncGetStats, checkBackloggedCursors, checkBacklogQuotaExceeded, checkClusterMigration, checkCursorsToCacheEntries, checkDeduplicationSnapshot, checkGC, checkIfTransactionBufferRecoverCompletely, checkInactiveSubscriptions, checkMessageDeduplicationInfo, checkMessageExpiry, checkReplication, close, createSubscription, delete, deleteForcefully, endTxn, getBacklogQuota, getBestEffortOldestUnacknowledgedMessageAgeSeconds, getBrokerDispatchRateLimiter, getDispatchRateLimiter, getInternalStats, getLastDispatchablePosition, getLastMessageId, getLastPosition, getReplicators, getShadowReplicators, getStats, getSubscribeRateLimiter, getSubscription, getSubscriptions, initialize, isDeduplicationEnabled, isPersistent, isReplicated, isReplicationBacklogExist, isShadowReplicated, isSystemTopic, onPoliciesUpdate, publishMessage, publishTxnMessage, subscribe, subscribe, truncate, unsubscribe, updateRates
Methods 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
-
createFuture
-
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
-
isEncryptionRequired
protected volatile boolean isEncryptionRequired -
isAllowAutoUpdateSchema
-
topicPublishRateLimiter
-
resourceGroupPublishLimiter
-
preciseTopicPublishRateLimitingEnable
protected boolean preciseTopicPublishRateLimitingEnable -
resourceGroupRateLimitingEnabled
protected boolean resourceGroupRateLimitingEnabled -
publishRateLimitedTimes
protected volatile long publishRateLimitedTimes -
userCreatedProducerCount
protected volatile int userCreatedProducerCount -
topicEpoch
-
msgOutFromRemovedSubscriptions
-
bytesOutFromRemovedSubscriptions
-
entryFilters
-
-
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() -
getEntryFiltersPolicy
public org.apache.pulsar.common.policies.data.EntryFilters getEntryFiltersPolicy()- Specified by:
getEntryFiltersPolicy
in interfaceTopic
-
getEntryFilters
- Specified by:
getEntryFilters
in interfaceTopic
-
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
-
isProducersExceeded
-
isProducersExceeded
protected boolean isProducersExceeded(boolean isRemote) -
registerTopicPolicyListener
protected void registerTopicPolicyListener() -
unregisterTopicPolicyListener
protected void unregisterTopicPolicyListener() -
isSameAddressProducersExceeded
-
getNumberOfSameAddressProducers
-
isConsumersExceededOnTopic
public 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:
disableCnxAutoRead
in interfaceTopic
-
enableCnxAutoRead
public void enableCnxAutoRead()- Specified by:
enableCnxAutoRead
in interfaceTopic
-
hasLocalProducers
protected boolean hasLocalProducers() -
toString
-
getProducers
- Specified by:
getProducers
in interfaceTopic
-
getBrokerService
Description copied from interface:Topic
Get BrokerService.- Specified by:
getBrokerService
in interfaceTopic
- Returns:
-
getName
-
isEncryptionRequired
public boolean isEncryptionRequired()- Specified by:
isEncryptionRequired
in interfaceTopic
-
getSchemaValidationEnforced
public boolean getSchemaValidationEnforced()- Specified by:
getSchemaValidationEnforced
in interfaceTopic
-
markBatchMessagePublished
public void markBatchMessagePublished() -
getReplicatorPrefix
-
getSchemaId
-
hasSchema
Description copied from interface:Topic
Whether 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:Topic
Add a schema to the topic. This will fail if the new schema is incompatible with the current schema. -
deleteSchema
Description copied from interface:Topic
Delete the schema if this topic has a schema defined for it.- Specified by:
deleteSchema
in interfaceTopic
-
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 interfaceTopic
-
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 interfaceTopic
- Parameters:
producer
- Producer to addproducerQueuedFuture
- 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:Topic
record add-latency.- Specified by:
recordAddLatency
in interfaceTopic
-
increasePublishLimitedTimes
public long increasePublishLimitedTimes()Description copied from interface:Topic
increase the publishing limited times.- Specified by:
increasePublishLimitedTimes
in interfaceTopic
-
checkTopicPublishThrottlingRate
public void checkTopicPublishThrottlingRate()- Specified by:
checkTopicPublishThrottlingRate
in interfaceTopic
-
incrementPublishCount
public void incrementPublishCount(int numOfMessages, long msgSizeInBytes) - Specified by:
incrementPublishCount
in interfaceTopic
-
resetTopicPublishCountAndEnableReadIfRequired
public void resetTopicPublishCountAndEnableReadIfRequired()- Specified by:
resetTopicPublishCountAndEnableReadIfRequired
in interfaceTopic
-
updateDispatchRateLimiter
public void updateDispatchRateLimiter() -
resetBrokerPublishCountAndEnableReadIfRequired
public void resetBrokerPublishCountAndEnableReadIfRequired(boolean doneBrokerReset) - Specified by:
resetBrokerPublishCountAndEnableReadIfRequired
in interfaceTopic
-
enableProducerReadForPublishRateLimiting
protected void enableProducerReadForPublishRateLimiting()it sets cnx auto-readable if producer's cnx is disabled due to publish-throttling. -
disableProducerRead
protected void disableProducerRead() -
checkTopicFenced
- Throws:
BrokerServiceException
-
internalAddProducer
-
removeProducer
- Specified by:
removeProducer
in interfaceTopic
-
handleProducerRemoved
-
handleConsumerAdded
-
decrementUsageCount
public void decrementUsageCount() -
currentUsageCount
public long currentUsageCount() -
isPublishRateExceeded
public boolean isPublishRateExceeded()- Specified by:
isPublishRateExceeded
in interfaceTopic
-
isResourceGroupPublishRateExceeded
public boolean isResourceGroupPublishRateExceeded(int numMessages, int bytes) - Specified by:
isResourceGroupPublishRateExceeded
in interfaceTopic
-
isResourceGroupRateLimitingEnabled
public boolean isResourceGroupRateLimitingEnabled()- Specified by:
isResourceGroupRateLimitingEnabled
in interfaceTopic
-
isTopicPublishRateExceeded
public boolean isTopicPublishRateExceeded(int numberMessages, int bytes) - Specified by:
isTopicPublishRateExceeded
in interfaceTopic
-
isBrokerPublishRateExceeded
public boolean isBrokerPublishRateExceeded()- Specified by:
isBrokerPublishRateExceeded
in interfaceTopic
-
getTopicPublishRateLimiter
-
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
GetTopicPolicies
for this topic.- Returns:
- TopicPolicies, if they exist. Otherwise, the value will not be present.
-
deleteTopicPolicies
-
getWaitingProducersCount
protected int getWaitingProducersCount() -
isExceedMaximumMessageSize
-
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 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() -
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)
-
NamespaceResources.getPoliciesIfCached(NamespaceName)
and we can use #updateResourceGroupLimiter(Policies)
to instead of it.