You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ni...@apache.org on 2019/12/29 14:51:22 UTC

[servicecomb-pack] branch master updated (40d6e07 -> 898e1ee)

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

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


    from 40d6e07  SCB-1690 omega-transport-resttemplate does not use RestTemplateBuilder
     new b41bbb5  SCB-1695 Use org.mockito.Mockito.any instead of deprecated org.mockito.Matchers.any
     new 898e1ee  SCB-1695 Add attribute mode to @Compensable annotation

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 docs/upgrade_guide/0.6.0-upgrade-guide.md                    |  5 +++++
 docs/upgrade_guide/0.6.0-upgrade-guide_zh.md                 |  6 ++++++
 .../integration/tests/explicitcontext/GreetingService.java   |  3 ++-
 .../pack/integration/tests/resttemplate/GreetingService.java |  3 ++-
 .../transaction/spring/MisconfiguredRetriesService.java      |  3 ++-
 .../omega/transaction/spring/TransactionalUserService.java   |  3 ++-
 .../pack/omega/transaction/RecoveryPolicyFactory.java        | 12 +++++++-----
 .../pack/omega/transaction/TransactionAspect.java            |  5 ++---
 .../pack/omega/transaction/annotations/Compensable.java      |  9 +++++++++
 .../pack/omega/transaction/annotations/CompensableMode.java  |  6 +++---
 .../pack/omega/transaction/DefaultRecoveryTest.java          |  2 +-
 .../pack/omega/transaction/ForwardRecoveryTest.java          |  5 ++++-
 .../pack/omega/transaction/TransactionAspectTest.java        |  3 +++
 13 files changed, 48 insertions(+), 17 deletions(-)
 copy alpha/alpha-core/src/main/java/org/apache/servicecomb/pack/alpha/core/fsm/TransactionType.java => omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/annotations/CompensableMode.java (86%)


[servicecomb-pack] 01/02: SCB-1695 Use org.mockito.Mockito.any instead of deprecated org.mockito.Matchers.any

Posted by ni...@apache.org.
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/servicecomb-pack.git

commit b41bbb534ddee65dd63d7516b6c0463bd39962b7
Author: Lei Zhang <zh...@apache.org>
AuthorDate: Sat Dec 28 17:12:40 2019 +0800

    SCB-1695 Use org.mockito.Mockito.any instead of deprecated org.mockito.Matchers.any
---
 .../apache/servicecomb/pack/omega/transaction/DefaultRecoveryTest.java  | 2 +-
 .../apache/servicecomb/pack/omega/transaction/ForwardRecoveryTest.java  | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/omega/omega-transaction/src/test/java/org/apache/servicecomb/pack/omega/transaction/DefaultRecoveryTest.java b/omega/omega-transaction/src/test/java/org/apache/servicecomb/pack/omega/transaction/DefaultRecoveryTest.java
index 746d696..23b29fa 100644
--- a/omega/omega-transaction/src/test/java/org/apache/servicecomb/pack/omega/transaction/DefaultRecoveryTest.java
+++ b/omega/omega-transaction/src/test/java/org/apache/servicecomb/pack/omega/transaction/DefaultRecoveryTest.java
@@ -21,7 +21,7 @@ import static com.seanyinx.github.unit.scaffolding.AssertUtils.expectFailing;
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.fail;
-import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
diff --git a/omega/omega-transaction/src/test/java/org/apache/servicecomb/pack/omega/transaction/ForwardRecoveryTest.java b/omega/omega-transaction/src/test/java/org/apache/servicecomb/pack/omega/transaction/ForwardRecoveryTest.java
index 867bc34..1d16c93 100644
--- a/omega/omega-transaction/src/test/java/org/apache/servicecomb/pack/omega/transaction/ForwardRecoveryTest.java
+++ b/omega/omega-transaction/src/test/java/org/apache/servicecomb/pack/omega/transaction/ForwardRecoveryTest.java
@@ -23,7 +23,7 @@ import static org.hamcrest.Matchers.containsString;
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.fail;
-import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;


