You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2022/06/14 04:45:03 UTC

[shardingsphere] branch master updated: WeightReplicaLoadBalanceAlgorithm can not be used by multiple load balance rules (#17395)

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

zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 618b57814dc WeightReplicaLoadBalanceAlgorithm can not be used by multiple load balance rules (#17395)
618b57814dc is described below

commit 618b57814dc3f2c7a27f545cf1302f3fe7530d29
Author: cherubimLV <36...@users.noreply.github.com>
AuthorDate: Tue Jun 14 12:44:56 2022 +0800

    WeightReplicaLoadBalanceAlgorithm can not be used by multiple load balance rules (#17395)
    
    * Change static field WEIGHT_MAP to class level
---
 .codecov.yml                                                | 11 +++--------
 .../loadbalance/WeightReplicaLoadBalanceAlgorithm.java      |  6 +++---
 .../loadbalance/WeightReplicaLoadBalanceAlgorithmTest.java  | 13 -------------
 3 files changed, 6 insertions(+), 24 deletions(-)

diff --git a/.codecov.yml b/.codecov.yml
index 9cf0ab320d2..7f2de5ac9f1 100644
--- a/.codecov.yml
+++ b/.codecov.yml
@@ -15,11 +15,6 @@
 # limitations under the License.
 #
 
-coverage:
-  status:
-    # pull-requests only
-    patch:
-      default:
-        threshold: 0.1%
-ignore:
-  - "examples/.*"
+org.apache.shardingsphere.readwritesplitting.algorithm.RoundRobinReplicaLoadBalanceAlgorithm
+org.apache.shardingsphere.readwritesplitting.algorithm.RandomReplicaLoadBalanceAlgorithm
+org.apache.shardingsphere.readwritesplitting.algorithm.WeightReplicaLoadBalanceAlgorithm
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/algorithm/loadbalance/WeightReplicaLoadBalanceAlgorithm.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/algorithm/loadbalance/WeightReplicaLoadBalanceAlgorithm.java
index 9e8f8f79825..c04a7201950 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/algorithm/loadbalance/WeightReplicaLoadBalanceAlgorithm.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/algorithm/loadbalance/WeightReplicaLoadBalanceAlgorithm.java
@@ -35,7 +35,7 @@ public final class WeightReplicaLoadBalanceAlgorithm implements ReadQueryLoadBal
     
     private static final double ACCURACY_THRESHOLD = 0.0001;
     
-    private static final ConcurrentHashMap<String, double[]> WEIGHT_MAP = new ConcurrentHashMap<>();
+    private final ConcurrentHashMap<String, double[]> weightMap = new ConcurrentHashMap<>();
     
     private Properties props;
     
@@ -49,8 +49,8 @@ public final class WeightReplicaLoadBalanceAlgorithm implements ReadQueryLoadBal
         if (TransactionHolder.isTransaction()) {
             return writeDataSourceName;
         }
-        double[] weight = WEIGHT_MAP.containsKey(name) ? WEIGHT_MAP.get(name) : initWeight(readDataSourceNames);
-        WEIGHT_MAP.putIfAbsent(name, weight);
+        double[] weight = weightMap.containsKey(name) ? weightMap.get(name) : initWeight(readDataSourceNames);
+        weightMap.putIfAbsent(name, weight);
         return getDataSourceName(readDataSourceNames, weight);
     }
     
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/algorithm/loadbalance/WeightReplicaLoadBalanceAlgorithmTest.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/algorithm/loadbalance/WeightReplicaLoadBalanceAlgorithmTest.java
index d6d8094da91..43511e098b0 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/algorithm/loadbalance/WeightReplicaLoadBalanceAlgorithmTest.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/algorithm/loadbalance/WeightReplicaLoadBalanceAlgorithmTest.java
@@ -20,15 +20,11 @@ package org.apache.shardingsphere.readwritesplitting.algorithm.loadbalance;
 import org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
 import org.apache.shardingsphere.readwritesplitting.factory.ReplicaLoadBalanceAlgorithmFactory;
 import org.apache.shardingsphere.transaction.TransactionHolder;
-import org.junit.After;
-import org.junit.Before;
 import org.junit.Test;
 
-import java.lang.reflect.Field;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
-import java.util.Map;
 import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -37,15 +33,6 @@ import static org.junit.Assert.assertThat;
 
 public final class WeightReplicaLoadBalanceAlgorithmTest {
     
-    @SuppressWarnings("rawtypes")
-    @Before
-    @After
-    public void reset() throws NoSuchFieldException, IllegalAccessException {
-        Field accuracyThresholdField = WeightReplicaLoadBalanceAlgorithm.class.getDeclaredField("WEIGHT_MAP");
-        accuracyThresholdField.setAccessible(true);
-        ((Map) accuracyThresholdField.get(WeightReplicaLoadBalanceAlgorithm.class)).clear();
-    }
-    
     @Test
     public void assertGetSingleReadDataSource() {
         WeightReplicaLoadBalanceAlgorithm weightReplicaLoadBalanceAlgorithm = createReplicaLoadBalanceAlgorithm(createSingleDataSourceProperties());