WillemJiang closed pull request #130: SCB-305 postInterceptor should throw the 
exception when the timeout happens
URL: https://github.com/apache/incubator-servicecomb-saga/pull/130
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git 
a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/EventAwareInterceptor.java
 
b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/EventAwareInterceptor.java
index 5f8165f5..44259496 100644
--- 
a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/EventAwareInterceptor.java
+++ 
b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/EventAwareInterceptor.java
@@ -35,7 +35,7 @@ public void onError(String parentTxId, String 
compensationMethod, Throwable thro
 
   AlphaResponse preIntercept(String parentTxId, String compensationMethod, 
Object... message);
 
-  void postIntercept(String parentTxId, String compensationMethod);
+  void postIntercept(String parentTxId, String compensationMethod) throws 
Throwable;
 
   void onError(String parentTxId, String compensationMethod, Throwable 
throwable);
 }
diff --git 
a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TimeAwareInterceptor.java
 
b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TimeAwareInterceptor.java
index ca145512..2057fbc5 100644
--- 
a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TimeAwareInterceptor.java
+++ 
b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TimeAwareInterceptor.java
@@ -22,6 +22,7 @@
 class TimeAwareInterceptor implements EventAwareInterceptor {
   private final EventAwareInterceptor interceptor;
   private final AtomicReference<EventAwareInterceptor> interceptorRef;
+  private Throwable throwable = null;
 
   TimeAwareInterceptor(EventAwareInterceptor interceptor) {
     this.interceptor = interceptor;
@@ -34,9 +35,11 @@ public AlphaResponse preIntercept(String parentTxId, String 
signature, Object...
   }
 
   @Override
-  public void postIntercept(String parentTxId, String signature) {
+  public void postIntercept(String parentTxId, String signature) throws 
Throwable {
     if (interceptorRef.compareAndSet(interceptor, NO_OP_INTERCEPTOR)) {
       interceptor.postIntercept(parentTxId, signature);
+    } else if (throwable != null) {
+      throw throwable;
     }
   }
 
@@ -50,6 +53,7 @@ public void onError(String parentTxId, String signature, 
Throwable throwable) {
   void onTimeout(String parentTxId, String signature, Throwable throwable) {
     if (interceptorRef.compareAndSet(interceptor, NO_OP_INTERCEPTOR)) {
       interceptor.onError(parentTxId, signature, throwable);
+      this.throwable = throwable;
     }
   }
 }
diff --git 
a/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAspectTest.java
 
b/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAspectTest.java
index 7316161c..1bc2b285 100644
--- 
a/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAspectTest.java
+++ 
b/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAspectTest.java
@@ -41,6 +41,7 @@
 import org.aspectj.lang.reflect.MethodSignature;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.rules.ExpectedException;
 import org.mockito.Mockito;
 
 public class SagaStartAspectTest {
@@ -129,11 +130,12 @@ public void sendsAbortEventOnTimeout() throws Throwable {
       return null;
     });
 
+    ExpectedException exception = ExpectedException.none();
     executor.execute(() -> {
       try {
         aspect.advise(joinPoint, sagaStart);
       } catch (Throwable throwable) {
-        fail(throwable.getMessage());
+        exception.expect(OmegaTxTimeoutException.class);
       }
     });
 
diff --git 
a/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/TimeAwareInterceptorTest.java
 
b/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/TimeAwareInterceptorTest.java
index 9ff0214c..1136a450 100644
--- 
a/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/TimeAwareInterceptorTest.java
+++ 
b/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/TimeAwareInterceptorTest.java
@@ -32,6 +32,7 @@
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.junit.Test;
+import org.junit.rules.ExpectedException;
 
 public class TimeAwareInterceptorTest {
   private static final int runningCounts = 1000;
@@ -75,11 +76,15 @@ public void 
invokeEitherPostInterceptOrOnTimeoutConcurrently() throws Exception
     for (int i = 0; i < runningCounts; i++) {
       TimeAwareInterceptor interceptor = new TimeAwareInterceptor(underlying);
       CyclicBarrier cyclicBarrier = new CyclicBarrier(2);
-
+      ExpectedException exception = ExpectedException.none();
 
       futures.add(executorService.submit(() -> {
-        waitForSignal(cyclicBarrier);
-        interceptor.postIntercept(localTxId, signature);
+        try {
+          waitForSignal(cyclicBarrier);
+          interceptor.postIntercept(localTxId, signature);
+        } catch (Throwable throwable) {
+          exception.expect(OmegaTxTimeoutException.class);
+        }
       }));
 
       futures.add(executorService.submit(() -> {
@@ -133,4 +138,4 @@ private void waitTillAllDone(List<Future<?>> futures)
       future.get();
     }
   }
-}
\ No newline at end of file
+}
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 a3db9409..8689a1e6 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
@@ -46,6 +46,7 @@
 import org.aspectj.lang.reflect.MethodSignature;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.rules.ExpectedException;
 
 public class TransactionAspectTest {
   private final List<TxEvent> messages = new ArrayList<>();
@@ -139,6 +140,7 @@ public void sendsAbortEventOnTimeout() throws Throwable {
       return null;
     });
 
+    ExpectedException exception = ExpectedException.none();
     executor.execute(() -> {
       try {
         // need to setup the thread local for it
@@ -147,7 +149,7 @@ public void sendsAbortEventOnTimeout() throws Throwable {
 
         aspect.advise(joinPoint, compensable);
       } catch (Throwable throwable) {
-        fail(throwable.getMessage());
+        exception.expect(OmegaTxTimeoutException.class);
       }
     });
 


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to