You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2023/03/24 15:02:00 UTC

[shardingsphere] branch master updated: Add ReadDataSourcesFilter SPI (#24818)

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

panjuan 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 648e65956e7 Add ReadDataSourcesFilter SPI (#24818)
648e65956e7 is described below

commit 648e65956e75b6e071bb664677da68d81ed91655
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Fri Mar 24 23:01:50 2023 +0800

    Add ReadDataSourcesFilter SPI (#24818)
---
 .../ReadwriteSplittingDataSourceRouter.java        | 16 +++++++-
 .../route/ReadwriteSplittingSQLRouter.java         |  1 -
 .../route/filter/EnabledReadDataSourcesFilter.java | 40 +++++++++++++++++++
 .../route/filter/ReadDataSourcesFilter.java        | 39 +++++++++++++++++++
 .../rule/ReadwriteSplittingDataSourceRule.java     | 22 -----------
 ...itesplitting.route.filter.ReadDataSourcesFilter | 18 +++++++++
 .../filter/EnabledReadDataSourcesFilterTest.java}  | 45 ++++++++++------------
 .../rule/ReadwriteSplittingDataSourceRuleTest.java | 45 ++--------------------
 .../rule/ReadwriteSplittingRuleTest.java           |  8 ++--
 9 files changed, 139 insertions(+), 95 deletions(-)

diff --git a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/route/impl/ReadwriteSplittingDataSourceRouter.java b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/route/ReadwriteSplittingDataSourceRouter.java
similarity index 86%
rename from features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/route/impl/ReadwriteSplittingDataSourceRouter.java
rename to features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/route/ReadwriteSplittingDataSourceRouter.java
index 51e5a072857..936337c2ae2 100644
--- a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/route/impl/ReadwriteSplittingDataSourceRouter.java
+++ b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/route/ReadwriteSplittingDataSourceRouter.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.readwritesplitting.route.impl;
+package org.apache.shardingsphere.readwritesplitting.route;
 
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.infra.binder.statement.CommonSQLStatementContext;
@@ -23,11 +23,15 @@ import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
 import org.apache.shardingsphere.infra.context.ConnectionContext;
 import org.apache.shardingsphere.infra.hint.HintManager;
+import org.apache.shardingsphere.infra.util.spi.ShardingSphereServiceLoader;
+import org.apache.shardingsphere.readwritesplitting.route.filter.ReadDataSourcesFilter;
 import org.apache.shardingsphere.readwritesplitting.rule.ReadwriteSplittingDataSourceRule;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
 import org.apache.shardingsphere.sql.parser.sql.dialect.handler.dml.SelectStatementHandler;
 
+import java.util.List;
+
 /**
  * Data source router for readwrite-splitting.
  */
@@ -91,6 +95,14 @@ public final class ReadwriteSplittingDataSourceRouter {
     }
     
     private String routeWithLoadBalancer() {
-        return rule.getLoadBalancer().getDataSource(rule.getName(), rule.getWriteDataSource(), rule.getEnabledReplicaDataSources());
+        return rule.getLoadBalancer().getDataSource(rule.getName(), rule.getWriteDataSource(), getFilteredReadDataSources());
+    }
+    
+    private List<String> getFilteredReadDataSources() {
+        List<String> result = rule.getReadwriteSplittingStrategy().getReadDataSources();
+        for (ReadDataSourcesFilter each : ShardingSphereServiceLoader.getServiceInstances(ReadDataSourcesFilter.class)) {
+            result = each.filter(rule, result);
+        }
+        return result;
     }
 }
diff --git a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/route/ReadwriteSplittingSQLRouter.java b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/route/ReadwriteSplittingSQLRouter.java
index 3789828e4fc..5085354408b 100644
--- a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/route/ReadwriteSplittingSQLRouter.java
+++ b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/route/ReadwriteSplittingSQLRouter.java
@@ -27,7 +27,6 @@ import org.apache.shardingsphere.infra.route.context.RouteContext;
 import org.apache.shardingsphere.infra.route.context.RouteMapper;
 import org.apache.shardingsphere.infra.route.context.RouteUnit;
 import org.apache.shardingsphere.readwritesplitting.constant.ReadwriteSplittingOrder;
-import org.apache.shardingsphere.readwritesplitting.route.impl.ReadwriteSplittingDataSourceRouter;
 import org.apache.shardingsphere.readwritesplitting.rule.ReadwriteSplittingDataSourceRule;
 import org.apache.shardingsphere.readwritesplitting.rule.ReadwriteSplittingRule;
 
diff --git a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/route/filter/EnabledReadDataSourcesFilter.java b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/route/filter/EnabledReadDataSourcesFilter.java
new file mode 100644
index 00000000000..4cf9b73490b
--- /dev/null
+++ b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/route/filter/EnabledReadDataSourcesFilter.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.readwritesplitting.route.filter;
+
+import org.apache.shardingsphere.readwritesplitting.rule.ReadwriteSplittingDataSourceRule;
+import org.apache.shardingsphere.readwritesplitting.strategy.type.DynamicReadwriteSplittingStrategy;
+
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * Enabled read data sources filter.
+ */
+public final class EnabledReadDataSourcesFilter implements ReadDataSourcesFilter {
+    
+    @Override
+    public List<String> filter(final ReadwriteSplittingDataSourceRule rule, final List<String> toBeFilteredReadDataSources) {
+        if (rule.getReadwriteSplittingStrategy() instanceof DynamicReadwriteSplittingStrategy || rule.getDisabledDataSourceNames().isEmpty()) {
+            return toBeFilteredReadDataSources;
+        }
+        List<String> result = new LinkedList<>(toBeFilteredReadDataSources);
+        result.removeIf(rule.getDisabledDataSourceNames()::contains);
+        return result;
+    }
+}
diff --git a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/route/filter/ReadDataSourcesFilter.java b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/route/filter/ReadDataSourcesFilter.java
new file mode 100644
index 00000000000..5276a96a5cb
--- /dev/null
+++ b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/route/filter/ReadDataSourcesFilter.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.readwritesplitting.route.filter;
+
+import org.apache.shardingsphere.infra.util.spi.annotation.SingletonSPI;
+import org.apache.shardingsphere.readwritesplitting.rule.ReadwriteSplittingDataSourceRule;
+
+import java.util.List;
+
+/**
+ * Read data sources filter.
+ */
+@SingletonSPI
+public interface ReadDataSourcesFilter {
+    
+    /**
+     * Filter replica data sources.
+     * 
+     * @param rule readwrite splitting data source rule
+     * @param toBeFilteredReadDataSources to be filtered read data sources
+     * @return filtered read data sources
+     */
+    List<String> filter(ReadwriteSplittingDataSourceRule rule, List<String> toBeFilteredReadDataSources);
+}
diff --git a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java
index b0ca950be8e..93bea4d656a 100644
--- a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java
+++ b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.readwritesplitting.rule;
 
-import lombok.AccessLevel;
 import lombok.Getter;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
@@ -25,12 +24,9 @@ import org.apache.shardingsphere.readwritesplitting.api.transaction.Transactiona
 import org.apache.shardingsphere.readwritesplitting.spi.ReadQueryLoadBalanceAlgorithm;
 import org.apache.shardingsphere.readwritesplitting.strategy.ReadwriteSplittingStrategy;
 import org.apache.shardingsphere.readwritesplitting.strategy.ReadwriteSplittingStrategyFactory;
-import org.apache.shardingsphere.readwritesplitting.strategy.type.DynamicReadwriteSplittingStrategy;
 
 import java.util.Collection;
 import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
 
 /**
  * Readwrite-splitting data source rule.
@@ -46,7 +42,6 @@ public final class ReadwriteSplittingDataSourceRule {
     
     private final ReadwriteSplittingStrategy readwriteSplittingStrategy;
     
-    @Getter(AccessLevel.NONE)
     private final Collection<String> disabledDataSourceNames = new HashSet<>();
     
     public ReadwriteSplittingDataSourceRule(final ReadwriteSplittingDataSourceRuleConfiguration config, final TransactionalReadQueryStrategy transactionalReadQueryStrategy,
@@ -79,21 +74,4 @@ public final class ReadwriteSplittingDataSourceRule {
             disabledDataSourceNames.remove(dataSourceName);
         }
     }
-    
-    /**
-     * Get enabled replica data sources.
-     *
-     * @return enabled replica data sources
-     */
-    public List<String> getEnabledReplicaDataSources() {
-        List<String> result = readwriteSplittingStrategy.getReadDataSources();
-        if (readwriteSplittingStrategy instanceof DynamicReadwriteSplittingStrategy) {
-            return result;
-        }
-        if (!disabledDataSourceNames.isEmpty()) {
-            result = new LinkedList<>(result);
-            result.removeIf(disabledDataSourceNames::contains);
-        }
-        return result;
-    }
 }
