RE: [wsrm] Rev "d" of Rel52, 57

From
Jacques Durand <>
Date
2003-12-02T03:27:17+00:00
ID
Thread
RE: [wsrm] Rev "d" of Rel52, 57
Title: Rev "d" of Rel52, 57

inline:

  
-----Original Message-----
From: Bob Freund 
  [mailto:]
Sent: Monday, December 01, 
  2003 3:14 PM
To: Jacques Durand; 
  
Subject: RE: [wsrm] Rev "d" of Rel52, 
  57

  
A 
  few comments:

  
 

  
ExpiryTime: The sender's bid for a time beyond which there is no need 
  to persist the message.  
[Jacques Durand] yes, that is implied by Rel50 resolution, 
  but Rel50 is stronger: expired message must NOT even be delivered to next 
  layer (it is not like the RMP is free to do as it 
  likes).

  
 

  
 Receivers that cannot honor 
  this request must fault. Note that for messages contained in a group, any rmp 
  state related to groups must be held at least as long as there exists an 
  unexpired message.

  
GroupEnd: a marker with application semantics ONLY which may usefully 
  signify a conceptual end of file.  It serves no fundamental protocol role 
  other than it may be used by implementers as a hint for optimization 
  purposes.

  
 

  
GroupID: An identifier that may be used by the application to identify 
  a collection of messages.

  
 

  
RemoveAfter: Since RemoveAfter must be set equal to or larger than 
  ExpiryTime, it only serves the function of extending the lifetime of group 
  information that may be held in the RMP even though all prior messages in the 
  group have expired.  
 Since it is an optional 
  attribute, then receivers must in any case implement a policy-driven mechanism 
  that gracefully terminates a group after all messages expire.  
  
[Jacques Durand] You seem to imply that without 
  RemoveAfter, group should be terminated when its messages expire. I believe 
  this is the real contentious point: in the absence of RemoveAfter (renamed 
  GroupExpiryTime), I believe the group should not be terminated just because 
  all of its previous messages have expired: it is OK to send new messages after 
  that. In fact, it is OK to have some never-ending groups, if that is what 
  users want. And this, independently from each message expiration 
  time.

  
 

  
 

  
 In the case of many concurrent 
  groups with large RemoveAfter times, implementers will be forced to implement 
  another policy based mechanism to prevent group information from growing 
  without bounds.  Since these two mechanisms must exist then RemoveAfter 
  has the role of requesting resources that potentially the receiver does not 
  have.  Of course this case dictates the introduction of another 
  fault.  Perhaps this is just the point.  Without this optional 
  attribute in an incoming group header, the group must function anyway.  
  Is the juice worth the squeeze?
 
[Jacques Durand] We could of course let the RMP utilize 
  resources until a storage fault is generated, and not bother about providing 
  ways to apps to remove useless states. But we already provide some control to 
  apps, with the "end" marker. I see GroupExpiryTime and 
  GroupMaxIdleTime as just other (optional) ways. Apps don't always know 
  when a message is last one for a group, at the time they send 
  it. 

  
 

  
 

  
RetryInterval: The time, that a sender waits before re-transmitting an 
  unacknowledged message.  There is no protocol relevance to this parameter 
  other than to avoid anomalous behavior, the Retryinterval must be longer than 
  the round-trip message time and much shorter by factors than 
  ExpiryTime-NOW.  The sender may calculate this parameter from observed 
  network and receiver behavior in the manner similar to that described in TCP 
  Extensions.

  
 

  
Security/Robustness:

  
Receivers shall continue to operate with respect to normal operation 
  even though one or more senders may be hitting it with bad parameters.  
  This I presume would be extra-important for any protocol describing itself as 
  reliable. Consider varying values of every parameter in message re-tries and 
  near infinite expiryTime and RemoveAfter.  

  
 

  
Ramble:

  
Proper protocol operation, I assume, must occur even with a dormant or 
  inactive application.  That means that typically the RMP's persistence 
  mechanism thus will operate as a queue of messages waiting to be processed by 
  the application.  That makes us look for ways to reduce state and state 
  persistence for the sake of efficiency.  We have not discussed 
  application to RMP interactions which may be useful to 
  implementers.  There are a number of potential optimizations 
  (such as, message payloads may be deleted for any message that has been acted 
  upon by the application), but they have no bearing on the protocol 
  specification since they relate to APIs which are not part of the 
  specification.  I am feeling that RemoveAfter and its cousin MaxGroupIdle 
  fall in the category of implementation optimization hints as well.
[Jacques Durand] For me, 
  they fall in same category as the "end" marker for terminating a group: an app 
  convenience. Because again I think you can't rely on message expiry time 
  to terminate a group.

  
 

  
-bob

  
    
-----Original Message-----
From: Jacques Durand 
    [mailto:]
Sent: Sunday, November 30, 2003 
    3:35 AM
To: ''
Subject: [wsrm] 
    Rev "d" of Rel52, 57

    
Rel52 and Rel57 reworded and adjusted to 
    late comments, (tagged "rev d") 
though nothing radical: 

    
- Still makes use of Group termination 
    timeouts: 
I  really find it 
    hard to overload message ExpiryTime with group termination 
semantics: ExpiryTime is about the delivery cycle 
    for messages, which is orthogonal 
to how long a group should be active. 

    
- Agree that ExpiryTime should be set, as 
    Bob suggested, based on expected 
transport performance and network monitoring (e.g. round-trip timing) 
    and should 
normally be opaque to 
    users. 
[<Bob Freund>] My comment was related to 
    message retry interval.  that is the amount of time that a sender 
    should wait prior to re-transmission of an unacknowledged message.  
    Round trip timing is most important for this 
    parameter. 

    
[<Bob 
    Freund>] ExpiryTime should be the time after which a message in 
    persistent storage may be deleted
It is a tuning parameter that says: "normally the 
    delivery cycle (transport + RMPs) for 
this message should not exceed this time. If it does, this means that 
    the communication 
conditions are 
    too bad for doing reliable messaging. 
In that case the RMP will not deliver it, and notify the app 
    instead." 

    
- Unlike ExpiryTime, group termination 
    parameters have an application semantics: 
In the same way a reliability QoS associated with 
    a group is based on application needs, 
(e.g. ordering), limit on group duration is also based on application 
    profiles: 
some apps will be able 
    to mark the last message with "end", some will not. 
Among these, some will be able to cap the duration 
    of their groups (GroupExpiryTime), 
some will only be able to say what idle time can safely be considered 
    as terminating 
a group 
    (GroupMaxIdleTime). Finally, some groups are not supposed to terminate 
    ever... 
which is fine as long as 
    an implementation can handle the space overhead (group states) 
    
in case of many of these 

    
- So in Rel52 I still propose the 4 
    termination cases: 
They may not 
    make for a concise spec, but they look very implementable to me: 
    
in all cases, Sender and Receiver can 
    synchronize group termination without 
need of notification (thanks partially to the Ack semantics 
    (Rel33)). 
To me this is by far 
    the most important enhancement. 

    
Regards, 

    
Jacques 
<<Time-Rel57d.txt>> <<Time-Rel52d.txt>>