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);
     }
 }

Reply via email to