Re: Discuss for integrate with saga and sharding-sphere

2018-06-06 Thread Zheng Feng
OK, I'm very interesting with the revert SQL generation and keep me update
please.

2018-06-07 11:19 GMT+08:00 Willem Jiang :

> I guess the revert SQL work in just on the roadmap.
> But shading-sphere can analyze the SQL do the shading work.
>
>
> Willem Jiang
>
> Twitter: willemjiang
> Weibo: 姜宁willem
>
> On Thu, Jun 7, 2018 at 11:11 AM, Zheng Feng  wrote:
>
> > Can you point out to me the codes related to the SQL convert in the
> > sharding-sphere ?
> >
> > 2018-06-07 8:10 GMT+08:00 Willem Jiang :
> >
> > > Hi,
> > >
> > > Current Saga implementation cannot  guarantee the data isolation. I
> guess
> > > we need to leverage the DB to provide the version of data,  and revert
> it
> > > to the states before the transaction.
> > >
> > > Maybe we need hold T2 before the T1 is finished, otherwise it really
> hard
> > > to tell if the original states is x=1 or x=0.
> > >
> > > It's kind of trade off,  If we want to strong consistent we have to use
> > > lock to do it, otherwise we need do introduce the semantic lock from
> the
> > > application such as the credit limits.
> > >
> > > Let's keep up the discussion and try to find a good way to solve the
> > > distribution transaction problems.
> > >
> > >
> > >
> > > Willem Jiang
> > >
> > > Twitter: willemjiang
> > > Weibo: 姜宁willem
> > >
> > > On Thu, Jun 7, 2018 at 12:33 AM, Zheng Feng  wrote:
> > >
> > > > Hi Zhang Liang,
> > > >
> > > > It could be great to integrate the saga and the sharding-sphere. I'm
> > > trying
> > > > to understand the SQL convert and the data snapshot.
> > > > So I suppose that we have the simple data set just like {id = 1, x =
> 0}
> > > and
> > > > we have the updateX service to update the X
> > > >
> > > > func updateX ( int x, int i ) {
> > > > executeSQL("UPDATE x = $x WHERE id = $i", x, i);
> > > > }
> > > >
> > > > T1: T2:
> > > > saga_start();  saga_start();
> > > > updateX(1, 1);updateX(2, 1);
> > > > call_other_service();   call_other_service();
> > > > saga_end();saga_end();
> > > >
> > > > So after the T1 runs, the snapshot data should be {id = 1, x = 1} and
> > the
> > > > convertSQL should be "UPDATE x = 0 WHERE id = 1", is it right ?
> > > > Now we have the other T2 to run after T1, the snapshot data should be
> > > {id =
> > > > 1, x = 2} and convertSQL should be "UPDATE x= 1 WHERE id = 1" ?
> > > >
> > > > If the Alpha (Saga coordinator) decides to compensate the T1 when the
> > > > call_other_service() throws exception, will we call the converSQL to
> > set
> > > x
> > > > = 0 ?
> > > >
> > > > Thanks,
> > > > Zheng Feng
> > > >
> > > > 2018-06-06 15:51 GMT+08:00 Liang Zhang :
> > > >
> > > > > Hi Willem Jiang,
> > > > >
> > > > > I fully agree to keep Omega as simple as possible.
> > > > >
> > > > > Sharding-Sphere can ask transaction id from Saga, then save SQL and
> > > > > snapshot into Sharding-Sphere local db. Saga just as a transaction
> > > engine
> > > > > to determine and notify Sharding-Sphere when to forward(retry) and
> > > > > backward(compensate).
> > > > >
> > > > > Best regrads,
> > > > >
> > > > > Zhang Liang
> > > > >
> > > > >
> > > > > On 2018/06/06 06:50:31, Willem Jiang 
> wrote:
> > > > > > Hi Zhangliang,
> > > > > >
> > > > > > It's great that you are interesting about the Saga project.
> > > > > > Please check out my comments in line.
> > > > > >
> > > > > >
> > > > > > Willem Jiang
> > > > > >
> > > > > > Twitter: willemjiang
> > > > > > Weibo: 姜宁willem
> > > > > >
> > > > > > On Wed, Jun 6, 2018 at 12:21 PM, zhangli...@apache.org <
> > > > > > zhangli...@apache.org> wrote:
> > > > > >
> > > > > > > Hello servicecomb devs,
> > > > > > >
> > > > > > > I want discuss for how to integrate with saga and
> > sharding-sphere.
> > > > > > >
> > > > > > > 1. Split saga as service scope and RDB scope. Service scope
> still
> > > use
> > > > > > > annotation to associate compensation method, RDB scope can
> > generate
> > > > > > > reverted SQL and data snapshot automatically. Alpha can use
> > revert
> > > > SQL
> > > > > and
> > > > > > > previous data snapshot to compensate automatically, do not need
> > end
> > > > > users
> > > > > > > provide additional cancel method.
> > > > > > >
> > > > > >
> > > > > > Current Saga doesn't touch the DB layer,  I think we need to do
> > some
> > > > work
> > > > > > on the Omega.
> > > > > > Maybe we need to add a common layer handle the common co-ordinate
> > > > events,
> > > > > > and sharding-sphere
> > > > > >  could do some implementation on the data layer. In this way
> > > > > > sharding-sphere could reuse the transaction
> > > > > > co-ordinate feature here.
> > > > > >
> > > > > > BTW, for other who don't know sharding-sphere,  you may check out
> > the
> > > > > > github project[1] here.
> > > > > >
> > > > > > [1] https://github.com/sharding-sphere/sharding-sphere
> > > > > >
> > > > > > >
> > > > > > > 2. Sharding-Sphere can generate reverted SQL and data

