This issue has been added to the wsbpel issue list with a status
The status will be changed to "open" if a motion to open the issue is
proposed and that
motion is approved by the TC. A motion could also be proposed to close
further consideration. Otherwise it will remain as "received".
The issues list is posted as a Technical Committee document to
WSBPEL TC pages
on a regular basis. The current edition, as a TC document, is the most
recent version of the document entitled in the "Issues" folder of the WSBPEL
TC document list
- the next posting as a TC document will include this issue.
The list editor's working copy, which will normally include an issue
when it is announced, is available at this
Issue - R26 - Default Compensation Order Conflict
Date added: 30 Oct 2006
Date submitted: 27 October 2006
Description: Consider the following hierarchy of scopes. In
example, none of the scopes is isolated, all scopes only have default
fault handlers and default termination handlers, and scopes "A" and "B"
have custom compensation handlers.
Assume a point in time where scopes "A" and "B" and "S2" have completed
successfully, and scope "S1" and activity "E" are still running.
Further assume that activity "E" now throws a fault which is
the default fault handler of scope "S0".
- All running activities inside of scope "S0" are terminated,
the default termination handler of scope "S1" compensates scope "A".
- The default fault handler of scope "S0" then compensates
"S2", which in turn compensates scope "B".
The observed compensation order "A then B" is caused by the
"first termination, then fault handling". OTOH, the required
compensation order "B then A" implied by the control dependency of "B"
This is a contradiction.
Note that this situation cannot occur when the scope "S1" is an
scope. In this case, the link "fromAtoB" cannot leave the scope "S1"
before it completes. In this case, scope "S1" always completes before
scope "S2", and compensation of "A" cannot be caused by a termination
handler before scope "B" is compensated.
Moreover, this conflict is irrelevant if scope "S1" OR scope
contain default compensation handlers, because in this case, no custom
compensation logic can be executed in the wrong order.
Submitter's proposal: In order to avoid conflicts between
termination-handling / fault-handling sequence and the default
compensation order, different strategies can be considered, for
enforcing the absence of such conflicts during static analysis. A less
restrictive approach is proposed here, which only affects the runtime
At the end of section 12.5.2, add the following paragraph:
"The default compensation order is initiated by default
handlers and default fault handlers, and recursively carried forward by
compensation handlers. The termination phase always precedes the fault
handling phase (see section 12.6. Termination Handlers). This sequence
must not create a conflict with the default compensation order of
that are in a control dependency relationship. If all of the following
- scope "S2" has a direct peer-scope dependency on scope "S1"
- the scope-controlled set of activities of scope "S1"
default termination handlers
- the scope-controlled set of activities of scope "S1" AND
"S2" both contain at least one custom compensation handler then a
WS-BPEL processor MUST execute these scopes as if "S2" had a control
dependency on scope "S1".
Changes: 30 Oct 2006 - new issue
To comment on this issue (including whether it should be
accepted), please follow-up to this announcement on the
list (replying to this message should
automatically send your message to that list), or ensure
the subject line as you send it starts "Issue - R26 -
[anything]" or is a reply
to such a message. If you want to formally propose a resolution to an
open issue, please start the subject line "Issue - R26 - Proposed
resolution", without any Re: or similar.
To add a new issue, see the issues procedures document