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

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

commit b7083fb4bae799c91b4f379f7f5b91f8bbcc8e21
Author: seanyinx <[email protected]>
AuthorDate: Thu Dec 28 16:55:12 2017 +0800

    SCB-98 included compensation method signature in TxEvent
    
    Signed-off-by: seanyinx <[email protected]>
---
 .../connector/thrift/ThriftMessageSender.java      |  1 +
 .../connector/thrift/ThriftMessageSenderTest.java  |  3 ++-
 .../saga/omega/format/NativeMessageFormatTest.java |  2 +-
 .../spring/TransactionInterceptionTest.java        | 17 ++++++++-----
 .../transaction/PostTransactionInterceptor.java    |  4 ++--
 .../transaction/PreTransactionInterceptor.java     |  4 ++--
 .../saga/omega/transaction/TransactionAspect.java  | 23 ++++++++++++++----
 .../saga/omega/transaction/TxEndedEvent.java       |  4 ++--
 .../saga/omega/transaction/TxEvent.java            |  8 ++++++-
 .../saga/omega/transaction/TxStartedEvent.java     |  4 ++--
 .../PostTransactionInterceptorTest.java            | 21 +++++++++-------
 .../transaction/PreTransactionInterceptorTest.java | 28 +++++++++++-----------
 .../saga/pack/contracts/thrift/SwiftTxEvent.java   | 15 +++++++++++-
 13 files changed, 88 insertions(+), 46 deletions(-)

diff --git 
a/omega/omega-connector/omega-connector-thrift/src/main/java/io/servicecomb/saga/omega/connector/thrift/ThriftMessageSender.java
 
b/omega/omega-connector/omega-connector-thrift/src/main/java/io/servicecomb/saga/omega/connector/thrift/ThriftMessageSender.java
index abdbec5..44499b3 100644
--- 
a/omega/omega-connector/omega-connector-thrift/src/main/java/io/servicecomb/saga/omega/connector/thrift/ThriftMessageSender.java
+++ 
b/omega/omega-connector/omega-connector-thrift/src/main/java/io/servicecomb/saga/omega/connector/thrift/ThriftMessageSender.java
@@ -40,6 +40,7 @@ public class ThriftMessageSender implements MessageSender, 
AutoCloseable {
         event.localTxId(),
         event.parentTxId(),
         event.type(),
+        event.compensationMethod(),
         serializer.serialize(event)
     ));
   }
diff --git 
a/omega/omega-connector/omega-connector-thrift/src/test/java/io/servicecomb/saga/omega/connector/thrift/ThriftMessageSenderTest.java
 
b/omega/omega-connector/omega-connector-thrift/src/test/java/io/servicecomb/saga/omega/connector/thrift/ThriftMessageSenderTest.java
index 9d0ea97..05f984c 100644
--- 
a/omega/omega-connector/omega-connector-thrift/src/test/java/io/servicecomb/saga/omega/connector/thrift/ThriftMessageSenderTest.java
+++ 
b/omega/omega-connector/omega-connector-thrift/src/test/java/io/servicecomb/saga/omega/connector/thrift/ThriftMessageSenderTest.java
@@ -67,13 +67,14 @@ public class ThriftMessageSenderTest {
 
   @Test
   public void sendSerializedEvent() throws Exception {
-    TxEvent event = new TxEvent(globalTxId, localTxId, parentTxId, payload1, 
payload2);
+    TxEvent event = new TxEvent(globalTxId, localTxId, parentTxId, 
getClass().getCanonicalName(), payload1, payload2);
 
     messageSender.send(event);
 
     assertThat(swiftTxEvent.globalTxId(), is(event.globalTxId()));
     assertThat(swiftTxEvent.localTxId(), is(event.localTxId()));
     assertThat(swiftTxEvent.parentTxId(), is(event.parentTxId()));
+    assertThat(swiftTxEvent.compensationMethod(), 
is(event.compensationMethod()));
     assertThat(swiftTxEvent.payloads(), is(serializer.serialize(event)));
   }
 }
