← Prev in month ← Prev in thread

[ws-rx] i0019 - a formal proposal - take 4

From
Doug Davis <>
Date
2005-09-01T13:41:35+00:00
ID
Thread
[ws-rx] i0019 - a formal proposal - take 4
Based on my note to Marc I added some text
explaining that the RMD may also choose to shutdown

the sequence even w/o a CloseSequence()
being sent from the RMS.  I view this as a softer SequenceTerminated

situation.  I assumed this was obvious
but making it clearer doesn't hurt.

thanks

-Doug

__________________  

Using the pdf file at http://www.oasis-open.org/apps/org/workgroup/ws-rx/download.php/13493/WS-ReliableMessaging-v1.0-wd-01.pdf

here's the proposal:   

Change lines 340-347, the SeqAck syntax,
to:  

<wsrm:SequenceAcknowledgement ...>
 

  <wsrm:Identifier ...> xs:anyURI
</wsrm:Identifier>  

  [ [<wsrm:AcknowledgementRange
...  

      Upper="xs:unsignedLong"
 

      Lower="xs:unsignedLong"/>
+  

     <wsrm:Final/>
? ] 

  | <wsrm:Nack> xs:unsignedLong
</wsrm:Nack> + ]  

  ...  

</wsrm:SequenceAcknowledgement>  

After line 378, add to the description
of the SeqAck elements:   

  /wsrm:SequenceAcknowledgement/wsrm:Final
  

  This optional element, if present,
indicates that the RM    

  Destination is not accepting new
messages for the   

  specified Sequence.  The RM
Source can be assured that   

  the ranges of messages acknowledged
by this 

  SequenceAcknowledgement header block
will not change in the   

  future.  Any attempt to deliver
additional messages to this   

  sequence MUST generate a SequenceClosed
fault by the RM   

  Destination.  This element
MUST be present when the Sequence   

  is no longer accepting new message.

  Note: this element MUST NOT be used
when sending a Nack, it   

  can only be used when sending AcknowledgementRanges.
 

On lines 569 and 570 change:  

  After an RM Source receives the
<SequenceAcknowledgement>    

  acknowledging the complete range
of messages in a Sequence, it

  sends a ... 

to   

  When the RM Source has completed
its use of the Sequence, it   

  sends a ...   

To the end of that para, at the end of
line 574, add:   

  Note, under normal usage the RM
source will complete its use of  

  the sequence when all of the messages
in the Sequence have been   

  acknowledged.  However, the
RM Source is free to Terminate   

  or Close a Sequence at any time
regardless of the acknowledgement   

  state of the messages.  

Change lines 581 and 582 from:  

  This element is sent by an RM Source
after it has received the    

  final <SequenceAcknowledgement>
covering the full range of a Sequence.   

to   

  This element is sent by an RM Source
to indicate it has completed

  its use of the Sequence, i.e. it
will not attempt to send any  

  additional application messages
to the RM Destination.  RM protocol  

  messages, e.g. AckRequested, CloseSequence
and TerminateSequence  

  may still be sent.  

After line 396, add a new section about
closing a Sequence:  

  3.6 Closing A Sequence   

  There may be times during the use
of an RM Sequence that the RM   

  Source or RM Destination will wish
to discontinue using a Sequence 

  even if some of the messages have
not been successfully delivered 

  to the RM Destination.  

  In the case where the RM Source
wishes to discontinue use of a

  sequence, while it can send a TerminateSequence
to the RM Destination,   

  since this is a one-way message
and due to the possibility of late   

  arriving (or lost) messages and
Acknowledgements, this would leave   

  the RM Source unsure of the final
ranges of messages that were   

  successfully delivered to the RM
Destination.   

  To alleviate this, the RM Source
can send a <wsrm:CloseSequence> element,   

  in the body of a message, to the
RM Destination to indicate that   

  RM Destination MUST NOT accept any
new application messages for the   

  specified sequence, other than those
already received at the time 

  the <wsrm:CloseSequence> element
