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 45b4ddf25fb ConvertYamlConfigurationHandler supports auditStrategy.
(#22979)
45b4ddf25fb is described below
commit 45b4ddf25fbfae4a6650851fe7141f34460fa77e
Author: yx9o <[email protected]>
AuthorDate: Tue Dec 20 10:31:32 2022 +0800
ConvertYamlConfigurationHandler supports auditStrategy. (#22979)
---
.../common/constant/DistSQLScriptConstants.java | 2 +
.../queryable/ConvertYamlConfigurationHandler.java | 77 +++++++++++++---------
.../ConvertYamlConfigurationHandlerTest.java | 4 +-
.../conf/convert/config-sharding-auto-tables.yaml | 13 ++++
.../expected/convert-sharding-auto-tables.yaml | 9 ++-
.../test/resources/expected/convert-sharding.yaml | 6 +-
6 files changed, 74 insertions(+), 37 deletions(-)
diff --git
a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/common/constant/DistSQLScriptConstants.java
b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/common/constant/DistSQLScriptConstants.java
index d859cbc01ee..e1b089f2f23 100644
---
a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/common/constant/DistSQLScriptConstants.java
+++
b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/common/constant/DistSQLScriptConstants.java
@@ -109,6 +109,8 @@ public final class DistSQLScriptConstants {
public static final String KEY_GENERATOR_STRATEGY =
"KEY_GENERATE_STRATEGY(COLUMN=%s, %s)";
+ public static final String AUDIT_STRATEGY = "AUDIT_STRATEGY(%s,
ALLOW_HINT_DISABLE=%s)";
+
public static final String SHARDING_BINDING_TABLE_RULES = "CREATE SHARDING
TABLE REFERENCE RULE";
public static final String BINDING_TABLES = " %s (%s)";
diff --git
a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ConvertYamlConfigurationHandler.java
b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ConvertYamlConfigurationHandler.java
index dff36d70c2a..1471a18df4a 100644
---
a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ConvertYamlConfigurationHandler.java
+++
b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ConvertYamlConfigurationHandler.java
@@ -61,6 +61,7 @@ import
org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
import
org.apache.shardingsphere.sharding.api.config.rule.ShardingAutoTableRuleConfiguration;
import
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableReferenceRuleConfiguration;
import
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
+import
org.apache.shardingsphere.sharding.api.config.strategy.audit.ShardingAuditStrategyConfiguration;
import
org.apache.shardingsphere.sharding.api.config.strategy.keygen.KeyGenerateStrategyConfiguration;
import
org.apache.shardingsphere.sharding.api.config.strategy.sharding.ComplexShardingStrategyConfiguration;
import
org.apache.shardingsphere.sharding.api.config.strategy.sharding.ShardingStrategyConfiguration;
@@ -222,8 +223,8 @@ public final class ConvertYamlConfigurationHandler extends
QueryableRALBackendHa
if (ruleConfig.getTables().isEmpty() &&
ruleConfig.getAutoTables().isEmpty()) {
return;
}
- String tableRules = getTableRules(ruleConfig.getTables(),
ruleConfig.getShardingAlgorithms(), ruleConfig.getKeyGenerators());
- String autoTableRules = getAutoTableRules(ruleConfig.getAutoTables(),
ruleConfig.getShardingAlgorithms(), ruleConfig.getKeyGenerators(),
ruleConfig.getDefaultShardingColumn());
+ String tableRules = getTableRules(ruleConfig);
+ String autoTableRules = getAutoTableRules(ruleConfig);
result.append(DistSQLScriptConstants.CREATE_SHARDING_TABLE).append(tableRules);
if (!Strings.isNullOrEmpty(tableRules) &&
!Strings.isNullOrEmpty(autoTableRules)) {
result.append(DistSQLScriptConstants.COMMA).append(System.lineSeparator());
@@ -231,15 +232,14 @@ public final class ConvertYamlConfigurationHandler
extends QueryableRALBackendHa
result.append(autoTableRules).append(DistSQLScriptConstants.SEMI).append(System.lineSeparator()).append(System.lineSeparator());
}
- private String getAutoTableRules(final
Collection<ShardingAutoTableRuleConfiguration> autoTables, final Map<String,
AlgorithmConfiguration> shardingAlgorithms,
- final Map<String, AlgorithmConfiguration>
keyGenerators, final String defaultShardingColumn) {
+ private String getAutoTableRules(final ShardingRuleConfiguration
ruleConfig) {
StringBuilder result = new StringBuilder();
- if (!autoTables.isEmpty()) {
- Iterator<ShardingAutoTableRuleConfiguration> iterator =
autoTables.iterator();
+ if (!ruleConfig.getAutoTables().isEmpty()) {
+ Iterator<ShardingAutoTableRuleConfiguration> iterator =
ruleConfig.getAutoTables().iterator();
while (iterator.hasNext()) {
- ShardingAutoTableRuleConfiguration tableRuleConfig =
iterator.next();
-
result.append(String.format(DistSQLScriptConstants.SHARDING_AUTO_TABLE,
tableRuleConfig.getLogicTable(), tableRuleConfig.getActualDataSources(),
- appendAutoTableStrategy(tableRuleConfig,
shardingAlgorithms, keyGenerators, defaultShardingColumn)));
+ ShardingAutoTableRuleConfiguration autoTableRuleConfig =
iterator.next();
+
result.append(String.format(DistSQLScriptConstants.SHARDING_AUTO_TABLE,
autoTableRuleConfig.getLogicTable(), autoTableRuleConfig.getActualDataSources(),
+ appendAutoTableStrategy(autoTableRuleConfig,
ruleConfig)));
if (iterator.hasNext()) {
result.append(DistSQLScriptConstants.COMMA);
}
@@ -248,15 +248,14 @@ public final class ConvertYamlConfigurationHandler
extends QueryableRALBackendHa
return result.toString();
}
- private String getTableRules(final
Collection<ShardingTableRuleConfiguration> tables, final Map<String,
AlgorithmConfiguration> shardingAlgorithms,
- final Map<String, AlgorithmConfiguration>
keyGenerators) {
+ private String getTableRules(final ShardingRuleConfiguration ruleConfig) {
StringBuilder result = new StringBuilder();
- if (!tables.isEmpty()) {
- Iterator<ShardingTableRuleConfiguration> iterator =
tables.iterator();
+ if (!ruleConfig.getTables().isEmpty()) {
+ Iterator<ShardingTableRuleConfiguration> iterator =
ruleConfig.getTables().iterator();
while (iterator.hasNext()) {
ShardingTableRuleConfiguration tableRuleConfig =
iterator.next();
result.append(String.format(DistSQLScriptConstants.SHARDING_TABLE,
tableRuleConfig.getLogicTable(), tableRuleConfig.getActualDataNodes(),
- appendTableStrategy(tableRuleConfig,
shardingAlgorithms, keyGenerators)));
+ appendTableStrategy(tableRuleConfig, ruleConfig)));
if (iterator.hasNext()) {
result.append(DistSQLScriptConstants.COMMA);
}
@@ -265,24 +264,43 @@ public final class ConvertYamlConfigurationHandler
extends QueryableRALBackendHa
return result.toString();
}
- private String appendAutoTableStrategy(final
ShardingAutoTableRuleConfiguration ruleConfig, final Map<String,
AlgorithmConfiguration> shardingAlgorithms,
- final Map<String,
AlgorithmConfiguration> keyGenerators, final String defaultShardingColumn) {
+ private String appendAutoTableStrategy(final
ShardingAutoTableRuleConfiguration autoTableRuleConfig, final
ShardingRuleConfiguration ruleConfig) {
StringBuilder result = new StringBuilder();
- StandardShardingStrategyConfiguration strategyConfig =
(StandardShardingStrategyConfiguration) ruleConfig.getShardingStrategy();
- String shardingColumn =
!Strings.isNullOrEmpty(strategyConfig.getShardingColumn()) ?
strategyConfig.getShardingColumn() : defaultShardingColumn;
-
result.append(String.format(DistSQLScriptConstants.AUTO_TABLE_STRATEGY,
shardingColumn,
getAlgorithmType(shardingAlgorithms.get(strategyConfig.getShardingAlgorithmName()))));
- appendKeyGenerateStrategy(keyGenerators,
ruleConfig.getKeyGenerateStrategy(), result);
- // TODO auditStrategy
+ StandardShardingStrategyConfiguration strategyConfig =
(StandardShardingStrategyConfiguration)
autoTableRuleConfig.getShardingStrategy();
+ String shardingColumn =
!Strings.isNullOrEmpty(strategyConfig.getShardingColumn()) ?
strategyConfig.getShardingColumn() : ruleConfig.getDefaultShardingColumn();
+
result.append(String.format(DistSQLScriptConstants.AUTO_TABLE_STRATEGY,
shardingColumn,
getAlgorithmType(ruleConfig.getShardingAlgorithms().get(strategyConfig.getShardingAlgorithmName()))));
+ appendKeyGenerateStrategy(ruleConfig.getKeyGenerators(),
autoTableRuleConfig.getKeyGenerateStrategy(), result);
+ appendAuditStrategy(ruleConfig.getAuditors(), null !=
autoTableRuleConfig.getAuditStrategy() ? autoTableRuleConfig.getAuditStrategy()
: ruleConfig.getDefaultAuditStrategy(), result);
return result.toString();
}
- private String appendTableStrategy(final ShardingTableRuleConfiguration
ruleConfig,
- final Map<String,
AlgorithmConfiguration> shardingAlgorithms, final Map<String,
AlgorithmConfiguration> keyGenerators) {
+ private void appendAuditStrategy(final Map<String, AlgorithmConfiguration>
auditors, final ShardingAuditStrategyConfiguration auditStrategy, final
StringBuilder result) {
+ if (null != auditStrategy) {
+
result.append(DistSQLScriptConstants.COMMA).append(System.lineSeparator());
+ result.append(String.format(DistSQLScriptConstants.AUDIT_STRATEGY,
getAlgorithmTypes(auditors, auditStrategy.getAuditorNames()),
auditStrategy.isAllowHintDisable()));
+ }
+ }
+
+ private String getAlgorithmTypes(final Map<String, AlgorithmConfiguration>
auditors, final Collection<String> auditorNames) {
StringBuilder result = new StringBuilder();
- appendStrategy(ruleConfig.getDatabaseShardingStrategy(),
DistSQLScriptConstants.DATABASE_STRATEGY, result, shardingAlgorithms);
- appendStrategy(ruleConfig.getTableShardingStrategy(),
DistSQLScriptConstants.TABLE_STRATEGY, result, shardingAlgorithms);
- appendKeyGenerateStrategy(keyGenerators,
ruleConfig.getKeyGenerateStrategy(), result);
- // TODO auditStrategy
+ if (!auditorNames.isEmpty()) {
+ Iterator<String> iterator = auditorNames.iterator();
+ while (iterator.hasNext()) {
+ result.append(getAlgorithmType(auditors.get(iterator.next())));
+ if (iterator.hasNext()) {
+ result.append(DistSQLScriptConstants.COMMA);
+ }
+ }
+ }
+ return result.toString();
+ }
+
+ private String appendTableStrategy(final ShardingTableRuleConfiguration
tableRuleConfig, final ShardingRuleConfiguration ruleConfig) {
+ StringBuilder result = new StringBuilder();
+ appendStrategy(tableRuleConfig.getDatabaseShardingStrategy(),
DistSQLScriptConstants.DATABASE_STRATEGY, result,
ruleConfig.getShardingAlgorithms());
+ appendStrategy(tableRuleConfig.getTableShardingStrategy(),
DistSQLScriptConstants.TABLE_STRATEGY, result,
ruleConfig.getShardingAlgorithms());
+ appendKeyGenerateStrategy(ruleConfig.getKeyGenerators(),
tableRuleConfig.getKeyGenerateStrategy(), result);
+ appendAuditStrategy(ruleConfig.getAuditors(), null !=
tableRuleConfig.getAuditStrategy() ? tableRuleConfig.getAuditStrategy() :
ruleConfig.getDefaultAuditStrategy(), result);
return result.toString();
}
@@ -426,10 +444,9 @@ public final class ConvertYamlConfigurationHandler extends
QueryableRALBackendHa
private String getDatabaseDiscoveryHeartbeat(final
DatabaseDiscoveryHeartBeatConfiguration heartBeatConfig) {
StringBuilder result = new StringBuilder();
- if (null == heartBeatConfig) {
- return result.toString();
+ if (null != heartBeatConfig) {
+ result.append(getAlgorithmProperties(heartBeatConfig.getProps()));
}
- result.append(getAlgorithmProperties(heartBeatConfig.getProps()));
return result.toString();
}
diff --git
a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ConvertYamlConfigurationHandlerTest.java
b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ConvertYamlConfigurationHandlerTest.java
index 633694376c6..cdbe21529d5 100644
---
a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ConvertYamlConfigurationHandlerTest.java
+++
b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ConvertYamlConfigurationHandlerTest.java
@@ -148,11 +148,11 @@ public final class ConvertYamlConfigurationHandlerTest {
}
private void assertParseSQL(final String actual) {
- for (String each : Splitter.on(";").trimResults().splitToList(actual))
{
+ Splitter.on(";").trimResults().splitToList(actual).forEach(each -> {
if (!Strings.isNullOrEmpty(each)) {
assertNotNull(sqlParserRule.getSQLParserEngine(new
MySQLDatabaseType().getType()).parse(each, false));
}
- }
+ });
}
@SneakyThrows(IOException.class)
diff --git
a/proxy/backend/src/test/resources/conf/convert/config-sharding-auto-tables.yaml
b/proxy/backend/src/test/resources/conf/convert/config-sharding-auto-tables.yaml
index 8a0bfef2885..2c1003804a5 100644
---
a/proxy/backend/src/test/resources/conf/convert/config-sharding-auto-tables.yaml
+++
b/proxy/backend/src/test/resources/conf/convert/config-sharding-auto-tables.yaml
@@ -49,6 +49,10 @@ rules:
keyGenerateStrategy:
column: order_id
keyGeneratorName: snowflake
+ auditStrategy:
+ auditorNames:
+ - sharding_key_required_auditor
+ allowHintDisable: true
t_order_item:
actualDataSources: ds_0,ds_1
shardingStrategy:
@@ -73,6 +77,15 @@ rules:
props:
sharding-count: 4
+ defaultAuditStrategy:
+ auditorNames:
+ - sharding_key_required_auditor
+ allowHintDisable: true
+
keyGenerators:
snowflake:
type: SNOWFLAKE
+
+ auditors:
+ sharding_key_required_auditor:
+ type: DML_SHARDING_CONDITIONS
diff --git
a/proxy/backend/src/test/resources/expected/convert-sharding-auto-tables.yaml
b/proxy/backend/src/test/resources/expected/convert-sharding-auto-tables.yaml
index d914c6e5475..feb604ff1a3 100644
---
a/proxy/backend/src/test/resources/expected/convert-sharding-auto-tables.yaml
+++
b/proxy/backend/src/test/resources/expected/convert-sharding-auto-tables.yaml
@@ -33,15 +33,18 @@ CREATE SHARDING TABLE RULE t_order (
STORAGE_UNITS(ds_0,ds_1),
SHARDING_COLUMN=order_id,
TYPE(NAME='mod', PROPERTIES('sharding-count'='4')),
-KEY_GENERATE_STRATEGY(COLUMN=order_id, TYPE(NAME='snowflake'))
+KEY_GENERATE_STRATEGY(COLUMN=order_id, TYPE(NAME='snowflake')),
+AUDIT_STRATEGY(TYPE(NAME='dml_sharding_conditions'), ALLOW_HINT_DISABLE=true)
), t_order_item (
STORAGE_UNITS(ds_0,ds_1),
SHARDING_COLUMN=order_id,
TYPE(NAME='mod', PROPERTIES('sharding-count'='4')),
-KEY_GENERATE_STRATEGY(COLUMN=order_item_id, TYPE(NAME='snowflake'))
+KEY_GENERATE_STRATEGY(COLUMN=order_item_id, TYPE(NAME='snowflake')),
+AUDIT_STRATEGY(TYPE(NAME='dml_sharding_conditions'), ALLOW_HINT_DISABLE=true)
), t_account (
STORAGE_UNITS(ds_0,ds_1),
SHARDING_COLUMN=account_id,
TYPE(NAME='mod', PROPERTIES('sharding-count'='4')),
-KEY_GENERATE_STRATEGY(COLUMN=account_id, TYPE(NAME='snowflake'))
+KEY_GENERATE_STRATEGY(COLUMN=account_id, TYPE(NAME='snowflake')),
+AUDIT_STRATEGY(TYPE(NAME='dml_sharding_conditions'), ALLOW_HINT_DISABLE=true)
);
diff --git a/proxy/backend/src/test/resources/expected/convert-sharding.yaml
b/proxy/backend/src/test/resources/expected/convert-sharding.yaml
index 0a79ed11acf..31173739617 100644
--- a/proxy/backend/src/test/resources/expected/convert-sharding.yaml
+++ b/proxy/backend/src/test/resources/expected/convert-sharding.yaml
@@ -32,11 +32,13 @@ PROPERTIES('minPoolSize'='1',
'connectionTimeoutMilliseconds'='30000', 'maxLifet
CREATE SHARDING TABLE RULE t_order (
DATANODES('ds_${0..1}.t_order_${0..1}'),
TABLE_STRATEGY(TYPE='complex', SHARDING_COLUMNS=order_id, user_id,
SHARDING_ALGORITHM(TYPE(NAME='inline',
PROPERTIES('algorithm-expression'='t_order_${order_id % 2}',
'datetime-lower'='2022-01-01 00:00:00')))),
-KEY_GENERATE_STRATEGY(COLUMN=order_id, TYPE(NAME='snowflake'))
+KEY_GENERATE_STRATEGY(COLUMN=order_id, TYPE(NAME='snowflake')),
+AUDIT_STRATEGY(TYPE(NAME='dml_sharding_conditions'), ALLOW_HINT_DISABLE=true)
), t_order_item (
DATANODES('ds_${0..1}.t_order_item_${0..1}'),
TABLE_STRATEGY(TYPE='complex', SHARDING_COLUMNS=order_id, user_id,
SHARDING_ALGORITHM(TYPE(NAME='inline',
PROPERTIES('algorithm-expression'='t_order_item_${order_id % 2}',
'datetime-lower'='2022-01-01 00:00:00')))),
-KEY_GENERATE_STRATEGY(COLUMN=order_item_id, TYPE(NAME='snowflake'))
+KEY_GENERATE_STRATEGY(COLUMN=order_item_id, TYPE(NAME='snowflake')),
+AUDIT_STRATEGY(TYPE(NAME='dml_sharding_conditions'), ALLOW_HINT_DISABLE=true)
);
CREATE BROADCAST TABLE RULE t_address;