You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by mi...@apache.org on 2023/11/14 11:04:39 UTC

(shardingsphere) branch master updated: Declare in the document that ReadWriteSplitting Config is parsed by GroovyShell by default and adds corresponding unit tests (#29034)

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

miaoliyao 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 c97b7f9da10 Declare in the document that ReadWriteSplitting Config is parsed by GroovyShell by default and adds corresponding unit tests (#29034)
c97b7f9da10 is described below

commit c97b7f9da10476a427caa7655831a5ee08f0d672
Author: Ling Hengqian <li...@outlook.com>
AuthorDate: Tue Nov 14 19:04:31 2023 +0800

    Declare in the document that ReadWriteSplitting Config is parsed by GroovyShell by default and adds corresponding unit tests (#29034)
---
 .../yaml-config/rules/readwrite-splitting.cn.md      |  6 +++---
 .../yaml-config/rules/readwrite-splitting.en.md      |  6 +++---
 .../rule/ReadwriteSplittingRuleTest.java             | 20 ++++++++++++++++++++
 3 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/docs/document/content/user-manual/shardingsphere-jdbc/yaml-config/rules/readwrite-splitting.cn.md b/docs/document/content/user-manual/shardingsphere-jdbc/yaml-config/rules/readwrite-splitting.cn.md
index d4e55840abb..da9530ce52e 100644
--- a/docs/document/content/user-manual/shardingsphere-jdbc/yaml-config/rules/readwrite-splitting.cn.md
+++ b/docs/document/content/user-manual/shardingsphere-jdbc/yaml-config/rules/readwrite-splitting.cn.md
@@ -15,9 +15,9 @@ weight = 3
 rules:
 - !READWRITE_SPLITTING
   dataSources:
-    <data_source_name> (+): # 读写分离逻辑数据源名称
-       write_data_source_name: # 写库数据源名称
-       read_data_source_names: # 读库数据源名称,多个从数据源用逗号分隔
+    <data_source_name> (+): # 读写分离逻辑数据源名称,默认使用 Groovy 的行表达式 SPI 实现来解析
+       write_data_source_name: # 写库数据源名称,默认使用 Groovy 的行表达式 SPI 实现来解析
+       read_data_source_names: # 读库数据源名称,多个从数据源用逗号分隔,默认使用 Groovy 的行表达式 SPI 实现来解析
        transactionalReadQueryStrategy (?): # 事务内读请求的路由策略,可选值:PRIMARY(路由至主库)、FIXED(同一事务内路由至固定数据源)、DYNAMIC(同一事务内路由至非固定数据源)。默认值:DYNAMIC
        loadBalancerName: # 负载均衡算法名称
   
diff --git a/docs/document/content/user-manual/shardingsphere-jdbc/yaml-config/rules/readwrite-splitting.en.md b/docs/document/content/user-manual/shardingsphere-jdbc/yaml-config/rules/readwrite-splitting.en.md
index 774ee427215..9f353992a56 100644
--- a/docs/document/content/user-manual/shardingsphere-jdbc/yaml-config/rules/readwrite-splitting.en.md
+++ b/docs/document/content/user-manual/shardingsphere-jdbc/yaml-config/rules/readwrite-splitting.en.md
@@ -14,9 +14,9 @@ Read/write splitting YAML configuration is highly readable. The YAML format enab
 rules:
 - !READWRITE_SPLITTING
   dataSources:
-    <data_source_name> (+): # Logic data source name of readwrite-splitting
-      write_data_source_name: # Write data source name
-      read_data_source_names: # Read data source names, multiple data source names separated with comma
+    <data_source_name> (+): # Logic data source name of readwrite-splitting, which uses Groovy's Row Value Expressions SPI implementation to parse by default
+      write_data_source_name: # Write data source name, which uses Groovy's Row Value Expressions SPI implementation to parse by default
+      read_data_source_names: # Read data source names, multiple data source names separated with comma, which uses Groovy's Row Value Expressions SPI implementation to parse by default
       transactionalReadQueryStrategy (?): # Routing strategy for read query within a transaction, values include: PRIMARY (to primary), FIXED (to fixed data source), DYNAMIC (to any data source), default value: DYNAMIC
       loadBalancerName: # Load balance algorithm name
   
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 47fe2566649..821015fb3ca 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
@@ -102,4 +102,24 @@ class ReadwriteSplittingRuleTest {
         Map<String, Collection<String>> expected = Collections.singletonMap("readwrite", Arrays.asList("write_ds", "read_ds_0", "read_ds_1"));
         assertThat(actual, is(expected));
     }
+    
+    @Test
+    void assertCreateReadwriteSplittingRuleWithRowValueExpressionImpl() {
+        ReadwriteSplittingDataSourceRuleConfiguration config = new ReadwriteSplittingDataSourceRuleConfiguration(
+                "<GROOVY>${['readwrite']}_ds",
+                "<GROOVY>${['write']}_ds",
+                Arrays.asList("<GROOVY>read_ds_${['0']}", "read_ds_${['1']}", "read_ds_2", "<LITERAL>read_ds_3"),
+                "random");
+        ReadwriteSplittingRule readwriteSplittingRule = new ReadwriteSplittingRule(
+                "logic_db",
+                new ReadwriteSplittingRuleConfiguration(
+                        Collections.singleton(config), Collections.singletonMap("random", new AlgorithmConfiguration("RANDOM", new Properties()))),
+                mock(InstanceContext.class));
+        Optional<ReadwriteSplittingDataSourceRule> actual = readwriteSplittingRule.findDataSourceRule("readwrite_ds");
+        assertTrue(actual.isPresent());
+        assertThat(actual.get().getName(), is("readwrite_ds"));
+        assertThat(actual.get().getReadwriteSplittingGroup().getWriteDataSource(), is("write_ds"));
+        assertThat(actual.get().getReadwriteSplittingGroup().getReadDataSources(), is(Arrays.asList("read_ds_0", "read_ds_1", "read_ds_2", "read_ds_3")));
+        assertThat(actual.get().getLoadBalancer().getType(), is("RANDOM"));
+    }
 }