[servicecomb-pack] 02/02: SCB-1695 Add attribute mode to @Compensable annotation

Posted by ni...@apache.org.
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/servicecomb-pack.git

commit 898e1ee5a128590d6a3f082fa23f29407082c48f
Author: Lei Zhang <zh...@apache.org>
AuthorDate: Sun Dec 29 00:16:04 2019 +0800

    SCB-1695 Add attribute mode to @Compensable annotation
---
 docs/upgrade_guide/0.6.0-upgrade-guide.md                 |  5 +++++
 docs/upgrade_guide/0.6.0-upgrade-guide_zh.md              |  6 ++++++
 .../tests/explicitcontext/GreetingService.java            |  3 ++-
 .../integration/tests/resttemplate/GreetingService.java   |  3 ++-
 .../transaction/spring/MisconfiguredRetriesService.java   |  3 ++-
 .../transaction/spring/TransactionalUserService.java      |  3 ++-
 .../pack/omega/transaction/RecoveryPolicyFactory.java     | 12 +++++++-----
 .../pack/omega/transaction/TransactionAspect.java         |  5 ++---
 .../pack/omega/transaction/annotations/Compensable.java   |  9 +++++++++
 .../omega/transaction/annotations/CompensableMode.java}   | 15 +++------------
 .../pack/omega/transaction/ForwardRecoveryTest.java       |  3 +++
 .../pack/omega/transaction/TransactionAspectTest.java     |  3 +++
 12 files changed, 46 insertions(+), 24 deletions(-)

diff --git a/docs/upgrade_guide/0.6.0-upgrade-guide.md b/docs/upgrade_guide/0.6.0-upgrade-guide.md
index 0b1afd1..4ca1f99 100644
--- a/docs/upgrade_guide/0.6.0-upgrade-guide.md
+++ b/docs/upgrade_guide/0.6.0-upgrade-guide.md
@@ -8,3 +8,8 @@ Rename @Compensable annotation property `retries`  to `forwardRetries`
 
 Rename @Compensable annotation property `timeout`  to `forwardTimeout`
 
+Add attribute `mode` to @Compensable annotation, There are three options for attribute values
+
+- forward, it will use the forward recovery
+- reverse, it will use the reverse recovery (default)
+- combine, it will use the first forward then reverse
\ No newline at end of file
diff --git a/docs/upgrade_guide/0.6.0-upgrade-guide_zh.md b/docs/upgrade_guide/0.6.0-upgrade-guide_zh.md
index 4d0ad7d..d089c9e 100644
--- a/docs/upgrade_guide/0.6.0-upgrade-guide_zh.md
+++ b/docs/upgrade_guide/0.6.0-upgrade-guide_zh.md
@@ -8,3 +8,9 @@
 
 @Compensable 注解的 `timeout` 属性改名为 `forwardTimeout`
 
+@Compensable 增加 `mode` 属性 ,可选属性值为以下三种
+
+- forward 正向补偿
+- reverse 反向补偿(默认)
+- combine 组合补偿(先正向补偿,后反向补偿)
+
diff --git a/integration-tests/explicit-transaction-context-tests/src/test/java/org/apache/servicecomb/pack/integration/tests/explicitcontext/GreetingService.java b/integration-tests/explicit-transaction-context-tests/src/test/java/org/apache/servicecomb/pack/integration/tests/explicitcontext/GreetingService.java
index 782412f..7957f45 100644
--- a/integration-tests/explicit-transaction-context-tests/src/test/java/org/apache/servicecomb/pack/integration/tests/explicitcontext/GreetingService.java
+++ b/integration-tests/explicit-transaction-context-tests/src/test/java/org/apache/servicecomb/pack/integration/tests/explicitcontext/GreetingService.java
@@ -21,6 +21,7 @@ import java.util.Queue;
 
 import org.apache.servicecomb.pack.omega.context.TransactionContext;
 import org.apache.servicecomb.pack.omega.transaction.annotations.Compensable;
