[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]
Subject: Re: [ebxml-msg] Re: Comments on the 1.09 about ConversationId
Date: Tue, 04 Dec 2001 10:16:21 -0600 From: David Fischer <david@drummondgroup.com> Dan, did you mean to imply that messages are no longer stored once they are acknowledged? This is not the case. Messages must be stored longer than persistDuration. In your scenario, when 12 got to the Receiving MSH, 1-10 are still in the store. I've heard this said before but I don't understand it. Why must messages be stored longer than persistDuration? In fact, once a message has been given to the application, why does it have to be stored persistently beyond that point? And if it does have to be stored beyond that point, for how long does it have to be stored? You *do* have to store the MessageId of the message if you're doing duplicate elimination, but that doesn't require storing the message itself. If you wait so long that 1-10 have passed persistDuration, then I think you have waited so long that it does not matter any more. Why is that so long that it doesn't matter any more? Perhaps MSH A sends 10 messages, and MSH B receives and acknowledges them, and MSH B delivers all ten messages to its application. Then three weeks pass (the receiver is a supplier of rabbit soup, and it takes three weeks to catch the rabbit), and then (perhaps after the B sends something to A), A sends message 11 and message 12, and message 12 arrives first. B needs to know that 12 is out of order, even though a lot of time has passed. However, this implies the last ordered message/MessageId (which has been delivered in order) must be stored indefinitely (forever?) which is probably not acceptable. No, just until the conversation is over. (It's just like TCP.) This also points out the conflict between Message Order and persistDuration. What if messages 1,2,3,4 have persistDuration of 2 days. Messages 1,2,4 are delivered. The MSH hands 1,2 to the application but holds 4. For some reason, 3 is not delivered for 3 days. In this case 3,4 have already passed persistDuration so they are not delivered. The next day, 5 is delivered. Since 3,4 were not delivered, then 5 cannot be delivered (nor any subsequent messages) even though it is still within TTL, and the ordering is forever broken for this ConversationId. Well, if you asked for reliable messaging and you asked for messages to be delivered in order, then surely you don't want to see message 5 when you haven't seen message 3. (I think we agreed that if you ask for messages in order, then you have to be using reliable messaging, which means acks are requested and duplicates are eliminated.) I think the real problem here is: what has become of message 3? The sender ought to realize that an ack has not come, and so it should retransmit message 3. But if it just can't get message 3 through, on a conversation on which message ordering has been specified, then indeed no subsequent messages can be transmitted. The conversation is stuck until message 3 gets through. I am wondering why are we messing with all of this? Did I see Marty suggest, if messages are order dependant, just wait for acknowledgment from the end before sending the next message? Sounds good. Well, I don't think it sounds good, for reasons that I have already explained at length. -- Dan
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]
Powered by eList eXpress LLC