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

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


The following commit(s) were added to refs/heads/2.8.x by this push:
     new 7c95c9e5d [#4004] fixed firstPull address choose logic (#4034)
7c95c9e5d is described below

commit 7c95c9e5d409caf885846fe27175e432b5a5db53
Author: Cheng YouLing <[email protected]>
AuthorDate: Tue Nov 14 16:10:44 2023 +0800

    [#4004] fixed firstPull address choose logic (#4034)
---
 .../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 +-
 .../ConfigCenterConfigurationSourceImpl.java       | 27 ++++++-----
 .../config/kie/KieConfigurationSourceImpl.java     |  3 +-
 8 files changed, 66 insertions(+), 38 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 9a89b92a6..a5a4f90d3 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
@@ -45,13 +45,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) {
@@ -72,7 +75,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 7c1eaf923..2a8b4cd1c 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
@@ -27,6 +27,7 @@ import 
org.apache.servicecomb.config.common.ConfigurationChangedEvent;
 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;
@@ -51,9 +52,11 @@ 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);
@@ -61,30 +64,46 @@ 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++;
+    }
+  }
   private void onDataChanged() {
     Map<String, Object> latestData = new HashMap<>();
     this.configurationsRequests.forEach(r -> 
latestData.putAll(r.getLastRawData()));
@@ -121,7 +140,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/ConfigCenterConfigurationSourceImpl.java
 
b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/ConfigCenterConfigurationSourceImpl.java
index 74834aaef..fb516580a 100644
--- 
a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/ConfigCenterConfigurationSourceImpl.java
+++ 
b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/ConfigCenterConfigurationSourceImpl.java
@@ -88,29 +88,30 @@ public class ConfigCenterConfigurationSourceImpl implements 
ConfigCenterConfigur
   public void init(Configuration localConfiguration) {
     configConverter = new 
ConfigConverter(ConfigCenterConfig.INSTANCE.getFileSources());
 
-    ConfigCenterAddressManager kieAddressManager = configKieAddressManager();
+    ConfigCenterAddressManager configCenterAddressManager = 
configCenterAddressManager();
 
-    HttpTransport httpTransport = createHttpTransport(kieAddressManager,
+    HttpTransport httpTransport = 
createHttpTransport(configCenterAddressManager,
         HttpTransportFactory.defaultRequestConfig().build(),
         localConfiguration);
-    ConfigCenterClient configCenterClient = new 
ConfigCenterClient(kieAddressManager, httpTransport);
+    ConfigCenterClient configCenterClient = new 
ConfigCenterClient(configCenterAddressManager, httpTransport);
     EventManager.register(this);
 
     ConfigCenterConfiguration configCenterConfiguration = 
createConfigCenterConfiguration();
 
-    QueryConfigurationsRequest queryConfigurationsRequest = 
firstPull(configCenterClient);
+    QueryConfigurationsRequest queryConfigurationsRequest = 
firstPull(configCenterClient, configCenterAddressManager);
 
     configCenterManager = new ConfigCenterManager(configCenterClient, 
EventManager.getEventBus(),
-        configConverter, configCenterConfiguration);
+        configConverter, configCenterConfiguration, 
configCenterAddressManager);
     
configCenterManager.setQueryConfigurationsRequest(queryConfigurationsRequest);
     configCenterManager.startConfigCenterManager();
   }
 
-  private QueryConfigurationsRequest firstPull(ConfigCenterClient 
configCenterClient) {
+  private QueryConfigurationsRequest firstPull(ConfigCenterClient 
configCenterClient,
+      ConfigCenterAddressManager configCenterAddressManager) {
     QueryConfigurationsRequest queryConfigurationsRequest = 
createQueryConfigurationsRequest();
     try {
       QueryConfigurationsResponse response = configCenterClient
-          .queryConfigurations(queryConfigurationsRequest);
+          .queryConfigurations(queryConfigurationsRequest, 
configCenterAddressManager.address());
       if (response.isChanged()) {
         configConverter.updateData(response.getConfigurations());
         
updateConfiguration(WatchedUpdateResult.createIncremental(configConverter.getCurrentData(),
 null, null));
@@ -146,8 +147,8 @@ public class ConfigCenterConfigurationSourceImpl implements 
ConfigCenterConfigur
     return new 
ConfigCenterConfiguration().setRefreshIntervalInMillis(ConfigCenterConfig.INSTANCE.getRefreshInterval());
   }
 
-  private HttpTransport createHttpTransport(ConfigCenterAddressManager 
kieAddressManager, RequestConfig requestConfig,
-      Configuration localConfiguration) {
+  private HttpTransport createHttpTransport(ConfigCenterAddressManager 
configCenterAddressManager,
+      RequestConfig requestConfig, Configuration localConfiguration) {
     List<AuthHeaderProvider> authHeaderProviders = 
SPIServiceUtils.getOrLoadSortedService(AuthHeaderProvider.class);
 
     if (ConfigCenterConfig.INSTANCE.isProxyEnable()) {
@@ -165,14 +166,16 @@ public class ConfigCenterConfigurationSourceImpl 
implements ConfigCenterConfigur
       return HttpTransportFactory
           .createHttpTransport(
               TransportUtils
-                  .createSSLProperties(kieAddressManager.sslEnabled(), 
localConfiguration, ConfigCenterConfig.SSL_TAG),
+                  
.createSSLProperties(configCenterAddressManager.sslEnabled(), 
localConfiguration,
+                      ConfigCenterConfig.SSL_TAG),
               getRequestAuthHeaderProvider(authHeaderProviders), 
httpClientBuilder);
     }
 
     return HttpTransportFactory
         .createHttpTransport(
             TransportUtils
-                .createSSLProperties(kieAddressManager.sslEnabled(), 
localConfiguration, ConfigCenterConfig.SSL_TAG),
+                .createSSLProperties(configCenterAddressManager.sslEnabled(), 
localConfiguration,
+                    ConfigCenterConfig.SSL_TAG),
             getRequestAuthHeaderProvider(authHeaderProviders), requestConfig);
   }
 
@@ -184,7 +187,7 @@ public class ConfigCenterConfigurationSourceImpl implements 
ConfigCenterConfigur
     };
   }
 
-  private ConfigCenterAddressManager configKieAddressManager() {
+  private ConfigCenterAddressManager configCenterAddressManager() {
     return new 
ConfigCenterAddressManager(ConfigCenterConfig.INSTANCE.getDomainName(),
         Deployment
             
.getSystemBootStrapInfo(ConfigCenterDefaultDeploymentProvider.SYSTEM_KEY_CONFIG_CENTER).getAccessURL(),
diff --git 
a/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/KieConfigurationSourceImpl.java
 
b/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/KieConfigurationSourceImpl.java
index fbf700e82..96bff526b 100644
--- 
a/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/KieConfigurationSourceImpl.java
+++ 
b/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/KieConfigurationSourceImpl.java
@@ -96,7 +96,8 @@ public class KieConfigurationSourceImpl implements 
ConfigCenterConfigurationSour
     KieConfiguration kieConfiguration = createKieConfiguration();
     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();
     
updateConfiguration(WatchedUpdateResult.createIncremental(configConverter.getCurrentData(),
 null, null));

Reply via email to