Package org.apache.pulsar.broker.service
Class AbstractBaseDispatcher
- java.lang.Object
-
- org.apache.pulsar.broker.service.AbstractBaseDispatcher
-
- All Implemented Interfaces:
Dispatcher
- Direct Known Subclasses:
AbstractDispatcherMultipleConsumers,AbstractDispatcherSingleActiveConsumer
public abstract class AbstractBaseDispatcher extends java.lang.Object implements Dispatcher
-
-
Field Summary
Fields Modifier and Type Field Description protected booleandispatchThrottlingOnBatchMessageEnabledprotected com.google.common.collect.ImmutableList<EntryFilterWithClassLoader>entryFiltersEntry filters in Broker.protected FilterContextfilterContextprotected org.apache.pulsar.broker.ServiceConfigurationserviceConfigprotected Subscriptionsubscription
-
Constructor Summary
Constructors Modifier Constructor Description protectedAbstractBaseDispatcher(Subscription subscription, org.apache.pulsar.broker.ServiceConfiguration serviceConfig)
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected static org.apache.commons.lang3.tuple.Pair<java.lang.Integer,java.lang.Long>computeReadLimits(int messagesToRead, int availablePermitsOnMsg, long bytesToRead, long availablePermitsOnByte)intfilterEntriesForConsumer(@Nullable EntryWrapper[] entryWrapper, int entryWrapperOffset, java.util.List<? extends org.apache.bookkeeper.mledger.Entry> entries, EntryBatchSizes batchSizes, SendMessageInfo sendMessageInfo, EntryBatchIndexesAcks indexesAcks, org.apache.bookkeeper.mledger.ManagedCursor cursor, boolean isReplayRead, Consumer consumer)Filter entries with prefetched message metadata range so that there is no need to peek metadata from Entry.intfilterEntriesForConsumer(java.util.List<org.apache.bookkeeper.mledger.Entry> entries, EntryBatchSizes batchSizes, SendMessageInfo sendMessageInfo, EntryBatchIndexesAcks indexesAcks, org.apache.bookkeeper.mledger.ManagedCursor cursor, boolean isReplayRead, Consumer consumer)Filter messages that are being sent to a consumers.protected abstract booleanisConsumersExceededOnSubscription()Determine whether the number of consumers on the subscription reaches the threshold.protected booleanisConsumersExceededOnSubscription(AbstractTopic topic, int consumerSize)protected byte[]peekStickyKey(io.netty.buffer.ByteBuf metadataAndPayload)protected booleanreachDispatchRateLimit(DispatchRateLimiter dispatchRateLimiter)protected abstract voidreScheduleRead()voidresetCloseFuture()protected intupdateEntryWrapperWithMetadata(EntryWrapper[] entryWrappers, java.util.List<org.apache.bookkeeper.mledger.Entry> entries)Update Entries with the metadata of each entry.protected org.apache.commons.lang3.tuple.Pair<java.lang.Integer,java.lang.Long>updateMessagesToRead(DispatchRateLimiter dispatchRateLimiter, int messagesToRead, long bytesToRead)-
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
addConsumer, addUnAckedMessages, canUnsubscribe, checkAndUnblockIfStuck, clearDelayedMessages, close, consumerFlow, cursorIsReset, disconnectActiveConsumers, disconnectAllConsumers, disconnectAllConsumers, getConsumers, getNumberOfDelayedMessages, getRateLimiter, getRedeliveryTracker, getType, initializeDispatchRateLimiterIfNeeded, isClosed, isConsumerConnected, markDeletePositionMoveForward, redeliverUnacknowledgedMessages, redeliverUnacknowledgedMessages, removeConsumer, reset, trackDelayedDelivery, updateRateLimiter
-
-
-
-
Field Detail
-
subscription
protected final Subscription subscription
-
serviceConfig
protected final org.apache.pulsar.broker.ServiceConfiguration serviceConfig
-
dispatchThrottlingOnBatchMessageEnabled
protected final boolean dispatchThrottlingOnBatchMessageEnabled
-
entryFilters
protected com.google.common.collect.ImmutableList<EntryFilterWithClassLoader> entryFilters
Entry filters in Broker. Not set to final, for the convenience of testing mock.
-
filterContext
protected final FilterContext filterContext
-
-
Constructor Detail
-
AbstractBaseDispatcher
protected AbstractBaseDispatcher(Subscription subscription, org.apache.pulsar.broker.ServiceConfiguration serviceConfig)
-
-
Method Detail
-
updateEntryWrapperWithMetadata
protected int updateEntryWrapperWithMetadata(EntryWrapper[] entryWrappers, java.util.List<org.apache.bookkeeper.mledger.Entry> entries)
Update Entries with the metadata of each entry.- Parameters:
entries-- Returns:
-
filterEntriesForConsumer
public int filterEntriesForConsumer(java.util.List<org.apache.bookkeeper.mledger.Entry> entries, EntryBatchSizes batchSizes, SendMessageInfo sendMessageInfo, EntryBatchIndexesAcks indexesAcks, org.apache.bookkeeper.mledger.ManagedCursor cursor, boolean isReplayRead, Consumer consumer)Filter messages that are being sent to a consumers.Messages can be filtered out for multiple reasons:
- Checksum or metadata corrupted
- Message is an internal marker
- Message is not meant to be delivered immediately
- Parameters:
entries- a list of entries as read from storagebatchSizes- an array where the batch size for each entry (the number of messages within an entry) is stored. This array needs to be of at least the same size as the entries listsendMessageInfo- an object where the total size in messages and bytes will be returned back to the caller
-
filterEntriesForConsumer
public int filterEntriesForConsumer(@Nullable EntryWrapper[] entryWrapper, int entryWrapperOffset, java.util.List<? extends org.apache.bookkeeper.mledger.Entry> entries, EntryBatchSizes batchSizes, SendMessageInfo sendMessageInfo, EntryBatchIndexesAcks indexesAcks, org.apache.bookkeeper.mledger.ManagedCursor cursor, boolean isReplayRead, Consumer consumer)
Filter entries with prefetched message metadata range so that there is no need to peek metadata from Entry.- Parameters:
entryWrapper- the optional message metadata array. need check if null pass.entryWrapperOffset- the index in `optMetadataArray` of the first Entry's message metadata- See Also:
filterEntriesForConsumer(List, EntryBatchSizes, SendMessageInfo, EntryBatchIndexesAcks, ManagedCursor, boolean, Consumer)
-
isConsumersExceededOnSubscription
protected abstract boolean isConsumersExceededOnSubscription()
Determine whether the number of consumers on the subscription reaches the threshold.- Returns:
-
isConsumersExceededOnSubscription
protected boolean isConsumersExceededOnSubscription(AbstractTopic topic, int consumerSize)
-
resetCloseFuture
public void resetCloseFuture()
- Specified by:
resetCloseFuturein interfaceDispatcher
-
reScheduleRead
protected abstract void reScheduleRead()
-
reachDispatchRateLimit
protected boolean reachDispatchRateLimit(DispatchRateLimiter dispatchRateLimiter)
-
updateMessagesToRead
protected org.apache.commons.lang3.tuple.Pair<java.lang.Integer,java.lang.Long> updateMessagesToRead(DispatchRateLimiter dispatchRateLimiter, int messagesToRead, long bytesToRead)
-
computeReadLimits
protected static org.apache.commons.lang3.tuple.Pair<java.lang.Integer,java.lang.Long> computeReadLimits(int messagesToRead, int availablePermitsOnMsg, long bytesToRead, long availablePermitsOnByte)
-
peekStickyKey
protected byte[] peekStickyKey(io.netty.buffer.ByteBuf metadataAndPayload)
-
-