You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by GitBox <gi...@apache.org> on 2020/05/03 13:20:43 UTC

[GitHub] [pulsar] avimas commented on a change in pull request #6862: fix consumer stuck when batchReceivePolicy maxNumMessages > maxReceiverQueueSize

avimas commented on a change in pull request #6862:
URL: https://github.com/apache/pulsar/pull/6862#discussion_r419102917



##########
File path: pulsar-client/src/main/java/org/apache/pulsar/client/impl/ConsumerBase.java
##########
@@ -95,7 +95,16 @@ protected ConsumerBase(PulsarClientImpl client, String topic, ConsumerConfigurat
         this.schema = schema;
         this.interceptors = interceptors;
         if (conf.getBatchReceivePolicy() != null) {
-            this.batchReceivePolicy = conf.getBatchReceivePolicy();
+            if (conf.getBatchReceivePolicy().getMaxNumMessages() > this.maxReceiverQueueSize) {
+                BatchReceivePolicy batchReceivePolicy = conf.getBatchReceivePolicy();
+                this.batchReceivePolicy = BatchReceivePolicy.builder()
+                        .maxNumMessages(this.maxReceiverQueueSize)
+                        .maxNumBytes(batchReceivePolicy.getMaxNumBytes())
+                        .timeout((int)batchReceivePolicy.getTimeoutMs()/1000, TimeUnit.SECONDS)
+                        .build();
+            } else {
+                this.batchReceivePolicy = conf.getBatchReceivePolicy();
+            }
         } else {
             this.batchReceivePolicy = BatchReceivePolicy.DEFAULT_POLICY;

Review comment:
       The above solution is correct but it users can get confused to see their batchRecieve policy configuration has changed 
   Why not changing the function hasEnoughMessagesForBatchReceive to return true when 
   incomingMessages.size() >= maxReceiverQueueSize ?
   
    protected boolean hasEnoughMessagesForBatchReceive() {
           if (batchReceivePolicy.getMaxNumMessages() <= 0 && batchReceivePolicy.getMaxNumBytes() <= 0) {
               return false;
           }
           return (batchReceivePolicy.getMaxNumMessages() > 0 && incomingMessages.size() >= batchReceivePolicy.getMaxNumMessages())
                   || (batchReceivePolicy.getMaxNumBytes() > 0 && INCOMING_MESSAGES_SIZE_UPDATER.get(this) >= batchReceivePolicy.getMaxNumBytes()) || (incomingMessages.size() >= maxReceiverQueueSize);
       }
   




----------------------------------------------------------------
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.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org