This is an automated email from the ASF dual-hosted git repository.

zhangliang 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 3a412d529a2 Refactor NodePathGenerator (#34745)
3a412d529a2 is described below

commit 3a412d529a2929ecf89421887ad259fb82b121b8
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Feb 22 13:59:01 2025 +0800

    Refactor NodePathGenerator (#34745)
    
    * Refactor NodePathGenerator
    
    * Refactor NodePathGenerator
    
    * Refactor NodePathGenerator
    
    * Refactor NodePathGenerator
    
    * Refactor NodePathGenerator
    
    * Refactor NodePathGenerator
    
    * Refactor NodePathGenerator
    
    * Refactor NodePathGenerator
    
    * Refactor NodePathGenerator
---
 ...ittingQualifiedDataSourceChangedSubscriber.java |  2 +-
 .../collect/StatisticsCollectJobWorker.java        |  2 +-
 .../database/DataSourceUnitPersistService.java     |  8 +--
 .../database/DatabaseRulePersistService.java       | 10 ++--
 .../config/global/GlobalRulePersistService.java    |  6 +--
 .../config/global/PropertiesPersistService.java    |  6 +--
 .../service/DatabaseMetaDataPersistService.java    |  6 +--
 .../service/SchemaMetaDataPersistService.java      |  6 +--
 .../service/TableMetaDataPersistService.java       |  8 +--
 .../service/TableRowDataPersistService.java        | 10 ++--
 .../service/ViewMetaDataPersistService.java        |  8 +--
 .../statistics/StatisticsPersistService.java       | 10 ++--
 .../state/cluster/ClusterStatePersistService.java  |  4 +-
 .../mode/state/node/ComputeNodePersistService.java | 24 ++++-----
 .../QualifiedDataSourceStatePersistService.java    |  6 +--
 .../mode/node/path/NodePathGenerator.java          | 61 ++++++++++------------
 ...ssTriggerNodePath.java => NodePathSegment.java} | 31 +++++++----
 ...sTriggerNodePath.java => NodePathVariable.java} | 32 ++++++++----
 .../global/GlobalPropertiesNodePathParser.java     |  2 +-
 .../config/global/GlobalRuleNodePathParser.java    |  2 +-
 .../node/path/metadata/DatabaseNodePathParser.java |  2 +-
 .../database/SchemaMetaDataNodePathParser.java     |  2 +-
 .../database/TableMetaDataNodePathParser.java      |  4 +-
 .../database/ViewMetaDataNodePathParser.java       |  4 +-
 .../metadata/storage/DataSourceNodePathParser.java |  2 +-
 .../storage/StorageNodeNodePathParser.java         |  4 +-
 .../storage/StorageUnitNodePathParser.java         |  4 +-
 ...NodePath.java => InstanceProcessNodeValue.java} | 14 ++---
 .../process/KillProcessTriggerNodePath.java        |  6 +--
 .../process/ShowProcessListTriggerNodePath.java    |  6 +--
 .../storage/QualifiedDataSourceNodePathParser.java |  2 +-
 .../DatabaseListenerCoordinatorNodePathParser.java |  5 +-
 .../path/statistics/StatisticsNodePathParser.java  |  8 +--
 .../mode/node/path/NodePathSegmentTest.java        | 54 +++++++++++++++++++
 ...NodePathTest.java => NodePathVariableTest.java} | 20 +++++--
 .../global/GlobalPropertiesNodePathTest.java       |  2 +-
 .../path/config/global/GlobalRuleNodePathTest.java |  4 +-
 .../node/path/execution/ProcessNodePathTest.java   |  4 +-
 .../database/TableMetadataNodePathTest.java        | 10 ++--
 .../database/ViewMetadataNodePathTest.java         | 10 ++--
 .../metadata/rule/DatabaseRuleNodePathTest.java    | 10 ++--
 .../metadata/storage/StorageNodeNodePathTest.java  |  4 +-
 .../metadata/storage/StorageUnitNodePathTest.java  |  4 +-
 .../path/node/compute/label/LabelNodePathTest.java |  2 +-
 .../process/KillProcessTriggerNodePathTest.java    |  4 +-
 .../ShowProcessListTriggerNodePathTest.java        |  4 +-
 .../node/compute/status/OnlineNodePathTest.java    |  6 +--
 .../node/compute/status/StatusNodePathTest.java    |  4 +-
 .../workerid/ComputeNodeWorkerIDNodePathTest.java  |  2 +-
 .../storage/QualifiedDataSourceNodePathTest.java   |  2 +-
 .../WorkerIDReservationNodePathTest.java           |  4 +-
 .../mode/node/path/state/ClusterNodePathTest.java  |  2 +-
 .../DatabaseListenerCoordinatorNodePathTest.java   |  4 +-
 .../statistics/StatisticsDataNodePathTest.java     | 14 ++---
 .../path/statistics/StatisticsJobNodePathTest.java |  2 +-
 .../global/type/ClusterStateChangedHandler.java    |  2 +-
 .../global/type/ComputeNodeOnlineHandler.java      |  4 +-
 .../type/ComputeNodeStateChangedHandler.java       |  6 +--
 .../type/DatabaseListenerChangedHandler.java       |  6 +--
 .../global/type/GlobalRuleChangedHandler.java      |  2 +-
 .../handler/global/type/KillProcessHandler.java    |  4 +-
 .../global/type/PropertiesChangedHandler.java      |  2 +-
 .../type/QualifiedDataSourceChangedHandler.java    |  2 +-
 .../global/type/ShowProcessListHandler.java        |  4 +-
 .../global/type/StatisticsChangedHandler.java      |  2 +-
 .../listener/DataChangedEventListenerRegistry.java |  2 +-
 .../ClusterDatabaseListenerPersistCoordinator.java |  4 +-
 .../process/ClusterProcessPersistCoordinator.java  |  7 +--
 .../service/ClusterProcessPersistService.java      | 15 +++---
 .../workerid/ReservationPersistService.java        |  2 +-
 70 files changed, 311 insertions(+), 232 deletions(-)

diff --git 
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/deliver/ReadwriteSplittingQualifiedDataSourceChangedSubscriber.java
 
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/deliver/ReadwriteSplittingQualifiedDataSourceChangedSubscriber.java
index fb66cbbab9d..98d2e52d22e 100644
--- 
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/deliver/ReadwriteSplittingQualifiedDataSourceChangedSubscriber.java
+++ 
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/deliver/ReadwriteSplittingQualifiedDataSourceChangedSubscriber.java
@@ -39,6 +39,6 @@ public final class 
ReadwriteSplittingQualifiedDataSourceChangedSubscriber implem
      */
     @Subscribe
     public void delete(final QualifiedDataSourceDeletedEvent event) {
-        repository.delete(NodePathGenerator.generatePath(new 
QualifiedDataSourceNodePath(event.getQualifiedDataSource()), false));
+        repository.delete(NodePathGenerator.toPath(new 
QualifiedDataSourceNodePath(event.getQualifiedDataSource()), false));
     }
 }
diff --git 
a/kernel/schedule/core/src/main/java/org/apache/shardingsphere/schedule/core/job/statistics/collect/StatisticsCollectJobWorker.java
 
