You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by se...@apache.org on 2018/01/10 01:00:30 UTC
[incubator-servicecomb-saga] 04/04: SCB-173 move context init from
request to preInterceptor
This is an automated email from the ASF dual-hosted git repository.
seanyinx pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-saga.git
commit b93e79527eead2a6c3e06c36cc27d2ab65003458
Author: Eric Lee <da...@huawei.com>
AuthorDate: Tue Jan 9 21:51:36 2018 +0800
SCB-173 move context init from request to preInterceptor
Signed-off-by: Eric Lee <da...@huawei.com>
---
.../spring/CompensableMethodCheckingCallback.java | 7 +++---
.../transaction/SagaStartAnnotationProcessor.java | 9 +------
.../saga/omega/transaction/TransactionAspect.java | 13 ++++++++++
.../SagaStartAnnotationProcessorTest.java | 4 +--
.../TransactionClientHttpRequestInterceptor.java | 29 +++-------------------
...ransactionClientHttpRequestInterceptorTest.java | 14 +++--------
6 files changed, 26 insertions(+), 50 deletions(-)
diff --git a/omega/omega-spring-tx/src/main/java/org/apache/servicecomb/saga/omega/transaction/spring/CompensableMethodCheckingCallback.java b/omega/omega-spring-tx/src/main/java/org/apache/servicecomb/saga/omega/transaction/spring/CompensableMethodCheckingCallback.java
index 2793109..ac6615c 100644
--- a/omega/omega-spring-tx/src/main/java/org/apache/servicecomb/saga/omega/transaction/spring/CompensableMethodCheckingCallback.java
+++ b/omega/omega-spring-tx/src/main/java/org/apache/servicecomb/saga/omega/transaction/spring/CompensableMethodCheckingCallback.java
@@ -21,13 +21,12 @@ import java.lang.invoke.MethodHandles;
import java.lang.reflect.Method;
import org.apache.servicecomb.saga.omega.context.OmegaContext;
+import org.apache.servicecomb.saga.omega.transaction.OmegaException;
+import org.apache.servicecomb.saga.omega.transaction.annotations.Compensable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.ReflectionUtils.MethodCallback;
-import org.apache.servicecomb.saga.omega.transaction.OmegaException;
-import org.apache.servicecomb.saga.omega.transaction.annotations.Compensable;
-
class CompensableMethodCheckingCallback implements MethodCallback {
private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
@@ -40,7 +39,7 @@ class CompensableMethodCheckingCallback implements MethodCallback {
}
@Override
- public void doWith(Method method) throws IllegalArgumentException, IllegalAccessException {
+ public void doWith(Method method) throws IllegalArgumentException {
if (!method.isAnnotationPresent(Compensable.class)) {
return;
}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAnnotationProcessor.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAnnotationProcessor.java
index b058570..e92ebb1 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAnnotationProcessor.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAnnotationProcessor.java
@@ -31,7 +31,7 @@ public class SagaStartAnnotationProcessor {
}
void preIntercept() {
- String globalTxId = initChildContext();
+ String globalTxId = omegaContext.newGlobalTxId();
// reuse the globalTxId as localTxId to differ localTxId in SagaStartedEvent and the first TxStartedEvent
sender.send(new SagaStartedEvent(globalTxId, globalTxId));
}
@@ -40,11 +40,4 @@ public class SagaStartAnnotationProcessor {
String globalTxId = omegaContext.globalTxId();
sender.send(new SagaEndedEvent(globalTxId, globalTxId));
}
-
- private String initChildContext() {
- String globalTxId = omegaContext.newGlobalTxId();
- omegaContext.newLocalTxId();
- omegaContext.setParentTxId(globalTxId);
- return globalTxId;
- }
}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TransactionAspect.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TransactionAspect.java
index fca7305..bf13e3a 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TransactionAspect.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TransactionAspect.java
@@ -95,6 +95,9 @@ public class TransactionAspect {
}
private void preIntercept(ProceedingJoinPoint joinPoint, String signature) {
+ // context without a parent should be the first TxStartedEvent
+ initFirstOmegaContext();
+
preTransactionInterceptor.intercept(
context.globalTxId(),
context.localTxId(),
@@ -119,4 +122,14 @@ public class TransactionAspect {
signature,
throwable);
}
+
+ private void initFirstOmegaContext() {
+ if (context.parentTxId() != null) {
+ return;
+ }
+ if (context.localTxId() == null) {
+ context.newLocalTxId();
+ }
+ context.setParentTxId(context.globalTxId());
+ }
}
diff --git a/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAnnotationProcessorTest.java b/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAnnotationProcessorTest.java
index 64735f0..8913b7f 100644
--- a/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAnnotationProcessorTest.java
+++ b/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAnnotationProcessorTest.java
@@ -56,8 +56,8 @@ public class SagaStartAnnotationProcessorTest {
sagaStartAnnotationProcessor.preIntercept();
assertThat(context.globalTxId(), is(globalTxId));
- assertThat(context.localTxId(), is(localTxId));
- assertThat(context.parentTxId(), is(globalTxId));
+ assertThat(context.localTxId(), is(nullValue()));
+ assertThat(context.parentTxId(), is(nullValue()));
TxEvent event = messages.get(0);
diff --git a/omega/omega-transport/omega-transport-resttemplate/src/main/java/org/apache/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptor.java b/omega/omega-transport/omega-transport-resttemplate/src/main/java/org/apache/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptor.java
index 6d7c428..5e69598 100644
--- a/omega/omega-transport/omega-transport-resttemplate/src/main/java/org/apache/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptor.java
+++ b/omega/omega-transport/omega-transport-resttemplate/src/main/java/org/apache/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptor.java
@@ -19,11 +19,8 @@
package org.apache.servicecomb.saga.omega.transport.resttemplate;
import java.io.IOException;
-import java.lang.invoke.MethodHandles;
import org.apache.servicecomb.saga.omega.context.OmegaContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.springframework.http.HttpRequest;
import org.springframework.http.client.ClientHttpRequestExecution;
import org.springframework.http.client.ClientHttpRequestInterceptor;
@@ -31,8 +28,6 @@ import org.springframework.http.client.ClientHttpResponse;
class TransactionClientHttpRequestInterceptor implements ClientHttpRequestInterceptor {
- private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-
private final OmegaContext omegaContext;
TransactionClientHttpRequestInterceptor(OmegaContext omegaContext) {
@@ -43,26 +38,10 @@ class TransactionClientHttpRequestInterceptor implements ClientHttpRequestInterc
public ClientHttpResponse intercept(HttpRequest request, byte[] body,
ClientHttpRequestExecution execution) throws IOException {
- request.getHeaders().add(OmegaContext.GLOBAL_TX_ID_KEY, globalTxId());
- request.getHeaders().add(OmegaContext.LOCAL_TX_ID_KEY, localTxId());
- return execution.execute(request, body);
- }
-
- private String globalTxId() {
- String globalTxId = omegaContext.globalTxId();
-
- if (globalTxId == null) {
- LOG.error("Global tx id should not be null.");
+ if (omegaContext.globalTxId() != null) {
+ request.getHeaders().add(OmegaContext.GLOBAL_TX_ID_KEY, omegaContext.globalTxId());
+ request.getHeaders().add(OmegaContext.LOCAL_TX_ID_KEY, omegaContext.localTxId());
}
- return globalTxId;
- }
-
- private String localTxId() {
- String localTxId = omegaContext.localTxId();
-
- if (localTxId == null) {
- LOG.error("Local tx id should not be null of global tx {}.", omegaContext.globalTxId());
- }
- return localTxId;
+ return execution.execute(request, body);
}
}
diff --git a/omega/omega-transport/omega-transport-resttemplate/src/test/java/org/apache/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptorTest.java b/omega/omega-transport/omega-transport-resttemplate/src/test/java/org/apache/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptorTest.java
index 371c0de..14e288e 100644
--- a/omega/omega-transport/omega-transport-resttemplate/src/test/java/org/apache/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptorTest.java
+++ b/omega/omega-transport/omega-transport-resttemplate/src/test/java/org/apache/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptorTest.java
@@ -20,7 +20,6 @@ package org.apache.servicecomb.saga.omega.transport.resttemplate;
import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
import static org.hamcrest.Matchers.contains;
-import static org.hamcrest.Matchers.nullValue;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
@@ -66,22 +65,18 @@ public class TransactionClientHttpRequestInterceptorTest {
}
@Test
- public void transactionIdInHeaderIsNullIfNonExists() throws IOException {
+ public void keepHeaderUnchangedIfContextAbsent() throws IOException {
when(request.getHeaders()).thenReturn(new HttpHeaders());
when(execution.execute(request, null)).thenReturn(response);
clientHttpRequestInterceptor.intercept(request, null, execution);
- assertThat(request.getHeaders().get(OmegaContext.GLOBAL_TX_ID_KEY), contains(nullValue()));
- assertThat(request.getHeaders().get(OmegaContext.LOCAL_TX_ID_KEY), contains(nullValue()));
-
- assertThat(omegaContext.globalTxId(), is(nullValue()));
- assertThat(omegaContext.localTxId(), is(nullValue()));
+ assertThat(request.getHeaders().isEmpty(), is(true));
}
@Test
- public void sameTransactionIdInHeaderIfAlreadyExists() throws IOException {
+ public void interceptTransactionIdInHeaderIfContextPresent() throws IOException {
omegaContext.setGlobalTxId(globalTxId);
omegaContext.setLocalTxId(localTxId);
@@ -93,8 +88,5 @@ public class TransactionClientHttpRequestInterceptorTest {
assertThat(request.getHeaders().get(OmegaContext.GLOBAL_TX_ID_KEY), contains(globalTxId));
assertThat(request.getHeaders().get(OmegaContext.LOCAL_TX_ID_KEY), contains(localTxId));
-
- assertThat(omegaContext.globalTxId(), is(globalTxId));
- assertThat(omegaContext.localTxId(), is(localTxId));
}
}
--
To stop receiving notification emails like this one, please contact
"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>.