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>.