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 <yangx_s...@163.com> 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();