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