csdeng84 opened a new issue #16008:
URL: https://github.com/apache/shardingsphere/issues/16008
91/5000
When a table using the standard subdivision strategy, if use hintManager.
SetDatabaseShardingValue addTableShardingValue, cannot be routed to the
corresponding database and table。
because in ShardingStandardRoutingEngine.java (line 78)
only use HintShardingStrategy can enter into the function isRoutingByHint
--------------------------------------------------------------------------------------------------------
private Collection<DataNode> getDataNodes(final ShardingRule
shardingRule, final TableRule tableRule) {
ShardingStrategy databaseShardingStrategy =
createShardingStrategy(shardingRule.getDatabaseShardingStrategyConfiguration(tableRule),
shardingRule.getShardingAlgorithms(),
shardingRule.getDefaultShardingColumn());
ShardingStrategy tableShardingStrategy =
createShardingStrategy(shardingRule.getTableShardingStrategyConfiguration(tableRule),
shardingRule.getShardingAlgorithms(),
shardingRule.getDefaultShardingColumn());
if (isRoutingByHint(shardingRule, tableRule)) {
return routeByHint(tableRule, databaseShardingStrategy,
tableShardingStrategy);
}
if (isRoutingByShardingConditions(shardingRule, tableRule)) {
return routeByShardingConditions(shardingRule, tableRule,
databaseShardingStrategy, tableShardingStrategy);
}
return routeByMixedConditions(shardingRule, tableRule,
databaseShardingStrategy, tableShardingStrategy);
}
---------------------------------------------------------------------------------------------------------------
This is recommended
private boolean isRoutingByHint(final ShardingRule shardingRule, final
TableRule tableRule) {
//return
(shardingRule.getDatabaseShardingStrategyConfiguration(tableRule) instanceof
HintShardingStrategyConfiguration
// &&
shardingRule.getTableShardingStrategyConfiguration(tableRule) instanceof
HintShardingStrategyConfiguration);
boolean isByHitManager = getDatabaseShardingValuesFromHint().size()
> 0 && getTableShardingValuesFromHint().size() > 0;
boolean isByHitStrategy =
shardingRule.getDatabaseShardingStrategyConfiguration(tableRule) instanceof
HintShardingStrategyConfiguration
&&
shardingRule.getTableShardingStrategyConfiguration(tableRule) instanceof
HintShardingStrategyConfiguration;
return isByHitManager || isByHitStrategy;
}
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]