> On 2011-11-17 21:22:31, Robbie Gemmell wrote: > > In addition to the code-specific items already noted, I thought id mention > > that it would be good if this change pulled in the rollback/recover related > > completion issue Keith and I patched today. As I mentioned on the phone > > earlier, we went for the simplest (albeit hacky) solution we could to make > > it clearer for inclusion in the release, but it would be nice to see it > > cleaned up. This change looks to take care of the messages which were > > actually delivered before the rollback was performed, but it still wont > > handle the ones which were only prefetched. > > > > I noticed that you stopped the flusher thread running for modes other than > > DUPS_OK, which is nice. Alex questioned whether this change would affect > > browsers or not because they ignore the session acknowledge mode and go > > with NO_ACK behaviour. Looking it over I think it seems fine due to the > > processCompletions call in postDeliver(), but its possibly still worth a > > check. > > rajith attapattu wrote: > Your observation is correct, this deals with messages that were already > received by the application. > For recover(), we really don't need to send completions for the transfers > we get bcos we do a stop and start which re-issues the credit. But for > correctness we should mark them complete. As for rollback we definitely > should mark the messages that were in the prefetch buffer as complete so we > get re-credited. > Let me pull in the change and see how I could integrate it with some > cleanup. > > Starting the flusher thread only for DUPS_OK was overdue :) > Do we have any existing tests that test this specific aspect of > QueueBrowsers ? > > Robbie Gemmell wrote: > >For recover(), we really don't need to send completions for the > transfers we get bcos we do a stop and start which re-issues the credit. > > I dont think that is correct. There is a discussion on the mailing lists > at the moment about the behavioural differences in credit window sizing > between the Java and C++ brokers, and the initial outcome looks like making > the C++ broker move to doing what the Java broker does. In that case, it is > necessary for the client to complete all the commands during recover, or the > broker will simply consider that you have already used [some of] the new > credit you are issuing because you still havent completed the outstanding > messages (as very explicitly mentioned in the 0-10 spec, releasing etc a > message does not complete it). If it did anything else, you would effectively > be allowing the broker to breach the requested credit window size in certain > situations (as the C++ broker currently does).
I don't think it's correct either :D , hence me mentioning "But for correctness we should mark them complete". Yes I was following closely that thread and I agree that the C++ broker should do the same as the Java broker. - rajith ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/2853/#review3325 ----------------------------------------------------------- On 2011-11-16 18:31:12, rajith attapattu wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://reviews.apache.org/r/2853/ > ----------------------------------------------------------- > > (Updated 2011-11-16 18:31:12) > > > Review request for qpid, Gordon Sim, Robbie Gemmell, Weston Price, Keith > Wall, and Oleksandr Rudyy. > > > Summary > ------- > > This patch is for both QPID-3612 & QPID-3613. Please note QPID-3602 is the > main JIRA for credit related issues. > > Message completions are now handled independent of the Message acks. > > 1. The consumer now keeps track of credits on a per subscription basis using > the RangeSet "completions" and sends completions, > if the unCompletedCount >= _capacity/2 > For capacity = 0 or capacity = 1, we use the flag > "sendCompleteForEveryMsg" to send a completion for each message. > > 2. Cleanedup the acking process in AMQSession_0_10.java to make acking > independent of completions. > 2.1 For AUTO_ACK we send an ack after every message. > 2.1 For DUPS_OK we ack if, > maxAckDelay <= 0 OR > unackedCount >= ackBatchingThreshold, where ackBatchingThreshold == > prefetch/2 > > > This addresses bug QPID-3602. > https://issues.apache.org/jira/browse/QPID-3602 > > > Diffs > ----- > > > http://svn.apache.org/repos/asf/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java > 1202779 > > http://svn.apache.org/repos/asf/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer_0_10.java > 1202779 > > http://svn.apache.org/repos/asf/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/client/prefetch/PrefetchBehaviourTest.java > 1202779 > > Diff: https://reviews.apache.org/r/2853/diff > > > Testing > ------- > > Added two basic test cases (transacted and client-ack modes) to ensure > completions are sent in time to ensure credits don't dry up. > > > Thanks, > > rajith > >