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/06/07 23:57:23 UTC
[shardingsphere] branch master updated: Add NewGlobalRulePersistService to adapter new metadata structure (#26098)
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 7949e575052 Add NewGlobalRulePersistService to adapter new metadata structure (#26098)
7949e575052 is described below
commit 7949e5750521121679c0889605ca11c55afa418c
Author: zhaojinchao <zh...@apache.org>
AuthorDate: Thu Jun 8 07:57:07 2023 +0800
Add NewGlobalRulePersistService to adapter new metadata structure (#26098)
* Add NewGlobalRulePersistService to adapter new metadata structure
* Update it
* Fix ci
* Remove NewDatabaseBasedPersistService
* Fix checkstyle
---
.../NewYamlRuleConfigurationSwapperEngine.java | 6 +-
.../persist/NewMetaDataPersistService.java | 18 ++---
.../persist/node/NewDatabaseMetaDataNode.java | 73 +++++++++---------
.../metadata/persist/node/NewGlobalNode.java | 90 ++++++++++++++++++++++
.../database/NewDataSourcePersistService.java | 10 +--
.../database/NewDatabaseBasedPersistService.java | 44 -----------
.../NewDatabaseRuleBasedPersistService.java | 2 +-
.../database/NewDatabaseRulePersistService.java | 28 ++++---
.../NewGlobalRulePersistService.java} | 67 ++++++++--------
.../config/global/NewPropertiesPersistService.java | 52 +++++++++++++
.../persist/node/NewDatabaseMetaDataNodeTest.java | 10 +--
.../metadata/persist/node/NewGlobalNodeTest.java | 52 +++++++++++++
.../watcher/NewMetaDataChangedWatcher.java | 2 +-
13 files changed, 307 insertions(+), 147 deletions(-)
diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/yaml/config/swapper/rule/NewYamlRuleConfigurationSwapperEngine.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/yaml/config/swapper/rule/NewYamlRuleConfigurationSwapperEngine.java
index 188740d7953..43c41b856ea 100644
--- a/infra/common/src/main/java/org/apache/shardingsphere/infra/yaml/config/swapper/rule/NewYamlRuleConfigurationSwapperEngine.java
+++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/yaml/config/swapper/rule/NewYamlRuleConfigurationSwapperEngine.java
@@ -45,17 +45,13 @@ public final class NewYamlRuleConfigurationSwapperEngine {
/**
* Swap from YAML rule configurations to rule configurations.
*
- * @param ruleName rule name
* @param dataNodes YAML data nodes
* @return rule configurations
*/
@SuppressWarnings({"unchecked", "rawtypes"})
- public Collection<RuleConfiguration> swapToRuleConfigurations(final String ruleName, final Collection<YamlDataNode> dataNodes) {
+ public Collection<RuleConfiguration> swapToRuleConfigurations(final Collection<YamlDataNode> dataNodes) {
Collection<RuleConfiguration> result = new LinkedList<>();
for (NewYamlRuleConfigurationSwapper each : OrderedSPILoader.getServices(NewYamlRuleConfigurationSwapper.class)) {
- if (!each.getRuleTagName().toLowerCase().equals(ruleName)) {
- continue;
- }
result.add((RuleConfiguration) each.swapToObject(dataNodes));
}
return result;
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/NewMetaDataPersistService.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/NewMetaDataPersistService.java
index 373b3722943..dafa7bf4a68 100644
--- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/NewMetaDataPersistService.java
+++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/NewMetaDataPersistService.java
@@ -27,11 +27,11 @@ import org.apache.shardingsphere.infra.datasource.props.DataSourcePropertiesCrea
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.metadata.persist.data.ShardingSphereDataPersistService;
import org.apache.shardingsphere.metadata.persist.service.config.database.NewDataSourcePersistService;
+import org.apache.shardingsphere.metadata.persist.service.config.database.NewDatabaseRulePersistService;
+import org.apache.shardingsphere.metadata.persist.service.config.global.NewGlobalRulePersistService;
+import org.apache.shardingsphere.metadata.persist.service.config.global.NewPropertiesPersistService;
import org.apache.shardingsphere.metadata.persist.service.database.DatabaseMetaDataPersistService;
import org.apache.shardingsphere.metadata.persist.service.version.MetaDataVersionPersistService;
-import org.apache.shardingsphere.metadata.persist.service.config.database.DatabaseRulePersistService;
-import org.apache.shardingsphere.metadata.persist.service.config.global.GlobalRulePersistService;
-import org.apache.shardingsphere.metadata.persist.service.config.global.PropertiesPersistService;
import org.apache.shardingsphere.mode.spi.PersistRepository;
import javax.sql.DataSource;
@@ -55,11 +55,11 @@ public final class NewMetaDataPersistService implements MetaDataBasedPersistServ
private final DatabaseMetaDataPersistService databaseMetaDataService;
- private final DatabaseRulePersistService databaseRulePersistService;
+ private final NewDatabaseRulePersistService databaseRulePersistService;
- private final GlobalRulePersistService globalRuleService;
+ private final NewGlobalRulePersistService globalRuleService;
- private final PropertiesPersistService propsService;
+ private final NewPropertiesPersistService propsService;
private final MetaDataVersionPersistService metaDataVersionPersistService;
@@ -69,9 +69,9 @@ public final class NewMetaDataPersistService implements MetaDataBasedPersistServ
this.repository = repository;
dataSourceService = new NewDataSourcePersistService(repository);
databaseMetaDataService = new DatabaseMetaDataPersistService(repository);
- databaseRulePersistService = new DatabaseRulePersistService(repository);
- globalRuleService = new GlobalRulePersistService(repository);
- propsService = new PropertiesPersistService(repository);
+ databaseRulePersistService = new NewDatabaseRulePersistService(repository);
+ globalRuleService = new NewGlobalRulePersistService(repository);
+ propsService = new NewPropertiesPersistService(repository);
metaDataVersionPersistService = new MetaDataVersionPersistService(repository);
shardingSphereDataPersistService = new ShardingSphereDataPersistService(repository);
}
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/NewDatabaseMetaDataNode.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/NewDatabaseMetaDataNode.java
index 11601b52683..1317c48205e 100644
--- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/NewDatabaseMetaDataNode.java
+++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/NewDatabaseMetaDataNode.java
@@ -41,103 +41,102 @@ public final class NewDatabaseMetaDataNode {
private static final String VERSIONS = "versions";
/**
- * Get data Sources path.
+ * Get data Sources node.
*
* @param databaseName database name
- * @return data sources path
+ * @return data sources node
*/
- public static String getDataSourcesPath(final String databaseName) {
- return String.join("/", getMetaDataNodePath(), DataSourceNodeConverter.getDataSourcesPath(databaseName));
+ public static String getDataSourcesNode(final String databaseName) {
+ return String.join("/", getMetaDataNodeNode(), DataSourceNodeConverter.getDataSourcesPath(databaseName));
}
/**
- * Get data Source path.
+ * Get data Source node.
*
* @param databaseName database name
* @param dataSourceName data source name
* @param version version
- * @return data source path
+ * @return data source node
*/
- public static String getDataSourcePath(final String databaseName, final String dataSourceName, final String version) {
- return String.join("/", getMetaDataNodePath(), DataSourceNodeConverter.getDataSourcePath(databaseName, dataSourceName, version));
+ public static String getDataSourceNode(final String databaseName, final String dataSourceName, final String version) {
+ return String.join("/", getMetaDataNodeNode(), DataSourceNodeConverter.getDataSourcePath(databaseName, dataSourceName, version));
}
/**
- * Get data Source active version path.
+ * Get data Source active version node.
*
* @param databaseName database name
* @param dataSourceName data source name
- * @return data source active version path
+ * @return data source active version node
*/
- public static String getDataSourceActiveVersionPath(final String databaseName, final String dataSourceName) {
- return String.join("/", getMetaDataNodePath(), DataSourceNodeConverter.getActiveVersionPath(databaseName, dataSourceName));
+ public static String getDataSourceActiveVersionNode(final String databaseName, final String dataSourceName) {
+ return String.join("/", getMetaDataNodeNode(), DataSourceNodeConverter.getActiveVersionPath(databaseName, dataSourceName));
}
/**
- * Get database rule active version path.
+ * Get database rule active version node.
*
* @param databaseName database name
* @param ruleName rule name
* @param key key
- * @return database rule active version path
+ * @return database rule active version node
*/
- public static String getDatabaseRuleActiveVersionPath(final String databaseName, final String ruleName, final String key) {
- return String.join("/", getDatabaseRulePath(databaseName, ruleName), key, ACTIVE_VERSION);
+ public static String getDatabaseRuleActiveVersionNode(final String databaseName, final String ruleName, final String key) {
+ return String.join("/", getDatabaseRuleNode(databaseName, ruleName), key, ACTIVE_VERSION);
}
/**
- * Get database rule versions path.
+ * Get database rule versions node.
*
* @param databaseName database name
* @param ruleName rule name
* @param key key
- * @return database rule versions path
+ * @return database rule versions node
*/
- public static String getDatabaseRuleVersionsPath(final String databaseName, final String ruleName, final String key) {
- return String.join("/", getDatabaseRulePath(databaseName, ruleName), key, VERSIONS);
+ public static String getDatabaseRuleVersionsNode(final String databaseName, final String ruleName, final String key) {
+ return String.join("/", getDatabaseRuleNode(databaseName, ruleName), key, VERSIONS);
}
/**
- * Get database rule version path.
+ * Get database rule version node.
*
* @param databaseName database name
* @param ruleName rule name
* @param key key
- * @param nextVersion next version
+ * @param version version
* @return database rule next version
*/
- public static String getDatabaseRuleVersionPath(final String databaseName, final String ruleName, final String key, final String nextVersion) {
- return String.join("/", getDatabaseRulePath(databaseName, ruleName), key, VERSIONS, nextVersion);
+ public static String getDatabaseRuleVersionNode(final String databaseName, final String ruleName, final String key, final String version) {
+ return String.join("/", getDatabaseRuleNode(databaseName, ruleName), key, VERSIONS, version);
+ }
+
+ private static String getDatabaseRuleNode(final String databaseName, final String ruleName) {
+ return String.join("/", getRulesNode(databaseName), ruleName);
}
/**
- * Get database rule path.
+ * Get database rules node.
*
* @param databaseName database name
- * @param ruleName rule name
- * @return database rule path
+ * @return database rules node
*/
- public static String getDatabaseRulePath(final String databaseName, final String ruleName) {
- return String.join("/", getRulesPath(databaseName), ruleName);
+ public static String getRulesNode(final String databaseName) {
+ return String.join("/", getMetaDataNodeNode(), databaseName, RULE_NODE);
}
/**
- * Get database name by path.
+ * Get database name by node.
*
* @param path config path
* @return database name
*/
- public static Optional<String> getDatabaseNameByPath(final String path) {
- Pattern pattern = Pattern.compile(getMetaDataNodePath() + "/([\\w\\-]+)?", Pattern.CASE_INSENSITIVE);
+ public static Optional<String> getDatabaseNameByNode(final String path) {
+ Pattern pattern = Pattern.compile(getMetaDataNodeNode() + "/([\\w\\-]+)?", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(path);
return matcher.find() ? Optional.of(matcher.group(1)) : Optional.empty();
}
- private static String getRulesPath(final String databaseName) {
- return String.join("/", getMetaDataNodePath(), databaseName, RULE_NODE);
- }
-
- private static String getMetaDataNodePath() {
+ private static String getMetaDataNodeNode() {
return String.join("/", "", ROOT_NODE);
}
}
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/NewGlobalNode.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/NewGlobalNode.java
new file mode 100644
index 00000000000..9067d2252eb
--- /dev/null
+++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/NewGlobalNode.java
@@ -0,0 +1,90 @@
+/*
+ * 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.
+ */
+
+package org.apache.shardingsphere.metadata.persist.node;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+
+/**
+ * TODO Rename GlobalNode when metadata structure adjustment completed. #25485
+ * Global node.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class NewGlobalNode {
+
+ private static final String RULE_NODE = "rules";
+
+ private static final String PROPS_NODE = "props";
+
+ private static final String ACTIVE_VERSION = "active_version";
+
+ private static final String VERSIONS = "versions";
+
+ /**
+ * Get global rule active version node.
+ *
+ * @param ruleName rule name
+ * @return global rule active version node
+ */
+ public static String getGlobalRuleActiveVersionNode(final String ruleName) {
+ return String.join("/", getGlobalRuleRootNode(), ruleName, ACTIVE_VERSION);
+ }
+
+ /**
+ * Get global rule version node.
+ *
+ * @param ruleName rule name
+ * @param version version
+ * @return global rule version node
+ */
+ public static String getGlobalRuleVersionNode(final String ruleName, final String version) {
+ return String.join("/", getGlobalRuleRootNode(), ruleName, VERSIONS, version);
+ }
+
+ /**
+ * Get global rule root node.
+ *
+ * @return global rule root node
+ */
+ public static String getGlobalRuleRootNode() {
+ return String.join("/", "", RULE_NODE);
+ }
+
+ /**
+ * Get properties active version node.
+ *
+ * @return properties active version node
+ */
+ public static String getPropsActiveVersionNode() {
+ return String.join("/", getPropsRootNode(), ACTIVE_VERSION);
+ }
+
+ /**
+ * Get properties version node.
+ *
+ * @param version version
+ * @return properties version node
+ */
+ public static String getPropsVersionNode(final String version) {
+ return String.join("/", getPropsRootNode(), VERSIONS, version);
+ }
+
+ private static String getPropsRootNode() {
+ return String.join("/", "", PROPS_NODE);
+ }
+}
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDataSourcePersistService.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDataSourcePersistService.java
index 479b697be74..ddc8d105b92 100644
--- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDataSourcePersistService.java
+++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDataSourcePersistService.java
@@ -47,9 +47,9 @@ public final class NewDataSourcePersistService implements DatabaseBasedPersistSe
for (Entry<String, DataSourceProperties> entry : dataSourceConfigs.entrySet()) {
String activeVersion = getDatabaseActiveVersion(databaseName, entry.getKey());
if (Strings.isNullOrEmpty(activeVersion)) {
- repository.persist(NewDatabaseMetaDataNode.getDataSourceActiveVersionPath(databaseName, entry.getKey()), DEFAULT_VERSION);
+ repository.persist(NewDatabaseMetaDataNode.getDataSourceActiveVersionNode(databaseName, entry.getKey()), DEFAULT_VERSION);
}
- repository.persist(NewDatabaseMetaDataNode.getDataSourcePath(databaseName, entry.getKey(), DEFAULT_VERSION),
+ repository.persist(NewDatabaseMetaDataNode.getDataSourceNode(databaseName, entry.getKey(), DEFAULT_VERSION),
YamlEngine.marshal(new YamlDataSourceConfigurationSwapper().swapToMap(entry.getValue())));
}
}
@@ -57,7 +57,7 @@ public final class NewDataSourcePersistService implements DatabaseBasedPersistSe
@Override
public Map<String, DataSourceProperties> load(final String databaseName) {
Map<String, DataSourceProperties> result = new LinkedHashMap<>();
- for (String each : repository.getChildrenKeys(NewDatabaseMetaDataNode.getDataSourcesPath(databaseName))) {
+ for (String each : repository.getChildrenKeys(NewDatabaseMetaDataNode.getDataSourcesNode(databaseName))) {
result.put(each, getDataSourceProps(databaseName, each));
}
return result;
@@ -70,12 +70,12 @@ public final class NewDataSourcePersistService implements DatabaseBasedPersistSe
}
private DataSourceProperties getDataSourceProps(final String databaseName, final String dataSourceName) {
- String result = repository.getDirectly(NewDatabaseMetaDataNode.getDataSourcePath(databaseName, getDatabaseActiveVersion(databaseName, dataSourceName), dataSourceName));
+ String result = repository.getDirectly(NewDatabaseMetaDataNode.getDataSourceNode(databaseName, getDatabaseActiveVersion(databaseName, dataSourceName), dataSourceName));
Preconditions.checkState(!Strings.isNullOrEmpty(result), "Not found `%s` data source config in `%s` database", dataSourceName, databaseName);
return YamlEngine.unmarshal(result, DataSourceProperties.class);
}
private String getDatabaseActiveVersion(final String databaseName, final String dataSourceName) {
- return repository.getDirectly(NewDatabaseMetaDataNode.getDataSourceActiveVersionPath(databaseName, dataSourceName));
+ return repository.getDirectly(NewDatabaseMetaDataNode.getDataSourceActiveVersionNode(databaseName, dataSourceName));
}
}
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDatabaseBasedPersistService.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDatabaseBasedPersistService.java
deleted file mode 100644
index 868c34f9690..00000000000
--- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDatabaseBasedPersistService.java
+++ /dev/null
@@ -1,44 +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.
- */
-
-package org.apache.shardingsphere.metadata.persist.service.config.database;
-
-/**
- * TODO Rename DatabaseBasedPersistService when metadata structure adjustment completed. #25485
- * Database based persist service.
- *
- * @param <T> type of configuration
- */
-public interface NewDatabaseBasedPersistService<T> {
-
- /**
- * Persist configurations.
- *
- * @param databaseName database name
- * @param configs configurations
- */
- void persist(String databaseName, T configs);
-
- /**
- * Load configurations.
- *
- * @param databaseName database name
- * @param ruleName rule name
- * @return configurations
- */
- T load(String databaseName, String ruleName);
-}
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDatabaseRuleBasedPersistService.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDatabaseRuleBasedPersistService.java
index 086ec06f705..7e6ffce1e80 100644
--- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDatabaseRuleBasedPersistService.java
+++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDatabaseRuleBasedPersistService.java
@@ -29,7 +29,7 @@ import java.util.Map;
*
* @param <T> type of configuration
*/
-public interface NewDatabaseRuleBasedPersistService<T> extends NewDatabaseBasedPersistService<T> {
+public interface NewDatabaseRuleBasedPersistService<T> extends DatabaseBasedPersistService<T> {
/**
* Persist configurations.
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDatabaseRulePersistService.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDatabaseRulePersistService.java
index 16c259deee6..6b1eb4775a8 100644
--- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDatabaseRulePersistService.java
+++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDatabaseRulePersistService.java
@@ -33,6 +33,7 @@ import java.util.List;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.Map;
+import java.util.Map.Entry;
/**
* TODO Rename DatabaseRulePersistService when metadata structure adjustment completed. #25485
@@ -55,7 +56,7 @@ public final class NewDatabaseRulePersistService implements NewDatabaseRuleBased
@Override
public void persist(final String databaseName, final Collection<RuleConfiguration> configs) {
Map<RuleConfiguration, NewYamlRuleConfigurationSwapper> yamlConfigs = new NewYamlRuleConfigurationSwapperEngine().swapToYamlRuleConfigurations(configs);
- for (Map.Entry<RuleConfiguration, NewYamlRuleConfigurationSwapper> entry : yamlConfigs.entrySet()) {
+ for (Entry<RuleConfiguration, NewYamlRuleConfigurationSwapper> entry : yamlConfigs.entrySet()) {
Collection<YamlDataNode> dataNodes = entry.getValue().swapToDataNodes(entry.getKey());
if (dataNodes.isEmpty()) {
continue;
@@ -66,34 +67,41 @@ public final class NewDatabaseRulePersistService implements NewDatabaseRuleBased
private void persistDataNodes(final String databaseName, final String ruleName, final Collection<YamlDataNode> dataNodes) {
for (YamlDataNode each : dataNodes) {
- if (Strings.isNullOrEmpty(repository.getDirectly(each.getKey()))) {
- repository.persist(NewDatabaseMetaDataNode.getDatabaseRuleActiveVersionPath(databaseName, ruleName, each.getKey()), DEFAULT_VERSION);
+ if (Strings.isNullOrEmpty(NewDatabaseMetaDataNode.getDatabaseRuleActiveVersionNode(databaseName, ruleName, each.getKey()))) {
+ repository.persist(NewDatabaseMetaDataNode.getDatabaseRuleActiveVersionNode(databaseName, ruleName, each.getKey()), DEFAULT_VERSION);
}
- List<String> versions = repository.getChildrenKeys(NewDatabaseMetaDataNode.getDatabaseRuleVersionsPath(databaseName, ruleName, each.getKey()));
- repository.persist(NewDatabaseMetaDataNode.getDatabaseRuleVersionPath(databaseName, ruleName, each.getKey(), versions.isEmpty()
+ List<String> versions = repository.getChildrenKeys(NewDatabaseMetaDataNode.getDatabaseRuleVersionsNode(databaseName, ruleName, each.getKey()));
+ repository.persist(NewDatabaseMetaDataNode.getDatabaseRuleVersionNode(databaseName, ruleName, each.getKey(), versions.isEmpty()
? DEFAULT_VERSION
: String.valueOf(Integer.parseInt(versions.get(0)) + 1)), each.getValue());
}
}
@Override
- public Collection<RuleConfiguration> load(final String databaseName, final String ruleName) {
+ public Collection<RuleConfiguration> load(final String databaseName) {
Collection<String> result = new LinkedHashSet<>();
- getAllKeys(result, NewDatabaseMetaDataNode.getDatabaseRulePath(databaseName, ruleName));
+ getAllNodes(result, NewDatabaseMetaDataNode.getRulesNode(databaseName));
if (1 == result.size()) {
return Collections.emptyList();
}
- return new NewYamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(ruleName, getDataNodes(result));
+ return new NewYamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(getDataNodes(result));
}
- private void getAllKeys(final Collection<String> keys, final String path) {
+ @Deprecated
+ @Override
+ public Collection<RuleConfiguration> load(final String databaseName, final String version) {
+ // TODO Remove this method when metadata structure adjustment completed. #25485
+ return Collections.emptyList();
+ }
+
+ private void getAllNodes(final Collection<String> keys, final String path) {
keys.add(path);
List<String> childrenKeys = repository.getChildrenKeys(path);
if (childrenKeys.isEmpty()) {
return;
}
for (String each : childrenKeys) {
- getAllKeys(keys, String.join("/", "", path, each));
+ getAllNodes(keys, String.join("/", "", path, each));
}
}
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDatabaseRulePersistService.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/NewGlobalRulePersistService.java
similarity index 56%
copy from kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDatabaseRulePersistService.java
copy to kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/NewGlobalRulePersistService.java
index 16c259deee6..9137d33fa5c 100644
--- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDatabaseRulePersistService.java
+++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/NewGlobalRulePersistService.java
@@ -15,85 +15,80 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.metadata.persist.service.config.database;
+package org.apache.shardingsphere.metadata.persist.service.config.global;
import com.google.common.base.Strings;
import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.authority.config.AuthorityRuleConfiguration;
import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
-import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUser;
import org.apache.shardingsphere.infra.util.yaml.datanode.YamlDataNode;
import org.apache.shardingsphere.infra.yaml.config.swapper.rule.NewYamlRuleConfigurationSwapper;
import org.apache.shardingsphere.infra.yaml.config.swapper.rule.NewYamlRuleConfigurationSwapperEngine;
-import org.apache.shardingsphere.metadata.persist.node.NewDatabaseMetaDataNode;
+import org.apache.shardingsphere.metadata.persist.node.NewGlobalNode;
import org.apache.shardingsphere.mode.spi.PersistRepository;
-import javax.sql.DataSource;
+import java.util.Collection;
import java.util.Collections;
+import java.util.Optional;
import java.util.List;
-import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.Map;
+import java.util.Map.Entry;
/**
- * TODO Rename DatabaseRulePersistService when metadata structure adjustment completed. #25485
- * Database rule persist service.
+ * TODO Rename GlobalRulePersistService when metadata structure adjustment completed. #25485
+ * New Global rule persist service.
*/
@RequiredArgsConstructor
-public final class NewDatabaseRulePersistService implements NewDatabaseRuleBasedPersistService<Collection<RuleConfiguration>> {
+public final class NewGlobalRulePersistService implements GlobalPersistService<Collection<RuleConfiguration>> {
private static final String DEFAULT_VERSION = "0";
private final PersistRepository repository;
- @Override
- public void persist(final String databaseName, final Map<String, DataSource> dataSources,
- final Collection<ShardingSphereRule> rules, final Collection<RuleConfiguration> configs) {
- // TODO Load single table refer to #22887
- }
-
@SuppressWarnings({"unchecked", "rawtypes"})
@Override
- public void persist(final String databaseName, final Collection<RuleConfiguration> configs) {
- Map<RuleConfiguration, NewYamlRuleConfigurationSwapper> yamlConfigs = new NewYamlRuleConfigurationSwapperEngine().swapToYamlRuleConfigurations(configs);
- for (Map.Entry<RuleConfiguration, NewYamlRuleConfigurationSwapper> entry : yamlConfigs.entrySet()) {
+ public void persist(final Collection<RuleConfiguration> globalRuleConfigs) {
+ Map<RuleConfiguration, NewYamlRuleConfigurationSwapper> yamlConfigs = new NewYamlRuleConfigurationSwapperEngine().swapToYamlRuleConfigurations(globalRuleConfigs);
+ for (Entry<RuleConfiguration, NewYamlRuleConfigurationSwapper> entry : yamlConfigs.entrySet()) {
Collection<YamlDataNode> dataNodes = entry.getValue().swapToDataNodes(entry.getKey());
if (dataNodes.isEmpty()) {
continue;
}
- persistDataNodes(databaseName, entry.getValue().getRuleTagName().toLowerCase(), dataNodes);
+ persistDataNodes(dataNodes);
}
}
- private void persistDataNodes(final String databaseName, final String ruleName, final Collection<YamlDataNode> dataNodes) {
+ private void persistDataNodes(final Collection<YamlDataNode> dataNodes) {
for (YamlDataNode each : dataNodes) {
- if (Strings.isNullOrEmpty(repository.getDirectly(each.getKey()))) {
- repository.persist(NewDatabaseMetaDataNode.getDatabaseRuleActiveVersionPath(databaseName, ruleName, each.getKey()), DEFAULT_VERSION);
+ if (Strings.isNullOrEmpty(NewGlobalNode.getGlobalRuleActiveVersionNode(each.getKey()))) {
+ repository.persist(NewGlobalNode.getGlobalRuleActiveVersionNode(each.getKey()), DEFAULT_VERSION);
}
- List<String> versions = repository.getChildrenKeys(NewDatabaseMetaDataNode.getDatabaseRuleVersionsPath(databaseName, ruleName, each.getKey()));
- repository.persist(NewDatabaseMetaDataNode.getDatabaseRuleVersionPath(databaseName, ruleName, each.getKey(), versions.isEmpty()
- ? DEFAULT_VERSION
- : String.valueOf(Integer.parseInt(versions.get(0)) + 1)), each.getValue());
+ repository.persist(NewGlobalNode.getGlobalRuleVersionNode(each.getKey(), DEFAULT_VERSION), each.getValue());
}
}
@Override
- public Collection<RuleConfiguration> load(final String databaseName, final String ruleName) {
+ @SuppressWarnings("unchecked")
+ public Collection<RuleConfiguration> load() {
Collection<String> result = new LinkedHashSet<>();
- getAllKeys(result, NewDatabaseMetaDataNode.getDatabaseRulePath(databaseName, ruleName));
+ getAllNodes(result, NewGlobalNode.getGlobalRuleRootNode());
if (1 == result.size()) {
return Collections.emptyList();
}
- return new NewYamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(ruleName, getDataNodes(result));
+ return new NewYamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(getDataNodes(result));
}
- private void getAllKeys(final Collection<String> keys, final String path) {
+ // TODO Consider merge NewGlobalRulePersistService and NewDatabaseRulePersistService load method.
+ private void getAllNodes(final Collection<String> keys, final String path) {
keys.add(path);
List<String> childrenKeys = repository.getChildrenKeys(path);
if (childrenKeys.isEmpty()) {
return;
}
for (String each : childrenKeys) {
- getAllKeys(keys, String.join("/", "", path, each));
+ getAllNodes(keys, String.join("/", "", path, each));
}
}
@@ -104,4 +99,16 @@ public final class NewDatabaseRulePersistService implements NewDatabaseRuleBased
}
return result;
}
+
+ /**
+ * Load all users.
+ *
+ * @return collection of user
+ */
+ @Override
+ public Collection<ShardingSphereUser> loadUsers() {
+ Optional<AuthorityRuleConfiguration> authorityRuleConfig = load().stream()
+ .filter(AuthorityRuleConfiguration.class::isInstance).map(AuthorityRuleConfiguration.class::cast).findFirst();
+ return authorityRuleConfig.isPresent() ? authorityRuleConfig.get().getUsers() : Collections.emptyList();
+ }
}
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/NewPropertiesPersistService.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/NewPropertiesPersistService.java
new file mode 100644
index 00000000000..26537b1eb6a
--- /dev/null
+++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/NewPropertiesPersistService.java
@@ -0,0 +1,52 @@
+/*
+ * 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.
+ */
+
+package org.apache.shardingsphere.metadata.persist.service.config.global;
+
+import com.google.common.base.Strings;
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
+import org.apache.shardingsphere.metadata.persist.node.NewGlobalNode;
+import org.apache.shardingsphere.mode.spi.PersistRepository;
+
+import java.util.Properties;
+
+/**
+ * TODO Rename PropertiesPersistService when metadata structure adjustment completed. #25485
+ * Properties persist service.
+ */
+@RequiredArgsConstructor
+public final class NewPropertiesPersistService implements GlobalPersistService<Properties> {
+
+ private static final String DEFAULT_VERSION = "0";
+
+ private final PersistRepository repository;
+
+ @Override
+ public void persist(final Properties props) {
+ if (Strings.isNullOrEmpty(repository.getDirectly(NewGlobalNode.getPropsActiveVersionNode()))) {
+ repository.persist(NewGlobalNode.getPropsActiveVersionNode(), DEFAULT_VERSION);
+ }
+ repository.persist(NewGlobalNode.getPropsVersionNode(DEFAULT_VERSION), YamlEngine.marshal(props));
+ }
+
+ @Override
+ public Properties load() {
+ // TODO
+ return new Properties();
+ }
+}
diff --git a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/NewDatabaseMetaDataNodeTest.java b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/NewDatabaseMetaDataNodeTest.java
index bfafe7fa08c..57a5164a9af 100644
--- a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/NewDatabaseMetaDataNodeTest.java
+++ b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/NewDatabaseMetaDataNodeTest.java
@@ -30,27 +30,27 @@ class NewDatabaseMetaDataNodeTest {
@Test
void assertGetMetaDataDataSourcesPath() {
- assertThat(NewDatabaseMetaDataNode.getDataSourcesPath("foo_db"), is("/metadata/foo_db/data_sources"));
+ assertThat(NewDatabaseMetaDataNode.getDataSourcesNode("foo_db"), is("/metadata/foo_db/data_sources"));
}
@Test
void assertGetMetaDataDataSourcePath() {
- assertThat(NewDatabaseMetaDataNode.getDataSourcePath("foo_db", "foo_ds", "0"), is("/metadata/foo_db/data_sources/foo_ds/versions/0"));
+ assertThat(NewDatabaseMetaDataNode.getDataSourceNode("foo_db", "foo_ds", "0"), is("/metadata/foo_db/data_sources/foo_ds/versions/0"));
}
@Test
void assertGetDatabaseRuleActiveVersionPath() {
- assertThat(NewDatabaseMetaDataNode.getDatabaseRuleActiveVersionPath("foo_db", "foo_rule", "foo_tables"), is("/metadata/foo_db/rules/foo_rule/foo_tables/active_version"));
+ assertThat(NewDatabaseMetaDataNode.getDatabaseRuleActiveVersionNode("foo_db", "foo_rule", "foo_tables"), is("/metadata/foo_db/rules/foo_rule/foo_tables/active_version"));
}
@Test
void assertGetDatabaseRuleVersionPath() {
- assertThat(NewDatabaseMetaDataNode.getDatabaseRuleVersionPath("foo_db", "foo_rule", "foo_tables", "1"), is("/metadata/foo_db/rules/foo_rule/foo_tables/versions/1"));
+ assertThat(NewDatabaseMetaDataNode.getDatabaseRuleVersionNode("foo_db", "foo_rule", "foo_tables", "1"), is("/metadata/foo_db/rules/foo_rule/foo_tables/versions/1"));
}
@Test
void assertGetDatabaseNameByPath() {
- Optional<String> actual = NewDatabaseMetaDataNode.getDatabaseNameByPath("/metadata/foo_db/readwrite_splitting");
+ Optional<String> actual = NewDatabaseMetaDataNode.getDatabaseNameByNode("/metadata/foo_db/readwrite_splitting");
assertTrue(actual.isPresent());
assertThat(actual.get(), is("foo_db"));
}
diff --git a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/NewGlobalNodeTest.java b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/NewGlobalNodeTest.java
new file mode 100644
index 00000000000..6fefcbd1297
--- /dev/null
+++ b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/NewGlobalNodeTest.java
@@ -0,0 +1,52 @@
+/*
+ * 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.
+ */
+
+package org.apache.shardingsphere.metadata.persist.node;
+
+import org.junit.jupiter.api.Test;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+// TODO Rename GlobalNodeTest when metadata structure adjustment completed. #25485
+class NewGlobalNodeTest {
+
+ @Test
+ void assertGetGlobalRuleRootNode() {
+ assertThat(NewGlobalNode.getGlobalRuleRootNode(), is("/rules"));
+ }
+
+ @Test
+ void assertGetPropsActiveVersionNode() {
+ assertThat(NewGlobalNode.getPropsActiveVersionNode(), is("/props/active_version"));
+ }
+
+ @Test
+ void assertGetPropsVersionNode() {
+ assertThat(NewGlobalNode.getPropsVersionNode("0"), is("/props/versions/0"));
+ }
+
+ @Test
+ void assertGetGlobalRuleActiveVersionNode() {
+ assertThat(NewGlobalNode.getGlobalRuleActiveVersionNode("transaction"), is("/rules/transaction/active_version"));
+ }
+
+ @Test
+ void assertGetGlobalRuleVersionNode() {
+ assertThat(NewGlobalNode.getGlobalRuleVersionNode("transaction", "0"), is("/rules/transaction/versions/0"));
+ }
+}
diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/NewMetaDataChangedWatcher.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/NewMetaDataChangedWatcher.java
index 74e81e9b50d..3918cd4d0d6 100644
--- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/NewMetaDataChangedWatcher.java
+++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/NewMetaDataChangedWatcher.java
@@ -57,7 +57,7 @@ public final class NewMetaDataChangedWatcher implements NewGovernanceWatcher<Gov
// TODO Change to map to avoid loops.
private Optional<GovernanceEvent> createRuleEvent(final DataChangedEvent event) {
- Optional<String> databaseName = NewDatabaseMetaDataNode.getDatabaseNameByPath(event.getKey());
+ Optional<String> databaseName = NewDatabaseMetaDataNode.getDatabaseNameByNode(event.getKey());
if (!databaseName.isPresent()) {
return Optional.empty();
}