diff --git a/features/readwrite-splitting/core/src/main/resources/META-INF/services/org.apache.shardingsphere.readwritesplitting.route.filter.ReadDataSourcesFilter b/features/readwrite-splitting/core/src/main/resources/META-INF/services/org.apache.shardingsphere.readwritesplitting.route.filter.ReadDataSourcesFilter
new file mode 100644
index 00000000000..4021df64128
--- /dev/null
+++ b/features/readwrite-splitting/core/src/main/resources/META-INF/services/org.apache.shardingsphere.readwritesplitting.route.filter.ReadDataSourcesFilter
@@ -0,0 +1,18 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+org.apache.shardingsphere.readwritesplitting.route.filter.EnabledReadDataSourcesFilter
diff --git a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRuleTest.java b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/filter/EnabledReadDataSourcesFilterTest.java
similarity index 50%
copy from features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRuleTest.java
copy to features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/filter/EnabledReadDataSourcesFilterTest.java
index da8a8902d5a..457dc5081a8 100644
--- a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRuleTest.java
+++ b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/filter/EnabledReadDataSourcesFilterTest.java
@@ -15,12 +15,13 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.readwritesplitting.rule;
+package org.apache.shardingsphere.readwritesplitting.route.filter;
 
 import org.apache.shardingsphere.readwritesplitting.algorithm.loadbalance.RandomReadQueryLoadBalanceAlgorithm;
 import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.strategy.StaticReadwriteSplittingStrategyConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.transaction.TransactionalReadQueryStrategy;
