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 1adc635edd3 Convert MaskRuleConfiguration to DistSQL via SPI (#27340)
1adc635edd3 is described below
commit 1adc635edd37a3908c7ddf8ba7c68b0c0ca11a2d
Author: yx9o <[email protected]>
AuthorDate: Fri Jul 21 10:28:26 2023 +0800
Convert MaskRuleConfiguration to DistSQL via SPI (#27340)
---
.../EncryptConvertRuleConfigurationProvider.java | 3 +-
.../MaskConvertRuleConfigurationProvider.java} | 61 ++++++-----------
...dler.ral.query.ConvertRuleConfigurationProvider | 18 +++++
...eSplittingConvertRuleConfigurationProvider.java | 3 +-
.../ShadowConvertRuleConfigurationProvider.java | 3 +-
.../ConvertYamlConfigurationExecutor.java | 79 ++--------------------
6 files changed, 47 insertions(+), 120 deletions(-)
diff --git
a/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/provider/EncryptConvertRuleConfigurationProvider.java
b/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/provider/EncryptConvertRuleConfigurationProvider.java
index 0c60d7397a8..19f6ec44d91 100644
---
a/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/provider/EncryptConvertRuleConfigurationProvider.java
+++
b/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/provider/EncryptConvertRuleConfigurationProvider.java
@@ -47,8 +47,7 @@ public final class EncryptConvertRuleConfigurationProvider
implements ConvertRul
if (ruleConfig.getTables().isEmpty()) {
return "";
}
- StringBuilder result = new StringBuilder();
- result.append(DistSQLScriptConstants.CREATE_ENCRYPT);
+ StringBuilder result = new
StringBuilder(DistSQLScriptConstants.CREATE_ENCRYPT);
Iterator<EncryptTableRuleConfiguration> iterator =
ruleConfig.getTables().iterator();
while (iterator.hasNext()) {
EncryptTableRuleConfiguration tableRuleConfig = iterator.next();
diff --git
a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/provider/ShadowConvertRuleConfigurationProvider.java
b/features/mask/distsql/handler/src/main/java/org/apache/shardingsphere/mask/distsql/handler/provider/MaskConvertRuleConfigurationProvider.java
similarity index 53%
copy from
features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/provider/ShadowConvertRuleConfigurationProvider.java
copy to
features/mask/distsql/handler/src/main/java/org/apache/shardingsphere/mask/distsql/handler/provider/MaskConvertRuleConfigurationProvider.java
index 0e39866ccd8..aa075a55cb2 100644
---
a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/provider/ShadowConvertRuleConfigurationProvider.java
+++
b/features/mask/distsql/handler/src/main/java/org/apache/shardingsphere/mask/distsql/handler/provider/MaskConvertRuleConfigurationProvider.java
@@ -15,15 +15,15 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.shadow.distsql.handler.provider;
+package org.apache.shardingsphere.mask.distsql.handler.provider;
import
org.apache.shardingsphere.distsql.handler.ral.constant.DistSQLScriptConstants;
import
org.apache.shardingsphere.distsql.handler.ral.query.ConvertRuleConfigurationProvider;
import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
-import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
-import
org.apache.shardingsphere.shadow.api.config.datasource.ShadowDataSourceConfiguration;
-import
org.apache.shardingsphere.shadow.api.config.table.ShadowTableConfiguration;
+import org.apache.shardingsphere.mask.api.config.MaskRuleConfiguration;
+import
org.apache.shardingsphere.mask.api.config.rule.MaskColumnRuleConfiguration;
+import
org.apache.shardingsphere.mask.api.config.rule.MaskTableRuleConfiguration;
import java.util.Collection;
import java.util.Iterator;
@@ -32,61 +32,44 @@ import java.util.Properties;
import java.util.TreeMap;
/**
- * Shadow convert rule configuration provider.
+ * Mask convert rule configuration provider.
*/
-public final class ShadowConvertRuleConfigurationProvider implements
ConvertRuleConfigurationProvider {
+public final class MaskConvertRuleConfigurationProvider implements
ConvertRuleConfigurationProvider {
@Override
public String convert(final RuleConfiguration ruleConfig) {
- return getShadowDistSQL((ShadowRuleConfiguration) ruleConfig);
+ return getMaskDistSQL((MaskRuleConfiguration) ruleConfig);
}
- private String getShadowDistSQL(final ShadowRuleConfiguration ruleConfig) {
- if (ruleConfig.getDataSources().isEmpty()) {
+ private String getMaskDistSQL(final MaskRuleConfiguration ruleConfig) {
+ if (ruleConfig.getTables().isEmpty()) {
return "";
}
- StringBuilder result = new StringBuilder();
- result.append(DistSQLScriptConstants.CREATE_SHADOW);
- Iterator<ShadowDataSourceConfiguration> iterator =
ruleConfig.getDataSources().iterator();
+ StringBuilder result = new
StringBuilder(DistSQLScriptConstants.CREATE_MASK);
+ Iterator<MaskTableRuleConfiguration> iterator =
ruleConfig.getTables().iterator();
while (iterator.hasNext()) {
- ShadowDataSourceConfiguration dataSourceConfig = iterator.next();
- String shadowRuleName = dataSourceConfig.getName();
- String shadowTables = getShadowTables(shadowRuleName,
ruleConfig.getTables(), ruleConfig.getShadowAlgorithms());
- result.append(String.format(DistSQLScriptConstants.SHADOW,
shadowRuleName, dataSourceConfig.getProductionDataSourceName(),
dataSourceConfig.getShadowDataSourceName(), shadowTables));
+ MaskTableRuleConfiguration tableRuleConfig = iterator.next();
+ result.append(String.format(DistSQLScriptConstants.MASK,
tableRuleConfig.getName(), getMaskColumns(tableRuleConfig.getColumns(),
ruleConfig.getMaskAlgorithms())));
if (iterator.hasNext()) {
- result.append(DistSQLScriptConstants.COMMA);
+
result.append(DistSQLScriptConstants.COMMA).append(System.lineSeparator());
}
}
result.append(DistSQLScriptConstants.SEMI).append(System.lineSeparator()).append(System.lineSeparator());
return result.toString();
}
- private String getShadowTables(final String shadowRuleName, final
Map<String, ShadowTableConfiguration> ruleConfig, final Map<String,
AlgorithmConfiguration> algorithmConfigs) {
+ private String getMaskColumns(final
Collection<MaskColumnRuleConfiguration> columnRuleConfig, final Map<String,
AlgorithmConfiguration> maskAlgorithms) {
StringBuilder result = new StringBuilder();
- Iterator<Map.Entry<String, ShadowTableConfiguration>> iterator =
ruleConfig.entrySet().iterator();
- while (iterator.hasNext()) {
- Map.Entry<String, ShadowTableConfiguration> shadowTableConfig =
iterator.next();
- if
(shadowTableConfig.getValue().getDataSourceNames().contains(shadowRuleName)) {
- String shadowTableTypes =
getShadowTableTypes(shadowTableConfig.getValue().getShadowAlgorithmNames(),
algorithmConfigs);
-
result.append(String.format(DistSQLScriptConstants.SHADOW_TABLE,
shadowTableConfig.getKey(), shadowTableTypes));
- }
- if (iterator.hasNext()) {
-
result.append(DistSQLScriptConstants.COMMA).append(System.lineSeparator());
- }
+ Iterator<MaskColumnRuleConfiguration> iterator =
columnRuleConfig.iterator();
+ if (iterator.hasNext()) {
+ MaskColumnRuleConfiguration column = iterator.next();
+ result.append(String.format(DistSQLScriptConstants.MASK_COLUMN,
column.getLogicColumn(), getMaskAlgorithms(column, maskAlgorithms)));
}
return result.toString();
}
- private String getShadowTableTypes(final Collection<String>
shadowAlgorithmNames, final Map<String, AlgorithmConfiguration>
algorithmConfigs) {
- StringBuilder result = new StringBuilder();
- Iterator<String> iterator = shadowAlgorithmNames.iterator();
- while (iterator.hasNext()) {
-
result.append(getAlgorithmType(algorithmConfigs.get(iterator.next())));
- if (iterator.hasNext()) {
- result.append(DistSQLScriptConstants.COMMA).append(' ');
- }
- }
- return result.toString();
+ private String getMaskAlgorithms(final MaskColumnRuleConfiguration
columnRuleConfig, final Map<String, AlgorithmConfiguration> maskAlgorithms) {
+ return
getAlgorithmType(maskAlgorithms.get(columnRuleConfig.getMaskAlgorithm()));
}
private String getAlgorithmType(final AlgorithmConfiguration
algorithmConfig) {
@@ -123,6 +106,6 @@ public final class ShadowConvertRuleConfigurationProvider
implements ConvertRule
@Override
public String getType() {
- return ShadowRuleConfiguration.class.getName();
+ return MaskRuleConfiguration.class.getName();
}
}
diff --git
a/features/mask/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.ral.query.ConvertRuleConfigurationProvider
b/features/mask/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.ral.query.ConvertRuleConfigurationProvider
new file mode 100644
index 00000000000..3f0ac5166b5
--- /dev/null
+++
b/features/mask/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.ral.query.ConvertRuleConfigurationProvider
@@ -0,0 +1,18 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+org.apache.shardingsphere.mask.distsql.handler.provider.MaskConvertRuleConfigurationProvider
diff --git
a/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/provider/ReadwriteSplittingConvertRuleConfigurationProvider.java
b/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/provider/ReadwriteSplittingConvertRuleConfigurationProvider.java
index 806cdbe5a5f..fb7badf6453 100644
---
a/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/provider/ReadwriteSplittingConvertRuleConfigurationProvider.java
+++
b/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/provider/ReadwriteSplittingConvertRuleConfigurationProvider.java
@@ -45,8 +45,7 @@ public final class
ReadwriteSplittingConvertRuleConfigurationProvider implements
if (ruleConfig.getDataSources().isEmpty()) {
return "";
}
- StringBuilder result = new StringBuilder();
- result.append(DistSQLScriptConstants.CREATE_READWRITE_SPLITTING_RULE);
+ StringBuilder result = new
StringBuilder(DistSQLScriptConstants.CREATE_READWRITE_SPLITTING_RULE);
Iterator<ReadwriteSplittingDataSourceRuleConfiguration> iterator =
ruleConfig.getDataSources().iterator();
while (iterator.hasNext()) {
appendStaticReadWriteSplittingRule(ruleConfig.getLoadBalancers(),
iterator.next(), result);
diff --git
a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/provider/ShadowConvertRuleConfigurationProvider.java
b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/provider/ShadowConvertRuleConfigurationProvider.java
index 0e39866ccd8..2af4cd0c61a 100644
---
a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/provider/ShadowConvertRuleConfigurationProvider.java
+++
b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/provider/ShadowConvertRuleConfigurationProvider.java
@@ -45,8 +45,7 @@ public final class ShadowConvertRuleConfigurationProvider
implements ConvertRule
if (ruleConfig.getDataSources().isEmpty()) {
return "";
}
- StringBuilder result = new StringBuilder();
- result.append(DistSQLScriptConstants.CREATE_SHADOW);
+ StringBuilder result = new
StringBuilder(DistSQLScriptConstants.CREATE_SHADOW);
Iterator<ShadowDataSourceConfiguration> iterator =
ruleConfig.getDataSources().iterator();
while (iterator.hasNext()) {
ShadowDataSourceConfiguration dataSourceConfig = iterator.next();
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ConvertYamlConfigurationExecutor.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ConvertYamlConfigurationExecutor.java
index 0a7977ade98..8132f84489a 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ConvertYamlConfigurationExecutor.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ConvertYamlConfigurationExecutor.java
@@ -25,7 +25,6 @@ import
org.apache.shardingsphere.distsql.handler.ral.query.ConvertRuleConfigurat
import
org.apache.shardingsphere.distsql.handler.ral.query.QueryableRALExecutor;
import
org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ConvertYamlConfigurationStatement;
import
org.apache.shardingsphere.encrypt.api.config.CompatibleEncryptRuleConfiguration;
-import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
import org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
import
org.apache.shardingsphere.infra.datasource.props.DataSourcePropertiesCreator;
@@ -37,9 +36,6 @@ import
org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
import
org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
import
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapper;
-import org.apache.shardingsphere.mask.api.config.MaskRuleConfiguration;
-import
org.apache.shardingsphere.mask.api.config.rule.MaskColumnRuleConfiguration;
-import
org.apache.shardingsphere.mask.api.config.rule.MaskTableRuleConfiguration;
import
org.apache.shardingsphere.proxy.backend.config.yaml.YamlProxyDataSourceConfiguration;
import
org.apache.shardingsphere.proxy.backend.config.yaml.YamlProxyDatabaseConfiguration;
import
org.apache.shardingsphere.proxy.backend.config.yaml.swapper.YamlProxyDataSourceConfigurationSwapper;
@@ -53,7 +49,6 @@ import java.util.Comparator;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
-import java.util.Properties;
import java.util.TreeMap;
/**
@@ -86,16 +81,12 @@ public final class ConvertYamlConfigurationExecutor
implements QueryableRALExecu
StringBuilder result = new StringBuilder();
appendResourceDistSQL(yamlConfig, result);
for (RuleConfiguration each : swapToRuleConfigs(yamlConfig).values()) {
+ String type = each.getClass().getName();
if (each instanceof CompatibleEncryptRuleConfiguration) {
- ConvertRuleConfigurationProvider convertRuleConfigProvider =
TypedSPILoader.getService(ConvertRuleConfigurationProvider.class,
- ((CompatibleEncryptRuleConfiguration)
each).convertToEncryptRuleConfiguration().getClass().getName());
- result.append(convertRuleConfigProvider.convert(each));
- } else if (each instanceof MaskRuleConfiguration) {
- appendMaskDistSQL((MaskRuleConfiguration) each, result);
- } else {
- ConvertRuleConfigurationProvider convertRuleConfigProvider =
TypedSPILoader.getService(ConvertRuleConfigurationProvider.class,
each.getClass().getName());
- result.append(convertRuleConfigProvider.convert(each));
+ type = ((CompatibleEncryptRuleConfiguration)
each).convertToEncryptRuleConfiguration().getClass().getName();
}
+ ConvertRuleConfigurationProvider convertRuleConfigProvider =
TypedSPILoader.getService(ConvertRuleConfigurationProvider.class, type);
+ result.append(convertRuleConfigProvider.convert(each));
}
return result.toString();
}
@@ -175,68 +166,6 @@ public final class ConvertYamlConfigurationExecutor
implements QueryableRALExecu
}
}
- private void appendMaskDistSQL(final MaskRuleConfiguration ruleConfig,
final StringBuilder stringBuilder) {
- if (ruleConfig.getTables().isEmpty()) {
- return;
- }
- stringBuilder.append(DistSQLScriptConstants.CREATE_MASK);
- Iterator<MaskTableRuleConfiguration> iterator =
ruleConfig.getTables().iterator();
- while (iterator.hasNext()) {
- MaskTableRuleConfiguration tableRuleConfig = iterator.next();
- stringBuilder.append(String.format(DistSQLScriptConstants.MASK,
tableRuleConfig.getName(), getMaskColumns(tableRuleConfig.getColumns(),
ruleConfig.getMaskAlgorithms())));
- if (iterator.hasNext()) {
-
stringBuilder.append(DistSQLScriptConstants.COMMA).append(System.lineSeparator());
- }
- }
-
stringBuilder.append(DistSQLScriptConstants.SEMI).append(System.lineSeparator()).append(System.lineSeparator());
- }
-
- private String getMaskColumns(final
Collection<MaskColumnRuleConfiguration> columnRuleConfig, final Map<String,
AlgorithmConfiguration> maskAlgorithms) {
- StringBuilder result = new StringBuilder();
- Iterator<MaskColumnRuleConfiguration> iterator =
columnRuleConfig.iterator();
- if (iterator.hasNext()) {
- MaskColumnRuleConfiguration column = iterator.next();
- result.append(String.format(DistSQLScriptConstants.MASK_COLUMN,
column.getLogicColumn(), getMaskAlgorithms(column, maskAlgorithms)));
- }
- return result.toString();
- }
-
- private String getMaskAlgorithms(final MaskColumnRuleConfiguration
columnRuleConfig, final Map<String, AlgorithmConfiguration> maskAlgorithms) {
- return
getAlgorithmType(maskAlgorithms.get(columnRuleConfig.getMaskAlgorithm()));
- }
-
- private String getAlgorithmType(final AlgorithmConfiguration
algorithmConfig) {
- StringBuilder result = new StringBuilder();
- if (null == algorithmConfig) {
- return result.toString();
- }
- String type = algorithmConfig.getType().toLowerCase();
- if (algorithmConfig.getProps().isEmpty()) {
-
result.append(String.format(DistSQLScriptConstants.ALGORITHM_TYPE_WITHOUT_PROPS,
type));
- } else {
- result.append(String.format(DistSQLScriptConstants.ALGORITHM_TYPE,
type, getAlgorithmProperties(algorithmConfig.getProps())));
- }
- return result.toString();
- }
-
- @SuppressWarnings({"unchecked", "rawtypes"})
- private String getAlgorithmProperties(final Properties props) {
- StringBuilder result = new StringBuilder();
- Iterator<String> iterator = new TreeMap(props).keySet().iterator();
- while (iterator.hasNext()) {
- String key = iterator.next();
- Object value = props.get(key);
- if (null == value) {
- continue;
- }
- result.append(String.format(DistSQLScriptConstants.PROPERTY, key,
value));
- if (iterator.hasNext()) {
- result.append(DistSQLScriptConstants.COMMA).append(' ');
- }
- }
- return result.toString();
- }
-
@Override
public String getType() {
return ConvertYamlConfigurationStatement.class.getName();