You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by GitBox <gi...@apache.org> on 2018/08/21 14:19:38 UTC

[GitHub] WillemJiang closed pull request #261: [SCB-745] Applying Builder Pattern on AlphaClusterConfig.

WillemJiang closed pull request #261: [SCB-745] Applying Builder Pattern on AlphaClusterConfig.
URL: https://github.com/apache/incubator-servicecomb-saga/pull/261
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/omega/omega-connector/omega-connector-grpc/src/main/java/org/apache/servicecomb/saga/omega/connector/grpc/AlphaClusterConfig.java b/omega/omega-connector/omega-connector-grpc/src/main/java/org/apache/servicecomb/saga/omega/connector/grpc/AlphaClusterConfig.java
index c7aa6647..a8641b43 100644
--- a/omega/omega-connector/omega-connector-grpc/src/main/java/org/apache/servicecomb/saga/omega/connector/grpc/AlphaClusterConfig.java
+++ b/omega/omega-connector/omega-connector-grpc/src/main/java/org/apache/servicecomb/saga/omega/connector/grpc/AlphaClusterConfig.java
@@ -17,9 +17,14 @@
 
 package org.apache.servicecomb.saga.omega.connector.grpc;
 
+import java.util.Collections;
 import java.util.List;
+import org.apache.servicecomb.saga.omega.transaction.MessageDeserializer;
+import org.apache.servicecomb.saga.omega.transaction.MessageHandler;
+import org.apache.servicecomb.saga.omega.transaction.MessageSerializer;
 
 public class AlphaClusterConfig {
+
   private List<String> addresses;
 
   private boolean enableSSL;
@@ -32,13 +37,23 @@
 
   private String certChain;
 
+  private MessageSerializer messageSerializer;
+
+  private MessageDeserializer messageDeserializer;
+
+  private MessageHandler messageHandler;
+
+  /**
+   * @deprecated Use {@link Builder} instead.
+   */
+  @Deprecated
   public AlphaClusterConfig(List<String> addresses,
       boolean enableSSL,
       boolean enableMutualAuth,
       String cert,
       String key,
       String certChain) {
-    this.addresses = addresses;
+    this.addresses = addresses == null ? Collections.<String>emptyList() : addresses;
     this.enableMutualAuth = enableMutualAuth;
     this.enableSSL = enableSSL;
     this.cert = cert;
@@ -46,6 +61,97 @@ public AlphaClusterConfig(List<String> addresses,
     this.certChain = certChain;
   }
 
+  private AlphaClusterConfig(List<String> addresses, boolean enableSSL, boolean enableMutualAuth,
+      String cert, String key, String certChain,
+      MessageSerializer messageSerializer,
+      MessageDeserializer messageDeserializer,
+      MessageHandler messageHandler) {
+    this.addresses = addresses;
+    this.enableSSL = enableSSL;
+    this.enableMutualAuth = enableMutualAuth;
+    this.cert = cert;
+    this.key = key;
+    this.certChain = certChain;
+    this.messageSerializer = messageSerializer;
+    this.messageDeserializer = messageDeserializer;
+    this.messageHandler = messageHandler;
+  }
+
+  public static Builder builder() {
+    return new Builder();
+  }
+
+  public static final class Builder {
+
+    private List<String> addresses;
+    private boolean enableSSL;
+    private boolean enableMutualAuth;
+    private String cert;
+    private String key;
+    private String certChain;
+    private MessageSerializer messageSerializer;
+    private MessageDeserializer messageDeserializer;
+    private MessageHandler messageHandler;
+
+    public Builder addresses(List<String> addresses) {
+      this.addresses = addresses;
+      return this;
+    }
+
+    public Builder enableSSL(boolean enableSSL) {
+      this.enableSSL = enableSSL;
+      return this;
+    }
+
+    public Builder enableMutualAuth(boolean enableMutualAuth) {
+      this.enableMutualAuth = enableMutualAuth;
+      return this;
+    }
+
+    public Builder cert(String cert) {
+      this.cert = cert;
+      return this;
+    }
+
+    public Builder key(String key) {
+      this.key = key;
+      return this;
+    }
+
+    public Builder certChain(String certChain) {
+      this.certChain = certChain;
+      return this;
+    }
+
+    public Builder messageSerializer(MessageSerializer messageSerializer) {
+      this.messageSerializer = messageSerializer;
+      return this;
+    }
+
+    public Builder messageDeserializer(MessageDeserializer messageDeserializer) {
+      this.messageDeserializer = messageDeserializer;
+      return this;
+    }
+
+    public Builder messageHandler(MessageHandler messageHandler) {
+      this.messageHandler = messageHandler;
+      return this;
+    }
+
+
+    public AlphaClusterConfig build() {
+      return new AlphaClusterConfig(this.addresses,
+          this.enableSSL,
+          this.enableMutualAuth,
+          this.cert,
+          this.key,
+          this.certChain,
+          this.messageSerializer,
+          this.messageDeserializer,
+          messageHandler);
+    }
+  }
+
   public List<String> getAddresses() {
     return addresses;
   }
@@ -69,4 +175,16 @@ public String getKey() {
   public String getCertChain() {
     return certChain;
   }
-}
+
+  public MessageSerializer getMessageSerializer() {
+    return messageSerializer;
+  }
+
+  public MessageDeserializer getMessageDeserializer() {
+    return messageDeserializer;
+  }
+
+  public MessageHandler getMessageHandler() {
+    return messageHandler;
+  }
+}
\ No newline at end of file
diff --git a/omega/omega-connector/omega-connector-grpc/src/main/java/org/apache/servicecomb/saga/omega/connector/grpc/LoadBalancedClusterMessageSender.java b/omega/omega-connector/omega-connector-grpc/src/main/java/org/apache/servicecomb/saga/omega/connector/grpc/LoadBalancedClusterMessageSender.java
index 42c0d522..a2933447 100644
--- a/omega/omega-connector/omega-connector-grpc/src/main/java/org/apache/servicecomb/saga/omega/connector/grpc/LoadBalancedClusterMessageSender.java
+++ b/omega/omega-connector/omega-connector-grpc/src/main/java/org/apache/servicecomb/saga/omega/connector/grpc/LoadBalancedClusterMessageSender.java
@@ -45,10 +45,7 @@
 import javax.net.ssl.SSLException;
 import org.apache.servicecomb.saga.omega.context.ServiceConfig;
 import org.apache.servicecomb.saga.omega.transaction.AlphaResponse;
-import org.apache.servicecomb.saga.omega.transaction.MessageDeserializer;
-import org.apache.servicecomb.saga.omega.transaction.MessageHandler;
 import org.apache.servicecomb.saga.omega.transaction.MessageSender;
-import org.apache.servicecomb.saga.omega.transaction.MessageSerializer;
 import org.apache.servicecomb.saga.omega.transaction.OmegaException;
 import org.apache.servicecomb.saga.omega.transaction.TxEvent;
 import org.slf4j.Logger;
@@ -75,13 +72,10 @@ public MessageSender get() {
   private final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
 
   public LoadBalancedClusterMessageSender(AlphaClusterConfig clusterConfig,
-      MessageSerializer serializer,
-      MessageDeserializer deserializer,
       ServiceConfig serviceConfig,
-      MessageHandler handler,
       int reconnectDelay) {
 
-    if (clusterConfig.getAddresses().size() == 0) {
+    if (clusterConfig.getAddresses().isEmpty()) {
       throw new IllegalArgumentException("No reachable cluster address provided");
     }
 
@@ -112,11 +106,11 @@ public LoadBalancedClusterMessageSender(AlphaClusterConfig clusterConfig,
           new GrpcClientMessageSender(
               address,
               channel,
-              serializer,
-              deserializer,
+              clusterConfig.getMessageSerializer(),
+              clusterConfig.getMessageDeserializer(),
               serviceConfig,
               new ErrorHandlerFactory(),
-              handler),
+              clusterConfig.getMessageHandler()),
           0L);
     }
 
@@ -257,11 +251,9 @@ public MessageSender pick(Map<MessageSender, Long> messageSenders,
     Long min = Long.MAX_VALUE;
     MessageSender sender = null;
     for (Map.Entry<MessageSender, Long> entry : messageSenders.entrySet()) {
-      if (entry.getValue() != Long.MAX_VALUE) {
-        if (min > entry.getValue()) {
-          min = entry.getValue();
-          sender = entry.getKey();
-        }
+      if (entry.getValue() != Long.MAX_VALUE && min > entry.getValue()) {
+        min = entry.getValue();
+        sender = entry.getKey();
       }
     }
     if (sender == null) {
diff --git a/omega/omega-connector/omega-connector-grpc/src/test/java/org/apache/servicecomb/saga/omega/connector/grpc/LoadBalanceClusterMessageSenderWithTLSTest.java b/omega/omega-connector/omega-connector-grpc/src/test/java/org/apache/servicecomb/saga/omega/connector/grpc/LoadBalanceClusterMessageSenderWithTLSTest.java
index 822c7ec3..6de7c01a 100644
--- a/omega/omega-connector/omega-connector-grpc/src/test/java/org/apache/servicecomb/saga/omega/connector/grpc/LoadBalanceClusterMessageSenderWithTLSTest.java
+++ b/omega/omega-connector/omega-connector-grpc/src/test/java/org/apache/servicecomb/saga/omega/connector/grpc/LoadBalanceClusterMessageSenderWithTLSTest.java
@@ -24,43 +24,45 @@
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.fail;
 
+import com.google.common.collect.ImmutableList;
+import io.grpc.Server;
+import io.grpc.ServerBuilder;
+import io.grpc.netty.GrpcSslContexts;
+import io.grpc.netty.NettyServerBuilder;
+import io.netty.handler.ssl.ClientAuth;
+import io.netty.handler.ssl.SslContextBuilder;
+import io.netty.handler.ssl.SslProvider;
 import java.io.File;
 import java.io.IOException;
 import java.net.InetSocketAddress;
 import java.util.Arrays;
 import java.util.concurrent.Callable;
-
 import javax.net.ssl.SSLException;
-
 import org.apache.servicecomb.saga.omega.context.ServiceConfig;
 import org.apache.servicecomb.saga.omega.transaction.MessageSender;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-import io.grpc.Server;
-import io.grpc.ServerBuilder;
-import io.grpc.netty.GrpcSslContexts;
-import io.grpc.netty.NettyServerBuilder;
-import io.netty.handler.ssl.ClientAuth;
-import io.netty.handler.ssl.SslContextBuilder;
-import io.netty.handler.ssl.SslProvider;
-
 public class LoadBalanceClusterMessageSenderWithTLSTest extends LoadBalancedClusterMessageSenderTestBase {
 
   @Override
   protected MessageSender newMessageSender(String[] addresses) {
     ClassLoader classLoader = getClass().getClassLoader();
-    AlphaClusterConfig clusterConfig = new AlphaClusterConfig(Arrays.asList(addresses),
-        true, true,
-        classLoader.getResource("client.crt").getFile(),
-        classLoader.getResource("client.pem").getFile(),
-        classLoader.getResource("ca.crt").getFile());
+    AlphaClusterConfig clusterConfig = AlphaClusterConfig.builder()
+        .addresses(ImmutableList.copyOf(addresses))
+        .enableMutualAuth(true)
+        .enableSSL(true)
+        .cert(classLoader.getResource("client.crt").getFile())
+        .messageHandler(handler)
+        .key(classLoader.getResource("client.pem").getFile())
+        .certChain(classLoader.getResource("ca.crt").getFile())
+        .messageSerializer(serializer)
+        .messageDeserializer(deserializer)
+        .build();
+
     return new LoadBalancedClusterMessageSender(
         clusterConfig,
-        serializer,
-        deserializer,
         new ServiceConfig(serviceName),
-        handler,
         100);
   }
 
diff --git a/omega/omega-connector/omega-connector-grpc/src/test/java/org/apache/servicecomb/saga/omega/connector/grpc/LoadBalancedClusterMessageSenderTest.java b/omega/omega-connector/omega-connector-grpc/src/test/java/org/apache/servicecomb/saga/omega/connector/grpc/LoadBalancedClusterMessageSenderTest.java
index e353cdfc..491e15f5 100644
--- a/omega/omega-connector/omega-connector-grpc/src/test/java/org/apache/servicecomb/saga/omega/connector/grpc/LoadBalancedClusterMessageSenderTest.java
+++ b/omega/omega-connector/omega-connector-grpc/src/test/java/org/apache/servicecomb/saga/omega/connector/grpc/LoadBalancedClusterMessageSenderTest.java
@@ -18,7 +18,6 @@
 package org.apache.servicecomb.saga.omega.connector.grpc;
 
 import static com.seanyinx.github.unit.scaffolding.AssertUtils.expectFailing;
-import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
 import static java.lang.Thread.State.WAITING;
 import static java.util.concurrent.TimeUnit.SECONDS;
 import static org.awaitility.Awaitility.await;
@@ -30,52 +29,35 @@
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
+import com.google.common.collect.ImmutableList;
+import io.grpc.Server;
+import io.grpc.ServerBuilder;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Queue;
 import java.util.concurrent.Callable;
-import java.util.concurrent.ConcurrentLinkedQueue;
-
-import org.apache.servicecomb.saga.common.EventType;
 import org.apache.servicecomb.saga.omega.context.ServiceConfig;
-import org.apache.servicecomb.saga.omega.transaction.MessageDeserializer;
-import org.apache.servicecomb.saga.omega.transaction.MessageHandler;
 import org.apache.servicecomb.saga.omega.transaction.MessageSender;
-import org.apache.servicecomb.saga.omega.transaction.MessageSerializer;
 import org.apache.servicecomb.saga.omega.transaction.OmegaException;
 import org.apache.servicecomb.saga.omega.transaction.TxAbortedEvent;
 import org.apache.servicecomb.saga.omega.transaction.TxEvent;
 import org.apache.servicecomb.saga.omega.transaction.TxStartedEvent;
-import org.apache.servicecomb.saga.pack.contract.grpc.GrpcAck;
-import org.apache.servicecomb.saga.pack.contract.grpc.GrpcCompensateCommand;
-import org.apache.servicecomb.saga.pack.contract.grpc.GrpcServiceConfig;
-import org.apache.servicecomb.saga.pack.contract.grpc.GrpcTxEvent;
-import org.apache.servicecomb.saga.pack.contract.grpc.TxEventServiceGrpc.TxEventServiceImplBase;
-import org.junit.After;
-import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.mockito.Mockito;
 
-import io.grpc.Server;
-import io.grpc.ServerBuilder;
-import io.grpc.stub.StreamObserver;
-
 public class LoadBalancedClusterMessageSenderTest extends LoadBalancedClusterMessageSenderTestBase {
   @Override
   protected MessageSender newMessageSender(String[] addresses) {
-    AlphaClusterConfig clusterConfig = new AlphaClusterConfig(Arrays.asList(addresses),
-        false, false, null,null,null);
+    AlphaClusterConfig clusterConfig = AlphaClusterConfig.builder()
+        .addresses(ImmutableList.copyOf(addresses))
+        .enableSSL(false)
+        .enableMutualAuth(false)
+        .messageSerializer(serializer)
+        .messageDeserializer(deserializer)
+        .messageHandler(handler)
+        .build();
     return new LoadBalancedClusterMessageSender(
         clusterConfig,
-        serializer,
-        deserializer,
         new ServiceConfig(serviceName),
-        handler,
         100);
   }
 
diff --git a/omega/omega-spring-starter/src/main/java/org/apache/servicecomb/saga/omega/spring/OmegaSpringConfig.java b/omega/omega-spring-starter/src/main/java/org/apache/servicecomb/saga/omega/spring/OmegaSpringConfig.java
index 51324e78..217e102f 100644
--- a/omega/omega-spring-starter/src/main/java/org/apache/servicecomb/saga/omega/spring/OmegaSpringConfig.java
+++ b/omega/omega-spring-starter/src/main/java/org/apache/servicecomb/saga/omega/spring/OmegaSpringConfig.java
@@ -17,9 +17,7 @@
 
 package org.apache.servicecomb.saga.omega.spring;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-
+import com.google.common.collect.ImmutableList;
 import org.apache.servicecomb.saga.omega.connector.grpc.AlphaClusterConfig;
 import org.apache.servicecomb.saga.omega.connector.grpc.LoadBalancedClusterMessageSender;
 import org.apache.servicecomb.saga.omega.context.CompensationContext;
@@ -31,7 +29,6 @@
 import org.apache.servicecomb.saga.omega.format.MessageFormat;
 import org.apache.servicecomb.saga.omega.transaction.MessageHandler;
 import org.apache.servicecomb.saga.omega.transaction.MessageSender;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
@@ -74,14 +71,21 @@ MessageSender grpcMessageSender(
       @Lazy MessageHandler handler) {
 
     MessageFormat messageFormat = new KryoMessageFormat();
-    AlphaClusterConfig clusterConfig = new AlphaClusterConfig(Arrays.asList(addresses),
-        enableSSL, mutualAuth, cert, key, certChain);
+    AlphaClusterConfig clusterConfig = AlphaClusterConfig.builder()
+        .addresses(ImmutableList.copyOf(addresses))
+        .enableSSL(enableSSL)
+        .enableMutualAuth(mutualAuth)
+        .cert(cert)
+        .key(key)
+        .certChain(certChain)
+        .messageDeserializer(messageFormat)
+        .messageSerializer(messageFormat)
+        .messageHandler(handler)
+        .build();
+
     final MessageSender sender = new LoadBalancedClusterMessageSender(
         clusterConfig,
-        messageFormat,
-        messageFormat,
         serviceConfig,
-        handler,
         reconnectDelay);
 
     sender.onConnected();


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services