Re: Discuss for integrate with saga and sharding-sphere

2018-06-06 Thread Willem Jiang
I guess the revert SQL work in just on the roadmap.
But shading-sphere can analyze the SQL do the shading work.


Willem Jiang

Twitter: willemjiang
Weibo: 姜宁willem

On Thu, Jun 7, 2018 at 11:11 AM, Zheng Feng  wrote:

> Can you point out to me the codes related to the SQL convert in the
> sharding-sphere ?
>
> 2018-06-07 8:10 GMT+08:00 Willem Jiang :
>
> > Hi,
> >
> > Current Saga implementation cannot  guarantee the data isolation. I guess
> > we need to leverage the DB to provide the version of data,  and revert it
> > to the states before the transaction.
> >
> > Maybe we need hold T2 before the T1 is finished, otherwise it really hard
> > to tell if the original states is x=1 or x=0.
> >
> > It's kind of trade off,  If we want to strong consistent we have to use
> > lock to do it, otherwise we need do introduce the semantic lock from the
> > application such as the credit limits.
> >
> > Let's keep up the discussion and try to find a good way to solve the
> > distribution transaction problems.
> >
> >
> >
> > Willem Jiang
> >
> > Twitter: willemjiang
> > Weibo: 姜宁willem
> >
> > On Thu, Jun 7, 2018 at 12:33 AM, Zheng Feng  wrote:
> >
> > > Hi Zhang Liang,
> > >
> > > It could be great to integrate the saga and the sharding-sphere. I'm
> > trying
> > > to understand the SQL convert and the data snapshot.
> > > So I suppose that we have the simple data set just like {id = 1, x = 0}
> > and
> > > we have the updateX service to update the X
> > >
> > > func updateX ( int x, int i ) {
> > > executeSQL("UPDATE x = $x WHERE id = $i", x, i);
> > > }
> > >
> > > T1: T2:
> > > saga_start();  saga_start();
> > > updateX(1, 1);updateX(2, 1);
> > > call_other_service();   call_other_service();
> > > saga_end();saga_end();
> > >
> > > So after the T1 runs, the snapshot data should be {id = 1, x = 1} and
> the
> > > convertSQL should be "UPDATE x = 0 WHERE id = 1", is it right ?
> > > Now we have the other T2 to run after T1, the snapshot data should be
> > {id =
> > > 1, x = 2} and convertSQL should be "UPDATE x= 1 WHERE id = 1" ?
> > >
> > > If the Alpha (Saga coordinator) decides to compensate the T1 when the
> > > call_other_service() throws exception, will we call the converSQL to
> set
> > x
> > > = 0 ?
> > >
> > > Thanks,
> > > Zheng Feng
> > >
> > > 2018-06-06 15:51 GMT+08:00 Liang Zhang :
> > >
> > > > Hi Willem Jiang,
> > > >
> > > > I fully agree to keep Omega as simple as possible.
> > > >
> > > > Sharding-Sphere can ask transaction id from Saga, then save SQL and
> > > > snapshot into Sharding-Sphere local db. Saga just as a transaction
> > engine
> > > > to determine and notify Sharding-Sphere when to forward(retry) and
> > > > backward(compensate).
> > > >
> > > > Best regrads,
> > > >
> > > > Zhang Liang
> > > >
> > > >
> > > > On 2018/06/06 06:50:31, Willem Jiang  wrote:
> > > > > Hi Zhangliang,
> > > > >
> > > > > It's great that you are interesting about the Saga project.
> > > > > Please check out my comments in line.
> > > > >
> > > > >
> > > > > Willem Jiang
> > > > >
> > > > > Twitter: willemjiang
> > > > > Weibo: 姜宁willem
> > > > >
> > > > > On Wed, Jun 6, 2018 at 12:21 PM, zhangli...@apache.org <
> > > > > zhangli...@apache.org> wrote:
> > > > >
> > > > > > Hello servicecomb devs,
> > > > > >
> > > > > > I want discuss for how to integrate with saga and
> sharding-sphere.
> > > > > >
> > > > > > 1. Split saga as service scope and RDB scope. Service scope still
> > use
> > > > > > annotation to associate compensation method, RDB scope can
> generate
> > > > > > reverted SQL and data snapshot automatically. Alpha can use
> revert
> > > SQL
> > > > and
> > > > > > previous data snapshot to compensate automatically, do not need
> end
> > > > users
> > > > > > provide additional cancel method.
> > > > > >
> > > > >
> > > > > Current Saga doesn't touch the DB layer,  I think we need to do
> some
> > > work
> > > > > on the Omega.
> > > > > Maybe we need to add a common layer handle the common co-ordinate
> > > events,
> > > > > and sharding-sphere
> > > > >  could do some implementation on the data layer. In this way
> > > > > sharding-sphere could reuse the transaction
> > > > > co-ordinate feature here.
> > > > >
> > > > > BTW, for other who don't know sharding-sphere,  you may check out
> the
> > > > > github project[1] here.
> > > > >
> > > > > [1] https://github.com/sharding-sphere/sharding-sphere
> > > > >
> > > > > >
> > > > > > 2. Sharding-Sphere can generate reverted SQL and data snapshot:
> > > > > > INSERT SQL will revert to DELETE SQL with primary key and
> sharding
> > > key.
> > > > > > UPDATE/DELETE SQL will generate SELECT SQL and save data snapshot
> > > > first,
> > > > > > and then use UPDATE OR INSERT to compensate data.
> > > > > > Saga may need to change data structure for receive SQL and data
> > > > snapshot,
> > > > > > maybe use json format to save on payload field is a good idea.
>