diff --git 
a/omega/omega-format/src/test/java/io/servicecomb/saga/omega/format/NativeMessageFormatTest.java
 
b/omega/omega-format/src/test/java/io/servicecomb/saga/omega/format/NativeMessageFormatTest.java
index 4c93270..210aab1 100644
--- 
a/omega/omega-format/src/test/java/io/servicecomb/saga/omega/format/NativeMessageFormatTest.java
+++ 
b/omega/omega-format/src/test/java/io/servicecomb/saga/omega/format/NativeMessageFormatTest.java
@@ -62,7 +62,7 @@ public class NativeMessageFormatTest {
   }
 
   private TxEvent eventOf(Object... payloads) {
-    return new TxEvent(null, null, null, payloads);
+    return new TxEvent(null, null, null, null, payloads);
   }
 
   private static class NotSerializable {
diff --git 
a/omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/TransactionInterceptionTest.java
 
b/omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/TransactionInterceptionTest.java
index 8b873b8..e110713 100644
--- 
a/omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/TransactionInterceptionTest.java
+++ 
b/omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/TransactionInterceptionTest.java
@@ -90,10 +90,12 @@ public class TransactionInterceptionTest {
   public void sendsUserToRemote_AroundTransaction() throws Exception {
     User user = userService.add(new User(username, email));
 
+    String compensationMethod = 
TransactionalUserService.class.getDeclaredMethod("delete", 
User.class).toString();
+
     assertEquals(
         asList(
-            txStartedEvent(globalTxId, localTxId, parentTxId, username, email),
-            txEndedEvent(globalTxId, localTxId, parentTxId)),
+            txStartedEvent(globalTxId, localTxId, parentTxId, 
compensationMethod, username, email),
+            txEndedEvent(globalTxId, localTxId, parentTxId, 
compensationMethod)),
         toString(messages)
     );
 
@@ -149,12 +151,14 @@ public class TransactionInterceptionTest {
         return txStartedEvent(event.globalTxId(),
             event.localTxId(),
             event.parentTxId(),
+            event.compensationMethod(),
             user.username(),
             user.email()).getBytes();
       }
       return txEndedEvent(event.globalTxId(),
           event.localTxId(),
-          event.parentTxId()).getBytes();
+          event.parentTxId(),
+          event.compensationMethod()).getBytes();
     }
 
     @Bean
