thetumbled commented on code in PR #23918:
URL: https://github.com/apache/pulsar/pull/23918#discussion_r1958987897
##########
pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentDispatcherMultipleConsumers.java:
##########
@@ -448,7 +442,10 @@ protected Predicate<Position>
createReadEntriesSkipConditionForNormalRead() {
// Filter out and skip read delayed messages exist in
DelayedDeliveryTracker
if (delayedDeliveryTracker.isPresent()) {
final DelayedDeliveryTracker deliveryTracker =
delayedDeliveryTracker.get();
- if (deliveryTracker instanceof BucketDelayedDeliveryTracker) {
+ if (deliveryTracker instanceof InMemoryDelayedDeliveryTracker) {
+ skipCondition = position -> ((InMemoryDelayedDeliveryTracker)
deliveryTracker)
+ .shouldSkipMessage(position.getLedgerId(),
position.getEntryId());
+ } else if (deliveryTracker instanceof
BucketDelayedDeliveryTracker) {
skipCondition = position -> ((BucketDelayedDeliveryTracker)
deliveryTracker)
.containsMessage(position.getLedgerId(),
position.getEntryId());
Review Comment:
`change shouldSkipMessage` to `contains` to avoid duplicate code.
##########
pulsar-broker/src/main/java/org/apache/pulsar/broker/delayed/InMemoryDelayedDeliveryTracker.java:
##########
@@ -218,9 +218,26 @@ public NavigableSet<Position> getScheduledMessages(int
maxMessages) {
return positions;
}
+ public boolean shouldSkipMessage(long ledgerId, long entryId) {
+ for (Long2ObjectMap<Roaring64Bitmap> ledgerMap :
delayedMessageMap.values()) {
+ Roaring64Bitmap entryIds = ledgerMap.get(ledgerId);
+ if (entryIds != null && entryIds.contains(entryId)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
@Override
public CompletableFuture<Void> clear() {
- this.delayedMessageMap.clear();
+ long cutoffTime = getCutoffTime();
Review Comment:
I doubt that it will introduce memory leak problem. For example, we need to
clear all delayed messages at method:
org.apache.pulsar.broker.service.persistent.PersistentDispatcherMultipleConsumers#clearDelayedMessages
IMO, the payoff of re-adding valid messages for once is acceptable, while
the risk of such change is great.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]