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);