b/kernel/schedule/core/src/main/java/org/apache/shardingsphere/schedule/core/job/statistics/collect/StatisticsCollectJobWorker.java
index 49fb9d13060..c202e539806 100644
--- 
a/kernel/schedule/core/src/main/java/org/apache/shardingsphere/schedule/core/job/statistics/collect/StatisticsCollectJobWorker.java
+++ 
b/kernel/schedule/core/src/main/java/org/apache/shardingsphere/schedule/core/job/statistics/collect/StatisticsCollectJobWorker.java
@@ -69,7 +69,7 @@ public final class StatisticsCollectJobWorker {
     
     private CoordinatorRegistryCenter createRegistryCenter(final 
ModeConfiguration modeConfig) {
         ClusterPersistRepositoryConfiguration repositoryConfig = 
(ClusterPersistRepositoryConfiguration) modeConfig.getRepository();
-        String namespace = repositoryConfig.getNamespace() + 
NodePathGenerator.generatePath(new StatisticsJobNodePath(), false);
+        String namespace = repositoryConfig.getNamespace() + 
NodePathGenerator.toPath(new StatisticsJobNodePath(), false);
         CoordinatorRegistryCenter result = new 
ZookeeperRegistryCenter(getZookeeperConfiguration(repositoryConfig, namespace));
         result.init();
         return result;
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistService.java
index 2191c10e9a6..e5c0fdae66a 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistService.java
@@ -56,7 +56,7 @@ public final class DataSourceUnitPersistService {
      * @return data source pool properties map
      */
     public Map<String, DataSourcePoolProperties> load(final String 
databaseName) {
-        Collection<String> childrenKeys = 
repository.getChildrenKeys(NodePathGenerator.generatePath(new 
StorageUnitNodePath(databaseName, null), false));
+        Collection<String> childrenKeys = 
repository.getChildrenKeys(NodePathGenerator.toPath(new 
StorageUnitNodePath(databaseName, null), false));
         return childrenKeys.stream().collect(Collectors.toMap(each -> each, 
each -> load(databaseName, each), (a, b) -> b, () -> new 
LinkedHashMap<>(childrenKeys.size(), 1F)));
     }
     
@@ -69,7 +69,7 @@ public final class DataSourceUnitPersistService {
      */
     @SuppressWarnings("unchecked")
     public DataSourcePoolProperties load(final String databaseName, final 
String dataSourceName) {
-        VersionNodePath versionNodePath = 
NodePathGenerator.generateVersionPath(new StorageUnitNodePath(databaseName, 
dataSourceName));
+        VersionNodePath versionNodePath = NodePathGenerator.toVersionPath(new 
StorageUnitNodePath(databaseName, dataSourceName));
         int activeVersion = 
Integer.parseInt(repository.query(versionNodePath.getActiveVersionPath()));
         String dataSourceContent = 
repository.query(versionNodePath.getVersionPath(activeVersion));
         return 
yamlDataSourceConfigurationSwapper.swapToDataSourcePoolProperties(YamlEngine.unmarshal(dataSourceContent,
 Map.class));
@@ -83,7 +83,7 @@ public final class DataSourceUnitPersistService {
      */
     public void persist(final String databaseName, final Map<String, 
DataSourcePoolProperties> dataSourcePropsMap) {
         for (Entry<String, DataSourcePoolProperties> entry : 
dataSourcePropsMap.entrySet()) {
-            VersionNodePath versionNodePath = 
NodePathGenerator.generateVersionPath(new StorageUnitNodePath(databaseName, 
entry.getKey()));
+            VersionNodePath versionNodePath = 
NodePathGenerator.toVersionPath(new StorageUnitNodePath(databaseName, 
entry.getKey()));
             metaDataVersionPersistService.persist(versionNodePath, 
YamlEngine.marshal(yamlDataSourceConfigurationSwapper.swapToMap(entry.getValue())));
         }
     }
@@ -95,6 +95,6 @@ public final class DataSourceUnitPersistService {
      * @param dataSourceName data source name
      */
     public void delete(final String databaseName, final String dataSourceName) 
{
-        repository.delete(NodePathGenerator.generatePath(new 
StorageUnitNodePath(databaseName, dataSourceName), false));
+        repository.delete(NodePathGenerator.toPath(new 
StorageUnitNodePath(databaseName, dataSourceName), false));
     }
 }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java
index 905a55b0cd2..d52b9394ac0 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java
@@ -68,7 +68,7 @@ public final class DatabaseRulePersistService {
      */
     public Collection<RuleConfiguration> load(final String databaseName) {
         return yamlRepositoryTupleSwapperEngine.swapToRuleConfigurations(
-                
repositoryTuplePersistService.load(NodePathGenerator.generatePath(new 
DatabaseRuleNodePath(databaseName, null, null), false)));
+                
repositoryTuplePersistService.load(NodePathGenerator.toPath(new 
DatabaseRuleNodePath(databaseName, null, null), false)));
     }
     
     /**
@@ -94,8 +94,8 @@ public final class DatabaseRulePersistService {
         for (RepositoryTuple each : repositoryTuples) {
             DatabaseRuleItem databaseRuleItem = new 
DatabaseRuleItem(each.getKey());
             DatabaseRuleNodePath databaseRuleNodePath = new 
DatabaseRuleNodePath(databaseName, ruleType, databaseRuleItem);
-            int nextVersion = 
metaDataVersionPersistService.persist(NodePathGenerator.generateVersionPath(databaseRuleNodePath),
 each.getValue());
-            result.add(new 
MetaDataVersion(NodePathGenerator.generatePath(databaseRuleNodePath, false), 
Math.max(MetaDataVersion.INIT_VERSION, nextVersion - 1)));
+            int nextVersion = 
metaDataVersionPersistService.persist(NodePathGenerator.toVersionPath(databaseRuleNodePath),
 each.getValue());
+            result.add(new 
MetaDataVersion(NodePathGenerator.toPath(databaseRuleNodePath, false), 
Math.max(MetaDataVersion.INIT_VERSION, nextVersion - 1)));
         }
         return result;
     }
@@ -107,7 +107,7 @@ public final class DatabaseRulePersistService {
      * @param ruleType rule type
      */
     public void delete(final String databaseName, final String ruleType) {
-        repository.delete(NodePathGenerator.generatePath(new 
DatabaseRuleNodePath(databaseName, ruleType, null), false));
+        repository.delete(NodePathGenerator.toPath(new 
DatabaseRuleNodePath(databaseName, ruleType, null), false));
     }
     
     /**
@@ -133,7 +133,7 @@ public final class DatabaseRulePersistService {
     private Collection<MetaDataVersion> delete(final String databaseName, 
final String ruleType, final Collection<RepositoryTuple> repositoryTuples) {
         Collection<MetaDataVersion> result = new LinkedList<>();
         for (RepositoryTuple each : repositoryTuples) {
-            String toBeDeletedKey = NodePathGenerator.generatePath(new 
DatabaseRuleNodePath(databaseName, ruleType, new 
DatabaseRuleItem(each.getKey())), false);
+            String toBeDeletedKey = NodePathGenerator.toPath(new 
DatabaseRuleNodePath(databaseName, ruleType, new 
DatabaseRuleItem(each.getKey())), false);
             repository.delete(toBeDeletedKey);
             result.add(new MetaDataVersion(toBeDeletedKey));
         }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/GlobalRulePersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/GlobalRulePersistService.java
index 195389e5099..b4ba61341e1 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/GlobalRulePersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/GlobalRulePersistService.java
@@ -57,7 +57,7 @@ public final class GlobalRulePersistService {
      * @return global rule configurations
      */
     public Collection<RuleConfiguration> load() {
-        return 
yamlRepositoryTupleSwapperEngine.swapToRuleConfigurations(repositoryTuplePersistService.load(NodePathGenerator.generatePath(new
 GlobalRuleNodePath(null), false)));
+        return 
yamlRepositoryTupleSwapperEngine.swapToRuleConfigurations(repositoryTuplePersistService.load(NodePathGenerator.toPath(new
 GlobalRuleNodePath(null), false)));
     }
     
     /**
@@ -67,7 +67,7 @@ public final class GlobalRulePersistService {
      * @return global rule configuration
      */
     public Optional<RuleConfiguration> load(final String ruleType) {
-        return 
yamlRepositoryTupleSwapperEngine.swapToRuleConfiguration(ruleType, 
repositoryTuplePersistService.load(NodePathGenerator.generatePath(new 
GlobalRuleNodePath(ruleType), false)));
+        return 
yamlRepositoryTupleSwapperEngine.swapToRuleConfiguration(ruleType, 
repositoryTuplePersistService.load(NodePathGenerator.toPath(new 
GlobalRuleNodePath(ruleType), false)));
     }
     
     /**
@@ -83,7 +83,7 @@ public final class GlobalRulePersistService {
     
     private void persistTuples(final Collection<RepositoryTuple> tuples) {
         for (RepositoryTuple each : tuples) {
-            
metaDataVersionPersistService.persist(NodePathGenerator.generateVersionPath(new 
GlobalRuleNodePath(each.getKey())), each.getValue());
+            
metaDataVersionPersistService.persist(NodePathGenerator.toVersionPath(new 
GlobalRuleNodePath(each.getKey())), each.getValue());
         }
     }
 }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/PropertiesPersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/PropertiesPersistService.java
index e09aacdc219..530fc6ac3aa 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/PropertiesPersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/PropertiesPersistService.java
@@ -46,12 +46,12 @@ public final class PropertiesPersistService {
      */
     public Properties load() {
         return loadActiveVersion()
-                .map(optional -> 
YamlEngine.unmarshal(repository.query(NodePathGenerator.generateVersionPath(new 
GlobalPropertiesNodePath()).getVersionPath(optional)), Properties.class))
+                .map(optional -> 
YamlEngine.unmarshal(repository.query(NodePathGenerator.toVersionPath(new 
GlobalPropertiesNodePath()).getVersionPath(optional)), Properties.class))
                 .orElse(new Properties());
     }
     
     private Optional<Integer> loadActiveVersion() {
-        String value = 
repository.query(NodePathGenerator.generateVersionPath(new 
GlobalPropertiesNodePath()).getActiveVersionPath());
+        String value = repository.query(NodePathGenerator.toVersionPath(new 
GlobalPropertiesNodePath()).getActiveVersionPath());
         return Strings.isNullOrEmpty(value) ? Optional.empty() : 
Optional.of(Integer.parseInt(value));
     }
     
@@ -61,7 +61,7 @@ public final class PropertiesPersistService {
      * @param props properties
      */
     public void persist(final Properties props) {
-        VersionNodePath versionNodePath = 
NodePathGenerator.generateVersionPath(new GlobalPropertiesNodePath());
+        VersionNodePath versionNodePath = NodePathGenerator.toVersionPath(new 
GlobalPropertiesNodePath());
         metaDataVersionPersistService.persist(versionNodePath, 
YamlEngine.marshal(props));
     }
 }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/DatabaseMetaDataPersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/DatabaseMetaDataPersistService.java
index 6868ca7e5d9..e4f8a72715a 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/DatabaseMetaDataPersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/DatabaseMetaDataPersistService.java
@@ -38,7 +38,7 @@ public final class DatabaseMetaDataPersistService {
      * @param databaseName to be added database name
      */
     public void add(final String databaseName) {
-        repository.persist(NodePathGenerator.generatePath(new 
TableMetadataNodePath(databaseName, null, null), true), "");
+        repository.persist(NodePathGenerator.toPath(new 
TableMetadataNodePath(databaseName, null, null), true), "");
     }
     
     /**
@@ -47,7 +47,7 @@ public final class DatabaseMetaDataPersistService {
      * @param databaseName to be dropped database name
      */
     public void drop(final String databaseName) {
-        repository.delete(NodePathGenerator.generatePath(new 
TableMetadataNodePath(databaseName, null, null), true));
+        repository.delete(NodePathGenerator.toPath(new 
TableMetadataNodePath(databaseName, null, null), true));
     }
     
     /**
@@ -56,6 +56,6 @@ public final class DatabaseMetaDataPersistService {
      * @return loaded database names
      */
     public Collection<String> loadAllDatabaseNames() {
-        return repository.getChildrenKeys(NodePathGenerator.generatePath(new 
TableMetadataNodePath(null, null, null), false));
+        return repository.getChildrenKeys(NodePathGenerator.toPath(new 
TableMetadataNodePath(null, null, null), false));
     }
 }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/SchemaMetaDataPersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/SchemaMetaDataPersistService.java
index 678d721c58f..6c273f96507 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/SchemaMetaDataPersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/SchemaMetaDataPersistService.java
@@ -52,7 +52,7 @@ public final class SchemaMetaDataPersistService {
      * @param schemaName to be added schema name
      */
     public void add(final String databaseName, final String schemaName) {
-        repository.persist(NodePathGenerator.generatePath(new 
TableMetadataNodePath(databaseName, schemaName, null), false), "");
+        repository.persist(NodePathGenerator.toPath(new 
TableMetadataNodePath(databaseName, schemaName, null), false), "");
     }
     
     /**
@@ -62,7 +62,7 @@ public final class SchemaMetaDataPersistService {
      * @param schemaName to be dropped schema name
      */
     public void drop(final String databaseName, final String schemaName) {
-        repository.delete(NodePathGenerator.generatePath(new 
TableMetadataNodePath(databaseName, schemaName, null), true));
+        repository.delete(NodePathGenerator.toPath(new 
TableMetadataNodePath(databaseName, schemaName, null), true));
     }
     
     /**
@@ -112,7 +112,7 @@ public final class SchemaMetaDataPersistService {
      * @return schemas
      */
     public Collection<ShardingSphereSchema> load(final String databaseName) {
-        return repository.getChildrenKeys(NodePathGenerator.generatePath(new 
TableMetadataNodePath(databaseName, null, null), false)).stream()
+        return repository.getChildrenKeys(NodePathGenerator.toPath(new 
TableMetadataNodePath(databaseName, null, null), false)).stream()
                 .map(each -> new ShardingSphereSchema(each, 
tableMetaDataPersistService.load(databaseName, each), 
viewMetaDataPersistService.load(databaseName, 
each))).collect(Collectors.toList());
     }
 }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/TableMetaDataPersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/TableMetaDataPersistService.java
index 3164f26947b..a64b1a250d0 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/TableMetaDataPersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/TableMetaDataPersistService.java
@@ -51,7 +51,7 @@ public final class TableMetaDataPersistService {
      * @return loaded tables
      */
     public Collection<ShardingSphereTable> load(final String databaseName, 
final String schemaName) {
-        return repository.getChildrenKeys(NodePathGenerator.generatePath(new 
TableMetadataNodePath(databaseName, schemaName, null), false)).stream()
+        return repository.getChildrenKeys(NodePathGenerator.toPath(new 
TableMetadataNodePath(databaseName, schemaName, null), false)).stream()
                 .map(each -> load(databaseName, schemaName, 
each)).collect(Collectors.toList());
     }
     
@@ -64,7 +64,7 @@ public final class TableMetaDataPersistService {
      * @return loaded table
      */
     public ShardingSphereTable load(final String databaseName, final String 
schemaName, final String tableName) {
-        VersionNodePath versionNodePath = 
NodePathGenerator.generateVersionPath(new TableMetadataNodePath(databaseName, 
schemaName, tableName));
+        VersionNodePath versionNodePath = NodePathGenerator.toVersionPath(new 
TableMetadataNodePath(databaseName, schemaName, tableName));
         int activeVersion = 
Integer.parseInt(repository.query(versionNodePath.getActiveVersionPath()));
         String tableContent = 
repository.query(versionNodePath.getVersionPath(activeVersion));
         return swapper.swapToObject(YamlEngine.unmarshal(tableContent, 
YamlShardingSphereTable.class));
@@ -80,7 +80,7 @@ public final class TableMetaDataPersistService {
     public void persist(final String databaseName, final String schemaName, 
final Collection<ShardingSphereTable> tables) {
         for (ShardingSphereTable each : tables) {
             String tableName = each.getName().toLowerCase();
-            VersionNodePath versionNodePath = 
NodePathGenerator.generateVersionPath(new TableMetadataNodePath(databaseName, 
schemaName, tableName));
+            VersionNodePath versionNodePath = 
NodePathGenerator.toVersionPath(new TableMetadataNodePath(databaseName, 
schemaName, tableName));
             metaDataVersionPersistService.persist(versionNodePath, 
YamlEngine.marshal(swapper.swapToYamlConfiguration(each)));
         }
     }
@@ -93,7 +93,7 @@ public final class TableMetaDataPersistService {
      * @param tableName to be dropped table name
      */
     public void drop(final String databaseName, final String schemaName, final 
String tableName) {
-        repository.delete(NodePathGenerator.generatePath(new 
TableMetadataNodePath(databaseName, schemaName, tableName.toLowerCase()), 
false));
+        repository.delete(NodePathGenerator.toPath(new 
TableMetadataNodePath(databaseName, schemaName, tableName.toLowerCase()), 
false));
     }
     
     /**
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/TableRowDataPersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/TableRowDataPersistService.java
index 3cffe3260bb..f730a5a6e9b 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/TableRowDataPersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/TableRowDataPersistService.java
@@ -49,9 +49,9 @@ public final class TableRowDataPersistService {
      */
     public void persist(final String databaseName, final String schemaName, 
final String tableName, final Collection<YamlRowStatistics> rows) {
         if (rows.isEmpty()) {
-            repository.persist(NodePathGenerator.generatePath(new 
StatisticsDataNodePath(databaseName, schemaName, tableName.toLowerCase(), 
null), false), "");
+            repository.persist(NodePathGenerator.toPath(new 
StatisticsDataNodePath(databaseName, schemaName, tableName.toLowerCase(), 
null), false), "");
         } else {
-            rows.forEach(each -> 
repository.persist(NodePathGenerator.generatePath(new 
StatisticsDataNodePath(databaseName, schemaName, tableName.toLowerCase(), 
each.getUniqueKey()), false),
+            rows.forEach(each -> 
repository.persist(NodePathGenerator.toPath(new 
StatisticsDataNodePath(databaseName, schemaName, tableName.toLowerCase(), 
each.getUniqueKey()), false),
                     YamlEngine.marshal(each)));
         }
     }
@@ -65,7 +65,7 @@ public final class TableRowDataPersistService {
      * @param rows rows
      */
     public void delete(final String databaseName, final String schemaName, 
final String tableName, final Collection<YamlRowStatistics> rows) {
-        rows.forEach(each -> 
repository.delete(NodePathGenerator.generatePath(new 
StatisticsDataNodePath(databaseName, schemaName, tableName.toLowerCase(), 
each.getUniqueKey()), false)));
+        rows.forEach(each -> repository.delete(NodePathGenerator.toPath(new 
StatisticsDataNodePath(databaseName, schemaName, tableName.toLowerCase(), 
each.getUniqueKey()), false)));
     }
     
     /**
@@ -79,8 +79,8 @@ public final class TableRowDataPersistService {
     public TableStatistics load(final String databaseName, final String 
schemaName, final ShardingSphereTable table) {
         TableStatistics result = new TableStatistics(table.getName());
         YamlRowStatisticsSwapper swapper = new YamlRowStatisticsSwapper(new 
ArrayList<>(table.getAllColumns()));
-        for (String each : 
repository.getChildrenKeys(NodePathGenerator.generatePath(new 
StatisticsDataNodePath(databaseName, schemaName, table.getName(), null), 
false))) {
-            String yamlRow = 
repository.query(NodePathGenerator.generatePath(new 
StatisticsDataNodePath(databaseName, schemaName, table.getName(), each), 
false));
+        for (String each : 
repository.getChildrenKeys(NodePathGenerator.toPath(new 
StatisticsDataNodePath(databaseName, schemaName, table.getName(), null), 
false))) {
+            String yamlRow = repository.query(NodePathGenerator.toPath(new 
StatisticsDataNodePath(databaseName, schemaName, table.getName(), each), 
false));
             if (!Strings.isNullOrEmpty(yamlRow)) {
                 
result.getRows().add(swapper.swapToObject(YamlEngine.unmarshal(yamlRow, 
YamlRowStatistics.class)));
             }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/ViewMetaDataPersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/ViewMetaDataPersistService.java
index 89f36d8f034..fd10eade925 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/ViewMetaDataPersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/ViewMetaDataPersistService.java
@@ -51,7 +51,7 @@ public final class ViewMetaDataPersistService {
      * @return loaded views
      */
     public Collection<ShardingSphereView> load(final String databaseName, 
final String schemaName) {
-        return repository.getChildrenKeys(NodePathGenerator.generatePath(new 
ViewMetadataNodePath(databaseName, schemaName, null), false)).stream()
+        return repository.getChildrenKeys(NodePathGenerator.toPath(new 
ViewMetadataNodePath(databaseName, schemaName, null), false)).stream()
                 .map(each -> load(databaseName, schemaName, 
each)).collect(Collectors.toList());
     }
     
@@ -64,7 +64,7 @@ public final class ViewMetaDataPersistService {
      * @return loaded view
      */
     public ShardingSphereView load(final String databaseName, final String 
schemaName, final String viewName) {
-        VersionNodePath versionNodePath = 
NodePathGenerator.generateVersionPath(new ViewMetadataNodePath(databaseName, 
schemaName, viewName));
+        VersionNodePath versionNodePath = NodePathGenerator.toVersionPath(new 
ViewMetadataNodePath(databaseName, schemaName, viewName));
         int activeVersion = 
Integer.parseInt(repository.query(versionNodePath.getActiveVersionPath()));
         String view = 
repository.query(versionNodePath.getVersionPath(activeVersion));
         return swapper.swapToObject(YamlEngine.unmarshal(view, 
YamlShardingSphereView.class));
@@ -80,7 +80,7 @@ public final class ViewMetaDataPersistService {
     public void persist(final String databaseName, final String schemaName, 
final Collection<ShardingSphereView> views) {
         for (ShardingSphereView each : views) {
             String viewName = each.getName().toLowerCase();
-            VersionNodePath versionNodePath = 
NodePathGenerator.generateVersionPath(new ViewMetadataNodePath(databaseName, 
schemaName, viewName));
+            VersionNodePath versionNodePath = 
NodePathGenerator.toVersionPath(new ViewMetadataNodePath(databaseName, 
schemaName, viewName));
             metaDataVersionPersistService.persist(versionNodePath, 
YamlEngine.marshal(swapper.swapToYamlConfiguration(each)));
         }
     }
@@ -93,6 +93,6 @@ public final class ViewMetaDataPersistService {
      * @param viewName to be dropped view name
      */
     public void drop(final String databaseName, final String schemaName, final 
String viewName) {
-        repository.delete(NodePathGenerator.generatePath(new 
ViewMetadataNodePath(databaseName, schemaName, viewName.toLowerCase()), false));
+        repository.delete(NodePathGenerator.toPath(new 
ViewMetadataNodePath(databaseName, schemaName, viewName.toLowerCase()), false));
     }
 }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/statistics/StatisticsPersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/statistics/StatisticsPersistService.java
index c63d6bbdc31..9afb9a3cbe1 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/statistics/StatisticsPersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/statistics/StatisticsPersistService.java
@@ -55,7 +55,7 @@ public final class StatisticsPersistService {
      * @return statistics
      */
     public ShardingSphereStatistics load(final ShardingSphereMetaData 
metaData) {
-        Collection<String> databaseNames = 
repository.getChildrenKeys(NodePathGenerator.generatePath(new 
StatisticsDataNodePath(null, null, null, null), false));
+        Collection<String> databaseNames = 
repository.getChildrenKeys(NodePathGenerator.toPath(new 
StatisticsDataNodePath(null, null, null, null), false));
         if (databaseNames.isEmpty()) {
             return new ShardingSphereStatistics();
         }
@@ -68,7 +68,7 @@ public final class StatisticsPersistService {
     
     private DatabaseStatistics load(final ShardingSphereDatabase database) {
         DatabaseStatistics result = new DatabaseStatistics();
-        for (String each : 
repository.getChildrenKeys(NodePathGenerator.generatePath(new 
StatisticsDataNodePath(database.getName(), null, null, null), false)).stream()
+        for (String each : 
repository.getChildrenKeys(NodePathGenerator.toPath(new 
StatisticsDataNodePath(database.getName(), null, null, null), false)).stream()
                 
.filter(database::containsSchema).collect(Collectors.toList())) {
             result.putSchemaStatistics(each, load(database.getName(), 
database.getSchema(each)));
         }
@@ -77,7 +77,7 @@ public final class StatisticsPersistService {
     
     private SchemaStatistics load(final String databaseName, final 
ShardingSphereSchema schema) {
         SchemaStatistics result = new SchemaStatistics();
-        for (String each : 
repository.getChildrenKeys(NodePathGenerator.generatePath(new 
StatisticsDataNodePath("foo_db", "foo_schema", null, null), false)).stream()
+        for (String each : 
repository.getChildrenKeys(NodePathGenerator.toPath(new 
StatisticsDataNodePath("foo_db", "foo_schema", null, null), false)).stream()
                 .filter(schema::containsTable).collect(Collectors.toList())) {
             result.putTableStatistics(each, 
tableRowDataPersistService.load(databaseName, schema.getName(), 
schema.getTable(each)));
             
@@ -100,7 +100,7 @@ public final class StatisticsPersistService {
     }
     
     private void persistSchema(final String databaseName, final String 
schemaName) {
-        repository.persist(NodePathGenerator.generatePath(new 
StatisticsDataNodePath(databaseName, schemaName, null, null), true), "");
+        repository.persist(NodePathGenerator.toPath(new 
StatisticsDataNodePath(databaseName, schemaName, null, null), true), "");
     }
     
     private void persistTableData(final ShardingSphereDatabase database, final 
String schemaName, final SchemaStatistics schemaStatistics) {
@@ -135,6 +135,6 @@ public final class StatisticsPersistService {
      * @param databaseName database name
      */
     public void delete(final String databaseName) {
-        repository.delete(NodePathGenerator.generatePath(new 
StatisticsDataNodePath(databaseName, null, null, null), true));
+        repository.delete(NodePathGenerator.toPath(new 
StatisticsDataNodePath(databaseName, null, null, null), true));
     }
 }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/state/cluster/ClusterStatePersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/state/cluster/ClusterStatePersistService.java
index 100e286cca4..ad49b6b38a2 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/state/cluster/ClusterStatePersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/state/cluster/ClusterStatePersistService.java
@@ -37,7 +37,7 @@ public final class ClusterStatePersistService {
      * @param state to be updated cluster state
      */
     public void update(final ClusterState state) {
-        repository.persist(NodePathGenerator.generatePath(new 
ClusterNodePath(), false), state.name());
+        repository.persist(NodePathGenerator.toPath(new ClusterNodePath(), 
false), state.name());
     }
     
     /**
@@ -46,7 +46,7 @@ public final class ClusterStatePersistService {
      * @return loaded cluster state
      */
     public ClusterState load() {
-        String value = repository.query(NodePathGenerator.generatePath(new 
ClusterNodePath(), false));
+        String value = repository.query(NodePathGenerator.toPath(new 
ClusterNodePath(), false));
         return Strings.isNullOrEmpty(value) ? ClusterState.OK : 
ClusterState.valueOf(value);
     }
 }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/state/node/ComputeNodePersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/state/node/ComputeNodePersistService.java
index ec04f13998c..e326550fce8 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/state/node/ComputeNodePersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/state/node/ComputeNodePersistService.java
@@ -67,7 +67,7 @@ public final class ComputeNodePersistService {
     private void persistOnline(final ComputeNodeInstance computeNodeInstance) {
         ComputeNodeData computeNodeData = new ComputeNodeData(
                 computeNodeInstance.getMetaData().getDatabaseName(), 
computeNodeInstance.getMetaData().getAttributes(), 
computeNodeInstance.getMetaData().getVersion());
-        repository.persistEphemeral(NodePathGenerator.generatePath(new 
OnlineNodePath(computeNodeInstance.getMetaData().getType(), 
computeNodeInstance.getMetaData().getId()), false),
+        repository.persistEphemeral(NodePathGenerator.toPath(new 
OnlineNodePath(computeNodeInstance.getMetaData().getType(), 
computeNodeInstance.getMetaData().getId()), false),
                 YamlEngine.marshal(new 
YamlComputeNodeDataSwapper().swapToYamlConfiguration(computeNodeData)));
     }
     
@@ -77,7 +77,7 @@ public final class ComputeNodePersistService {
      * @param computeNodeInstance compute node instance
      */
     public void offline(final ComputeNodeInstance computeNodeInstance) {
-        repository.delete(NodePathGenerator.generatePath(new 
OnlineNodePath(computeNodeInstance.getMetaData().getType(), 
computeNodeInstance.getMetaData().getId()), false));
+        repository.delete(NodePathGenerator.toPath(new 
OnlineNodePath(computeNodeInstance.getMetaData().getType(), 
computeNodeInstance.getMetaData().getId()), false));
     }
     
     /**
@@ -91,8 +91,8 @@ public final class ComputeNodePersistService {
     
     private Collection<ComputeNodeInstance> loadInstances(final InstanceType 
instanceType) {
         Collection<ComputeNodeInstance> result = new LinkedList<>();
-        for (String each : 
repository.getChildrenKeys(NodePathGenerator.generatePath(new 
OnlineNodePath(instanceType, null), false))) {
-            String value = repository.query(NodePathGenerator.generatePath(new 
OnlineNodePath(instanceType, each), false));
+        for (String each : 
repository.getChildrenKeys(NodePathGenerator.toPath(new 
OnlineNodePath(instanceType, null), false))) {
+            String value = repository.query(NodePathGenerator.toPath(new 
OnlineNodePath(instanceType, each), false));
             if (!Strings.isNullOrEmpty(value)) {
                 result.add(loadInstance(InstanceMetaDataFactory.create(each, 
instanceType, new 
YamlComputeNodeDataSwapper().swapToObject(YamlEngine.unmarshal(value, 
YamlComputeNodeData.class)))));
             }
@@ -115,12 +115,12 @@ public final class ComputeNodePersistService {
     }
     
     private String loadState(final String instanceId) {
-        return repository.query(NodePathGenerator.generatePath(new 
StatusNodePath(instanceId), false));
+        return repository.query(NodePathGenerator.toPath(new 
StatusNodePath(instanceId), false));
     }
     
     @SuppressWarnings("unchecked")
     private Collection<String> loadLabels(final String instanceId) {
-        String yamlContent = 
repository.query(NodePathGenerator.generatePath(new LabelNodePath(instanceId), 
false));
+        String yamlContent = repository.query(NodePathGenerator.toPath(new 
LabelNodePath(instanceId), false));
         return Strings.isNullOrEmpty(yamlContent) ? Collections.emptyList() : 
YamlEngine.unmarshal(yamlContent, Collection.class);
     }
     
@@ -131,7 +131,7 @@ public final class ComputeNodePersistService {
      * @param instanceState instance state
      */
     public void updateState(final String instanceId, final InstanceState 
instanceState) {
-        repository.persistEphemeral(NodePathGenerator.generatePath(new 
StatusNodePath(instanceId), false), instanceState.name());
+        repository.persistEphemeral(NodePathGenerator.toPath(new 
StatusNodePath(instanceId), false), instanceState.name());
     }
     
     /**
@@ -141,7 +141,7 @@ public final class ComputeNodePersistService {
      * @param labels instance labels
      */
     public void persistLabels(final String instanceId, final 
Collection<String> labels) {
-        repository.persistEphemeral(NodePathGenerator.generatePath(new 
LabelNodePath(instanceId), false), YamlEngine.marshal(labels));
+        repository.persistEphemeral(NodePathGenerator.toPath(new 
LabelNodePath(instanceId), false), YamlEngine.marshal(labels));
     }
     
     /**
@@ -151,7 +151,7 @@ public final class ComputeNodePersistService {
      * @param workerId worker ID
      */
     public void persistWorkerId(final String instanceId, final int workerId) {
-        repository.persistEphemeral(NodePathGenerator.generatePath(new 
ComputeNodeWorkerIDNodePath(instanceId), false), String.valueOf(workerId));
+        repository.persistEphemeral(NodePathGenerator.toPath(new 
ComputeNodeWorkerIDNodePath(instanceId), false), String.valueOf(workerId));
     }
     
     /**
@@ -162,7 +162,7 @@ public final class ComputeNodePersistService {
      */
     public Optional<Integer> loadWorkerId(final String instanceId) {
         try {
-            String workerId = 
repository.query(NodePathGenerator.generatePath(new 
ComputeNodeWorkerIDNodePath(instanceId), false));
+            String workerId = repository.query(NodePathGenerator.toPath(new 
ComputeNodeWorkerIDNodePath(instanceId), false));
             return Strings.isNullOrEmpty(workerId) ? Optional.empty() : 
Optional.of(Integer.valueOf(workerId));
         } catch (final NumberFormatException ex) {
             log.error("Invalid worker id for instance: {}", instanceId);
@@ -176,8 +176,8 @@ public final class ComputeNodePersistService {
      * @return assigned worker IDs
      */
     public Collection<Integer> getAssignedWorkerIds() {
-        Collection<String> instanceIds = 
repository.getChildrenKeys(NodePathGenerator.generatePath(new 
ComputeNodeWorkerIDNodePath(null), false));
-        return instanceIds.stream().map(each -> 
repository.query(NodePathGenerator.generatePath(new 
ComputeNodeWorkerIDNodePath(each), false)))
+        Collection<String> instanceIds = 
repository.getChildrenKeys(NodePathGenerator.toPath(new 
ComputeNodeWorkerIDNodePath(null), false));
+        return instanceIds.stream().map(each -> 
repository.query(NodePathGenerator.toPath(new 
ComputeNodeWorkerIDNodePath(each), false)))
                 
.filter(Objects::nonNull).map(Integer::parseInt).collect(Collectors.toSet());
     }
 }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/state/node/QualifiedDataSourceStatePersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/state/node/QualifiedDataSourceStatePersistService.java
index e1e15fe942f..73715a31ce8 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/state/node/QualifiedDataSourceStatePersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/state/node/QualifiedDataSourceStatePersistService.java
@@ -47,10 +47,10 @@ public final class QualifiedDataSourceStatePersistService {
      * @return loaded qualified data source states
      */
     public Map<String, QualifiedDataSourceState> load() {
-        Collection<String> qualifiedDataSourceNodes = 
repository.getChildrenKeys(NodePathGenerator.generatePath(new 
QualifiedDataSourceNodePath(null), false));
+        Collection<String> qualifiedDataSourceNodes = 
repository.getChildrenKeys(NodePathGenerator.toPath(new 
QualifiedDataSourceNodePath(null), false));
         Map<String, QualifiedDataSourceState> result = new 
HashMap<>(qualifiedDataSourceNodes.size(), 1F);
         qualifiedDataSourceNodes.forEach(each -> {
-            String yamlContent = 
repository.query(NodePathGenerator.generatePath(new 
QualifiedDataSourceNodePath(new QualifiedDataSource(each)), false));
+            String yamlContent = repository.query(NodePathGenerator.toPath(new 
QualifiedDataSourceNodePath(new QualifiedDataSource(each)), false));
             if (!Strings.isNullOrEmpty(yamlContent)) {
                 result.put(each, new 
YamlQualifiedDataSourceStateSwapper().swapToObject(YamlEngine.unmarshal(yamlContent,
 YamlQualifiedDataSourceState.class)));
             }
@@ -68,7 +68,7 @@ public final class QualifiedDataSourceStatePersistService {
      */
     public void update(final String databaseName, final String groupName, 
final String storageUnitName, final DataSourceState dataSourceState) {
         QualifiedDataSourceState status = new 
QualifiedDataSourceState(dataSourceState);
-        repository.persist(NodePathGenerator.generatePath(new 
QualifiedDataSourceNodePath(new QualifiedDataSource(databaseName, groupName, 
storageUnitName)), false),
+        repository.persist(NodePathGenerator.toPath(new 
QualifiedDataSourceNodePath(new QualifiedDataSource(databaseName, groupName, 
storageUnitName)), false),
                 YamlEngine.marshal(new 
YamlQualifiedDataSourceStateSwapper().swapToYamlConfiguration(status)));
     }
 }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/NodePathGenerator.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/NodePathGenerator.java
index cc7c4ba2c04..92bb7c92fb2 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/NodePathGenerator.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/NodePathGenerator.java
@@ -19,11 +19,11 @@ package org.apache.shardingsphere.mode.node.path;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.infra.util.reflection.ReflectionUtils;
 import org.apache.shardingsphere.mode.node.path.version.VersionNodePath;
 
-import java.util.Collection;
 import java.util.LinkedList;
+import java.util.Objects;
+import java.util.Optional;
 
 /**
  * Node path generator.
@@ -31,50 +31,45 @@ import java.util.LinkedList;
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class NodePathGenerator {
     
+    private static final String PATH_DELIMITER = "/";
+    
     /**
-     * Generate path.
+     * Generate to path.
      *
      * @param nodePath node path
-     * @param trimEmptyNode whether to trim empty node
+     * @param trimEmptyNode null variable should trim parent node if true
      * @return path
      */
-    public static String generatePath(final NodePath nodePath, final boolean 
trimEmptyNode) {
-        LinkedList<String> result = new LinkedList<>();
-        String path = 
nodePath.getClass().getAnnotation(NodePathEntity.class).value();
-        for (String each : path.split("/")) {
-            if (each.contains("$") || each.contains(":")) {
-                Collection<String> nodeSegments = new LinkedList<>();
-                for (String eachSegment : each.split(":")) {
-                    if (eachSegment.startsWith("${") && 
eachSegment.endsWith("}")) {
-                        Object fieldValue = 
ReflectionUtils.getFieldValue(nodePath, eachSegment.substring(2, 
eachSegment.length() - 1)).orElse(null);
-                        // CHECKSTYLE:OFF
-                        if (null == fieldValue) {
-                            if (trimEmptyNode) {
-                                result.removeLast();
-                            }
-                            return String.join("/", result);
-                        }
-                        // CHECKSTYLE:ON
-                        nodeSegments.add(fieldValue.toString());
-                    } else {
-                        nodeSegments.add(each);
-                    }
-                }
-                result.add(String.join(":", nodeSegments));
-            } else {
-                result.add(each);
+    public static String toPath(final NodePath nodePath, final boolean 
trimEmptyNode) {
+        String templatePath = 
Objects.requireNonNull(nodePath.getClass().getAnnotation(NodePathEntity.class), 
"NodePathEntity annotation is missing").value();
+        LinkedList<String> nodeSegments = new LinkedList<>();
+        for (String each : templatePath.split(PATH_DELIMITER)) {
+            Optional<String> segmentLiteral = new 
NodePathSegment(each).getLiteral(nodePath);
+            if (segmentLiteral.isPresent()) {
+                nodeSegments.add(segmentLiteral.get());
+                continue;
+            }
+            if (trimEmptyNode) {
+                trimLastParentNode(nodeSegments);
             }
+            break;
+        }
+        return String.join(PATH_DELIMITER, nodeSegments);
+    }
+    
+    private static void trimLastParentNode(final LinkedList<String> 
nodeSegments) {
+        if (!nodeSegments.isEmpty()) {
+            nodeSegments.removeLast();
         }
-        return String.join("/", result);
     }
     
     /**
-     * Generate version node path.
+     * Generate to version node path.
      *
      * @param nodePath node path
      * @return version node path
      */
-    public static VersionNodePath generateVersionPath(final NodePath nodePath) 
{
-        return new VersionNodePath(generatePath(nodePath, false));
+    public static VersionNodePath toVersionPath(final NodePath nodePath) {
+        return new VersionNodePath(toPath(nodePath, false));
     }
 }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/compute/process/KillProcessTriggerNodePath.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/NodePathSegment.java
similarity index 52%
copy from 
mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/compute/process/KillProcessTriggerNodePath.java
copy to 
mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/NodePathSegment.java
index 706f89a2a8a..f0295489ade 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/compute/process/KillProcessTriggerNodePath.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/NodePathSegment.java
@@ -15,22 +15,33 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.mode.node.path.node.compute.process;
+package org.apache.shardingsphere.mode.node.path;
 
-import lombok.Getter;
 import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.mode.node.path.NodePath;
-import org.apache.shardingsphere.mode.node.path.NodePathEntity;
+import org.apache.shardingsphere.infra.util.reflection.ReflectionUtils;
+
+import java.util.Optional;
 
 /**
- * Kill process trigger node path.
+ * Node path segment.
  */
-@NodePathEntity("/nodes/compute_nodes/kill_process_trigger/${instanceId}:${processId}")
 @RequiredArgsConstructor
-@Getter
-public final class KillProcessTriggerNodePath implements NodePath {
+public final class NodePathSegment {
     
-    private final String instanceId;
+    private final String input;
     
-    private final String processId;
+    /**
+     * Get segment literal.
+     *
+     * @param nodePath node path
+     * @return segment literal
+     */
+    public Optional<String> getLiteral(final NodePath nodePath) {
+        Optional<String> variableName = new 
NodePathVariable(input).findVariableName();
+        if (variableName.isPresent()) {
+            Object variableValue = ReflectionUtils.getFieldValue(nodePath, 
variableName.get()).orElse(null);
+            return null == variableValue ? Optional.empty() : 
Optional.of(variableValue.toString());
+        }
+        return Optional.of(input);
+    }
 }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/compute/process/KillProcessTriggerNodePath.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/NodePathVariable.java
similarity index 57%
copy from 
mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/compute/process/KillProcessTriggerNodePath.java
copy to 
mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/NodePathVariable.java
index 706f89a2a8a..6ada11f36ed 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/compute/process/KillProcessTriggerNodePath.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/NodePathVariable.java
@@ -15,22 +15,34 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.mode.node.path.node.compute.process;
+package org.apache.shardingsphere.mode.node.path;
 
-import lombok.Getter;
 import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.mode.node.path.NodePath;
-import org.apache.shardingsphere.mode.node.path.NodePathEntity;
+
+import java.util.Optional;
 
 /**
- * Kill process trigger node path.
+ * Node path variable.
  */
-@NodePathEntity("/nodes/compute_nodes/kill_process_trigger/${instanceId}:${processId}")
 @RequiredArgsConstructor
-@Getter
-public final class KillProcessTriggerNodePath implements NodePath {
+public final class NodePathVariable {
+    
+    private static final String PREFIX = "${";
+    
+    private static final String SUFFIX = "}";
+    
+    private final String input;
     
-    private final String instanceId;
+    /**
+     * Find variable name.
+     *
+     * @return found variable name
+     */
+    public Optional<String> findVariableName() {
+        return isVariable() ? Optional.of(input.substring(PREFIX.length(), 
input.length() - SUFFIX.length())) : Optional.empty();
+    }
     
-    private final String processId;
+    private boolean isVariable() {
+        return input.startsWith(PREFIX) && input.endsWith(SUFFIX);
+    }
 }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalPropertiesNodePathParser.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalPropertiesNodePathParser.java
index 60117897dbe..f8871ced145 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalPropertiesNodePathParser.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalPropertiesNodePathParser.java
@@ -28,7 +28,7 @@ import 
org.apache.shardingsphere.mode.node.path.version.VersionNodePathParser;
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class GlobalPropertiesNodePathParser {
     
-    private static final VersionNodePathParser VERSION_PARSER = new 
VersionNodePathParser(NodePathGenerator.generatePath(new 
GlobalPropertiesNodePath(), false));
+    private static final VersionNodePathParser VERSION_PARSER = new 
VersionNodePathParser(NodePathGenerator.toPath(new GlobalPropertiesNodePath(), 
false));
     
     /**
      * Get properties version node path parser.
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalRuleNodePathParser.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalRuleNodePathParser.java
index 7eb10686230..b83231746ba 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalRuleNodePathParser.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalRuleNodePathParser.java
@@ -29,7 +29,7 @@ import 
org.apache.shardingsphere.mode.node.path.version.VersionNodePathParser;
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class GlobalRuleNodePathParser {
     
-    private static final VersionNodePathParser PARSER = new 
VersionNodePathParser(NodePathGenerator.generatePath(new 
GlobalRuleNodePath(NodePathPattern.IDENTIFIER), false));
+    private static final VersionNodePathParser PARSER = new 
VersionNodePathParser(NodePathGenerator.toPath(new 
GlobalRuleNodePath(NodePathPattern.IDENTIFIER), false));
     
     /**
      * Get global rule version node path parser.
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseNodePathParser.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseNodePathParser.java
index 67744d0b5e9..58e8477721c 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseNodePathParser.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseNodePathParser.java
@@ -34,7 +34,7 @@ import java.util.regex.Pattern;
 public final class DatabaseNodePathParser {
     
     private static final Pattern DATABASE_PATTERN = Pattern.compile(
-            NodePathGenerator.generatePath(new 
TableMetadataNodePath(NodePathPattern.IDENTIFIER, null, null), true) + "?", 
Pattern.CASE_INSENSITIVE);
+            NodePathGenerator.toPath(new 
TableMetadataNodePath(NodePathPattern.IDENTIFIER, null, null), true) + "?", 
Pattern.CASE_INSENSITIVE);
     
     /**
      * Find database name.
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/SchemaMetaDataNodePathParser.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/SchemaMetaDataNodePathParser.java
index 1001d6047aa..77dcaaf721a 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/SchemaMetaDataNodePathParser.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/SchemaMetaDataNodePathParser.java
@@ -42,7 +42,7 @@ public final class SchemaMetaDataNodePathParser {
     public static Optional<String> findSchemaName(final String path, final 
boolean containsChildPath) {
         String endPattern = containsChildPath ? "?" : "$";
         Pattern pattern = Pattern.compile(
-                NodePathGenerator.generatePath(new 
TableMetadataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
null), true) + endPattern, Pattern.CASE_INSENSITIVE);
+                NodePathGenerator.toPath(new 
TableMetadataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
null), true) + endPattern, Pattern.CASE_INSENSITIVE);
         Matcher matcher = pattern.matcher(path);
         return matcher.find() ? Optional.of(matcher.group(2)) : 
Optional.empty();
     }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableMetaDataNodePathParser.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableMetaDataNodePathParser.java
index 5710b6e7e5e..d25090ff72d 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableMetaDataNodePathParser.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableMetaDataNodePathParser.java
@@ -33,11 +33,11 @@ import java.util.regex.Pattern;
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class TableMetaDataNodePathParser {
     
-    private static final Pattern PATTERN = 
Pattern.compile(NodePathGenerator.generatePath(
+    private static final Pattern PATTERN = 
Pattern.compile(NodePathGenerator.toPath(
             new TableMetadataNodePath(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER), false) + "$", 
Pattern.CASE_INSENSITIVE);
     
     private static final VersionNodePathParser VERSION_PARSER = new 
VersionNodePathParser(
-            NodePathGenerator.generatePath(new 
TableMetadataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER), false));
+            NodePathGenerator.toPath(new 
TableMetadataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER), false));
     
     /**
      * Find table name.
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewMetaDataNodePathParser.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewMetaDataNodePathParser.java
index e04bc005236..8c46468ecd2 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewMetaDataNodePathParser.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewMetaDataNodePathParser.java
@@ -34,10 +34,10 @@ import java.util.regex.Pattern;
 public final class ViewMetaDataNodePathParser {
     
     private static final Pattern PATTERN = Pattern.compile(
-            NodePathGenerator.generatePath(new 
ViewMetadataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER), false) + "$", Pattern.CASE_INSENSITIVE);
+            NodePathGenerator.toPath(new 
ViewMetadataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER), false) + "$", Pattern.CASE_INSENSITIVE);
     
     private static final VersionNodePathParser VERSION_PARSER = new 
VersionNodePathParser(
-            NodePathGenerator.generatePath(new 
ViewMetadataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER), false));
+            NodePathGenerator.toPath(new 
ViewMetadataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER), false));
     
     /**
      * Get view name.
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/DataSourceNodePathParser.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/DataSourceNodePathParser.java
index 4ce68f6240c..be94714d35e 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/DataSourceNodePathParser.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/DataSourceNodePathParser.java
@@ -30,7 +30,7 @@ import java.util.regex.Pattern;
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class DataSourceNodePathParser {
     
-    private static final Pattern PATTERN = 
Pattern.compile(NodePathGenerator.generatePath(new 
StorageUnitNodePath(NodePathPattern.IDENTIFIER, null), true) + "?", 
Pattern.CASE_INSENSITIVE);
+    private static final Pattern PATTERN = 
Pattern.compile(NodePathGenerator.toPath(new 
StorageUnitNodePath(NodePathPattern.IDENTIFIER, null), true) + "?", 
Pattern.CASE_INSENSITIVE);
     
     /**
      * Is data source path.
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathParser.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathParser.java
index 3b5e39eb515..838bacb0a4b 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathParser.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathParser.java
@@ -34,10 +34,10 @@ import java.util.regex.Pattern;
 public final class StorageNodeNodePathParser {
     
     private static final Pattern PATTERN = Pattern.compile(
-            NodePathGenerator.generatePath(new 
StorageNodeNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER), 
false) + "$", Pattern.CASE_INSENSITIVE);
+            NodePathGenerator.toPath(new 
StorageNodeNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER), 
false) + "$", Pattern.CASE_INSENSITIVE);
     
     private static final VersionNodePathParser VERSION_PARSER = new 
VersionNodePathParser(
-            NodePathGenerator.generatePath(new 
StorageNodeNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER), 
false));
+            NodePathGenerator.toPath(new 
StorageNodeNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER), 
false));
     
     /**
      * Find storage node name.
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathParser.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathParser.java
index 3f65846de85..33bfa386ed3 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathParser.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathParser.java
@@ -34,10 +34,10 @@ import java.util.regex.Pattern;
 public final class StorageUnitNodePathParser {
     
     private static final Pattern PATTERN = Pattern.compile(
-            NodePathGenerator.generatePath(new 
StorageUnitNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER), 
false) + "$", Pattern.CASE_INSENSITIVE);
+            NodePathGenerator.toPath(new 
StorageUnitNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER), 
false) + "$", Pattern.CASE_INSENSITIVE);
     
     private static final VersionNodePathParser VERSION_PARSER = new 
VersionNodePathParser(
-            NodePathGenerator.generatePath(new 
StorageUnitNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER), 
false));
+            NodePathGenerator.toPath(new 
StorageUnitNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER), 
false));
     
     /**
      * Find storage unit name.
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/compute/process/KillProcessTriggerNodePath.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/compute/process/InstanceProcessNodeValue.java
similarity index 75%
copy from 
mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/compute/process/KillProcessTriggerNodePath.java
copy to 
mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/compute/process/InstanceProcessNodeValue.java
index 706f89a2a8a..1f944ae1e76 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/compute/process/KillProcessTriggerNodePath.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/compute/process/InstanceProcessNodeValue.java
@@ -17,20 +17,20 @@
 
 package org.apache.shardingsphere.mode.node.path.node.compute.process;
 
-import lombok.Getter;
 import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.mode.node.path.NodePath;
-import org.apache.shardingsphere.mode.node.path.NodePathEntity;
 
 /**
- * Kill process trigger node path.
+ * Instance process node value.
  */
-@NodePathEntity("/nodes/compute_nodes/kill_process_trigger/${instanceId}:${processId}")
 @RequiredArgsConstructor
-@Getter
-public final class KillProcessTriggerNodePath implements NodePath {
+public final class InstanceProcessNodeValue {
     
     private final String instanceId;
     
     private final String processId;
+    
+    @Override
+    public String toString() {
+        return String.join(":", instanceId, processId);
+    }
 }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/compute/process/KillProcessTriggerNodePath.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/compute/process/KillProcessTriggerNodePath.java
index 706f89a2a8a..ae5415aea37 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/compute/process/KillProcessTriggerNodePath.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/compute/process/KillProcessTriggerNodePath.java
@@ -25,12 +25,10 @@ import 
org.apache.shardingsphere.mode.node.path.NodePathEntity;
 /**
  * Kill process trigger node path.
  */
-@NodePathEntity("/nodes/compute_nodes/kill_process_trigger/${instanceId}:${processId}")
+@NodePathEntity("/nodes/compute_nodes/kill_process_trigger/${instanceProcess}")
 @RequiredArgsConstructor
 @Getter
 public final class KillProcessTriggerNodePath implements NodePath {
     
-    private final String instanceId;
-    
-    private final String processId;
+    private final InstanceProcessNodeValue instanceProcess;
 }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/compute/process/ShowProcessListTriggerNodePath.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/compute/process/ShowProcessListTriggerNodePath.java
index 11780ab3c92..bc9d9c3b63b 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/compute/process/ShowProcessListTriggerNodePath.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/compute/process/ShowProcessListTriggerNodePath.java
@@ -25,12 +25,10 @@ import 
org.apache.shardingsphere.mode.node.path.NodePathEntity;
 /**
  * Show process list trigger node path.
  */
-@NodePathEntity("/nodes/compute_nodes/show_process_list_trigger/${instanceId}:${taskId}")
+@NodePathEntity("/nodes/compute_nodes/show_process_list_trigger/${instanceProcess}")
 @RequiredArgsConstructor
 @Getter
 public final class ShowProcessListTriggerNodePath implements NodePath {
     
-    private final String instanceId;
-    
-    private final String taskId;
+    private final InstanceProcessNodeValue instanceProcess;
 }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/storage/QualifiedDataSourceNodePathParser.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/storage/QualifiedDataSourceNodePathParser.java
index ceb12c630e4..1698e7ab0d2 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/storage/QualifiedDataSourceNodePathParser.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/storage/QualifiedDataSourceNodePathParser.java
@@ -42,7 +42,7 @@ public final class QualifiedDataSourceNodePathParser {
      */
     public static Optional<QualifiedDataSource> findQualifiedDataSource(final 
String qualifiedDataSourcePath) {
         Pattern pattern = Pattern.compile(
-                String.join("/", NodePathGenerator.generatePath(new 
QualifiedDataSourceNodePath(null), false), QUALIFIED_DATA_SOURCE_PATTERN + 
"$"), Pattern.CASE_INSENSITIVE);
+                String.join("/", NodePathGenerator.toPath(new 
QualifiedDataSourceNodePath(null), false), QUALIFIED_DATA_SOURCE_PATTERN + 
"$"), Pattern.CASE_INSENSITIVE);
         Matcher matcher = pattern.matcher(qualifiedDataSourcePath);
         return matcher.find() ? Optional.of(new 
QualifiedDataSource(matcher.group(1))) : Optional.empty();
     }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/state/DatabaseListenerCoordinatorNodePathParser.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/state/DatabaseListenerCoordinatorNodePathParser.java
index a042af609e6..f2c03c63d03 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/state/DatabaseListenerCoordinatorNodePathParser.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/state/DatabaseListenerCoordinatorNodePathParser.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.mode.node.path.state;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.mode.node.path.NodePathGenerator;
+import org.apache.shardingsphere.mode.node.path.NodePathPattern;
 
 import java.util.Optional;
 import java.util.regex.Matcher;
@@ -31,8 +32,6 @@ import java.util.regex.Pattern;
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class DatabaseListenerCoordinatorNodePathParser {
     
-    private static final String DATABASE_PATTERN = "(\\w+)";
-    
     /**
      * Find database name by database listener coordinator node path.
      *
@@ -40,7 +39,7 @@ public final class DatabaseListenerCoordinatorNodePathParser {
      * @return found database name
      */
     public static Optional<String> findDatabaseName(final String 
databaseListenerCoordinatorNodePath) {
-        Pattern pattern = Pattern.compile(NodePathGenerator.generatePath(new 
DatabaseListenerCoordinatorNodePath(DATABASE_PATTERN), false) + "$", 
Pattern.CASE_INSENSITIVE);
+        Pattern pattern = Pattern.compile(NodePathGenerator.toPath(new 
DatabaseListenerCoordinatorNodePath(NodePathPattern.IDENTIFIER), false) + "$", 
Pattern.CASE_INSENSITIVE);
         Matcher matcher = pattern.matcher(databaseListenerCoordinatorNodePath);
         return matcher.find() ? Optional.of(matcher.group(1)) : 
Optional.empty();
     }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsNodePathParser.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsNodePathParser.java
index 80d7ff4e277..ec96fa77221 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsNodePathParser.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsNodePathParser.java
@@ -43,7 +43,7 @@ public final class StatisticsNodePathParser {
      */
     public static Optional<String> findDatabaseName(final String path, final 
boolean containsChildPath) {
         String endPattern = containsChildPath ? "?" : "$";
-        Pattern pattern = Pattern.compile(NodePathGenerator.generatePath(new 
StatisticsDataNodePath(NodePathPattern.IDENTIFIER, null, null, null), true) + 
endPattern, Pattern.CASE_INSENSITIVE);
+        Pattern pattern = Pattern.compile(NodePathGenerator.toPath(new 
StatisticsDataNodePath(NodePathPattern.IDENTIFIER, null, null, null), true) + 
endPattern, Pattern.CASE_INSENSITIVE);
         Matcher matcher = pattern.matcher(path);
         return matcher.find() ? Optional.of(matcher.group(1)) : 
Optional.empty();
     }
@@ -58,7 +58,7 @@ public final class StatisticsNodePathParser {
     public static Optional<String> findSchemaName(final String path, final 
boolean containsChildPath) {
         String endPattern = containsChildPath ? "?" : "$";
         Pattern pattern = Pattern.compile(
-                NodePathGenerator.generatePath(new 
StatisticsDataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
null, null), true) + endPattern, Pattern.CASE_INSENSITIVE);
+                NodePathGenerator.toPath(new 
StatisticsDataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
null, null), true) + endPattern, Pattern.CASE_INSENSITIVE);
         Matcher matcher = pattern.matcher(path);
         return matcher.find() ? Optional.of(matcher.group(2)) : 
Optional.empty();
     }
@@ -73,7 +73,7 @@ public final class StatisticsNodePathParser {
     public static Optional<String> findTableName(final String path, final 
boolean containsChildPath) {
         String endPattern = containsChildPath ? "?" : "$";
         Pattern pattern = Pattern.compile(
-                NodePathGenerator.generatePath(new 
StatisticsDataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER, null), false) + endPattern,
+                NodePathGenerator.toPath(new 
StatisticsDataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER, null), false) + endPattern,
                 Pattern.CASE_INSENSITIVE);
         Matcher matcher = pattern.matcher(path);
         return matcher.find() ? Optional.of(matcher.group(3)) : 
Optional.empty();
@@ -86,7 +86,7 @@ public final class StatisticsNodePathParser {
      * @return found row unique key
      */
     public static Optional<String> findRowUniqueKey(final String path) {
-        Pattern pattern = Pattern.compile(NodePathGenerator.generatePath(
+        Pattern pattern = Pattern.compile(NodePathGenerator.toPath(
                 new StatisticsDataNodePath(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, UNIQUE_KEY_PATTERN), 
false) + "$", Pattern.CASE_INSENSITIVE);
         Matcher matcher = pattern.matcher(path);
         return matcher.find() ? Optional.of(matcher.group(4)) : 
Optional.empty();
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/NodePathSegmentTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/NodePathSegmentTest.java
new file mode 100644
index 00000000000..48abb142dbc
--- /dev/null
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/NodePathSegmentTest.java
@@ -0,0 +1,54 @@
+/*
+ * 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.mode.node.path;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import org.junit.jupiter.api.Test;
+
+import java.util.Optional;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+
+class NodePathSegmentTest {
+    
+    @Test
+    void assertGetLiteralWithoutVariable() {
+        assertThat(new NodePathSegment("foo").getLiteral(new 
NodePathFixture("foo")), is(Optional.of("foo")));
+    }
+    
+    @Test
+    void assertGetLiteralWithVariable() {
+        assertThat(new NodePathSegment("${fooVariable}").getLiteral(new 
NodePathFixture("foo_value")), is(Optional.of("foo_value")));
+    }
+    
+    @Test
+    void assertGetLiteralWithNullVariable() {
+        assertFalse(new NodePathSegment("${fooVariable}").getLiteral(new 
NodePathFixture(null)).isPresent());
+    }
+    
+    @NodePathEntity("/foo/${fooVariable}")
+    @RequiredArgsConstructor
+    @Getter
+    private static class NodePathFixture implements NodePath {
+        
+        private final String fooVariable;
+    }
+}
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalPropertiesNodePathTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/NodePathVariableTest.java
similarity index 56%
copy from 
mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalPropertiesNodePathTest.java
copy to 
mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/NodePathVariableTest.java
index b98725c6e44..80df22a0929 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalPropertiesNodePathTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/NodePathVariableTest.java
@@ -15,18 +15,28 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.mode.node.path.config.global;
+package org.apache.shardingsphere.mode.node.path;
 
-import org.apache.shardingsphere.mode.node.path.NodePathGenerator;
 import org.junit.jupiter.api.Test;
 
+import java.util.Optional;
+
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
-class GlobalPropertiesNodePathTest {
+class NodePathVariableTest {
+    
+    @Test
+    void assertFindVariableName() {
+        assertThat(new NodePathVariable("${foo_variable}").findVariableName(), 
is(Optional.of("foo_variable")));
+    }
     
     @Test
-    void assertGeneratePath() {
-        assertThat(NodePathGenerator.generatePath(new 
GlobalPropertiesNodePath(), false), is("/props"));
+    void assertNotFindVariableName() {
+        assertFalse(new 
NodePathVariable("${foo_variable").findVariableName().isPresent());
+        assertFalse(new 
NodePathVariable("foo_variable}").findVariableName().isPresent());
+        assertFalse(new 
NodePathVariable("$foo_variable").findVariableName().isPresent());
+        assertFalse(new 
NodePathVariable("foo_variable").findVariableName().isPresent());
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalPropertiesNodePathTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalPropertiesNodePathTest.java
index b98725c6e44..03cb36ce5df 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalPropertiesNodePathTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalPropertiesNodePathTest.java
@@ -27,6 +27,6 @@ class GlobalPropertiesNodePathTest {
     
     @Test
     void assertGeneratePath() {
-        assertThat(NodePathGenerator.generatePath(new 
GlobalPropertiesNodePath(), false), is("/props"));
+        assertThat(NodePathGenerator.toPath(new GlobalPropertiesNodePath(), 
false), is("/props"));
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalRuleNodePathTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalRuleNodePathTest.java
index 45bcbbf9c0c..a821aa7528b 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalRuleNodePathTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalRuleNodePathTest.java
@@ -27,7 +27,7 @@ class GlobalRuleNodePathTest {
     
     @Test
     void assertGeneratePath() {
-        assertThat(NodePathGenerator.generatePath(new 
GlobalRuleNodePath(null), false), is("/rules"));
-        assertThat(NodePathGenerator.generatePath(new 
GlobalRuleNodePath("foo_rule"), false), is("/rules/foo_rule"));
+        assertThat(NodePathGenerator.toPath(new GlobalRuleNodePath(null), 
false), is("/rules"));
+        assertThat(NodePathGenerator.toPath(new 
GlobalRuleNodePath("foo_rule"), false), is("/rules/foo_rule"));
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/execution/ProcessNodePathTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/execution/ProcessNodePathTest.java
index d0f41ad8fdd..649cb5c4cab 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/execution/ProcessNodePathTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/execution/ProcessNodePathTest.java
@@ -27,7 +27,7 @@ class ProcessNodePathTest {
     
     @Test
     void assertGeneratePath() {
-        assertThat(NodePathGenerator.generatePath(new 
ProcessNodePath("foo_process_id", null), false), 
is("/execution_nodes/foo_process_id"));
-        assertThat(NodePathGenerator.generatePath(new 
ProcessNodePath("foo_process_id", "foo_instance_id"), false), 
is("/execution_nodes/foo_process_id/foo_instance_id"));
+        assertThat(NodePathGenerator.toPath(new 
ProcessNodePath("foo_process_id", null), false), 
is("/execution_nodes/foo_process_id"));
+        assertThat(NodePathGenerator.toPath(new 
ProcessNodePath("foo_process_id", "foo_instance_id"), false), 
is("/execution_nodes/foo_process_id/foo_instance_id"));
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableMetadataNodePathTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableMetadataNodePathTest.java
index 84fd2cc0aea..09ff3881fbe 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableMetadataNodePathTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableMetadataNodePathTest.java
@@ -28,15 +28,15 @@ class TableMetadataNodePathTest {
     
     @Test
     void assertGeneratePath() {
-        assertThat(NodePathGenerator.generatePath(new 
TableMetadataNodePath("foo_db", null, null), false), 
is("/metadata/foo_db/schemas"));
-        assertThat(NodePathGenerator.generatePath(new 
TableMetadataNodePath("foo_db", "foo_schema", null), false), 
is("/metadata/foo_db/schemas/foo_schema/tables"));
-        assertThat(NodePathGenerator.generatePath(new 
TableMetadataNodePath("foo_db", "foo_schema", null), true), 
is("/metadata/foo_db/schemas/foo_schema"));
-        assertThat(NodePathGenerator.generatePath(new 
TableMetadataNodePath("foo_db", "foo_schema", "foo_tbl"), false), 
is("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl"));
+        assertThat(NodePathGenerator.toPath(new 
TableMetadataNodePath("foo_db", null, null), false), 
is("/metadata/foo_db/schemas"));
+        assertThat(NodePathGenerator.toPath(new 
TableMetadataNodePath("foo_db", "foo_schema", null), false), 
is("/metadata/foo_db/schemas/foo_schema/tables"));
+        assertThat(NodePathGenerator.toPath(new 
TableMetadataNodePath("foo_db", "foo_schema", null), true), 
is("/metadata/foo_db/schemas/foo_schema"));
+        assertThat(NodePathGenerator.toPath(new 
TableMetadataNodePath("foo_db", "foo_schema", "foo_tbl"), false), 
is("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl"));
     }
     
     @Test
     void assertGenerateVersionPath() {
-        VersionNodePath versionNodePath = 
NodePathGenerator.generateVersionPath(new TableMetadataNodePath("foo_db", 
"foo_schema", "foo_tbl"));
+        VersionNodePath versionNodePath = NodePathGenerator.toVersionPath(new 
TableMetadataNodePath("foo_db", "foo_schema", "foo_tbl"));
         assertThat(versionNodePath.getActiveVersionPath(), 
is("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version"));
         assertThat(versionNodePath.getVersionsPath(), 
is("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/versions"));
         assertThat(versionNodePath.getVersionPath(0), 
is("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/versions/0"));
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewMetadataNodePathTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewMetadataNodePathTest.java
index 471cf89102f..2893481f48c 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewMetadataNodePathTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewMetadataNodePathTest.java
@@ -28,15 +28,15 @@ class ViewMetadataNodePathTest {
     
     @Test
     void assertGeneratePath() {
-        assertThat(NodePathGenerator.generatePath(new 
ViewMetadataNodePath("foo_db", null, null), false), 
is("/metadata/foo_db/schemas"));
-        assertThat(NodePathGenerator.generatePath(new 
ViewMetadataNodePath("foo_db", "foo_schema", null), false), 
is("/metadata/foo_db/schemas/foo_schema/views"));
-        assertThat(NodePathGenerator.generatePath(new 
ViewMetadataNodePath("foo_db", "foo_schema", null), true), 
is("/metadata/foo_db/schemas/foo_schema"));
-        assertThat(NodePathGenerator.generatePath(new 
ViewMetadataNodePath("foo_db", "foo_schema", "foo_view"), false), 
is("/metadata/foo_db/schemas/foo_schema/views/foo_view"));
+        assertThat(NodePathGenerator.toPath(new ViewMetadataNodePath("foo_db", 
null, null), false), is("/metadata/foo_db/schemas"));
+        assertThat(NodePathGenerator.toPath(new ViewMetadataNodePath("foo_db", 
"foo_schema", null), false), is("/metadata/foo_db/schemas/foo_schema/views"));
+        assertThat(NodePathGenerator.toPath(new ViewMetadataNodePath("foo_db", 
"foo_schema", null), true), is("/metadata/foo_db/schemas/foo_schema"));
+        assertThat(NodePathGenerator.toPath(new ViewMetadataNodePath("foo_db", 
"foo_schema", "foo_view"), false), 
is("/metadata/foo_db/schemas/foo_schema/views/foo_view"));
     }
     
     @Test
     void assertGenerateVersionPath() {
-        VersionNodePath versionNodePath = 
NodePathGenerator.generateVersionPath(new ViewMetadataNodePath("foo_db", 
"foo_schema", "foo_view"));
+        VersionNodePath versionNodePath = NodePathGenerator.toVersionPath(new 
ViewMetadataNodePath("foo_db", "foo_schema", "foo_view"));
         assertThat(versionNodePath.getActiveVersionPath(), 
is("/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version"));
         assertThat(versionNodePath.getVersionsPath(), 
is("/metadata/foo_db/schemas/foo_schema/views/foo_view/versions"));
         assertThat(versionNodePath.getVersionPath(0), 
is("/metadata/foo_db/schemas/foo_schema/views/foo_view/versions/0"));
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/rule/DatabaseRuleNodePathTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/rule/DatabaseRuleNodePathTest.java
index a50a976a2a8..e1c30588660 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/rule/DatabaseRuleNodePathTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/rule/DatabaseRuleNodePathTest.java
@@ -29,17 +29,17 @@ class DatabaseRuleNodePathTest {
     
     @Test
     void assertGeneratePath() {
-        assertThat(NodePathGenerator.generatePath(new 
DatabaseRuleNodePath("foo_db", null, null), false), 
is("/metadata/foo_db/rules"));
-        assertThat(NodePathGenerator.generatePath(new 
DatabaseRuleNodePath("foo_db", "foo_rule", null), false), 
is("/metadata/foo_db/rules/foo_rule"));
-        assertThat(NodePathGenerator.generatePath(new 
DatabaseRuleNodePath("foo_db", "foo_rule", new 
DatabaseRuleItem("unique_rule_item")), false),
+        assertThat(NodePathGenerator.toPath(new DatabaseRuleNodePath("foo_db", 
null, null), false), is("/metadata/foo_db/rules"));
+        assertThat(NodePathGenerator.toPath(new DatabaseRuleNodePath("foo_db", 
"foo_rule", null), false), is("/metadata/foo_db/rules/foo_rule"));
+        assertThat(NodePathGenerator.toPath(new DatabaseRuleNodePath("foo_db", 
"foo_rule", new DatabaseRuleItem("unique_rule_item")), false),
                 is("/metadata/foo_db/rules/foo_rule/unique_rule_item"));
-        assertThat(NodePathGenerator.generatePath(new 
DatabaseRuleNodePath("foo_db", "foo_rule", new 
DatabaseRuleItem("named_rule_item/item")), false),
+        assertThat(NodePathGenerator.toPath(new DatabaseRuleNodePath("foo_db", 
"foo_rule", new DatabaseRuleItem("named_rule_item/item")), false),
                 is("/metadata/foo_db/rules/foo_rule/named_rule_item/item"));
     }
     
     @Test
     void assertGenerateVersionPath() {
-        VersionNodePath versionNodePath = 
NodePathGenerator.generateVersionPath(new DatabaseRuleNodePath("foo_db", 
"foo_rule", new DatabaseRuleItem("named_rule_item/item")));
+        VersionNodePath versionNodePath = NodePathGenerator.toVersionPath(new 
DatabaseRuleNodePath("foo_db", "foo_rule", new 
DatabaseRuleItem("named_rule_item/item")));
         assertThat(versionNodePath.getActiveVersionPath(), 
is("/metadata/foo_db/rules/foo_rule/named_rule_item/item/active_version"));
         assertThat(versionNodePath.getVersionsPath(), 
is("/metadata/foo_db/rules/foo_rule/named_rule_item/item/versions"));
         assertThat(versionNodePath.getVersionPath(0), 
is("/metadata/foo_db/rules/foo_rule/named_rule_item/item/versions/0"));
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathTest.java
index 361ea957906..fccd69ba4cd 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathTest.java
@@ -27,7 +27,7 @@ class StorageNodeNodePathTest {
     
     @Test
     void assertGeneratePath() {
-        assertThat(NodePathGenerator.generatePath(new 
StorageNodeNodePath("foo_db", null), false), 
is("/metadata/foo_db/data_sources/nodes"));
-        assertThat(NodePathGenerator.generatePath(new 
StorageNodeNodePath("foo_db", "foo_storage_node"), false), 
is("/metadata/foo_db/data_sources/nodes/foo_storage_node"));
+        assertThat(NodePathGenerator.toPath(new StorageNodeNodePath("foo_db", 
null), false), is("/metadata/foo_db/data_sources/nodes"));
+        assertThat(NodePathGenerator.toPath(new StorageNodeNodePath("foo_db", 
"foo_storage_node"), false), 
is("/metadata/foo_db/data_sources/nodes/foo_storage_node"));
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathTest.java
index a35048142b8..ab6a01b3e77 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathTest.java
@@ -27,7 +27,7 @@ class StorageUnitNodePathTest {
     
     @Test
     void assertGeneratePath() {
-        assertThat(NodePathGenerator.generatePath(new 
StorageUnitNodePath("foo_db", null), false), 
is("/metadata/foo_db/data_sources/units"));
-        assertThat(NodePathGenerator.generatePath(new 
StorageUnitNodePath("foo_db", "foo_storage_unit"), false), 
is("/metadata/foo_db/data_sources/units/foo_storage_unit"));
+        assertThat(NodePathGenerator.toPath(new StorageUnitNodePath("foo_db", 
null), false), is("/metadata/foo_db/data_sources/units"));
+        assertThat(NodePathGenerator.toPath(new StorageUnitNodePath("foo_db", 
"foo_storage_unit"), false), 
is("/metadata/foo_db/data_sources/units/foo_storage_unit"));
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/label/LabelNodePathTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/label/LabelNodePathTest.java
index 80adeb3dfb7..86e7745a3dc 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/label/LabelNodePathTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/label/LabelNodePathTest.java
@@ -27,6 +27,6 @@ class LabelNodePathTest {
     
     @Test
     void assertGeneratePath() {
-        assertThat(NodePathGenerator.generatePath(new 
LabelNodePath("foo_instance_id"), false), 
is("/nodes/compute_nodes/labels/foo_instance_id"));
+        assertThat(NodePathGenerator.toPath(new 
LabelNodePath("foo_instance_id"), false), 
is("/nodes/compute_nodes/labels/foo_instance_id"));
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/process/KillProcessTriggerNodePathTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/process/KillProcessTriggerNodePathTest.java
index e5819d7e6a8..9250c89c60c 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/process/KillProcessTriggerNodePathTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/process/KillProcessTriggerNodePathTest.java
@@ -27,8 +27,8 @@ class KillProcessTriggerNodePathTest {
     
     @Test
     void assertGeneratePath() {
-        assertThat(NodePathGenerator.generatePath(new 
KillProcessTriggerNodePath(null, null), false), 
is("/nodes/compute_nodes/kill_process_trigger"));
-        assertThat(NodePathGenerator.generatePath(new 
KillProcessTriggerNodePath("foo_instance_id", "foo_process_id"), false),
+        assertThat(NodePathGenerator.toPath(new 
KillProcessTriggerNodePath(null), false), 
is("/nodes/compute_nodes/kill_process_trigger"));
+        assertThat(NodePathGenerator.toPath(new KillProcessTriggerNodePath(new 
InstanceProcessNodeValue("foo_instance_id", "foo_process_id")), false),
                 
is("/nodes/compute_nodes/kill_process_trigger/foo_instance_id:foo_process_id"));
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/process/ShowProcessListTriggerNodePathTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/process/ShowProcessListTriggerNodePathTest.java
index d29f2741cb0..56c833cec24 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/process/ShowProcessListTriggerNodePathTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/process/ShowProcessListTriggerNodePathTest.java
@@ -27,8 +27,8 @@ class ShowProcessListTriggerNodePathTest {
     
     @Test
     void assertGeneratePath() {
-        assertThat(NodePathGenerator.generatePath(new 
ShowProcessListTriggerNodePath(null, null), false), 
is("/nodes/compute_nodes/show_process_list_trigger"));
-        assertThat(NodePathGenerator.generatePath(new 
ShowProcessListTriggerNodePath("foo_instance_id", "foo_process_id"), false),
+        assertThat(NodePathGenerator.toPath(new 
ShowProcessListTriggerNodePath(null), false), 
is("/nodes/compute_nodes/show_process_list_trigger"));
+        assertThat(NodePathGenerator.toPath(new 
ShowProcessListTriggerNodePath(new InstanceProcessNodeValue("foo_instance_id", 
"foo_process_id")), false),
                 
is("/nodes/compute_nodes/show_process_list_trigger/foo_instance_id:foo_process_id"));
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/status/OnlineNodePathTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/status/OnlineNodePathTest.java
index 99c8b798607..245fdf8591a 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/status/OnlineNodePathTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/status/OnlineNodePathTest.java
@@ -28,8 +28,8 @@ class OnlineNodePathTest {
     
     @Test
     void assertGeneratePath() {
-        assertThat(NodePathGenerator.generatePath(new OnlineNodePath(null, 
null), false), is("/nodes/compute_nodes/online"));
-        assertThat(NodePathGenerator.generatePath(new 
OnlineNodePath(InstanceType.JDBC, null), false), 
is("/nodes/compute_nodes/online/jdbc"));
-        assertThat(NodePathGenerator.generatePath(new 
OnlineNodePath(InstanceType.PROXY, "foo_instance_id"), false), 
is("/nodes/compute_nodes/online/proxy/foo_instance_id"));
+        assertThat(NodePathGenerator.toPath(new OnlineNodePath(null, null), 
false), is("/nodes/compute_nodes/online"));
+        assertThat(NodePathGenerator.toPath(new 
OnlineNodePath(InstanceType.JDBC, null), false), 
is("/nodes/compute_nodes/online/jdbc"));
+        assertThat(NodePathGenerator.toPath(new 
OnlineNodePath(InstanceType.PROXY, "foo_instance_id"), false), 
is("/nodes/compute_nodes/online/proxy/foo_instance_id"));
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/status/StatusNodePathTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/status/StatusNodePathTest.java
index e99d1d98551..2f71d11a0c2 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/status/StatusNodePathTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/status/StatusNodePathTest.java
@@ -27,7 +27,7 @@ class StatusNodePathTest {
     
     @Test
     void assertGeneratePath() {
-        assertThat(NodePathGenerator.generatePath(new StatusNodePath(null), 
false), is("/nodes/compute_nodes/status"));
-        assertThat(NodePathGenerator.generatePath(new 
StatusNodePath("foo_instance_id"), false), 
is("/nodes/compute_nodes/status/foo_instance_id"));
+        assertThat(NodePathGenerator.toPath(new StatusNodePath(null), false), 
is("/nodes/compute_nodes/status"));
+        assertThat(NodePathGenerator.toPath(new 
StatusNodePath("foo_instance_id"), false), 
is("/nodes/compute_nodes/status/foo_instance_id"));
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/workerid/ComputeNodeWorkerIDNodePathTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/workerid/ComputeNodeWorkerIDNodePathTest.java
index 77588618530..84a111b1a9c 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/workerid/ComputeNodeWorkerIDNodePathTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/workerid/ComputeNodeWorkerIDNodePathTest.java
@@ -27,6 +27,6 @@ class ComputeNodeWorkerIDNodePathTest {
     
     @Test
     void assertGeneratePath() {
-        assertThat(NodePathGenerator.generatePath(new 
ComputeNodeWorkerIDNodePath("foo_instance_id"), false), 
is("/nodes/compute_nodes/worker_id/foo_instance_id"));
+        assertThat(NodePathGenerator.toPath(new 
ComputeNodeWorkerIDNodePath("foo_instance_id"), false), 
is("/nodes/compute_nodes/worker_id/foo_instance_id"));
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/storage/QualifiedDataSourceNodePathTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/storage/QualifiedDataSourceNodePathTest.java
index 5b188b8db5e..d1e82b0b3e5 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/storage/QualifiedDataSourceNodePathTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/storage/QualifiedDataSourceNodePathTest.java
@@ -28,7 +28,7 @@ class QualifiedDataSourceNodePathTest {
     
     @Test
     void assertGeneratePath() {
-        assertThat(NodePathGenerator.generatePath(new 
QualifiedDataSourceNodePath(new 
QualifiedDataSource("foo_db.foo_group.foo_ds")), false),
+        assertThat(NodePathGenerator.toPath(new 
QualifiedDataSourceNodePath(new 
QualifiedDataSource("foo_db.foo_group.foo_ds")), false),
                 is("/nodes/qualified_data_sources/foo_db.foo_group.foo_ds"));
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/reservation/WorkerIDReservationNodePathTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/reservation/WorkerIDReservationNodePathTest.java
index 991a8742a35..4c3db671db5 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/reservation/WorkerIDReservationNodePathTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/reservation/WorkerIDReservationNodePathTest.java
@@ -27,7 +27,7 @@ class WorkerIDReservationNodePathTest {
     
     @Test
     void assertGeneratePath() {
-        assertThat(NodePathGenerator.generatePath(new 
WorkerIDReservationNodePath(null), false), is("/reservation/worker_id"));
-        assertThat(NodePathGenerator.generatePath(new 
WorkerIDReservationNodePath(1), false), is("/reservation/worker_id/1"));
+        assertThat(NodePathGenerator.toPath(new 
WorkerIDReservationNodePath(null), false), is("/reservation/worker_id"));
+        assertThat(NodePathGenerator.toPath(new 
WorkerIDReservationNodePath(1), false), is("/reservation/worker_id/1"));
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/state/ClusterNodePathTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/state/ClusterNodePathTest.java
index 1ffbcc2b40a..77eae06cff9 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/state/ClusterNodePathTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/state/ClusterNodePathTest.java
@@ -27,6 +27,6 @@ class ClusterNodePathTest {
     
     @Test
     void assertGeneratePath() {
-        assertThat(NodePathGenerator.generatePath(new ClusterNodePath(), 
false), is("/states/cluster_state"));
+        assertThat(NodePathGenerator.toPath(new ClusterNodePath(), false), 
is("/states/cluster_state"));
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/state/DatabaseListenerCoordinatorNodePathTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/state/DatabaseListenerCoordinatorNodePathTest.java
index 49bc1a14dd0..6ac018582c5 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/state/DatabaseListenerCoordinatorNodePathTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/state/DatabaseListenerCoordinatorNodePathTest.java
@@ -27,7 +27,7 @@ class DatabaseListenerCoordinatorNodePathTest {
     
     @Test
     void assertGeneratePath() {
-        assertThat(NodePathGenerator.generatePath(new 
DatabaseListenerCoordinatorNodePath(null), false), 
is("/states/database_listener_coordinator"));
-        assertThat(NodePathGenerator.generatePath(new 
DatabaseListenerCoordinatorNodePath("foo_db"), false), 
is("/states/database_listener_coordinator/foo_db"));
+        assertThat(NodePathGenerator.toPath(new 
DatabaseListenerCoordinatorNodePath(null), false), 
is("/states/database_listener_coordinator"));
+        assertThat(NodePathGenerator.toPath(new 
DatabaseListenerCoordinatorNodePath("foo_db"), false), 
is("/states/database_listener_coordinator/foo_db"));
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsDataNodePathTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsDataNodePathTest.java
index ede711e444f..8a4bcf626f5 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsDataNodePathTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsDataNodePathTest.java
@@ -27,14 +27,14 @@ class StatisticsDataNodePathTest {
     
     @Test
     void assertGeneratePath() {
-        assertThat(NodePathGenerator.generatePath(new 
StatisticsDataNodePath(null, null, null, null), false), 
is("/statistics/databases"));
-        assertThat(NodePathGenerator.generatePath(new 
StatisticsDataNodePath("foo_db", null, null, null), true), 
is("/statistics/databases/foo_db"));
-        assertThat(NodePathGenerator.generatePath(new 
StatisticsDataNodePath("foo_db", null, null, null), false), 
is("/statistics/databases/foo_db/schemas"));
-        assertThat(NodePathGenerator.generatePath(new 
StatisticsDataNodePath("foo_db", "foo_schema", null, null), true), 
is("/statistics/databases/foo_db/schemas/foo_schema"));
-        assertThat(NodePathGenerator.generatePath(new 
StatisticsDataNodePath("foo_db", "foo_schema", null, null), false), 
is("/statistics/databases/foo_db/schemas/foo_schema/tables"));
-        assertThat(NodePathGenerator.generatePath(new 
StatisticsDataNodePath("foo_db", "foo_schema", "foo_tbl", null), false),
+        assertThat(NodePathGenerator.toPath(new StatisticsDataNodePath(null, 
null, null, null), false), is("/statistics/databases"));
+        assertThat(NodePathGenerator.toPath(new 
StatisticsDataNodePath("foo_db", null, null, null), true), 
is("/statistics/databases/foo_db"));
+        assertThat(NodePathGenerator.toPath(new 
StatisticsDataNodePath("foo_db", null, null, null), false), 
is("/statistics/databases/foo_db/schemas"));
+        assertThat(NodePathGenerator.toPath(new 
StatisticsDataNodePath("foo_db", "foo_schema", null, null), true), 
is("/statistics/databases/foo_db/schemas/foo_schema"));
+        assertThat(NodePathGenerator.toPath(new 
StatisticsDataNodePath("foo_db", "foo_schema", null, null), false), 
is("/statistics/databases/foo_db/schemas/foo_schema/tables"));
+        assertThat(NodePathGenerator.toPath(new 
StatisticsDataNodePath("foo_db", "foo_schema", "foo_tbl", null), false),
                 
is("/statistics/databases/foo_db/schemas/foo_schema/tables/foo_tbl"));
-        assertThat(NodePathGenerator.generatePath(new 
StatisticsDataNodePath("foo_db", "foo_schema", "foo_tbl", "foo_key"), false),
+        assertThat(NodePathGenerator.toPath(new 
StatisticsDataNodePath("foo_db", "foo_schema", "foo_tbl", "foo_key"), false),
                 
is("/statistics/databases/foo_db/schemas/foo_schema/tables/foo_tbl/foo_key"));
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsJobNodePathTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsJobNodePathTest.java
index 698b9b764fc..9a652cb0d57 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsJobNodePathTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsJobNodePathTest.java
@@ -27,6 +27,6 @@ class StatisticsJobNodePathTest {
     
     @Test
     void assertGeneratePath() {
-        assertThat(NodePathGenerator.generatePath(new StatisticsJobNodePath(), 
false), is("/statistics/job"));
+        assertThat(NodePathGenerator.toPath(new StatisticsJobNodePath(), 
false), is("/statistics/job"));
     }
 }
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/ClusterStateChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/ClusterStateChangedHandler.java
index 97be8de0f09..b704689def9 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/ClusterStateChangedHandler.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/ClusterStateChangedHandler.java
@@ -35,7 +35,7 @@ public final class ClusterStateChangedHandler implements 
GlobalDataChangedEventH
     
     @Override
     public String getSubscribedKey() {
-        return NodePathGenerator.generatePath(new ClusterNodePath(), false);
+        return NodePathGenerator.toPath(new ClusterNodePath(), false);
     }
     
     @Override
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/ComputeNodeOnlineHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/ComputeNodeOnlineHandler.java
index 9a419c7f09b..3f043295356 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/ComputeNodeOnlineHandler.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/ComputeNodeOnlineHandler.java
@@ -44,7 +44,7 @@ public final class ComputeNodeOnlineHandler implements 
GlobalDataChangedEventHan
     
     @Override
     public String getSubscribedKey() {
-        return NodePathGenerator.generatePath(new OnlineNodePath(null, null), 
false);
+        return NodePathGenerator.toPath(new OnlineNodePath(null, null), false);
     }
     
     @Override
@@ -68,6 +68,6 @@ public final class ComputeNodeOnlineHandler implements 
GlobalDataChangedEventHan
     }
     
     private Matcher getInstanceOnlinePathMatcher(final String 
onlineInstancePath) {
-        return Pattern.compile(NodePathGenerator.generatePath(new 
OnlineNodePath(null, null), false) + "/([\\S]+)/([\\S]+)$", 
Pattern.CASE_INSENSITIVE).matcher(onlineInstancePath);
+        return Pattern.compile(NodePathGenerator.toPath(new 
OnlineNodePath(null, null), false) + "/([\\S]+)/([\\S]+)$", 
Pattern.CASE_INSENSITIVE).matcher(onlineInstancePath);
     }
 }
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/ComputeNodeStateChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/ComputeNodeStateChangedHandler.java
index 4c52018de34..513c6868007 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/ComputeNodeStateChangedHandler.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/ComputeNodeStateChangedHandler.java
@@ -57,12 +57,12 @@ public final class ComputeNodeStateChangedHandler 
implements GlobalDataChangedEv
     @SuppressWarnings("unchecked")
     private void handle(final ContextManager contextManager, final 
DataChangedEvent event, final String instanceId) {
         ComputeNodeInstanceContext computeNodeInstanceContext = 
contextManager.getComputeNodeInstanceContext();
-        if (event.getKey().equals(NodePathGenerator.generatePath(new 
StatusNodePath(instanceId), false)) && Type.DELETED != event.getType()) {
+        if (event.getKey().equals(NodePathGenerator.toPath(new 
StatusNodePath(instanceId), false)) && Type.DELETED != event.getType()) {
             computeNodeInstanceContext.updateStatus(instanceId, 
event.getValue());
-        } else if (event.getKey().equals(NodePathGenerator.generatePath(new 
LabelNodePath(instanceId), false)) && Type.DELETED != event.getType()) {
+        } else if (event.getKey().equals(NodePathGenerator.toPath(new 
LabelNodePath(instanceId), false)) && Type.DELETED != event.getType()) {
             // TODO labels may be empty
             computeNodeInstanceContext.updateLabels(instanceId, 
Strings.isNullOrEmpty(event.getValue()) ? new ArrayList<>() : 
YamlEngine.unmarshal(event.getValue(), Collection.class));
-        } else if (event.getKey().equals(NodePathGenerator.generatePath(new 
ComputeNodeWorkerIDNodePath(instanceId), false))) {
+        } else if (event.getKey().equals(NodePathGenerator.toPath(new 
ComputeNodeWorkerIDNodePath(instanceId), false))) {
             computeNodeInstanceContext.updateWorkerId(instanceId, 
Strings.isNullOrEmpty(event.getValue()) ? null : 
Integer.valueOf(event.getValue()));
         }
     }
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/DatabaseListenerChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/DatabaseListenerChangedHandler.java
index f9b126bcd4d..6b4a21721b9 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/DatabaseListenerChangedHandler.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/DatabaseListenerChangedHandler.java
@@ -42,7 +42,7 @@ public final class DatabaseListenerChangedHandler implements 
GlobalDataChangedEv
     
     @Override
     public String getSubscribedKey() {
-        return NodePathGenerator.generatePath(new 
DatabaseListenerCoordinatorNodePath(null), false);
+        return NodePathGenerator.toPath(new 
DatabaseListenerCoordinatorNodePath(null), false);
     }
     
     @Override
@@ -59,10 +59,10 @@ public final class DatabaseListenerChangedHandler 
implements GlobalDataChangedEv
     private static void handle(final ContextManager contextManager, final 
String databaseName, final ClusterDatabaseListenerCoordinatorType 
clusterDatabaseListenerCoordinatorType) {
         ClusterPersistRepository repository = (ClusterPersistRepository) 
contextManager.getPersistServiceFacade().getRepository();
         if (ClusterDatabaseListenerCoordinatorType.CREATE == 
clusterDatabaseListenerCoordinatorType) {
-            repository.watch(NodePathGenerator.generatePath(new 
TableMetadataNodePath(databaseName, null, null), true), new 
DatabaseMetaDataChangedListener(contextManager));
+            repository.watch(NodePathGenerator.toPath(new 
TableMetadataNodePath(databaseName, null, null), true), new 
DatabaseMetaDataChangedListener(contextManager));
             
contextManager.getMetaDataContextManager().getDatabaseMetaDataManager().addDatabase(databaseName);
         } else if (ClusterDatabaseListenerCoordinatorType.DROP == 
clusterDatabaseListenerCoordinatorType) {
-            repository.removeDataListener(NodePathGenerator.generatePath(new 
TableMetadataNodePath(databaseName, null, null), true));
+            repository.removeDataListener(NodePathGenerator.toPath(new 
TableMetadataNodePath(databaseName, null, null), true));
             
contextManager.getMetaDataContextManager().getDatabaseMetaDataManager().dropDatabase(databaseName);
         }
         new 
ClusterDatabaseListenerPersistCoordinator(repository).delete(databaseName);
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/GlobalRuleChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/GlobalRuleChangedHandler.java
index a9d759bb4d1..c077830ce74 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/GlobalRuleChangedHandler.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/GlobalRuleChangedHandler.java
@@ -39,7 +39,7 @@ public final class GlobalRuleChangedHandler implements 
GlobalDataChangedEventHan
     
     @Override
     public String getSubscribedKey() {
-        return NodePathGenerator.generatePath(new GlobalRuleNodePath(null), 
false);
+        return NodePathGenerator.toPath(new GlobalRuleNodePath(null), false);
     }
     
     @Override
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/KillProcessHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/KillProcessHandler.java
index 1148d4579e3..4fa74ddc993 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/KillProcessHandler.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/KillProcessHandler.java
@@ -41,7 +41,7 @@ public final class KillProcessHandler implements 
GlobalDataChangedEventHandler {
     
     @Override
     public String getSubscribedKey() {
-        return NodePathGenerator.generatePath(new 
KillProcessTriggerNodePath(null, null), false);
+        return NodePathGenerator.toPath(new KillProcessTriggerNodePath(null), 
false);
     }
     
     @Override
@@ -73,6 +73,6 @@ public final class KillProcessHandler implements 
GlobalDataChangedEventHandler {
     }
     
     private Matcher getKillProcessTriggerMatcher(final DataChangedEvent event) 
{
-        return Pattern.compile(NodePathGenerator.generatePath(new 
KillProcessTriggerNodePath(null, null), false) + "/([\\S]+):([\\S]+)$", 
Pattern.CASE_INSENSITIVE).matcher(event.getKey());
+        return Pattern.compile(NodePathGenerator.toPath(new 
KillProcessTriggerNodePath(null), false) + "/([\\S]+):([\\S]+)$", 
Pattern.CASE_INSENSITIVE).matcher(event.getKey());
     }
 }
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/PropertiesChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/PropertiesChangedHandler.java
index 3978421f89c..ed05e5f01cd 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/PropertiesChangedHandler.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/PropertiesChangedHandler.java
@@ -36,7 +36,7 @@ public final class PropertiesChangedHandler implements 
GlobalDataChangedEventHan
     
     @Override
     public String getSubscribedKey() {
-        return NodePathGenerator.generatePath(new GlobalPropertiesNodePath(), 
false);
+        return NodePathGenerator.toPath(new GlobalPropertiesNodePath(), false);
     }
     
     @Override
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/QualifiedDataSourceChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/QualifiedDataSourceChangedHandler.java
index b804c8dcf29..52b39133ab0 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/QualifiedDataSourceChangedHandler.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/QualifiedDataSourceChangedHandler.java
@@ -45,7 +45,7 @@ public final class QualifiedDataSourceChangedHandler 
implements GlobalDataChange
     
     @Override
     public String getSubscribedKey() {
-        return NodePathGenerator.generatePath(new 
QualifiedDataSourceNodePath(null), false);
+        return NodePathGenerator.toPath(new QualifiedDataSourceNodePath(null), 
false);
     }
     
     @Override
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/ShowProcessListHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/ShowProcessListHandler.java
index 808b4cba104..af8b4863f85 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/ShowProcessListHandler.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/ShowProcessListHandler.java
@@ -38,7 +38,7 @@ public final class ShowProcessListHandler implements 
GlobalDataChangedEventHandl
     
     @Override
     public String getSubscribedKey() {
-        return NodePathGenerator.generatePath(new 
ShowProcessListTriggerNodePath(null, null), false);
+        return NodePathGenerator.toPath(new 
ShowProcessListTriggerNodePath(null), false);
     }
     
     @Override
@@ -67,6 +67,6 @@ public final class ShowProcessListHandler implements 
GlobalDataChangedEventHandl
     }
     
     private Matcher getShowProcessListTriggerMatcher(final DataChangedEvent 
event) {
-        return Pattern.compile(NodePathGenerator.generatePath(new 
ShowProcessListTriggerNodePath(null, null), false) + "/([\\S]+):([\\S]+)$", 
Pattern.CASE_INSENSITIVE).matcher(event.getKey());
+        return Pattern.compile(NodePathGenerator.toPath(new 
ShowProcessListTriggerNodePath(null), false) + "/([\\S]+):([\\S]+)$", 
Pattern.CASE_INSENSITIVE).matcher(event.getKey());
     }
 }
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/StatisticsChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/StatisticsChangedHandler.java
index e18e837fe3c..1966e8b5306 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/StatisticsChangedHandler.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/StatisticsChangedHandler.java
@@ -40,7 +40,7 @@ public final class StatisticsChangedHandler implements 
GlobalDataChangedEventHan
     
     @Override
     public String getSubscribedKey() {
-        return NodePathGenerator.generatePath(new StatisticsDataNodePath(null, 
null, null, null), false);
+        return NodePathGenerator.toPath(new StatisticsDataNodePath(null, null, 
null, null), false);
     }
     
     @Override
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/DataChangedEventListenerRegistry.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/DataChangedEventListenerRegistry.java
index 7c28f92e62a..24b2546c23e 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/DataChangedEventListenerRegistry.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/DataChangedEventListenerRegistry.java
@@ -54,7 +54,7 @@ public final class DataChangedEventListenerRegistry {
     }
     
     private void registerDatabaseListeners(final String databaseName) {
-        repository.watch(NodePathGenerator.generatePath(new 
TableMetadataNodePath(databaseName, null, null), true), new 
DatabaseMetaDataChangedListener(contextManager));
+        repository.watch(NodePathGenerator.toPath(new 
TableMetadataNodePath(databaseName, null, null), true), new 
DatabaseMetaDataChangedListener(contextManager));
     }
     
     private void registerGlobalHandlers(final GlobalDataChangedEventHandler 
handler) {
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/coordinator/database/ClusterDatabaseListenerPersistCoordinator.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/coordinator/database/ClusterDatabaseListenerPersistCoordinator.java
index 8fb3172d9b7..22c235c2216 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/coordinator/database/ClusterDatabaseListenerPersistCoordinator.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/coordinator/database/ClusterDatabaseListenerPersistCoordinator.java
@@ -37,7 +37,7 @@ public final class ClusterDatabaseListenerPersistCoordinator {
      * @param clusterDatabaseListenerCoordinatorType database changed listener 
assisted type
      */
     public void persist(final String databaseName, final 
ClusterDatabaseListenerCoordinatorType clusterDatabaseListenerCoordinatorType) {
-        repository.persistEphemeral(NodePathGenerator.generatePath(new 
DatabaseListenerCoordinatorNodePath(databaseName), false), 
clusterDatabaseListenerCoordinatorType.name());
+        repository.persistEphemeral(NodePathGenerator.toPath(new 
DatabaseListenerCoordinatorNodePath(databaseName), false), 
clusterDatabaseListenerCoordinatorType.name());
     }
     
     /**
@@ -46,6 +46,6 @@ public final class ClusterDatabaseListenerPersistCoordinator {
      * @param databaseName database name
      */
     public void delete(final String databaseName) {
-        repository.delete(NodePathGenerator.generatePath(new 
DatabaseListenerCoordinatorNodePath(databaseName), false));
+        repository.delete(NodePathGenerator.toPath(new 
DatabaseListenerCoordinatorNodePath(databaseName), false));
     }
 }
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/coordinator/process/ClusterProcessPersistCoordinator.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/coordinator/process/ClusterProcessPersistCoordinator.java
index 79f53f6cb58..69c2f0200e0 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/coordinator/process/ClusterProcessPersistCoordinator.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/coordinator/process/ClusterProcessPersistCoordinator.java
@@ -24,6 +24,7 @@ import 
org.apache.shardingsphere.infra.executor.sql.process.yaml.swapper.YamlPro
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import org.apache.shardingsphere.mode.node.path.NodePathGenerator;
 import org.apache.shardingsphere.mode.node.path.execution.ProcessNodePath;
+import 
org.apache.shardingsphere.mode.node.path.node.compute.process.InstanceProcessNodeValue;
 import 
org.apache.shardingsphere.mode.node.path.node.compute.process.KillProcessTriggerNodePath;
 import 
org.apache.shardingsphere.mode.node.path.node.compute.process.ShowProcessListTriggerNodePath;
 import org.apache.shardingsphere.mode.spi.repository.PersistRepository;
@@ -49,9 +50,9 @@ public final class ClusterProcessPersistCoordinator {
     public void reportLocalProcesses(final String instanceId, final String 
taskId) {
         Collection<Process> processes = 
ProcessRegistry.getInstance().listAll();
         if (!processes.isEmpty()) {
-            repository.persist(NodePathGenerator.generatePath(new 
ProcessNodePath(taskId, instanceId), false), 
YamlEngine.marshal(swapper.swapToYamlConfiguration(processes)));
+            repository.persist(NodePathGenerator.toPath(new 
ProcessNodePath(taskId, instanceId), false), 
YamlEngine.marshal(swapper.swapToYamlConfiguration(processes)));
         }
-        repository.delete(NodePathGenerator.generatePath(new 
ShowProcessListTriggerNodePath(instanceId, taskId), false));
+        repository.delete(NodePathGenerator.toPath(new 
ShowProcessListTriggerNodePath(new InstanceProcessNodeValue(instanceId, 
taskId)), false));
     }
     
     /**
@@ -61,6 +62,6 @@ public final class ClusterProcessPersistCoordinator {
      * @param processId process ID
      */
     public void cleanProcess(final String instanceId, final String processId) {
-        repository.delete(NodePathGenerator.generatePath(new 
KillProcessTriggerNodePath(instanceId, processId), false));
+        repository.delete(NodePathGenerator.toPath(new 
KillProcessTriggerNodePath(new InstanceProcessNodeValue(instanceId, 
processId)), false));
     }
 }
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterProcessPersistService.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterProcessPersistService.java
index 357740a95fd..7e69dfbcf53 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterProcessPersistService.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterProcessPersistService.java
@@ -26,6 +26,7 @@ import 
org.apache.shardingsphere.infra.instance.metadata.InstanceType;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import org.apache.shardingsphere.mode.node.path.NodePathGenerator;
 import org.apache.shardingsphere.mode.node.path.execution.ProcessNodePath;
+import 
org.apache.shardingsphere.mode.node.path.node.compute.process.InstanceProcessNodeValue;
 import 
org.apache.shardingsphere.mode.node.path.node.compute.process.KillProcessTriggerNodePath;
 import 
org.apache.shardingsphere.mode.node.path.node.compute.process.ShowProcessListTriggerNodePath;
 import 
org.apache.shardingsphere.mode.node.path.node.compute.status.OnlineNodePath;
@@ -56,7 +57,7 @@ public final class ClusterProcessPersistService implements 
ProcessPersistService
             isCompleted = 
ProcessOperationLockRegistry.getInstance().waitUntilReleaseReady(taskId, () -> 
isReady(triggerPaths));
             return getShowProcessListData(taskId);
         } finally {
-            repository.delete(NodePathGenerator.generatePath(new 
ProcessNodePath(taskId, null), false));
+            repository.delete(NodePathGenerator.toPath(new 
ProcessNodePath(taskId, null), false));
             if (!isCompleted) {
                 triggerPaths.forEach(repository::delete);
             }
@@ -65,15 +66,15 @@ public final class ClusterProcessPersistService implements 
ProcessPersistService
     
     private Collection<String> getShowProcessListTriggerPaths(final String 
taskId) {
         return Stream.of(InstanceType.values())
-                .flatMap(each -> 
repository.getChildrenKeys(NodePathGenerator.generatePath(new 
OnlineNodePath(each, null), false)).stream()
-                        .map(instanceId -> NodePathGenerator.generatePath(new 
ShowProcessListTriggerNodePath(instanceId, taskId), false)))
+                .flatMap(each -> 
repository.getChildrenKeys(NodePathGenerator.toPath(new OnlineNodePath(each, 
null), false)).stream()
+                        .map(instanceId -> NodePathGenerator.toPath(new 
ShowProcessListTriggerNodePath(new InstanceProcessNodeValue(instanceId, 
taskId)), false)))
                 .collect(Collectors.toList());
     }
     
     private Collection<Process> getShowProcessListData(final String taskId) {
         YamlProcessList yamlProcessList = new YamlProcessList();
-        for (String each : 
repository.getChildrenKeys(NodePathGenerator.generatePath(new 
ProcessNodePath(taskId, null), false)).stream()
-                .map(each -> 
repository.query(NodePathGenerator.generatePath(new ProcessNodePath(taskId, 
each), false))).collect(Collectors.toList())) {
+        for (String each : 
repository.getChildrenKeys(NodePathGenerator.toPath(new ProcessNodePath(taskId, 
null), false)).stream()
+                .map(each -> repository.query(NodePathGenerator.toPath(new 
ProcessNodePath(taskId, each), false))).collect(Collectors.toList())) {
             yamlProcessList.getProcesses().addAll(YamlEngine.unmarshal(each, 
YamlProcessList.class).getProcesses());
         }
         return new YamlProcessListSwapper().swapToObject(yamlProcessList);
@@ -95,8 +96,8 @@ public final class ClusterProcessPersistService implements 
ProcessPersistService
     
     private Collection<String> getKillProcessTriggerPaths(final String 
processId) {
         return Stream.of(InstanceType.values())
-                .flatMap(each -> 
repository.getChildrenKeys(NodePathGenerator.generatePath(new 
OnlineNodePath(each, null), false)).stream()
-                        .map(onlinePath -> NodePathGenerator.generatePath(new 
KillProcessTriggerNodePath(onlinePath, processId), false)))
+                .flatMap(each -> 
repository.getChildrenKeys(NodePathGenerator.toPath(new OnlineNodePath(each, 
null), false)).stream()
+                        .map(onlinePath -> NodePathGenerator.toPath(new 
KillProcessTriggerNodePath(new InstanceProcessNodeValue(onlinePath, 
processId)), false)))
                 .collect(Collectors.toList());
     }
     
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/workerid/ReservationPersistService.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/workerid/ReservationPersistService.java
index b02d0567883..dc3c10821ee 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/workerid/ReservationPersistService.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/workerid/ReservationPersistService.java
@@ -43,7 +43,7 @@ public final class ReservationPersistService {
     public Optional<Integer> reserveWorkerId(final Integer 
preselectedWorkerId, final String instanceId) {
         try {
             return repository.persistExclusiveEphemeral(
-                    NodePathGenerator.generatePath(new 
WorkerIDReservationNodePath(preselectedWorkerId), false), instanceId) ? 
Optional.of(preselectedWorkerId) : Optional.empty();
+                    NodePathGenerator.toPath(new 
WorkerIDReservationNodePath(preselectedWorkerId), false), instanceId) ? 
Optional.of(preselectedWorkerId) : Optional.empty();
         } catch (final ClusterRepositoryPersistException ignore) {
             return Optional.empty();
         }

Reply via email to