+import org.apache.shardingsphere.readwritesplitting.rule.ReadwriteSplittingDataSourceRule;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
@@ -30,51 +31,45 @@ import java.util.Collections;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 
-public final class ReadwriteSplittingDataSourceRuleTest {
+class EnabledReadDataSourcesFilterTest {
     
-    private ReadwriteSplittingDataSourceRule readwriteSplittingDataSourceRule;
+    private ReadwriteSplittingDataSourceRule rule;
     
     @BeforeEach
     public void setUp() {
-        readwriteSplittingDataSourceRule = new ReadwriteSplittingDataSourceRule(
+        rule = new ReadwriteSplittingDataSourceRule(
                 new ReadwriteSplittingDataSourceRuleConfiguration("test_pr",
                         new StaticReadwriteSplittingStrategyConfiguration("write_ds", Arrays.asList("read_ds_0", "read_ds_1")), null, null),
                 TransactionalReadQueryStrategy.DYNAMIC, new RandomReadQueryLoadBalanceAlgorithm(), Collections.emptyList());
     }
     
     @Test
-    public void assertGetReadDataSourceNamesWithoutDisabledDataSourceNames() {
-        assertThat(readwriteSplittingDataSourceRule.getEnabledReplicaDataSources(), is(Arrays.asList("read_ds_0", "read_ds_1")));
+    void assertGetReadDataSourceNamesWithoutDisabledDataSourceNames() {
+        assertThat(new EnabledReadDataSourcesFilter().filter(rule, Arrays.asList("read_ds_0", "read_ds_1")), is(Arrays.asList("read_ds_0", "read_ds_1")));
     }
     
     @Test
-    public void assertGetReadDataSourceNamesWithDisabledDataSourceNames() {
-        readwriteSplittingDataSourceRule.updateDisabledDataSourceNames("read_ds_0", true);
-        assertThat(readwriteSplittingDataSourceRule.getEnabledReplicaDataSources(), is(Collections.singletonList("read_ds_1")));
+    void assertGetReadDataSourceNamesWithDisabledDataSourceNames() {
+        rule.updateDisabledDataSourceNames("read_ds_0", true);
+        assertThat(new EnabledReadDataSourcesFilter().filter(rule, Arrays.asList("read_ds_0", "read_ds_1")), is(Collections.singletonList("read_ds_1")));
     }
     
     @Test
-    public void assertUpdateDisabledDataSourceNamesForDisabled() {
-        readwriteSplittingDataSourceRule.updateDisabledDataSourceNames("read_ds_0", true);
-        assertThat(readwriteSplittingDataSourceRule.getEnabledReplicaDataSources(), is(Collections.singletonList("read_ds_1")));
+    void assertUpdateDisabledDataSourceNamesForDisabled() {
+        rule.updateDisabledDataSourceNames("read_ds_0", true);
+        assertThat(new EnabledReadDataSourcesFilter().filter(rule, Arrays.asList("read_ds_0", "read_ds_1")), is(Collections.singletonList("read_ds_1")));
     }
     
     @Test
-    public void assertUpdateDisabledDataSourceNamesForEnabled() {
-        readwriteSplittingDataSourceRule.updateDisabledDataSourceNames("read_ds_0", true);
-        readwriteSplittingDataSourceRule.updateDisabledDataSourceNames("read_ds_0", false);
-        assertThat(readwriteSplittingDataSourceRule.getEnabledReplicaDataSources(), is(Arrays.asList("read_ds_0", "read_ds_1")));
+    void assertUpdateDisabledDataSourceNamesForEnabled() {
+        rule.updateDisabledDataSourceNames("read_ds_0", true);
+        rule.updateDisabledDataSourceNames("read_ds_0", false);
+        assertThat(new EnabledReadDataSourcesFilter().filter(rule, Arrays.asList("read_ds_0", "read_ds_1")), is(Arrays.asList("read_ds_0", "read_ds_1")));
     }
     
     @Test
-    public void assertGetWriteDataSource() {
-        String writeDataSourceName = readwriteSplittingDataSourceRule.getWriteDataSource();
-        assertThat(writeDataSourceName, is("write_ds"));
-    }
-    
-    @Test
-    public void assertGetEnabledReplicaDataSources() {
-        readwriteSplittingDataSourceRule.updateDisabledDataSourceNames("read_ds_0", true);
-        assertThat(readwriteSplittingDataSourceRule.getEnabledReplicaDataSources(), is(Collections.singletonList("read_ds_1")));
+    void assertGetEnabledReplicaDataSources() {
+        rule.updateDisabledDataSourceNames("read_ds_0", true);
+        assertThat(new EnabledReadDataSourcesFilter().filter(rule, Arrays.asList("read_ds_0", "read_ds_1")), is(Collections.singletonList("read_ds_1")));
     }
 }
diff --git a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRuleTest.java b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRuleTest.java
index da8a8902d5a..fa2e8a0008f 100644
--- a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRuleTest.java
+++ b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRuleTest.java
@@ -21,7 +21,6 @@ import org.apache.shardingsphere.readwritesplitting.algorithm.loadbalance.Random
 import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.strategy.StaticReadwriteSplittingStrategyConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.transaction.TransactionalReadQueryStrategy;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 import java.util.Arrays;
@@ -30,51 +29,15 @@ import java.util.Collections;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 
-public final class ReadwriteSplittingDataSourceRuleTest {
+class ReadwriteSplittingDataSourceRuleTest {
     
-    private ReadwriteSplittingDataSourceRule readwriteSplittingDataSourceRule;
-    
-    @BeforeEach
-    public void setUp() {
-        readwriteSplittingDataSourceRule = new ReadwriteSplittingDataSourceRule(
+    @Test
+    void assertGetWriteDataSource() {
+        ReadwriteSplittingDataSourceRule readwriteSplittingDataSourceRule = new ReadwriteSplittingDataSourceRule(
                 new ReadwriteSplittingDataSourceRuleConfiguration("test_pr",
                         new StaticReadwriteSplittingStrategyConfiguration("write_ds", Arrays.asList("read_ds_0", "read_ds_1")), null, null),
                 TransactionalReadQueryStrategy.DYNAMIC, new RandomReadQueryLoadBalanceAlgorithm(), Collections.emptyList());
-    }
-    
-    @Test
-    public void assertGetReadDataSourceNamesWithoutDisabledDataSourceNames() {
-        assertThat(readwriteSplittingDataSourceRule.getEnabledReplicaDataSources(), is(Arrays.asList("read_ds_0", "read_ds_1")));
-    }
-    
-    @Test
-    public void assertGetReadDataSourceNamesWithDisabledDataSourceNames() {
-        readwriteSplittingDataSourceRule.updateDisabledDataSourceNames("read_ds_0", true);
-        assertThat(readwriteSplittingDataSourceRule.getEnabledReplicaDataSources(), is(Collections.singletonList("read_ds_1")));
-    }
-    
-    @Test
-    public void assertUpdateDisabledDataSourceNamesForDisabled() {
-        readwriteSplittingDataSourceRule.updateDisabledDataSourceNames("read_ds_0", true);
-        assertThat(readwriteSplittingDataSourceRule.getEnabledReplicaDataSources(), is(Collections.singletonList("read_ds_1")));
-    }
-    
-    @Test
-    public void assertUpdateDisabledDataSourceNamesForEnabled() {
-        readwriteSplittingDataSourceRule.updateDisabledDataSourceNames("read_ds_0", true);
-        readwriteSplittingDataSourceRule.updateDisabledDataSourceNames("read_ds_0", false);
-        assertThat(readwriteSplittingDataSourceRule.getEnabledReplicaDataSources(), is(Arrays.asList("read_ds_0", "read_ds_1")));
-    }
-    
-    @Test
-    public void assertGetWriteDataSource() {
         String writeDataSourceName = readwriteSplittingDataSourceRule.getWriteDataSource();
         assertThat(writeDataSourceName, is("write_ds"));
     }
-    
-    @Test
-    public void assertGetEnabledReplicaDataSources() {
-        readwriteSplittingDataSourceRule.updateDisabledDataSourceNames("read_ds_0", true);
-        assertThat(readwriteSplittingDataSourceRule.getEnabledReplicaDataSources(), is(Collections.singletonList("read_ds_1")));
-    }
 }
diff --git a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java
index 912d7041d24..a967fb49f90 100644
--- a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java
+++ b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java
@@ -76,7 +76,7 @@ public final class ReadwriteSplittingRuleTest {
         ReadwriteSplittingRule readwriteSplittingRule = createReadwriteSplittingRule();
         readwriteSplittingRule.updateStatus(new StorageNodeDataSourceChangedEvent(new QualifiedDatabase("readwrite_splitting_db.readwrite.read_ds"),
                 new StorageNodeDataSource(StorageNodeRole.MEMBER, DataSourceState.DISABLED)));
-        assertThat(readwriteSplittingRule.getSingleDataSourceRule().getEnabledReplicaDataSources(), is(Arrays.asList("read_ds_0", "read_ds_1")));
+        assertThat(readwriteSplittingRule.getSingleDataSourceRule().getDisabledDataSourceNames(), is(Collections.singleton("read_ds")));
     }
     
     @Test
@@ -84,7 +84,7 @@ public final class ReadwriteSplittingRuleTest {
         ReadwriteSplittingRule readwriteSplittingRule = createReadwriteSplittingRule();
         readwriteSplittingRule.updateStatus(new StorageNodeDataSourceChangedEvent(new QualifiedDatabase("readwrite_splitting_db.readwrite.read_ds_0"),
                 new StorageNodeDataSource(StorageNodeRole.MEMBER, DataSourceState.DISABLED)));
-        assertThat(readwriteSplittingRule.getSingleDataSourceRule().getEnabledReplicaDataSources(), is(Collections.singletonList("read_ds_1")));
+        assertThat(readwriteSplittingRule.getSingleDataSourceRule().getDisabledDataSourceNames(), is(Collections.singleton("read_ds_0")));
     }
     
     @Test
@@ -92,10 +92,10 @@ public final class ReadwriteSplittingRuleTest {
         ReadwriteSplittingRule readwriteSplittingRule = createReadwriteSplittingRule();
         readwriteSplittingRule.updateStatus(new StorageNodeDataSourceChangedEvent(new QualifiedDatabase("readwrite_splitting_db.readwrite.read_ds_0"),
                 new StorageNodeDataSource(StorageNodeRole.MEMBER, DataSourceState.DISABLED)));
-        assertThat(readwriteSplittingRule.getSingleDataSourceRule().getEnabledReplicaDataSources(), is(Collections.singletonList("read_ds_1")));
+        assertThat(readwriteSplittingRule.getSingleDataSourceRule().getDisabledDataSourceNames(), is(Collections.singleton("read_ds_0")));
         readwriteSplittingRule.updateStatus(new StorageNodeDataSourceChangedEvent(new QualifiedDatabase("readwrite_splitting_db.readwrite.read_ds_0"),
                 new StorageNodeDataSource(StorageNodeRole.MEMBER, DataSourceState.ENABLED)));
-        assertThat(readwriteSplittingRule.getSingleDataSourceRule().getEnabledReplicaDataSources(), is(Arrays.asList("read_ds_0", "read_ds_1")));
+        assertThat(readwriteSplittingRule.getSingleDataSourceRule().getDisabledDataSourceNames(), is(Collections.emptySet()));
     }
     
     @Test