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 2017/12/27 04:55:09 UTC
[incubator-servicecomb-saga] 02/11: SCB-96 retrieve ids in header
and put it into omega context
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 ed86c2e8aa4e665f41f4e4eca11ed79bb35b624d
Author: Eric Lee <da...@huawei.com>
AuthorDate: Tue Dec 26 16:41:37 2017 +0800
SCB-96 retrieve ids in header and put it into omega context
Signed-off-by: Eric Lee <da...@huawei.com>
---
.../saga/omega/transaction/TxEndedEvent.java | 4 +-
.../saga/omega/transaction/TxStartedEvent.java | 4 +-
.../TransactionHandlerInterceptor.java | 39 +++----
.../omega/transport/resttemplate/WebConfig.java | 14 +--
.../TransactionHandlerInterceptorTest.java | 113 ++++-----------------
5 files changed, 44 insertions(+), 130 deletions(-)
diff --git a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEndedEvent.java b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEndedEvent.java
index c24c1b3..6cc8f79 100644
--- a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEndedEvent.java
+++ b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEndedEvent.java
@@ -17,8 +17,8 @@
package io.servicecomb.saga.omega.transaction;
-public class TxEndedEvent extends TxEvent {
- public TxEndedEvent(String globalTxId, String localTxId, String parentTxId) {
+class TxEndedEvent extends TxEvent {
+ TxEndedEvent(String globalTxId, String localTxId, String parentTxId) {
super(globalTxId, localTxId, parentTxId);
}
}
diff --git a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxStartedEvent.java b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxStartedEvent.java
index c278f54..830104f 100644
--- a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxStartedEvent.java
+++ b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxStartedEvent.java
@@ -17,9 +17,9 @@
package io.servicecomb.saga.omega.transaction;
-public class TxStartedEvent extends TxEvent {
+class TxStartedEvent extends TxEvent {
- public TxStartedEvent(String globalTxId, String localTxId, String parentTxId, Object[] payloads) {
+ TxStartedEvent(String globalTxId, String localTxId, String parentTxId, Object[] payloads) {
super(globalTxId, localTxId, parentTxId, payloads);
}
}
diff --git a/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptor.java b/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptor.java
index 56df07d..6363e4f 100644
--- a/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptor.java
+++ b/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptor.java
@@ -33,55 +33,42 @@ import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
-import io.servicecomb.saga.omega.transaction.MessageSender;
-import io.servicecomb.saga.omega.transaction.MessageSerializer;
-import io.servicecomb.saga.omega.transaction.TxEndedEvent;
-import io.servicecomb.saga.omega.transaction.TxStartedEvent;
+import io.servicecomb.saga.omega.context.OmegaContext;
public class TransactionHandlerInterceptor implements HandlerInterceptor {
private static Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
- private final MessageSender sender;
+ private final OmegaContext omegaContext;
- private final MessageSerializer serializer;
-
- public TransactionHandlerInterceptor(MessageSender sender, MessageSerializer serializer) {
- this.sender = sender;
- this.serializer = serializer;
+ public TransactionHandlerInterceptor(OmegaContext omegaContext) {
+ this.omegaContext = omegaContext;
}
@Override
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
String globalTxId = request.getHeader(GLOBAL_TX_ID_KEY);
if (globalTxId == null) {
LOG.info("no such header: {}", GLOBAL_TX_ID_KEY);
+ } else {
+ omegaContext.setGlobalTxId(globalTxId);
}
- String localTxId = request.getHeader(LOCAL_TX_ID_KEY);
- if (localTxId == null) {
+ String parentTxId = request.getHeader(LOCAL_TX_ID_KEY);
+ if (parentTxId == null) {
LOG.info("no such header: {}", LOCAL_TX_ID_KEY);
+ } else {
+ omegaContext.setParentTxId(parentTxId);
}
- // TODO: 12/25/2017 which content should be inside payloads?
- sender.send(serializer.serialize(new TxStartedEvent(globalTxId, localTxId, null, null)));
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o,
- ModelAndView modelAndView) throws Exception {
+ ModelAndView modelAndView) {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object o,
- Exception e) throws Exception {
- String globalTxId = request.getHeader(GLOBAL_TX_ID_KEY);
- if (globalTxId == null) {
- LOG.info("no such header: {}", GLOBAL_TX_ID_KEY);
- }
- String localTxId = request.getHeader(LOCAL_TX_ID_KEY);
- if (localTxId == null) {
- LOG.info("no such header: {}", LOCAL_TX_ID_KEY);
- }
- sender.send(serializer.serialize(new TxEndedEvent(globalTxId, localTxId, null)));
+ Exception e) {
}
}
diff --git a/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/WebConfig.java b/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/WebConfig.java
index 7d4fe7f..7650d3c 100644
--- a/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/WebConfig.java
+++ b/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/WebConfig.java
@@ -26,25 +26,21 @@ import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
-import io.servicecomb.saga.omega.transaction.MessageSender;
-import io.servicecomb.saga.omega.transaction.MessageSerializer;
+import io.servicecomb.saga.omega.context.OmegaContext;
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
- private MessageSender sender;
-
- private MessageSerializer serializer;
+ private final OmegaContext omegaContext;
@Autowired
- public WebConfig(MessageSender sender, MessageSerializer serializer) {
- this.sender = sender;
- this.serializer = serializer;
+ public WebConfig(OmegaContext omegaContext) {
+ this.omegaContext = omegaContext;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
- registry.addInterceptor(new TransactionHandlerInterceptor(sender, serializer));
+ registry.addInterceptor(new TransactionHandlerInterceptor(omegaContext));
}
}
diff --git a/omega/omega-transport/omega-transport-resttemplate/src/test/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptorTest.java b/omega/omega-transport/omega-transport-resttemplate/src/test/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptorTest.java
index 6d447f5..a6c29cb 100644
--- a/omega/omega-transport/omega-transport-resttemplate/src/test/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptorTest.java
+++ b/omega/omega-transport/omega-transport-resttemplate/src/test/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptorTest.java
@@ -21,132 +21,63 @@ package io.servicecomb.saga.omega.transport.resttemplate;
import static io.servicecomb.saga.omega.transport.resttemplate.TransactionClientHttpRequestInterceptor.GLOBAL_TX_ID_KEY;
import static io.servicecomb.saga.omega.transport.resttemplate.TransactionClientHttpRequestInterceptor.LOCAL_TX_ID_KEY;
import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.nullValue;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.junit.After;
+import org.junit.Before;
import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.web.servlet.HandlerInterceptor;
-import io.servicecomb.saga.omega.transaction.MessageSender;
-import io.servicecomb.saga.omega.transaction.MessageSerializer;
-import io.servicecomb.saga.omega.transport.resttemplate.TransactionHandlerInterceptorTest.MessageConfig;
+import io.servicecomb.saga.omega.context.OmegaContext;
-@RunWith(SpringRunner.class)
-@Import({MessageConfig.class})
public class TransactionHandlerInterceptorTest {
- private static final String TX_STARTED_EVENT = "TxStartedEvent";
- private static final String TX_ENDED_EVENT = "TxEndedEvent";
- private static final String globalTxId = UUID.randomUUID().toString();
- private static final String localTxId = UUID.randomUUID().toString();
- @Autowired
- private MessageSender sender;
+ private static final String globalTxId = UUID.randomUUID().toString();
- @Autowired
- private MessageSerializer serializer;
+ private static final String localTxId = UUID.randomUUID().toString();
- @Autowired
- private TransactionHandlerInterceptor requestInterceptor;
+ private final OmegaContext omegaContext = new OmegaContext();
- @Autowired
- private List<byte[]> messages;
+ private HandlerInterceptor requestInterceptor = new TransactionHandlerInterceptor(omegaContext);
private HttpServletRequest request = mock(HttpServletRequest.class);
private HttpServletResponse response = mock(HttpServletResponse.class);
- @After
- public void tearDown() throws Exception {
- messages.clear();
+ @Before
+ public void setUp() {
+ omegaContext.setGlobalTxId(null);
+ omegaContext.setLocalTxId(null);
+ omegaContext.setParentTxId(null);
}
@Test
- public void preInterceptHeaderValueAndSendOut() throws Exception {
+ public void setUpOmegaContextInTransactionRequest() throws Exception {
when(request.getHeader(GLOBAL_TX_ID_KEY)).thenReturn(globalTxId);
when(request.getHeader(LOCAL_TX_ID_KEY)).thenReturn(localTxId);
requestInterceptor.preHandle(request, response, null);
- assertThat(messages.size(), is(1));
- String deserializedString = new String(messages.get(0));
- assertThat(deserializedString.contains(TX_STARTED_EVENT), is(true));
- assertThat(deserializedString.startsWith(globalTxId), is(true));
- assertThat(deserializedString.contains(localTxId), is(true));
+ assertThat(omegaContext.globalTxId(), is(globalTxId));
+ assertThat(omegaContext.parentTxId(), is(localTxId));
}
@Test
- public void postInterceptHeaderValueAndSendOut() throws Exception {
- when(request.getHeader(GLOBAL_TX_ID_KEY)).thenReturn(globalTxId);
- when(request.getHeader(LOCAL_TX_ID_KEY)).thenReturn(localTxId);
-
- requestInterceptor.afterCompletion(request, response, null, null);
+ public void doNothingInNonTransactionRequest() throws Exception {
+ when(request.getHeader(GLOBAL_TX_ID_KEY)).thenReturn(null);
+ when(request.getHeader(LOCAL_TX_ID_KEY)).thenReturn(null);
- assertThat(messages.size(), is(1));
- String deserializedString = new String(messages.get(0));
- assertThat(deserializedString.contains(TX_ENDED_EVENT), is(true));
- assertThat(deserializedString.startsWith(globalTxId), is(true));
- assertThat(deserializedString.contains(localTxId), is(true));
- }
-
- @Configuration
- static class MessageConfig {
- private final List<byte[]> messages = new ArrayList<>();
-
- @Bean
- List<byte[]> messages() {
- return messages;
- }
-
- @Bean
- MessageSender sender() {
- return messages::add;
- }
-
- @Bean
- MessageSerializer serializer() {
- return event -> {
- if (TX_STARTED_EVENT.equals(event.type())) {
- return txStartedEvent(event.globalTxId(),
- event.localTxId(),
- event.parentTxId(),
- event.payloads()).getBytes();
- }
- return txEndedEvent(event.globalTxId(),
- event.localTxId(),
- event.parentTxId()).getBytes();
- };
- }
-
- @Bean
- HandlerInterceptor handlerInterceptor(MessageSender sender, MessageSerializer serializer) {
- return new TransactionHandlerInterceptor(sender, serializer);
- }
- }
-
- private static String txStartedEvent(String globalTxId,
- String localTxId,
- String parentTxId,
- Object[] payloads) {
- return globalTxId + ":" + localTxId + ":" + parentTxId + ":" + TX_STARTED_EVENT + ":" + Arrays.toString(payloads);
- }
+ requestInterceptor.preHandle(request, response, null);
- private static String txEndedEvent(String globalTxId, String localTxId, String parentTxId) {
- return globalTxId + ":" + localTxId + ":" + parentTxId + ":" + TX_ENDED_EVENT;
+ assertThat(omegaContext.globalTxId(), is(nullValue()));
+ assertThat(omegaContext.parentTxId(), is(nullValue()));
+ assertThat(omegaContext.localTxId(), is(nullValue()));
}
}
\ No newline at end of file
--
To stop receiving notification emails like this one, please contact
"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>.