You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2021/03/26 07:00:57 UTC

[servicecomb-java-chassis] branch master updated: [SCB-2243] zero-config remove @Conditional to not trigger configuration bug (#2321)

This is an automated email from the ASF dual-hosted git repository.

liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git


The following commit(s) were added to refs/heads/master by this push:
     new 05ee92a  [SCB-2243] zero-config remove @Conditional to not trigger configuration bug (#2321)
05ee92a is described below

commit 05ee92ac5a2943c84998d71a1045fee4e8875d00
Author: wujimin <wu...@huawei.com>
AuthorDate: Fri Mar 26 15:00:50 2021 +0800

    [SCB-2243] zero-config remove @Conditional to not trigger configuration bug (#2321)
---
 ...itionOnMulticast.java => AbstractModeCondition.java} | 13 +++++++++----
 .../java/org/apache/servicecomb/zeroconfig/Config.java  | 17 +++++++++++++++++
 .../apache/servicecomb/zeroconfig/ZeroConfigConst.java  |  2 +-
 .../servicecomb/zeroconfig/local/ConditionOnLocal.java  | 12 +++++-------
 .../servicecomb/zeroconfig/local/LocalRegistration.java |  9 +++++++--
 .../zeroconfig/multicast/ConditionOnMulticast.java      | 12 +++++-------
 .../servicecomb/zeroconfig/multicast/Multicast.java     |  9 +++++++--
 .../zeroconfig/multicast/MulticastRegistration.java     |  9 +++++++--
 .../zeroconfig/multicast/MulticastServer.java           |  8 ++++++--
 9 files changed, 64 insertions(+), 27 deletions(-)

diff --git a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/multicast/ConditionOnMulticast.java b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/AbstractModeCondition.java
similarity index 73%
copy from service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/multicast/ConditionOnMulticast.java
copy to service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/AbstractModeCondition.java
index 656498c..4f3bbbe 100644
--- a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/multicast/ConditionOnMulticast.java
+++ b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/AbstractModeCondition.java
@@ -15,19 +15,24 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.zeroconfig.multicast;
+package org.apache.servicecomb.zeroconfig;
 
+import static org.apache.servicecomb.zeroconfig.ZeroConfigConst.CFG_ENABLED;
 import static org.apache.servicecomb.zeroconfig.ZeroConfigConst.CFG_MODE;
-import static org.apache.servicecomb.zeroconfig.ZeroConfigConst.MODE_MULTICAST;
 
 import org.springframework.context.annotation.Condition;
 import org.springframework.context.annotation.ConditionContext;
 import org.springframework.core.type.AnnotatedTypeMetadata;
 
-public class ConditionOnMulticast implements Condition {
+// currently can not work with spring caused by servicecomb configuration bug
+// no problem to work with springboot
+public abstract class AbstractModeCondition implements Condition {
   @Override
   public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
+    boolean enabled = context.getEnvironment().getProperty(CFG_ENABLED, boolean.class, true);
     String mode = context.getEnvironment().getProperty(CFG_MODE);
-    return mode == null || MODE_MULTICAST.equals(mode);
+    return enabled && modeMatches(mode);
   }
+
+  protected abstract boolean modeMatches(String mode);
 }
diff --git a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/Config.java b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/Config.java
index 2356c41..d1b11e7 100644
--- a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/Config.java
+++ b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/Config.java
@@ -22,12 +22,15 @@ import static org.apache.servicecomb.zeroconfig.ZeroConfigConst.CFG_ENABLED;
 import static org.apache.servicecomb.zeroconfig.ZeroConfigConst.CFG_GROUP;
 import static org.apache.servicecomb.zeroconfig.ZeroConfigConst.CFG_HEARTBEAT_INTERVAL;
 import static org.apache.servicecomb.zeroconfig.ZeroConfigConst.CFG_HEARTBEAT_LOST_TIMES;
+import static org.apache.servicecomb.zeroconfig.ZeroConfigConst.CFG_MODE;
 import static org.apache.servicecomb.zeroconfig.ZeroConfigConst.CFG_PULL_INTERVAL;
 import static org.apache.servicecomb.zeroconfig.ZeroConfigConst.DEFAULT_ADDRESS;
 import static org.apache.servicecomb.zeroconfig.ZeroConfigConst.DEFAULT_GROUP;
 import static org.apache.servicecomb.zeroconfig.ZeroConfigConst.DEFAULT_HEARTBEAT_INTERVAL;
 import static org.apache.servicecomb.zeroconfig.ZeroConfigConst.DEFAULT_HEARTBEAT_LOST_TIMES;
 import static org.apache.servicecomb.zeroconfig.ZeroConfigConst.DEFAULT_PULL_INTERVAL;
+import static org.apache.servicecomb.zeroconfig.ZeroConfigConst.MODE_LOCAL;
+import static org.apache.servicecomb.zeroconfig.ZeroConfigConst.MODE_MULTICAST;
 
 import java.time.Duration;
 
@@ -45,10 +48,24 @@ public class Config {
     return this;
   }
 
+  // delete after support @Conditional
+  public boolean isLocal() {
+    return isEnabled() && MODE_LOCAL.equals(getMode());
+  }
+
+  // delete after support @Conditional
+  public boolean isMulticast() {
+    return isEnabled() && MODE_MULTICAST.equals(getMode());
+  }
+
   public boolean isEnabled() {
     return dynamicProperties.getBooleanProperty(CFG_ENABLED, true);
   }
 
+  public String getMode() {
+    return dynamicProperties.getStringProperty(CFG_MODE, MODE_MULTICAST);
+  }
+
   public String getAddress() {
     return dynamicProperties.getStringProperty(CFG_ADDRESS, DEFAULT_ADDRESS);
   }
diff --git a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/ZeroConfigConst.java b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/ZeroConfigConst.java
index 2aa13e2..4188acb 100644
--- a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/ZeroConfigConst.java
+++ b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/ZeroConfigConst.java
@@ -50,5 +50,5 @@ public interface ZeroConfigConst {
 
   String MODE_LOCAL = "local";
 
-  int ORDER = 101;
+  int ORDER = -100;
 }
diff --git a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/local/ConditionOnLocal.java b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/local/ConditionOnLocal.java
index 7fc3ab8..582d74b 100644
--- a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/local/ConditionOnLocal.java
+++ b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/local/ConditionOnLocal.java
@@ -17,17 +17,15 @@
 
 package org.apache.servicecomb.zeroconfig.local;
 
-import static org.apache.servicecomb.zeroconfig.ZeroConfigConst.CFG_MODE;
 import static org.apache.servicecomb.zeroconfig.ZeroConfigConst.MODE_LOCAL;
 
-import org.springframework.context.annotation.Condition;
-import org.springframework.context.annotation.ConditionContext;
-import org.springframework.core.type.AnnotatedTypeMetadata;
+import org.apache.servicecomb.zeroconfig.AbstractModeCondition;
 
-public class ConditionOnLocal implements Condition {
+// currently can not work with spring caused by servicecomb configuration bug
+// no problem to work with springboot
+public class ConditionOnLocal extends AbstractModeCondition {
   @Override
-  public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
-    String mode = context.getEnvironment().getProperty(CFG_MODE);
+  protected boolean modeMatches(String mode) {
     return MODE_LOCAL.equals(mode);
   }
 }
diff --git a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/local/LocalRegistration.java b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/local/LocalRegistration.java
index 6607624..e9e33c0 100644
--- a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/local/LocalRegistration.java
+++ b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/local/LocalRegistration.java
@@ -24,14 +24,13 @@ import org.apache.servicecomb.registry.lightweight.RegisterRequest;
 import org.apache.servicecomb.registry.lightweight.UnregisterRequest;
 import org.apache.servicecomb.zeroconfig.AbstractZeroConfigRegistration;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Conditional;
 import org.springframework.stereotype.Component;
 
 /**
  * for single node environments
  */
 @Component
-@Conditional(ConditionOnLocal.class)
+//@Conditional(ConditionOnLocal.class)
 public class LocalRegistration extends AbstractZeroConfigRegistration {
   private static final String NAME = "zero-config-local";
 
@@ -48,6 +47,12 @@ public class LocalRegistration extends AbstractZeroConfigRegistration {
     return NAME;
   }
 
+  // delete after support @Conditional
+  @Override
+  public boolean enabled() {
+    return config.isLocal();
+  }
+
   @Override
   protected void doSendRegister() {
     Message<RegisterRequest> message = Message.of(MessageType.REGISTER, self.buildRegisterRequest());
diff --git a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/multicast/ConditionOnMulticast.java b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/multicast/ConditionOnMulticast.java
index 656498c..8cefcc5 100644
--- a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/multicast/ConditionOnMulticast.java
+++ b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/multicast/ConditionOnMulticast.java
@@ -17,17 +17,15 @@
 
 package org.apache.servicecomb.zeroconfig.multicast;
 
-import static org.apache.servicecomb.zeroconfig.ZeroConfigConst.CFG_MODE;
 import static org.apache.servicecomb.zeroconfig.ZeroConfigConst.MODE_MULTICAST;
 
-import org.springframework.context.annotation.Condition;
-import org.springframework.context.annotation.ConditionContext;
-import org.springframework.core.type.AnnotatedTypeMetadata;
+import org.apache.servicecomb.zeroconfig.AbstractModeCondition;
 
-public class ConditionOnMulticast implements Condition {
+// currently can not work with spring caused by servicecomb configuration bug
+// no problem to work with springboot
+public class ConditionOnMulticast extends AbstractModeCondition {
   @Override
-  public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
-    String mode = context.getEnvironment().getProperty(CFG_MODE);
+  protected boolean modeMatches(String mode) {
     return mode == null || MODE_MULTICAST.equals(mode);
   }
 }
diff --git a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/multicast/Multicast.java b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/multicast/Multicast.java
index 7d07b26..92cedfc 100644
--- a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/multicast/Multicast.java
+++ b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/multicast/Multicast.java
@@ -31,13 +31,12 @@ import org.apache.servicecomb.zeroconfig.Config;
 import org.apache.servicecomb.zeroconfig.ZeroConfigConst;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.context.annotation.Conditional;
 import org.springframework.stereotype.Component;
 
 import com.google.common.net.HostAndPort;
 
 @Component
-@Conditional(ConditionOnMulticast.class)
+//@Conditional(ConditionOnMulticast.class)
 public class Multicast {
   private static final Logger LOGGER = LoggerFactory.getLogger(Multicast.class);
 
@@ -58,6 +57,12 @@ public class Multicast {
     LOGGER.info("zero config, address: {}", bindAddress);
     LOGGER.info("zero config, group: {}", group);
 
+    // delete after support @Conditional
+    if (!config.isMulticast()) {
+      multicastSocket = null;
+      return;
+    }
+
     this.multicastSocket = new MulticastSocket(bindAddress);
     this.multicastSocket.joinGroup(group);
     this.multicastSocket.setSoTimeout((int) TimeUnit.SECONDS.toMillis(5));
diff --git a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/multicast/MulticastRegistration.java b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/multicast/MulticastRegistration.java
index f2788bd..9bb569a 100644
--- a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/multicast/MulticastRegistration.java
+++ b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/multicast/MulticastRegistration.java
@@ -23,13 +23,12 @@ import org.apache.servicecomb.registry.lightweight.RegisterInstanceEvent;
 import org.apache.servicecomb.zeroconfig.AbstractZeroConfigRegistration;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Conditional;
 import org.springframework.stereotype.Component;
 
 import com.google.common.eventbus.Subscribe;
 
 @Component
-@Conditional(ConditionOnMulticast.class)
+//@Conditional(ConditionOnMulticast.class)
 @SuppressWarnings("UnstableApiUsage")
 public class MulticastRegistration extends AbstractZeroConfigRegistration implements InitializingBean {
   private static final String NAME = "zero-config-multicast";
@@ -47,6 +46,12 @@ public class MulticastRegistration extends AbstractZeroConfigRegistration implem
     return NAME;
   }
 
+  // delete after support @Conditional
+  @Override
+  public boolean enabled() {
+    return config.isMulticast();
+  }
+
   @Override
   public void afterPropertiesSet() {
     eventBus.register(this);
diff --git a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/multicast/MulticastServer.java b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/multicast/MulticastServer.java
index c0d04d1..7be3a63 100644
--- a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/multicast/MulticastServer.java
+++ b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/multicast/MulticastServer.java
@@ -25,11 +25,10 @@ import org.apache.servicecomb.registry.lightweight.MessageExecutor;
 import org.apache.servicecomb.zeroconfig.Config;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.context.annotation.Conditional;
 import org.springframework.stereotype.Component;
 
 @Component
-@Conditional(ConditionOnMulticast.class)
+//@Conditional(ConditionOnMulticast.class)
 @SuppressWarnings("unused")
 public class MulticastServer {
   private static final Logger LOGGER = LoggerFactory.getLogger(MulticastServer.class);
@@ -42,6 +41,11 @@ public class MulticastServer {
     this.multicast = multicast;
     this.messageExecutor = messageExecutor;
 
+    // delete after support @Conditional
+    if (!config.isMulticast()) {
+      return;
+    }
+
     Executors
         .newSingleThreadExecutor(runnable -> new Thread(runnable, "multicast-server-recv"))
         .execute(this::recv);