You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2023/04/11 02:30:55 UTC
[shardingsphere] branch master updated: Refactor load governance center or use local configuration when startup (#25035)
This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 a84885e22bb Refactor load governance center or use local configuration when startup (#25035)
a84885e22bb is described below
commit a84885e22bb7617e51fb89de9b3960af503893fc
Author: zhaojinchao <zh...@apache.org>
AuthorDate: Tue Apr 11 10:30:47 2023 +0800
Refactor load governance center or use local configuration when startup (#25035)
* Refactor load governance center or use local configuration when startup
* Fix checkstyle
* Fix ut
* Fix IT
* Fix mask IT
* Fix bug
* Fix ci
* Remove db-discovery.yaml
* Fix IT
* Fix IT
---
.../swapper/rule/YamlRuleConfigurationSwapper.java | 4 +-
.../metadata/persist/MetaDataPersistService.java | 38 +++---
.../config/database/DataSourcePersistService.java | 18 +--
.../database/DatabaseBasedPersistService.java | 22 ++--
.../database/DatabaseRulePersistService.java | 24 ++--
.../config/global/GlobalPersistService.java | 7 --
.../config/global/GlobalRulePersistService.java | 18 +--
.../config/global/PropertiesPersistService.java | 14 +--
.../persist/MetaDataPersistServiceTest.java | 26 ----
.../YamlTrafficRuleConfigurationSwapper.java | 2 +-
.../mode/metadata/MetaDataContextsFactory.java | 84 +++++++++----
.../cluster/ClusterContextManagerBuilder.java | 17 +--
.../manager/cluster/ClusterModeContextManager.java | 6 +-
.../cluster/ClusterModeContextManagerTest.java | 71 ++++++-----
.../StandaloneContextManagerBuilder.java | 7 --
.../standalone/StandaloneModeContextManager.java | 7 +-
.../YamlDatabaseConfigurationImportExecutor.java | 4 +-
.../resources/conf/config-database-discovery.yaml | 131 ---------------------
.../dataset/mask/{ => cluster}/show_mask_rule.xml | 0
.../standalone}/show_mask_rule.xml | 2 +-
.../cluster}/show_mask_rule.xml | 0
.../rql/dataset/mask_encrypt/show_mask_rule.xml | 2 +-
.../standalone}/show_mask_rule.xml | 2 +-
.../cluster}/show_mask_rule.xml | 0
.../{ => standalone}/show_mask_rule.xml | 2 +-
.../cluster}/show_mask_rule.xml | 0
.../standalone}/show_mask_rule.xml | 2 +-
27 files changed, 190 insertions(+), 320 deletions(-)
diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/yaml/config/swapper/rule/YamlRuleConfigurationSwapper.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/yaml/config/swapper/rule/YamlRuleConfigurationSwapper.java
index 39e9a30dd79..cfd03fc123b 100644
--- a/infra/common/src/main/java/org/apache/shardingsphere/infra/yaml/config/swapper/rule/YamlRuleConfigurationSwapper.java
+++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/yaml/config/swapper/rule/YamlRuleConfigurationSwapper.java
@@ -18,10 +18,10 @@
package org.apache.shardingsphere.infra.yaml.config.swapper.rule;
import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
-import org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
-import org.apache.shardingsphere.infra.util.yaml.swapper.YamlConfigurationSwapper;
import org.apache.shardingsphere.infra.util.spi.annotation.SingletonSPI;
import org.apache.shardingsphere.infra.util.spi.type.ordered.OrderedSPI;
+import org.apache.shardingsphere.infra.util.yaml.swapper.YamlConfigurationSwapper;
+import org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
/**
* YAML rule configuration swapper.
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
index 64ec078e19c..82f3f512957 100644
--- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
+++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
@@ -24,6 +24,7 @@ import org.apache.shardingsphere.infra.datasource.pool.creator.DataSourcePoolCre
import org.apache.shardingsphere.infra.datasource.pool.destroyer.DataSourcePoolDestroyer;
import org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
import org.apache.shardingsphere.infra.datasource.props.DataSourcePropertiesCreator;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.metadata.persist.data.ShardingSphereDataPersistService;
import org.apache.shardingsphere.metadata.persist.service.DatabaseMetaDataPersistService;
import org.apache.shardingsphere.metadata.persist.service.MetaDataVersionPersistService;
@@ -74,25 +75,32 @@ public final class MetaDataPersistService {
}
/**
- * Persist configurations.
+ * Persist global rule configurations.
*
- * @param databaseConfigs database configurations
* @param globalRuleConfigs global rule configurations
* @param props properties
*/
- public void persistConfigurations(final Map<String, ? extends DatabaseConfiguration> databaseConfigs,
- final Collection<RuleConfiguration> globalRuleConfigs, final Properties props) {
- globalRuleService.conditionalPersist(globalRuleConfigs);
- propsService.conditionalPersist(props);
- for (Entry<String, ? extends DatabaseConfiguration> entry : databaseConfigs.entrySet()) {
- String databaseName = entry.getKey();
- Map<String, DataSourceProperties> dataSourcePropertiesMap = getDataSourcePropertiesMap(entry.getValue().getDataSources());
- if (dataSourcePropertiesMap.isEmpty() && entry.getValue().getRuleConfigurations().isEmpty()) {
- databaseMetaDataService.addDatabase(databaseName);
- } else {
- dataSourceService.conditionalPersist(databaseName, getDataSourcePropertiesMap(entry.getValue().getDataSources()));
- databaseRulePersistService.conditionalPersist(databaseName, entry.getValue().getRuleConfigurations());
- }
+ public void persistGlobalRuleConfiguration(final Collection<RuleConfiguration> globalRuleConfigs, final Properties props) {
+ globalRuleService.persist(globalRuleConfigs);
+ propsService.persist(props);
+ }
+
+ /**
+ * Persist configurations.
+ *
+ * @param databaseName database name
+ * @param databaseConfigs database configurations
+ * @param dataSources data sources
+ * @param rules rules
+ */
+ public void persistConfigurations(final String databaseName, final DatabaseConfiguration databaseConfigs,
+ final Map<String, DataSource> dataSources, final Collection<ShardingSphereRule> rules) {
+ Map<String, DataSourceProperties> dataSourcePropertiesMap = getDataSourcePropertiesMap(databaseConfigs.getDataSources());
+ if (dataSourcePropertiesMap.isEmpty() && databaseConfigs.getRuleConfigurations().isEmpty()) {
+ databaseMetaDataService.addDatabase(databaseName);
+ } else {
+ dataSourceService.persist(databaseName, dataSources, rules, getDataSourcePropertiesMap(databaseConfigs.getDataSources()));
+ databaseRulePersistService.persist(databaseName, dataSources, rules, databaseConfigs.getRuleConfigurations());
}
}
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DataSourcePersistService.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DataSourcePersistService.java
index 74810c5c147..d2a536b3a63 100644
--- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DataSourcePersistService.java
+++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DataSourcePersistService.java
@@ -20,11 +20,14 @@ package org.apache.shardingsphere.metadata.persist.service.config.database;
import com.google.common.base.Strings;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
import org.apache.shardingsphere.infra.yaml.config.swapper.resource.YamlDataSourceConfigurationSwapper;
import org.apache.shardingsphere.metadata.persist.node.DatabaseMetaDataNode;
import org.apache.shardingsphere.mode.spi.PersistRepository;
+import javax.sql.DataSource;
+import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
@@ -41,23 +44,22 @@ public final class DataSourcePersistService implements DatabaseBasedPersistServi
private final PersistRepository repository;
@Override
- public void conditionalPersist(final String databaseName, final Map<String, DataSourceProperties> dataSourcePropsMap) {
- if (!dataSourcePropsMap.isEmpty() && !isExisted(databaseName)) {
- persist(databaseName, dataSourcePropsMap);
- }
+ public void persist(final String databaseName, final Map<String, DataSource> dataSources, final Collection<ShardingSphereRule> rules,
+ final Map<String, DataSourceProperties> dataSourcePropsMap) {
+ persist(databaseName, dataSourcePropsMap);
}
- @Override
- public void persist(final String databaseName, final Map<String, DataSourceProperties> dataSourcePropsMap) {
+ private void persist(final String databaseName, final Map<String, DataSourceProperties> dataSourceConfigs) {
if (Strings.isNullOrEmpty(getDatabaseActiveVersion(databaseName))) {
repository.persist(DatabaseMetaDataNode.getActiveVersionPath(databaseName), DEFAULT_VERSION);
}
repository.persist(DatabaseMetaDataNode.getMetaDataDataSourcePath(databaseName, getDatabaseActiveVersion(databaseName)),
- YamlEngine.marshal(swapYamlDataSourceConfiguration(dataSourcePropsMap)));
+ YamlEngine.marshal(swapYamlDataSourceConfiguration(dataSourceConfigs)));
}
@Override
- public void persist(final String databaseName, final String version, final Map<String, DataSourceProperties> dataSourcePropsMap) {
+ public void persist(final String databaseName, final String version, final Map<String, DataSource> dataSources,
+ final Collection<ShardingSphereRule> rules, final Map<String, DataSourceProperties> dataSourcePropsMap) {
repository.persist(DatabaseMetaDataNode.getMetaDataDataSourcePath(databaseName, version), YamlEngine.marshal(swapYamlDataSourceConfiguration(dataSourcePropsMap)));
}
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseBasedPersistService.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseBasedPersistService.java
index 19a69ce1e35..3a3deb0270e 100644
--- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseBasedPersistService.java
+++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseBasedPersistService.java
@@ -17,6 +17,12 @@
package org.apache.shardingsphere.metadata.persist.service.config.database;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+
+import javax.sql.DataSource;
+import java.util.Map;
+import java.util.Collection;
+
/**
* Schema based persist service.
*
@@ -24,30 +30,26 @@ package org.apache.shardingsphere.metadata.persist.service.config.database;
*/
public interface DatabaseBasedPersistService<T> {
- /**
- * Conditional persist configurations.
- *
- * @param databaseName database name
- * @param configs configurations
- */
- void conditionalPersist(String databaseName, T configs);
-
/**
* Persist configurations.
*
* @param databaseName database name
+ * @param dataSources data sources
+ * @param rules rules
* @param configs configurations
*/
- void persist(String databaseName, T configs);
+ void persist(String databaseName, Map<String, DataSource> dataSources, Collection<ShardingSphereRule> rules, T configs);
/**
* Persist version configurations.
*
* @param databaseName database name
* @param version version
+ * @param dataSources data sources
+ * @param rules rules
* @param configs configurations
*/
- void persist(String databaseName, String version, T configs);
+ void persist(String databaseName, String version, Map<String, DataSource> dataSources, Collection<ShardingSphereRule> rules, T configs);
/**
* Load configurations.
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseRulePersistService.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseRulePersistService.java
index 6de19f6b049..1a63ca4de62 100644
--- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseRulePersistService.java
+++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseRulePersistService.java
@@ -20,14 +20,17 @@ package org.apache.shardingsphere.metadata.persist.service.config.database;
import com.google.common.base.Strings;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
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.YamlRuleConfigurationSwapperEngine;
import org.apache.shardingsphere.metadata.persist.node.DatabaseMetaDataNode;
import org.apache.shardingsphere.mode.spi.PersistRepository;
+import javax.sql.DataSource;
import java.util.Collection;
import java.util.LinkedList;
+import java.util.Map;
/**
* Database rule persist service.
@@ -40,26 +43,23 @@ public final class DatabaseRulePersistService implements DatabaseBasedPersistSer
private final PersistRepository repository;
@Override
- public void conditionalPersist(final String databaseName, final Collection<RuleConfiguration> configs) {
- if (!configs.isEmpty() && !isExisted(databaseName)) {
- persist(databaseName, configs);
- }
- }
-
- @Override
- public void persist(final String databaseName, final Collection<RuleConfiguration> configs) {
+ public void persist(final String databaseName, final Map<String, DataSource> dataSources,
+ final Collection<ShardingSphereRule> rules, final Collection<RuleConfiguration> configs) {
if (Strings.isNullOrEmpty(getDatabaseActiveVersion(databaseName))) {
repository.persist(DatabaseMetaDataNode.getActiveVersionPath(databaseName), DEFAULT_VERSION);
}
- repository.persist(DatabaseMetaDataNode.getRulePath(databaseName, getDatabaseActiveVersion(databaseName)), YamlEngine.marshal(createYamlRuleConfigurations(configs)));
+ repository.persist(DatabaseMetaDataNode.getRulePath(databaseName, getDatabaseActiveVersion(databaseName)),
+ YamlEngine.marshal(createYamlRuleConfigurations(dataSources, rules, configs)));
}
@Override
- public void persist(final String databaseName, final String version, final Collection<RuleConfiguration> configs) {
- repository.persist(DatabaseMetaDataNode.getRulePath(databaseName, version), YamlEngine.marshal(createYamlRuleConfigurations(configs)));
+ public void persist(final String databaseName, final String version, final Map<String, DataSource> dataSources,
+ final Collection<ShardingSphereRule> rules, final Collection<RuleConfiguration> configs) {
+ repository.persist(DatabaseMetaDataNode.getRulePath(databaseName, version), YamlEngine.marshal(createYamlRuleConfigurations(dataSources, rules, configs)));
}
- private Collection<YamlRuleConfiguration> createYamlRuleConfigurations(final Collection<RuleConfiguration> ruleConfigs) {
+ private Collection<YamlRuleConfiguration> createYamlRuleConfigurations(final Map<String, DataSource> dataSources, final Collection<ShardingSphereRule> rules,
+ final Collection<RuleConfiguration> ruleConfigs) {
return new YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfigurations(ruleConfigs);
}
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalPersistService.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalPersistService.java
index 15622e49510..c5aeb87a973 100644
--- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalPersistService.java
+++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalPersistService.java
@@ -24,13 +24,6 @@ package org.apache.shardingsphere.metadata.persist.service.config.global;
*/
public interface GlobalPersistService<T> {
- /**
- * Conditional persist configurations.
- *
- * @param globalRuleConfigs configurations
- */
- void conditionalPersist(T globalRuleConfigs);
-
/**
* Persist configurations.
*
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalRulePersistService.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalRulePersistService.java
index 4a46eb72b88..b557f572c8a 100644
--- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalRulePersistService.java
+++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalRulePersistService.java
@@ -39,13 +39,6 @@ public final class GlobalRulePersistService implements GlobalPersistService<Coll
private final PersistRepository repository;
- @Override
- public void conditionalPersist(final Collection<RuleConfiguration> globalRuleConfigs) {
- if (!globalRuleConfigs.isEmpty() && !isExisted()) {
- persist(globalRuleConfigs);
- }
- }
-
@Override
public void persist(final Collection<RuleConfiguration> globalRuleConfigs) {
repository.persist(GlobalNode.getGlobalRuleNode(), YamlEngine.marshal(new YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfigurations(globalRuleConfigs)));
@@ -54,13 +47,10 @@ public final class GlobalRulePersistService implements GlobalPersistService<Coll
@Override
@SuppressWarnings("unchecked")
public Collection<RuleConfiguration> load() {
- return isExisted()
- ? new YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(YamlEngine.unmarshal(repository.getDirectly(GlobalNode.getGlobalRuleNode()), Collection.class))
- : Collections.emptyList();
- }
-
- private boolean isExisted() {
- return !Strings.isNullOrEmpty(repository.getDirectly(GlobalNode.getGlobalRuleNode()));
+ String globalRule = repository.getDirectly(GlobalNode.getGlobalRuleNode());
+ return Strings.isNullOrEmpty(globalRule)
+ ? Collections.emptyList()
+ : new YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(YamlEngine.unmarshal(globalRule, Collection.class));
}
/**
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/PropertiesPersistService.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/PropertiesPersistService.java
index 179436ad719..82b99448da7 100644
--- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/PropertiesPersistService.java
+++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/PropertiesPersistService.java
@@ -33,24 +33,14 @@ public final class PropertiesPersistService implements GlobalPersistService<Prop
private final PersistRepository repository;
- @Override
- public void conditionalPersist(final Properties props) {
- if (!props.isEmpty() && !isExisted()) {
- persist(props);
- }
- }
-
@Override
public void persist(final Properties props) {
repository.persist(GlobalNode.getPropsPath(), YamlEngine.marshal(props));
}
- private boolean isExisted() {
- return !Strings.isNullOrEmpty(repository.getDirectly(GlobalNode.getPropsPath()));
- }
-
@Override
public Properties load() {
- return Strings.isNullOrEmpty(repository.getDirectly(GlobalNode.getPropsPath())) ? new Properties() : YamlEngine.unmarshal(repository.getDirectly(GlobalNode.getPropsPath()), Properties.class);
+ String props = repository.getDirectly(GlobalNode.getPropsPath());
+ return Strings.isNullOrEmpty(props) ? new Properties() : YamlEngine.unmarshal(props, Properties.class);
}
}
diff --git a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistServiceTest.java b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistServiceTest.java
index bc7cc99edb0..e816573b34f 100644
--- a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistServiceTest.java
+++ b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistServiceTest.java
@@ -20,10 +20,7 @@ package org.apache.shardingsphere.metadata.persist;
import lombok.SneakyThrows;
import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration;
import org.apache.shardingsphere.infra.config.database.impl.DataSourceProvidedDatabaseConfiguration;
-import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
-import org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
-import org.apache.shardingsphere.infra.datasource.props.DataSourcePropertiesCreator;
import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
import org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
import org.apache.shardingsphere.metadata.persist.service.config.database.DataSourcePersistService;
@@ -32,8 +29,6 @@ import org.apache.shardingsphere.metadata.persist.service.config.global.GlobalRu
import org.apache.shardingsphere.metadata.persist.service.config.global.PropertiesPersistService;
import org.apache.shardingsphere.mode.spi.PersistRepository;
import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
-import org.apache.shardingsphere.test.util.PropertiesBuilder;
-import org.apache.shardingsphere.test.util.PropertiesBuilder.Property;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -47,16 +42,13 @@ import java.net.URISyntaxException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Collection;
-import java.util.Properties;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
-import java.util.Map.Entry;
import java.util.stream.Collectors;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
@ExtendWith(MockitoExtension.class)
class MetaDataPersistServiceTest {
@@ -90,24 +82,6 @@ class MetaDataPersistServiceTest {
Plugins.getMemberAccessor().set(metaDataPersistService.getClass().getDeclaredField(name), metaDataPersistService, value);
}
- @Test
- void assertConditionalPersistConfigurations() {
- Map<String, DataSource> dataSourceMap = createDataSourceMap();
- Collection<RuleConfiguration> ruleConfigs = Collections.emptyList();
- Collection<RuleConfiguration> globalRuleConfigs = Collections.emptyList();
- Properties props = PropertiesBuilder.build(new Property(ConfigurationPropertyKey.SQL_SHOW.getKey(), Boolean.FALSE.toString()));
- metaDataPersistService.persistConfigurations(Collections.singletonMap("foo_db", new DataSourceProvidedDatabaseConfiguration(dataSourceMap, ruleConfigs)), globalRuleConfigs, props);
- verify(dataSourceService).conditionalPersist("foo_db", createDataSourcePropertiesMap(dataSourceMap));
- verify(databaseRulePersistService).conditionalPersist("foo_db", ruleConfigs);
- verify(globalRuleService).conditionalPersist(globalRuleConfigs);
- verify(propsService).conditionalPersist(props);
- }
-
- private Map<String, DataSourceProperties> createDataSourcePropertiesMap(final Map<String, DataSource> dataSourceMap) {
- return dataSourceMap.entrySet().stream().collect(
- Collectors.toMap(Entry::getKey, entry -> DataSourcePropertiesCreator.create(entry.getValue()), (oldValue, currentValue) -> oldValue, LinkedHashMap::new));
- }
-
@SuppressWarnings("unchecked")
@Test
void assertGetEffectiveDataSources() {
diff --git a/kernel/traffic/core/src/main/java/org/apache/shardingsphere/traffic/yaml/swapper/YamlTrafficRuleConfigurationSwapper.java b/kernel/traffic/core/src/main/java/org/apache/shardingsphere/traffic/yaml/swapper/YamlTrafficRuleConfigurationSwapper.java
index 7c02d5bb5f4..cca3c493172 100644
--- a/kernel/traffic/core/src/main/java/org/apache/shardingsphere/traffic/yaml/swapper/YamlTrafficRuleConfigurationSwapper.java
+++ b/kernel/traffic/core/src/main/java/org/apache/shardingsphere/traffic/yaml/swapper/YamlTrafficRuleConfigurationSwapper.java
@@ -17,8 +17,8 @@
package org.apache.shardingsphere.traffic.yaml.swapper;
-import org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapper;
import org.apache.shardingsphere.infra.yaml.config.swapper.algorithm.YamlAlgorithmConfigurationSwapper;
+import org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapper;
import org.apache.shardingsphere.traffic.api.config.TrafficRuleConfiguration;
import org.apache.shardingsphere.traffic.constant.TrafficOrder;
import org.apache.shardingsphere.traffic.yaml.config.YamlTrafficRuleConfiguration;
diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
index c997db4015d..78f147c91cd 100644
--- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
+++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
@@ -32,9 +32,9 @@ import org.apache.shardingsphere.infra.instance.metadata.jdbc.JDBCInstanceMetaDa
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
-import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
import org.apache.shardingsphere.metadata.factory.ExternalMetaDataFactory;
+import org.apache.shardingsphere.metadata.factory.InternalMetaDataFactory;
import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter;
import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
import org.apache.shardingsphere.mode.event.storage.StorageNodeDataSource;
@@ -46,7 +46,8 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
+import java.util.Map.Entry;
+import java.util.Properties;
import java.util.stream.Collectors;
/**
@@ -80,18 +81,35 @@ public final class MetaDataContextsFactory {
*/
public static MetaDataContexts create(final MetaDataPersistService persistService, final ContextManagerBuilderParameter param,
final InstanceContext instanceContext, final Map<String, StorageNodeDataSource> storageNodes) throws SQLException {
- Collection<String> databaseNames = instanceContext.getInstance().getMetaData() instanceof JDBCInstanceMetaData
- ? param.getDatabaseConfigs().keySet()
- : persistService.getDatabaseMetaDataService().loadAllDatabaseNames();
- Map<String, DatabaseConfiguration> effectiveDatabaseConfigs = createEffectiveDatabaseConfigurations(databaseNames, param.getDatabaseConfigs(), persistService);
+ boolean databaseMetaDataExisted = databaseMetaDataExisted(persistService);
+ Map<String, DatabaseConfiguration> effectiveDatabaseConfigs = getDatabaseConfigurations(databaseMetaDataExisted,
+ getDatabaseNames(instanceContext, param.getDatabaseConfigs(), persistService), param.getDatabaseConfigs(), persistService);
checkDataSourceStates(effectiveDatabaseConfigs, storageNodes, param.isForce());
- Collection<RuleConfiguration> globalRuleConfigs = persistService.getGlobalRuleService().load();
- ConfigurationProperties props = new ConfigurationProperties(persistService.getPropsService().load());
- // TODO Distinguish load calls ExternalMetaDataFactory or InternalMetaDataFactory
- Map<String, ShardingSphereDatabase> databases = ExternalMetaDataFactory.create(effectiveDatabaseConfigs, props, instanceContext);
- databases.putAll(reloadDatabases(databases, persistService));
+ Collection<RuleConfiguration> globalRuleConfigs = getGlobalRuleConfigs(databaseMetaDataExisted, persistService, param.getGlobalRuleConfigs());
+ ConfigurationProperties props = getConfigurationProperties(databaseMetaDataExisted, persistService, param.getProps());
+ Map<String, ShardingSphereDatabase> databases = getDatabases(databaseMetaDataExisted, effectiveDatabaseConfigs, props, instanceContext);
ShardingSphereRuleMetaData globalMetaData = new ShardingSphereRuleMetaData(GlobalRulesBuilder.buildRules(globalRuleConfigs, databases, props));
- return new MetaDataContexts(persistService, new ShardingSphereMetaData(databases, globalMetaData, props));
+ MetaDataContexts result = new MetaDataContexts(persistService, new ShardingSphereMetaData(databases, globalMetaData, props));
+ persistDatabaseConfigurations(databaseMetaDataExisted, param, result);
+ persistMetaData(databaseMetaDataExisted, result);
+ return result;
+ }
+
+ private static boolean databaseMetaDataExisted(final MetaDataPersistService persistService) {
+ return !persistService.getDatabaseMetaDataService().loadAllDatabaseNames().isEmpty();
+ }
+
+ private static Collection<String> getDatabaseNames(final InstanceContext instanceContext, final Map<String, DatabaseConfiguration> databaseConfigs, final MetaDataPersistService persistService) {
+ return instanceContext.getInstance().getMetaData() instanceof JDBCInstanceMetaData ? databaseConfigs.keySet() : persistService.getDatabaseMetaDataService().loadAllDatabaseNames();
+ }
+
+ private static ConfigurationProperties getConfigurationProperties(final boolean databaseMetaDataExisted, final MetaDataPersistService persistService, final Properties props) {
+ return databaseMetaDataExisted ? new ConfigurationProperties(persistService.getPropsService().load()) : new ConfigurationProperties(props);
+ }
+
+ private static Map<String, DatabaseConfiguration> getDatabaseConfigurations(final boolean databaseMetaDataExisted, final Collection<String> databaseNames,
+ final Map<String, DatabaseConfiguration> databaseConfigs, final MetaDataPersistService persistService) {
+ return databaseMetaDataExisted ? createEffectiveDatabaseConfigurations(databaseNames, databaseConfigs, persistService) : databaseConfigs;
}
private static Map<String, DatabaseConfiguration> createEffectiveDatabaseConfigurations(final Collection<String> databaseNames,
@@ -128,13 +146,39 @@ public final class MetaDataContextsFactory {
return result;
}
- private static Map<String, ShardingSphereDatabase> reloadDatabases(final Map<String, ShardingSphereDatabase> databases, final MetaDataPersistService persistService) {
- Map<String, ShardingSphereDatabase> result = new ConcurrentHashMap<>(databases.size(), 1);
- databases.forEach((key, value) -> {
- Map<String, ShardingSphereSchema> schemas = persistService.getDatabaseMetaDataService().loadSchemas(key);
- result.put(key.toLowerCase(), new ShardingSphereDatabase(value.getName(),
- value.getProtocolType(), value.getResourceMetaData(), value.getRuleMetaData(), schemas.isEmpty() ? value.getSchemas() : schemas));
- });
- return result;
+ private static Collection<RuleConfiguration> getGlobalRuleConfigs(final boolean databaseMetaDataExisted, final MetaDataPersistService persistService,
+ final Collection<RuleConfiguration> globalRuleConfigs) {
+ return databaseMetaDataExisted ? persistService.getGlobalRuleService().load() : globalRuleConfigs;
+ }
+
+ private static Map<String, ShardingSphereDatabase> getDatabases(final boolean databaseMetaDataExisted, final Map<String, DatabaseConfiguration> databaseConfigMap,
+ final ConfigurationProperties props, final InstanceContext instanceContext) throws SQLException {
+ return databaseMetaDataExisted ? InternalMetaDataFactory.create(databaseConfigMap, props, instanceContext)
+ : ExternalMetaDataFactory.create(databaseConfigMap, props, instanceContext);
+ }
+
+ private static void persistDatabaseConfigurations(final boolean databaseMetaDataExisted, final ContextManagerBuilderParameter param, final MetaDataContexts metadataContexts) {
+ if (!databaseMetaDataExisted) {
+ persistDatabaseConfigurations(metadataContexts, param);
+ }
+ }
+
+ private static void persistDatabaseConfigurations(final MetaDataContexts metadataContexts, final ContextManagerBuilderParameter param) {
+ metadataContexts.getPersistService().persistGlobalRuleConfiguration(param.getGlobalRuleConfigs(), param.getProps());
+ for (Entry<String, ? extends DatabaseConfiguration> entry : param.getDatabaseConfigs().entrySet()) {
+ String databaseName = entry.getKey();
+ metadataContexts.getPersistService().persistConfigurations(entry.getKey(), entry.getValue(),
+ metadataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData().getDataSources(),
+ metadataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getRules());
+ }
+ }
+
+ private static void persistMetaData(final boolean databaseMetaDataExisted, final MetaDataContexts metaDataContexts) {
+ if (!databaseMetaDataExisted) {
+ metaDataContexts.getMetaData().getDatabases().values().forEach(each -> each.getSchemas()
+ .forEach((schemaName, schema) -> metaDataContexts.getPersistService().getDatabaseMetaDataService().persist(each.getName(), schemaName, schema)));
+ metaDataContexts.getShardingSphereData().getDatabaseData().forEach((databaseName, databaseData) -> databaseData.getSchemaData().forEach((schemaName, schemaData) -> metaDataContexts
+ .getPersistService().getShardingSphereDataPersistService().persist(databaseName, schemaName, schemaData, metaDataContexts.getMetaData().getDatabases())));
+ }
}
}
diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
index 99bf19e05e0..d90052985d0 100644
--- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
+++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
@@ -47,15 +47,13 @@ public final class ClusterContextManagerBuilder implements ContextManagerBuilder
@Override
public ContextManager build(final ContextManagerBuilderParameter param) throws SQLException {
ClusterPersistRepository repository = getClusterPersistRepository((ClusterPersistRepositoryConfiguration) param.getModeConfiguration().getRepository());
- MetaDataPersistService persistService = new MetaDataPersistService(repository);
- persistConfigurations(persistService, param);
RegistryCenter registryCenter = new RegistryCenter(repository, new EventBusContext(), param.getInstanceMetaData(), param.getDatabaseConfigs());
InstanceContext instanceContext = buildInstanceContext(registryCenter, param);
if (registryCenter.getRepository() instanceof InstanceContextAware) {
((InstanceContextAware) registryCenter.getRepository()).setInstanceContext(instanceContext);
}
+ MetaDataPersistService persistService = new MetaDataPersistService(repository);
MetaDataContexts metaDataContexts = MetaDataContextsFactory.create(persistService, param, instanceContext, registryCenter.getStorageNodeStatusService().loadStorageNodes());
- persistMetaData(metaDataContexts);
ContextManager result = new ContextManager(metaDataContexts, instanceContext);
setContextManagerAware(result);
registerOnline(persistService, registryCenter, param, result);
@@ -69,24 +67,11 @@ public final class ClusterContextManagerBuilder implements ContextManagerBuilder
return result;
}
- private void persistConfigurations(final MetaDataPersistService persistService, final ContextManagerBuilderParameter param) {
- if (!param.isEmpty()) {
- persistService.persistConfigurations(param.getDatabaseConfigs(), param.getGlobalRuleConfigs(), param.getProps());
- }
- }
-
private InstanceContext buildInstanceContext(final RegistryCenter registryCenter, final ContextManagerBuilderParameter param) {
return new InstanceContext(new ComputeNodeInstance(param.getInstanceMetaData()), new ClusterWorkerIdGenerator(registryCenter, param.getInstanceMetaData()),
param.getModeConfiguration(), new ClusterModeContextManager(), new GlobalLockContext(registryCenter.getGlobalLockPersistService()), registryCenter.getEventBusContext());
}
- private void persistMetaData(final MetaDataContexts metaDataContexts) {
- metaDataContexts.getMetaData().getDatabases().values().forEach(each -> each.getSchemas()
- .forEach((schemaName, schema) -> metaDataContexts.getPersistService().getDatabaseMetaDataService().persist(each.getName(), schemaName, schema)));
- metaDataContexts.getShardingSphereData().getDatabaseData().forEach((databaseName, databaseData) -> databaseData.getSchemaData().forEach((schemaName, schemaData) -> metaDataContexts
- .getPersistService().getShardingSphereDataPersistService().persist(databaseName, schemaName, schemaData, metaDataContexts.getMetaData().getDatabases())));
- }
-
private void setContextManagerAware(final ContextManager contextManager) {
((ContextManagerAware) contextManager.getInstanceContext().getModeContextManager()).setContextManagerAware(contextManager);
}
diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManager.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManager.java
index f54bd7be455..be22cbfcb39 100644
--- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManager.java
+++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManager.java
@@ -99,6 +99,8 @@ public final class ClusterModeContextManager implements ModeContextManager, Cont
@Override
public void unregisterStorageUnits(final String databaseName, final Collection<String> toBeDroppedStorageUnitNames) {
contextManager.getMetaDataContexts().getPersistService().getDataSourceService().persist(databaseName,
+ contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getResourceMetaData().getDataSources(),
+ contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getRuleMetaData().getRules(),
getToBeReversedDataSourcePropsMap(contextManager.getMetaDataContexts().getPersistService().getDataSourceService().load(databaseName), toBeDroppedStorageUnitNames));
}
@@ -108,7 +110,9 @@ public final class ClusterModeContextManager implements ModeContextManager, Cont
@Override
public void alterRuleConfiguration(final String databaseName, final Collection<RuleConfiguration> ruleConfigs) {
- contextManager.getMetaDataContexts().getPersistService().getDatabaseRulePersistService().persist(databaseName, ruleConfigs);
+ contextManager.getMetaDataContexts().getPersistService().getDatabaseRulePersistService().persist(databaseName,
+ contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getResourceMetaData().getDataSources(),
+ contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getRuleMetaData().getRules(), ruleConfigs);
}
@Override
diff --git a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManagerTest.java b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManagerTest.java
index c383b6f2fc8..69bf76c7145 100644
--- a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManagerTest.java
+++ b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManagerTest.java
@@ -21,6 +21,7 @@ import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
import org.apache.shardingsphere.infra.database.type.dialect.H2DatabaseType;
+import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
import org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstance;
import org.apache.shardingsphere.infra.instance.InstanceContext;
@@ -28,6 +29,7 @@ import org.apache.shardingsphere.infra.instance.metadata.jdbc.JDBCInstanceMetaDa
import org.apache.shardingsphere.infra.instance.workerid.WorkerIdGenerator;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import org.apache.shardingsphere.infra.metadata.database.resource.ShardingSphereResourceMetaData;
import org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
import org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchemaMetaDataPOJO;
import org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchemaPOJO;
@@ -47,6 +49,7 @@ import java.util.LinkedList;
import java.util.Map;
import java.util.Properties;
import java.util.TreeMap;
+import java.util.Collections;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.mockito.Mockito.mock;
@@ -66,7 +69,7 @@ class ClusterModeContextManagerTest {
clusterModeContextManager
.setContextManagerAware(new ContextManager(metaDataContexts, new InstanceContext(instance, workerIdGenerator,
modeConfiguration, modeContextManager, null, new EventBusContext())));
- clusterModeContextManager.createDatabase("Database Name");
+ clusterModeContextManager.createDatabase("db");
}
@Test
@@ -82,7 +85,7 @@ class ClusterModeContextManagerTest {
clusterModeContextManager
.setContextManagerAware(new ContextManager(metaDataContexts, new InstanceContext(instance, workerIdGenerator,
modeConfiguration, modeContextManager, null, new EventBusContext())));
- clusterModeContextManager.dropDatabase("Database Name");
+ clusterModeContextManager.dropDatabase("db");
}
@Test
@@ -98,13 +101,13 @@ class ClusterModeContextManagerTest {
clusterModeContextManager
.setContextManagerAware(new ContextManager(metaDataContexts, new InstanceContext(instance, workerIdGenerator,
modeConfiguration, modeContextManager, null, new EventBusContext())));
- clusterModeContextManager.createSchema("Database Name", "Schema Name");
+ clusterModeContextManager.createSchema("db", "Schema Name");
}
@Test
void assertAlterSchema() {
ShardingSphereMetaData shardingSphereMetaData = new ShardingSphereMetaData();
- shardingSphereMetaData.addDatabase("Database Name", new H2DatabaseType());
+ shardingSphereMetaData.addDatabase("db", new H2DatabaseType());
MetaDataContexts metaDataContexts = new MetaDataContexts(
new MetaDataPersistService(new ClusterPersistRepositoryFixture()), shardingSphereMetaData);
ComputeNodeInstance instance = new ComputeNodeInstance(new JDBCInstanceMetaData("42"));
@@ -114,11 +117,11 @@ class ClusterModeContextManagerTest {
ClusterModeContextManager modeContextManager = new ClusterModeContextManager();
ContextManager contextManager = new ContextManager(metaDataContexts, new InstanceContext(instance,
workerIdGenerator, modeConfiguration, modeContextManager, null, new EventBusContext()));
- contextManager.addSchema("Database Name", "Schema Name");
+ contextManager.addSchema("db", "Schema Name");
ClusterModeContextManager clusterModeContextManager = new ClusterModeContextManager();
clusterModeContextManager.setContextManagerAware(contextManager);
clusterModeContextManager
- .alterSchema(new AlterSchemaPOJO("Database Name", "Schema Name", "Rename Schema Name", new LinkedList<>()));
+ .alterSchema(new AlterSchemaPOJO("db", "Schema Name", "Rename Schema Name", new LinkedList<>()));
}
@Test
@@ -134,7 +137,7 @@ class ClusterModeContextManagerTest {
clusterModeContextManager
.setContextManagerAware(new ContextManager(metaDataContexts, new InstanceContext(instance, workerIdGenerator,
modeConfiguration, modeContextManager, null, new EventBusContext())));
- clusterModeContextManager.dropSchema("Database Name", new LinkedList<>());
+ clusterModeContextManager.dropSchema("db", new LinkedList<>());
}
@Test
@@ -152,7 +155,7 @@ class ClusterModeContextManagerTest {
modeConfiguration, modeContextManager, null, new EventBusContext())));
Collection<String> stringList = new LinkedList<>();
stringList.add("foo");
- clusterModeContextManager.dropSchema("Database Name", stringList);
+ clusterModeContextManager.dropSchema("db", stringList);
}
@Test
@@ -171,7 +174,7 @@ class ClusterModeContextManagerTest {
Collection<String> stringList = new LinkedList<>();
stringList.add("/");
stringList.add("foo");
- clusterModeContextManager.dropSchema("Database Name", stringList);
+ clusterModeContextManager.dropSchema("db", stringList);
}
@Test
@@ -187,7 +190,7 @@ class ClusterModeContextManagerTest {
clusterModeContextManager
.setContextManagerAware(new ContextManager(metaDataContexts, new InstanceContext(instance, workerIdGenerator,
modeConfiguration, modeContextManager, null, new EventBusContext())));
- AlterSchemaMetaDataPOJO alterSchemaMetaDataPOJO = new AlterSchemaMetaDataPOJO("Database Name", "Schema Name");
+ AlterSchemaMetaDataPOJO alterSchemaMetaDataPOJO = new AlterSchemaMetaDataPOJO("db", "Schema Name");
clusterModeContextManager.alterSchemaMetaData(alterSchemaMetaDataPOJO);
assertNull(alterSchemaMetaDataPOJO.getLogicDataSourceName());
}
@@ -205,7 +208,7 @@ class ClusterModeContextManagerTest {
clusterModeContextManager
.setContextManagerAware(new ContextManager(metaDataContexts, new InstanceContext(instance, workerIdGenerator,
modeConfiguration, modeContextManager, null, new EventBusContext())));
- clusterModeContextManager.registerStorageUnits("Database Name", new TreeMap<>());
+ clusterModeContextManager.registerStorageUnits("db", new TreeMap<>());
}
@Test
@@ -221,7 +224,7 @@ class ClusterModeContextManagerTest {
clusterModeContextManager
.setContextManagerAware(new ContextManager(metaDataContexts, new InstanceContext(instance, workerIdGenerator,
modeConfiguration, modeContextManager, null, new EventBusContext())));
- clusterModeContextManager.alterStorageUnits("Database Name", new TreeMap<>());
+ clusterModeContextManager.alterStorageUnits("db", new TreeMap<>());
}
@Test
@@ -238,7 +241,7 @@ class ClusterModeContextManagerTest {
clusterModeContextManager
.setContextManagerAware(new ContextManager(metaDataContexts, new InstanceContext(instance, workerIdGenerator,
modeConfiguration, modeContextManager, null, new EventBusContext())));
- clusterModeContextManager.alterStorageUnits("Database Name", new TreeMap<>());
+ clusterModeContextManager.alterStorageUnits("db", new TreeMap<>());
}
@Test
@@ -256,7 +259,7 @@ class ClusterModeContextManagerTest {
modeConfiguration, modeContextManager, null, new EventBusContext())));
Map<String, DataSourceProperties> stringDataSourcePropertiesMap = new HashMap<>();
stringDataSourcePropertiesMap.put("active_version", new DataSourceProperties("active_version", new HashMap<>()));
- clusterModeContextManager.alterStorageUnits("Database Name", stringDataSourcePropertiesMap);
+ clusterModeContextManager.alterStorageUnits("db", stringDataSourcePropertiesMap);
}
@Test
@@ -275,7 +278,7 @@ class ClusterModeContextManagerTest {
Map<String, DataSourceProperties> stringDataSourcePropertiesMap = new HashMap<>();
stringDataSourcePropertiesMap.put("\n", new DataSourceProperties("\n", new HashMap<>()));
stringDataSourcePropertiesMap.put("active_version", new DataSourceProperties("active_version", new HashMap<>()));
- clusterModeContextManager.alterStorageUnits("Database Name", stringDataSourcePropertiesMap);
+ clusterModeContextManager.alterStorageUnits("db", stringDataSourcePropertiesMap);
}
@Test
@@ -295,7 +298,7 @@ class ClusterModeContextManagerTest {
clusterModeContextManager
.setContextManagerAware(new ContextManager(metaDataContexts, new InstanceContext(instance, workerIdGenerator,
modeConfiguration, modeContextManager, null, new EventBusContext())));
- clusterModeContextManager.alterStorageUnits("Database Name", new TreeMap<>());
+ clusterModeContextManager.alterStorageUnits("db", new TreeMap<>());
}
@Test
@@ -313,7 +316,7 @@ class ClusterModeContextManagerTest {
.setContextManagerAware(new ContextManager(metaDataContexts, new InstanceContext(instance, workerIdGenerator,
modeConfiguration, modeContextManager, null, new EventBusContext())));
Map<String, DataSourceProperties> stringDataSourcePropertiesMap = new HashMap<>(new TreeMap<>());
- clusterModeContextManager.alterStorageUnits("Database Name", stringDataSourcePropertiesMap);
+ clusterModeContextManager.alterStorageUnits("db", stringDataSourcePropertiesMap);
}
@Test
@@ -332,14 +335,14 @@ class ClusterModeContextManagerTest {
modeConfiguration, modeContextManager, null, new EventBusContext())));
Map<String, DataSourceProperties> stringDataSourcePropertiesMap = new HashMap<>();
stringDataSourcePropertiesMap.put("42", new DataSourceProperties("active_version", new HashMap<>()));
- clusterModeContextManager.alterStorageUnits("Database Name", stringDataSourcePropertiesMap);
+ clusterModeContextManager.alterStorageUnits("db", stringDataSourcePropertiesMap);
}
@Test
void assertUnregisterStorageUnits() {
ClusterModeContextManager clusterModeContextManager = new ClusterModeContextManager();
MetaDataPersistService persistService = new MetaDataPersistService(new ClusterPersistRepositoryFixture());
- MetaDataContexts metaDataContexts = new MetaDataContexts(persistService, new ShardingSphereMetaData());
+ MetaDataContexts metaDataContexts = new MetaDataContexts(persistService, createShardingSphereMetaData());
ComputeNodeInstance instance = new ComputeNodeInstance(new JDBCInstanceMetaData("42"));
WorkerIdGenerator workerIdGenerator = mock(WorkerIdGenerator.class);
ModeConfiguration modeConfiguration = new ModeConfiguration("Type",
@@ -348,7 +351,7 @@ class ClusterModeContextManagerTest {
clusterModeContextManager
.setContextManagerAware(new ContextManager(metaDataContexts, new InstanceContext(instance, workerIdGenerator,
modeConfiguration, modeContextManager, null, new EventBusContext())));
- clusterModeContextManager.unregisterStorageUnits("Database Name", new LinkedList<>());
+ clusterModeContextManager.unregisterStorageUnits("db", new LinkedList<>());
}
@Test
@@ -356,7 +359,7 @@ class ClusterModeContextManagerTest {
ClusterModeContextManager clusterModeContextManager = new ClusterModeContextManager();
MetaDataPersistService persistService = new MetaDataPersistService(
new ProcessListClusterPersistRepositoryFixture());
- MetaDataContexts metaDataContexts = new MetaDataContexts(persistService, new ShardingSphereMetaData());
+ MetaDataContexts metaDataContexts = new MetaDataContexts(persistService, createShardingSphereMetaData());
ComputeNodeInstance instance = new ComputeNodeInstance(new JDBCInstanceMetaData("42"));
WorkerIdGenerator workerIdGenerator = mock(WorkerIdGenerator.class);
ModeConfiguration modeConfiguration = new ModeConfiguration("Type",
@@ -365,14 +368,14 @@ class ClusterModeContextManagerTest {
clusterModeContextManager
.setContextManagerAware(new ContextManager(metaDataContexts, new InstanceContext(instance, workerIdGenerator,
modeConfiguration, modeContextManager, null, new EventBusContext())));
- clusterModeContextManager.unregisterStorageUnits("Database Name", new LinkedList<>());
+ clusterModeContextManager.unregisterStorageUnits("db", new LinkedList<>());
}
@Test
void assertUnregisterStorageUnitsWithClusterPersistRepoFixture() {
ClusterModeContextManager clusterModeContextManager = new ClusterModeContextManager();
MetaDataPersistService persistService = new MetaDataPersistService(new ClusterPersistRepositoryFixture());
- MetaDataContexts metaDataContexts = new MetaDataContexts(persistService, new ShardingSphereMetaData());
+ MetaDataContexts metaDataContexts = new MetaDataContexts(persistService, createShardingSphereMetaData());
ComputeNodeInstance instance = new ComputeNodeInstance(new JDBCInstanceMetaData("42"));
WorkerIdGenerator workerIdGenerator = mock(WorkerIdGenerator.class);
ModeConfiguration modeConfiguration = new ModeConfiguration("Type",
@@ -381,14 +384,14 @@ class ClusterModeContextManagerTest {
clusterModeContextManager
.setContextManagerAware(new ContextManager(metaDataContexts, new InstanceContext(instance, workerIdGenerator,
modeConfiguration, modeContextManager, null, new EventBusContext())));
- clusterModeContextManager.alterRuleConfiguration("Database Name", new LinkedList<>());
+ clusterModeContextManager.alterRuleConfiguration("db", new LinkedList<>());
}
@Test
void assertAlterRuleConfiguration() {
ClusterModeContextManager clusterModeContextManager = new ClusterModeContextManager();
MetaDataPersistService persistService = new MetaDataPersistService(new ClusterPersistRepositoryFixture());
- MetaDataContexts metaDataContexts = new MetaDataContexts(persistService, new ShardingSphereMetaData());
+ MetaDataContexts metaDataContexts = new MetaDataContexts(persistService, createShardingSphereMetaData());
ComputeNodeInstance instance = new ComputeNodeInstance(new JDBCInstanceMetaData("42"));
WorkerIdGenerator workerIdGenerator = mock(WorkerIdGenerator.class);
ModeConfiguration modeConfiguration = new ModeConfiguration("Type",
@@ -399,14 +402,20 @@ class ClusterModeContextManagerTest {
modeConfiguration, modeContextManager, null, new EventBusContext())));
Collection<RuleConfiguration> ruleConfigurationList = new LinkedList<>();
ruleConfigurationList.add(new RuleConfigurationFixture());
- clusterModeContextManager.alterRuleConfiguration("Database Name", ruleConfigurationList);
+ clusterModeContextManager.alterRuleConfiguration("db", ruleConfigurationList);
+ }
+
+ private ShardingSphereMetaData createShardingSphereMetaData() {
+ return new ShardingSphereMetaData(Collections.singletonMap("db", new ShardingSphereDatabase("db", new MySQLDatabaseType(),
+ new ShardingSphereResourceMetaData("db", Collections.emptyMap()), new ShardingSphereRuleMetaData(Collections.emptyList()), Collections.emptyMap())),
+ new ShardingSphereRuleMetaData(Collections.emptyList()), new ConfigurationProperties(new Properties()));
}
@Test
void assertAlterRuleConfigurationMultiple() {
ClusterModeContextManager clusterModeContextManager = new ClusterModeContextManager();
MetaDataPersistService persistService = new MetaDataPersistService(new ClusterPersistRepositoryFixture());
- MetaDataContexts metaDataContexts = new MetaDataContexts(persistService, new ShardingSphereMetaData());
+ MetaDataContexts metaDataContexts = new MetaDataContexts(persistService, createShardingSphereMetaData());
ComputeNodeInstance instance = new ComputeNodeInstance(new JDBCInstanceMetaData("42"));
WorkerIdGenerator workerIdGenerator = mock(WorkerIdGenerator.class);
ModeConfiguration modeConfiguration = new ModeConfiguration("Type",
@@ -418,7 +427,7 @@ class ClusterModeContextManagerTest {
Collection<RuleConfiguration> ruleConfigurationList = new LinkedList<>();
ruleConfigurationList.add(new RuleConfigurationFixture());
ruleConfigurationList.add(new RuleConfigurationFixture());
- clusterModeContextManager.alterRuleConfiguration("Database Name", ruleConfigurationList);
+ clusterModeContextManager.alterRuleConfiguration("db", ruleConfigurationList);
}
@Test
@@ -426,7 +435,7 @@ class ClusterModeContextManagerTest {
ClusterModeContextManager clusterModeContextManager = new ClusterModeContextManager();
MetaDataPersistService persistService = new MetaDataPersistService(
new ProcessListClusterPersistRepositoryFixture());
- MetaDataContexts metaDataContexts = new MetaDataContexts(persistService, new ShardingSphereMetaData());
+ MetaDataContexts metaDataContexts = new MetaDataContexts(persistService, createShardingSphereMetaData());
ComputeNodeInstance instance = new ComputeNodeInstance(new JDBCInstanceMetaData("42"));
WorkerIdGenerator workerIdGenerator = mock(WorkerIdGenerator.class);
ModeConfiguration modeConfiguration = new ModeConfiguration("Type",
@@ -437,14 +446,14 @@ class ClusterModeContextManagerTest {
modeConfiguration, modeContextManager, null, new EventBusContext())));
Collection<RuleConfiguration> ruleConfigurationList = new LinkedList<>();
ruleConfigurationList.add(new RuleConfigurationFixture());
- clusterModeContextManager.alterRuleConfiguration("Database Name", ruleConfigurationList);
+ clusterModeContextManager.alterRuleConfiguration("db", ruleConfigurationList);
}
@Test
void assertAlterGlobalRuleConfigurationWithEmptyRuleConfigurations() {
ClusterModeContextManager clusterModeContextManager = new ClusterModeContextManager();
MetaDataPersistService persistService = new MetaDataPersistService(new ClusterPersistRepositoryFixture());
- MetaDataContexts metaDataContexts = new MetaDataContexts(persistService, new ShardingSphereMetaData());
+ MetaDataContexts metaDataContexts = new MetaDataContexts(persistService, createShardingSphereMetaData());
ComputeNodeInstance instance = new ComputeNodeInstance(new JDBCInstanceMetaData("42"));
WorkerIdGenerator workerIdGenerator = mock(WorkerIdGenerator.class);
ModeConfiguration modeConfiguration = new ModeConfiguration("Type",
diff --git a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
index 1641341acac..96761e02828 100644
--- a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
+++ b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
@@ -47,7 +47,6 @@ public final class StandaloneContextManagerBuilder implements ContextManagerBuil
StandalonePersistRepository repository = TypedSPILoader.getService(
StandalonePersistRepository.class, null == repositoryConfig ? null : repositoryConfig.getType(), null == repositoryConfig ? new Properties() : repositoryConfig.getProps());
MetaDataPersistService persistService = new MetaDataPersistService(repository);
- persistConfigurations(persistService, param);
InstanceContext instanceContext = buildInstanceContext(param);
new ProcessStandaloneSubscriber(instanceContext.getEventBusContext());
MetaDataContexts metaDataContexts = MetaDataContextsFactory.create(persistService, param, instanceContext);
@@ -56,12 +55,6 @@ public final class StandaloneContextManagerBuilder implements ContextManagerBuil
return result;
}
- private void persistConfigurations(final MetaDataPersistService persistService, final ContextManagerBuilderParameter param) {
- if (!param.isEmpty()) {
- persistService.persistConfigurations(param.getDatabaseConfigs(), param.getGlobalRuleConfigs(), param.getProps());
- }
- }
-
private InstanceContext buildInstanceContext(final ContextManagerBuilderParameter param) {
return new InstanceContext(new ComputeNodeInstance(param.getInstanceMetaData()),
new StandaloneWorkerIdGenerator(), param.getModeConfiguration(), new StandaloneModeContextManager(), new GlobalLockContext(null), new EventBusContext());
diff --git a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java
index 628d75b6408..2de894d080b 100644
--- a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java
+++ b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java
@@ -237,6 +237,8 @@ public final class StandaloneModeContextManager implements ModeContextManager, C
contextManager.renewMetaDataContexts(reloadMetaDataContexts);
Map<String, DataSourceProperties> toBeReversedDataSourcePropsMap = getToBeReversedDataSourcePropsMap(dataSourcePropsMap, toBeDroppedStorageUnitNames);
contextManager.getMetaDataContexts().getPersistService().getDataSourceService().persist(contextManager.getMetaDataContexts().getMetaData().getActualDatabaseName(databaseName),
+ contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getResourceMetaData().getDataSources(),
+ contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getRuleMetaData().getRules(),
toBeReversedDataSourcePropsMap);
switchingResource.closeStaleDataSources();
clearServiceCache();
@@ -254,7 +256,10 @@ public final class StandaloneModeContextManager implements ModeContextManager, C
public void alterRuleConfiguration(final String databaseName, final Collection<RuleConfiguration> ruleConfigs) {
contextManager.alterRuleConfiguration(databaseName, ruleConfigs);
contextManager.getMetaDataContexts().getPersistService()
- .getDatabaseRulePersistService().persist(contextManager.getMetaDataContexts().getMetaData().getActualDatabaseName(databaseName), ruleConfigs);
+ .getDatabaseRulePersistService().persist(contextManager.getMetaDataContexts().getMetaData().getActualDatabaseName(databaseName),
+ contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getResourceMetaData().getDataSources(),
+ contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getRuleMetaData().getRules(),
+ ruleConfigs);
clearServiceCache();
}
diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java
index 42850cc73a5..297864c0b56 100644
--- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java
+++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java
@@ -185,7 +185,9 @@ public final class YamlDatabaseConfigurationImportExecutor {
}
ruleConfigsMap.keySet().stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList())
.forEach(each -> addRules(allRuleConfigs, ruleConfigsMap.get(each), database));
- metaDataContexts.getPersistService().getDatabaseRulePersistService().persist(metaDataContexts.getMetaData().getActualDatabaseName(databaseName), allRuleConfigs);
+ metaDataContexts.getPersistService().getDatabaseRulePersistService().persist(metaDataContexts.getMetaData().getActualDatabaseName(databaseName),
+ metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData().getDataSources(),
+ metaDataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getRules(), allRuleConfigs);
}
private void addRules(final Collection<RuleConfiguration> allRuleConfigs, final Collection<RuleConfiguration> ruleConfigs, final ShardingSphereDatabase database) {
diff --git a/proxy/bootstrap/src/main/resources/conf/config-database-discovery.yaml b/proxy/bootstrap/src/main/resources/conf/config-database-discovery.yaml
deleted file mode 100644
index 1e541e74a16..00000000000
--- a/proxy/bootstrap/src/main/resources/conf/config-database-discovery.yaml
+++ /dev/null
@@ -1,131 +0,0 @@
-#
-# 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.
-#
-
-######################################################################################################
-#
-# Here you can configure the rules for the proxy.
-# This example is configuration of HA rule.
-#
-######################################################################################################
-#
-#databaseName: database_discovery_db
-#
-#dataSources:
-# ds_0:
-# url: jdbc:postgresql://127.0.0.1:5432/demo_primary_ds
-# username: postgres
-# password: postgres
-# connectionTimeoutMilliseconds: 3000
-# idleTimeoutMilliseconds: 60000
-# maxLifetimeMilliseconds: 1800000
-# maxPoolSize: 50
-# minPoolSize: 1
-# ds_1:
-# url: jdbc:postgresql://127.0.0.1:5432/demo_replica_ds_0
-# username: postgres
-# password: postgres
-# connectionTimeoutMilliseconds: 3000
-# idleTimeoutMilliseconds: 60000
-# maxLifetimeMilliseconds: 1800000
-# maxPoolSize: 50
-# minPoolSize: 1
-# ds_2:
-# url: jdbc:postgresql://127.0.0.1:5432/demo_replica_ds_1
-# username: postgres
-# password: postgres
-# connectionTimeoutMilliseconds: 3000
-# idleTimeoutMilliseconds: 60000
-# maxLifetimeMilliseconds: 1800000
-# maxPoolSize: 50
-# minPoolSize: 1
-#
-#rules:
-#- !DB_DISCOVERY
-# dataSources:
-# readwrite_ds:
-# dataSourceNames:
-# - ds_0
-# - ds_1
-# - ds_2
-# discoveryHeartbeatName: mgr_heartbeat
-# discoveryTypeName: mgr
-# discoveryHeartbeats:
-# mgr_heartbeat:
-# props:
-# keep-alive-cron: '0/5 * * * * ?'
-# discoveryTypes:
-# mgr:
-# type: MySQL.MGR
-# props:
-# group-name: 92504d5b-6dec-11e8-91ea-246e9612aaf1
-
-######################################################################################################
-#
-# If you want to connect to MySQL, you should manually copy MySQL driver to lib directory.
-#
-######################################################################################################
-
-#databaseName: database_discovery_db
-#
-#dataSources:
-# ds_0:
-# url: jdbc:mysql://127.0.0.1:3306/demo_primary_ds?serverTimezone=UTC&useSSL=false
-# username: root
-# password:
-# connectionTimeoutMilliseconds: 3000
-# idleTimeoutMilliseconds: 60000
-# maxLifetimeMilliseconds: 1800000
-# maxPoolSize: 50
-# minPoolSize: 1
-# ds_1:
-# url: jdbc:mysql://127.0.0.1:3306/demo_replica_ds_0?serverTimezone=UTC&useSSL=false
-# username: root
-# password:
-# connectionTimeoutMilliseconds: 3000
-# idleTimeoutMilliseconds: 60000
-# maxLifetimeMilliseconds: 1800000
-# maxPoolSize: 50
-# minPoolSize: 1
-# ds_2:
-# url: jdbc:mysql://127.0.0.1:3306/demo_replica_ds_1?serverTimezone=UTC&useSSL=false
-# username: root
-# password:
-# connectionTimeoutMilliseconds: 3000
-# idleTimeoutMilliseconds: 60000
-# maxLifetimeMilliseconds: 1800000
-# maxPoolSize: 50
-# minPoolSize: 1
-#
-#rules:
-#- !DB_DISCOVERY
-# dataSources:
-# readwrite_ds:
-# dataSourceNames:
-# - ds_0
-# - ds_1
-# - ds_2
-# discoveryHeartbeatName: mgr_heartbeat
-# discoveryTypeName: mgr
-# discoveryHeartbeats:
-# mgr_heartbeat:
-# props:
-# keep-alive-cron: '0/5 * * * * ?'
-# discoveryTypes:
-# mgr:
-# type: MySQL.MGR
-# props:
-# group-name: 92504d5b-6dec-11e8-91ea-246e9612aaf1
diff --git a/test/e2e/sql/src/test/resources/cases/rql/dataset/mask/show_mask_rule.xml b/test/e2e/sql/src/test/resources/cases/rql/dataset/mask/cluster/show_mask_rule.xml
similarity index 100%
copy from test/e2e/sql/src/test/resources/cases/rql/dataset/mask/show_mask_rule.xml
copy to test/e2e/sql/src/test/resources/cases/rql/dataset/mask/cluster/show_mask_rule.xml
diff --git a/test/e2e/sql/src/test/resources/cases/rql/dataset/mask_encrypt_sharding/show_mask_rule.xml b/test/e2e/sql/src/test/resources/cases/rql/dataset/mask/standalone/show_mask_rule.xml
similarity index 97%
copy from test/e2e/sql/src/test/resources/cases/rql/dataset/mask_encrypt_sharding/show_mask_rule.xml
copy to test/e2e/sql/src/test/resources/cases/rql/dataset/mask/standalone/show_mask_rule.xml
index 0654800c268..d3090160de3 100644
--- a/test/e2e/sql/src/test/resources/cases/rql/dataset/mask_encrypt_sharding/show_mask_rule.xml
+++ b/test/e2e/sql/src/test/resources/cases/rql/dataset/mask/standalone/show_mask_rule.xml
@@ -24,5 +24,5 @@
</metadata>
<row values="t_user| password| MD5| " />
<row values="t_user| email| MASK_BEFORE_SPECIAL_CHARS| special-chars=@,replace-char=*" />
- <row values="t_user| telephone| KEEP_FIRST_N_LAST_M| first-n=3,last-m=4,replace-char=*" />
+ <row values="t_user| telephone| KEEP_FIRST_N_LAST_M| first-n=3,replace-char=*,last-m=4" />
</dataset>
diff --git a/test/e2e/sql/src/test/resources/cases/rql/dataset/mask_encrypt_sharding/show_mask_rule.xml b/test/e2e/sql/src/test/resources/cases/rql/dataset/mask_encrypt/cluster/show_mask_rule.xml
similarity index 100%
copy from test/e2e/sql/src/test/resources/cases/rql/dataset/mask_encrypt_sharding/show_mask_rule.xml
copy to test/e2e/sql/src/test/resources/cases/rql/dataset/mask_encrypt/cluster/show_mask_rule.xml
diff --git a/test/e2e/sql/src/test/resources/cases/rql/dataset/mask_encrypt/show_mask_rule.xml b/test/e2e/sql/src/test/resources/cases/rql/dataset/mask_encrypt/show_mask_rule.xml
index 0654800c268..d3090160de3 100644
--- a/test/e2e/sql/src/test/resources/cases/rql/dataset/mask_encrypt/show_mask_rule.xml
+++ b/test/e2e/sql/src/test/resources/cases/rql/dataset/mask_encrypt/show_mask_rule.xml
@@ -24,5 +24,5 @@
</metadata>
<row values="t_user| password| MD5| " />
<row values="t_user| email| MASK_BEFORE_SPECIAL_CHARS| special-chars=@,replace-char=*" />
- <row values="t_user| telephone| KEEP_FIRST_N_LAST_M| first-n=3,last-m=4,replace-char=*" />
+ <row values="t_user| telephone| KEEP_FIRST_N_LAST_M| first-n=3,replace-char=*,last-m=4" />
</dataset>
diff --git a/test/e2e/sql/src/test/resources/cases/rql/dataset/mask_encrypt_sharding/show_mask_rule.xml b/test/e2e/sql/src/test/resources/cases/rql/dataset/mask_encrypt/standalone/show_mask_rule.xml
similarity index 97%
copy from test/e2e/sql/src/test/resources/cases/rql/dataset/mask_encrypt_sharding/show_mask_rule.xml
copy to test/e2e/sql/src/test/resources/cases/rql/dataset/mask_encrypt/standalone/show_mask_rule.xml
index 0654800c268..d3090160de3 100644
--- a/test/e2e/sql/src/test/resources/cases/rql/dataset/mask_encrypt_sharding/show_mask_rule.xml
+++ b/test/e2e/sql/src/test/resources/cases/rql/dataset/mask_encrypt/standalone/show_mask_rule.xml
@@ -24,5 +24,5 @@
</metadata>
<row values="t_user| password| MD5| " />
<row values="t_user| email| MASK_BEFORE_SPECIAL_CHARS| special-chars=@,replace-char=*" />
- <row values="t_user| telephone| KEEP_FIRST_N_LAST_M| first-n=3,last-m=4,replace-char=*" />
+ <row values="t_user| telephone| KEEP_FIRST_N_LAST_M| first-n=3,replace-char=*,last-m=4" />
</dataset>
diff --git a/test/e2e/sql/src/test/resources/cases/rql/dataset/mask_sharding/show_mask_rule.xml b/test/e2e/sql/src/test/resources/cases/rql/dataset/mask_encrypt_sharding/cluster/show_mask_rule.xml
similarity index 100%
rename from test/e2e/sql/src/test/resources/cases/rql/dataset/mask_sharding/show_mask_rule.xml
rename to test/e2e/sql/src/test/resources/cases/rql/dataset/mask_encrypt_sharding/cluster/show_mask_rule.xml
diff --git a/test/e2e/sql/src/test/resources/cases/rql/dataset/mask_encrypt_sharding/show_mask_rule.xml b/test/e2e/sql/src/test/resources/cases/rql/dataset/mask_encrypt_sharding/standalone/show_mask_rule.xml
similarity index 97%
copy from test/e2e/sql/src/test/resources/cases/rql/dataset/mask_encrypt_sharding/show_mask_rule.xml
copy to test/e2e/sql/src/test/resources/cases/rql/dataset/mask_encrypt_sharding/standalone/show_mask_rule.xml
index 0654800c268..d3090160de3 100644
--- a/test/e2e/sql/src/test/resources/cases/rql/dataset/mask_encrypt_sharding/show_mask_rule.xml
+++ b/test/e2e/sql/src/test/resources/cases/rql/dataset/mask_encrypt_sharding/standalone/show_mask_rule.xml
@@ -24,5 +24,5 @@
</metadata>
<row values="t_user| password| MD5| " />
<row values="t_user| email| MASK_BEFORE_SPECIAL_CHARS| special-chars=@,replace-char=*" />
- <row values="t_user| telephone| KEEP_FIRST_N_LAST_M| first-n=3,last-m=4,replace-char=*" />
+ <row values="t_user| telephone| KEEP_FIRST_N_LAST_M| first-n=3,replace-char=*,last-m=4" />
</dataset>
diff --git a/test/e2e/sql/src/test/resources/cases/rql/dataset/mask/show_mask_rule.xml b/test/e2e/sql/src/test/resources/cases/rql/dataset/mask_sharding/cluster/show_mask_rule.xml
similarity index 100%
rename from test/e2e/sql/src/test/resources/cases/rql/dataset/mask/show_mask_rule.xml
rename to test/e2e/sql/src/test/resources/cases/rql/dataset/mask_sharding/cluster/show_mask_rule.xml
diff --git a/test/e2e/sql/src/test/resources/cases/rql/dataset/mask_encrypt_sharding/show_mask_rule.xml b/test/e2e/sql/src/test/resources/cases/rql/dataset/mask_sharding/standalone/show_mask_rule.xml
similarity index 97%
rename from test/e2e/sql/src/test/resources/cases/rql/dataset/mask_encrypt_sharding/show_mask_rule.xml
rename to test/e2e/sql/src/test/resources/cases/rql/dataset/mask_sharding/standalone/show_mask_rule.xml
index 0654800c268..d3090160de3 100644
--- a/test/e2e/sql/src/test/resources/cases/rql/dataset/mask_encrypt_sharding/show_mask_rule.xml
+++ b/test/e2e/sql/src/test/resources/cases/rql/dataset/mask_sharding/standalone/show_mask_rule.xml
@@ -24,5 +24,5 @@
</metadata>
<row values="t_user| password| MD5| " />
<row values="t_user| email| MASK_BEFORE_SPECIAL_CHARS| special-chars=@,replace-char=*" />
- <row values="t_user| telephone| KEEP_FIRST_N_LAST_M| first-n=3,last-m=4,replace-char=*" />
+ <row values="t_user| telephone| KEEP_FIRST_N_LAST_M| first-n=3,replace-char=*,last-m=4" />
</dataset>