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 b3ddd6ccfa4 Refactor `DatabaseDiscoveryRuleResultSet` (#23788)
b3ddd6ccfa4 is described below
commit b3ddd6ccfa405b29bcfc9bd63e8be0aa79cd955a
Author: Zichao <[email protected]>
AuthorDate: Sun Jan 29 05:14:52 2023 +1300
Refactor `DatabaseDiscoveryRuleResultSet` (#23788)
* Replace `DatabaseDiscoveryRuleResultSet` with
`ShowDatabaseDiscoveryRuleExecutor`
* Replace `DatabaseDiscoveryRuleResultSet` with
`ShowDatabaseDiscoveryRuleExecutor`
* Replace `DatabaseDiscoveryRuleResultSet` with
`ShowDatabaseDiscoveryRuleExecutor`
* Replace `DatabaseDiscoveryRuleResultSet` with
`ShowDatabaseDiscoveryRuleExecutor`
---
...java => ShowDatabaseDiscoveryRuleExecutor.java} | 63 +++++++++-------------
...ardingsphere.distsql.handler.query.RQLExecutor} | 5 +-
...here.distsql.handler.resultset.DistSQLResultSet | 1 -
... => ShowDatabaseDiscoveryRuleExecutorTest.java} | 40 +++++++-------
4 files changed, 45 insertions(+), 64 deletions(-)
diff --git
a/features/db-discovery/distsql/handler/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/DatabaseDiscoveryRuleResultSet.java
b/features/db-discovery/distsql/handler/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/ShowDatabaseDiscoveryRuleExecutor.java
similarity index 60%
rename from
features/db-discovery/distsql/handler/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/DatabaseDiscoveryRuleResultSet.java
rename to
features/db-discovery/distsql/handler/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/ShowDatabaseDiscoveryRuleExecutor.java
index b6c0d193ac7..fdd05acf604 100644
---
a/features/db-discovery/distsql/handler/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/DatabaseDiscoveryRuleResultSet.java
+++
b/features/db-discovery/distsql/handler/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/ShowDatabaseDiscoveryRuleExecutor.java
@@ -23,25 +23,26 @@ import
org.apache.shardingsphere.dbdiscovery.api.config.rule.DatabaseDiscoveryDa
import
org.apache.shardingsphere.dbdiscovery.api.config.rule.DatabaseDiscoveryHeartBeatConfiguration;
import
org.apache.shardingsphere.dbdiscovery.distsql.parser.statement.ShowDatabaseDiscoveryRulesStatement;
import org.apache.shardingsphere.dbdiscovery.rule.DatabaseDiscoveryRule;
+import org.apache.shardingsphere.distsql.handler.query.RQLExecutor;
import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
-import
org.apache.shardingsphere.distsql.handler.resultset.DatabaseDistSQLResultSet;
+import
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedHashMap;
+import java.util.LinkedList;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
import java.util.stream.Collectors;
/**
- * Result set for show database discovery rule.
+ * Show database discovery rule executor.
*/
-public final class DatabaseDiscoveryRuleResultSet implements
DatabaseDistSQLResultSet {
+public final class ShowDatabaseDiscoveryRuleExecutor implements
RQLExecutor<ShowDatabaseDiscoveryRulesStatement> {
private static final String GROUP_NAME = "group_name";
@@ -55,26 +56,33 @@ public final class DatabaseDiscoveryRuleResultSet
implements DatabaseDistSQLResu
private static final String HEARTBEAT = "discovery_heartbeat";
- private Iterator<DatabaseDiscoveryDataSourceRuleConfiguration>
dataSourceRules;
-
- private Map<String, AlgorithmConfiguration> discoveryTypes;
-
- private Map<String, DatabaseDiscoveryHeartBeatConfiguration>
discoveryHeartbeats;
-
- private Map<String, String> primaryDataSources;
-
@Override
- public void init(final ShardingSphereDatabase database, final SQLStatement
sqlStatement) {
+ public Collection<LocalDataQueryResultRow> getRows(final
ShardingSphereDatabase database, final ShowDatabaseDiscoveryRulesStatement
sqlStatement) {
Optional<DatabaseDiscoveryRule> rule =
database.getRuleMetaData().findSingleRule(DatabaseDiscoveryRule.class);
+ Iterator<DatabaseDiscoveryDataSourceRuleConfiguration> dataSourceRules;
if (!rule.isPresent()) {
- dataSourceRules = Collections.emptyIterator();
- return;
+ return Collections.emptyList();
}
DatabaseDiscoveryRuleConfiguration ruleConfig =
(DatabaseDiscoveryRuleConfiguration) rule.get().getConfiguration();
dataSourceRules = ruleConfig.getDataSources().iterator();
- discoveryTypes = ruleConfig.getDiscoveryTypes();
- discoveryHeartbeats = ruleConfig.getDiscoveryHeartbeats();
- primaryDataSources =
rule.get().getDataSourceRules().entrySet().stream().collect(Collectors.toMap(Entry::getKey,
entry -> entry.getValue().getPrimaryDataSourceName(), (a, b) -> b));
+ Map<String, AlgorithmConfiguration> discoveryTypes =
ruleConfig.getDiscoveryTypes();
+ Map<String, DatabaseDiscoveryHeartBeatConfiguration>
discoveryHeartbeats = ruleConfig.getDiscoveryHeartbeats();
+ Map<String, String> primaryDataSources =
rule.get().getDataSourceRules().entrySet().stream()
+ .collect(Collectors.toMap(Entry::getKey, entry ->
entry.getValue().getPrimaryDataSourceName(), (a, b) -> b));
+ Collection<LocalDataQueryResultRow> result = new LinkedList<>();
+ while (dataSourceRules.hasNext()) {
+ DatabaseDiscoveryDataSourceRuleConfiguration dataSourceRuleConfig
= dataSourceRules.next();
+ Map<String, String> typeMap = new LinkedHashMap<>();
+ typeMap.put(NAME, dataSourceRuleConfig.getDiscoveryTypeName());
+
typeMap.putAll(convertToMap(discoveryTypes.get(dataSourceRuleConfig.getDiscoveryTypeName())));
+ Map<String, String> heartbeatMap = new LinkedHashMap<>();
+ heartbeatMap.put(NAME,
dataSourceRuleConfig.getDiscoveryHeartbeatName());
+
heartbeatMap.putAll(convertToMap(discoveryHeartbeats.get(dataSourceRuleConfig.getDiscoveryHeartbeatName())));
+ String groupName = dataSourceRuleConfig.getGroupName();
+ String primaryDataSourceName = null ==
primaryDataSources.get(groupName) ? "" : primaryDataSources.get(groupName);
+ result.add(new LocalDataQueryResultRow(groupName, String.join(",",
dataSourceRuleConfig.getDataSourceNames()), primaryDataSourceName, typeMap,
heartbeatMap));
+ }
+ return result;
}
@Override
@@ -82,25 +90,6 @@ public final class DatabaseDiscoveryRuleResultSet implements
DatabaseDistSQLResu
return Arrays.asList(GROUP_NAME, DATA_SOURCE_NAMES,
PRIMARY_DATA_SOURCE_NAME, DISCOVER_TYPE, HEARTBEAT);
}
- @Override
- public boolean next() {
- return dataSourceRules.hasNext();
- }
-
- @Override
- public Collection<Object> getRowData() {
- DatabaseDiscoveryDataSourceRuleConfiguration dataSourceRuleConfig =
dataSourceRules.next();
- Map<String, String> typeMap = new LinkedHashMap<>();
- typeMap.put(NAME, dataSourceRuleConfig.getDiscoveryTypeName());
-
typeMap.putAll(convertToMap(discoveryTypes.get(dataSourceRuleConfig.getDiscoveryTypeName())));
- Map<String, String> heartbeatMap = new LinkedHashMap<>();
- heartbeatMap.put(NAME,
dataSourceRuleConfig.getDiscoveryHeartbeatName());
-
heartbeatMap.putAll(convertToMap(discoveryHeartbeats.get(dataSourceRuleConfig.getDiscoveryHeartbeatName())));
- String groupName = dataSourceRuleConfig.getGroupName();
- String primaryDataSourceName = null ==
primaryDataSources.get(groupName) ? "" : primaryDataSources.get(groupName);
- return Arrays.asList(groupName, String.join(",",
dataSourceRuleConfig.getDataSourceNames()), primaryDataSourceName, typeMap,
heartbeatMap);
- }
-
@SuppressWarnings("unchecked")
private Map<String, String> convertToMap(final Object obj) {
return null == obj ? Collections.emptyMap() : new Gson().fromJson(new
Gson().toJson(obj), LinkedHashMap.class);
diff --git
a/features/db-discovery/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.resultset.DistSQLResultSet
b/features/db-discovery/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.query.RQLExecutor
similarity index 67%
copy from
features/db-discovery/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.resultset.DistSQLResultSet
copy to
features/db-discovery/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.query.RQLExecutor
index 1dbe50b229d..c6ffa89b25d 100644
---
a/features/db-discovery/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.resultset.DistSQLResultSet
+++
b/features/db-discovery/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.query.RQLExecutor
@@ -15,7 +15,4 @@
# limitations under the License.
#
-org.apache.shardingsphere.dbdiscovery.distsql.handler.query.DatabaseDiscoveryRuleResultSet
-org.apache.shardingsphere.dbdiscovery.distsql.handler.query.DatabaseDiscoveryTypeResultSet
-org.apache.shardingsphere.dbdiscovery.distsql.handler.query.DatabaseDiscoveryHeartbeatResultSet
-org.apache.shardingsphere.dbdiscovery.distsql.handler.query.CountDatabaseDiscoveryRuleResultSet
+org.apache.shardingsphere.dbdiscovery.distsql.handler.query.ShowDatabaseDiscoveryRuleExecutor
diff --git
a/features/db-discovery/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.resultset.DistSQLResultSet
b/features/db-discovery/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.resultset.DistSQLResultSet
index 1dbe50b229d..a504b7063a7 100644
---
a/features/db-discovery/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.resultset.DistSQLResultSet
+++
b/features/db-discovery/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.resultset.DistSQLResultSet
@@ -15,7 +15,6 @@
# limitations under the License.
#
-org.apache.shardingsphere.dbdiscovery.distsql.handler.query.DatabaseDiscoveryRuleResultSet
org.apache.shardingsphere.dbdiscovery.distsql.handler.query.DatabaseDiscoveryTypeResultSet
org.apache.shardingsphere.dbdiscovery.distsql.handler.query.DatabaseDiscoveryHeartbeatResultSet
org.apache.shardingsphere.dbdiscovery.distsql.handler.query.CountDatabaseDiscoveryRuleResultSet
diff --git
a/features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/DatabaseDiscoveryRuleResultSetTest.java
b/features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/ShowDatabaseDiscoveryRuleExecutorTest.java
similarity index 74%
rename from
features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/DatabaseDiscoveryRuleResultSetTest.java
rename to
features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/ShowDatabaseDiscoveryRuleExecutorTest.java
index e15e2087572..484690d778f 100644
---
a/features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/DatabaseDiscoveryRuleResultSetTest.java
+++
b/features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/ShowDatabaseDiscoveryRuleExecutorTest.java
@@ -23,8 +23,9 @@ import
org.apache.shardingsphere.dbdiscovery.api.config.rule.DatabaseDiscoveryHe
import
org.apache.shardingsphere.dbdiscovery.distsql.parser.statement.ShowDatabaseDiscoveryRulesStatement;
import
org.apache.shardingsphere.dbdiscovery.rule.DatabaseDiscoveryDataSourceRule;
import org.apache.shardingsphere.dbdiscovery.rule.DatabaseDiscoveryRule;
-import
org.apache.shardingsphere.distsql.handler.resultset.DatabaseDistSQLResultSet;
+import org.apache.shardingsphere.distsql.handler.query.RQLExecutor;
import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
+import
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
import org.junit.Test;
@@ -33,22 +34,20 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
-import java.util.List;
import java.util.Map;
import java.util.Properties;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-public final class DatabaseDiscoveryRuleResultSetTest {
+public final class ShowDatabaseDiscoveryRuleExecutorTest {
@Test
- public void assertInit() {
+ public void assertGetRows() {
ShardingSphereDatabase database = mock(ShardingSphereDatabase.class,
RETURNS_DEEP_STUBS);
DatabaseDiscoveryRule rule = mock(DatabaseDiscoveryRule.class,
RETURNS_DEEP_STUBS);
when(rule.getConfiguration()).thenReturn(createRuleConfiguration());
@@ -56,19 +55,15 @@ public final class DatabaseDiscoveryRuleResultSetTest {
when(dataSourceRule.getPrimaryDataSourceName()).thenReturn("ds_0");
when(rule.getDataSourceRules()).thenReturn(Collections.singletonMap("ms_group",
dataSourceRule));
when(database.getRuleMetaData()).thenReturn(new
ShardingSphereRuleMetaData(Collections.singleton(rule)));
- DatabaseDistSQLResultSet resultSet = new
DatabaseDiscoveryRuleResultSet();
- resultSet.init(database,
mock(ShowDatabaseDiscoveryRulesStatement.class));
- assertColumns(resultSet.getColumnNames());
- assertRowData(new ArrayList<>(resultSet.getRowData()));
+ RQLExecutor<ShowDatabaseDiscoveryRulesStatement> executor = new
ShowDatabaseDiscoveryRuleExecutor();
+ assertColumns(executor.getColumnNames());
+ assertRowData(new ArrayList<>(executor.getRows(database,
mock(ShowDatabaseDiscoveryRulesStatement.class))));
}
@Test
- public void assertInitWithNullDatabaseDiscoveryRule() {
- ShardingSphereDatabase database = mock(ShardingSphereDatabase.class,
RETURNS_DEEP_STUBS);
- DatabaseDistSQLResultSet resultSet = new
DatabaseDiscoveryRuleResultSet();
- resultSet.init(database,
mock(ShowDatabaseDiscoveryRulesStatement.class));
- assertColumns(resultSet.getColumnNames());
- assertFalse(resultSet.next());
+ public void assertGetColumnNames() {
+ RQLExecutor<ShowDatabaseDiscoveryRulesStatement> executor = new
ShowDatabaseDiscoveryRuleExecutor();
+ assertColumns(executor.getColumnNames());
}
private DatabaseDiscoveryRuleConfiguration createRuleConfiguration() {
@@ -85,12 +80,13 @@ public final class DatabaseDiscoveryRuleResultSetTest {
assertTrue(actual.containsAll(Arrays.asList("group_name",
"data_source_names", "primary_data_source_name", "discovery_type",
"discovery_heartbeat")));
}
- private void assertRowData(final List<Object> actual) {
- assertThat(actual.size(), is(5));
- assertThat(actual.get(0), is("ms_group"));
- assertThat(actual.get(1), is("ds_0,ds_1"));
- assertThat(actual.get(2), is("ds_0"));
- assertThat(actual.get(3).toString(), is("{name=type_test,
type=MySQL.MGR, props={}}"));
- assertThat(actual.get(4).toString(), is("{name=heartbeat_test,
props={}}"));
+ private void assertRowData(final Collection<LocalDataQueryResultRow>
actual) {
+ assertThat(actual.size(), is(1));
+ LocalDataQueryResultRow row = actual.iterator().next();
+ assertThat(row.getCell(1), is("ms_group"));
+ assertThat(row.getCell(2), is("ds_0,ds_1"));
+ assertThat(row.getCell(3), is("ds_0"));
+ assertThat(row.getCell(4).toString(), is("{name=type_test,
type=MySQL.MGR, props={}}"));
+ assertThat(row.getCell(5).toString(), is("{name=heartbeat_test,
props={}}"));
}
}