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/31 00:43:31 UTC

[incubator-servicecomb-saga] 05/07: SCB-876 Invoke coordinate method when receiving coordinate command from alpha.

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 9fb41d027f0ca4d57eb944fbb5945d6289b25000
Author: cherrylzhao <zh...@126.com>
AuthorDate: Wed Aug 29 19:56:11 2018 +0800

    SCB-876 Invoke coordinate method when receiving coordinate command from alpha.
---
 .../servicecomb/saga/omega/context/CallbackContext.java     |  1 -
 .../apache/servicecomb/saga/omega/context/OmegaContext.java | 12 ++++++++++++
 .../omega/transaction/tcc/CoordinateMessageHandler.java     | 13 +++++++++++--
 3 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/CallbackContext.java b/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/CallbackContext.java
index 4f803c2..77e2aff 100644
--- a/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/CallbackContext.java
+++ b/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/CallbackContext.java
@@ -42,7 +42,6 @@ public class CallbackContext {
 
   public void apply(String globalTxId, String localTxId, String callbackMethod, Object... payloads) {
     CallbackContextInternal contextInternal = contexts.get(callbackMethod);
-
     String oldGlobalTxId = omegaContext.globalTxId();
     String oldLocalTxId= omegaContext.localTxId();
     try {
diff --git a/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/OmegaContext.java b/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/OmegaContext.java
index 8b92868..8ad6083 100644
--- a/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/OmegaContext.java
+++ b/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/OmegaContext.java
@@ -17,6 +17,8 @@
 
 package org.apache.servicecomb.saga.omega.context;
 
+import java.util.Collection;
+
 /**
  * OmegaContext holds the globalTxId and localTxId which are used to build the invocation map
  */
@@ -27,6 +29,7 @@ public class OmegaContext {
   private final ThreadLocal<String> globalTxId = new InheritableThreadLocal<>();
   private final ThreadLocal<String> localTxId = new InheritableThreadLocal<>();
   private final IdGenerator<String> idGenerator;
+  private final ThreadLocal<Collection> parameters = new InheritableThreadLocal<>();
 
   public OmegaContext(IdGenerator<String> idGenerator) {
     this.idGenerator = idGenerator;
@@ -60,9 +63,18 @@ public class OmegaContext {
     return localTxId.get();
   }
 
+  public void setParameters(Collection parameters) {
+    this.parameters.set(parameters);
+  }
+
+  public Collection parameters() {
+    return parameters.get();
+  }
+
   public void clear() {
     globalTxId.remove();
     localTxId.remove();
+    parameters.remove();
   }
 
   @Override
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/CoordinateMessageHandler.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/CoordinateMessageHandler.java
index 7663e72..ca39ccd 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/CoordinateMessageHandler.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/CoordinateMessageHandler.java
@@ -18,19 +18,28 @@
 package org.apache.servicecomb.saga.omega.transaction.tcc;
 
 import org.apache.servicecomb.saga.common.TransactionStatus;
+import org.apache.servicecomb.saga.omega.context.CallbackContext;
+import org.apache.servicecomb.saga.omega.context.OmegaContext;
 import org.apache.servicecomb.saga.omega.transaction.tcc.events.CoordinatedEvent;
 
 public class CoordinateMessageHandler implements MessageHandler {
 
   private final TccEventService tccEventService;
 
-  public CoordinateMessageHandler(TccEventService tccEventService) {
+  private final CallbackContext callbackContext;
+
+  private final OmegaContext omegaContext;
+
+  public CoordinateMessageHandler(TccEventService tccEventService,
+      CallbackContext callbackContext, OmegaContext omegaContext) {
     this.tccEventService = tccEventService;
+    this.callbackContext = callbackContext;
+    this.omegaContext = omegaContext;
   }
 
   @Override
   public void onReceive(String globalTxId, String localTxId, String parentTxId, String methodName) {
-    //TODO Omega Call the service
+    callbackContext.apply(globalTxId, localTxId, methodName, omegaContext.parameters());
     tccEventService.coordinate(new CoordinatedEvent(globalTxId, localTxId, parentTxId, methodName, TransactionStatus.Succeed));
   }
 }