You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by se...@apache.org on 2018/01/10 01:00:30 UTC

[incubator-servicecomb-saga] 04/04: SCB-173 move context init from request to preInterceptor

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

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

commit b93e79527eead2a6c3e06c36cc27d2ab65003458
Author: Eric Lee <da...@huawei.com>
AuthorDate: Tue Jan 9 21:51:36 2018 +0800

    SCB-173 move context init from request to preInterceptor
    
    Signed-off-by: Eric Lee <da...@huawei.com>
---
 .../spring/CompensableMethodCheckingCallback.java  |  7 +++---
 .../transaction/SagaStartAnnotationProcessor.java  |  9 +------
 .../saga/omega/transaction/TransactionAspect.java  | 13 ++++++++++
 .../SagaStartAnnotationProcessorTest.java          |  4 +--
 .../TransactionClientHttpRequestInterceptor.java   | 29 +++-------------------
 ...ransactionClientHttpRequestInterceptorTest.java | 14 +++--------
 6 files changed, 26 insertions(+), 50 deletions(-)

diff --git a/omega/omega-spring-tx/src/main/java/org/apache/servicecomb/saga/omega/transaction/spring/CompensableMethodCheckingCallback.java b/omega/omega-spring-tx/src/main/java/org/apache/servicecomb/saga/omega/transaction/spring/CompensableMethodCheckingCallback.java
index 2793109..ac6615c 100644
--- a/omega/omega-spring-tx/src/main/java/org/apache/servicecomb/saga/omega/transaction/spring/CompensableMethodCheckingCallback.java
+++ b/omega/omega-spring-tx/src/main/java/org/apache/servicecomb/saga/omega/transaction/spring/CompensableMethodCheckingCallback.java
@@ -21,13 +21,12 @@ 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.OmegaException;
+import org.apache.servicecomb.saga.omega.transaction.annotations.Compensable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.util.ReflectionUtils.MethodCallback;
 
