You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by ji...@apache.org on 2023/02/02 06:41:21 UTC

[shardingsphere] branch master updated: Replace `TrafficRuleResultSet` with `ShowTrafficRuleExecutor` (#23907)

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

jianglongtao 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 af22623978c Replace `TrafficRuleResultSet` with `ShowTrafficRuleExecutor` (#23907)
af22623978c is described below

commit af22623978cf25b8c25fc6bfba3bae9d5fb90469
Author: Zichao <57...@users.noreply.github.com>
AuthorDate: Thu Feb 2 19:41:09 2023 +1300

    Replace `TrafficRuleResultSet` with `ShowTrafficRuleExecutor` (#23907)
    
    * Replace `TrafficRuleResultSet` with `ShowTrafficRuleExecutor`
    
    * Replace `TrafficRuleResultSet` with `ShowTrafficRuleExecutor`
---
 .../handler/ShowSQLTranslatorRuleExecutor.java     |  2 +-
 .../handler/ShowSQLTranslatorRuleExecutorTest.java |  6 +--
 ...ResultSet.java => ShowTrafficRuleExecutor.java} | 51 +++++--------------
 ...distsql.handler.ral.query.QueryableRALExecutor} |  2 +-
 ...tTest.java => ShowTrafficRuleExecutorTest.java} | 57 ++++++++++++++++------
 5 files changed, 59 insertions(+), 59 deletions(-)

