RE: [wsrm] about ordering

From
Jacques Durand <>
Date
2003-09-12T18:52:11+00:00
ID
Thread
RE: [wsrm] about ordering
Sunil,

 

the 
decision "delayed vs lost" you point at is indeed essential to (o1), 

although the reason I would drop (o1) definition and keep (o2) - if we 
have to settle on only one -

is 
more due to the logic of Ack + ordering (all messages are expected to be 
received + ordered )

 

Note 
however that (o2) will also face the decision "delayed vs lost"  
!

 

- 
message #2 is "late", we have passed #1 to the app, and keep piling up  #3, 
4,5... 

- when 
do we decide that it is not worth waiting anymore for #2? Even with "guaranteed 
delivery"

a 
particular message may never go through (e.g. too big...).

- from 
then the main difference with (o1) is that we won't pass anything more from this 
sequence to the app (3,4,5 are lost)

while 
in (o1) we would pass them in the right order. 

 

Some 
decision criterion still needs be supported... even though more unlikely to be 
used, thanks to resending.

 

Jacques

  
-----Original Message-----
From: Sunil Kunisetty 
  [mailto:]
Sent: Friday, September 12, 2003 
  11:15 AM
To: Jacques Durand
Cc: 
  ''
Subject: Re: [wsrm] about 
  ordering

  
 Jacques, 
  
 How does a Receiver distinguish a 'lost' message to a 'delayed' 
  message? In other 
 words, how does a Receiver assume that the message 
  is 'lost' and not 'delayed'? 
  
 Sender may have sent msgs. 
  1,2, & 3 in that order.  Msg. 2 was 'delayed' and 
 somehow 3 
  shows up much before 2. Receiver may have assumed that 2 was 
 'lost' 
  and could have delivered 3 to the application. And then 2 arrives and 
  
 assuming that it doesn't expire, what does the Receiver do with 
  then? 
  
 Since we don't have a global default for msg. expire time as of now 
  and there 
 is no explicit msg. lost header/token (from Sender to 
  receiver), we can't easily 
 distinguish a lost message to a delayed 
  message. Because of this it will be very 
 difficult to implement the 
  "message ordering" (o1). 
  
 Thanks, 
 -Sunil 
  
Jacques Durand wrote: 
    
    
I propose the following (partial) answer 
    for Rel 57, see below, 
and 
    also after this, see my concern on the way we seem to tie the "ordering" vs 
    "no ordering" decision 
to 
    the seq number value (section 9.5 in the meeting minutes) 
    
Regards, 
    
jacques 
    
Rel 57: 
    
Proposal: Message ordering has 
    actually two variants (o1) and (o2) that address different ordering 
    requirts. Roughly: 
    -       "message ordering" (o1): loosing some messages 
      will not "break" a sequence, provided that what is passed to the receiver 
      application is still ordered. We can imagine that a flow of messages from 
      a monitoring device could just need that. 
      
-       "consecutive message ordering" (o2) a missing 
      message is not allowed in the delivered sequence. A message that cannot be 
      waited for any longer, should break the sequence, and subsequent messages 
      not be passed to the app (so this enforces passing only consecutively 
      ordered sequences).
The 
    spec seems to endorse either o1 (section 2.4) or o2 (section 3.3.2). 
    Instead, it should clearly define these two variants. 
    
Definition 1: (message ordering, o1 
    above): 
When "message 
    ordering" is required, an  RMP implementation that is required to do 
    "message ordering" , MUST NOT make any two received messages available to 
    the application in a different order than their sending order. 

    
Definition 2: (consecutive message 
    ordering, o2 above): 
When 
    "consecutive message ordering" is required, an RMP implementation MUST 
    enforce "message ordering", and in addition MUST NOT make a received message 
    available to the application if its was sent after another message that is 
    not yet available to the application. 
    
Depending on which variant is used, o1 or 
    o2, either one or the other of the current options (b)and (a) 
    respectively 
 in Rel 
    57 will apply. 
The decision 
    when to decide to "not wait anymore", remains to be decided (TimeToLive of 
    the first unordered message? The min of TimeToLives of all unordered 
    messages? Or a max unordered window size parameter, related to Rel 
    56.) 
    
-------------------------------- meeting 
    minutes 9.5: 
    
"...The text is currently unclear on whether 
    sequenceNO other than 0 can be used without ordering. The general consensus 
    is no." 
    
Issue: restricting the use of 
    sequence numbers to the message ordering feature alone - and enforcing one 
    message 
per groupId 
    otherwise, with seq nbr equal to 0 - will preclude implementations from 
    using of a whole set of fast and space-efficient algorithms for duplicate 
    elimination. 
    
Proposal: Do not preclude using 
    sequence numbers for other purpose than message ordering, at least until 
    some conclusive results have been obtained on testing duplicate elimination 
    algorithms. The spec should only require 
    
that (groupId + seq.nbr) be always 
    unique. 
If the concern is 
    about how to instruct an RMP what to do when it sees a sequence number in a 
    message (should order? Should not?), that is another problem that could be 
    solved separately. 
    
If we resort to such tricks as using a 
    different groupId for each message that does not require ordering, this 
    amounts to enforcing duplicate check algorithms that are based on unique 
    messageId strings. This will lead to more costly duplicate check (less 
    scalable and less performant) and to the use of two different algorithms, if 
    we still want to use sequence number-based duplicate check for ordered 
    sequence that also need exactly once 
delivery.