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 5dbec1954 [#4004] fixed firstPull address choose logic (#4017)
5dbec1954 is described below
commit 5dbec19546caed77d9e93f5198884dde161f0147
Author: Cheng YouLing <[email protected]>
AuthorDate: Mon Nov 13 19:18:40 2023 +0800
[#4004] fixed firstPull address choose logic (#4017)
---
.../config/center/client/ConfigCenterClient.java | 3 +-
.../config/center/client/ConfigCenterManager.java | 10 +++--
.../center/client/ConfigCenterOperation.java | 3 +-
.../servicecomb/config/kie/client/KieClient.java | 3 +-
.../config/kie/client/KieConfigManager.java | 52 +++++++++++++++-------
.../config/kie/client/KieConfigOperation.java | 3 +-
.../cc/ConfigCenterDynamicPropertiesSource.java | 23 +++++-----
.../config/kie/KieDynamicPropertiesSource.java | 3 +-
8 files changed, 63 insertions(+), 37 deletions(-)
diff --git
a/clients/config-center-client/src/main/java/org/apache/servicecomb/config/center/client/ConfigCenterClient.java
b/clients/config-center-client/src/main/java/org/apache/servicecomb/config/center/client/ConfigCenterClient.java
index a8ee3b99e..f41fbd228 100644
---
a/clients/config-center-client/src/main/java/org/apache/servicecomb/config/center/client/ConfigCenterClient.java
+++
b/clients/config-center-client/src/main/java/org/apache/servicecomb/config/center/client/ConfigCenterClient.java
@@ -58,14 +58,13 @@ public class ConfigCenterClient implements
ConfigCenterOperation {
}
@Override
- public QueryConfigurationsResponse
queryConfigurations(QueryConfigurationsRequest request) {
+ public QueryConfigurationsResponse
queryConfigurations(QueryConfigurationsRequest request, String address) {
String dimensionsInfo = buildDimensionsInfo(request, true);
QueryConfigurationsResponse queryConfigurationsResponse = new
QueryConfigurationsResponse();
Map<String, Object> configurations = new HashMap<>();
String uri = null;
- String address = addressManager.address();
try {
uri = address + "/configuration/items?dimensionsInfo="
+ HttpUtils.encodeURLParam(dimensionsInfo) + "&revision=" +
request.getRevision();
diff --git
a/clients/config-center-client/src/main/java/org/apache/servicecomb/config/center/client/ConfigCenterManager.java
b/clients/config-center-client/src/main/java/org/apache/servicecomb/config/center/client/ConfigCenterManager.java
index bdccc3543..6ba0212e6 100644
---
a/clients/config-center-client/src/main/java/org/apache/servicecomb/config/center/client/ConfigCenterManager.java
+++
b/clients/config-center-client/src/main/java/org/apache/servicecomb/config/center/client/ConfigCenterManager.java
@@ -44,13 +44,16 @@ public class ConfigCenterManager extends AbstractTask {
private final ConfigCenterConfiguration configCenterConfiguration;
- public ConfigCenterManager(ConfigCenterClient configCenterClient, EventBus
eventBus,
- ConfigConverter configConverter, ConfigCenterConfiguration
configCenterConfiguration) {
+ private final ConfigCenterAddressManager configCenterAddressManager;
+
+ public ConfigCenterManager(ConfigCenterClient configCenterClient, EventBus
eventBus, ConfigConverter configConverter,
+ ConfigCenterConfiguration configCenterConfiguration,
ConfigCenterAddressManager configCenterAddressManager) {
super("config-center-configuration-task");
this.configCenterClient = configCenterClient;
this.eventBus = eventBus;
this.configConverter = configConverter;
this.configCenterConfiguration = configCenterConfiguration;
+ this.configCenterAddressManager = configCenterAddressManager;
}
public void setQueryConfigurationsRequest(QueryConfigurationsRequest
queryConfigurationsRequest) {
@@ -71,7 +74,8 @@ public class ConfigCenterManager extends AbstractTask {
@Override
public void execute() {
try {
- QueryConfigurationsResponse response =
configCenterClient.queryConfigurations(queryConfigurationsRequest);
+ QueryConfigurationsResponse response =
configCenterClient.queryConfigurations(queryConfigurationsRequest,
+ configCenterAddressManager.address());
if (response.isChanged()) {
queryConfigurationsRequest.setRevision(response.getRevision());
Map<String, Object> lastData =
configConverter.updateData(response.getConfigurations());
diff --git
a/clients/config-center-client/src/main/java/org/apache/servicecomb/config/center/client/ConfigCenterOperation.java
b/clients/config-center-client/src/main/java/org/apache/servicecomb/config/center/client/ConfigCenterOperation.java
index 5e3a22070..d05967692 100644
---
a/clients/config-center-client/src/main/java/org/apache/servicecomb/config/center/client/ConfigCenterOperation.java
+++
b/clients/config-center-client/src/main/java/org/apache/servicecomb/config/center/client/ConfigCenterOperation.java
@@ -25,8 +25,9 @@ public interface ConfigCenterOperation {
/**
* 根据查询条件查询配置项。
* @param request 查询的维度(project, application, serviceName, version) 和
revision 信息。
+ * @param address 查询的配置中心地址。
* @return 如果存在配置变更,返回全量的配置项, changed = true。 如果没有变更, 返回 null, changed =
false,
* @throws OperationException If some problems happened to contact service
center or non http 200 returned.
*/
- QueryConfigurationsResponse queryConfigurations(QueryConfigurationsRequest
request);
+ QueryConfigurationsResponse queryConfigurations(QueryConfigurationsRequest
request, String address);
}
diff --git
a/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/KieClient.java
b/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/KieClient.java
index 1e099e030..ec567f90c 100644
---
a/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/KieClient.java
+++
b/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/KieClient.java
@@ -67,8 +67,7 @@ public class KieClient implements KieConfigOperation {
}
@Override
- public ConfigurationsResponse queryConfigurations(ConfigurationsRequest
request) {
- String address = addressManager.address();
+ public ConfigurationsResponse queryConfigurations(ConfigurationsRequest
request, String address) {
String url = buildUrl(request, address);
try {
if (kieConfiguration.isEnableLongPolling()) {
diff --git
a/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/KieConfigManager.java
b/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/KieConfigManager.java
index eaa7b93d6..3b3af5061 100644
---
a/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/KieConfigManager.java
+++
b/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/KieConfigManager.java
@@ -26,6 +26,7 @@ import org.apache.servicecomb.config.common.ConfigConverter;
import org.apache.servicecomb.config.kie.client.model.ConfigurationsRequest;
import
org.apache.servicecomb.config.kie.client.model.ConfigurationsRequestFactory;
import org.apache.servicecomb.config.kie.client.model.ConfigurationsResponse;
+import org.apache.servicecomb.config.kie.client.model.KieAddressManager;
import org.apache.servicecomb.config.kie.client.model.KieConfiguration;
import org.apache.servicecomb.http.client.task.AbstractTask;
import org.apache.servicecomb.http.client.task.Task;
@@ -50,9 +51,10 @@ public class KieConfigManager extends AbstractTask {
private final KieConfiguration kieConfiguration;
+ private final KieAddressManager kieAddressManager;
+
public KieConfigManager(KieConfigOperation configKieClient, EventBus
eventBus,
- KieConfiguration kieConfiguration,
- ConfigConverter configConverter) {
+ KieConfiguration kieConfiguration, ConfigConverter configConverter,
KieAddressManager kieAddressManager) {
super("config-center-configuration-task");
this.configurationsRequests =
ConfigurationsRequestFactory.buildConfigurationRequests(kieConfiguration);
this.configurationsRequests.sort(ConfigurationsRequest::compareTo);
@@ -60,27 +62,44 @@ public class KieConfigManager extends AbstractTask {
this.eventBus = eventBus;
this.configConverter = configConverter;
this.kieConfiguration = kieConfiguration;
+ this.kieAddressManager = kieAddressManager;
}
public void firstPull() {
+ Map<String, Object> data = new HashMap<>();
try {
- Map<String, Object> data = new HashMap<>();
- this.configurationsRequests.forEach(r -> {
- r.setRevision(ConfigurationsRequest.INITIAL_REVISION);
- ConfigurationsResponse response =
configKieClient.queryConfigurations(r);
- if (response.isChanged()) {
- r.setRevision(response.getRevision());
- r.setLastRawData(response.getConfigurations());
- data.putAll(response.getConfigurations());
- }
- });
- this.configConverter.updateData(data);
- } catch (RuntimeException e) {
+ firstQueryConfigurations(data);
+ } catch (Exception e) {
if (this.kieConfiguration.isFirstPullRequired()) {
throw e;
} else {
- LOGGER.warn("first pull failed, and ignore {}", e.getMessage());
+ LOGGER.warn("first pull failed!");
+ }
+ }
+ }
+
+ private void firstQueryConfigurations(Map<String, Object> data) {
+ for (int i = 0; i < 3;) {
+ String address = kieAddressManager.address();
+ try {
+ this.configurationsRequests.forEach(r -> {
+ r.setRevision(ConfigurationsRequest.INITIAL_REVISION);
+ ConfigurationsResponse response =
configKieClient.queryConfigurations(r, address);
+ if (response.isChanged()) {
+ r.setRevision(response.getRevision());
+ r.setLastRawData(response.getConfigurations());
+ data.putAll(response.getConfigurations());
+ }
+ });
+ this.configConverter.updateData(data);
+ break;
+ } catch (Exception e) {
+ if (i == 2) {
+ throw e;
+ }
+ LOGGER.warn("firstQueryConfigurations failed, config address {} and
ignore {}", address, e.getMessage());
}
+ i++;
}
}
@@ -120,7 +139,8 @@ public class KieConfigManager extends AbstractTask {
@Override
public void execute() {
try {
- ConfigurationsResponse response =
configKieClient.queryConfigurations(configurationsRequest);
+ ConfigurationsResponse response =
configKieClient.queryConfigurations(configurationsRequest,
+ kieAddressManager.address());
if (response.isChanged()) {
configurationsRequest.setRevision(response.getRevision());
configurationsRequest.setLastRawData(response.getConfigurations());
diff --git
a/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/KieConfigOperation.java
b/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/KieConfigOperation.java
index 364774fd2..229439867 100644
---
a/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/KieConfigOperation.java
+++
b/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/KieConfigOperation.java
@@ -26,8 +26,9 @@ public interface KieConfigOperation {
/**
* 根据查询条件查询配置项。
* @param request 查询的维度(project, application, serviceName, version) 和
revision 信息。
+ * @param address 查询的配置中心地址。
* @return 如果存在配置变更,返回全量的配置项, changed = true。 如果没有变更, 返回 null, changed =
false,
* @throws OperationException If some problems happened to contact service
center or non http 200 returned.
*/
- ConfigurationsResponse queryConfigurations(ConfigurationsRequest request);
+ ConfigurationsResponse queryConfigurations(ConfigurationsRequest request,
String address);
}
diff --git
a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/cc/ConfigCenterDynamicPropertiesSource.java
b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/cc/ConfigCenterDynamicPropertiesSource.java
index 614c44d39..961d1d1ec 100644
---
a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/cc/ConfigCenterDynamicPropertiesSource.java
+++
b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/cc/ConfigCenterDynamicPropertiesSource.java
@@ -68,33 +68,34 @@ public class ConfigCenterDynamicPropertiesSource implements
DynamicPropertiesSou
ConfigCenterConfig configCenterConfig = new
ConfigCenterConfig(environment);
configConverter = new ConfigConverter(configCenterConfig.getFileSources());
- ConfigCenterAddressManager kieAddressManager =
configKieAddressManager(configCenterConfig);
+ ConfigCenterAddressManager configCenterAddressManager =
configCenterAddressManager(configCenterConfig);
- HttpTransport httpTransport = createHttpTransport(kieAddressManager,
+ HttpTransport httpTransport =
createHttpTransport(configCenterAddressManager,
HttpTransportFactory.defaultRequestConfig().build(),
environment, configCenterConfig);
- ConfigCenterClient configCenterClient = new
ConfigCenterClient(kieAddressManager, httpTransport);
+ ConfigCenterClient configCenterClient = new
ConfigCenterClient(configCenterAddressManager, httpTransport);
EventManager.register(this);
ConfigCenterConfiguration configCenterConfiguration =
createConfigCenterConfiguration(configCenterConfig);
QueryConfigurationsRequest queryConfigurationsRequest =
firstPull(configCenterConfig, configCenterClient,
- environment);
+ environment, configCenterAddressManager);
ConfigCenterManager configCenterManager = new
ConfigCenterManager(configCenterClient, EventManager.getEventBus(),
- configConverter, configCenterConfiguration);
+ configConverter, configCenterConfiguration,
configCenterAddressManager);
configCenterManager.setQueryConfigurationsRequest(queryConfigurationsRequest);
configCenterManager.startConfigCenterManager();
data.putAll(configConverter.getCurrentData());
}
private QueryConfigurationsRequest firstPull(ConfigCenterConfig
configCenterConfig,
- ConfigCenterClient configCenterClient, Environment environment) {
+ ConfigCenterClient configCenterClient, Environment environment,
+ ConfigCenterAddressManager configCenterAddressManager) {
QueryConfigurationsRequest queryConfigurationsRequest =
createQueryConfigurationsRequest(environment);
try {
QueryConfigurationsResponse response = configCenterClient
- .queryConfigurations(queryConfigurationsRequest);
+ .queryConfigurations(queryConfigurationsRequest,
configCenterAddressManager.address());
if (response.isChanged()) {
configConverter.updateData(response.getConfigurations());
queryConfigurationsRequest.setRevision(response.getRevision());
@@ -134,7 +135,7 @@ public class ConfigCenterDynamicPropertiesSource implements
DynamicPropertiesSou
return new
ConfigCenterConfiguration().setRefreshIntervalInMillis(configCenterConfig.getRefreshInterval());
}
- private HttpTransport createHttpTransport(ConfigCenterAddressManager
kieAddressManager,
+ private HttpTransport createHttpTransport(ConfigCenterAddressManager
configCenterAddressManager,
RequestConfig requestConfig,
Environment environment, ConfigCenterConfig configCenterConfig) {
List<AuthHeaderProvider> authHeaderProviders =
SPIServiceUtils.getOrLoadSortedService(AuthHeaderProvider.class);
@@ -154,14 +155,14 @@ public class ConfigCenterDynamicPropertiesSource
implements DynamicPropertiesSou
return HttpTransportFactory
.createHttpTransport(
TransportUtils
- .createSSLProperties(kieAddressManager.sslEnabled(),
environment, ConfigCenterConfig.SSL_TAG),
+
.createSSLProperties(configCenterAddressManager.sslEnabled(), environment,
ConfigCenterConfig.SSL_TAG),
getRequestAuthHeaderProvider(authHeaderProviders),
httpClientBuilder);
}
return HttpTransportFactory
.createHttpTransport(
TransportUtils
- .createSSLProperties(kieAddressManager.sslEnabled(),
environment, ConfigCenterConfig.SSL_TAG),
+ .createSSLProperties(configCenterAddressManager.sslEnabled(),
environment, ConfigCenterConfig.SSL_TAG),
getRequestAuthHeaderProvider(authHeaderProviders), requestConfig);
}
@@ -173,7 +174,7 @@ public class ConfigCenterDynamicPropertiesSource implements
DynamicPropertiesSou
};
}
- private ConfigCenterAddressManager
configKieAddressManager(ConfigCenterConfig configCenterConfig) {
+ private ConfigCenterAddressManager
configCenterAddressManager(ConfigCenterConfig configCenterConfig) {
return new ConfigCenterAddressManager(configCenterConfig.getDomainName(),
configCenterConfig.getServerUri(),
EventManager.getEventBus());
diff --git
a/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/KieDynamicPropertiesSource.java
b/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/KieDynamicPropertiesSource.java
index 13a25be6f..ba7440a5a 100644
---
a/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/KieDynamicPropertiesSource.java
+++
b/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/KieDynamicPropertiesSource.java
@@ -82,7 +82,8 @@ public class KieDynamicPropertiesSource implements
DynamicPropertiesSource {
KieConfiguration kieConfiguration = createKieConfiguration(kieConfig,
environment);
KieClient kieClient = new KieClient(kieAddressManager, httpTransport,
kieConfiguration);
EventManager.register(this);
- kieConfigManager = new KieConfigManager(kieClient,
EventManager.getEventBus(), kieConfiguration, configConverter);
+ kieConfigManager = new KieConfigManager(kieClient,
EventManager.getEventBus(), kieConfiguration, configConverter,
+ kieAddressManager);
kieConfigManager.firstPull();
kieConfigManager.startConfigKieManager();
data.putAll(configConverter.getCurrentData());