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.