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);