@@ -166,12 +170,13 @@ public class TransactionInterceptionTest {
   private static String txStartedEvent(String globalTxId,
       String localTxId,
       String parentTxId,
+      String compensationMethod,
       String username,
       String email) {
-    return globalTxId + ":" + localTxId + ":" + parentTxId + ":" + 
TX_STARTED_EVENT + ":" + username + ":" + email;
+    return globalTxId + ":" + localTxId + ":" + parentTxId + ":" + 
compensationMethod + ":" + TX_STARTED_EVENT + ":" + username + ":" + email;
   }
 
-  private static String txEndedEvent(String globalTxId, String localTxId, 
String parentTxId) {
-    return globalTxId + ":" + localTxId + ":" + parentTxId + ":" + 
TX_ENDED_EVENT;
+  private static String txEndedEvent(String globalTxId, String localTxId, 
String parentTxId, String compensationMethod) {
+    return globalTxId + ":" + localTxId + ":" + parentTxId + ":" + 
compensationMethod + ":" + TX_ENDED_EVENT;
   }
 }
diff --git 
a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/PostTransactionInterceptor.java
 
b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/PostTransactionInterceptor.java
index a359ee2..9ea4191 100644
--- 
a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/PostTransactionInterceptor.java
+++ 
b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/PostTransactionInterceptor.java
@@ -24,7 +24,7 @@ class PostTransactionInterceptor {
     this.sender = sender;
   }
 
-  void intercept(String globalTxId, String localTxId, String parentTxId) {
-    sender.send(new TxEndedEvent(globalTxId, localTxId, parentTxId));
+  void intercept(String globalTxId, String localTxId, String parentTxId, 
String compensationMethod) {
+    sender.send(new TxEndedEvent(globalTxId, localTxId, parentTxId, 
compensationMethod));
   }
 }
diff --git 
a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/PreTransactionInterceptor.java
 
b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/PreTransactionInterceptor.java
index 2c49d48..a2ea5b0 100644
--- 
a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/PreTransactionInterceptor.java
+++ 
b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/PreTransactionInterceptor.java
@@ -24,7 +24,7 @@ class PreTransactionInterceptor {
     this.sender = sender;
   }
 
-  void intercept(String globalTxId, String localTxId, String parentTxId, 
Object... message) {
-    sender.send(new TxStartedEvent(globalTxId, localTxId, parentTxId, 
message));
+  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/io/servicecomb/saga/omega/transaction/TransactionAspect.java
 
b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TransactionAspect.java
index e4de9c9..674d1a7 100644
--- 
a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TransactionAspect.java
+++ 
b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TransactionAspect.java
@@ -48,25 +48,38 @@ public class TransactionAspect {
     Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
     LOG.debug("Intercepting compensable method {} with context {}", 
method.toString(), context);
 
-    preIntercept(joinPoint);
+    String signature = compensationMethodSignature(joinPoint, compensable, 
method);
+
+    preIntercept(joinPoint, signature);
     Object result = joinPoint.proceed();
-    postIntercept();
+    postIntercept(signature);
 
     return result;
   }
 
-  private void preIntercept(ProceedingJoinPoint joinPoint) {
+  private String compensationMethodSignature(ProceedingJoinPoint joinPoint, 
Compensable compensable, Method method)
+      throws NoSuchMethodException {
+
+    return joinPoint.getTarget()
+        .getClass()
+        .getDeclaredMethod(compensable.compensationMethod(), 
method.getParameterTypes())
+        .toString();
+  }
+
+  private void preIntercept(ProceedingJoinPoint joinPoint, String signature) {
     preTransactionInterceptor.intercept(
         context.globalTxId(),
         context.localTxId(),
         context.parentTxId(),
+        signature,
         joinPoint.getArgs());
   }
 
-  private void postIntercept() {
+  private void postIntercept(String signature) {
     postTransactionInterceptor.intercept(
         context.globalTxId(),
         context.localTxId(),
-        context.parentTxId());
+        context.parentTxId(),
+        signature);
   }
 }
diff --git 
a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEndedEvent.java
 
b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEndedEvent.java
index 6cc8f79..2836948 100644
--- 
a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEndedEvent.java
+++ 
b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEndedEvent.java
@@ -18,7 +18,7 @@
 package io.servicecomb.saga.omega.transaction;
 
 class TxEndedEvent extends TxEvent {
-  TxEndedEvent(String globalTxId, String localTxId, String parentTxId) {
-    super(globalTxId, localTxId, parentTxId);
+  TxEndedEvent(String globalTxId, String localTxId, String parentTxId, String 
compensationMethod) {
+    super(globalTxId, localTxId, parentTxId, compensationMethod);
   }
 }
diff --git 
a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEvent.java
 
b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEvent.java
index b53e64c..1616f69 100644
--- 
a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEvent.java
+++ 
b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEvent.java
@@ -22,12 +22,14 @@ public class TxEvent {
   private final String globalTxId;
   private final String localTxId;
   private final String parentTxId;
+  private final String compensationMethod;
   private final Object[] payloads;
 
-  public TxEvent(String globalTxId, String localTxId, String parentTxId, 
Object... payloads) {
+  public TxEvent(String globalTxId, String localTxId, String parentTxId, 
String compensationMethod, Object... payloads) {
     this.timestamp = System.currentTimeMillis();
     this.localTxId = localTxId;
     this.parentTxId = parentTxId;
+    this.compensationMethod = compensationMethod;
     this.payloads = payloads;
     this.globalTxId = globalTxId;
   }
@@ -55,4 +57,8 @@ public class TxEvent {
   public String type() {
     return this.getClass().getSimpleName();
   }
+
+  public String compensationMethod() {
+    return compensationMethod;
+  }
 }
diff --git 
a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxStartedEvent.java
 
b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxStartedEvent.java
index 830104f..7ef3089 100644
--- 
a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxStartedEvent.java
+++ 
b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxStartedEvent.java
@@ -19,7 +19,7 @@ package io.servicecomb.saga.omega.transaction;
 
 class TxStartedEvent extends TxEvent {
 
-  TxStartedEvent(String globalTxId, String localTxId, String parentTxId, 
Object[] payloads) {
-    super(globalTxId, localTxId, parentTxId, payloads);
+  TxStartedEvent(String globalTxId, String localTxId, String parentTxId, 
String compensationMethod, Object[] payloads) {
+    super(globalTxId, localTxId, parentTxId, compensationMethod, payloads);
   }
 }
diff --git 
a/omega/omega-transaction/src/test/java/io/servicecomb/saga/omega/transaction/PostTransactionInterceptorTest.java
 
b/omega/omega-transaction/src/test/java/io/servicecomb/saga/omega/transaction/PostTransactionInterceptorTest.java
index 7c72513..86a671f 100644
--- 
a/omega/omega-transaction/src/test/java/io/servicecomb/saga/omega/transaction/PostTransactionInterceptorTest.java
+++ 
b/omega/omega-transaction/src/test/java/io/servicecomb/saga/omega/transaction/PostTransactionInterceptorTest.java
@@ -17,7 +17,7 @@
 
 package io.servicecomb.saga.omega.transaction;
 
-import static org.hamcrest.collection.IsIterableContainingInOrder.contains;
+import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
 
 import java.util.ArrayList;
@@ -27,23 +27,26 @@ import java.util.UUID;
 import org.junit.Test;
 
 public class PostTransactionInterceptorTest {
-  private final List<byte[]> messages = new ArrayList<>();
+  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 = (msg) -> 
messages.add(serialize(msg.globalTxId(), msg.localTxId(), msg.parentTxId()));
+  private final MessageSender sender = messages::add;
 
   private final PostTransactionInterceptor interceptor = new 
PostTransactionInterceptor(sender);
 
-  private byte[] serialize(String globalTxId, String localTxId, String 
parentTxId) {
-    return (globalTxId + ":" + localTxId + ":" + parentTxId).getBytes();
-  }
-
   @Test
   public void sendsSerializedMessage() throws Exception {
-    interceptor.intercept(globalTxId, localTxId, parentTxId);
+    interceptor.intercept(globalTxId, localTxId, parentTxId, 
getClass().getCanonicalName());
+
+
+    TxEvent event = messages.get(0);
 
-    assertThat(messages, contains(serialize(globalTxId, localTxId, 
parentTxId)));
+    assertThat(event.globalTxId(), is(globalTxId));
+    assertThat(event.localTxId(), is(localTxId));
+    assertThat(event.parentTxId(), is(parentTxId));
+    assertThat(event.compensationMethod(), is(getClass().getCanonicalName()));
+    assertThat(event.payloads().length, is(0));
   }
 }
diff --git 
a/omega/omega-transaction/src/test/java/io/servicecomb/saga/omega/transaction/PreTransactionInterceptorTest.java
 
b/omega/omega-transaction/src/test/java/io/servicecomb/saga/omega/transaction/PreTransactionInterceptorTest.java
index db6a53d..b7b2ec0 100644
--- 
a/omega/omega-transaction/src/test/java/io/servicecomb/saga/omega/transaction/PreTransactionInterceptorTest.java
+++ 
b/omega/omega-transaction/src/test/java/io/servicecomb/saga/omega/transaction/PreTransactionInterceptorTest.java
@@ -18,7 +18,9 @@
 package io.servicecomb.saga.omega.transaction;
 
 import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
-import static org.hamcrest.collection.IsIterableContainingInOrder.contains;
+import static java.util.Arrays.asList;
+import static org.hamcrest.Matchers.contains;
+import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
 
 import java.util.ArrayList;
@@ -28,28 +30,26 @@ import java.util.UUID;
 import org.junit.Test;
 
 public class PreTransactionInterceptorTest {
-  private final List<byte[]> messages = new ArrayList<>();
+  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 = (msg) -> messages.add(
-      serialize(msg.globalTxId(),
-          msg.localTxId(),
-          msg.parentTxId(),
-          (String) msg.payloads()[0]));
+  private final MessageSender sender = messages::add;
 
   private final String message = uniquify("message");
   private final PreTransactionInterceptor interceptor = new 
PreTransactionInterceptor(sender);
 
-  private byte[] serialize(String globalTxId, String localTxId, String 
parentTxId, String message) {
-    return (globalTxId + ":" + localTxId + ":" + parentTxId + ":" + 
message).getBytes();
-  }
-
   @Test
-  public void sendsSerializedMessage() throws Exception {
-    interceptor.intercept(globalTxId, localTxId, parentTxId, message);
+  public void sendsTxStartedEvent() throws Exception {
+    interceptor.intercept(globalTxId, localTxId, parentTxId, 
getClass().getCanonicalName(), message);
+
+    TxEvent event = messages.get(0);
 
-    assertThat(messages, contains(serialize(globalTxId, localTxId, parentTxId, 
message)));
+    assertThat(event.globalTxId(), is(globalTxId));
+    assertThat(event.localTxId(), is(localTxId));
+    assertThat(event.parentTxId(), is(parentTxId));
+    assertThat(event.compensationMethod(), is(getClass().getCanonicalName()));
+    assertThat(asList(event.payloads()), contains(message));
   }
 }
diff --git 
a/pack-contracts/pack-contract-thrift/src/main/java/io/servicecomb/saga/pack/contracts/thrift/SwiftTxEvent.java
 
b/pack-contracts/pack-contract-thrift/src/main/java/io/servicecomb/saga/pack/contracts/thrift/SwiftTxEvent.java
index 75f6e12..9395142 100644
--- 
a/pack-contracts/pack-contract-thrift/src/main/java/io/servicecomb/saga/pack/contracts/thrift/SwiftTxEvent.java
+++ 
b/pack-contracts/pack-contract-thrift/src/main/java/io/servicecomb/saga/pack/contracts/thrift/SwiftTxEvent.java
@@ -29,15 +29,23 @@ public class SwiftTxEvent {
   private final String parentTxId;
   private final String type;
   private final byte[] payloads;
+  private final String compensationMethod;
 
   @ThriftConstructor
-  public SwiftTxEvent(long timestamp, String globalTxId, String localTxId, 
String parentTxId, String type, byte[] payloads) {
+  public SwiftTxEvent(long timestamp,
+      String globalTxId,
+      String localTxId,
+      String parentTxId,
+      String type,
+      String compensationMethod,
+      byte[] payloads) {
     this.timestamp = timestamp;
     this.globalTxId = globalTxId;
     this.localTxId = localTxId;
     this.parentTxId = parentTxId;
     this.type = type;
     this.payloads = payloads;
+    this.compensationMethod = compensationMethod;
   }
 
   @ThriftField(1)
@@ -66,6 +74,11 @@ public class SwiftTxEvent {
   }
 
   @ThriftField(6)
+  public String compensationMethod() {
+    return compensationMethod;
+  }
+
+  @ThriftField(7)
   public byte[] payloads() {
     return payloads;
   }

-- 
To stop receiving notification emails like this one, please contact
"[email protected]" <[email protected]>.

Reply via email to