Re: Discuss for integrate with saga and sharding-sphere

2018-06-06 Thread Zheng Feng
Can you point out to me the codes related to the SQL convert in the
sharding-sphere ?

2018-06-07 8:10 GMT+08:00 Willem Jiang :

> Hi,
>
> Current Saga implementation cannot  guarantee the data isolation. I guess
> we need to leverage the DB to provide the version of data,  and revert it
> to the states before the transaction.
>
> Maybe we need hold T2 before the T1 is finished, otherwise it really hard
> to tell if the original states is x=1 or x=0.
>
> It's kind of trade off,  If we want to strong consistent we have to use
> lock to do it, otherwise we need do introduce the semantic lock from the
> application such as the credit limits.
>
> Let's keep up the discussion and try to find a good way to solve the
> distribution transaction problems.
>
>
>
> Willem Jiang
>
> Twitter: willemjiang
> Weibo: 姜宁willem
>
> On Thu, Jun 7, 2018 at 12:33 AM, Zheng Feng  wrote:
>
> > Hi Zhang Liang,
> >
> > It could be great to integrate the saga and the sharding-sphere. I'm
> trying
> > to understand the SQL convert and the data snapshot.
> > So I suppose that we have the simple data set just like {id = 1, x = 0}
> and
> > we have the updateX service to update the X
> >
> > func updateX ( int x, int i ) {
> > executeSQL("UPDATE x = $x WHERE id = $i", x, i);
> > }
> >
> > T1: T2:
> > saga_start();  saga_start();
> > updateX(1, 1);updateX(2, 1);
> > call_other_service();   call_other_service();
> > saga_end();saga_end();
> >
> > So after the T1 runs, the snapshot data should be {id = 1, x = 1} and the
> > convertSQL should be "UPDATE x = 0 WHERE id = 1", is it right ?
> > Now we have the other T2 to run after T1, the snapshot data should be
> {id =
> > 1, x = 2} and convertSQL should be "UPDATE x= 1 WHERE id = 1" ?
> >
> > If the Alpha (Saga coordinator) decides to compensate the T1 when the
> > call_other_service() throws exception, will we call the converSQL to set
> x
> > = 0 ?
> >
> > Thanks,
> > Zheng Feng
> >
> > 2018-06-06 15:51 GMT+08:00 Liang Zhang :
> >
> > > Hi Willem Jiang,
> > >
> > > I fully agree to keep Omega as simple as possible.
> > >
> > > Sharding-Sphere can ask transaction id from Saga, then save SQL and
> > > snapshot into Sharding-Sphere local db. Saga just as a transaction
> engine
> > > to determine and notify Sharding-Sphere when to forward(retry) and
> > > backward(compensate).
> > >
> > > Best regrads,
> > >
> > > Zhang Liang
> > >
> > >
> > > On 2018/06/06 06:50:31, Willem Jiang  wrote:
> > > > Hi Zhangliang,
> > > >
> > > > It's great that you are interesting about the Saga project.
> > > > Please check out my comments in line.
> > > >
> > > >
> > > > Willem Jiang
> > > >
> > > > Twitter: willemjiang
> > > > Weibo: 姜宁willem
> > > >
> > > > On Wed, Jun 6, 2018 at 12:21 PM, zhangli...@apache.org <
> > > > zhangli...@apache.org> wrote:
> > > >
> > > > > Hello servicecomb devs,
> > > > >
> > > > > I want discuss for how to integrate with saga and sharding-sphere.
> > > > >
> > > > > 1. Split saga as service scope and RDB scope. Service scope still
> use
> > > > > annotation to associate compensation method, RDB scope can generate
> > > > > reverted SQL and data snapshot automatically. Alpha can use revert
> > SQL
> > > and
> > > > > previous data snapshot to compensate automatically, do not need end
> > > users
> > > > > provide additional cancel method.
> > > > >
> > > >
> > > > Current Saga doesn't touch the DB layer,  I think we need to do some
> > work
> > > > on the Omega.
> > > > Maybe we need to add a common layer handle the common co-ordinate
> > events,
> > > > and sharding-sphere
> > > >  could do some implementation on the data layer. In this way
> > > > sharding-sphere could reuse the transaction
> > > > co-ordinate feature here.
> > > >
> > > > BTW, for other who don't know sharding-sphere,  you may check out the
> > > > github project[1] here.
> > > >
> > > > [1] https://github.com/sharding-sphere/sharding-sphere
> > > >
> > > > >
> > > > > 2. Sharding-Sphere can generate reverted SQL and data snapshot:
> > > > > INSERT SQL will revert to DELETE SQL with primary key and sharding
> > key.
> > > > > UPDATE/DELETE SQL will generate SELECT SQL and save data snapshot
> > > first,
> > > > > and then use UPDATE OR INSERT to compensate data.
> > > > > Saga may need to change data structure for receive SQL and data
> > > snapshot,
> > > > > maybe use json format to save on payload field is a good idea.
> > > >
> > > >
> > > > I think we need to go through the events structure[2], but if the
> Omega
> > > > hold the reference,
> > > > Alpha just need to send the revert command to Omega.
> > > > If the Sharding-Sphere can store the SQL and revert SQL into the DB,
> > > >  I don't think Alpha need to know the SQL information.
> > > >
> > > > [2]
> > > > https://github.com/apache/incubator-servicecomb-saga/blob/
> > > ce71ab73ae80bc90ba59fe9b038f134fef9426b1/omega/omega-
> > > transaction/src/main/java/