diff --git a/kernel/sql-translator/distsql/handler/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/handler/ShowSQLTranslatorRuleExecutor.java b/kernel/sql-translator/distsql/handler/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/handler/ShowSQLTranslatorRuleExecutor.java
index fa37d1f9a15..66747ce7f62 100644
--- a/kernel/sql-translator/distsql/handler/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/handler/ShowSQLTranslatorRuleExecutor.java
+++ b/kernel/sql-translator/distsql/handler/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/handler/ShowSQLTranslatorRuleExecutor.java
@@ -29,7 +29,7 @@ import java.util.Collection;
 import java.util.Collections;
 
 /**
- * Result set for SQL translator rule.
+ * Show SQL translator rule executor.
  */
 public final class ShowSQLTranslatorRuleExecutor implements MetaDataRequiredQueryableRALExecutor<ShowSQLTranslatorRuleStatement> {
     
diff --git a/kernel/sql-translator/distsql/handler/src/test/java/org/apache/shardingsphere/sqltranslator/distsql/handler/ShowSQLTranslatorRuleExecutorTest.java b/kernel/sql-translator/distsql/handler/src/test/java/org/apache/shardingsphere/sqltranslator/distsql/handler/ShowSQLTranslatorRuleExecutorTest.java
index 34f10d72183..edd4792665f 100644
--- a/kernel/sql-translator/distsql/handler/src/test/java/org/apache/shardingsphere/sqltranslator/distsql/handler/ShowSQLTranslatorRuleExecutorTest.java
+++ b/kernel/sql-translator/distsql/handler/src/test/java/org/apache/shardingsphere/sqltranslator/distsql/handler/ShowSQLTranslatorRuleExecutorTest.java
@@ -41,9 +41,9 @@ public final class ShowSQLTranslatorRuleExecutorTest {
     
     @Test
     public void assertExecute() {
-        ShardingSphereMetaData ruleMetaData = mockGlobalRuleMetaData();
+        ShardingSphereMetaData metaData = mockMetaData();
         ShowSQLTranslatorRuleExecutor executor = new ShowSQLTranslatorRuleExecutor();
-        Collection<LocalDataQueryResultRow> actual = executor.getRows(ruleMetaData, mock(ShowSQLTranslatorRuleStatement.class));
+        Collection<LocalDataQueryResultRow> actual = executor.getRows(metaData, mock(ShowSQLTranslatorRuleStatement.class));
         assertThat(actual.size(), is(1));
         Iterator<LocalDataQueryResultRow> iterator = actual.iterator();
         LocalDataQueryResultRow row = iterator.next();
@@ -61,7 +61,7 @@ public final class ShowSQLTranslatorRuleExecutorTest {
         assertThat(iterator.next(), is("use_original_sql_when_translating_failed"));
     }
     
-    private ShardingSphereMetaData mockGlobalRuleMetaData() {
+    private ShardingSphereMetaData mockMetaData() {
         SQLTranslatorRule sqlTranslatorRule = mock(SQLTranslatorRule.class);
         when(sqlTranslatorRule.getConfiguration()).thenReturn(createSQLTranslatorRuleConfiguration());
         return new ShardingSphereMetaData(new LinkedHashMap<>(), new ShardingSphereRuleMetaData(Collections.singleton(sqlTranslatorRule)), new ConfigurationProperties(new Properties()));
diff --git a/kernel/traffic/distsql/handler/src/main/java/org/apache/shardingsphere/traffic/distsql/handler/query/TrafficRuleResultSet.java b/kernel/traffic/distsql/handler/src/main/java/org/apache/shardingsphere/traffic/distsql/handler/query/ShowTrafficRuleExecutor.java
similarity index 53%
rename from kernel/traffic/distsql/handler/src/main/java/org/apache/shardingsphere/traffic/distsql/handler/query/TrafficRuleResultSet.java
rename to kernel/traffic/distsql/handler/src/main/java/org/apache/shardingsphere/traffic/distsql/handler/query/ShowTrafficRuleExecutor.java
index d564535fb4a..fcffe421f86 100644
--- a/kernel/traffic/distsql/handler/src/main/java/org/apache/shardingsphere/traffic/distsql/handler/query/TrafficRuleResultSet.java
+++ b/kernel/traffic/distsql/handler/src/main/java/org/apache/shardingsphere/traffic/distsql/handler/query/ShowTrafficRuleExecutor.java
@@ -17,11 +17,11 @@
 
 package org.apache.shardingsphere.traffic.distsql.handler.query;
 
-import org.apache.shardingsphere.distsql.handler.resultset.GlobalRuleDistSQLResultSet;
+import org.apache.shardingsphere.distsql.handler.ral.query.MetaDataRequiredQueryableRALExecutor;
 import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
-import org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
+import org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import org.apache.shardingsphere.infra.util.props.PropertiesConverter;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import org.apache.shardingsphere.traffic.api.config.TrafficRuleConfiguration;
 import org.apache.shardingsphere.traffic.api.config.TrafficStrategyConfiguration;
 import org.apache.shardingsphere.traffic.distsql.parser.statement.queryable.ShowTrafficRulesStatement;
@@ -29,60 +29,35 @@ import org.apache.shardingsphere.traffic.rule.TrafficRule;
 
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.Iterator;
 import java.util.LinkedList;
 
 /**
- * Result set for traffic rule.
+ * Show traffic rule executor.
  */
-public final class TrafficRuleResultSet implements GlobalRuleDistSQLResultSet {
-    
-    private static final String RULE_NAME = "name";
-    
-    private static final String LABELS = "labels";
-    
-    private static final String ALGORITHM_TYPE = "algorithm_type";
-    
-    private static final String ALGORITHM_PROPS = "algorithm_props";
-    
-    private static final String LOAD_BALANCER_TYPE = "load_balancer_type";
-    
-    private static final String LOAD_BALANCER_PROPS = "load_balancer_props";
-    
-    private Iterator<Collection<Object>> data;
+public final class ShowTrafficRuleExecutor implements MetaDataRequiredQueryableRALExecutor<ShowTrafficRulesStatement> {
     
     @Override
-    public void init(final ShardingSphereRuleMetaData globalRuleMetaData, final SQLStatement sqlStatement) {
-        TrafficRule rule = globalRuleMetaData.getSingleRule(TrafficRule.class);
-        data = buildData(rule.getConfiguration(), ((ShowTrafficRulesStatement) sqlStatement).getRuleName()).iterator();
+    public Collection<LocalDataQueryResultRow> getRows(final ShardingSphereMetaData metaData, final ShowTrafficRulesStatement sqlStatement) {
+        TrafficRule rule = metaData.getGlobalRuleMetaData().getSingleRule(TrafficRule.class);
+        return buildData(rule.getConfiguration(), sqlStatement.getRuleName());
     }
     
-    private Collection<Collection<Object>> buildData(final TrafficRuleConfiguration ruleConfig, final String ruleName) {
-        Collection<Collection<Object>> result = new LinkedList<>();
+    private Collection<LocalDataQueryResultRow> buildData(final TrafficRuleConfiguration ruleConfig, final String ruleName) {
+        Collection<LocalDataQueryResultRow> result = new LinkedList<>();
         ruleConfig.getTrafficStrategies().stream().filter(each -> null == ruleName || each.getName().equals(ruleName))
                 .forEach(each -> result.add(buildRow(each, ruleConfig.getTrafficAlgorithms().get(each.getAlgorithmName()), ruleConfig.getLoadBalancers().get(each.getLoadBalancerName()))));
         return result;
     }
     
-    private Collection<Object> buildRow(final TrafficStrategyConfiguration strategy, final AlgorithmConfiguration trafficAlgorithm, final AlgorithmConfiguration loadBalancer) {
-        return Arrays.asList(strategy.getName(), String.join(",", strategy.getLabels()), null != trafficAlgorithm ? trafficAlgorithm.getType() : "",
+    private LocalDataQueryResultRow buildRow(final TrafficStrategyConfiguration strategy, final AlgorithmConfiguration trafficAlgorithm, final AlgorithmConfiguration loadBalancer) {
+        return new LocalDataQueryResultRow(strategy.getName(), String.join(",", strategy.getLabels()), null != trafficAlgorithm ? trafficAlgorithm.getType() : "",
                 null != trafficAlgorithm ? PropertiesConverter.convert(trafficAlgorithm.getProps()) : "", null != loadBalancer ? loadBalancer.getType() : "",
                 null != loadBalancer ? PropertiesConverter.convert(loadBalancer.getProps()) : "");
     }
     
     @Override
     public Collection<String> getColumnNames() {
-        return Arrays.asList(RULE_NAME, LABELS, ALGORITHM_TYPE, ALGORITHM_PROPS, LOAD_BALANCER_TYPE, LOAD_BALANCER_PROPS);
-    }
-    
-    @Override
-    public boolean next() {
-        return data.hasNext();
-    }
-    
-    @Override
-    public Collection<Object> getRowData() {
-        return data.next();
+        return Arrays.asList("name", "labels", "algorithm_type", "algorithm_props", "load_balancer_type", "load_balancer_props");
     }
     
     @Override
diff --git a/kernel/traffic/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.resultset.DistSQLResultSet b/kernel/traffic/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.ral.query.QueryableRALExecutor
similarity index 90%
rename from kernel/traffic/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.resultset.DistSQLResultSet
rename to kernel/traffic/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.ral.query.QueryableRALExecutor
index c66cfd5819b..d38e83056c6 100644
--- a/kernel/traffic/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.resultset.DistSQLResultSet
+++ b/kernel/traffic/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.ral.query.QueryableRALExecutor
@@ -15,4 +15,4 @@
 # limitations under the License.
 #
 
-org.apache.shardingsphere.traffic.distsql.handler.query.TrafficRuleResultSet
+org.apache.shardingsphere.traffic.distsql.handler.query.ShowTrafficRuleExecutor
diff --git a/kernel/traffic/distsql/handler/src/test/java/org/apache/shardingsphere/traffic/distsql/handler/query/TrafficRuleResultSetTest.java b/kernel/traffic/distsql/handler/src/test/java/org/apache/shardingsphere/traffic/distsql/handler/query/ShowTrafficRuleExecutorTest.java
similarity index 57%
rename from kernel/traffic/distsql/handler/src/test/java/org/apache/shardingsphere/traffic/distsql/handler/query/TrafficRuleResultSetTest.java
rename to kernel/traffic/distsql/handler/src/test/java/org/apache/shardingsphere/traffic/distsql/handler/query/ShowTrafficRuleExecutorTest.java
index 95b8c241abc..04a60f56595 100644
--- a/kernel/traffic/distsql/handler/src/test/java/org/apache/shardingsphere/traffic/distsql/handler/query/TrafficRuleResultSetTest.java
+++ b/kernel/traffic/distsql/handler/src/test/java/org/apache/shardingsphere/traffic/distsql/handler/query/ShowTrafficRuleExecutorTest.java
@@ -17,8 +17,10 @@
 
 package org.apache.shardingsphere.traffic.distsql.handler.query;
 
-import org.apache.shardingsphere.distsql.handler.resultset.GlobalRuleDistSQLResultSet;
 import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
+import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
+import org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
 import org.apache.shardingsphere.test.util.PropertiesBuilder;
 import org.apache.shardingsphere.test.util.PropertiesBuilder.Property;
@@ -31,35 +33,58 @@ import org.junit.Test;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
 import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-public final class TrafficRuleResultSetTest {
+public final class ShowTrafficRuleExecutorTest {
     
     @Test
     public void assertExecute() {
-        ShardingSphereRuleMetaData ruleMetaData = mockGlobalRuleMetaData();
-        GlobalRuleDistSQLResultSet resultSet = new TrafficRuleResultSet();
-        resultSet.init(ruleMetaData, mock(ShowTrafficRulesStatement.class));
-        Collection<Object> actual = resultSet.getRowData();
-        assertThat(actual.size(), is(6));
-        assertTrue(actual.contains("rule_name_1"));
-        assertTrue(actual.contains("olap,order_by"));
-        assertTrue(actual.contains("SQL_MATCH"));
-        assertTrue(actual.contains("sql=select * from t_order"));
-        assertTrue(actual.contains("RANDOM"));
-        assertTrue(actual.contains(""));
+        ShardingSphereMetaData metaData = mockMetaData();
+        ShowTrafficRuleExecutor executor = new ShowTrafficRuleExecutor();
+        Collection<LocalDataQueryResultRow> actual = executor.getRows(metaData, mock(ShowTrafficRulesStatement.class));
+        assertThat(actual.size(), is(2));
+        Iterator<LocalDataQueryResultRow> iterator = actual.iterator();
+        LocalDataQueryResultRow row = iterator.next();
+        assertThat(row.getCell(1), is("rule_name_1"));
+        assertThat(row.getCell(2), is("olap,order_by"));
+        assertThat(row.getCell(3), is("SQL_MATCH"));
+        assertThat(row.getCell(4), is("sql=select * from t_order"));
+        assertThat(row.getCell(5), is("RANDOM"));
+        assertThat(row.getCell(6), is(""));
+        row = iterator.next();
+        assertThat(row.getCell(1), is("rule_name_2"));
+        assertThat(row.getCell(2), is("oltp"));
+        assertThat(row.getCell(3), is("SQL_HINT"));
+        assertThat(row.getCell(4), is(""));
+        assertThat(row.getCell(5), is("ROBIN"));
+        assertThat(row.getCell(6), is(""));
     }
     
-    private ShardingSphereRuleMetaData mockGlobalRuleMetaData() {
+    @Test
+    public void assertGetColumnNames() {
+        ShowTrafficRuleExecutor executor = new ShowTrafficRuleExecutor();
+        Collection<String> columns = executor.getColumnNames();
+        assertThat(columns.size(), is(6));
+        Iterator<String> iterator = columns.iterator();
+        assertThat(iterator.next(), is("name"));
+        assertThat(iterator.next(), is("labels"));
+        assertThat(iterator.next(), is("algorithm_type"));
+        assertThat(iterator.next(), is("algorithm_props"));
+        assertThat(iterator.next(), is("load_balancer_type"));
+        assertThat(iterator.next(), is("load_balancer_props"));
+    }
+    
+    private ShardingSphereMetaData mockMetaData() {
         TrafficRule trafficRule = mock(TrafficRule.class);
         when(trafficRule.getConfiguration()).thenReturn(createTrafficRuleConfiguration());
-        return new ShardingSphereRuleMetaData(Collections.singleton(trafficRule));
+        return new ShardingSphereMetaData(new LinkedHashMap<>(), new ShardingSphereRuleMetaData(Collections.singleton(trafficRule)), new ConfigurationProperties(new Properties()));
     }
     
     private TrafficRuleConfiguration createTrafficRuleConfiguration() {