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 68fe6343029 Refactor BroadcastRule (#33475)
68fe6343029 is described below
commit 68fe6343029a99e48e09b2fffcad8b2e4758ff05
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Oct 30 23:59:39 2024 +0800
Refactor BroadcastRule (#33475)
---
.../broadcast/route/BroadcastSQLRouter.java | 42 +++++++++++-----------
.../route/engine/BroadcastRouteEngineFactory.java | 42 +++++++++++-----------
.../BroadcastTableBroadcastRoutingEngine.java | 31 ++++++++--------
.../broadcast/rule/BroadcastRule.java | 16 ++++-----
.../BroadcastTableBroadcastRoutingEngineTest.java | 16 ++++-----
5 files changed, 73 insertions(+), 74 deletions(-)
diff --git
a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/route/BroadcastSQLRouter.java
b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/route/BroadcastSQLRouter.java
index 849ab6fb02e..e2034a285a5 100644
---
a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/route/BroadcastSQLRouter.java
+++
b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/route/BroadcastSQLRouter.java
@@ -64,58 +64,58 @@ import java.util.LinkedHashSet;
public final class BroadcastSQLRouter implements
EntranceSQLRouter<BroadcastRule>, DecorateSQLRouter<BroadcastRule> {
@Override
- public RouteContext createRouteContext(final QueryContext queryContext,
final RuleMetaData globalRuleMetaData, final ShardingSphereDatabase database,
- final BroadcastRule rule, final
ConfigurationProperties props) {
+ public RouteContext createRouteContext(final QueryContext queryContext,
final RuleMetaData globalRuleMetaData,
+ final ShardingSphereDatabase
database, final BroadcastRule rule, final ConfigurationProperties props) {
RouteContext result = new RouteContext();
BroadcastRouteEngineFactory.newInstance(rule, database,
queryContext).route(result, rule);
return result;
}
@Override
- public void decorateRouteContext(final RouteContext routeContext, final
QueryContext queryContext, final ShardingSphereDatabase database, final
BroadcastRule broadcastRule,
- final ConfigurationProperties props) {
+ public void decorateRouteContext(final RouteContext routeContext, final
QueryContext queryContext,
+ final ShardingSphereDatabase database,
final BroadcastRule rule, final ConfigurationProperties props) {
SQLStatementContext sqlStatementContext =
queryContext.getSqlStatementContext();
SQLStatement sqlStatement = sqlStatementContext.getSqlStatement();
if (sqlStatement instanceof TCLStatement) {
- routeToAllDatabase(routeContext, broadcastRule);
+ routeToAllDatabase(routeContext, rule);
}
if (sqlStatement instanceof DDLStatement) {
- decorateRouteContextWhenDDLStatement(routeContext, queryContext,
database, broadcastRule);
+ decorateRouteContextWhenDDLStatement(routeContext, queryContext,
database, rule);
}
if (sqlStatement instanceof DALStatement &&
isResourceGroupStatement(sqlStatement)) {
- routeToAllDatabaseInstance(routeContext, database, broadcastRule);
+ routeToAllDatabaseInstance(routeContext, database, rule);
}
if (sqlStatement instanceof DCLStatement &&
!isDCLForSingleTable(queryContext.getSqlStatementContext())) {
- routeToAllDatabaseInstance(routeContext, database, broadcastRule);
+ routeToAllDatabaseInstance(routeContext, database, rule);
}
}
- private void decorateRouteContextWhenDDLStatement(final RouteContext
routeContext, final QueryContext queryContext, final ShardingSphereDatabase
database, final BroadcastRule broadcastRule) {
+ private void decorateRouteContextWhenDDLStatement(final RouteContext
routeContext, final QueryContext queryContext, final ShardingSphereDatabase
database, final BroadcastRule rule) {
SQLStatementContext sqlStatementContext =
queryContext.getSqlStatementContext();
if (sqlStatementContext instanceof CursorAvailable) {
if (sqlStatementContext instanceof CloseStatementContext &&
((CloseStatementContext) sqlStatementContext).getSqlStatement().isCloseAll()) {
- routeToAllDatabase(routeContext, broadcastRule);
+ routeToAllDatabase(routeContext, rule);
}
return;
}
if (sqlStatementContext instanceof IndexAvailable &&
!routeContext.getRouteUnits().isEmpty()) {
- putAllBroadcastTables(routeContext, broadcastRule,
sqlStatementContext);
+ putAllBroadcastTables(routeContext, rule, sqlStatementContext);
}
SQLStatement sqlStatement = sqlStatementContext.getSqlStatement();
boolean functionStatement = sqlStatement instanceof
CreateFunctionStatement || sqlStatement instanceof AlterFunctionStatement ||
sqlStatement instanceof DropFunctionStatement;
boolean procedureStatement = sqlStatement instanceof
CreateProcedureStatement || sqlStatement instanceof AlterProcedureStatement ||
sqlStatement instanceof DropProcedureStatement;
if (functionStatement || procedureStatement) {
- routeToAllDatabase(routeContext, broadcastRule);
+ routeToAllDatabase(routeContext, rule);
return;
}
// TODO BEGIN extract db route logic to common database router, eg:
DCL in instance route @duanzhengqiang
if (sqlStatement instanceof CreateTablespaceStatement || sqlStatement
instanceof AlterTablespaceStatement || sqlStatement instanceof
DropTablespaceStatement) {
- routeToAllDatabaseInstance(routeContext, database, broadcastRule);
+ routeToAllDatabaseInstance(routeContext, database, rule);
}
// TODO END extract db route logic to common database router, eg: DCL
in instance route
Collection<String> tableNames = sqlStatementContext instanceof
TableAvailable ? getTableNames((TableAvailable) sqlStatementContext) :
Collections.emptyList();
- if (broadcastRule.isAllBroadcastTables(tableNames)) {
- routeToAllDatabaseInstance(routeContext, database, broadcastRule);
+ if (rule.isAllBroadcastTables(tableNames)) {
+ routeToAllDatabaseInstance(routeContext, database, rule);
}
}
@@ -128,9 +128,9 @@ public final class BroadcastSQLRouter implements
EntranceSQLRouter<BroadcastRule
return result;
}
- private void putAllBroadcastTables(final RouteContext routeContext, final
BroadcastRule broadcastRule, final SQLStatementContext sqlStatementContext) {
+ private void putAllBroadcastTables(final RouteContext routeContext, final
BroadcastRule rule, final SQLStatementContext sqlStatementContext) {
Collection<String> tableNames = sqlStatementContext instanceof
TableAvailable ? ((TableAvailable)
sqlStatementContext).getTablesContext().getTableNames() :
Collections.emptyList();
- for (String each :
broadcastRule.getBroadcastRuleTableNames(tableNames)) {
+ for (String each : rule.filterBroadcastTableNames(tableNames)) {
for (RouteUnit routeUnit : routeContext.getRouteUnits()) {
routeUnit.getTableMappers().add(new RouteMapper(each, each));
}
@@ -151,18 +151,18 @@ public final class BroadcastSQLRouter implements
EntranceSQLRouter<BroadcastRule
return false;
}
- private void routeToAllDatabaseInstance(final RouteContext routeContext,
final ShardingSphereDatabase database, final BroadcastRule broadcastRule) {
+ private void routeToAllDatabaseInstance(final RouteContext routeContext,
final ShardingSphereDatabase database, final BroadcastRule rule) {
routeContext.getRouteUnits().clear();
- for (String each : broadcastRule.getDataSourceNames()) {
+ for (String each : rule.getDataSourceNames()) {
if
(database.getResourceMetaData().getAllInstanceDataSourceNames().contains(each))
{
routeContext.getRouteUnits().add(new RouteUnit(new
RouteMapper(each, each), Collections.emptyList()));
}
}
}
- private void routeToAllDatabase(final RouteContext routeContext, final
BroadcastRule broadcastRule) {
+ private void routeToAllDatabase(final RouteContext routeContext, final
BroadcastRule rule) {
routeContext.getRouteUnits().clear();
- for (String each : broadcastRule.getDataSourceNames()) {
+ for (String each : rule.getDataSourceNames()) {
routeContext.getRouteUnits().add(new RouteUnit(new
RouteMapper(each, each), Collections.emptyList()));
}
}
diff --git
a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/route/engine/BroadcastRouteEngineFactory.java
b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/route/engine/BroadcastRouteEngineFactory.java
index 1de692beb07..a74cb97eda9 100644
---
a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/route/engine/BroadcastRouteEngineFactory.java
+++
b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/route/engine/BroadcastRouteEngineFactory.java
@@ -59,12 +59,12 @@ public final class BroadcastRouteEngineFactory {
/**
* Create new instance of broadcast routing engine.
*
- * @param broadcastRule broadcast rule
+ * @param rule broadcast rule
* @param database database
* @param queryContext query context
* @return broadcast route engine
*/
- public static BroadcastRouteEngine newInstance(final BroadcastRule
broadcastRule, final ShardingSphereDatabase database, final QueryContext
queryContext) {
+ public static BroadcastRouteEngine newInstance(final BroadcastRule rule,
final ShardingSphereDatabase database, final QueryContext queryContext) {
SQLStatementContext sqlStatementContext =
queryContext.getSqlStatementContext();
SQLStatement sqlStatement = sqlStatementContext.getSqlStatement();
if (sqlStatement instanceof TCLStatement) {
@@ -72,32 +72,32 @@ public final class BroadcastRouteEngineFactory {
}
if (sqlStatement instanceof DDLStatement) {
return sqlStatementContext instanceof CursorAvailable
- ? getCursorRouteEngine(broadcastRule, sqlStatementContext,
queryContext.getConnectionContext())
- : getDDLRoutingEngine(broadcastRule, database,
queryContext);
+ ? getCursorRouteEngine(rule, sqlStatementContext,
queryContext.getConnectionContext())
+ : getDDLRoutingEngine(rule, database, queryContext);
}
if (sqlStatement instanceof DALStatement) {
- return getDALRoutingEngine(broadcastRule, queryContext);
+ return getDALRoutingEngine(rule, queryContext);
}
if (sqlStatement instanceof DCLStatement) {
- return getDCLRoutingEngine(broadcastRule, queryContext);
+ return getDCLRoutingEngine(rule, queryContext);
}
- return getDQLRoutingEngine(broadcastRule, queryContext);
+ return getDQLRoutingEngine(rule, queryContext);
}
- private static BroadcastRouteEngine getCursorRouteEngine(final
BroadcastRule broadcastRule, final SQLStatementContext sqlStatementContext,
final ConnectionContext connectionContext) {
+ private static BroadcastRouteEngine getCursorRouteEngine(final
BroadcastRule rule, final SQLStatementContext sqlStatementContext, final
ConnectionContext connectionContext) {
if (sqlStatementContext instanceof CloseStatementContext &&
((CloseStatementContext) sqlStatementContext).getSqlStatement().isCloseAll()) {
return new BroadcastDatabaseBroadcastRoutingEngine();
}
Collection<String> tableNames = sqlStatementContext instanceof
TableAvailable
? ((TableAvailable)
sqlStatementContext).getTablesContext().getSimpleTables().stream().map(each ->
each.getTableName().getIdentifier().getValue()).collect(Collectors.toSet())
: Collections.emptyList();
- return broadcastRule.isAllBroadcastTables(tableNames) ? new
BroadcastUnicastRoutingEngine(sqlStatementContext, tableNames,
connectionContext) : new BroadcastIgnoreRoutingEngine();
+ return rule.isAllBroadcastTables(tableNames) ? new
BroadcastUnicastRoutingEngine(sqlStatementContext, tableNames,
connectionContext) : new BroadcastIgnoreRoutingEngine();
}
- private static BroadcastRouteEngine getDDLRoutingEngine(final
BroadcastRule broadcastRule, final ShardingSphereDatabase database, final
QueryContext queryContext) {
+ private static BroadcastRouteEngine getDDLRoutingEngine(final
BroadcastRule rule, final ShardingSphereDatabase database, final QueryContext
queryContext) {
SQLStatementContext sqlStatementContext =
queryContext.getSqlStatementContext();
Collection<String> tableNames = getTableNames(database,
sqlStatementContext);
- if (broadcastRule.isAllBroadcastTables(tableNames)) {
+ if (rule.isAllBroadcastTables(tableNames)) {
return new BroadcastTableBroadcastRoutingEngine(tableNames);
}
return new BroadcastIgnoreRoutingEngine();
@@ -123,26 +123,26 @@ public final class BroadcastRouteEngineFactory {
return result;
}
- private static BroadcastRouteEngine getDALRoutingEngine(final
BroadcastRule broadcastRule, final QueryContext queryContext) {
+ private static BroadcastRouteEngine getDALRoutingEngine(final
BroadcastRule rule, final QueryContext queryContext) {
SQLStatementContext sqlStatementContext =
queryContext.getSqlStatementContext();
SQLStatement sqlStatement = sqlStatementContext.getSqlStatement();
if (sqlStatement instanceof MySQLUseStatement) {
return new BroadcastIgnoreRoutingEngine();
}
Collection<String> tableNames = sqlStatementContext instanceof
TableAvailable ? ((TableAvailable)
sqlStatementContext).getTablesContext().getTableNames() :
Collections.emptyList();
- Collection<String> broadcastRuleTableNames =
broadcastRule.getBroadcastRuleTableNames(tableNames);
- if (broadcastRule.isAllBroadcastTables(broadcastRuleTableNames)) {
- return new
BroadcastTableBroadcastRoutingEngine(broadcastRuleTableNames);
+ Collection<String> broadcastTableNames =
rule.filterBroadcastTableNames(tableNames);
+ if (rule.isAllBroadcastTables(broadcastTableNames)) {
+ return new
BroadcastTableBroadcastRoutingEngine(broadcastTableNames);
}
return new BroadcastIgnoreRoutingEngine();
}
- private static BroadcastRouteEngine getDCLRoutingEngine(final
BroadcastRule broadcastRule, final QueryContext queryContext) {
+ private static BroadcastRouteEngine getDCLRoutingEngine(final
BroadcastRule rule, final QueryContext queryContext) {
SQLStatementContext sqlStatementContext =
queryContext.getSqlStatementContext();
Collection<String> tableNames = sqlStatementContext instanceof
TableAvailable ? ((TableAvailable)
sqlStatementContext).getTablesContext().getTableNames() :
Collections.emptyList();
- Collection<String> broadcastRuleTableNames =
broadcastRule.getBroadcastRuleTableNames(tableNames);
- if (isDCLForSingleTable(sqlStatementContext) &&
!broadcastRuleTableNames.isEmpty() ||
broadcastRule.isAllBroadcastTables(broadcastRuleTableNames)) {
- return new
BroadcastTableBroadcastRoutingEngine(broadcastRuleTableNames);
+ Collection<String> broadcastTableNames =
rule.filterBroadcastTableNames(tableNames);
+ if (isDCLForSingleTable(sqlStatementContext) &&
!broadcastTableNames.isEmpty() ||
rule.isAllBroadcastTables(broadcastTableNames)) {
+ return new
BroadcastTableBroadcastRoutingEngine(broadcastTableNames);
}
return new BroadcastIgnoreRoutingEngine();
}
@@ -156,10 +156,10 @@ public final class BroadcastRouteEngineFactory {
return false;
}
- private static BroadcastRouteEngine getDQLRoutingEngine(final
BroadcastRule broadcastRule, final QueryContext queryContext) {
+ private static BroadcastRouteEngine getDQLRoutingEngine(final
BroadcastRule rule, final QueryContext queryContext) {
SQLStatementContext sqlStatementContext =
queryContext.getSqlStatementContext();
Collection<String> tableNames = sqlStatementContext instanceof
TableAvailable ? ((TableAvailable)
sqlStatementContext).getTablesContext().getTableNames() :
Collections.emptyList();
- if (broadcastRule.isAllBroadcastTables(tableNames)) {
+ if (rule.isAllBroadcastTables(tableNames)) {
return sqlStatementContext.getSqlStatement() instanceof
SelectStatement
? new BroadcastUnicastRoutingEngine(sqlStatementContext,
tableNames, queryContext.getConnectionContext())
: new BroadcastDatabaseBroadcastRoutingEngine();
diff --git
a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/route/engine/type/broadcast/BroadcastTableBroadcastRoutingEngine.java
b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/route/engine/type/broadcast/BroadcastTableBroadcastRoutingEngine.java
index eb4b295dc99..e0be543465d 100644
---
a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/route/engine/type/broadcast/BroadcastTableBroadcastRoutingEngine.java
+++
b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/route/engine/type/broadcast/BroadcastTableBroadcastRoutingEngine.java
@@ -20,45 +20,44 @@ package
org.apache.shardingsphere.broadcast.route.engine.type.broadcast;
import lombok.RequiredArgsConstructor;
import
org.apache.shardingsphere.broadcast.route.engine.type.BroadcastRouteEngine;
import org.apache.shardingsphere.broadcast.rule.BroadcastRule;
+import org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation;
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 java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.LinkedList;
/**
* Broadcast routing engine for table.
*/
+@HighFrequencyInvocation
@RequiredArgsConstructor
public final class BroadcastTableBroadcastRoutingEngine implements
BroadcastRouteEngine {
- private final Collection<String> broadcastRuleTableNames;
+ private final Collection<String> broadcastTableNames;
@Override
- public RouteContext route(final RouteContext routeContext, final
BroadcastRule broadcastRule) {
- Collection<String> logicTableNames =
broadcastRule.getBroadcastRuleTableNames(broadcastRuleTableNames);
- if (logicTableNames.isEmpty()) {
-
routeContext.getRouteUnits().addAll(getRouteContext(broadcastRule).getRouteUnits());
- } else {
- routeContext.getRouteUnits().addAll(getRouteContext(broadcastRule,
logicTableNames).getRouteUnits());
- }
+ public RouteContext route(final RouteContext routeContext, final
BroadcastRule rule) {
+ Collection<String> logicTableNames =
rule.filterBroadcastTableNames(broadcastTableNames);
+ RouteContext toBeAddedRouteContext = logicTableNames.isEmpty() ?
getRouteContext(rule) : getRouteContext(rule, logicTableNames);
+
routeContext.getRouteUnits().addAll(toBeAddedRouteContext.getRouteUnits());
return routeContext;
}
- private RouteContext getRouteContext(final BroadcastRule broadcastRule) {
+ private RouteContext getRouteContext(final BroadcastRule rule) {
RouteContext result = new RouteContext();
- for (String each : broadcastRule.getDataSourceNames()) {
+ for (String each : rule.getDataSourceNames()) {
result.getRouteUnits().add(new RouteUnit(new RouteMapper(each,
each), Collections.singletonList(new RouteMapper("", ""))));
}
return result;
}
- private RouteContext getRouteContext(final BroadcastRule broadcastRule,
final Collection<String> logicTableNames) {
+ private RouteContext getRouteContext(final BroadcastRule rule, final
Collection<String> logicTableNames) {
RouteContext result = new RouteContext();
Collection<RouteMapper> tableRouteMappers =
getTableRouteMappers(logicTableNames);
- for (String each : broadcastRule.getDataSourceNames()) {
+ for (String each : rule.getDataSourceNames()) {
RouteMapper dataSourceMapper = new RouteMapper(each, each);
result.getRouteUnits().add(new RouteUnit(dataSourceMapper,
tableRouteMappers));
}
@@ -66,9 +65,9 @@ public final class BroadcastTableBroadcastRoutingEngine
implements BroadcastRout
}
private Collection<RouteMapper> getTableRouteMappers(final
Collection<String> logicTableNames) {
- Collection<RouteMapper> result = new
ArrayList<>(logicTableNames.size());
- for (String logicTableName : logicTableNames) {
- result.add(new RouteMapper(logicTableName, logicTableName));
+ Collection<RouteMapper> result = new LinkedList<>();
+ for (String each : logicTableNames) {
+ result.add(new RouteMapper(each, each));
}
return result;
}
diff --git
a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/rule/BroadcastRule.java
b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/rule/BroadcastRule.java
index 195abb599d9..9f587b5151f 100644
---
a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/rule/BroadcastRule.java
+++
b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/rule/BroadcastRule.java
@@ -43,10 +43,10 @@ public final class BroadcastRule implements DatabaseRule {
private final BroadcastRuleConfiguration configuration;
- private final Collection<String> tables;
-
private final Collection<String> dataSourceNames;
+ private final Collection<String> tables;
+
private final RuleAttributes attributes;
public BroadcastRule(final BroadcastRuleConfiguration config, final
Map<String, DataSource> dataSources, final Collection<ShardingSphereRule>
builtRules) {
@@ -84,20 +84,20 @@ public final class BroadcastRule implements DatabaseRule {
}
/**
- * Get broadcast rule table names.
+ * Filter broadcast table names.
*
- * @param logicTableNames logic table names
- * @return broadcast rule table names.
+ * @param logicTableNames to be filtered logic table names
+ * @return filtered broadcast table names
*/
- public Collection<String> getBroadcastRuleTableNames(final
Collection<String> logicTableNames) {
+ public Collection<String> filterBroadcastTableNames(final
Collection<String> logicTableNames) {
return
logicTableNames.stream().filter(tables::contains).collect(Collectors.toSet());
}
/**
- * Judge whether logic table is all broadcast tables or not.
+ * Judge whether logic tables are all broadcast tables.
*
* @param logicTableNames logic table names
- * @return whether logic table is all broadcast tables or not
+ * @return logic tables are all broadcast tables or not
*/
public boolean isAllBroadcastTables(final Collection<String>
logicTableNames) {
return !logicTableNames.isEmpty() &&
tables.containsAll(logicTableNames);
diff --git
a/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/route/engine/type/broadcast/BroadcastTableBroadcastRoutingEngineTest.java
b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/route/engine/type/broadcast/BroadcastTableBroadcastRoutingEngineTest.java
index 89399b1a57f..02fa3ddb612 100644
---
a/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/route/engine/type/broadcast/BroadcastTableBroadcastRoutingEngineTest.java
+++
b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/route/engine/type/broadcast/BroadcastTableBroadcastRoutingEngineTest.java
@@ -40,10 +40,10 @@ class BroadcastTableBroadcastRoutingEngineTest {
void assertRouteWithBroadcastRuleTable() {
Collection<String> broadcastRuleTableNames =
Collections.singleton("t_address");
BroadcastTableBroadcastRoutingEngine engine = new
BroadcastTableBroadcastRoutingEngine(broadcastRuleTableNames);
- BroadcastRule broadcastRule = mock(BroadcastRule.class);
-
when(broadcastRule.getDataSourceNames()).thenReturn(Arrays.asList("ds_0",
"ds_1"));
-
when(broadcastRule.getBroadcastRuleTableNames(any())).thenReturn(Collections.singleton("t_address"));
- RouteContext routeContext = engine.route(new RouteContext(),
broadcastRule);
+ BroadcastRule rule = mock(BroadcastRule.class);
+ when(rule.getDataSourceNames()).thenReturn(Arrays.asList("ds_0",
"ds_1"));
+
when(rule.filterBroadcastTableNames(any())).thenReturn(Collections.singleton("t_address"));
+ RouteContext routeContext = engine.route(new RouteContext(), rule);
assertThat(routeContext.getRouteUnits().size(), is(2));
Iterator<RouteUnit> iterator = routeContext.getRouteUnits().iterator();
assertRouteMapper(iterator.next(), "ds_0", "t_address");
@@ -54,10 +54,10 @@ class BroadcastTableBroadcastRoutingEngineTest {
void assertRouteWithoutBroadcastRuleTable() {
Collection<String> broadcastRuleTableNames =
Collections.singleton("t_address");
BroadcastTableBroadcastRoutingEngine engine = new
BroadcastTableBroadcastRoutingEngine(broadcastRuleTableNames);
- BroadcastRule broadcastRule = mock(BroadcastRule.class);
-
when(broadcastRule.getDataSourceNames()).thenReturn(Arrays.asList("ds_0",
"ds_1"));
-
when(broadcastRule.getBroadcastRuleTableNames(any())).thenReturn(Collections.emptyList());
- RouteContext routeContext = engine.route(new RouteContext(),
broadcastRule);
+ BroadcastRule rule = mock(BroadcastRule.class);
+ when(rule.getDataSourceNames()).thenReturn(Arrays.asList("ds_0",
"ds_1"));
+
when(rule.filterBroadcastTableNames(any())).thenReturn(Collections.emptyList());
+ RouteContext routeContext = engine.route(new RouteContext(), rule);
assertThat(routeContext.getRouteUnits().size(), is(2));
Iterator<RouteUnit> iterator = routeContext.getRouteUnits().iterator();
assertRouteMapper(iterator.next(), "ds_0", "");