cheese8 commented on a change in pull request #14864:
URL: https://github.com/apache/shardingsphere/pull/14864#discussion_r802242511



##########
File path: 
shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
##########
@@ -192,11 +194,65 @@ private String getDefaultGenerateKeyColumn(final 
KeyGenerateStrategyConfiguratio
     private BindingTableRule createBindingTableRule(final String 
bindingTableGroup) {
         Map<String, TableRule> tableRules = 
Splitter.on(",").trimResults().splitToList(bindingTableGroup).stream()
                 .map(this::getTableRule).collect(Collectors.toMap(each -> 
each.getLogicTable().toLowerCase(), Function.identity(), (oldValue, 
currentValue) -> oldValue, LinkedHashMap::new));
+        checkTheSameActualDataSourceNames(tableRules, bindingTableGroup);

Review comment:
       ok

##########
File path: 
shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
##########
@@ -192,11 +194,65 @@ private String getDefaultGenerateKeyColumn(final 
KeyGenerateStrategyConfiguratio
     private BindingTableRule createBindingTableRule(final String 
bindingTableGroup) {
         Map<String, TableRule> tableRules = 
Splitter.on(",").trimResults().splitToList(bindingTableGroup).stream()
                 .map(this::getTableRule).collect(Collectors.toMap(each -> 
each.getLogicTable().toLowerCase(), Function.identity(), (oldValue, 
currentValue) -> oldValue, LinkedHashMap::new));
+        checkTheSameActualDataSourceNames(tableRules, bindingTableGroup);
+        checkTheSameShardingStrategyConfiguration(tableRules, 
bindingTableGroup, true);
+        checkTheSameShardingStrategyConfiguration(tableRules, 
bindingTableGroup, false);
         BindingTableRule result = new BindingTableRule();
         result.getTableRules().putAll(tableRules);
         return result;
     }
     
+    private void checkTheSameActualDataSourceNames(final Map<String, 
TableRule> tableRules, final String bindingTableGroup) {
+        Collection<String> savedActualDataSourceNames = new HashSet<>();
+        int countSavedActualDataSourceNames = 0;
+        for (TableRule tableRule : tableRules.values()) {
+            if (savedActualDataSourceNames.isEmpty()) {
+                
savedActualDataSourceNames.addAll(tableRule.getActualDatasourceNames());
+                countSavedActualDataSourceNames = 
savedActualDataSourceNames.size();
+            } else if (!savedActualDataSourceNames.isEmpty()) {
+                
savedActualDataSourceNames.addAll(tableRule.getActualDatasourceNames());
+                if (countSavedActualDataSourceNames != 
savedActualDataSourceNames.size()) {
+                    throw new ShardingSphereConfigurationException("The 
actualDataSourceNames on bindingTableGroup `%s` are inconsistent", 
bindingTableGroup);
+                }
+            }
+        }
+    }
+    
+    private void checkTheSameShardingStrategyConfiguration(final Map<String, 
TableRule> tableRules, final String bindingTableGroup, final Boolean 
databaseOrTable) {
+        String savedShardingColumn = null;
+        String savedShardingAlgorithm = null;
+        for (TableRule tableRule : tableRules.values()) {
+            ShardingStrategyConfiguration shardingStrategyConfiguration = 
databaseOrTable ? tableRule.getDatabaseShardingStrategyConfig() : 
tableRule.getTableShardingStrategyConfig();
+            if (null == shardingStrategyConfiguration) {
+                continue;
+            }
+            String shardingColumn = 
getShardingColumn(shardingStrategyConfiguration);
+            if (null == savedShardingColumn) {
+                savedShardingColumn = shardingColumn;
+            } else if (null != savedShardingColumn && 
!savedShardingColumn.equalsIgnoreCase(shardingColumn)) {
+                log.warn("All the route computations will only use the 
sharding strategy of the primary table, but the databaseShardingStrategyConfig 
on bindTable `%s` are inconsistent.", 

Review comment:
       ok




-- 
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