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 489e8c05d0551b4d5480a9ea8666606e5e0f8428
Author: seanyinx <sean....@huawei.com>
AuthorDate: Sat Dec 23 17:58:44 2017 +0800

    SCB-96 made sure context is cleaned up on compensation
    
    Signed-off-by: seanyinx <sean....@huawei.com>
---
 .../java/io/servicecomb/saga/omega/context/OmegaContext.java     | 9 ++++++++-
 .../omega/transaction/spring/TransactionInterceptionTest.java    | 2 ++
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git 
a/omega/omega-context/src/main/java/io/servicecomb/saga/omega/context/OmegaContext.java
 
b/omega/omega-context/src/main/java/io/servicecomb/saga/omega/context/OmegaContext.java
index 8b41d9a..17c6246 100644
--- 
a/omega/omega-context/src/main/java/io/servicecomb/saga/omega/context/OmegaContext.java
+++ 
b/omega/omega-context/src/main/java/io/servicecomb/saga/omega/context/OmegaContext.java
@@ -57,6 +57,10 @@ public class OmegaContext {
     compensationContexts.put(id, new CompensationContext(target, 
compensationMethod, args));
   }
 
+  public boolean containsContext(String globalTxId) {
+    return compensationContexts.containsKey(globalTxId);
+  }
+
   public void compensate(String globalTxId) {
     CompensationContext compensationContext = 
compensationContexts.get(globalTxId);
 
@@ -64,8 +68,11 @@ public class OmegaContext {
       invokeMethod(compensationContext);
     } catch (NoSuchMethodException | IllegalAccessException | 
InvocationTargetException e) {
       throw new IllegalStateException(
-          "Pre-checking for compensate method " + 
compensationContext.compensationMethod + " was somehow skipped",
+          "Pre-checking for compensate method " + 
compensationContext.compensationMethod
+              + " was somehow skipped, did you forget to configure compensable 
method checking on service startup?",
           e);
+    } finally {
+      compensationContexts.remove(globalTxId);
     }
   }
 
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 27ee479..dc80f2f 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
@@ -108,6 +108,8 @@ public class TransactionInterceptionTest {
 
     User actual = userRepository.findOne(user.id());
     assertThat(actual, is(nullValue()));
+
+    assertThat(omegaContext.containsContext(globalTxId), is(false));
   }
 
   private List<String> toString(List<byte[]> messages) {

-- 
To stop receiving notification emails like this one, please contact
"commits@servicecomb.apache.org" <commits@servicecomb.apache.org>.

Reply via email to