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 f75e0b9bff120d42b7c334302635b6ecb2b09da8
Author: zhang2014 <cos...@gmail.com>
AuthorDate: Sun Jan 14 13:31:39 2018 +0800

    SCB-224 alpha support retries event
---
 .../saga/alpha/core/CompositeOmegaCallback.java    | 50 +++++++++++-----------
 .../servicecomb/saga/alpha/core/TxEvent.java       |  5 +--
 2 files changed, 26 insertions(+), 29 deletions(-)

diff --git 
a/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/CompositeOmegaCallback.java
 
b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/CompositeOmegaCallback.java
index bce8f4b..b1c7e09 100644
--- 
a/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/CompositeOmegaCallback.java
+++ 
b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/CompositeOmegaCallback.java
@@ -17,9 +17,9 @@
 
 package org.apache.servicecomb.saga.alpha.core;
 
-import static java.util.Collections.emptyMap;
-
 import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
 
 public class CompositeOmegaCallback implements OmegaCallback {
   private final Map<String, Map<String, OmegaCallback>> callbacks;
@@ -30,43 +30,43 @@ public class CompositeOmegaCallback implements 
OmegaCallback {
 
   @Override
   public void retries(TxEvent event) {
-    Map<String, OmegaCallback> serviceCallbacks = 
callbacks.getOrDefault(event.serviceName(), emptyMap());
-
-    if (serviceCallbacks.isEmpty()) {
-      throw new AlphaException("No such omega callback found for service " + 
event.serviceName());
-    }
-
-    OmegaCallback omegaCallback = serviceCallbacks.get(event.instanceId());
-    if (omegaCallback == null) {
-      omegaCallback = serviceCallbacks.values().iterator().next();
-    }
+    OmegaCallback omegaCallback = callbackFor(event);
 
     try {
-      omegaCallback.compensate(event);
+      omegaCallback.retries(event);
     } catch (Exception e) {
-      serviceCallbacks.values().remove(omegaCallback);
+      removeEventCallback(event, omegaCallback);
       throw e;
     }
   }
 
   @Override
   public void compensate(TxEvent event) {
-    Map<String, OmegaCallback> serviceCallbacks = 
callbacks.getOrDefault(event.serviceName(), emptyMap());
-
-    if (serviceCallbacks.isEmpty()) {
-      throw new AlphaException("No such omega callback found for service " + 
event.serviceName());
-    }
-
-    OmegaCallback omegaCallback = serviceCallbacks.get(event.instanceId());
-    if (omegaCallback == null) {
-      omegaCallback = serviceCallbacks.values().iterator().next();
-    }
+    OmegaCallback omegaCallback = callbackFor(event);
 
     try {
       omegaCallback.compensate(event);
     } catch (Exception e) {
-      serviceCallbacks.values().remove(omegaCallback);
+      removeEventCallback(event, omegaCallback);
       throw e;
     }
   }
+
+  private OmegaCallback callbackFor(String instanceId, Map<String, 
OmegaCallback> serviceCallbacks) {
+    OmegaCallback omegaCallback = serviceCallbacks.get(instanceId);
+    if (Objects.isNull(omegaCallback)) {
+      return serviceCallbacks.values().iterator().next();
+    }
+    return omegaCallback;
+  }
+
+  private OmegaCallback callbackFor(TxEvent event) {
+    return 
Optional.ofNullable(callbacks.get(event.serviceName())).filter(callbacks -> 
!callbacks.isEmpty())
+        .map(serviceCallbacks -> callbackFor(event.instanceId(), 
serviceCallbacks))
+        .orElseThrow(() -> new AlphaException("No such omega callback found 
for service " + event.serviceName()));
+  }
+
+  private void removeEventCallback(TxEvent event, OmegaCallback omegaCallback) 
{
+    callbacks.get(event.serviceName()).values().remove(omegaCallback);
+  }
 }
diff --git 
a/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/TxEvent.java
 
b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/TxEvent.java
index 5176ce0..5426e8b 100644
--- 
a/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/TxEvent.java
+++ 
b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/TxEvent.java
@@ -17,16 +17,12 @@
 
 package org.apache.servicecomb.saga.alpha.core;
 
-import static java.util.concurrent.TimeUnit.SECONDS;
-
 import java.util.Date;
 
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
-import javax.persistence.Table;
-import javax.persistence.Transient;
 
 @Entity
 @Table(name = "TxEvent")
@@ -209,6 +205,7 @@ public class TxEvent {
         ", expiryTime='" + expiryTime + '\'' +
         '}';
   }
+
   public int retries() {
     return retries;
   }

-- 
To stop receiving notification emails like this one, please contact
ningji...@apache.org.

Reply via email to