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.