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/11 07:20:17 UTC

[incubator-servicecomb-saga] 04/13: SCB-212 united interceptors into one

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

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

commit 892b91d393a3c11b3d305612827ff01f4f1528b3
Author: seanyinx <se...@huawei.com>
AuthorDate: Wed Jan 10 16:45:56 2018 +0800

    SCB-212 united interceptors into one
    
    Signed-off-by: seanyinx <se...@huawei.com>
---
 .../saga/omega/context/annotations/SagaStart.java  |  1 +
 ...nterceptor.java => CompensableInterceptor.java} | 18 ++++++--
 ...Interceptor.java => EventAwareInterceptor.java} | 12 ++---
 .../transaction/PreTransactionInterceptor.java     | 30 ------------
 .../saga/omega/transaction/TransactionAspect.java  | 14 ++----
 .../omega/transaction/annotations/Compensable.java |  2 +
 ...orTest.java => CompensableInterceptorTest.java} | 40 ++++++++++++++--
 .../PostTransactionInterceptorTest.java            | 53 ----------------------
 .../omega/transaction/TransactionAspectTest.java   |  1 -
 9 files changed, 62 insertions(+), 109 deletions(-)

diff --git a/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/annotations/SagaStart.java b/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/annotations/SagaStart.java
index 435d72f..7937061 100644
--- a/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/annotations/SagaStart.java
+++ b/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/annotations/SagaStart.java
@@ -26,4 +26,5 @@ import java.lang.annotation.Target;
 @Retention(RUNTIME)
 @Target(METHOD)
 public @interface SagaStart {
+  int timeout() default 0;
 }
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/FailedTransactionInterceptor.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/CompensableInterceptor.java
similarity index 58%
rename from omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/FailedTransactionInterceptor.java
rename to omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/CompensableInterceptor.java
index 862efc9..b443c4d 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/FailedTransactionInterceptor.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/CompensableInterceptor.java
@@ -17,14 +17,26 @@
 
 package org.apache.servicecomb.saga.omega.transaction;
 