is interpreted by the RMD.  Upon receipt 

  of this message the RM Destination
MUST send a SequenceAcknowledgement  

  to the RM Source.  Note, this
SequenceAcknowledgement MUST include the  

  <wsrm:Final> element indicating
that the RM Destination will not accept  

  any new messages for this sequence.

  While the RM Destination MUST NOT
accept any new application messages  

  it MUST still accept and process
RM protocol messages.  For example,  

  it MUST accept and respond to AckRequested,
TerminateSequence as well as  

  CloseSequence messages.  Note,
subsequent CloseSequence messages have no 

  effect on the state of the sequence.

  In the case where the RM Destination
wishes to discontinue use of a

  sequence it may choose to 'close'
the sequence itself.  In cases where

  the RM Destination wishes to generate
a Fault but still allow RM protocol 

  messages (for example, AckRequested)
but not allow any new application 

  messages to be processed it may
use the SequenceClosed Fault in place of the

  SequenceTerminated fault.  Since
the SequenceTerminated fault may

  result in the state information
about the sequence to be reclaimed,

  use of the SequenceClosed fault
will allow the RM Source to still

  retrieve a final and accurate accounting
of the state of the sequence.

  When a Sequence is closed and there
are messages at the RM Destination   

  that are waiting for lower-numbered
messages to arrive (such as the   

  case when InOrder and ExactlyOnce
delivery assurance is being enforced)  

  before they can be delivered to
the RM Destination's application, the RM  

  Destination MUST NOT deliver those
messages.  

  The following exemplar defines the
CloseSequence syntax:   

    <wsrm:CloseSequence wsrm:Identifier="xs:anyURI"/>
  

  /wsrm:CloseSequence 

  This element is sent by an RM Source
to indicate that the RM    

  Destination MUST NOT accept any
new messages for this sequence.  

  Any attempt to deliver additional
messages to this sequence   

  MUST generate a SequenceClosed fault
by the RM Destination.   

  /wsrm:CloseSequence@Identifier  

  This required attribute contains
an absolute URI conformant   

  with RFC2396 that uniquely identifies
the sequence.  

  /wsrm:CloseSequence/{any}  

  This is an extensibility mechanism
to allow different (extensible)   

  types of information, based on a
schema, to be passed.   

    

  /wsrm:CloseSequence@{any}  

  This is an extensibility mechanism
to allow additional attributes,    

  based on schemas, to be added to
the element.   

  A <wsrm:CloseSequenceResponse>
is sent in the body of a response message by    

  an RM Destination in response to
receipt of a <wsrm:CloseSequence> request  

  message.  It indicates that
the RM Destination has closed the  

  sequence.  

  The following exemplar defines the
<wsrm:Closed> syntax:   

  /wsrm:CloseSequenceResponse 

  The element is sent in the body
of a response message by    

  an RM Destination in response to
receipt of a <wsrm:CloseSequence> request  

  message.  It indicates that
the RM Destination has closed the  

  sequence.  

  /wsrm:CloseSequenceResponse/{any}
 

  This is an extensibility mechanism
to allow different (extensible)   

  types of information, based on a
schema, to be passed.   

    

  /wsrm:CloseSequenceResponse@{any}
  

  This is an extensibility mechanism
to allow additional attributes,    

  based on schemas, to be added to
the element.   

On lines 735 and 746 make these faults
non-terminating by removing:   

  It is an unrecoverable error and
terminates the Sequence.   

    

After line 760, add a new fault:  

  4.8 Sequence Closed   

  This fault is sent by an RM Destination
to indicate that the

  specified sequence has been closed.

  Properties:   

  [Code] Sender   

  [Subcode] wsrm:SequenceClosed  

  [Reason] The sequence is closed
and can not accept new messages.  

  [Detail] <wsrm:Identifier...>
xs:anyURI </wsrm:Identifier>

Add the proper XML to the schema and WSDL....

thanks,   

-Doug
← Prev in month ← Prev in thread