Ack range checking, etc.
------------------------
Key: AMQ-1081
URL: https://issues.apache.org/activemq/browse/AMQ-1081
Project: ActiveMQ
Issue Type: Bug
Components: Broker
Affects Versions: 4.2.0
Reporter: [EMAIL PROTECTED]
I'm not sure if this is serious; if not please reduce its severity.
There seem to be some confusing things happening with acknowledgments.
1. PrefetchSubscription.java does a "range check" on the acknowledgement.
However, when the acknowledgment gets to the JDBC or Memory TOPIC store
(possibly other stores as well), it is assumed that all acknowledgements up to
the last are counted. This seems to suggest that the "first" part of the range
should NOT be verified for >= (in other words, it should acknowledge everything
from the beginning of the dispatched LinkedList to ack.getLastMessageId -- this
means taking out the inAckRange variable, or acting like it is always true). I
believe this may need to happen ONLY when the prefetch is doing a topic
(DurableTopicSubscription) , not a queue (QueueSubscription), but I'm totally
not sure.
2. When kahaadaptor.KahaTopicMessageStore is called to do an acknowledge, it
blindly does a removeFirst on the container, and never uses the MessageId
parameter to do anything. I believe it should do a getFirst, verify that that
the MessageId of the ConsumerMessageRef matches the parameter, if it does not
match, cancel the acknowledgement (not clear how to do this because the
PrefetchSubscription.acknowledge has already done work). In any event,
crashing the subscription might be better than risking goofing up which
messages have been acknowledged. (Another possibility is to walk the LinkedList
looking for a match, but this doesn't seem to make sense given how
PrefetchSubscription tracks the acknowledgments; I haven't fully thought this
through).
3. Looks like TopicSubscription.java is ignoring all of the ID info in the ack
parameter (this is the non-durable subscriber case). Is this right? Seems
like client could just send extraneous ack messages with arbitrary IDs on a
non-durable subscription and goof this up.
4. In either durable or non-durable case, attempt by the client to ack out of
sequence should error out on the client and not mess up any of the subscription
state. Most worried about the case where the messageis > than what has been
delivered, not sure if the < case is a problem as long as it is just ignored
without impact (which certainly does not look like the current impl in
TopicSubscription.java; not sure about PrefetchSubscription.java). It looks
like this isn't being enforced, or did I miss something?
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
https://issues.apache.org/activemq/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira