From commits-return-12405-apmail-activemq-commits-archive=activemq.apache.org@activemq.apache.org Thu Nov 26 16:47:04 2009 Return-Path: Delivered-To: apmail-activemq-commits-archive@www.apache.org Received: (qmail 36264 invoked from network); 26 Nov 2009 16:47:04 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 26 Nov 2009 16:47:04 -0000 Received: (qmail 65415 invoked by uid 500); 26 Nov 2009 16:47:04 -0000 Delivered-To: apmail-activemq-commits-archive@activemq.apache.org Received: (qmail 65357 invoked by uid 500); 26 Nov 2009 16:47:03 -0000 Mailing-List: contact commits-help@activemq.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@activemq.apache.org Delivered-To: mailing list commits@activemq.apache.org Received: (qmail 65348 invoked by uid 99); 26 Nov 2009 16:47:03 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 26 Nov 2009 16:47:03 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 26 Nov 2009 16:47:00 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 6BFDC2388978; Thu, 26 Nov 2009 16:46:39 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r884633 - /activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQMessageConsumer.java Date: Thu, 26 Nov 2009 16:46:39 -0000 To: commits@activemq.apache.org From: dejanb@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20091126164639.6BFDC2388978@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: dejanb Date: Thu Nov 26 16:46:38 2009 New Revision: 884633 URL: http://svn.apache.org/viewvc?rev=884633&view=rev Log: https://issues.apache.org/activemq/browse/AMQ-2515 - Optimized Acknowledgements and interrupted transport Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQMessageConsumer.java Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQMessageConsumer.java URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQMessageConsumer.java?rev=884633&r1=884632&r2=884633&view=diff ============================================================================== --- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQMessageConsumer.java (original) +++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQMessageConsumer.java Thu Nov 26 16:46:38 2009 @@ -134,6 +134,9 @@ private long lastDeliveredSequenceId; private IOException failureError; + + private long optimizeAckTimestamp = System.currentTimeMillis(); + private long optimizeAckTimeout = 300; /** * Create a MessageConsumer @@ -788,7 +791,7 @@ } } } - + private void afterMessageIsConsumed(MessageDispatch md, boolean messageExpired) throws JMSException { if (unconsumedMessages.isClosed()) { return; @@ -809,12 +812,13 @@ if (!deliveredMessages.isEmpty()) { if (optimizeAcknowledge) { ackCounter++; - if (ackCounter >= (info.getCurrentPrefetchSize() * .65)) { + if (ackCounter >= (info.getPrefetchSize() * .65) || System.currentTimeMillis() >= (optimizeAckTimestamp + optimizeAckTimeout)) { MessageAck ack = makeAckForAllDeliveredMessages(MessageAck.STANDARD_ACK_TYPE); if (ack != null) { deliveredMessages.clear(); ackCounter = 0; session.sendAck(ack); + optimizeAckTimestamp = System.currentTimeMillis(); } } } else { @@ -1074,14 +1078,13 @@ session.connection.rollbackDuplicate(this, old.getMessage()); } } - if (pendingAck != null && pendingAck.isDeliveredAck()) { - // on resumption a pending delivered ack will be out of sync with - // re deliveries. - if (LOG.isDebugEnabled()) { - LOG.debug("removing pending delivered ack on transport interupt: " + pendingAck); - } - pendingAck = null; + if (!session.isTransacted()) { + // clean, so we don't have duplicates with optimizeAcknowledge + synchronized (deliveredMessages) { + deliveredMessages.clear(); + } } + pendingAck = null; } if (!unconsumedMessages.isClosed()) { if (this.info.isBrowser() || !session.connection.isDuplicate(this, md.getMessage())) {