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>.