OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

ws-tx message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: Re: [ws-tx] Issue 007 - WS-C: Make Register/RegisterResponse retriable


Alastair, thanks. I think we've already shown that my recollection of 
the interop. scenarios was wrong ;-)

Mark.


Alastair Green wrote:

> Mark,
>
> I feel we should be careful about this. I'm sorry, but I'm not smart 
> enough to write you a short letter on this subject. Hopefully someone 
> else will come up with a more succinct way of expressing what follows.
>
> The only message exchanges defined to use reply-response and therefore 
> to mandatorily use message id/relates-to in the current specs (WS-AT 
> specifically) are CCC/CCCR, and R/RR. These exchanges are not 
> currently designed to act in an idempotent manner. Indeed, a 
> conformant January 2005 implementation must have responded to a 
> duplicate Register with a Fault/AlreadyRegistered, i.e. behaved 
> non-idempotently, and the issue of retry cannot therefore have arisen.
>
> Any retry behaviour in a Jan 2005 implementation that relied upon 
> id/relates-to correlation for /any other exchange /(e.g. the 2PC 
> exchanges) cannot have been interoperable other than by accident or by 
> excessive latitude on the part of its interlocutors.
>
> The initiator of an exchange cannot be relied upon to supply message 
> id, and the responder cannot be relied upon to specify the correlation 
> via relates-to, because nothing in the WS-A or WS-TX specs mandates 
> such elements to be present.
>
> Indeed, and this goes to the root of the whole discussion, the only 
> way that retriable exchanges were and are possible for e.g. 2PC 
> exchanges, is that the retry was identified as new, or as duplicate 
> (i.e. state-changing or non-state-changing) by virtue of the deemed 
> identity of the message sender. And in WS-TX protocols, that identity 
> is encoded in the EPRs exchanged during registration.
>
> This is not a problem, because (/given appropriate 
> Register/RegisterResponse exchanges/) identity comparison is not 
> required for subsequent coordination protocol exchanges. 
> Identification of state can be handled by mapping from an EPR to its 
> associated state. The state machine governs duplicate processing, for 
> any number of retries.
>
> Example. Coordinator C for transaction T, Participant P.
>
> C emits RS EPR in *CoordinationContext*. P stores RS EPR, keyed by 
> context /Identifier (a unique id for T).
>
> P generates C-to-P EPR (EPR for inbound-toParticipant coord protocol 
> messages). P stores CP EPR, which is a unique identifier for the tuple 
> {P, T}, i.e. this Participant for this Transaction, and ensures that 
> the state of {P,T} is accessible, given the value of CP EPR.
>
> P sends *Register* to RS EPR, embedding CP EPR.
>
> C generates P-to-C EPR (for inbound-to-Coordinator coord protocol 
> messages), and stores CP EPR, keyed by new PC EPR.
>
> C sends *RegisterResponse* to P, embedding PC EPR. P stores PC-EPR, 
> keyed by CP-EPR.
>  
> Coord protocol messages flow. Assume *Prepare/Prepared *(retriable 
> exchange).
>
> *Prepare* sent first time to CP EPR.  P checks state for that EPR, 
> i.e. for {P, T}, logs, changes state, looks up PC EPR and sends 
> *Prepared* to PC EPR.
>
> *Prepared* drops (is not received by C).
>
> Retry: *Prepare *sent second time to CP EPR. P uses CP EPR to find 
> state of {P, T}, finds it is Prepared, looks up PC EPR and resends 
> *Prepared* to PC EPR.
>
> You can flip this around with BA *Exit/Exited*, if you want to see 
> initiator and responder roles reversed between C and P.
>
> Generalizing, for Initiator I and Responder R (which must recognize 
> duplicates).
>
> I generates RI EPR, which identifies state of I for R, and stores IR 
> EPR, keyed by its generated RI EPR.
>
> R generates IR EPR, which identifies state of R for I, and stores RI 
> EPR, keyed by its generated IR EPR
>
> I sends one or more messages to IR EPR (address of  R for this exchange)
>
> R figures out if message n is a duplicate by checking state of R for 
> I, identified by IR EPR, and then looks up RI EPR using IR EPR as key, 
> to send reply to RI EPR
>
> I figures out if message m is already processed by checking state of I 
> for R, identified by RI EPR, etc etc.
>
> /Note that there is not a message id in sight.
> /
> [The whole of the scheme above, which I believe to be the spec 
> author's design intent, depends on preventing duplicate registrations 
> of P, i.e. C must never have two PC EPRs which it treats as distinct 
> for one P. Back to how to prevent duplicate registrations, on which a 
> separate post.]
>
> If the spec authors' intent was to allow two separate parallel 
> mechanisms for identifying actors in such retriable exchanges then 
> they should have explicitly stated that every message has an id, and 
> every reply has a relates-to=<that id>. This is not stated in WS-AT 
> Section 9, and I therefore believe any implementation that relied upon 
> that scheme was interoperable by accident or by private contract, but 
> not by spec conformance.
>
> Let us imagine that we do adopt the id/relates-to approach as a result 
> of this discussion. We now have a situation where every exchange has 
> an id. This id must be retained for all retries. This is at least 
> contrary to the spirit of WS-A, if not provably illegal. The message 
> is supposed to be uniquely identified by the id, as I read the WS-A spec:
>
> [message id] : IRI (0..1)
>
>     An absolute IRI that uniquely identifies the message. When
>     present, it is the responsibility of the sender to ensure that
>     each message is uniquely identified. The behavior of a receiver
>     when receiving a message that contains the same [message id] as a
>     previously received message is unconstrained by this specification.
>
> This does not seem a good route to follow. Unintentional duplication 
> (more than once delivery by the transport) is one thing; deliberately 
> sending duplicates with the same message ids seems wrong-headed.
>
> Finally, why have two ways of doing the same thing? No-one is 
> suggesting we remove EPRs, and they provide a sufficient mechanism in 
> all cases of retriable idempotent messages, except the 
> Register/RegisterResponse exchange, which require additional identity 
> to /correctly form /the bridge or channel. To interoperate two 
> completely different ways cannot be good practice, and certainly 
> complicates implementation and interoperability testing. This is the 
> danger of defining conformance as equalling a 5 x 5 matrix "worked" 
> for 5 implementations. If they all evolve to handle all variants then 
> they can evolve away from the spec and the design intent. A 
> non-conformant feature can spread by excessive tolerance.
>  
> Alastair
>
> Mark Little wrote:
>
>> BTW, to your point of ease: the interop scenarios we had to do in 
>> January/February this year had many situations requiring timeouts and 
>> retries. I certainly can't say I canvased everyone present, but I 
>> didn't get the impression that that aspect was considered too much of 
>> an implementation headache.
>>
>> Mark.
>>
>>
>> Christopher B Ferris wrote:
>>
>>
>>
>>>>>>
>>>>>> I'm not sure that using ws-a messageId is the easiest... it means 
>>>>>> that impls need to remember messageId
>>>>>> which can get onerous.
>>>>>>
>>>>>> The WS-A WG avoided the issue of EPR equivalence mostly because 
>>>>>> of issues related to use of
>>>>>> EPRs to identify something. IMO, in that spirit, EPR comparison 
>>>>>> becomes one of comparing the
>>>>>> <Address> element which comes down to URI equivalence issues 
>>>>>> which can go in a number of
>>>>>> directions... the namespace URI approach (straight string 
>>>>>> comparison) or the approach which normalizes the URI
>>>>>> first before comparing.
>>>>>>
>>>>>> Cheers,
>>>>>>
>>>>>> Christopher Ferris
>>>>>> STSM, Emerging e-business Industry Architecture
>>>>>> email: chrisfer@us.ibm.com
>>>>>> blog: http://webpages.charter.net/chrisfer/blog.html
>>>>>> phone: +1 508 377 9295
>>>>>>
>>>>>> Mark Little <mark.little@arjuna.com> wrote on 12/12/2005 03:20:16 
>>>>>> PM:
>>>>>>
>>>>   
>>>>  
>>>>
>>>  
>>>
>>>>>>>>> > There are multiple ways of making the operation idempotent. 
>>>>>>>>> Using WS-A
>>>>>>>>> > semantics is one and IMO is probably the easiest way of 
>>>>>>>>> doing it: it
>>>>>>>>> > goes back to traditional Retained Results RPC mechanisms of 
>>>>>>>>> the late
>>>>>>>>> > 1980's, where idempotency was imposed at the comms level. If 
>>>>>>>>> we try to
>>>>>>>>> > do it higher up the stack, within the actual implementation, 
>>>>>>>>> then we're
>>>>>>>>> > going to have to address the issue of EPR comparisons: how 
>>>>>>>>> can I ensure
>>>>>>>>> > this is the same operation if I can't determine that the 
>>>>>>>>> parameters are
>>>>>>>>> > identical?
>>>>>>>>> >
>>>>>>>>> > So, I think we're agreed that it needs to be idempotent. But
>>>>>>>>> > until/unless we address EPR comparisons, I think the WS-A 
>>>>>>>>> retry route
>>>>>>>>> > gets my vote.
>>>>>>>>> >
>>>>>>>>> > Mark.
>>>>>>>>> >
>>>>>>>>> >
>>>>>>>>> > Christopher B Ferris wrote:
>>>>>>>>> >
>>>>>>>>
>>>>>>       
>>>>>>   
>>>>>
>>>>   
>>>>
>>>>>>>>>>>> > >
>>>>>>>>>>>> > > That is one way, the other is to make the Register 
>>>>>>>>>>>> message idempotent.
>>>>>>>>>>>> > >
>>>>>>>>>>>> > > Seems to me that Register SHOULD be idempotent. It is 
>>>>>>>>>>>> much simpler to
>>>>>>>>>>>> > > simply process
>>>>>>>>>>>> > > the Register as if it had never been received... makes the
>>>>>>>>>>>> > > implementation of the client
>>>>>>>>>>>> > > a bit simpler.
>>>>>>>>>>>> > >
>>>>>>>>>>>> > >  I also think that the "AlreadyRegistered" fault is 
>>>>>>>>>>>> probablematic. It
>>>>>>>>>>>> > > doesn't reflect
>>>>>>>>>>>> > > back the CoordinationProtocolService EPR that the 
>>>>>>>>>>>> RegisterResponse
>>>>>>>>>>>> > > message does.
>>>>>>>>>>>> > > So, from the perspective of the registrant, it ISN'T 
>>>>>>>>>>>> registered if it
>>>>>>>>>>>> > > doesn't receive the
>>>>>>>>>>>> > > RegisterResponse message since it doesn't know the
>>>>>>>>>>>> > > CoordinationProtocolService
>>>>>>>>>>>> > > EPR.
>>>>>>>>>>>> > >
>>>>>>>>>>>> > > From the perspective of the registration service, 
>>>>>>>>>>>> overlaying the
>>>>>>>>>>>> > > previous registered
>>>>>>>>>>>> > > EPR is effectively an idempotent operation, and the 
>>>>>>>>>>>> response can be
>>>>>>>>>>>> > > the same as if
>>>>>>>>>>>> > > it didn't have the registration beforehand.
>>>>>>>>>>>> > >
>>>>>>>>>>>> > > IMO, making the operation idempotent makes the 
>>>>>>>>>>>> implementation much
>>>>>>>>>>>> > > simpler and
>>>>>>>>>>>> > > more robust in the long run.
>>>>>>>>>>>> > >
>>>>>>>>>>>> > > Cheers,
>>>>>>>>>>>> > >
>>>>>>>>>>>> > > Christopher Ferris
>>>>>>>>>>>> > > STSM, Emerging e-business Industry Architecture
>>>>>>>>>>>> > > email: chrisfer@us.ibm.com
>>>>>>>>>>>> > > blog: http://webpages.charter.net/chrisfer/blog.html
>>>>>>>>>>>> > > phone: +1 508 377 9295
>>>>>>>>>>>> > >
>>>>>>>>>>>> > >
>>>>>>>>>>>> > > *Mark Little <mark.little@jboss.com>*
>>>>>>>>>>>> > >
>>>>>>>>>>>> > > 12/12/2005 11:36 AM
>>>>>>>>>>>> > >
>>>>>>>>>>>> > >    > > To
>>>>>>>>>>>> > >    ws-tx@lists.oasis-open.org
>>>>>>>>>>>> > > cc
>>>>>>>>>>>> > >    > > Subject
>>>>>>>>>>>> > >    Re: [ws-tx] Issue 007 - WS-C: Make 
>>>>>>>>>>>> Register/RegisterResponse 
>>>>>>>>>>>
>>>>>>>>           
>>>>>>>>     
>>>>>>>
>>>>>     
>>>>>
>>>>>> retriable
>>>>>
>>>>   
>>>>  
>>>>
>>>  
>>>
>>>>>>>>>>>> > >
>>>>>>>>>>>> > >
>>>>>>>>>>>> > >
>>>>>>>>>>>> > >    > >
>>>>>>>>>>>> > >
>>>>>>>>>>>> > >
>>>>>>>>>>>> > >
>>>>>>>>>>>> > >
>>>>>>>>>>>> > > Actually I'll retract this. As Kevin just reminded me, 
>>>>>>>>>>>> we're using
>>>>>>>>>>>> > > WS-Addressing anyway, so surely lost messages and 
>>>>>>>>>>>> retries can be coped
>>>>>>>>>>>> > > with at that level: using the same wsa:MessageID for 
>>>>>>>>>>>> example, should
>>>>>>>>>>>> > > sort this.
>>>>>>>>>>>> > >
>>>>>>>>>>>> > > Mark.
>>>>>>>>>>>> > >
>>>>>>>>>>>> > >
>>>>>>>>>>>> > >
>>>>>>>>>>>> > > Mark Little wrote:
>>>>>>>>>>>> > >
>>>>>>>>>>>
>>>>>>>>           
>>>>>>>>     
>>>>>>>
>>>>>     
>>>>>
>>>>>>>>>>>>>>> > > > I think this makes proposal makes sense.
>>>>>>>>>>>>>>> > > >
>>>>>>>>>>>>>>> > > > Mark.
>>>>>>>>>>>>>>> > > >
>>>>>>>>>>>>>>> > > >
>>>>>>>>>>>>>>> > > > Peter Furniss wrote:
>>>>>>>>>>>>>>> > > >
>>>>>>>>>>>>>>
>>>>>>>>>>               
>>>>>>>>>>       
>>>>>>>>>
>>>>>>       
>>>>>>
>>>>>>>>>>>>>>>>>> > > >> This is hereby declared to be ws-tx Issue 007.
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> Please follow-up to this message or ensure the 
>>>>>>>>>>>>>>>>>> subject line starts
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>                   
>>>>>>>>>>>>         
>>>>>>>>>>>
>>>>>>>         
>>>>>>>
>>>>>>>>>>>> > > Issue
>>>>>>>>>>>
>>>>>>>>           
>>>>>>>>     
>>>>>>>
>>>>>     
>>>>>
>>>>>>>>>>>>>>>>>> > > >> 007 - (ignoring Re:, [ws-tx] etc)
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> The Related Issues list has been updated to 
>>>>>>>>>>>>>>>>>> show the issue numbers.
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> Issue name -- WS-C: Make 
>>>>>>>>>>>>>>>>>> Register/RegisterResponse retriable
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> Owner:  Alastair Green 
>>>>>>>>>>>>>>>>>> [mailto:alastair.green@choreology.com]
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> Target document and draft:
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> Protocol:  Coord
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> Artifact:  spec
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> Draft: Coord spec working draft uploaded 
>>>>>>>>>>>>>>>>>> 2005-12-02
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> Link to the document referenced:
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>                   
>>>>>>>>>>>>         
>>>>>>>>>>>
>>>>>>>         
>>>>>>>
>>>>>>>>>>>> > > 
>>>>>>>>>>>
>>>>>>>>           
>>>>>>>>     
>>>>>>>
>>>>>     
>>>>>
>>>>>> http://www.oasis-open.org/committees/download.php/15738/WS-Coordination- 
>>>>>>
>>>>>
>>>>   
>>>>  
>>>>
>>>  
>>>
>>>>>>>>>>>>>>>>>> > > >> 2005-11-22.pdf
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> Section and PDF line number:
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> WS-Coordination spec, Section 3.2 
>>>>>>>>>>>>>>>>>> "Registration Service" l. 294
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> Issue type: Design
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> Related issues:
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> Issue 008 - WS-C: Remove fault 4.6 
>>>>>>>>>>>>>>>>>> AlreadyRegistered
>>>>>>>>>>>>>>>>>> > > >> Issue 014 - WS-C: EPR equality comparison is 
>>>>>>>>>>>>>>>>>> problematic Issue 
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>                   
>>>>>>>>>>>>         
>>>>>>>>>>>
>>>>>>>         
>>>>>>
>>>>>> 009 -
>>>>>
>>>>   
>>>>  
>>>>
>>>  
>>>
>>>>>>>>>>>>>>>>>> > > >> WS-C/WS-AT: Is request-reply MEP useful?
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> Issue Description:
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> Register/RegisterResponse should be retriable 
>>>>>>>>>>>>>>>>>> exchange
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> Issue Details:
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> [This issue stems from Choreology Contribution 
>>>>>>>>>>>>>>>>>> issue TX-20.]
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> Section 9 of WS-AT defines the WS-Coordination 
>>>>>>>>>>>>>>>>>> exchanges
>>>>>>>>>>>>>>>>>> > > >>  > > >>     
>>>>>>>>>>>>>>>>>> CreateCoordinationContext/CreateCoordinationContextResponse 
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> > > >>     Register/RegisterResponse
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> as request-reply exchanges.
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> (Whether this request reply MEP should be used 
>>>>>>>>>>>>>>>>>> at all in the WS-TX
>>>>>>>>>>>>>>>>>> > > >> specs is addressed in a separate issue: see  
>>>>>>>>>>>>>>>>>> "Issue 009 - 
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>                   
>>>>>>>>>>>>         
>>>>>>>>>>>
>>>>>>>         
>>>>>>
>>>>>> WS-C/WS-AT:
>>>>>
>>>>   
>>>>  
>>>>
>>>  
>>>
>>>>>>>>>>>>>>>>>> > > >> Is request-reply MEP
>>>>>>>>>>>>>>>>>> > > >> useful?".)
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> Substantively, it may be particularly 
>>>>>>>>>>>>>>>>>> misleading to think of the
>>>>>>>>>>>>>>>>>> > > >> Register/RegisterResponse
>>>>>>>>>>>>>>>>>> > > >> exchange as a request-reply pattern. The 
>>>>>>>>>>>>>>>>>> implication of using this
>>>>>>>>>>>>>>>>>> > > >> pattern is that there is a simple one message 
>>>>>>>>>>>>>>>>>> in, one message out
>>>>>>>>>>>>>>>>>> > > >> exchange. The presence of a fault
>>>>>>>>>>>>>>>>>> > > >> (AlreadyRegistered) as a potential response to 
>>>>>>>>>>>>>>>>>> Register hardens
>>>>>>>>>>>>>>>>>> > > >> that implication.
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> Current behaviour would lead to service being 
>>>>>>>>>>>>>>>>>> informed it has 
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>                   
>>>>>>>>>>>>         
>>>>>>>>>>>
>>>>>>>         
>>>>>>
>>>>>> already
>>>>>
>>>>   
>>>>  
>>>>
>>>  
>>>
>>>>>>>>>>>>>>>>>> > > >> registered a
>>>>>>>>>>>>>>>>>> > > >> Participant, when it has in fact simply 
>>>>>>>>>>>>>>>>>> succeeded in registering a
>>>>>>>>>>>>>>>>>> > > >> Participant. Superficially, the
>>>>>>>>>>>>>>>>>> > > >> AlreadyRegistered fault could simply be
>>>>>>>>>>>>>>>>>> > > >> viewed as being unnecessarily verbose: the 
>>>>>>>>>>>>>>>>>> reaction of the 
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>                   
>>>>>>>>>>>>         
>>>>>>>>>>>
>>>>>>>         
>>>>>>
>>>>>> service to
>>>>>
>>>>   
>>>>  
>>>>
>>>  
>>>
>>>>>>>>>>>>>>>>>> > > >> the fault at run-time must be to treat
>>>>>>>>>>>>>>>>>> > > >> it as uninteresting, i.e. as equal in effect 
>>>>>>>>>>>>>>>>>> to a successful
>>>>>>>>>>>>>>>>>> > > >> registration.
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> In fact there is a deeper problem. Consider 
>>>>>>>>>>>>>>>>>> the following scenario:
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> A Coordination Service (CS) creates a 
>>>>>>>>>>>>>>>>>> Coordinator (C) for a new
>>>>>>>>>>>>>>>>>> > > >> atomic transaction (AT), and emits a 
>>>>>>>>>>>>>>>>>> CoordinationContext (CC).
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> The CC is transmitted to an application 
>>>>>>>>>>>>>>>>>> service (AS). AS 
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>                   
>>>>>>>>>>>>         
>>>>>>>>>>>
>>>>>>>         
>>>>>>
>>>>>> (logically)
>>>>>
>>>>   
>>>>  
>>>>
>>>  
>>>
>>>>>>>>>>>>>>>>>> > > >> creates a P which sends Register (R) to the 
>>>>>>>>>>>>>>>>>> Registration 
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>                   
>>>>>>>>>>>>         
>>>>>>>>>>>
>>>>>>>         
>>>>>>
>>>>>> Service (RS)
>>>>>
>>>>   
>>>>  
>>>>
>>>  
>>>
>>>>>>>>>>>>>>>>>> > > >> EPR for AT, embedding the EPR for receipt
>>>>>>>>>>>>>>>>>> > > >> of protocol messages outbound from C to P (CP 
>>>>>>>>>>>>>>>>>> EPR).
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> The RS, on receiving Register, creates an EPR 
>>>>>>>>>>>>>>>>>> for inbound protocol
>>>>>>>>>>>>>>>>>> > > >> messages from P to C (PC EPR), and embeds this 
>>>>>>>>>>>>>>>>>> in the
>>>>>>>>>>>>>>>>>> > > >> RegisterResponse (RR), which it sends to P.
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> AS and P crash before the RR message is 
>>>>>>>>>>>>>>>>>> received by P, or the RR
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>                   
>>>>>>>>>>>>         
>>>>>>>>>>>
>>>>>>>         
>>>>>>>
>>>>>>>>>>>> > > message
>>>>>>>>>>>
>>>>>>>>           
>>>>>>>>     
>>>>>>>
>>>>>     
>>>>>
>>>>>>>>>>>>>>>>>> > > >> drops and is never received by P. Either way, 
>>>>>>>>>>>>>>>>>> AS (on recovery, 
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>                   
>>>>>>>>>>>>         
>>>>>>>>>>>
>>>>>>>         
>>>>>>
>>>>>> or after
>>>>>
>>>>   
>>>>  
>>>>
>>>  
>>>
>>>>>>>>>>>>>>>>>> > > >> waiting) causes P to resends R to RS. RS 
>>>>>>>>>>>>>>>>>> examines the inbound 
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>                   
>>>>>>>>>>>>         
>>>>>>>>>>>
>>>>>>>         
>>>>>>
>>>>>> Register,
>>>>>
>>>>   
>>>>  
>>>>
>>>  
>>>
>>>>>>>>>>>>>>>>>> > > >> and determines that it has come from a known P 
>>>>>>>>>>>>>>>>>> (see "Related 
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>                   
>>>>>>>>>>>>         
>>>>>>>>>>>
>>>>>>>         
>>>>>>
>>>>>> Issues",
>>>>>
>>>>   
>>>>  
>>>>
>>>  
>>>
>>>>>>>>>>>>>>>>>> > > >> "WS-C: EPR equality comparison should
>>>>>>>>>>>>>>>>>> > > >> not be relied upon"), i.e. that it is a 
>>>>>>>>>>>>>>>>>> duplicate registration.
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> Currently, RS replies with an 
>>>>>>>>>>>>>>>>>> AlreadyRegistered fault, sent to P. P
>>>>>>>>>>>>>>>>>> > > >> now knows that he is registered with C, but 
>>>>>>>>>>>>>>>>>> has never received 
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>                   
>>>>>>>>>>>>         
>>>>>>>>>>>
>>>>>>>         
>>>>>>
>>>>>> the PC
>>>>>
>>>>   
>>>>  
>>>>
>>>  
>>>
>>>>>>>>>>>>>>>>>> > > >> EPR 
>>>>>>>>>>>>>>>>>> (/RegisterResponse/CoordinationProtocolService 
>>>>>>>>>>>>>>>>>> element). Any
>>>>>>>>>>>>>>>>>> > > >> further retries of P send R to C will result 
>>>>>>>>>>>>>>>>>> in the same situation.
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> C will never be able to receive messages from 
>>>>>>>>>>>>>>>>>> P. P will never 
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>                   
>>>>>>>>>>>>         
>>>>>>>>>>>
>>>>>>>         
>>>>>>
>>>>>> become
>>>>>
>>>>   
>>>>  
>>>>
>>>  
>>>
>>>>>>>>>>>>>>>>>> > > >> Prepared. The transaction will eventually 
>>>>>>>>>>>>>>>>>> collapse through timeout.
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> Therefore, the Register/RegisterResponse 
>>>>>>>>>>>>>>>>>> exchange must tolerate
>>>>>>>>>>>>>>>>>> > > >> duplicates. If a Register message is delivered 
>>>>>>>>>>>>>>>>>> more than once 
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>                   
>>>>>>>>>>>>         
>>>>>>>>>>>
>>>>>>>         
>>>>>>
>>>>>> (either
>>>>>
>>>>   
>>>>  
>>>>
>>>  
>>>
>>>>>>>>>>>>>>>>>> > > >> by the transport, or through comms-failure- or 
>>>>>>>>>>>>>>>>>> recovery-induced
>>>>>>>>>>>>>>>>>> > > >> retry) then the Registration Service should 
>>>>>>>>>>>>>>>>>> respond on each 
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>                   
>>>>>>>>>>>>         
>>>>>>>>>>>
>>>>>>>         
>>>>>>
>>>>>> occasion
>>>>>
>>>>   
>>>>  
>>>>
>>>  
>>>
>>>>>>>>>>>>>>>>>> > > >> with a RegisterResponse containing the same PC 
>>>>>>>>>>>>>>>>>> EPR, to ensure
>>>>>>>>>>>>>>>>>> > > >> reliable completion of the EPR exchange that 
>>>>>>>>>>>>>>>>>> permits the subsequent
>>>>>>>>>>>>>>>>>> > > >> coordination protocol to operate correctly.
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> NOTE.
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> This change brings the R/RR exchange in line 
>>>>>>>>>>>>>>>>>> with the behaviour of
>>>>>>>>>>>>>>>>>> > > >> the CreateCoordinationContext/...Response
>>>>>>>>>>>>>>>>>> > > >> exchange. There is a difference. R/RR is 
>>>>>>>>>>>>>>>>>> likely to be 
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>                   
>>>>>>>>>>>>         
>>>>>>>>>>>
>>>>>>>         
>>>>>>
>>>>>> implemented as
>>>>>
>>>>   
>>>>  
>>>>
>>>  
>>>
>>>>>>>>>>>>>>>>>> > > >> a true idempotent operation. CCC/CCCR is
>>>>>>>>>>>>>>>>>> > > >> not: each CCCR embeds a new RS EPR, and a new 
>>>>>>>>>>>>>>>>>> /Context/Identifier.
>>>>>>>>>>>>>>>>>> > > >> But each exchange can be harmlessly
>>>>>>>>>>>>>>>>>> > > >> replayed indefinitely, in the event of failure 
>>>>>>>>>>>>>>>>>> to receive the
>>>>>>>>>>>>>>>>>> > > >> response message.
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> Proposed Resolution:
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> Insert the following text in WS-Coordination 
>>>>>>>>>>>>>>>>>> spec, Section 3.2
>>>>>>>>>>>>>>>>>> > > >> "Registration Service" immediately following 
>>>>>>>>>>>>>>>>>> current l. 294
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >> "[New paragraph]The requester MAY send a 
>>>>>>>>>>>>>>>>>> Register message for a 
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>                   
>>>>>>>>>>>>         
>>>>>>>>>>>
>>>>>>>         
>>>>>>
>>>>>> given
>>>>>
>>>>   
>>>>  
>>>>
>>>  
>>>
>>>>>>>>>>>>>>>>>> > > >> Participant more than once, and the underlying 
>>>>>>>>>>>>>>>>>> transport could
>>>>>>>>>>>>>>>>>> > > >> deliver the Register message more than once.
>>>>>>>>>>>>>>>>>> > > >> On receipt of a Register message for a
>>>>>>>>>>>>>>>>>> > > >> given Participant, which has already been 
>>>>>>>>>>>>>>>>>> processed 
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>                   
>>>>>>>>>>>>         
>>>>>>>>>>>
>>>>>>>         
>>>>>>
>>>>>> succesfully, the
>>>>>
>>>>   
>>>>  
>>>>
>>>  
>>>
>>>>>>>>>>>>>>>>>> > > >> Registration Service MUST send to the
>>>>>>>>>>>>>>>>>> > > >> requester a RegisterResponse containing the same
>>>>>>>>>>>>>>>>>> > > >> CoordinationProtocolService element (Endpoint 
>>>>>>>>>>>>>>>>>> Reference for
>>>>>>>>>>>>>>>>>> > > >> Participant to Coordinator protocol messages) 
>>>>>>>>>>>>>>>>>> as that contained in
>>>>>>>>>>>>>>>>>> > > >> all previous RegisterResponses generated by
>>>>>>>>>>>>>>>>>> > > >> the Registration Service which relate to the 
>>>>>>>>>>>>>>>>>> Participant's 
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>                   
>>>>>>>>>>>>         
>>>>>>>>>>>
>>>>>>>         
>>>>>>
>>>>>> request to
>>>>>
>>>>   
>>>>  
>>>>
>>>  
>>>
>>>>>>>>>>>>>>>>>> > > >> register for this activity.
>>>>>>>>>>>>>>>>>> > > >> [New paragraph]"
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >>
>>>>>>>>>>>>>>>>>> > > >>  > > >>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>                   
>>>>>>>>>>>>         
>>>>>>>>>>>
>>>>>>>         
>>>>>>>
>>>>>>>>>>>>>>> > > >
>>>>>>>>>>>>>>
>>>>>>>>>>               
>>>>>>>>>>       
>>>>>>>>>
>>>>>>       
>>>>>>
>>>>>>>>>>>> > >
>>>>>>>>>>>
>>>>>>>>           
>>>>>>>>      
>>>>>>>
>>>>>     
>>>>
>>
>>


[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]