This is an automated email from the ASF dual-hosted git repository.
zhaojinchao 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 7d84d308885 Refactor AbstractPersistService (#31035)
7d84d308885 is described below
commit 7d84d308885f034cb99e8257a0bd3790d170242e
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Apr 27 20:31:57 2024 +0800
Refactor AbstractPersistService (#31035)
* Refactor AbstractPersistService.getRepositoryTuple()
* Refactor AbstractPersistService.getRepositoryTuples()
* Refactor AbstractPersistService
* Refactor AbstractPersistService
* Refactor AbstractPersistService
* Refactor AbstractPersistService
* Refactor AbstractPersistService
* Refactor AbstractPersistService
---
.../service/config/AbstractPersistService.java | 45 ++++++----------------
.../database/rule/DatabaseRulePersistService.java | 2 +-
.../config/global/GlobalRulePersistService.java | 8 ++--
3 files changed, 17 insertions(+), 38 deletions(-)
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/AbstractPersistService.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/AbstractPersistService.java
index 2c34ae46d2e..a9d39663021 100644
---
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/AbstractPersistService.java
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/AbstractPersistService.java
@@ -24,9 +24,8 @@ import org.apache.shardingsphere.mode.spi.PersistRepository;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.List;
import java.util.regex.Pattern;
+import java.util.stream.Collectors;
@RequiredArgsConstructor
public abstract class AbstractPersistService {
@@ -39,49 +38,29 @@ public abstract class AbstractPersistService {
private final PersistRepository repository;
- /**
- * Get repository tuples.
- *
- * @param rootPath root path
- * @return repository tuples
- */
- public Collection<RepositoryTuple> getRepositoryTuple(final String
rootPath) {
- Collection<RepositoryTuple> result = new LinkedList<>();
+ protected final Collection<RepositoryTuple> getRepositoryTuples(final
String rootNode) {
Pattern pattern = Pattern.compile(ACTIVE_VERSION_PATTERN,
Pattern.CASE_INSENSITIVE);
- for (String each : getNodes(rootPath)) {
- if (pattern.matcher(each).find()) {
- String activeRuleKey = each.replace(ACTIVE_VERSION_PATH,
VERSIONS_PATH) + "/" + getActiveVersion(each);
- result.add(new RepositoryTuple(activeRuleKey,
repository.getDirectly(activeRuleKey)));
- }
- }
- return result;
+ return loadNodes(rootNode).stream().filter(each ->
pattern.matcher(each).find()).map(this::getRepositoryTuple).collect(Collectors.toList());
}
- private Collection<String> getNodes(final String rootPath) {
+ private Collection<String> loadNodes(final String rootNode) {
Collection<String> result = new LinkedHashSet<>();
- getAllNodes(result, rootPath);
+ loadNodes(rootNode, result);
if (1 == result.size()) {
return Collections.emptyList();
}
return result;
}
- private void getAllNodes(final Collection<String> keys, final String path)
{
- keys.add(path);
- List<String> childKeys = repository.getChildrenKeys(path);
- if (childKeys.isEmpty()) {
- return;
- }
- for (String each : childKeys) {
- getAllNodes(keys, getPath(path, each));
+ private void loadNodes(final String toBeLoadedNode, final
Collection<String> loadedNodes) {
+ loadedNodes.add(toBeLoadedNode);
+ for (String each : repository.getChildrenKeys(toBeLoadedNode)) {
+ loadNodes(String.join("/", toBeLoadedNode, each), loadedNodes);
}
}
- private String getPath(final String path, final String childKey) {
- return String.join("/", path, childKey);
- }
-
- protected String getActiveVersion(final String key) {
- return repository.getDirectly(key);
+ private RepositoryTuple getRepositoryTuple(final String node) {
+ String activeRuleKey = node.replace(ACTIVE_VERSION_PATH,
VERSIONS_PATH) + "/" + repository.getDirectly(node);
+ return new RepositoryTuple(activeRuleKey,
repository.getDirectly(activeRuleKey));
}
}
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/rule/DatabaseRulePersistService.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/rule/DatabaseRulePersistService.java
index 3316d2e60ca..99a8fce280f 100644
---
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/rule/DatabaseRulePersistService.java
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/rule/DatabaseRulePersistService.java
@@ -61,7 +61,7 @@ public final class DatabaseRulePersistService extends
AbstractPersistService imp
@Override
public Collection<RuleConfiguration> load(final String databaseName) {
- Collection<RepositoryTuple> repositoryTuples =
getRepositoryTuple(DatabaseRuleMetaDataNode.getRulesNode(databaseName));
+ Collection<RepositoryTuple> repositoryTuples =
getRepositoryTuples(DatabaseRuleMetaDataNode.getRulesNode(databaseName));
return repositoryTuples.isEmpty() ? Collections.emptyList() : new
YamlDataNodeRuleConfigurationSwapperEngine().swapToRuleConfigurations(repositoryTuples);
}
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 514670167d1..5f40a0d3032 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
@@ -80,23 +80,23 @@ public final class GlobalRulePersistService extends
AbstractPersistService imple
String nextActiveVersion = versions.isEmpty() ? DEFAULT_VERSION :
String.valueOf(Integer.parseInt(versions.get(0)) + 1);
String persistKey =
GlobalNode.getGlobalRuleVersionNode(each.getKey(), nextActiveVersion);
repository.persist(persistKey, each.getValue());
- if
(Strings.isNullOrEmpty(getActiveVersion(GlobalNode.getGlobalRuleActiveVersionNode(each.getKey()))))
{
+ if
(Strings.isNullOrEmpty(repository.getDirectly(GlobalNode.getGlobalRuleActiveVersionNode(each.getKey()))))
{
repository.persist(GlobalNode.getGlobalRuleActiveVersionNode(each.getKey()),
DEFAULT_VERSION);
}
- result.add(new
MetaDataVersion(GlobalNode.getGlobalRuleNode(each.getKey()),
getActiveVersion(GlobalNode.getGlobalRuleActiveVersionNode(each.getKey())),
nextActiveVersion));
+ result.add(new
MetaDataVersion(GlobalNode.getGlobalRuleNode(each.getKey()),
repository.getDirectly(GlobalNode.getGlobalRuleActiveVersionNode(each.getKey())),
nextActiveVersion));
}
return result;
}
@Override
public Collection<RuleConfiguration> load() {
- Collection<RepositoryTuple> repositoryTuples =
getRepositoryTuple(GlobalNode.getGlobalRuleRootNode());
+ Collection<RepositoryTuple> repositoryTuples =
getRepositoryTuples(GlobalNode.getGlobalRuleRootNode());
return repositoryTuples.isEmpty() ? Collections.emptyList() : new
YamlDataNodeGlobalRuleConfigurationSwapperEngine().swapToRuleConfigurations(repositoryTuples);
}
@Override
public RuleConfiguration load(final String ruleName) {
- Collection<RepositoryTuple> repositoryTuples =
getRepositoryTuple(GlobalNode.getGlobalRuleNode(ruleName));
+ Collection<RepositoryTuple> repositoryTuples =
getRepositoryTuples(GlobalNode.getGlobalRuleNode(ruleName));
return new
YamlDataNodeGlobalRuleConfigurationSwapperEngine().swapSingleRuleToRuleConfiguration(ruleName,
repositoryTuples).orElse(null);
}
}