If the Service C is called from Service B, we can find it out from the
parentTxID.
But if the Service C and Service B are called by ServiceA, we cannot
guarantee the order in current solution.

May be we can introduce the hop id which could be increased once the
invocation is called to let the Alpha know the calling order.

Any though?


Willem Jiang

Twitter: willemjiang
Weibo: 姜宁willem

On Wed, Aug 1, 2018 at 9:58 PM, Zheng Feng <[email protected]> wrote:

> I think we are talking about the order of the compensations. By checking
> the codes of EventScanner.java, it seems that it calls the compensate
> method with the omegaCallback by the order of the commands saving in the
> database. So I think in the situation of
> -------------------------------------
> | B Start | A Start | A End | B End | Aborted
> -------------------------------------
>
> The Compensate B will happen before the Compensate A and we can
> not guarantee the order of the compensations as we expect A before B.
>
> Amos
>
> 2018-08-01 21:30 GMT+08:00 Willem Jiang <[email protected]>:
>
> > Hi,
> >
> > You just bring up an very interesting topic here.
> > Once Alpha get the Aborted event,  it means it should call the
> compensation
> > method of all the succeed method.
> > When the EventScanner check the event, it will find out all the succeed
> > events (with the start and end events), even the events are not in the
> > right order.
> >
> >
> > Willem Jiang
> >
> > Twitter: willemjiang
> > Weibo: 姜宁willem
> >
> > On Wed, Aug 1, 2018 at 6:46 PM, 黎 先生 <[email protected]> wrote:
> >
> > > Suppose there are two processes A and B. A process calls an interface
> > > provided by B. When the TxAbortEvent is thrown, the compensation of B
> > > (CompB) is supposed to be executed prior to the compensation of
> A(CompB).
> > >
> > > ------------      ------------
> > > |   Alpha  |      |   Omega  |
> > > ------------  <-  ------------
> > > |          |       |Process B |
> > > ------------      ------------
> > >      ^                  ^
> > >      |                  |
> > > ------------            | call
> > > |   Omega  |            |
> > > ------------    ---------
> > > |Process A |
> > > ------------
> > >
> > > At alpha, the tracing queue is expected to be
> > >
> > > Expected
> > > -------------------------------------
> > > | A Start | A End | B Start | B End | Aborted
> > > -------------------------------------
> > >
> > > For some reason(e.g. network problem), however, the actual tracing
> queue
> > > looks like this.
> > >
> > > Actual:
> > > -------------------------------------
> > > | B Start | A Start | A End | B End | Aborted
> > > -------------------------------------
> > >
> > > In such situation, is CompA executed prior to CompB?
> > >
> > >
> >
>

Reply via email to