Re: Discuss for integrate with saga and sharding-sphere

2018-06-06 Thread Willem Jiang
Hi,

Current Saga implementation cannot  guarantee the data isolation. I guess
we need to leverage the DB to provide the version of data,  and revert it
to the states before the transaction.

Maybe we need hold T2 before the T1 is finished, otherwise it really hard
to tell if the original states is x=1 or x=0.

It's kind of trade off,  If we want to strong consistent we have to use
lock to do it, otherwise we need do introduce the semantic lock from the
application such as the credit limits.

Let's keep up the discussion and try to find a good way to solve the
distribution transaction problems.



Willem Jiang

Twitter: willemjiang
Weibo: 姜宁willem

On Thu, Jun 7, 2018 at 12:33 AM, Zheng Feng  wrote:

> Hi Zhang Liang,
>
> It could be great to integrate the saga and the sharding-sphere. I'm trying
> to understand the SQL convert and the data snapshot.
> So I suppose that we have the simple data set just like {id = 1, x = 0} and
> we have the updateX service to update the X
>
> func updateX ( int x, int i ) {
> executeSQL("UPDATE x = $x WHERE id = $i", x, i);
> }
>
> T1: T2:
> saga_start();  saga_start();
> updateX(1, 1);updateX(2, 1);
> call_other_service();   call_other_service();
> saga_end();saga_end();
>
> So after the T1 runs, the snapshot data should be {id = 1, x = 1} and the
> convertSQL should be "UPDATE x = 0 WHERE id = 1", is it right ?
> Now we have the other T2 to run after T1, the snapshot data should be {id =
> 1, x = 2} and convertSQL should be "UPDATE x= 1 WHERE id = 1" ?
>
> If the Alpha (Saga coordinator) decides to compensate the T1 when the
> call_other_service() throws exception, will we call the converSQL to set x
> = 0 ?
>
> Thanks,
> Zheng Feng
>
> 2018-06-06 15:51 GMT+08:00 Liang Zhang :
>
> > Hi Willem Jiang,
> >
> > I fully agree to keep Omega as simple as possible.
> >
> > Sharding-Sphere can ask transaction id from Saga, then save SQL and
> > snapshot into Sharding-Sphere local db. Saga just as a transaction engine
> > to determine and notify Sharding-Sphere when to forward(retry) and
> > backward(compensate).
> >
> > Best regrads,
> >
> > Zhang Liang
> >
> >
> > On 2018/06/06 06:50:31, Willem Jiang  wrote:
> > > Hi Zhangliang,
> > >
> > > It's great that you are interesting about the Saga project.
> > > Please check out my comments in line.
> > >
> > >
> > > Willem Jiang
> > >
> > > Twitter: willemjiang
> > > Weibo: 姜宁willem
> > >
> > > On Wed, Jun 6, 2018 at 12:21 PM, zhangli...@apache.org <
> > > zhangli...@apache.org> wrote:
> > >
> > > > Hello servicecomb devs,
> > > >
> > > > I want discuss for how to integrate with saga and sharding-sphere.
> > > >
> > > > 1. Split saga as service scope and RDB scope. Service scope still use
> > > > annotation to associate compensation method, RDB scope can generate
> > > > reverted SQL and data snapshot automatically. Alpha can use revert
> SQL
> > and
> > > > previous data snapshot to compensate automatically, do not need end
> > users
> > > > provide additional cancel method.
> > > >
> > >
> > > Current Saga doesn't touch the DB layer,  I think we need to do some
> work
> > > on the Omega.
> > > Maybe we need to add a common layer handle the common co-ordinate
> events,
> > > and sharding-sphere
> > >  could do some implementation on the data layer. In this way
> > > sharding-sphere could reuse the transaction
> > > co-ordinate feature here.
> > >
> > > BTW, for other who don't know sharding-sphere,  you may check out the
> > > github project[1] here.
> > >
> > > [1] https://github.com/sharding-sphere/sharding-sphere
> > >
> > > >
> > > > 2. Sharding-Sphere can generate reverted SQL and data snapshot:
> > > > INSERT SQL will revert to DELETE SQL with primary key and sharding
> key.
> > > > UPDATE/DELETE SQL will generate SELECT SQL and save data snapshot
> > first,
> > > > and then use UPDATE OR INSERT to compensate data.
> > > > Saga may need to change data structure for receive SQL and data
> > snapshot,
> > > > maybe use json format to save on payload field is a good idea.
> > >
> > >
> > > I think we need to go through the events structure[2], but if the Omega
> > > hold the reference,
> > > Alpha just need to send the revert command to Omega.
> > > If the Sharding-Sphere can store the SQL and revert SQL into the DB,
> > >  I don't think Alpha need to know the SQL information.
> > >
> > > [2]
> > > https://github.com/apache/incubator-servicecomb-saga/blob/
> > ce71ab73ae80bc90ba59fe9b038f134fef9426b1/omega/omega-
> > transaction/src/main/java/org/apache/servicecomb/saga/omega/
> > transaction/TxEvent.java
> > >
> > >
> > > >
> > >
> > >
> > > > 3. Sharding-Sphere use guava's eventBus to post DML event.
> > Sharding-Sphere
> > > > plan to add 2 listeners, one is just save reverted SQL and snapshot,
> > other
> > > > is for send correct info to Omega.
> > > >
> > >
> > > I think we can keep Omega as simple as possible, maybe the event with
> 

Re: Discuss for integrate with saga and sharding-sphere

2018-06-06 Thread Zheng Feng
Hi Zhang Liang,

It could be great to integrate the saga and the sharding-sphere. I'm trying
to understand the SQL convert and the data snapshot.
So I suppose that we have the simple data set just like {id = 1, x = 0} and
we have the updateX service to update the X

func updateX ( int x, int i ) {
executeSQL("UPDATE x = $x WHERE id = $i", x, i);
}

T1: T2:
saga_start();  saga_start();
updateX(1, 1);updateX(2, 1);
call_other_service();   call_other_service();
saga_end();saga_end();

So after the T1 runs, the snapshot data should be {id = 1, x = 1} and the
convertSQL should be "UPDATE x = 0 WHERE id = 1", is it right ?
Now we have the other T2 to run after T1, the snapshot data should be {id =
1, x = 2} and convertSQL should be "UPDATE x= 1 WHERE id = 1" ?

If the Alpha (Saga coordinator) decides to compensate the T1 when the
call_other_service() throws exception, will we call the converSQL to set x
= 0 ?

Thanks,
Zheng Feng

2018-06-06 15:51 GMT+08:00 Liang Zhang :

> Hi Willem Jiang,
>
> I fully agree to keep Omega as simple as possible.
>
> Sharding-Sphere can ask transaction id from Saga, then save SQL and
> snapshot into Sharding-Sphere local db. Saga just as a transaction engine
> to determine and notify Sharding-Sphere when to forward(retry) and
> backward(compensate).
>
> Best regrads,
>
> Zhang Liang
>
>
> On 2018/06/06 06:50:31, Willem Jiang  wrote:
> > Hi Zhangliang,
> >
> > It's great that you are interesting about the Saga project.
> > Please check out my comments in line.
> >
> >
> > Willem Jiang
> >
> > Twitter: willemjiang
> > Weibo: 姜宁willem
> >
> > On Wed, Jun 6, 2018 at 12:21 PM, zhangli...@apache.org <
> > zhangli...@apache.org> wrote:
> >
> > > Hello servicecomb devs,
> > >
> > > I want discuss for how to integrate with saga and sharding-sphere.
> > >
> > > 1. Split saga as service scope and RDB scope. Service scope still use
> > > annotation to associate compensation method, RDB scope can generate
> > > reverted SQL and data snapshot automatically. Alpha can use revert SQL
> and
> > > previous data snapshot to compensate automatically, do not need end
> users
> > > provide additional cancel method.
> > >
> >
> > Current Saga doesn't touch the DB layer,  I think we need to do some work
> > on the Omega.
> > Maybe we need to add a common layer handle the common co-ordinate events,
> > and sharding-sphere
> >  could do some implementation on the data layer. In this way
> > sharding-sphere could reuse the transaction
> > co-ordinate feature here.
> >
> > BTW, for other who don't know sharding-sphere,  you may check out the
> > github project[1] here.
> >
> > [1] https://github.com/sharding-sphere/sharding-sphere
> >
> > >
> > > 2. Sharding-Sphere can generate reverted SQL and data snapshot:
> > > INSERT SQL will revert to DELETE SQL with primary key and sharding key.
> > > UPDATE/DELETE SQL will generate SELECT SQL and save data snapshot
> first,
> > > and then use UPDATE OR INSERT to compensate data.
> > > Saga may need to change data structure for receive SQL and data
> snapshot,
> > > maybe use json format to save on payload field is a good idea.
> >
> >
> > I think we need to go through the events structure[2], but if the Omega
> > hold the reference,
> > Alpha just need to send the revert command to Omega.
> > If the Sharding-Sphere can store the SQL and revert SQL into the DB,
> >  I don't think Alpha need to know the SQL information.
> >
> > [2]
> > https://github.com/apache/incubator-servicecomb-saga/blob/
> ce71ab73ae80bc90ba59fe9b038f134fef9426b1/omega/omega-
> transaction/src/main/java/org/apache/servicecomb/saga/omega/
> transaction/TxEvent.java
> >
> >
> > >
> >
> >
> > > 3. Sharding-Sphere use guava's eventBus to post DML event.
> Sharding-Sphere
> > > plan to add 2 listeners, one is just save reverted SQL and snapshot,
> other
> > > is for send correct info to Omega.
> > >
> >
> > I think we can keep Omega as simple as possible, maybe the event with
> > transaction id
> > could be enough.
> >
> >
> > >
> > > 4. For version of data modification, just guarantee by end user right
> now,
> > > in future we can consider about use additional version field or shadow
> > > table to handle it.
> > >
> >
> > This is the hardest part which bother me a lot. For the Saga service, we
> > cannot guarantee
> >  the data isolation. The user need to do some addition work on the
> > application layer to
> >  minimize the side effect.
> > Maybe we should spend some time to check the project omid[3]
> >
> > [3]https://github.com/apache/incubator-omid/
> >
> >
> >
> > >
> > > Best regards,
> > > Zhang Liang
> > >
> >
>


Re: Discuss for integrate with saga and sharding-sphere

2018-06-06 Thread Liang Zhang
Hi Willem Jiang,

I fully agree to keep Omega as simple as possible.

Sharding-Sphere can ask transaction id from Saga, then save SQL and snapshot 
into Sharding-Sphere local db. Saga just as a transaction engine to determine 
and notify Sharding-Sphere when to forward(retry) and backward(compensate). 

Best regrads,

Zhang Liang


On 2018/06/06 06:50:31, Willem Jiang  wrote: 
> Hi Zhangliang,
> 
> It's great that you are interesting about the Saga project.
> Please check out my comments in line.
> 
> 
> Willem Jiang
> 
> Twitter: willemjiang
> Weibo: 姜宁willem
> 
> On Wed, Jun 6, 2018 at 12:21 PM, zhangli...@apache.org <
> zhangli...@apache.org> wrote:
> 
> > Hello servicecomb devs,
> >
> > I want discuss for how to integrate with saga and sharding-sphere.
> >
> > 1. Split saga as service scope and RDB scope. Service scope still use
> > annotation to associate compensation method, RDB scope can generate
> > reverted SQL and data snapshot automatically. Alpha can use revert SQL and
> > previous data snapshot to compensate automatically, do not need end users
> > provide additional cancel method.
> >
> 
> Current Saga doesn't touch the DB layer,  I think we need to do some work
> on the Omega.
> Maybe we need to add a common layer handle the common co-ordinate events,
> and sharding-sphere
>  could do some implementation on the data layer. In this way
> sharding-sphere could reuse the transaction
> co-ordinate feature here.
> 
> BTW, for other who don't know sharding-sphere,  you may check out the
> github project[1] here.
> 
> [1] https://github.com/sharding-sphere/sharding-sphere
> 
> >
> > 2. Sharding-Sphere can generate reverted SQL and data snapshot:
> > INSERT SQL will revert to DELETE SQL with primary key and sharding key.
> > UPDATE/DELETE SQL will generate SELECT SQL and save data snapshot first,
> > and then use UPDATE OR INSERT to compensate data.
> > Saga may need to change data structure for receive SQL and data snapshot,
> > maybe use json format to save on payload field is a good idea.
> 
> 
> I think we need to go through the events structure[2], but if the Omega
> hold the reference,
> Alpha just need to send the revert command to Omega.
> If the Sharding-Sphere can store the SQL and revert SQL into the DB,
>  I don't think Alpha need to know the SQL information.
> 
> [2]
> https://github.com/apache/incubator-servicecomb-saga/blob/ce71ab73ae80bc90ba59fe9b038f134fef9426b1/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TxEvent.java
> 
> 
> >
> 
> 
> > 3. Sharding-Sphere use guava's eventBus to post DML event. Sharding-Sphere
> > plan to add 2 listeners, one is just save reverted SQL and snapshot, other
> > is for send correct info to Omega.
> >
> 
> I think we can keep Omega as simple as possible, maybe the event with
> transaction id
> could be enough.
> 
> 
> >
> > 4. For version of data modification, just guarantee by end user right now,
> > in future we can consider about use additional version field or shadow
> > table to handle it.
> >
> 
> This is the hardest part which bother me a lot. For the Saga service, we
> cannot guarantee
>  the data isolation. The user need to do some addition work on the
> application layer to
>  minimize the side effect.
> Maybe we should spend some time to check the project omid[3]
> 
> [3]https://github.com/apache/incubator-omid/
> 
> 
> 
> >
> > Best regards,
> > Zhang Liang
> >
> 


Re: Discuss for integrate with saga and sharding-sphere

2018-06-05 Thread Willem Jiang
Hi Zhangliang,

It's great that you are interesting about the Saga project.
Please check out my comments in line.


Willem Jiang

Twitter: willemjiang
Weibo: 姜宁willem

On Wed, Jun 6, 2018 at 12:21 PM, zhangli...@apache.org <
zhangli...@apache.org> wrote:

> Hello servicecomb devs,
>
> I want discuss for how to integrate with saga and sharding-sphere.
>
> 1. Split saga as service scope and RDB scope. Service scope still use
> annotation to associate compensation method, RDB scope can generate
> reverted SQL and data snapshot automatically. Alpha can use revert SQL and
> previous data snapshot to compensate automatically, do not need end users
> provide additional cancel method.
>

Current Saga doesn't touch the DB layer,  I think we need to do some work
on the Omega.
Maybe we need to add a common layer handle the common co-ordinate events,
and sharding-sphere
 could do some implementation on the data layer. In this way
sharding-sphere could reuse the transaction
co-ordinate feature here.

BTW, for other who don't know sharding-sphere,  you may check out the
github project[1] here.

[1] https://github.com/sharding-sphere/sharding-sphere

>
> 2. Sharding-Sphere can generate reverted SQL and data snapshot:
> INSERT SQL will revert to DELETE SQL with primary key and sharding key.
> UPDATE/DELETE SQL will generate SELECT SQL and save data snapshot first,
> and then use UPDATE OR INSERT to compensate data.
> Saga may need to change data structure for receive SQL and data snapshot,
> maybe use json format to save on payload field is a good idea.


I think we need to go through the events structure[2], but if the Omega
hold the reference,
Alpha just need to send the revert command to Omega.
If the Sharding-Sphere can store the SQL and revert SQL into the DB,
 I don't think Alpha need to know the SQL information.

[2]
https://github.com/apache/incubator-servicecomb-saga/blob/ce71ab73ae80bc90ba59fe9b038f134fef9426b1/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TxEvent.java


>


> 3. Sharding-Sphere use guava's eventBus to post DML event. Sharding-Sphere
> plan to add 2 listeners, one is just save reverted SQL and snapshot, other
> is for send correct info to Omega.
>

I think we can keep Omega as simple as possible, maybe the event with
transaction id
could be enough.


>
> 4. For version of data modification, just guarantee by end user right now,
> in future we can consider about use additional version field or shadow
> table to handle it.
>

This is the hardest part which bother me a lot. For the Saga service, we
cannot guarantee
 the data isolation. The user need to do some addition work on the
application layer to
 minimize the side effect.
Maybe we should spend some time to check the project omid[3]

[3]https://github.com/apache/incubator-omid/



>
> Best regards,
> Zhang Liang
>


Re: Discuss for integrate with saga and sharding-sphere

2018-06-05 Thread r...@fenbushilian.com
最近在关注这个  
张总有微信么 

我加您:)



分布式链 冯德军
tel:15221883040
 
From: zhangli...@apache.org
Date: 2018-06-06 12:21
To: dev
Subject: Discuss for integrate with saga and sharding-sphere
Hello servicecomb devs,
 
I want discuss for how to integrate with saga and sharding-sphere.
 
1. Split saga as service scope and RDB scope. Service scope still use
annotation to associate compensation method, RDB scope can generate
reverted SQL and data snapshot automatically. Alpha can use revert SQL and
previous data snapshot to compensate automatically, do not need end users
provide additional cancel method.
 
2. Sharding-Sphere can generate reverted SQL and data snapshot:
INSERT SQL will revert to DELETE SQL with primary key and sharding key.
UPDATE/DELETE SQL will generate SELECT SQL and save data snapshot first,
and then use UPDATE OR INSERT to compensate data.
Saga may need to change data structure for receive SQL and data snapshot,
maybe use json format to save on payload field is a good idea.
 
3. Sharding-Sphere use guava's eventBus to post DML event. Sharding-Sphere
plan to add 2 listeners, one is just save reverted SQL and snapshot, other
is for send correct info to Omega.
 
4. For version of data modification, just guarantee by end user right now,
in future we can consider about use additional version field or shadow
table to handle it.
 
Best regards,
Zhang Liang


Discuss for integrate with saga and sharding-sphere

2018-06-05 Thread zhangli...@apache.org
Hello servicecomb devs,

I want discuss for how to integrate with saga and sharding-sphere.

1. Split saga as service scope and RDB scope. Service scope still use
annotation to associate compensation method, RDB scope can generate
reverted SQL and data snapshot automatically. Alpha can use revert SQL and
previous data snapshot to compensate automatically, do not need end users
provide additional cancel method.

2. Sharding-Sphere can generate reverted SQL and data snapshot:
INSERT SQL will revert to DELETE SQL with primary key and sharding key.
UPDATE/DELETE SQL will generate SELECT SQL and save data snapshot first,
and then use UPDATE OR INSERT to compensate data.
Saga may need to change data structure for receive SQL and data snapshot,
maybe use json format to save on payload field is a good idea.

3. Sharding-Sphere use guava's eventBus to post DML event. Sharding-Sphere
plan to add 2 listeners, one is just save reverted SQL and snapshot, other
is for send correct info to Omega.

4. For version of data modification, just guarantee by end user right now,
in future we can consider about use additional version field or shadow
table to handle it.

Best regards,
Zhang Liang