Package org.apache.pulsar.broker.delayed
Class InMemoryDelayedDeliveryTracker
java.lang.Object
org.apache.pulsar.broker.delayed.AbstractDelayedDeliveryTracker
org.apache.pulsar.broker.delayed.InMemoryDelayedDeliveryTracker
- All Implemented Interfaces:
io.netty.util.TimerTask,AutoCloseable,DelayedDeliveryTracker
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final it.unimi.dsi.fastutil.longs.Long2ObjectSortedMap<it.unimi.dsi.fastutil.longs.Long2ObjectMap<org.roaringbitmap.longlong.Roaring64Bitmap>>Fields inherited from class org.apache.pulsar.broker.delayed.AbstractDelayedDeliveryTracker
clock, dispatcher, tickTimeMillis, timeout, timerFields inherited from interface org.apache.pulsar.broker.delayed.DelayedDeliveryTracker
DISABLE -
Constructor Summary
ConstructorsConstructorDescriptionInMemoryDelayedDeliveryTracker(AbstractPersistentDispatcherMultipleConsumers dispatcher, io.netty.util.Timer timer, long tickTimeMillis, Clock clock, boolean isDelayedDeliveryDeliverAtTimeStrict, long fixedDelayDetectionLookahead) -
Method Summary
Modifier and TypeMethodDescriptionbooleanaddMessage(long ledgerId, long entryId, long deliverAt) Add a message to the tracker.clear()Clear all delayed messages from the tracker.voidclose()Close the subscription tracker and release all resources.longThis method rely on Roaring64Bitmap::getLongSizeInBytes to calculate the memory usage of the buffer.longgetScheduledMessages(int maxMessages) Get a set of position of messages that have already reached.booleanReturn true if there's at least a message that is scheduled to be delivered already.protected longbooleanTells whether the dispatcher should pause any message deliveries, until the DelayedDeliveryTracker has more messages available.Methods inherited from class org.apache.pulsar.broker.delayed.AbstractDelayedDeliveryTracker
getCutoffTime, resetTickTime, run, updateTimer
-
Field Details
-
delayedMessageMap
protected final it.unimi.dsi.fastutil.longs.Long2ObjectSortedMap<it.unimi.dsi.fastutil.longs.Long2ObjectMap<org.roaringbitmap.longlong.Roaring64Bitmap>> delayedMessageMap
-
-
Constructor Details
-
InMemoryDelayedDeliveryTracker
public InMemoryDelayedDeliveryTracker(AbstractPersistentDispatcherMultipleConsumers dispatcher, io.netty.util.Timer timer, long tickTimeMillis, Clock clock, boolean isDelayedDeliveryDeliverAtTimeStrict, long fixedDelayDetectionLookahead)
-
-
Method Details
-
addMessage
public boolean addMessage(long ledgerId, long entryId, long deliverAt) Description copied from interface:DelayedDeliveryTrackerAdd a message to the tracker.- Parameters:
ledgerId- the ledgerIdentryId- the entryIddeliverAt- the absolute timestamp at which the message should be tracked- Returns:
- true if the message was added to the tracker or false if it should be delivered immediately
-
hasMessageAvailable
public boolean hasMessageAvailable()Return true if there's at least a message that is scheduled to be delivered already. -
getScheduledMessages
Get a set of position of messages that have already reached. -
clear
Description copied from interface:DelayedDeliveryTrackerClear all delayed messages from the tracker.- Returns:
- CompletableFuture
-
getNumberOfDelayedMessages
public long getNumberOfDelayedMessages()- Returns:
- the number of delayed messages being tracked.
-
getBufferMemoryUsage
public long getBufferMemoryUsage()This method rely on Roaring64Bitmap::getLongSizeInBytes to calculate the memory usage of the buffer. The memory usage of the buffer is not accurate, because Roaring64Bitmap::getLongSizeInBytes will overestimate the memory usage of the buffer a lot.- Returns:
- the memory usage of the buffer
-
close
public void close()Description copied from interface:DelayedDeliveryTrackerClose the subscription tracker and release all resources.- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceDelayedDeliveryTracker- Overrides:
closein classAbstractDelayedDeliveryTracker
-
shouldPauseAllDeliveries
public boolean shouldPauseAllDeliveries()Description copied from interface:DelayedDeliveryTrackerTells whether the dispatcher should pause any message deliveries, until the DelayedDeliveryTracker has more messages available. -
nextDeliveryTime
protected long nextDeliveryTime()- Specified by:
nextDeliveryTimein classAbstractDelayedDeliveryTracker
-