You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ni...@apache.org on 2018/08/22 11:46:04 UTC

[incubator-servicecomb-saga] branch master updated (4c8b15f -> 0ee4c59)

This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-saga.git.


    from 4c8b15f  Add the ref to debugging in root document's quick start section.
     new 54e7d5c  SCB-817 Added TCC events in Omega part (WIP)
     new 2cca74f  SCB-817 Added TCC events in Omega part (WIP)
     new 05550fa  SCB-817 Updated the pack-contracts protocal for TCC
     new 7f07b4a  SCB-817 Added the License headers
     new 92f079d  SCB-817 Updated the grpc file of TccEventService
     new 9e70e53  SCB-817 Updated the TCC grpc contract file
     new 8814789  SCB-818 Omega supports of TCC (WIP)
     new f8549f9  SCB-817 Updated the pack-contracts protocal for TCC
     new 44c85b5  SCB-817 Added the license header
     new 0ee4c59  SCB-817 Fixed typo of the GrpcTccEvent.proto

The 10 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../annotations/{SagaStart.java => TccStart.java}  |  7 +-
 .../{Compensable.java => Participate.java}         | 41 ++++++------
 .../TccEventService.java}                          | 18 ++++-
 .../transaction/tcc/TccParticipatorAspect.java     | 78 ++++++++++++++++++++++
 .../TccStartAnnotationProcessor.java}              | 32 +++++----
 .../TccStartAspect.java}                           | 24 ++++---
 .../transaction/tcc/events/ParticipatedEvent.java  | 40 +++++------
 .../transaction/tcc/events/TccEndedEvent.java      | 16 +++--
 .../transaction/tcc/events/TccStartedEvent.java    | 26 ++++----
 .../servicecomb/saga/common/TransactionStatus.java |  6 +-
 .../proto/{GrpcTxEvent.proto => GrpcCommon.proto}  | 33 +--------
 .../{GrpcTxEvent.proto => GrpcTccEvent.proto}      | 53 +++++++++------
 .../src/main/proto/GrpcTxEvent.proto               | 11 +--
 13 files changed, 231 insertions(+), 154 deletions(-)
 copy omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/annotations/{SagaStart.java => TccStart.java} (91%)
 copy omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/annotations/{Compensable.java => Participate.java} (62%)
 copy omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/{MessageSender.java => tcc/TccEventService.java} (58%)
 create mode 100644 omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccParticipatorAspect.java
 copy omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/{SagaStartAnnotationProcessor.java => tcc/TccStartAnnotationProcessor.java} (53%)
 copy omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/{SagaStartAspect.java => tcc/TccStartAspect.java} (69%)
 copy saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionStartedEvent.java => omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ParticipatedEvent.java (52%)
 copy alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/OmegaCallback.java => omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndedEvent.java (63%)
 copy saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/SingleLeafDirectedAcyclicGraph.java => omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartedEvent.java (66%)
 copy saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/messages/Message.java => pack-common/src/main/java/org/apache/servicecomb/saga/common/TransactionStatus.java (89%)
 copy pack-contracts/pack-contract-grpc/src/main/proto/{GrpcTxEvent.proto => GrpcCommon.proto} (58%)
 copy pack-contracts/pack-contract-grpc/src/main/proto/{GrpcTxEvent.proto => GrpcTccEvent.proto} (52%)


[incubator-servicecomb-saga] 06/10: SCB-817 Updated the TCC grpc contract file

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-saga.git

commit 9e70e534a01f40275664186655a8024722287c1a
Author: Willem Jiang <ji...@huawei.com>
AuthorDate: Tue Aug 21 09:59:02 2018 +0800

    SCB-817 Updated the TCC grpc contract file
---
 .../omega/transaction/tcc/TccEventService.java     |  4 ++++
 .../{TccStartEvent.java => ParticipatedEvent.java} | 22 +++++++++-------------
 .../{TccEndEvent.java => TccEndedEvent.java}       |  9 ++++++---
 .../{TccStartEvent.java => TccStartedEvent.java}   |  9 +++------
 .../servicecomb/saga/common/TransactionStatus.java |  6 ++++--
 .../src/main/proto/GrpcTccEvent.proto              |  3 ++-
 6 files changed, 28 insertions(+), 25 deletions(-)

diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccEventService.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccEventService.java
new file mode 100644
index 0000000..1649620
--- /dev/null
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccEventService.java
@@ -0,0 +1,4 @@
+package org.apache.servicecomb.saga.omega.transaction.tcc;
+
+public class TccService {
+}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ParticipatedEvent.java
similarity index 77%
copy from omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartEvent.java
copy to omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ParticipatedEvent.java
index 416c182..73ede9c 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartEvent.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ParticipatedEvent.java
@@ -16,26 +16,22 @@
  */
 package org.apache.servicecomb.saga.omega.transaction.tcc.events;
 
-public class TccStartEvent {
+
+public class ParticipateEvent {
+  
   private final String globalTxId;
   private final String localTxId;
   private final String parentTxId;
+  private final String confirmMethod;
+  private final String cancelMethod;
 
-  public String getGlobalTxId() {
-    return globalTxId;
-  }
-
-  public String getLocalTxId() {
-    return localTxId;
-  }
-
-  public String getParentTxId() {
-    return parentTxId;
-  }
 
-  public TccStartEvent(String globalTxId, String localTxId, String parentTxId) {
+  public ParticipateEvent(String globalTxId, String localTxId, String parentTxId, String confirmMethod,
+      String cancelMethod) {
     this.globalTxId = globalTxId;
     this.localTxId = localTxId;
     this.parentTxId = parentTxId;
+    this.confirmMethod = confirmMethod;
+    this.cancelMethod = cancelMethod;
   }
 }
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndedEvent.java
similarity index 82%
rename from omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndEvent.java
rename to omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndedEvent.java
index 541489f..9107ab0 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndEvent.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndedEvent.java
@@ -16,15 +16,18 @@
  */
 package org.apache.servicecomb.saga.omega.transaction.tcc.events;
 
+import org.apache.servicecomb.saga.common.TransactionStatus;
+
 public class TccEndEvent {
   private final String globalTxId;
   private final String localTxId;
-  private final String parentTxId;
+  private final TransactionStatus status;
    
 
-  public TccEndEvent(String globalTxId, String localTxId, String parentTxId) {
+  public TccEndEvent(String globalTxId, String localTxId,
+      TransactionStatus status) {
     this.globalTxId = globalTxId;
     this.localTxId = localTxId;
-    this.parentTxId = parentTxId;
+    this.status = status;
   }
 }
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartedEvent.java
similarity index 84%
rename from omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartEvent.java
rename to omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartedEvent.java
index 416c182..64db3ea 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartEvent.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartedEvent.java
@@ -19,7 +19,7 @@ package org.apache.servicecomb.saga.omega.transaction.tcc.events;
 public class TccStartEvent {
   private final String globalTxId;
   private final String localTxId;
-  private final String parentTxId;
+
 
   public String getGlobalTxId() {
     return globalTxId;
@@ -29,13 +29,10 @@ public class TccStartEvent {
     return localTxId;
   }
 
-  public String getParentTxId() {
-    return parentTxId;
-  }
 
-  public TccStartEvent(String globalTxId, String localTxId, String parentTxId) {
+
+  public TccStartEvent(String globalTxId, String localTxId) {
     this.globalTxId = globalTxId;
     this.localTxId = localTxId;
-    this.parentTxId = parentTxId;
   }
 }
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ParticipateEvent.java b/pack-common/src/main/java/org/apache/servicecomb/saga/common/TransactionStatus.java
similarity index 89%
rename from omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ParticipateEvent.java
rename to pack-common/src/main/java/org/apache/servicecomb/saga/common/TransactionStatus.java
index 83e910b..ea5a662 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ParticipateEvent.java
+++ b/pack-common/src/main/java/org/apache/servicecomb/saga/common/TransactionStatus.java
@@ -14,8 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.servicecomb.saga.omega.transaction.tcc.events;
 
+package org.apache.servicecomb.saga.common;
 
-public class ParticipateEvent {
+public enum TransactionStatus {
+  Succeed,
+  Failed
 }
diff --git a/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto b/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto
index 9e1752f..14801b2 100644
--- a/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto
+++ b/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto
@@ -47,6 +47,7 @@ message GrpcTccParticipateEvent {
   string parentTxId = 4;
   string confirmMethod = 6;
   string cancelMethod = 7;
+  string status = 8;
 }
 
 message GrpcTccTransactionEndedEvent {
@@ -54,7 +55,7 @@ message GrpcTccTransactionEndedEvent {
   string globalTxId = 2;
   string localTxId = 3;
   string parentTxId = 4;
-  string type = 5;
+  string status = 5;
 }
 
 message GrpcTccCordinateCommand {


[incubator-servicecomb-saga] 04/10: SCB-817 Added the License headers

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-saga.git

commit 7f07b4a72cc3b1eb49d61828e52b526f3fcce814
Author: Willem Jiang <ji...@huawei.com>
AuthorDate: Mon Aug 20 19:06:20 2018 +0800

    SCB-817 Added the License headers
---
 .../transaction/tcc/TccStartAnnotationProcessor.java     | 16 ++++++++++++++++
 .../saga/omega/transaction/tcc/TccStartAspect.java       | 16 ++++++++++++++++
 .../saga/omega/transaction/tcc/events/TccEndEvent.java   | 16 ++++++++++++++++
 .../saga/omega/transaction/tcc/events/TccStartEvent.java | 16 ++++++++++++++++
 4 files changed, 64 insertions(+)

diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAnnotationProcessor.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAnnotationProcessor.java
index b38d876..b93373f 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAnnotationProcessor.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAnnotationProcessor.java
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.servicecomb.saga.omega.transaction.tcc;
 
 import javax.transaction.TransactionalException;
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAspect.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAspect.java
index c8b7936..90728e3 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAspect.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAspect.java
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.servicecomb.saga.omega.transaction.tcc;
 
 import java.lang.invoke.MethodHandles;
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndEvent.java
index 1022aee..541489f 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndEvent.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndEvent.java
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.servicecomb.saga.omega.transaction.tcc.events;
 
 public class TccEndEvent {
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartEvent.java
index c94dbca..416c182 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartEvent.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartEvent.java
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.servicecomb.saga.omega.transaction.tcc.events;
 
 public class TccStartEvent {


[incubator-servicecomb-saga] 01/10: SCB-817 Added TCC events in Omega part (WIP)

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-saga.git

commit 54e7d5cd62e11fa2055a762e37feb9eac3539054
Author: Willem Jiang <ji...@huawei.com>
AuthorDate: Sun Aug 12 11:16:22 2018 +0800

    SCB-817 Added TCC events in Omega part (WIP)
---
 .../saga/omega/context/annotations/TccStart.java   | 15 +++++
 .../saga/omega/transaction/annotations/TCC.java    | 64 ++++++++++++++++++++++
 .../saga/omega/transaction/tcc/TccAspect.java      | 48 ++++++++++++++++
 .../saga/omega/transaction/tcc/TccInterceptor.java |  4 ++
 .../tcc/TccStartAnnotationProcessor.java           | 47 ++++++++++++++++
 .../saga/omega/transaction/tcc/TccStartAspect.java | 60 ++++++++++++++++++++
 .../omega/transaction/tcc/events/CancelEvent.java  | 20 +++++++
 .../omega/transaction/tcc/events/ConfirmEvent.java | 20 +++++++
 .../transaction/tcc/events/ParticipateEvent.java   | 21 +++++++
 .../tcc/events/TransactionEndEvent.java            |  4 ++
 .../tcc/events/TransationStartEvent.java           |  4 ++
 11 files changed, 307 insertions(+)

diff --git a/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/annotations/TccStart.java b/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/annotations/TccStart.java
new file mode 100644
index 0000000..c9154f9
--- /dev/null
+++ b/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/annotations/TccStart.java
@@ -0,0 +1,15 @@
+package org.apache.servicecomb.saga.omega.context.annotations;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * Indicates the annotated method will start a TCC .
+ */
+@Retention(RUNTIME)
+@Target(METHOD)
+public @interface TccStart {
+}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/annotations/TCC.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/annotations/TCC.java
new file mode 100644
index 0000000..a095978
--- /dev/null
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/annotations/TCC.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicecomb.saga.omega.transaction.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.METHOD})
+/**
+ * Indicates the annotated method will start a sub-transaction. <br>
+ * A <code>@TCC</code> method should satisfy below requirements:
+ * <ol>
+ *   <li>all parameters are serialized</li>
+ *   <li>is idempotent</li>
+ *   <li>the object instance which @TCC method resides in should be stateless</li>
+ * </ol>
+ */
+public @interface TCC {
+  /**
+   * Confirm method name.<br>
+   * A confirm method should satisfy below requirements:
+   * <ol>
+   *   <li>has same parameter list as @TCC method's</li>
+   *   <li>all parameters are serialized</li>
+   *   <li>is idempotent</li>
+   *   <li>be in the same class as @TCC method is in</li>
+   * </ol>
+   *
+   * @return
+   */
+  String confirmMethod() default "";
+
+  /**
+   * Cancel method name.<br>
+   * A cancel method should satisfy below requirements:
+   * <ol>
+   *   <li>has same parameter list as @TCC method's</li>
+   *   <li>all parameters are serialized</li>
+   *   <li>is idempotent</li>
+   *   <li>be in the same class as @TCC method is in</li>
+   * </ol>
+   *
+   * @return
+   */
+  String cancelMethod() default "";
+
+}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccAspect.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccAspect.java
new file mode 100644
index 0000000..173cb78
--- /dev/null
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccAspect.java
@@ -0,0 +1,48 @@
+package org.apache.servicecomb.saga.omega.transaction.tcc;
+
+import java.lang.invoke.MethodHandles;
+import java.lang.reflect.Method;
+
+import org.apache.servicecomb.saga.omega.context.OmegaContext;
+import org.apache.servicecomb.saga.omega.transaction.CompensableInterceptor;
+import org.apache.servicecomb.saga.omega.transaction.MessageSender;
+import org.apache.servicecomb.saga.omega.transaction.RecoveryPolicy;
+import org.apache.servicecomb.saga.omega.transaction.RecoveryPolicyFactory;
+import org.apache.servicecomb.saga.omega.transaction.annotations.Compensable;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Aspect
+public class TccAspect {
+  private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
+  private final OmegaContext context;
+
+  private final CompensableInterceptor interceptor;
+
+  public TccAspect(MessageSender sender, OmegaContext context) {
+    this.context = context;
+    this.interceptor = new CompensableInterceptor(context, sender);
+  }
+
+  @Around("execution(@org.apache.servicecomb.saga.omega.transaction.annotations.Compensable * *(..)) && @annotation(compensable)")
+  Object advise(ProceedingJoinPoint joinPoint, Compensable compensable) throws Throwable {
+    Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
+    String localTxId = context.localTxId();
+    context.newLocalTxId();
+    LOG.debug("Updated context {} for compensable method {} ", context, method.toString());
+
+    int retries = compensable.retries();
+    RecoveryPolicy recoveryPolicy = RecoveryPolicyFactory.getRecoveryPolicy(retries);
+    try {
+      return recoveryPolicy.apply(joinPoint, compensable, interceptor, context, localTxId, retries);
+    } finally {
+      context.setLocalTxId(localTxId);
+      LOG.debug("Restored context back to {}", context);
+    }
+  }
+}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccInterceptor.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccInterceptor.java
new file mode 100644
index 0000000..5ada269
--- /dev/null
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccInterceptor.java
@@ -0,0 +1,4 @@
+package org.apache.servicecomb.saga.omega.transaction.tcc;
+
+public class TccInterceptor {
+}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAnnotationProcessor.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAnnotationProcessor.java
new file mode 100644
index 0000000..3e708cd
--- /dev/null
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAnnotationProcessor.java
@@ -0,0 +1,47 @@
+package org.apache.servicecomb.saga.omega.transaction.tcc;
+
+import javax.transaction.TransactionalException;
+
+import org.apache.servicecomb.saga.omega.context.OmegaContext;
+import org.apache.servicecomb.saga.omega.transaction.AlphaResponse;
+import org.apache.servicecomb.saga.omega.transaction.EventAwareInterceptor;
+import org.apache.servicecomb.saga.omega.transaction.MessageSender;
+import org.apache.servicecomb.saga.omega.transaction.OmegaException;
+import org.apache.servicecomb.saga.omega.transaction.SagaEndedEvent;
+import org.apache.servicecomb.saga.omega.transaction.SagaStartedEvent;
+import org.apache.servicecomb.saga.omega.transaction.TxAbortedEvent;
+
+public class TccStartAnnotationProcessor implements EventAwareInterceptor {
+
+  private final OmegaContext omegaContext;
+  private final MessageSender sender;
+
+  TccStartAnnotationProcessor(OmegaContext omegaContext, MessageSender sender) {
+    this.omegaContext = omegaContext;
+    this.sender = sender;
+  }
+
+  @Override
+  public AlphaResponse preIntercept(String parentTxId, String compensationMethod, int timeout, String retriesMethod,
+      int retries, Object... message) {
+    try {
+      return sender.send(new SagaStartedEvent(omegaContext.globalTxId(), omegaContext.localTxId(), timeout));
+    } catch (OmegaException e) {
+      throw new TransactionalException(e.getMessage(), e.getCause());
+    }
+  }
+
+  @Override
+  public void postIntercept(String parentTxId, String compensationMethod) {
+    AlphaResponse response = sender.send(new SagaEndedEvent(omegaContext.globalTxId(), omegaContext.localTxId()));
+    if (response.aborted()) {
+      throw new OmegaException("transaction " + parentTxId + " is aborted");
+    }
+  }
+
+  @Override
+  public void onError(String parentTxId, String compensationMethod, Throwable throwable) {
+    String globalTxId = omegaContext.globalTxId();
+    sender.send(new TxAbortedEvent(globalTxId, omegaContext.localTxId(), null, compensationMethod, throwable));
+  }
+}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAspect.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAspect.java
new file mode 100644
index 0000000..5b380db
--- /dev/null
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAspect.java
@@ -0,0 +1,60 @@
+package org.apache.servicecomb.saga.omega.transaction.tcc;
+
+import java.lang.invoke.MethodHandles;
+import java.lang.reflect.Method;
+
+import org.apache.servicecomb.saga.omega.context.OmegaContext;
+import org.apache.servicecomb.saga.omega.context.annotations.SagaStart;
+import org.apache.servicecomb.saga.omega.transaction.MessageSender;
+import org.apache.servicecomb.saga.omega.transaction.OmegaException;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Aspect
+public class TccStartAspect {
+  private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
+  private final TccStartAnnotationProcessor tccStartAnnotationProcessor;
+
+  private final OmegaContext context;
+
+  public TccStartAspect(MessageSender sender, OmegaContext context) {
+    this.context = context;
+    this.tccStartAnnotationProcessor = new TccStartAnnotationProcessor(context, sender);
+  }
+
+  @Around("execution(@org.apache.servicecomb.saga.omega.context.annotations.TccStart * *(..)) && @annotation(sagaStart)")
+  Object advise(ProceedingJoinPoint joinPoint, SagaStart sagaStart) throws Throwable {
+    initializeOmegaContext();
+    Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
+
+    tccStartAnnotationProcessor.preIntercept(context.globalTxId(), method.toString(), sagaStart.timeout(), "", 0);
+    LOG.debug("Initialized context {} before execution of method {}", context, method.toString());
+
+    try {
+      Object result = joinPoint.proceed();
+
+      tccStartAnnotationProcessor.postIntercept(context.globalTxId(), method.toString());
+      LOG.debug("Transaction with context {} has finished.", context);
+
+      return result;
+    } catch (Throwable throwable) {
+      // We don't need to handle the OmegaException here
+      if (!(throwable instanceof OmegaException)) {
+        tccStartAnnotationProcessor.onError(context.globalTxId(), method.toString(), throwable);
+        LOG.error("Transaction {} failed.", context.globalTxId());
+      }
+      throw throwable;
+    } finally {
+      context.clear();
+    }
+  }
+
+  private void initializeOmegaContext() {
+    context.setLocalTxId(context.newGlobalTxId());
+  }
+}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/CancelEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/CancelEvent.java
new file mode 100644
index 0000000..7659812
--- /dev/null
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/CancelEvent.java
@@ -0,0 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicecomb.saga.omega.transaction.tcc.events;
+
+public class CancelEvent {
+}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ConfirmEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ConfirmEvent.java
new file mode 100644
index 0000000..f01675b
--- /dev/null
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ConfirmEvent.java
@@ -0,0 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicecomb.saga.omega.transaction.tcc.events;
+
+public class ConfirmEvent {
+}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ParticipateEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ParticipateEvent.java
new file mode 100644
index 0000000..83e910b
--- /dev/null
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ParticipateEvent.java
@@ -0,0 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicecomb.saga.omega.transaction.tcc.events;
+
+
+public class ParticipateEvent {
+}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TransactionEndEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TransactionEndEvent.java
new file mode 100644
index 0000000..9613602
--- /dev/null
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TransactionEndEvent.java
@@ -0,0 +1,4 @@
+package org.apache.servicecomb.saga.omega.transaction.tcc.events;
+
+public class TransactionEndEvent {
+}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TransationStartEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TransationStartEvent.java
new file mode 100644
index 0000000..54858c6
--- /dev/null
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TransationStartEvent.java
@@ -0,0 +1,4 @@
+package org.apache.servicecomb.saga.omega.transaction.tcc.events;
+
+public class TransationStartEvent {
+}


[incubator-servicecomb-saga] 10/10: SCB-817 Fixed typo of the GrpcTccEvent.proto

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-saga.git

commit 0ee4c59169224e9a2f4ab76f44216a2784df02bd
Author: Willem Jiang <ji...@huawei.com>
AuthorDate: Wed Aug 22 19:21:58 2018 +0800

    SCB-817 Fixed typo of the GrpcTccEvent.proto
---
 pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto b/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto
index f482a93..64731b0 100644
--- a/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto
+++ b/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto
@@ -24,7 +24,7 @@ option java_outer_classname = "TccEventProto";
 import "GrpcCommon.proto";
 
 service TccEventService {
-  rpc OnConnected (GrpcServiceConfig) returns (stream GrpcTccCordinateCommand) {
+  rpc OnConnected (GrpcServiceConfig) returns (stream GrpcTccCoordinateCommand) {
   }
   rpc participate(GrpcTccParticipatedEvent) returns (GrpcAck) {}
   rpc OnTccTransactionStarted (GrpcTccTransactionStartedEvent) returns (GrpcAck) {}
@@ -64,7 +64,7 @@ message GrpcTccTransactionEndedEvent {
   string status = 7;
 }
 
-message GrpcTccCordinateCommand {
+message GrpcTccCoordinateCommand {
   string globalTxId = 1;
   string localTxId = 2;
   string parentTxId = 3;


[incubator-servicecomb-saga] 02/10: SCB-817 Added TCC events in Omega part (WIP)

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-saga.git

commit 2cca74fcbb8261563dfac82da2f5a480d0fd3af2
Author: Willem Jiang <ji...@huawei.com>
AuthorDate: Thu Aug 16 10:44:06 2018 +0800

    SCB-817 Added TCC events in Omega part (WIP)
---
 .../saga/omega/context/annotations/TccStart.java   |  7 +++
 .../annotations/{TCC.java => Participate.java}     | 14 ++---
 .../saga/omega/transaction/tcc/TccAspect.java      | 48 ---------------
 .../saga/omega/transaction/tcc/TccInterceptor.java |  4 --
 .../transaction/tcc/TccParticipatorAspect.java     | 68 ++++++++++++++++++++++
 .../tcc/TccStartAnnotationProcessor.java           |  6 +-
 .../saga/omega/transaction/tcc/TccStartAspect.java |  7 ++-
 .../omega/transaction/tcc/events/CancelEvent.java  | 20 -------
 .../omega/transaction/tcc/events/ConfirmEvent.java | 20 -------
 .../omega/transaction/tcc/events/TccEndEvent.java  | 14 +++++
 .../transaction/tcc/events/TccStartEvent.java      | 25 ++++++++
 .../tcc/events/TransactionEndEvent.java            |  4 --
 .../tcc/events/TransationStartEvent.java           |  4 --
 13 files changed, 129 insertions(+), 112 deletions(-)

diff --git a/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/annotations/TccStart.java b/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/annotations/TccStart.java
index c9154f9..6c8afd2 100644
--- a/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/annotations/TccStart.java
+++ b/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/annotations/TccStart.java
@@ -12,4 +12,11 @@ import java.lang.annotation.Target;
 @Retention(RUNTIME)
 @Target(METHOD)
 public @interface TccStart {
+  /**
+   * TCC timeout, in seconds. <br>
+   * Default value is 0, which means never timeout.
+   *
+   * @return
+   */
+  int timeout() default 0;
 }
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/annotations/TCC.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/annotations/Participate.java
similarity index 79%
rename from omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/annotations/TCC.java
rename to omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/annotations/Participate.java
index a095978..8351076 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/annotations/TCC.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/annotations/Participate.java
@@ -25,22 +25,22 @@ import java.lang.annotation.Target;
 @Target({ElementType.METHOD})
 /**
  * Indicates the annotated method will start a sub-transaction. <br>
- * A <code>@TCC</code> method should satisfy below requirements:
+ * A <code>@Participate</code> method should satisfy below requirements:
  * <ol>
  *   <li>all parameters are serialized</li>
  *   <li>is idempotent</li>
- *   <li>the object instance which @TCC method resides in should be stateless</li>
+ *   <li>the object instance which @Participate method resides in should be stateless</li>
  * </ol>
  */
-public @interface TCC {
+public @interface Participate {
   /**
    * Confirm method name.<br>
    * A confirm method should satisfy below requirements:
    * <ol>
-   *   <li>has same parameter list as @TCC method's</li>
+   *   <li>has same parameter list as @Participate method's</li>
    *   <li>all parameters are serialized</li>
    *   <li>is idempotent</li>
-   *   <li>be in the same class as @TCC method is in</li>
+   *   <li>be in the same class as @Participate method is in</li>
    * </ol>
    *
    * @return
@@ -51,10 +51,10 @@ public @interface TCC {
    * Cancel method name.<br>
    * A cancel method should satisfy below requirements:
    * <ol>
-   *   <li>has same parameter list as @TCC method's</li>
+   *   <li>has same parameter list as @Participate method's</li>
    *   <li>all parameters are serialized</li>
    *   <li>is idempotent</li>
-   *   <li>be in the same class as @TCC method is in</li>
+   *   <li>be in the same class as @Participate method is in</li>
    * </ol>
    *
    * @return
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccAspect.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccAspect.java
deleted file mode 100644
index 173cb78..0000000
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccAspect.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.apache.servicecomb.saga.omega.transaction.tcc;
-
-import java.lang.invoke.MethodHandles;
-import java.lang.reflect.Method;
-
-import org.apache.servicecomb.saga.omega.context.OmegaContext;
-import org.apache.servicecomb.saga.omega.transaction.CompensableInterceptor;
-import org.apache.servicecomb.saga.omega.transaction.MessageSender;
-import org.apache.servicecomb.saga.omega.transaction.RecoveryPolicy;
-import org.apache.servicecomb.saga.omega.transaction.RecoveryPolicyFactory;
-import org.apache.servicecomb.saga.omega.transaction.annotations.Compensable;
-import org.aspectj.lang.ProceedingJoinPoint;
-import org.aspectj.lang.annotation.Around;
-import org.aspectj.lang.annotation.Aspect;
-import org.aspectj.lang.reflect.MethodSignature;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@Aspect
-public class TccAspect {
-  private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-
-  private final OmegaContext context;
-
-  private final CompensableInterceptor interceptor;
-
-  public TccAspect(MessageSender sender, OmegaContext context) {
-    this.context = context;
-    this.interceptor = new CompensableInterceptor(context, sender);
-  }
-
-  @Around("execution(@org.apache.servicecomb.saga.omega.transaction.annotations.Compensable * *(..)) && @annotation(compensable)")
-  Object advise(ProceedingJoinPoint joinPoint, Compensable compensable) throws Throwable {
-    Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
-    String localTxId = context.localTxId();
-    context.newLocalTxId();
-    LOG.debug("Updated context {} for compensable method {} ", context, method.toString());
-
-    int retries = compensable.retries();
-    RecoveryPolicy recoveryPolicy = RecoveryPolicyFactory.getRecoveryPolicy(retries);
-    try {
-      return recoveryPolicy.apply(joinPoint, compensable, interceptor, context, localTxId, retries);
-    } finally {
-      context.setLocalTxId(localTxId);
-      LOG.debug("Restored context back to {}", context);
-    }
-  }
-}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccInterceptor.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccInterceptor.java
deleted file mode 100644
index 5ada269..0000000
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccInterceptor.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package org.apache.servicecomb.saga.omega.transaction.tcc;
-
-public class TccInterceptor {
-}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccParticipatorAspect.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccParticipatorAspect.java
new file mode 100644
index 0000000..02adac2
--- /dev/null
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccParticipatorAspect.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.servicecomb.saga.omega.transaction.tcc;
+
+import java.lang.invoke.MethodHandles;
+import java.lang.reflect.Method;
+
+import org.apache.servicecomb.saga.omega.context.OmegaContext;
+import org.apache.servicecomb.saga.omega.transaction.MessageSender;
+import org.apache.servicecomb.saga.omega.transaction.OmegaException;
+import org.apache.servicecomb.saga.omega.transaction.RecoveryPolicy;
+import org.apache.servicecomb.saga.omega.transaction.RecoveryPolicyFactory;
+import org.apache.servicecomb.saga.omega.transaction.annotations.Compensable;
+import org.apache.servicecomb.saga.omega.transaction.annotations.Participate;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Aspect
+public class TccParticipatorAspect {
+  private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
+  private final OmegaContext context;
+
+  public TccParticipatorAspect(MessageSender sender, OmegaContext context) {
+    this.context = context;
+  }
+
+  @Around("execution(@org.apache.servicecomb.saga.omega.transaction.annotations.Participate * *(..)) && @annotation(participate)")
+  Object advise(ProceedingJoinPoint joinPoint, Participate participate) throws Throwable {
+    Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
+    String localTxId = context.localTxId();
+    String cancelMethod = participate.cancelMethod();
+    
+    context.newLocalTxId();
+    LOG.debug("Updated context {} for participate method {} ", context, method.toString());
+
+    try {
+      Object result = joinPoint.proceed();
+      // Send the participate message back
+      LOG.debug("Participate Transaction with context {} has finished.", context);
+
+      return result;
+    } catch (Throwable throwable) {
+      // Now we don't handle the error message
+      LOG.error("Participate Transaction with context {} failed.", context, throwable);
+      throw throwable;
+    }
+  }
+}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAnnotationProcessor.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAnnotationProcessor.java
index 3e708cd..b38d876 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAnnotationProcessor.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAnnotationProcessor.java
@@ -33,14 +33,16 @@ public class TccStartAnnotationProcessor implements EventAwareInterceptor {
 
   @Override
   public void postIntercept(String parentTxId, String compensationMethod) {
-    AlphaResponse response = sender.send(new SagaEndedEvent(omegaContext.globalTxId(), omegaContext.localTxId()));
+    // Send the confirm event
+    /*AlphaResponse response = sender.send(new SagaEndedEvent(omegaContext.globalTxId(), omegaContext.localTxId()));
     if (response.aborted()) {
       throw new OmegaException("transaction " + parentTxId + " is aborted");
-    }
+    }*/
   }
 
   @Override
   public void onError(String parentTxId, String compensationMethod, Throwable throwable) {
+    // Send the cancel event
     String globalTxId = omegaContext.globalTxId();
     sender.send(new TxAbortedEvent(globalTxId, omegaContext.localTxId(), null, compensationMethod, throwable));
   }
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAspect.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAspect.java
index 5b380db..c8b7936 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAspect.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAspect.java
@@ -5,6 +5,7 @@ import java.lang.reflect.Method;
 
 import org.apache.servicecomb.saga.omega.context.OmegaContext;
 import org.apache.servicecomb.saga.omega.context.annotations.SagaStart;
+import org.apache.servicecomb.saga.omega.context.annotations.TccStart;
 import org.apache.servicecomb.saga.omega.transaction.MessageSender;
 import org.apache.servicecomb.saga.omega.transaction.OmegaException;
 import org.aspectj.lang.ProceedingJoinPoint;
@@ -27,12 +28,12 @@ public class TccStartAspect {
     this.tccStartAnnotationProcessor = new TccStartAnnotationProcessor(context, sender);
   }
 
-  @Around("execution(@org.apache.servicecomb.saga.omega.context.annotations.TccStart * *(..)) && @annotation(sagaStart)")
-  Object advise(ProceedingJoinPoint joinPoint, SagaStart sagaStart) throws Throwable {
+  @Around("execution(@org.apache.servicecomb.saga.omega.context.annotations.TccStart * *(..)) && @annotation(tccStart)")
+  Object advise(ProceedingJoinPoint joinPoint, TccStart tccStart) throws Throwable {
     initializeOmegaContext();
     Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
 
-    tccStartAnnotationProcessor.preIntercept(context.globalTxId(), method.toString(), sagaStart.timeout(), "", 0);
+    tccStartAnnotationProcessor.preIntercept(context.globalTxId(), method.toString(), tccStart.timeout(), "", 0);
     LOG.debug("Initialized context {} before execution of method {}", context, method.toString());
 
     try {
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/CancelEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/CancelEvent.java
deleted file mode 100644
index 7659812..0000000
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/CancelEvent.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.servicecomb.saga.omega.transaction.tcc.events;
-
-public class CancelEvent {
-}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ConfirmEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ConfirmEvent.java
deleted file mode 100644
index f01675b..0000000
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ConfirmEvent.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.servicecomb.saga.omega.transaction.tcc.events;
-
-public class ConfirmEvent {
-}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndEvent.java
new file mode 100644
index 0000000..1022aee
--- /dev/null
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndEvent.java
@@ -0,0 +1,14 @@
+package org.apache.servicecomb.saga.omega.transaction.tcc.events;
+
+public class TccEndEvent {
+  private final String globalTxId;
+  private final String localTxId;
+  private final String parentTxId;
+   
+
+  public TccEndEvent(String globalTxId, String localTxId, String parentTxId) {
+    this.globalTxId = globalTxId;
+    this.localTxId = localTxId;
+    this.parentTxId = parentTxId;
+  }
+}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartEvent.java
new file mode 100644
index 0000000..c94dbca
--- /dev/null
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartEvent.java
@@ -0,0 +1,25 @@
+package org.apache.servicecomb.saga.omega.transaction.tcc.events;
+
+public class TccStartEvent {
+  private final String globalTxId;
+  private final String localTxId;
+  private final String parentTxId;
+
+  public String getGlobalTxId() {
+    return globalTxId;
+  }
+
+  public String getLocalTxId() {
+    return localTxId;
+  }
+
+  public String getParentTxId() {
+    return parentTxId;
+  }
+
+  public TccStartEvent(String globalTxId, String localTxId, String parentTxId) {
+    this.globalTxId = globalTxId;
+    this.localTxId = localTxId;
+    this.parentTxId = parentTxId;
+  }
+}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TransactionEndEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TransactionEndEvent.java
deleted file mode 100644
index 9613602..0000000
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TransactionEndEvent.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package org.apache.servicecomb.saga.omega.transaction.tcc.events;
-
-public class TransactionEndEvent {
-}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TransationStartEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TransationStartEvent.java
deleted file mode 100644
index 54858c6..0000000
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TransationStartEvent.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package org.apache.servicecomb.saga.omega.transaction.tcc.events;
-
-public class TransationStartEvent {
-}


[incubator-servicecomb-saga] 09/10: SCB-817 Added the license header

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-saga.git

commit 44c85b5bb0843bc747772c8842d3d76ea6ebe900
Author: Willem Jiang <ji...@huawei.com>
AuthorDate: Wed Aug 22 18:52:23 2018 +0800

    SCB-817 Added the license header
---
 .../saga/omega/context/annotations/TccStart.java        | 17 +++++++++++++++++
 .../saga/omega/transaction/tcc/TccEventService.java     | 17 +++++++++++++++++
 2 files changed, 34 insertions(+)

diff --git a/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/annotations/TccStart.java b/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/annotations/TccStart.java
index 6c8afd2..c7f8369 100644
--- a/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/annotations/TccStart.java
+++ b/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/annotations/TccStart.java
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package org.apache.servicecomb.saga.omega.context.annotations;
 
 import static java.lang.annotation.ElementType.METHOD;
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccEventService.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccEventService.java
index ae011bc..a722f49 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccEventService.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccEventService.java
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package org.apache.servicecomb.saga.omega.transaction.tcc;
 
 import org.apache.servicecomb.saga.omega.transaction.AlphaResponse;


[incubator-servicecomb-saga] 08/10: SCB-817 Updated the pack-contracts protocal for TCC

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-saga.git

commit f8549f9ec1871ec7a19981adfa7c92f09672ce73
Author: Willem Jiang <ji...@huawei.com>
AuthorDate: Wed Aug 22 16:52:24 2018 +0800

    SCB-817 Updated the pack-contracts protocal for TCC
---
 .../src/main/proto/GrpcTccEvent.proto               | 21 ++++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)

diff --git a/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto b/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto
index 14801b2..f482a93 100644
--- a/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto
+++ b/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto
@@ -26,7 +26,7 @@ import "GrpcCommon.proto";
 service TccEventService {
   rpc OnConnected (GrpcServiceConfig) returns (stream GrpcTccCordinateCommand) {
   }
-  rpc participate(GrpcTccParticipateEvent) returns (GrpcAck) {}
+  rpc participate(GrpcTccParticipatedEvent) returns (GrpcAck) {}
   rpc OnTccTransactionStarted (GrpcTccTransactionStartedEvent) returns (GrpcAck) {}
   rpc OnTccTransactionEnded (GrpcTccTransactionEndedEvent) returns (GrpcAck) {}
   rpc OnDisconnected (GrpcServiceConfig) returns (GrpcAck) {
@@ -38,16 +38,20 @@ message GrpcTccTransactionStartedEvent {
   string globalTxId = 2;
   string localTxId = 3;
   string parentTxId = 4;
+  string serviceName = 5;
+  string instanceId = 6;
 }
 
-message GrpcTccParticipateEvent {
+message GrpcTccParticipatedEvent {
   int64 timestamp = 1;
   string globalTxId = 2;
   string localTxId = 3;
   string parentTxId = 4;
-  string confirmMethod = 6;
-  string cancelMethod = 7;
-  string status = 8;
+  string serviceName = 5;
+  string instanceId = 6;
+  string confirmMethod = 7;
+  string cancelMethod = 8;
+  string status = 9;
 }
 
 message GrpcTccTransactionEndedEvent {
@@ -55,13 +59,16 @@ message GrpcTccTransactionEndedEvent {
   string globalTxId = 2;
   string localTxId = 3;
   string parentTxId = 4;
-  string status = 5;
+  string serviceName = 5;
+  string instanceId = 6;
+  string status = 7;
 }
 
 message GrpcTccCordinateCommand {
   string globalTxId = 1;
   string localTxId = 2;
   string parentTxId = 3;
-  string method = 4;
+  string serviceName = 4;
+  string method = 5;
 }
 


[incubator-servicecomb-saga] 05/10: SCB-817 Updated the grpc file of TccEventService

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-saga.git

commit 92f079d82ba4d814709cae51911780b92c85f552
Author: Willem Jiang <ji...@huawei.com>
AuthorDate: Mon Aug 20 19:10:07 2018 +0800

    SCB-817 Updated the grpc file of TccEventService
---
 .../src/main/proto/GrpcTccEvent.proto                  | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto b/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto
index 1eba5e5..9e1752f 100644
--- a/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto
+++ b/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto
@@ -24,23 +24,23 @@ option java_outer_classname = "TccEventProto";
 import "GrpcCommon.proto";
 
 service TccEventService {
-  rpc participate(GrpcParticipateEvent) returns (GrpcAck) {}
-  rpc OnConnected (GrpcServiceConfig) returns (stream GrpcCordinateCommand) {
+  rpc OnConnected (GrpcServiceConfig) returns (stream GrpcTccCordinateCommand) {
   }
-  rpc OnTransactionStarted (GrpcTransactionStartedEvent) returns (GrpcAck) {}
-  rpc OnTransactionEnded (GrpcTransactionEndedEvent) returns (GrpcAck) {}
+  rpc participate(GrpcTccParticipateEvent) returns (GrpcAck) {}
+  rpc OnTccTransactionStarted (GrpcTccTransactionStartedEvent) returns (GrpcAck) {}
+  rpc OnTccTransactionEnded (GrpcTccTransactionEndedEvent) returns (GrpcAck) {}
   rpc OnDisconnected (GrpcServiceConfig) returns (GrpcAck) {
   }
 }
 
-message GrpcTransactionStartedEvent {
+message GrpcTccTransactionStartedEvent {
   int64 timestamp = 1;
   string globalTxId = 2;
   string localTxId = 3;
   string parentTxId = 4;
 }
 
-message GrpcParticipateEvent {
+message GrpcTccParticipateEvent {
   int64 timestamp = 1;
   string globalTxId = 2;
   string localTxId = 3;
@@ -49,7 +49,7 @@ message GrpcParticipateEvent {
   string cancelMethod = 7;
 }
 
-message GrpcTransactionEndedEvent {
+message GrpcTccTransactionEndedEvent {
   int64 timestamp = 1;
   string globalTxId = 2;
   string localTxId = 3;
@@ -57,10 +57,10 @@ message GrpcTransactionEndedEvent {
   string type = 5;
 }
 
-message GrpcCordinateCommand {
+message GrpcTccCordinateCommand {
   string globalTxId = 1;
   string localTxId = 2;
   string parentTxId = 3;
-  string type = 4;
+  string method = 4;
 }
 


[incubator-servicecomb-saga] 07/10: SCB-818 Omega supports of TCC (WIP)

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-saga.git

commit 8814789a3070b35a17cbbc1e7638c9e7502beb83
Author: Willem Jiang <ji...@huawei.com>
AuthorDate: Tue Aug 21 10:25:13 2018 +0800

    SCB-818 Omega supports of TCC (WIP)
---
 .../omega/transaction/tcc/TccEventService.java     | 25 ++++++++++++++++++++-
 .../transaction/tcc/TccParticipatorAspect.java     | 14 ++++++++++--
 .../tcc/TccStartAnnotationProcessor.java           | 26 ++++++++++------------
 .../saga/omega/transaction/tcc/TccStartAspect.java |  4 ++--
 .../transaction/tcc/events/ParticipatedEvent.java  | 10 ++++++---
 .../transaction/tcc/events/TccEndedEvent.java      |  4 ++--
 .../transaction/tcc/events/TccStartedEvent.java    |  4 ++--
 7 files changed, 61 insertions(+), 26 deletions(-)

diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccEventService.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccEventService.java
index 1649620..ae011bc 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccEventService.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccEventService.java
@@ -1,4 +1,27 @@
 package org.apache.servicecomb.saga.omega.transaction.tcc;
 
-public class TccService {
+import org.apache.servicecomb.saga.omega.transaction.AlphaResponse;
+import org.apache.servicecomb.saga.omega.transaction.TxEvent;
+import org.apache.servicecomb.saga.omega.transaction.tcc.events.ParticipatedEvent;
+import org.apache.servicecomb.saga.omega.transaction.tcc.events.TccEndedEvent;
+import org.apache.servicecomb.saga.omega.transaction.tcc.events.TccStartedEvent;
+
+public interface TccEventService {
+
+  void onConnected();
+
+  void onDisconnected();
+
+  void close();
+
+  String target();
+
+  AlphaResponse participate(ParticipatedEvent participateEvent);
+
+  AlphaResponse TccTransactionStart(TccStartedEvent tccStartEvent);
+
+  AlphaResponse TccTransactionStop(TccEndedEvent tccEndEvent);
+
+  AlphaResponse send(TxEvent event);
+  
 }
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccParticipatorAspect.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccParticipatorAspect.java
index 02adac2..e64bc2a 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccParticipatorAspect.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccParticipatorAspect.java
@@ -20,6 +20,7 @@ package org.apache.servicecomb.saga.omega.transaction.tcc;
 import java.lang.invoke.MethodHandles;
 import java.lang.reflect.Method;
 
+import org.apache.servicecomb.saga.common.TransactionStatus;
 import org.apache.servicecomb.saga.omega.context.OmegaContext;
 import org.apache.servicecomb.saga.omega.transaction.MessageSender;
 import org.apache.servicecomb.saga.omega.transaction.OmegaException;
@@ -27,6 +28,7 @@ import org.apache.servicecomb.saga.omega.transaction.RecoveryPolicy;
 import org.apache.servicecomb.saga.omega.transaction.RecoveryPolicyFactory;
 import org.apache.servicecomb.saga.omega.transaction.annotations.Compensable;
 import org.apache.servicecomb.saga.omega.transaction.annotations.Participate;
+import org.apache.servicecomb.saga.omega.transaction.tcc.events.ParticipatedEvent;
 import org.aspectj.lang.ProceedingJoinPoint;
 import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
@@ -39,9 +41,11 @@ public class TccParticipatorAspect {
   private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
   private final OmegaContext context;
+  private final TccEventService tccEventService;
 
-  public TccParticipatorAspect(MessageSender sender, OmegaContext context) {
+  public TccParticipatorAspect(TccEventService tccEventService, OmegaContext context) {
     this.context = context;
+    this.tccEventService = tccEventService;
   }
 
   @Around("execution(@org.apache.servicecomb.saga.omega.transaction.annotations.Participate * *(..)) && @annotation(participate)")
@@ -49,6 +53,7 @@ public class TccParticipatorAspect {
     Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
     String localTxId = context.localTxId();
     String cancelMethod = participate.cancelMethod();
+    String confirmMethod = participate.confirmMethod();
     
     context.newLocalTxId();
     LOG.debug("Updated context {} for participate method {} ", context, method.toString());
@@ -56,13 +61,18 @@ public class TccParticipatorAspect {
     try {
       Object result = joinPoint.proceed();
       // Send the participate message back
+      tccEventService.participate(new ParticipatedEvent(context.globalTxId(), context.localTxId(), localTxId, cancelMethod, confirmMethod,
+          TransactionStatus.Succeed));
       LOG.debug("Participate Transaction with context {} has finished.", context);
-
       return result;
     } catch (Throwable throwable) {
       // Now we don't handle the error message
+      tccEventService.participate(new ParticipatedEvent(context.globalTxId(), context.localTxId(), localTxId, cancelMethod,
+          confirmMethod, TransactionStatus.Failed));
       LOG.error("Participate Transaction with context {} failed.", context, throwable);
       throw throwable;
+    } finally {
+      context.setLocalTxId(localTxId);
     }
   }
 }
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAnnotationProcessor.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAnnotationProcessor.java
index b93373f..26621d1 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAnnotationProcessor.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAnnotationProcessor.java
@@ -18,30 +18,30 @@ package org.apache.servicecomb.saga.omega.transaction.tcc;
 
 import javax.transaction.TransactionalException;
 
+import org.apache.servicecomb.saga.common.TransactionStatus;
 import org.apache.servicecomb.saga.omega.context.OmegaContext;
 import org.apache.servicecomb.saga.omega.transaction.AlphaResponse;
 import org.apache.servicecomb.saga.omega.transaction.EventAwareInterceptor;
-import org.apache.servicecomb.saga.omega.transaction.MessageSender;
 import org.apache.servicecomb.saga.omega.transaction.OmegaException;
-import org.apache.servicecomb.saga.omega.transaction.SagaEndedEvent;
-import org.apache.servicecomb.saga.omega.transaction.SagaStartedEvent;
 import org.apache.servicecomb.saga.omega.transaction.TxAbortedEvent;
+import org.apache.servicecomb.saga.omega.transaction.tcc.events.TccEndedEvent;
+import org.apache.servicecomb.saga.omega.transaction.tcc.events.TccStartedEvent;
 
 public class TccStartAnnotationProcessor implements EventAwareInterceptor {
 
   private final OmegaContext omegaContext;
-  private final MessageSender sender;
+  private final TccEventService eventService;
 
-  TccStartAnnotationProcessor(OmegaContext omegaContext, MessageSender sender) {
+  TccStartAnnotationProcessor(OmegaContext omegaContext, TccEventService eventService) {
     this.omegaContext = omegaContext;
-    this.sender = sender;
+    this.eventService = eventService;
   }
 
   @Override
   public AlphaResponse preIntercept(String parentTxId, String compensationMethod, int timeout, String retriesMethod,
       int retries, Object... message) {
     try {
-      return sender.send(new SagaStartedEvent(omegaContext.globalTxId(), omegaContext.localTxId(), timeout));
+      return eventService.TccTransactionStart(new TccStartedEvent(omegaContext.globalTxId(), omegaContext.localTxId()));
     } catch (OmegaException e) {
       throw new TransactionalException(e.getMessage(), e.getCause());
     }
@@ -49,17 +49,15 @@ public class TccStartAnnotationProcessor implements EventAwareInterceptor {
 
   @Override
   public void postIntercept(String parentTxId, String compensationMethod) {
-    // Send the confirm event
-    /*AlphaResponse response = sender.send(new SagaEndedEvent(omegaContext.globalTxId(), omegaContext.localTxId()));
-    if (response.aborted()) {
-      throw new OmegaException("transaction " + parentTxId + " is aborted");
-    }*/
+    eventService.TccTransactionStop(new TccEndedEvent(omegaContext.globalTxId(), omegaContext.localTxId(),
+        TransactionStatus.Succeed));
   }
 
   @Override
   public void onError(String parentTxId, String compensationMethod, Throwable throwable) {
     // Send the cancel event
-    String globalTxId = omegaContext.globalTxId();
-    sender.send(new TxAbortedEvent(globalTxId, omegaContext.localTxId(), null, compensationMethod, throwable));
+    // Do we need to wait for the alpha finish all the transaction
+    eventService.TccTransactionStop(new TccEndedEvent(omegaContext.globalTxId(), omegaContext.localTxId(),
+        TransactionStatus.Failed));
   }
 }
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAspect.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAspect.java
index 90728e3..f6d1d77 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAspect.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAspect.java
@@ -39,9 +39,9 @@ public class TccStartAspect {
 
   private final OmegaContext context;
 
-  public TccStartAspect(MessageSender sender, OmegaContext context) {
+  public TccStartAspect(TccEventService tccEventServicer, OmegaContext context) {
     this.context = context;
-    this.tccStartAnnotationProcessor = new TccStartAnnotationProcessor(context, sender);
+    this.tccStartAnnotationProcessor = new TccStartAnnotationProcessor(context, tccEventServicer);
   }
 
   @Around("execution(@org.apache.servicecomb.saga.omega.context.annotations.TccStart * *(..)) && @annotation(tccStart)")
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ParticipatedEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ParticipatedEvent.java
index 73ede9c..3372f8e 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ParticipatedEvent.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ParticipatedEvent.java
@@ -17,21 +17,25 @@
 package org.apache.servicecomb.saga.omega.transaction.tcc.events;
 
 
-public class ParticipateEvent {
+import org.apache.servicecomb.saga.common.TransactionStatus;
+
+public class ParticipatedEvent {
   
   private final String globalTxId;
   private final String localTxId;
   private final String parentTxId;
   private final String confirmMethod;
   private final String cancelMethod;
+  private final TransactionStatus status;
 
 
-  public ParticipateEvent(String globalTxId, String localTxId, String parentTxId, String confirmMethod,
-      String cancelMethod) {
+  public ParticipatedEvent(String globalTxId, String localTxId, String parentTxId, String confirmMethod,
+      String cancelMethod, TransactionStatus status) {
     this.globalTxId = globalTxId;
     this.localTxId = localTxId;
     this.parentTxId = parentTxId;
     this.confirmMethod = confirmMethod;
     this.cancelMethod = cancelMethod;
+    this.status = status;
   }
 }
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndedEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndedEvent.java
index 9107ab0..7c666b2 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndedEvent.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndedEvent.java
@@ -18,13 +18,13 @@ package org.apache.servicecomb.saga.omega.transaction.tcc.events;
 
 import org.apache.servicecomb.saga.common.TransactionStatus;
 
-public class TccEndEvent {
+public class TccEndedEvent {
   private final String globalTxId;
   private final String localTxId;
   private final TransactionStatus status;
    
 
-  public TccEndEvent(String globalTxId, String localTxId,
+  public TccEndedEvent(String globalTxId, String localTxId,
       TransactionStatus status) {
     this.globalTxId = globalTxId;
     this.localTxId = localTxId;
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartedEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartedEvent.java
index 64db3ea..edd0333 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartedEvent.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartedEvent.java
@@ -16,7 +16,7 @@
  */
 package org.apache.servicecomb.saga.omega.transaction.tcc.events;
 
-public class TccStartEvent {
+public class TccStartedEvent {
   private final String globalTxId;
   private final String localTxId;
 
@@ -31,7 +31,7 @@ public class TccStartEvent {
 
 
 
-  public TccStartEvent(String globalTxId, String localTxId) {
+  public TccStartedEvent(String globalTxId, String localTxId) {
     this.globalTxId = globalTxId;
     this.localTxId = localTxId;
   }


[incubator-servicecomb-saga] 03/10: SCB-817 Updated the pack-contracts protocal for TCC

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-saga.git

commit 05550fa0181931d2a11aada3412c5080b7997b49
Author: Willem Jiang <ji...@huawei.com>
AuthorDate: Thu Aug 16 10:52:19 2018 +0800

    SCB-817 Updated the pack-contracts protocal for TCC
---
 .../proto/{GrpcTxEvent.proto => GrpcCommon.proto}  | 33 +----------------
 .../{GrpcTxEvent.proto => GrpcTccEvent.proto}      | 43 ++++++++++++----------
 .../src/main/proto/GrpcTxEvent.proto               | 11 +-----
 3 files changed, 26 insertions(+), 61 deletions(-)

diff --git a/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTxEvent.proto b/pack-contracts/pack-contract-grpc/src/main/proto/GrpcCommon.proto
similarity index 58%
copy from pack-contracts/pack-contract-grpc/src/main/proto/GrpcTxEvent.proto
copy to pack-contracts/pack-contract-grpc/src/main/proto/GrpcCommon.proto
index d2c6f77..40a8db7 100644
--- a/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTxEvent.proto
+++ b/pack-contracts/pack-contract-grpc/src/main/proto/GrpcCommon.proto
@@ -19,15 +19,8 @@ syntax = "proto3";
 
 option java_multiple_files = true;
 option java_package = "org.apache.servicecomb.saga.pack.contract.grpc";
-option java_outer_classname = "TxEventProto";
 
-service TxEventService {
-  rpc OnConnected (GrpcServiceConfig) returns (stream GrpcCompensateCommand) {
-  }
-  rpc OnTxEvent (GrpcTxEvent) returns (GrpcAck) {}
-  rpc OnDisconnected (GrpcServiceConfig) returns (GrpcAck) {
-  }
-}
+// Define the common structs which could be use for TccEventService and SagaEventService
 
 message GrpcServiceConfig {
   string serviceName = 1;
@@ -37,27 +30,3 @@ message GrpcServiceConfig {
 message GrpcAck {
   bool aborted = 1;
 }
-
-message GrpcTxEvent {
-  int64 timestamp = 1;
-  string globalTxId = 2;
-  string localTxId = 3;
-  string parentTxId = 4;
-  string type = 5;
-  string compensationMethod = 6;
-  bytes payloads = 7;
-  string serviceName = 8;
-  string instanceId = 9;
-  int32 timeout = 10;
-  int32 retries = 11;
-  string retryMethod = 12;
-}
-
-message GrpcCompensateCommand {
-  string globalTxId = 1;
-  string localTxId = 2;
-  string parentTxId = 3;
-  string compensationMethod = 4;
-  bytes payloads = 5;
-}
-
diff --git a/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTxEvent.proto b/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto
similarity index 60%
copy from pack-contracts/pack-contract-grpc/src/main/proto/GrpcTxEvent.proto
copy to pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto
index d2c6f77..1eba5e5 100644
--- a/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTxEvent.proto
+++ b/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto
@@ -19,45 +19,48 @@ syntax = "proto3";
 
 option java_multiple_files = true;
 option java_package = "org.apache.servicecomb.saga.pack.contract.grpc";
-option java_outer_classname = "TxEventProto";
+option java_outer_classname = "TccEventProto";
 
-service TxEventService {
-  rpc OnConnected (GrpcServiceConfig) returns (stream GrpcCompensateCommand) {
+import "GrpcCommon.proto";
+
+service TccEventService {
+  rpc participate(GrpcParticipateEvent) returns (GrpcAck) {}
+  rpc OnConnected (GrpcServiceConfig) returns (stream GrpcCordinateCommand) {
   }
-  rpc OnTxEvent (GrpcTxEvent) returns (GrpcAck) {}
+  rpc OnTransactionStarted (GrpcTransactionStartedEvent) returns (GrpcAck) {}
+  rpc OnTransactionEnded (GrpcTransactionEndedEvent) returns (GrpcAck) {}
   rpc OnDisconnected (GrpcServiceConfig) returns (GrpcAck) {
   }
 }
 
-message GrpcServiceConfig {
-  string serviceName = 1;
-  string instanceId = 2;
+message GrpcTransactionStartedEvent {
+  int64 timestamp = 1;
+  string globalTxId = 2;
+  string localTxId = 3;
+  string parentTxId = 4;
 }
 
-message GrpcAck {
-  bool aborted = 1;
+message GrpcParticipateEvent {
+  int64 timestamp = 1;
+  string globalTxId = 2;
+  string localTxId = 3;
+  string parentTxId = 4;
+  string confirmMethod = 6;
+  string cancelMethod = 7;
 }
 
-message GrpcTxEvent {
+message GrpcTransactionEndedEvent {
   int64 timestamp = 1;
   string globalTxId = 2;
   string localTxId = 3;
   string parentTxId = 4;
   string type = 5;
-  string compensationMethod = 6;
-  bytes payloads = 7;
-  string serviceName = 8;
-  string instanceId = 9;
-  int32 timeout = 10;
-  int32 retries = 11;
-  string retryMethod = 12;
 }
 
-message GrpcCompensateCommand {
+message GrpcCordinateCommand {
   string globalTxId = 1;
   string localTxId = 2;
   string parentTxId = 3;
-  string compensationMethod = 4;
-  bytes payloads = 5;
+  string type = 4;
 }
 
diff --git a/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTxEvent.proto b/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTxEvent.proto
index d2c6f77..f037b4f 100644
--- a/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTxEvent.proto
+++ b/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTxEvent.proto
@@ -21,6 +21,8 @@ option java_multiple_files = true;
 option java_package = "org.apache.servicecomb.saga.pack.contract.grpc";
 option java_outer_classname = "TxEventProto";
 
+import "GrpcCommon.proto";
+
 service TxEventService {
   rpc OnConnected (GrpcServiceConfig) returns (stream GrpcCompensateCommand) {
   }
@@ -29,15 +31,6 @@ service TxEventService {
   }
 }
 
-message GrpcServiceConfig {
-  string serviceName = 1;
-  string instanceId = 2;
-}
-
-message GrpcAck {
-  bool aborted = 1;
-}
-
 message GrpcTxEvent {
   int64 timestamp = 1;
   string globalTxId = 2;