Class PersistentSubscription
- java.lang.Object
-
- org.apache.pulsar.broker.service.AbstractSubscription
-
- org.apache.pulsar.broker.service.persistent.PersistentSubscription
-
- All Implemented Interfaces:
Subscription
- Direct Known Subclasses:
CompactorSubscription
public class PersistentSubscription extends AbstractSubscription implements Subscription
-
-
Field Summary
Fields Modifier and Type Field Description protected org.apache.bookkeeper.mledger.ManagedCursorcursorprotected Dispatcherdispatcherprotected java.lang.StringfullNameprotected java.lang.StringsubNameprotected PersistentTopictopicprotected java.lang.StringtopicName-
Fields inherited from class org.apache.pulsar.broker.service.AbstractSubscription
bytesOutFromRemovedConsumers, msgOutFromRemovedConsumer
-
-
Constructor Summary
Constructors Constructor Description PersistentSubscription(PersistentTopic topic, java.lang.String subscriptionName, org.apache.bookkeeper.mledger.ManagedCursor cursor, boolean replicated)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidacknowledgeMessage(java.util.List<org.apache.bookkeeper.mledger.Position> positions, org.apache.pulsar.common.api.proto.CommandAck.AckType ackType, java.util.Map<java.lang.String,java.lang.Long> properties)java.util.concurrent.CompletableFuture<java.lang.Void>addConsumer(Consumer consumer)voidaddUnAckedMessages(int unAckMessages)booleancheckAndUnblockIfStuck()booleancheckIfPendingAckStoreInit()booleancheckIsCanDeleteConsumerPendingAck(org.apache.bookkeeper.mledger.impl.PositionImpl position)java.util.concurrent.CompletableFuture<java.lang.Void>clearBacklog()java.util.concurrent.CompletableFuture<java.lang.Void>close()Close the cursor ledger for this subscription.voidconsumerFlow(Consumer consumer, int additionalNumberOfMessages)voiddeactivateCursor()java.util.concurrent.CompletableFuture<java.lang.Void>delete()Delete the subscription by closing and deleting its managed cursor if no consumers are connected to it.java.util.concurrent.CompletableFuture<java.lang.Void>deleteForcefully()Forcefully close all consumers and deletes the subscription.java.util.concurrent.CompletableFuture<java.lang.Void>disconnect()Disconnect all consumers attached to the dispatcher and close this subscription.java.util.concurrent.CompletableFuture<java.lang.Void>doUnsubscribe(Consumer consumer)Handle unsubscribe command from the client API Check with the dispatcher is this consumer can proceed with unsubscribe.java.util.concurrent.CompletableFuture<java.lang.Void>endTxn(long txnidMostBits, long txnidLeastBits, int txnAction, long lowWaterMark)longestimateBacklogSize()booleanexpireMessages(int messageTTLInSeconds)booleanexpireMessages(org.apache.bookkeeper.mledger.Position position)java.util.List<Consumer>getConsumers()org.apache.bookkeeper.mledger.ManagedCursorgetCursor()DispatchergetDispatcher()doublegetExpiredMessageRate()PersistentMessageExpiryMonitorgetExpiryMonitor()java.lang.StringgetName()longgetNumberOfEntriesDelayed()longgetNumberOfEntriesInBacklog(boolean getPreciseBacklog)longgetNumberOfEntriesSinceFirstNotAckedMessage()java.util.concurrent.CompletableFuture<org.apache.bookkeeper.mledger.ManagedLedger>getPendingAckManageLedger()org.apache.pulsar.common.policies.data.stats.SubscriptionStatsImplgetStats(java.lang.Boolean getPreciseBacklog, boolean subscriptionBacklogSize)TopicgetTopic()java.lang.StringgetTopicName()intgetTotalNonContiguousDeletedMessagesRange()org.apache.pulsar.common.policies.data.TransactionInPendingAckStatsgetTransactionInPendingAckStats(org.apache.pulsar.client.api.transaction.TxnID txnID)org.apache.pulsar.common.policies.data.TransactionPendingAckStatsgetTransactionPendingAckStats()org.apache.pulsar.common.api.proto.CommandSubscribe.SubTypegetType()java.lang.StringgetTypeString()BrokerInterceptorinterceptor()booleanisReplicated()voidmarkTopicWithBatchMessagePublished()protected java.util.Map<java.lang.String,java.lang.Long>mergeCursorProperties(java.util.Map<java.lang.String,java.lang.Long> userProperties)Return a merged map that contains the cursor properties specified by used (eg.java.util.concurrent.CompletableFuture<org.apache.bookkeeper.mledger.Entry>peekNthMessage(int messagePosition)voidprocessReplicatedSubscriptionSnapshot(org.apache.pulsar.common.api.proto.ReplicatedSubscriptionsSnapshot snapshot)voidredeliverUnacknowledgedMessages(Consumer consumer)voidredeliverUnacknowledgedMessages(Consumer consumer, java.util.List<org.apache.bookkeeper.mledger.impl.PositionImpl> positions)voidremoveConsumer(Consumer consumer, boolean isResetCursor)java.util.concurrent.CompletableFuture<java.lang.Void>resetCursor(long timestamp)java.util.concurrent.CompletableFuture<java.lang.Void>resetCursor(org.apache.bookkeeper.mledger.Position position)booleansetReplicated(boolean replicated)java.util.concurrent.CompletableFuture<java.lang.Void>skipMessages(int numMessagesToSkip)voidsyncBatchPositionBitSetForPendingAck(org.apache.bookkeeper.mledger.impl.PositionImpl position)java.lang.StringtoString()java.util.concurrent.CompletableFuture<java.lang.Void>transactionCumulativeAcknowledge(org.apache.pulsar.client.api.transaction.TxnID txnId, java.util.List<org.apache.bookkeeper.mledger.impl.PositionImpl> positions)java.util.concurrent.CompletableFuture<java.lang.Void>transactionIndividualAcknowledge(org.apache.pulsar.client.api.transaction.TxnID txnId, java.util.List<org.apache.commons.lang3.tuple.MutablePair<org.apache.bookkeeper.mledger.impl.PositionImpl,java.lang.Integer>> positions)voidupdateLastMarkDeleteAdvancedTimestamp()-
Methods inherited from class org.apache.pulsar.broker.service.AbstractSubscription
getBytesOutCounter, getMsgOutCounter
-
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.Subscription
getNumberOfSameAddressConsumers, removeConsumer
-
-
-
-
Field Detail
-
topic
protected final PersistentTopic topic
-
cursor
protected final org.apache.bookkeeper.mledger.ManagedCursor cursor
-
dispatcher
protected volatile Dispatcher dispatcher
-
topicName
protected final java.lang.String topicName
-
subName
protected final java.lang.String subName
-
fullName
protected final java.lang.String fullName
-
-
Constructor Detail
-
PersistentSubscription
public PersistentSubscription(PersistentTopic topic, java.lang.String subscriptionName, org.apache.bookkeeper.mledger.ManagedCursor cursor, boolean replicated)
-
-
Method Detail
-
updateLastMarkDeleteAdvancedTimestamp
public void updateLastMarkDeleteAdvancedTimestamp()
-
interceptor
public BrokerInterceptor interceptor()
- Specified by:
interceptorin interfaceSubscription
-
getName
public java.lang.String getName()
- Specified by:
getNamein interfaceSubscription
-
getTopic
public Topic getTopic()
- Specified by:
getTopicin interfaceSubscription
-
isReplicated
public boolean isReplicated()
- Specified by:
isReplicatedin interfaceSubscription
-
setReplicated
public boolean setReplicated(boolean replicated)
-
addConsumer
public java.util.concurrent.CompletableFuture<java.lang.Void> addConsumer(Consumer consumer)
- Specified by:
addConsumerin interfaceSubscription
-
removeConsumer
public void removeConsumer(Consumer consumer, boolean isResetCursor) throws BrokerServiceException
- Specified by:
removeConsumerin interfaceSubscription- Throws:
BrokerServiceException
-
deactivateCursor
public void deactivateCursor()
-
consumerFlow
public void consumerFlow(Consumer consumer, int additionalNumberOfMessages)
- Specified by:
consumerFlowin interfaceSubscription
-
acknowledgeMessage
public void acknowledgeMessage(java.util.List<org.apache.bookkeeper.mledger.Position> positions, org.apache.pulsar.common.api.proto.CommandAck.AckType ackType, java.util.Map<java.lang.String,java.lang.Long> properties)- Specified by:
acknowledgeMessagein interfaceSubscription
-
transactionIndividualAcknowledge
public java.util.concurrent.CompletableFuture<java.lang.Void> transactionIndividualAcknowledge(org.apache.pulsar.client.api.transaction.TxnID txnId, java.util.List<org.apache.commons.lang3.tuple.MutablePair<org.apache.bookkeeper.mledger.impl.PositionImpl,java.lang.Integer>> positions)
-
transactionCumulativeAcknowledge
public java.util.concurrent.CompletableFuture<java.lang.Void> transactionCumulativeAcknowledge(org.apache.pulsar.client.api.transaction.TxnID txnId, java.util.List<org.apache.bookkeeper.mledger.impl.PositionImpl> positions)
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
getTopicName
public java.lang.String getTopicName()
- Specified by:
getTopicNamein interfaceSubscription
-
getType
public org.apache.pulsar.common.api.proto.CommandSubscribe.SubType getType()
- Specified by:
getTypein interfaceSubscription
-
getTypeString
public java.lang.String getTypeString()
- Specified by:
getTypeStringin interfaceSubscription
-
clearBacklog
public java.util.concurrent.CompletableFuture<java.lang.Void> clearBacklog()
- Specified by:
clearBacklogin interfaceSubscription
-
skipMessages
public java.util.concurrent.CompletableFuture<java.lang.Void> skipMessages(int numMessagesToSkip)
- Specified by:
skipMessagesin interfaceSubscription
-
resetCursor
public java.util.concurrent.CompletableFuture<java.lang.Void> resetCursor(long timestamp)
- Specified by:
resetCursorin interfaceSubscription
-
resetCursor
public java.util.concurrent.CompletableFuture<java.lang.Void> resetCursor(org.apache.bookkeeper.mledger.Position position)
- Specified by:
resetCursorin interfaceSubscription
-
peekNthMessage
public java.util.concurrent.CompletableFuture<org.apache.bookkeeper.mledger.Entry> peekNthMessage(int messagePosition)
- Specified by:
peekNthMessagein interfaceSubscription
-
getNumberOfEntriesInBacklog
public long getNumberOfEntriesInBacklog(boolean getPreciseBacklog)
- Specified by:
getNumberOfEntriesInBacklogin interfaceSubscription
-
getDispatcher
public Dispatcher getDispatcher()
- Specified by:
getDispatcherin interfaceSubscription
-
getNumberOfEntriesSinceFirstNotAckedMessage
public long getNumberOfEntriesSinceFirstNotAckedMessage()
-
getTotalNonContiguousDeletedMessagesRange
public int getTotalNonContiguousDeletedMessagesRange()
-
close
public java.util.concurrent.CompletableFuture<java.lang.Void> close()
Close the cursor ledger for this subscription. Requires that there are no active consumers on the dispatcher- Specified by:
closein interfaceSubscription- Returns:
- CompletableFuture indicating the completion of delete operation
-
disconnect
public java.util.concurrent.CompletableFuture<java.lang.Void> disconnect()
Disconnect all consumers attached to the dispatcher and close this subscription.- Specified by:
disconnectin interfaceSubscription- Returns:
- CompletableFuture indicating the completion of disconnect operation
-
delete
public java.util.concurrent.CompletableFuture<java.lang.Void> delete()
Delete the subscription by closing and deleting its managed cursor if no consumers are connected to it. Handle unsubscribe call from admin layer.- Specified by:
deletein interfaceSubscription- Returns:
- CompletableFuture indicating the completion of delete operation
-
deleteForcefully
public java.util.concurrent.CompletableFuture<java.lang.Void> deleteForcefully()
Forcefully close all consumers and deletes the subscription.- Specified by:
deleteForcefullyin interfaceSubscription- Returns:
-
doUnsubscribe
public java.util.concurrent.CompletableFuture<java.lang.Void> doUnsubscribe(Consumer consumer)
Handle unsubscribe command from the client API Check with the dispatcher is this consumer can proceed with unsubscribe.- Specified by:
doUnsubscribein interfaceSubscription- Parameters:
consumer- consumer object that is initiating the unsubscribe operation- Returns:
- CompletableFuture indicating the completion of unsubscribe operation
-
getConsumers
public java.util.List<Consumer> getConsumers()
- Specified by:
getConsumersin interfaceSubscription
-
expireMessages
public boolean expireMessages(int messageTTLInSeconds)
- Specified by:
expireMessagesin interfaceSubscription
-
expireMessages
public boolean expireMessages(org.apache.bookkeeper.mledger.Position position)
- Specified by:
expireMessagesin interfaceSubscription
-
getExpiredMessageRate
public double getExpiredMessageRate()
- Specified by:
getExpiredMessageRatein interfaceSubscription
-
getExpiryMonitor
public PersistentMessageExpiryMonitor getExpiryMonitor()
-
estimateBacklogSize
public long estimateBacklogSize()
-
getStats
public org.apache.pulsar.common.policies.data.stats.SubscriptionStatsImpl getStats(java.lang.Boolean getPreciseBacklog, boolean subscriptionBacklogSize)
-
redeliverUnacknowledgedMessages
public void redeliverUnacknowledgedMessages(Consumer consumer)
- Specified by:
redeliverUnacknowledgedMessagesin interfaceSubscription
-
redeliverUnacknowledgedMessages
public void redeliverUnacknowledgedMessages(Consumer consumer, java.util.List<org.apache.bookkeeper.mledger.impl.PositionImpl> positions)
- Specified by:
redeliverUnacknowledgedMessagesin interfaceSubscription
-
addUnAckedMessages
public void addUnAckedMessages(int unAckMessages)
- Specified by:
addUnAckedMessagesin interfaceSubscription
-
getNumberOfEntriesDelayed
public long getNumberOfEntriesDelayed()
- Specified by:
getNumberOfEntriesDelayedin interfaceSubscription
-
markTopicWithBatchMessagePublished
public void markTopicWithBatchMessagePublished()
- Specified by:
markTopicWithBatchMessagePublishedin interfaceSubscription
-
mergeCursorProperties
protected java.util.Map<java.lang.String,java.lang.Long> mergeCursorProperties(java.util.Map<java.lang.String,java.lang.Long> userProperties)
Return a merged map that contains the cursor properties specified by used (eg. when using compaction subscription) and the subscription properties.
-
processReplicatedSubscriptionSnapshot
public void processReplicatedSubscriptionSnapshot(org.apache.pulsar.common.api.proto.ReplicatedSubscriptionsSnapshot snapshot)
- Specified by:
processReplicatedSubscriptionSnapshotin interfaceSubscription
-
endTxn
public java.util.concurrent.CompletableFuture<java.lang.Void> endTxn(long txnidMostBits, long txnidLeastBits, int txnAction, long lowWaterMark)- Specified by:
endTxnin interfaceSubscription
-
getCursor
public org.apache.bookkeeper.mledger.ManagedCursor getCursor()
-
syncBatchPositionBitSetForPendingAck
public void syncBatchPositionBitSetForPendingAck(org.apache.bookkeeper.mledger.impl.PositionImpl position)
-
checkIsCanDeleteConsumerPendingAck
public boolean checkIsCanDeleteConsumerPendingAck(org.apache.bookkeeper.mledger.impl.PositionImpl position)
-
getTransactionPendingAckStats
public org.apache.pulsar.common.policies.data.TransactionPendingAckStats getTransactionPendingAckStats()
-
checkAndUnblockIfStuck
public boolean checkAndUnblockIfStuck()
-
getTransactionInPendingAckStats
public org.apache.pulsar.common.policies.data.TransactionInPendingAckStats getTransactionInPendingAckStats(org.apache.pulsar.client.api.transaction.TxnID txnID)
-
getPendingAckManageLedger
public java.util.concurrent.CompletableFuture<org.apache.bookkeeper.mledger.ManagedLedger> getPendingAckManageLedger()
-
checkIfPendingAckStoreInit
public boolean checkIfPendingAckStoreInit()
-
-