diff --git a/oap-server/server-configuration/configuration-api/src/main/java/org/apache/skywalking/oap/server/configuration/api/ConfigWatcherRegister.java b/oap-server/server-configuration/configuration-api/src/main/java/org/apache/skywalking/oap/server/configuration/api/ConfigWatcherRegister.java index 7bc1e092e150ed794d55227b67c7af767a8c33a4..8028f1a32fd3e08d0e5f49ccfca124646d053106 100644 --- a/oap-server/server-configuration/configuration-api/src/main/java/org/apache/skywalking/oap/server/configuration/api/ConfigWatcherRegister.java +++ b/oap-server/server-configuration/configuration-api/src/main/java/org/apache/skywalking/oap/server/configuration/api/ConfigWatcherRegister.java @@ -64,12 +64,12 @@ public abstract class ConfigWatcherRegister implements DynamicConfigurationServi logger.info("Current configurations after the bootstrap sync." + LINE_SEPARATOR + register.toString()); Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate( - new RunnableWithExceptionProtection(() -> configSync(), + new RunnableWithExceptionProtection(this::configSync, t -> logger.error("Sync config center error.", t)), syncPeriod, syncPeriod, TimeUnit.SECONDS); } void configSync() { - ConfigTable configTable = readConfig(); + ConfigTable configTable = readConfig(register.keys()); configTable.getItems().forEach(item -> { String itemName = item.getName(); @@ -99,7 +99,7 @@ public abstract class ConfigWatcherRegister implements DynamicConfigurationServi logger.trace("Current configurations after the sync." + LINE_SEPARATOR + register.toString()); } - public abstract ConfigTable readConfig(); + public abstract ConfigTable readConfig(Set keys); public class Register { private Map register = new HashMap<>(); @@ -116,6 +116,10 @@ public abstract class ConfigWatcherRegister implements DynamicConfigurationServi return register.get(name); } + public Set keys() { + return register.keySet(); + } + @Override public String toString() { StringBuilder registerTableDescription = new StringBuilder(); registerTableDescription.append("Following dynamic config items are available.").append(LINE_SEPARATOR); diff --git a/oap-server/server-configuration/configuration-api/src/test/java/org/apache/skywalking/oap/server/configuration/api/ConfigWatcherRegisterTest.java b/oap-server/server-configuration/configuration-api/src/test/java/org/apache/skywalking/oap/server/configuration/api/ConfigWatcherRegisterTest.java index 159837e34ebdb83ed8f3e6f02f1f080167a50458..037d23d123b1d4b9395729638b329ebe1ab399cf 100644 --- a/oap-server/server-configuration/configuration-api/src/test/java/org/apache/skywalking/oap/server/configuration/api/ConfigWatcherRegisterTest.java +++ b/oap-server/server-configuration/configuration-api/src/test/java/org/apache/skywalking/oap/server/configuration/api/ConfigWatcherRegisterTest.java @@ -22,6 +22,8 @@ import org.apache.skywalking.oap.server.library.module.*; import org.junit.*; import org.powermock.reflect.Whitebox; +import java.util.Set; + /** * @author wusheng */ @@ -80,7 +82,7 @@ public class ConfigWatcherRegisterTest { public static class MockConfigWatcherRegister extends ConfigWatcherRegister { - @Override public ConfigTable readConfig() { + @Override public ConfigTable readConfig(Set keys) { ConfigTable.ConfigItem item1 = new ConfigTable.ConfigItem("module.provider.prop1", "abc"); ConfigTable.ConfigItem item2 = new ConfigTable.ConfigItem("MockModule.provider.prop2", "abc2"); diff --git a/oap-server/server-configuration/grpc-configuration-sync/src/main/java/org/apache/skywalking/oap/server/configuration/grpc/GRPCConfigWatcherRegister.java b/oap-server/server-configuration/grpc-configuration-sync/src/main/java/org/apache/skywalking/oap/server/configuration/grpc/GRPCConfigWatcherRegister.java index e883ec35c0eabcf5da9bd4ab36d75720c1ea9aa5..e3b9f0a55e0a5f36b4e1018435bc7550d16a8b89 100644 --- a/oap-server/server-configuration/grpc-configuration-sync/src/main/java/org/apache/skywalking/oap/server/configuration/grpc/GRPCConfigWatcherRegister.java +++ b/oap-server/server-configuration/grpc-configuration-sync/src/main/java/org/apache/skywalking/oap/server/configuration/grpc/GRPCConfigWatcherRegister.java @@ -23,6 +23,8 @@ import org.apache.skywalking.oap.server.configuration.api.*; import org.apache.skywalking.oap.server.configuration.service.*; import org.slf4j.*; +import java.util.Set; + /** * @author wusheng */ @@ -38,12 +40,15 @@ public class GRPCConfigWatcherRegister extends ConfigWatcherRegister { stub = ConfigurationServiceGrpc.newBlockingStub(NettyChannelBuilder.forAddress(settings.getHost(), settings.getPort()).usePlaintext().build()); } - @Override public ConfigTable readConfig() { + @Override public ConfigTable readConfig(Set keys) { ConfigTable table = new ConfigTable(); try { ConfigurationResponse response = stub.call(ConfigurationRequest.newBuilder().setClusterName(settings.getClusterName()).build()); response.getConfigTableList().forEach(config -> { - table.add(new ConfigTable.ConfigItem(config.getName(), config.getValue())); + final String name = config.getName(); + if (keys.contains(name)) { + table.add(new ConfigTable.ConfigItem(name, config.getValue())); + } }); } catch (Exception e) { logger.error("Remote config center [" + settings + "] is not available.", e);