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 <wuji...@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);