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



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]