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

public class InMemoryDelayedDeliveryTracker extends AbstractDelayedDeliveryTracker
  • 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: DelayedDeliveryTracker
      Add a message to the tracker.
      Parameters:
      ledgerId - the ledgerId
      entryId - the entryId
      deliverAt - 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

      public NavigableSet<Position> getScheduledMessages(int maxMessages)
      Get a set of position of messages that have already reached.
    • clear

      public CompletableFuture<Void> clear()
      Description copied from interface: DelayedDeliveryTracker
      Clear 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: DelayedDeliveryTracker
      Close the subscription tracker and release all resources.
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface DelayedDeliveryTracker
      Overrides:
      close in class AbstractDelayedDeliveryTracker
    • shouldPauseAllDeliveries

      public boolean shouldPauseAllDeliveries()
      Description copied from interface: DelayedDeliveryTracker
      Tells whether the dispatcher should pause any message deliveries, until the DelayedDeliveryTracker has more messages available.
    • nextDeliveryTime

      protected long nextDeliveryTime()
      Specified by:
      nextDeliveryTime in class AbstractDelayedDeliveryTracker