Package org.apache.pulsar.broker.service
Class AbstractBaseDispatcher
java.lang.Object
org.apache.pulsar.broker.service.EntryFilterSupport
org.apache.pulsar.broker.service.AbstractBaseDispatcher
- All Implemented Interfaces:
Dispatcher
- Direct Known Subclasses:
AbstractDispatcherMultipleConsumers,AbstractDispatcherSingleActiveConsumer
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final booleanprotected final org.apache.pulsar.broker.ServiceConfigurationFields inherited from class org.apache.pulsar.broker.service.EntryFilterSupport
entryFilters, filterContext, subscription -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedAbstractBaseDispatcher(Subscription subscription, org.apache.pulsar.broker.ServiceConfiguration serviceConfig) -
Method Summary
Modifier and TypeMethodDescriptioncomputeReadLimits(int messagesToRead, int availablePermitsOnMsg, long bytesToRead, long availablePermitsOnByte) intfilterEntriesForConsumer(@Nullable org.apache.pulsar.common.api.proto.MessageMetadata[] metadataArray, int startOffset, 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(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 messages that are being sent to a consumers.longlonglonglongprotected Stringprotected abstract booleanDetermine 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 voidvoidupdateMessagesToRead(DispatchRateLimiter dispatchRateLimiter, int messagesToRead, long bytesToRead) protected final voidupdatePendingBytesToDispatch(long size) Methods inherited from class org.apache.pulsar.broker.service.EntryFilterSupport
runFiltersForEntryMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods 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 Details
-
serviceConfig
protected final org.apache.pulsar.broker.ServiceConfiguration serviceConfig -
dispatchThrottlingOnBatchMessageEnabled
protected final boolean dispatchThrottlingOnBatchMessageEnabled
-
-
Constructor Details
-
AbstractBaseDispatcher
protected AbstractBaseDispatcher(Subscription subscription, org.apache.pulsar.broker.ServiceConfiguration serviceConfig)
-
-
Method Details
-
filterEntriesForConsumer
public int filterEntriesForConsumer(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 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 org.apache.pulsar.common.api.proto.MessageMetadata[] metadataArray, int startOffset, 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:
metadataArray- the optional message metadata array. need check if null pass.startOffset- the index in `optMetadataArray` of the first Entry's message metadata- See Also:
-
isConsumersExceededOnSubscription
protected abstract boolean isConsumersExceededOnSubscription()Determine whether the number of consumers on the subscription reaches the threshold.- Returns:
-
isConsumersExceededOnSubscription
-
resetCloseFuture
public void resetCloseFuture()- Specified by:
resetCloseFuturein interfaceDispatcher
-
reScheduleRead
protected abstract void reScheduleRead() -
reachDispatchRateLimit
-
updateMessagesToRead
protected org.apache.commons.lang3.tuple.Pair<Integer,Long> updateMessagesToRead(DispatchRateLimiter dispatchRateLimiter, int messagesToRead, long bytesToRead) -
computeReadLimits
-
peekStickyKey
protected byte[] peekStickyKey(io.netty.buffer.ByteBuf metadataAndPayload) -
getSubscriptionName
-
getFilterProcessedMsgCount
public long getFilterProcessedMsgCount()- Specified by:
getFilterProcessedMsgCountin interfaceDispatcher
-
getFilterAcceptedMsgCount
public long getFilterAcceptedMsgCount()- Specified by:
getFilterAcceptedMsgCountin interfaceDispatcher
-
getFilterRejectedMsgCount
public long getFilterRejectedMsgCount()- Specified by:
getFilterRejectedMsgCountin interfaceDispatcher
-
getFilterRescheduledMsgCount
public long getFilterRescheduledMsgCount()- Specified by:
getFilterRescheduledMsgCountin interfaceDispatcher
-
updatePendingBytesToDispatch
protected final void updatePendingBytesToDispatch(long size)
-