Package org.apache.pulsar.broker.service
Class AbstractDispatcherSingleActiveConsumer
- java.lang.Object
-
- org.apache.pulsar.broker.service.AbstractBaseDispatcher
-
- org.apache.pulsar.broker.service.AbstractDispatcherSingleActiveConsumer
-
- All Implemented Interfaces:
Dispatcher
- Direct Known Subclasses:
NonPersistentDispatcherSingleActiveConsumer,PersistentDispatcherSingleActiveConsumer
public abstract class AbstractDispatcherSingleActiveConsumer extends AbstractBaseDispatcher
-
-
Field Summary
Fields Modifier and Type Field Description protected static java.util.concurrent.atomic.AtomicReferenceFieldUpdater<AbstractDispatcherSingleActiveConsumer,Consumer>ACTIVE_CONSUMER_UPDATERprotected java.util.concurrent.CompletableFuture<java.lang.Void>closeFutureprotected java.util.concurrent.CopyOnWriteArrayList<Consumer>consumersprotected org.apache.bookkeeper.mledger.ManagedCursorcursorprotected static intFALSEprotected static java.util.concurrent.atomic.AtomicIntegerFieldUpdater<AbstractDispatcherSingleActiveConsumer>IS_CLOSED_UPDATERprotected booleanisFirstReadprotected booleanisKeyHashRangeFilteredprotected intpartitionIndexprotected StickyKeyConsumerSelectorstickyKeyConsumerSelectorprotected org.apache.pulsar.common.api.proto.CommandSubscribe.SubTypesubscriptionTypeprotected java.lang.StringtopicNameprotected static intTRUE-
Fields inherited from class org.apache.pulsar.broker.service.AbstractBaseDispatcher
dispatchThrottlingOnBatchMessageEnabled, entryFilters, filterContext, serviceConfig, subscription
-
-
Constructor Summary
Constructors Constructor Description AbstractDispatcherSingleActiveConsumer(org.apache.pulsar.common.api.proto.CommandSubscribe.SubType subscriptionType, int partitionIndex, java.lang.String topicName, Subscription subscription, org.apache.pulsar.broker.ServiceConfiguration serviceConfig, org.apache.bookkeeper.mledger.ManagedCursor cursor)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description voidaddConsumer(Consumer consumer)protected abstract voidcancelPendingRead()booleancanUnsubscribe(Consumer consumer)Handle unsubscribe command from the client API For failover subscription, if consumer is connected consumer, we can unsubscribe.java.util.concurrent.CompletableFuture<java.lang.Void>close()mark dispatcher closed to stop new incoming requests and disconnect all consumers.java.util.concurrent.CompletableFuture<java.lang.Void>disconnectActiveConsumers(boolean isResetCursor)Disconnect active consumers.java.util.concurrent.CompletableFuture<java.lang.Void>disconnectAllConsumers(boolean isResetCursor)Disconnect all consumers on this dispatcher (server side close).ConsumergetActiveConsumer()java.util.List<Consumer>getConsumers()org.apache.pulsar.common.api.proto.CommandSubscribe.SubTypegetType()booleanisClosed()booleanisConsumerConnected()protected voidnotifyActiveConsumerChanged(Consumer activeConsumer)protected booleanpickAndScheduleActiveConsumer()Pick active consumer for a topic forCommandSubscribe.SubType.Failoversubscription.protected abstract voidreadMoreEntries(Consumer consumer)voidremoveConsumer(Consumer consumer)voidreset()mark dispatcher open to serve new incoming requests.voidresetCloseFuture()protected abstract voidscheduleReadOnActiveConsumer()-
Methods inherited from class org.apache.pulsar.broker.service.AbstractBaseDispatcher
computeReadLimits, filterEntriesForConsumer, filterEntriesForConsumer, isConsumersExceededOnSubscription, isConsumersExceededOnSubscription, peekStickyKey, reachDispatchRateLimit, reScheduleRead, updateEntryWrapperWithMetadata, updateMessagesToRead
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.apache.pulsar.broker.service.Dispatcher
addUnAckedMessages, checkAndUnblockIfStuck, clearDelayedMessages, consumerFlow, cursorIsReset, disconnectAllConsumers, getNumberOfDelayedMessages, getRateLimiter, getRedeliveryTracker, initializeDispatchRateLimiterIfNeeded, markDeletePositionMoveForward, redeliverUnacknowledgedMessages, redeliverUnacknowledgedMessages, trackDelayedDelivery, updateRateLimiter
-
-
-
-
Field Detail
-
topicName
protected final java.lang.String topicName
-
ACTIVE_CONSUMER_UPDATER
protected static final java.util.concurrent.atomic.AtomicReferenceFieldUpdater<AbstractDispatcherSingleActiveConsumer,Consumer> ACTIVE_CONSUMER_UPDATER
-
consumers
protected final java.util.concurrent.CopyOnWriteArrayList<Consumer> consumers
-
stickyKeyConsumerSelector
protected StickyKeyConsumerSelector stickyKeyConsumerSelector
-
isKeyHashRangeFiltered
protected boolean isKeyHashRangeFiltered
-
closeFuture
protected java.util.concurrent.CompletableFuture<java.lang.Void> closeFuture
-
partitionIndex
protected final int partitionIndex
-
cursor
protected final org.apache.bookkeeper.mledger.ManagedCursor cursor
-
subscriptionType
protected final org.apache.pulsar.common.api.proto.CommandSubscribe.SubType subscriptionType
-
FALSE
protected static final int FALSE
- See Also:
- Constant Field Values
-
TRUE
protected static final int TRUE
- See Also:
- Constant Field Values
-
IS_CLOSED_UPDATER
protected static final java.util.concurrent.atomic.AtomicIntegerFieldUpdater<AbstractDispatcherSingleActiveConsumer> IS_CLOSED_UPDATER
-
isFirstRead
protected boolean isFirstRead
-
-
Constructor Detail
-
AbstractDispatcherSingleActiveConsumer
public AbstractDispatcherSingleActiveConsumer(org.apache.pulsar.common.api.proto.CommandSubscribe.SubType subscriptionType, int partitionIndex, java.lang.String topicName, Subscription subscription, org.apache.pulsar.broker.ServiceConfiguration serviceConfig, org.apache.bookkeeper.mledger.ManagedCursor cursor)
-
-
Method Detail
-
scheduleReadOnActiveConsumer
protected abstract void scheduleReadOnActiveConsumer()
-
readMoreEntries
protected abstract void readMoreEntries(Consumer consumer)
-
cancelPendingRead
protected abstract void cancelPendingRead()
-
notifyActiveConsumerChanged
protected void notifyActiveConsumerChanged(Consumer activeConsumer)
-
pickAndScheduleActiveConsumer
protected boolean pickAndScheduleActiveConsumer()
Pick active consumer for a topic forCommandSubscribe.SubType.Failoversubscription. If it's a non-partitioned topic then it'll pick consumer based on order they subscribe to the topic. If is's a partitioned topic, first sort consumers based on their priority level and consumer name then distributed partitions evenly across consumers with highest priority level.- Returns:
- the true consumer if the consumer is changed, otherwise false.
-
addConsumer
public void addConsumer(Consumer consumer) throws BrokerServiceException
- Throws:
BrokerServiceException
-
removeConsumer
public void removeConsumer(Consumer consumer) throws BrokerServiceException
- Throws:
BrokerServiceException
-
canUnsubscribe
public boolean canUnsubscribe(Consumer consumer)
Handle unsubscribe command from the client API For failover subscription, if consumer is connected consumer, we can unsubscribe.- Parameters:
consumer- Calling consumer object
-
close
public java.util.concurrent.CompletableFuture<java.lang.Void> close()
Description copied from interface:Dispatchermark dispatcher closed to stop new incoming requests and disconnect all consumers.- Returns:
-
isClosed
public boolean isClosed()
-
disconnectAllConsumers
public java.util.concurrent.CompletableFuture<java.lang.Void> disconnectAllConsumers(boolean isResetCursor)
Disconnect all consumers on this dispatcher (server side close). This triggers channelInactive on the inbound handler which calls dispatcher.removeConsumer(), where the closeFuture is completed- Returns:
-
disconnectActiveConsumers
public java.util.concurrent.CompletableFuture<java.lang.Void> disconnectActiveConsumers(boolean isResetCursor)
Description copied from interface:DispatcherDisconnect active consumers.
-
resetCloseFuture
public void resetCloseFuture()
- Specified by:
resetCloseFuturein interfaceDispatcher- Overrides:
resetCloseFuturein classAbstractBaseDispatcher
-
reset
public void reset()
Description copied from interface:Dispatchermark dispatcher open to serve new incoming requests.
-
getType
public org.apache.pulsar.common.api.proto.CommandSubscribe.SubType getType()
-
getActiveConsumer
public Consumer getActiveConsumer()
-
getConsumers
public java.util.List<Consumer> getConsumers()
-
isConsumerConnected
public boolean isConsumerConnected()
-
-