-import org.apache.servicecomb.saga.omega.transaction.OmegaException;
-import org.apache.servicecomb.saga.omega.transaction.annotations.Compensable;
-
 class CompensableMethodCheckingCallback implements MethodCallback {
   private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
@@ -40,7 +39,7 @@ class CompensableMethodCheckingCallback implements MethodCallback {
   }
 
   @Override
-  public void doWith(Method method) throws IllegalArgumentException, IllegalAccessException {
+  public void doWith(Method method) throws IllegalArgumentException {
     if (!method.isAnnotationPresent(Compensable.class)) {
       return;
     }
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAnnotationProcessor.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAnnotationProcessor.java
index b058570..e92ebb1 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAnnotationProcessor.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAnnotationProcessor.java
@@ -31,7 +31,7 @@ public class SagaStartAnnotationProcessor {
   }
 
   void preIntercept() {
-    String globalTxId = initChildContext();
+    String globalTxId = omegaContext.newGlobalTxId();
     // reuse the globalTxId as localTxId to differ localTxId in SagaStartedEvent and the first TxStartedEvent
     sender.send(new SagaStartedEvent(globalTxId, globalTxId));
   }
@@ -40,11 +40,4 @@ public class SagaStartAnnotationProcessor {
     String globalTxId = omegaContext.globalTxId();
     sender.send(new SagaEndedEvent(globalTxId, globalTxId));
   }
-
-  private String initChildContext() {
-    String globalTxId = omegaContext.newGlobalTxId();
-    omegaContext.newLocalTxId();
-    omegaContext.setParentTxId(globalTxId);
-    return globalTxId;
-  }
 }
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TransactionAspect.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TransactionAspect.java
index fca7305..bf13e3a 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TransactionAspect.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TransactionAspect.java
@@ -95,6 +95,9 @@ public class TransactionAspect {
   }
 
   private void preIntercept(ProceedingJoinPoint joinPoint, String signature) {
+    // context without a parent should be the first TxStartedEvent
+    initFirstOmegaContext();
+
     preTransactionInterceptor.intercept(
         context.globalTxId(),
         context.localTxId(),
@@ -119,4 +122,14 @@ public class TransactionAspect {
         signature,
         throwable);
   }
+
+  private void initFirstOmegaContext() {
+    if (context.parentTxId() != null) {
+      return;
+    }
+    if (context.localTxId() == null) {
+      context.newLocalTxId();
+    }
+    context.setParentTxId(context.globalTxId());
+  }
 }
diff --git a/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAnnotationProcessorTest.java b/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAnnotationProcessorTest.java
index 64735f0..8913b7f 100644
--- a/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAnnotationProcessorTest.java
+++ b/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAnnotationProcessorTest.java
@@ -56,8 +56,8 @@ public class SagaStartAnnotationProcessorTest {
     sagaStartAnnotationProcessor.preIntercept();
 
     assertThat(context.globalTxId(), is(globalTxId));
-    assertThat(context.localTxId(), is(localTxId));
-    assertThat(context.parentTxId(), is(globalTxId));
+    assertThat(context.localTxId(), is(nullValue()));
+    assertThat(context.parentTxId(), is(nullValue()));
 
     TxEvent event = messages.get(0);
 
diff --git a/omega/omega-transport/omega-transport-resttemplate/src/main/java/org/apache/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptor.java b/omega/omega-transport/omega-transport-resttemplate/src/main/java/org/apache/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptor.java
index 6d7c428..5e69598 100644
--- a/omega/omega-transport/omega-transport-resttemplate/src/main/java/org/apache/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptor.java
+++ b/omega/omega-transport/omega-transport-resttemplate/src/main/java/org/apache/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptor.java
@@ -19,11 +19,8 @@
 package org.apache.servicecomb.saga.omega.transport.resttemplate;
 
 import java.io.IOException;
-import java.lang.invoke.MethodHandles;
 
 import org.apache.servicecomb.saga.omega.context.OmegaContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.http.HttpRequest;
 import org.springframework.http.client.ClientHttpRequestExecution;
 import org.springframework.http.client.ClientHttpRequestInterceptor;
@@ -31,8 +28,6 @@ import org.springframework.http.client.ClientHttpResponse;
 
 class TransactionClientHttpRequestInterceptor implements ClientHttpRequestInterceptor {
 
-  private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-
   private final OmegaContext omegaContext;
 
   TransactionClientHttpRequestInterceptor(OmegaContext omegaContext) {
@@ -43,26 +38,10 @@ class TransactionClientHttpRequestInterceptor implements ClientHttpRequestInterc
   public ClientHttpResponse intercept(HttpRequest request, byte[] body,
       ClientHttpRequestExecution execution) throws IOException {
 
-    request.getHeaders().add(OmegaContext.GLOBAL_TX_ID_KEY, globalTxId());
-    request.getHeaders().add(OmegaContext.LOCAL_TX_ID_KEY, localTxId());
-    return execution.execute(request, body);
-  }
-
-  private String globalTxId() {
-    String globalTxId = omegaContext.globalTxId();
-
-    if (globalTxId == null) {
-      LOG.error("Global tx id should not be null.");
+    if (omegaContext.globalTxId() != null) {
+      request.getHeaders().add(OmegaContext.GLOBAL_TX_ID_KEY, omegaContext.globalTxId());
+      request.getHeaders().add(OmegaContext.LOCAL_TX_ID_KEY, omegaContext.localTxId());
     }
-    return globalTxId;
-  }
-
-  private String localTxId() {
-    String localTxId = omegaContext.localTxId();
-
-    if (localTxId == null) {
-      LOG.error("Local tx id should not be null of global tx {}.", omegaContext.globalTxId());
-    }
-    return localTxId;
+    return execution.execute(request, body);
   }
 }
diff --git a/omega/omega-transport/omega-transport-resttemplate/src/test/java/org/apache/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptorTest.java b/omega/omega-transport/omega-transport-resttemplate/src/test/java/org/apache/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptorTest.java
index 371c0de..14e288e 100644
--- a/omega/omega-transport/omega-transport-resttemplate/src/test/java/org/apache/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptorTest.java
+++ b/omega/omega-transport/omega-transport-resttemplate/src/test/java/org/apache/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptorTest.java
@@ -20,7 +20,6 @@ package org.apache.servicecomb.saga.omega.transport.resttemplate;
 
 import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
 import static org.hamcrest.Matchers.contains;
-import static org.hamcrest.Matchers.nullValue;
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
 import static org.mockito.Mockito.mock;
@@ -66,22 +65,18 @@ public class TransactionClientHttpRequestInterceptorTest {
   }
 
   @Test
-  public void transactionIdInHeaderIsNullIfNonExists() throws IOException {
+  public void keepHeaderUnchangedIfContextAbsent() throws IOException {
     when(request.getHeaders()).thenReturn(new HttpHeaders());
 
     when(execution.execute(request, null)).thenReturn(response);
 
     clientHttpRequestInterceptor.intercept(request, null, execution);
 
-    assertThat(request.getHeaders().get(OmegaContext.GLOBAL_TX_ID_KEY), contains(nullValue()));
-    assertThat(request.getHeaders().get(OmegaContext.LOCAL_TX_ID_KEY), contains(nullValue()));
-
-    assertThat(omegaContext.globalTxId(), is(nullValue()));
-    assertThat(omegaContext.localTxId(), is(nullValue()));
+    assertThat(request.getHeaders().isEmpty(), is(true));
   }
 
   @Test
-  public void sameTransactionIdInHeaderIfAlreadyExists() throws IOException {
+  public void interceptTransactionIdInHeaderIfContextPresent() throws IOException {
     omegaContext.setGlobalTxId(globalTxId);
     omegaContext.setLocalTxId(localTxId);
 
@@ -93,8 +88,5 @@ public class TransactionClientHttpRequestInterceptorTest {
 
     assertThat(request.getHeaders().get(OmegaContext.GLOBAL_TX_ID_KEY), contains(globalTxId));
     assertThat(request.getHeaders().get(OmegaContext.LOCAL_TX_ID_KEY), contains(localTxId));
-
-    assertThat(omegaContext.globalTxId(), is(globalTxId));
-    assertThat(omegaContext.localTxId(), is(localTxId));
   }
 }

-- 
To stop receiving notification emails like this one, please contact
"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>.