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 7de3915465f8c39b04dab1e3349c26d6b2a71e6d Author: Daniel Qian <chanjars...@gmail.com> AuthorDate: Sun Apr 1 16:59:56 2018 +0800 refactor method TxEventRepository.findFirstUncompensatedEventByIdGreaterThan() Change method signature from List<TxEvent> findFirstUncompensatedEventByIdGreaterThan(long id, String type); to Optional<TxEvent> findFirstUncompensatedEventByIdGreaterThan(long id); Reasons: 1. this method named "findFirst" and it always returns a list with 1 element or an empty list, so it's better to return Optional<>. 2. this method try to find a TxEndedEvent which is aborted but not compensated, so the parameter type should not be exposed to callers, it should be in internal query logic. --- .../org/apache/servicecomb/saga/alpha/core/EventScanner.java | 4 ++-- .../apache/servicecomb/saga/alpha/core/TxEventRepository.java | 6 +++--- .../servicecomb/saga/alpha/core/TxConsistentServiceTest.java | 4 ++-- .../saga/alpha/server/SpringTxEventRepository.java | 11 +++++++++-- .../saga/alpha/server/TxEventEnvelopeRepository.java | 4 ++-- 5 files changed, 18 insertions(+), 11 deletions(-) diff --git a/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/EventScanner.java b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/EventScanner.java index e18075e..d3fba31 100644 --- a/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/EventScanner.java +++ b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/EventScanner.java @@ -93,8 +93,8 @@ public class EventScanner implements Runnable { } private void saveUncompensatedEventsToCommands() { - eventRepository.findFirstUncompensatedEventByIdGreaterThan(nextEndedEventId, TxEndedEvent.name()) - .forEach(event -> { + eventRepository.findFirstUncompensatedEventByIdGreaterThan(nextEndedEventId) + .ifPresent(event -> { log.info("Found uncompensated event {}", event); nextEndedEventId = event.id(); commandRepository.saveCompensationCommands(event.globalTxId()); diff --git a/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/TxEventRepository.java b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/TxEventRepository.java index 09cebd0..9eceadd 100644 --- a/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/TxEventRepository.java +++ b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/TxEventRepository.java @@ -85,8 +85,9 @@ public interface TxEventRepository { List<TxEvent> findTransactions(String globalTxId, String type); /** - * Find {@link TxEvent}s which satisfy below requirements: + * Find a {@link TxEvent} which satisfies below requirements: * <ol> + * <li>{@link TxEvent#type} equals to {@link EventType#TxEndedEvent}</li> * <li>{@link TxEvent#surrogateId} greater than param <code>id</code></li> * <li>{@link TxEvent#type} equals to param <code>type</code></li> * <li>There is a corresponding <code>TxAbortedEvent</code></li> @@ -94,10 +95,9 @@ public interface TxEventRepository { * </ol> * * @param id - * @param type * @return */ - List<TxEvent> findFirstUncompensatedEventByIdGreaterThan(long id, String type); + Optional<TxEvent> findFirstUncompensatedEventByIdGreaterThan(long id); /** * Find a {@link TxEvent} which satisfies below requirements: diff --git a/alpha/alpha-core/src/test/java/org/apache/servicecomb/saga/alpha/core/TxConsistentServiceTest.java b/alpha/alpha-core/src/test/java/org/apache/servicecomb/saga/alpha/core/TxConsistentServiceTest.java index e80d5a8..da36066 100644 --- a/alpha/alpha-core/src/test/java/org/apache/servicecomb/saga/alpha/core/TxConsistentServiceTest.java +++ b/alpha/alpha-core/src/test/java/org/apache/servicecomb/saga/alpha/core/TxConsistentServiceTest.java @@ -73,8 +73,8 @@ public class TxConsistentServiceTest { } @Override - public List<TxEvent> findFirstUncompensatedEventByIdGreaterThan(long id, String type) { - return emptyList(); + public Optional<TxEvent> findFirstUncompensatedEventByIdGreaterThan(long id) { + return Optional.empty(); } @Override diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/SpringTxEventRepository.java b/alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/SpringTxEventRepository.java index ca6b795..cae6456 100644 --- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/SpringTxEventRepository.java +++ b/alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/SpringTxEventRepository.java @@ -23,6 +23,9 @@ import java.util.Optional; import org.apache.servicecomb.saga.alpha.core.TxEvent; import org.apache.servicecomb.saga.alpha.core.TxEventRepository; import org.springframework.data.domain.PageRequest; +import org.springframework.util.CollectionUtils; + +import javax.swing.text.html.Option; import static org.apache.servicecomb.saga.common.EventType.TxCompensatedEvent; @@ -60,8 +63,12 @@ class SpringTxEventRepository implements TxEventRepository { } @Override - public List<TxEvent> findFirstUncompensatedEventByIdGreaterThan(long id, String type) { - return eventRepo.findFirstByTypeAndSurrogateIdGreaterThan(type, id, SINGLE_TX_EVENT_REQUEST); + public Optional<TxEvent> findFirstUncompensatedEventByIdGreaterThan(long id) { + List<TxEvent> result = eventRepo.findFirstUncompensatedEventByIdGreaterThan(id, SINGLE_TX_EVENT_REQUEST); + if (CollectionUtils.isEmpty(result)) { + return Optional.empty(); + } + return Optional.of(result.get(0)); } @Override diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/TxEventEnvelopeRepository.java b/alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/TxEventEnvelopeRepository.java index 0eaf089..470caa5 100644 --- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/TxEventEnvelopeRepository.java +++ b/alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/TxEventEnvelopeRepository.java @@ -78,7 +78,7 @@ interface TxEventEnvelopeRepository extends CrudRepository<TxEvent, Long> { List<TxEvent> findStartedEventsWithMatchingEndedButNotCompensatedEvents(String globalTxId); @Query("SELECT t FROM TxEvent t " - + "WHERE t.type = ?1 AND t.surrogateId > ?2 AND EXISTS ( " + + "WHERE t.type = 'TxEndedEvent' AND t.surrogateId > ?1 AND EXISTS ( " + " SELECT t1.globalTxId" + " FROM TxEvent t1 " + " WHERE t1.globalTxId = t.globalTxId " @@ -90,7 +90,7 @@ interface TxEventEnvelopeRepository extends CrudRepository<TxEvent, Long> { + " AND t2.localTxId = t.localTxId " + " AND t2.type = 'TxCompensatedEvent') " + "ORDER BY t.surrogateId ASC") - List<TxEvent> findFirstByTypeAndSurrogateIdGreaterThan(String type, long surrogateId, Pageable pageable); + List<TxEvent> findFirstUncompensatedEventByIdGreaterThan(long surrogateId, Pageable pageable); Optional<TxEvent> findFirstByTypeAndSurrogateIdGreaterThan(String type, long surrogateId); -- To stop receiving notification emails like this one, please contact ningji...@apache.org.