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]


Reply via email to