-class FailedTransactionInterceptor {
+class CompensableInterceptor implements EventAwareInterceptor {
   private final MessageSender sender;
 
-  FailedTransactionInterceptor(MessageSender sender) {
+  CompensableInterceptor(MessageSender sender) {
     this.sender = sender;
   }
 
-  void intercept(String globalTxId, String localTxId, String parentTxId, String compensationMethod, Throwable throwable) {
+  @Override
+  public void preIntercept(String globalTxId, String localTxId, String parentTxId, String compensationMethod, Object... message) {
+    sender.send(new TxStartedEvent(globalTxId, localTxId, parentTxId, compensationMethod, message));
+  }
+
+  @Override
+  public void postIntercept(String globalTxId, String localTxId, String parentTxId, String compensationMethod) {
+    sender.send(new TxEndedEvent(globalTxId, localTxId, parentTxId, compensationMethod));
+
+  }
+
+  @Override
+  public void onError(String globalTxId, String localTxId, String parentTxId, String compensationMethod, Throwable throwable) {
     sender.send(new TxAbortedEvent(globalTxId, localTxId, parentTxId, compensationMethod, throwable));
   }
 }
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/PostTransactionInterceptor.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/EventAwareInterceptor.java
similarity index 68%
rename from omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/PostTransactionInterceptor.java
rename to omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/EventAwareInterceptor.java
index 4197560..9be92e6 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/PostTransactionInterceptor.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/EventAwareInterceptor.java
@@ -17,14 +17,10 @@
 
 package org.apache.servicecomb.saga.omega.transaction;
 
-class PostTransactionInterceptor {
-  private final MessageSender sender;
+public interface EventAwareInterceptor {
+  void preIntercept(String globalTxId, String localTxId, String parentTxId, String compensationMethod, Object... message);
 
-  PostTransactionInterceptor(MessageSender sender) {
-    this.sender = sender;
-  }
+  void postIntercept(String globalTxId, String localTxId, String parentTxId, String compensationMethod);
 
-  void intercept(String globalTxId, String localTxId, String parentTxId, String compensationMethod) {
-    sender.send(new TxEndedEvent(globalTxId, localTxId, parentTxId, compensationMethod));
-  }
+  void onError(String globalTxId, String localTxId, String parentTxId, String compensationMethod, Throwable throwable);
 }
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/PreTransactionInterceptor.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/PreTransactionInterceptor.java
deleted file mode 100644
index 3280d11..0000000
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/PreTransactionInterceptor.java
+++ /dev/null
@@ -1,30 +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;
-
-class PreTransactionInterceptor {
-  private final MessageSender sender;
-
-  PreTransactionInterceptor(MessageSender sender) {
-    this.sender = sender;
-  }
-
-  void intercept(String globalTxId, String localTxId, String parentTxId, String compensationMethod, Object... message) {
-    sender.send(new TxStartedEvent(globalTxId, localTxId, parentTxId, compensationMethod, message));
-  }
-}
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 b5c6859..a447489 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
@@ -32,17 +32,13 @@ import org.slf4j.LoggerFactory;
 @Aspect
 public class TransactionAspect {
   private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-  private final PreTransactionInterceptor preTransactionInterceptor;
-  private final PostTransactionInterceptor postTransactionInterceptor;
-  private final FailedTransactionInterceptor failedTransactionInterceptor;
 
   private final OmegaContext context;
+  private final EventAwareInterceptor interceptor;
 
   public TransactionAspect(MessageSender sender, OmegaContext context) {
     this.context = context;
-    this.preTransactionInterceptor = new PreTransactionInterceptor(sender);
-    this.postTransactionInterceptor = new PostTransactionInterceptor(sender);
-    this.failedTransactionInterceptor = new FailedTransactionInterceptor(sender);
+    this.interceptor = new CompensableInterceptor(sender);
   }
 
   @Around("execution(@org.apache.servicecomb.saga.omega.transaction.annotations.Compensable * *(..)) && @annotation(compensable)")
@@ -81,7 +77,7 @@ public class TransactionAspect {
   }
 
   private void preIntercept(ProceedingJoinPoint joinPoint, String signature, String parentTxId) {
-    preTransactionInterceptor.intercept(
+    interceptor.preIntercept(
         context.globalTxId(),
         context.newLocalTxId(),
         parentTxId,
@@ -90,7 +86,7 @@ public class TransactionAspect {
   }
 
   private void postIntercept(String signature, String parentTxId) {
-    postTransactionInterceptor.intercept(
+    interceptor.postIntercept(
         context.globalTxId(),
         context.localTxId(),
         parentTxId,
@@ -98,7 +94,7 @@ public class TransactionAspect {
   }
 
   private void interceptException(String signature, Throwable throwable, String parentTxId) {
-    failedTransactionInterceptor.intercept(
+    interceptor.onError(
         context.globalTxId(),
         context.localTxId(),
         parentTxId,
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/annotations/Compensable.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/annotations/Compensable.java
index 0777ce4..c6bbfb6 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/annotations/Compensable.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/annotations/Compensable.java
@@ -26,4 +26,6 @@ import java.lang.annotation.Target;
 @Retention(RetentionPolicy.RUNTIME)
 public @interface Compensable {
   String compensationMethod();
+
+  int timeout() default 0;
 }
diff --git a/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/PreTransactionInterceptorTest.java b/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/CompensableInterceptorTest.java
similarity index 56%
rename from omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/PreTransactionInterceptorTest.java
rename to omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/CompensableInterceptorTest.java
index 0a54e26..7505a1f 100644
--- a/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/PreTransactionInterceptorTest.java
+++ b/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/CompensableInterceptorTest.java
@@ -29,7 +29,8 @@ import java.util.UUID;
 
 import org.junit.Test;
 
-public class PreTransactionInterceptorTest {
+public class CompensableInterceptorTest {
+
   private final List<TxEvent> messages = new ArrayList<>();
   private final String globalTxId = UUID.randomUUID().toString();
   private final String localTxId = UUID.randomUUID().toString();
@@ -38,11 +39,13 @@ public class PreTransactionInterceptorTest {
   private final MessageSender sender = messages::add;
 
   private final String message = uniquify("message");
-  private final PreTransactionInterceptor interceptor = new PreTransactionInterceptor(sender);
+  private final String compensationMethod = getClass().getCanonicalName();
+
+  private final CompensableInterceptor interceptor = new CompensableInterceptor(sender);
 
   @Test
-  public void sendsTxStartedEvent() throws Exception {
-    interceptor.intercept(globalTxId, localTxId, parentTxId, getClass().getCanonicalName(), message);
+  public void sendsTxStartedEventBefore() throws Exception {
+    interceptor.preIntercept(globalTxId, localTxId, parentTxId, compensationMethod, message);
 
     TxEvent event = messages.get(0);
 
@@ -50,7 +53,34 @@ public class PreTransactionInterceptorTest {
     assertThat(event.localTxId(), is(localTxId));
     assertThat(event.parentTxId(), is(parentTxId));
     assertThat(event.type(), is("TxStartedEvent"));
-    assertThat(event.compensationMethod(), is(getClass().getCanonicalName()));
+    assertThat(event.compensationMethod(), is(compensationMethod));
     assertThat(asList(event.payloads()), contains(message));
   }
+
+  @Test
+  public void sendsTxEndedEventAfter() throws Exception {
+    interceptor.postIntercept(globalTxId, localTxId, parentTxId, compensationMethod);
+
+    TxEvent event = messages.get(0);
+
+    assertThat(event.globalTxId(), is(globalTxId));
+    assertThat(event.localTxId(), is(localTxId));
+    assertThat(event.parentTxId(), is(parentTxId));
+    assertThat(event.type(), is("TxEndedEvent"));
+    assertThat(event.compensationMethod(), is(compensationMethod));
+    assertThat(event.payloads().length, is(0));
+  }
+
+  @Test
+  public void sendsTxAbortedEventOnError() throws Exception {
+    interceptor.onError(globalTxId, localTxId, parentTxId, compensationMethod, new RuntimeException("oops"));
+
+    TxEvent event = messages.get(0);
+
+    assertThat(event.globalTxId(), is(globalTxId));
+    assertThat(event.localTxId(), is(localTxId));
+    assertThat(event.parentTxId(), is(parentTxId));
+    assertThat(event.type(), is("TxAbortedEvent"));
+    assertThat(event.compensationMethod(), is(compensationMethod));
+  }
 }
diff --git a/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/PostTransactionInterceptorTest.java b/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/PostTransactionInterceptorTest.java
deleted file mode 100644
index 50a9cae..0000000
--- a/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/PostTransactionInterceptorTest.java
+++ /dev/null
@@ -1,53 +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;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-
-import org.junit.Test;
-
-public class PostTransactionInterceptorTest {
-  private final List<TxEvent> messages = new ArrayList<>();
-  private final String globalTxId = UUID.randomUUID().toString();
-  private final String localTxId = UUID.randomUUID().toString();
-  private final String parentTxId = UUID.randomUUID().toString();
-
-  private final MessageSender sender = messages::add;
-
-  private final PostTransactionInterceptor interceptor = new PostTransactionInterceptor(sender);
-
-  @Test
-  public void sendsSerializedMessage() throws Exception {
-    interceptor.intercept(globalTxId, localTxId, parentTxId, getClass().getCanonicalName());
-
-
-    TxEvent event = messages.get(0);
-
-    assertThat(event.globalTxId(), is(globalTxId));
-    assertThat(event.localTxId(), is(localTxId));
-    assertThat(event.parentTxId(), is(parentTxId));
-    assertThat(event.type(), is("TxEndedEvent"));
-    assertThat(event.compensationMethod(), is(getClass().getCanonicalName()));
-    assertThat(event.payloads().length, is(0));
-  }
-}
diff --git a/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/TransactionAspectTest.java b/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/TransactionAspectTest.java
index 65f23a7..76a0e34 100644
--- a/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/TransactionAspectTest.java
+++ b/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/TransactionAspectTest.java
@@ -39,7 +39,6 @@ public class TransactionAspectTest {
   private final List<TxEvent> messages = new ArrayList<>();
   private final String globalTxId = UUID.randomUUID().toString();
   private final String localTxId = UUID.randomUUID().toString();
-  private final String parentTxId = UUID.randomUUID().toString();
 
   private final String newLocalTxId = UUID.randomUUID().toString();
 

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