Class PersistentDispatcherMultipleConsumers

    • Field Detail

      • cursor

        protected final org.apache.bookkeeper.mledger.ManagedCursor cursor
      • lastIndividualDeletedRangeFromCursorRecovery

        protected volatile com.google.common.collect.Range<org.apache.bookkeeper.mledger.impl.PositionImpl> lastIndividualDeletedRangeFromCursorRecovery
      • havePendingRead

        protected volatile boolean havePendingRead
      • havePendingReplayRead

        protected volatile boolean havePendingReplayRead
      • minReplayedPosition

        protected volatile org.apache.bookkeeper.mledger.impl.PositionImpl minReplayedPosition
      • shouldRewindBeforeReadingOrReplaying

        protected boolean shouldRewindBeforeReadingOrReplaying
      • name

        protected final java.lang.String name
      • totalAvailablePermits

        protected volatile int totalAvailablePermits
      • readBatchSize

        protected volatile int readBatchSize
      • readFailureBackoff

        protected final org.apache.pulsar.client.impl.Backoff readFailureBackoff
      • totalUnackedMessages

        protected volatile int totalUnackedMessages
      • BLOCKED_DISPATCHER_ON_UNACKMSG_UPDATER

        protected static final java.util.concurrent.atomic.AtomicIntegerFieldUpdater<PersistentDispatcherMultipleConsumers> BLOCKED_DISPATCHER_ON_UNACKMSG_UPDATER
    • Constructor Detail

      • PersistentDispatcherMultipleConsumers

        public PersistentDispatcherMultipleConsumers​(PersistentTopic topic,
                                                     org.apache.bookkeeper.mledger.ManagedCursor cursor,
                                                     Subscription subscription)
      • PersistentDispatcherMultipleConsumers

        public PersistentDispatcherMultipleConsumers​(PersistentTopic topic,
                                                     org.apache.bookkeeper.mledger.ManagedCursor cursor,
                                                     Subscription subscription,
                                                     boolean allowOutOfOrderDelivery)
    • Method Detail

      • consumerFlow

        public void consumerFlow​(Consumer consumer,
                                 int additionalNumberOfMessages)
        Description copied from interface: Dispatcher
        Indicates that this consumer is now ready to receive more messages.
        Specified by:
        consumerFlow in interface Dispatcher
      • readMoreEntries

        public void readMoreEntries()
      • calculateToRead

        protected org.apache.commons.lang3.tuple.Pair<java.lang.Integer,​java.lang.Long> calculateToRead​(int currentTotalAvailablePermits)
      • asyncReplayEntries

        protected java.util.Set<? extends org.apache.bookkeeper.mledger.Position> asyncReplayEntries​(java.util.Set<? extends org.apache.bookkeeper.mledger.Position> positions)
      • asyncReplayEntriesInOrder

        protected java.util.Set<? extends org.apache.bookkeeper.mledger.Position> asyncReplayEntriesInOrder​(java.util.Set<? extends org.apache.bookkeeper.mledger.Position> positions)
      • close

        public java.util.concurrent.CompletableFuture<java.lang.Void> close()
        Description copied from interface: Dispatcher
        mark dispatcher closed to stop new incoming requests and disconnect all consumers.
        Specified by:
        close in interface Dispatcher
        Returns:
      • disconnectAllConsumers

        public java.util.concurrent.CompletableFuture<java.lang.Void> disconnectAllConsumers​(boolean isResetCursor)
        Description copied from interface: Dispatcher
        disconnect all consumers.
        Specified by:
        disconnectAllConsumers in interface Dispatcher
        Returns:
      • disconnectActiveConsumers

        public java.util.concurrent.CompletableFuture<java.lang.Void> disconnectActiveConsumers​(boolean isResetCursor)
        Description copied from interface: Dispatcher
        Disconnect active consumers.
        Specified by:
        disconnectActiveConsumers in interface Dispatcher
      • reset

        public void reset()
        Description copied from interface: Dispatcher
        mark dispatcher open to serve new incoming requests.
        Specified by:
        reset in interface Dispatcher
      • readEntriesComplete

        public void readEntriesComplete​(java.util.List<org.apache.bookkeeper.mledger.Entry> entries,
                                        java.lang.Object ctx)
        Specified by:
        readEntriesComplete in interface org.apache.bookkeeper.mledger.AsyncCallbacks.ReadEntriesCallback
      • readEntriesFailed

        public void readEntriesFailed​(org.apache.bookkeeper.mledger.ManagedLedgerException exception,
                                      java.lang.Object ctx)
        Specified by:
        readEntriesFailed in interface org.apache.bookkeeper.mledger.AsyncCallbacks.ReadEntriesCallback
      • getFirstAvailableConsumerPermits

        protected int getFirstAvailableConsumerPermits()
      • redeliverUnacknowledgedMessages

        public void redeliverUnacknowledgedMessages​(Consumer consumer,
                                                    java.util.List<org.apache.bookkeeper.mledger.impl.PositionImpl> positions)
        Specified by:
        redeliverUnacknowledgedMessages in interface Dispatcher
      • isBlockedDispatcherOnUnackedMsgs

        public boolean isBlockedDispatcherOnUnackedMsgs()
      • blockDispatcherOnUnackedMsgs

        public void blockDispatcherOnUnackedMsgs()
      • unBlockDispatcherOnUnackedMsgs

        public void unBlockDispatcherOnUnackedMsgs()
      • getTotalUnackedMessages

        public int getTotalUnackedMessages()
      • getName

        public java.lang.String getName()
      • trackDelayedDelivery

        public boolean trackDelayedDelivery​(long ledgerId,
                                            long entryId,
                                            org.apache.pulsar.common.api.proto.MessageMetadata msgMetadata)
        Description copied from interface: Dispatcher
        Check with dispatcher if the message should be added to the delayed delivery tracker. Return true if the message should be delayed and ignored at this point.
        Specified by:
        trackDelayedDelivery in interface Dispatcher
      • getMessagesToReplayNow

        protected java.util.Set<org.apache.bookkeeper.mledger.impl.PositionImpl> getMessagesToReplayNow​(int maxMessagesToRead)
      • shouldPauseDeliveryForDelayTracker

        protected boolean shouldPauseDeliveryForDelayTracker()
      • addMessageToReplay

        protected boolean addMessageToReplay​(long ledgerId,
                                             long entryId,
                                             long stickyKeyHash)
      • addMessageToReplay

        protected boolean addMessageToReplay​(long ledgerId,
                                             long entryId)
      • checkAndUnblockIfStuck

        public boolean checkAndUnblockIfStuck()
        Description copied from interface: Dispatcher
        Checks if dispatcher is stuck and unblocks the dispatch if needed.
        Specified by:
        checkAndUnblockIfStuck in interface Dispatcher
      • getStickyKeyHash

        protected int getStickyKeyHash​(org.apache.bookkeeper.mledger.Entry entry)