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 2023/08/16 06:24:34 UTC

[servicecomb-java-chassis] branch 2.8.x updated: [#3881] update init cse server address choose index for random (#3883)

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 709947504 [#3881] update init cse server address choose index for random (#3883)
709947504 is described below

commit 709947504433311481bdf6fe8a3f1bf5ebbc3605
Author: Cheng YouLing <97...@users.noreply.github.com>
AuthorDate: Wed Aug 16 14:24:28 2023 +0800

    [#3881] update init cse server address choose index for random (#3883)
---
 .../config/kie/client/model/KieAddressManagerTest.java     |  7 +++++--
 .../servicecomb/dashboard/client/AddressManagerTest.java   |  9 +++++++--
 .../http/client/common/AbstractAddressManager.java         |  7 ++++++-
 .../http/client/common/AbstractAddressManagerTest.java     | 14 +++++++++++++-
 .../config/ConfigCenterConfigurationSourceImplTest.java    | 10 ++++++++--
 .../center/client/ConfigCenterAddressManagerTest.java      |  9 ++++++++-
 6 files changed, 47 insertions(+), 9 deletions(-)

diff --git a/clients/config-kie-client/src/test/java/org/apache/servicecomb/config/kie/client/model/KieAddressManagerTest.java b/clients/config-kie-client/src/test/java/org/apache/servicecomb/config/kie/client/model/KieAddressManagerTest.java
index 0e4f57930..6533fc60e 100644
--- a/clients/config-kie-client/src/test/java/org/apache/servicecomb/config/kie/client/model/KieAddressManagerTest.java
+++ b/clients/config-kie-client/src/test/java/org/apache/servicecomb/config/kie/client/model/KieAddressManagerTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.servicecomb.config.kie.client.model;
 
+import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -36,10 +37,13 @@ class KieAddressManagerTest {
   private static KieAddressManager addressManager1;
 
   @Test
-  public void kieAddressManagerTest() {
+  public void kieAddressManagerTest() throws NoSuchFieldException, IllegalAccessException {
     addresses.add("http://127.0.0.1:30103");
     addresses.add("https://127.0.0.2:30103");
     addressManager1 = new KieAddressManager(addresses, new EventBus());
+    Field addressManagerField = addressManager1.getClass().getSuperclass().getDeclaredField("index");
+    addressManagerField.setAccessible(true);
+    addressManagerField.set(addressManager1, 0);
 
     Assertions.assertNotNull(addressManager1);
 
@@ -51,7 +55,6 @@ class KieAddressManagerTest {
     Assertions.assertEquals("http://127.0.0.1:30103", addressManager1.address());
   }
 
-
   @Test
   public void onRefreshEndpointEvent() {
     List<String> addressAZ = new ArrayList<>();
diff --git a/clients/dashboard-client/src/test/java/org/apache/servicecomb/dashboard/client/AddressManagerTest.java b/clients/dashboard-client/src/test/java/org/apache/servicecomb/dashboard/client/AddressManagerTest.java
index 0703e0dc6..ac0c08b3e 100644
--- a/clients/dashboard-client/src/test/java/org/apache/servicecomb/dashboard/client/AddressManagerTest.java
+++ b/clients/dashboard-client/src/test/java/org/apache/servicecomb/dashboard/client/AddressManagerTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.servicecomb.dashboard.client;
 
+import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -34,11 +35,16 @@ class AddressManagerTest {
 
   private static DashboardAddressManager addressManager1;
 
+  private static int index;
+
   @Test
-  public void kieAddressManagerTest() {
+  public void kieAddressManagerTest() throws IllegalAccessException, NoSuchFieldException {
     addresses.add("http://127.0.0.1:30103");
     addresses.add("https://127.0.0.2:30103");
     addressManager1 = new DashboardAddressManager(addresses, new EventBus());
+    Field addressManagerField = addressManager1.getClass().getSuperclass().getDeclaredField("index");
+    addressManagerField.setAccessible(true);
+    addressManagerField.set(addressManager1, 0);
 
     Assertions.assertNotNull(addressManager1);
 
@@ -50,7 +56,6 @@ class AddressManagerTest {
     Assertions.assertEquals("http://127.0.0.1:30103", addressManager1.address());
   }
 
-
   @Test
   public void onRefreshEndpointEvent() {
     List<String> addressAZ = new ArrayList<>();
diff --git a/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/AbstractAddressManager.java b/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/AbstractAddressManager.java
index a126a855f..88d74510a 100644
--- a/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/AbstractAddressManager.java
+++ b/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/AbstractAddressManager.java
@@ -26,6 +26,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Random;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Executors;
@@ -58,7 +59,7 @@ public class AbstractAddressManager {
 
   private List<String> addresses = new ArrayList<>();
 
-  private int index = 0;
+  private int index;
 
   private String projectName;
 
@@ -87,6 +88,8 @@ public class AbstractAddressManager {
 
   private final Object lock = new Object();
 
+  private Random random = new Random();
+
   private final ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1,
       new ThreadFactoryBuilder()
           .setNameFormat("check-available-address-%d")
@@ -96,12 +99,14 @@ public class AbstractAddressManager {
     this.projectName = DEFAULT_PROJECT;
     this.addresses.addAll(addresses);
     this.defaultAddress.addAll(addresses);
+    this.index = addresses.size() > 0 ? random.nextInt(addresses.size()) : 0;
   }
 
   public AbstractAddressManager(String projectName, List<String> addresses) {
     this.projectName = StringUtils.isEmpty(projectName) ? DEFAULT_PROJECT : projectName;
     this.addresses = this.transformAddress(addresses);
     this.defaultAddress.addAll(this.addresses);
+    this.index = addresses.size() > 0 ? random.nextInt(addresses.size()) : 0;
   }
 
   @VisibleForTesting
diff --git a/clients/http-client-common/src/test/java/org/apache/servicecomb/http/client/common/AbstractAddressManagerTest.java b/clients/http-client-common/src/test/java/org/apache/servicecomb/http/client/common/AbstractAddressManagerTest.java
index 080e86f16..6bd0c7328 100644
--- a/clients/http-client-common/src/test/java/org/apache/servicecomb/http/client/common/AbstractAddressManagerTest.java
+++ b/clients/http-client-common/src/test/java/org/apache/servicecomb/http/client/common/AbstractAddressManagerTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.servicecomb.http.client.common;
 
+import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -44,13 +45,24 @@ public class AbstractAddressManagerTest {
 
   private static AbstractAddressManager addressManager3;
 
+  private static int index;
+
   @BeforeEach
-  public void setUp() {
+  public void setUp() throws NoSuchFieldException, IllegalAccessException {
     addresses.add("http://127.0.0.1:30103");
     addresses.add("https://127.0.0.2:30103");
     addressManager1 = new AbstractAddressManager(addresses);
     addressManager2 = new AbstractAddressManager("project", addresses);
     addressManager3 = new AbstractAddressManager(null, addresses);
+    Field addressManagerField = addressManager1.getClass().getDeclaredField("index");
+    addressManagerField.setAccessible(true);
+    addressManagerField.set(addressManager1, 0);
+    addressManagerField = addressManager2.getClass().getDeclaredField("index");
+    addressManagerField.setAccessible(true);
+    addressManagerField.set(addressManager2, 0);
+    addressManagerField = addressManager3.getClass().getDeclaredField("index");
+    addressManagerField.setAccessible(true);
+    addressManagerField.set(addressManager3, 0);
   }
 
   @AfterEach
diff --git a/dynamic-config/config-cc/src/test/java/org/apache/servicecomb/config/ConfigCenterConfigurationSourceImplTest.java b/dynamic-config/config-cc/src/test/java/org/apache/servicecomb/config/ConfigCenterConfigurationSourceImplTest.java
index 76f0cb49f..4a9b64a88 100644
--- a/dynamic-config/config-cc/src/test/java/org/apache/servicecomb/config/ConfigCenterConfigurationSourceImplTest.java
+++ b/dynamic-config/config-cc/src/test/java/org/apache/servicecomb/config/ConfigCenterConfigurationSourceImplTest.java
@@ -18,6 +18,7 @@
 package org.apache.servicecomb.config;
 
 
+import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -30,13 +31,15 @@ import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
 class ConfigCenterConfigurationSourceImplTest {
-
   @Test
-  void configAddressManagerTest() {
+  void configAddressManagerTest() throws IllegalAccessException, NoSuchFieldException {
     List<String> addresses = new ArrayList<>();
     addresses.add("http://127.0.0.1:30103");
     addresses.add("http://127.0.0.2:30103");
     ConfigCenterAddressManager addressManager = new ConfigCenterAddressManager("test", addresses, EventManager.getEventBus());
+    Field addressManagerField = addressManager.getClass().getSuperclass().getDeclaredField("index");
+    addressManagerField.setAccessible(true);
+    addressManagerField.set(addressManager, 0);
     Assertions.assertNotNull(addressManager);
 
     String address = addressManager.address();
@@ -45,6 +48,9 @@ class ConfigCenterConfigurationSourceImplTest {
     Assertions.assertEquals("http://127.0.0.1:30103/v3/test", address);
 
     addressManager = new ConfigCenterAddressManager(null, addresses, EventManager.getEventBus());
+    addressManagerField = addressManager.getClass().getSuperclass().getDeclaredField("index");
+    addressManagerField.setAccessible(true);
+    addressManagerField.set(addressManager, 0);
     address = addressManager.address();
     Assertions.assertEquals("http://127.0.0.2:30103/v3/default", address);
   }
diff --git a/dynamic-config/config-cc/src/test/java/org/apache/servicecomb/config/center/client/ConfigCenterAddressManagerTest.java b/dynamic-config/config-cc/src/test/java/org/apache/servicecomb/config/center/client/ConfigCenterAddressManagerTest.java
index 86b3e305d..f47cc35be 100644
--- a/dynamic-config/config-cc/src/test/java/org/apache/servicecomb/config/center/client/ConfigCenterAddressManagerTest.java
+++ b/dynamic-config/config-cc/src/test/java/org/apache/servicecomb/config/center/client/ConfigCenterAddressManagerTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.servicecomb.config.center.client;
 
+import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -36,11 +37,17 @@ class ConfigCenterAddressManagerTest {
   private static ConfigCenterAddressManager addressManager2;
 
   @Test
-  public void addressManagerTest() {
+  public void addressManagerTest() throws NoSuchFieldException, IllegalAccessException {
     addresses.add("http://127.0.0.1:30103");
     addresses.add("https://127.0.0.2:30103");
     addressManager1 = new ConfigCenterAddressManager("project", addresses, new EventBus());
     addressManager2 = new ConfigCenterAddressManager(null, addresses, new EventBus());
+    Field addressManagerField = addressManager1.getClass().getSuperclass().getDeclaredField("index");
+    addressManagerField.setAccessible(true);
+    addressManagerField.set(addressManager1, 0);
+    addressManagerField = addressManager2.getClass().getSuperclass().getDeclaredField("index");
+    addressManagerField.setAccessible(true);
+    addressManagerField.set(addressManager2, 0);
 
     Assertions.assertNotNull(addressManager1);
     Assertions.assertNotNull(addressManager2);