+import org.apache.servicecomb.pack.omega.transaction.annotations.CompensableMode;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -63,7 +64,7 @@ class GreetingService  {
     return appendMessage("My bad, please take the window instead, " + name);
   }
 
-  @Compensable(forwardRetries = MAX_COUNT, compensationMethod = "close")
+  @Compensable(mode = CompensableMode.forward, forwardRetries = MAX_COUNT, compensationMethod = "close")
   String open(String name, int retries, TransactionContext transactionContext) {
     if (failedCount < retries) {
       failedCount += 1;
diff --git a/integration-tests/pack-tests/src/test/java/org/apache/servicecomb/pack/integration/tests/resttemplate/GreetingService.java b/integration-tests/pack-tests/src/test/java/org/apache/servicecomb/pack/integration/tests/resttemplate/GreetingService.java
index e3758bb..f55677a 100644
--- a/integration-tests/pack-tests/src/test/java/org/apache/servicecomb/pack/integration/tests/resttemplate/GreetingService.java
+++ b/integration-tests/pack-tests/src/test/java/org/apache/servicecomb/pack/integration/tests/resttemplate/GreetingService.java
@@ -20,6 +20,7 @@ package org.apache.servicecomb.pack.integration.tests.resttemplate;
 import java.util.Queue;
 
 import org.apache.servicecomb.pack.omega.transaction.annotations.Compensable;
+import org.apache.servicecomb.pack.omega.transaction.annotations.CompensableMode;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -62,7 +63,7 @@ class GreetingService {
     return appendMessage("My bad, please take the window instead, " + name);
   }
 
-  @Compensable(forwardRetries = MAX_COUNT, compensationMethod = "close")
+  @Compensable(mode = CompensableMode.forward, forwardRetries = MAX_COUNT, compensationMethod = "close")
   String open(String name, int retries) {
     if (failedCount < retries) {
       failedCount += 1;
diff --git a/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/pack/omega/transaction/spring/MisconfiguredRetriesService.java b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/pack/omega/transaction/spring/MisconfiguredRetriesService.java
index f95d99f..2504626 100644
--- a/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/pack/omega/transaction/spring/MisconfiguredRetriesService.java
+++ b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/pack/omega/transaction/spring/MisconfiguredRetriesService.java
@@ -18,6 +18,7 @@
 package org.apache.servicecomb.pack.omega.transaction.spring;
 
 import org.apache.servicecomb.pack.omega.transaction.annotations.Compensable;
+import org.apache.servicecomb.pack.omega.transaction.annotations.CompensableMode;
 import org.springframework.context.annotation.Profile;
 import org.springframework.stereotype.Component;
 
@@ -25,7 +26,7 @@ import org.springframework.stereotype.Component;
 @Component
 class MisconfiguredRetriesService {
 
-  @Compensable(forwardRetries = -2)
+  @Compensable(mode = CompensableMode.forward, forwardRetries = -2)
   void doSomething() {
   }
 }
diff --git a/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/pack/omega/transaction/spring/TransactionalUserService.java b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/pack/omega/transaction/spring/TransactionalUserService.java
index 08030a0..a7b647b 100644
--- a/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/pack/omega/transaction/spring/TransactionalUserService.java
+++ b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/pack/omega/transaction/spring/TransactionalUserService.java
@@ -18,6 +18,7 @@
 package org.apache.servicecomb.pack.omega.transaction.spring;
 
 import org.apache.servicecomb.pack.omega.transaction.annotations.Compensable;
+import org.apache.servicecomb.pack.omega.transaction.annotations.CompensableMode;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
@@ -51,7 +52,7 @@ public class TransactionalUserService {
     userRepository.delete(user);
   }
 
-  @Compensable(forwardRetries = 2, compensationMethod = "delete")
+  @Compensable(mode = CompensableMode.forward, forwardRetries = 2, compensationMethod = "delete")
   public User add(User user, int count) {
     if (this.count < count) {
       this.count += 1;
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/RecoveryPolicyFactory.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/RecoveryPolicyFactory.java
index 33098d9..e84b5d3 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/RecoveryPolicyFactory.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/RecoveryPolicyFactory.java
@@ -17,17 +17,19 @@
 
 package org.apache.servicecomb.pack.omega.transaction;
 
+import org.apache.servicecomb.pack.omega.transaction.annotations.CompensableMode;
+
 public class RecoveryPolicyFactory {
   private static final RecoveryPolicy DEFAULT_RECOVERY = new DefaultRecovery();
 
   private static final RecoveryPolicy FORWARD_RECOVERY = new ForwardRecovery();
 
   /**
-   * If retries == 0, use the default recovery to execute only once.
-   * If retries > 0, it will use the forward recovery and retry the given times at most.
-   * If retries == -1, it will use the forward recovery and retry forever until interrupted.
+   * If mode is reverse, it will use the reverse recovery
+   * If mode is forward, it will use the forward recovery
+   * If mode is combine, it will use the first forward then reverse
    */
-  static RecoveryPolicy getRecoveryPolicy(int retries) {
-    return retries != 0 ? FORWARD_RECOVERY : DEFAULT_RECOVERY;
+  static RecoveryPolicy getRecoveryPolicy(CompensableMode mode) {
+    return mode == CompensableMode.forward ? FORWARD_RECOVERY : DEFAULT_RECOVERY;
   }
 }
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/TransactionAspect.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/TransactionAspect.java
index 826480d..e280b1c 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/TransactionAspect.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/TransactionAspect.java
@@ -63,10 +63,9 @@ public class TransactionAspect extends TransactionContextHelper {
     context.newLocalTxId();
     LOG.debug("Updated context {} for compensable method {} ", context, method.toString());
 
-    int retries = compensable.forwardRetries();
-    RecoveryPolicy recoveryPolicy = RecoveryPolicyFactory.getRecoveryPolicy(retries);
+    RecoveryPolicy recoveryPolicy = RecoveryPolicyFactory.getRecoveryPolicy(compensable.mode());
     try {
-      return recoveryPolicy.apply(joinPoint, compensable, interceptor, context, localTxId, retries);
+      return recoveryPolicy.apply(joinPoint, compensable, interceptor, context, localTxId, compensable.forwardRetries());
     } finally {
       context.setLocalTxId(localTxId);
       LOG.debug("Restored context back to {}", context);
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/annotations/Compensable.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/annotations/Compensable.java
index 8ed5081..7bc7f13 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/annotations/Compensable.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/annotations/Compensable.java
@@ -73,4 +73,13 @@ public @interface Compensable {
    */
   int forwardTimeout() default 0;
 
+  /**
+   * Compensation mode. <br>
+   * Default value is reverse
+   * value is forward, it will use the forward recovery
+   * value is reverse, it will use the reverse recovery
+   * value is combine, first forward then reverse
+   * @return compensable mode enum value
+   */
+  CompensableMode mode() default CompensableMode.reverse;
 }
diff --git a/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/pack/omega/transaction/spring/MisconfiguredRetriesService.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/annotations/CompensableMode.java
similarity index 67%
copy from omega/omega-spring-tx/src/test/java/org/apache/servicecomb/pack/omega/transaction/spring/MisconfiguredRetriesService.java
copy to omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/annotations/CompensableMode.java
index f95d99f..9ec563a 100644
--- a/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/pack/omega/transaction/spring/MisconfiguredRetriesService.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/annotations/CompensableMode.java
@@ -15,17 +15,8 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.pack.omega.transaction.spring;
+package org.apache.servicecomb.pack.omega.transaction.annotations;
 
-import org.apache.servicecomb.pack.omega.transaction.annotations.Compensable;
-import org.springframework.context.annotation.Profile;
-import org.springframework.stereotype.Component;
-
-@Profile("annotation-retries-checking")
-@Component
-class MisconfiguredRetriesService {
-
-  @Compensable(forwardRetries = -2)
-  void doSomething() {
-  }
+public enum CompensableMode {
+  forward, reverse, combine
 }
diff --git a/omega/omega-transaction/src/test/java/org/apache/servicecomb/pack/omega/transaction/ForwardRecoveryTest.java b/omega/omega-transaction/src/test/java/org/apache/servicecomb/pack/omega/transaction/ForwardRecoveryTest.java
index 1d16c93..753780e 100644
--- a/omega/omega-transaction/src/test/java/org/apache/servicecomb/pack/omega/transaction/ForwardRecoveryTest.java
+++ b/omega/omega-transaction/src/test/java/org/apache/servicecomb/pack/omega/transaction/ForwardRecoveryTest.java
@@ -40,6 +40,7 @@ import org.apache.servicecomb.pack.contract.grpc.ServerMeta;
 import org.apache.servicecomb.pack.omega.context.IdGenerator;
 import org.apache.servicecomb.pack.omega.context.OmegaContext;
 import org.apache.servicecomb.pack.omega.transaction.annotations.Compensable;
+import org.apache.servicecomb.pack.omega.transaction.annotations.CompensableMode;
 import org.aspectj.lang.ProceedingJoinPoint;
 import org.aspectj.lang.reflect.MethodSignature;
 import org.junit.Before;
@@ -144,6 +145,7 @@ public class ForwardRecoveryTest {
   @Test
   public void throwExceptionWhenRetryReachesMaximum() throws Throwable {
     when(compensable.forwardRetries()).thenReturn(2);
+    when(compensable.mode()).thenReturn(CompensableMode.forward);
     when(joinPoint.proceed()).thenThrow(oops);
 
     try {
@@ -166,6 +168,7 @@ public class ForwardRecoveryTest {
   public void keepRetryingTillInterrupted() throws Throwable {
     when(compensable.forwardRetries()).thenReturn(-1);
     when(compensable.retryDelayInMilliseconds()).thenReturn(1000);
+    when(compensable.mode()).thenReturn(CompensableMode.forward);
     when(joinPoint.proceed()).thenThrow(oops);
 
     Thread thread = new Thread(new Runnable() {
diff --git a/omega/omega-transaction/src/test/java/org/apache/servicecomb/pack/omega/transaction/TransactionAspectTest.java b/omega/omega-transaction/src/test/java/org/apache/servicecomb/pack/omega/transaction/TransactionAspectTest.java
index 39a32c4..4eb45e4 100644
--- a/omega/omega-transaction/src/test/java/org/apache/servicecomb/pack/omega/transaction/TransactionAspectTest.java
+++ b/omega/omega-transaction/src/test/java/org/apache/servicecomb/pack/omega/transaction/TransactionAspectTest.java
@@ -42,6 +42,7 @@ import org.apache.servicecomb.pack.omega.context.IdGenerator;
 import org.apache.servicecomb.pack.omega.context.OmegaContext;
 import org.apache.servicecomb.pack.omega.context.TransactionContextProperties;
 import org.apache.servicecomb.pack.omega.transaction.annotations.Compensable;
+import org.apache.servicecomb.pack.omega.transaction.annotations.CompensableMode;
 import org.aspectj.lang.ProceedingJoinPoint;
 import org.aspectj.lang.reflect.MethodSignature;
 import org.junit.Before;
@@ -310,6 +311,7 @@ public class TransactionAspectTest {
     RuntimeException oops = new RuntimeException("oops");
     when(joinPoint.proceed()).thenThrow(oops);
     when(compensable.forwardRetries()).thenReturn(3);
+    when(compensable.mode()).thenReturn(CompensableMode.forward);
 
     try {
       aspect.advise(joinPoint, compensable);
@@ -354,6 +356,7 @@ public class TransactionAspectTest {
     RuntimeException oops = new RuntimeException("oops");
     when(joinPoint.proceed()).thenThrow(oops).thenThrow(oops).thenReturn(null);
     when(compensable.forwardRetries()).thenReturn(-1);
+    when(compensable.mode()).thenReturn(CompensableMode.forward);
 
     aspect.advise(joinPoint, compensable);