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 2018/04/02 03:22:47 UTC

[incubator-servicecomb-saga] 04/04: refactor method TxEventRepository.findFirstUncompensatedEventByIdGreaterThan()

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 <ch...@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
ningjiang@apache.org.