This is an automated email from the ASF dual-hosted git repository.
wuweijie 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 024432e Split RegistryCenterNode to multiple nodes (#10511)
024432e is described below
commit 024432e8359c13cac2ac414ce0f93e7a0cd11530
Author: Liang Zhang <[email protected]>
AuthorDate: Thu May 27 23:52:48 2021 +0800
Split RegistryCenterNode to multiple nodes (#10511)
* Update GlobalRuleRegistryService
* Static RegistryCenterNode
* Static RegistryCenterNode
* Rename RegistryCenterNode.STATES_NODE
* add StatesNode
* Refactor StatesNode
* Refactor StatesNode
* Add PropertiesNode
* Add PropertiesNode
* Refactor StatesNode
* Add GlobalRuleNode
* Merge GlobalNode
* Add SchemaMetadataNode
* Add CacheNode
* Add ProcessNode
* Add SchemaNameUtil
* Update SchemaNameUtil
---
.../listener/PrivilegeNodeChangedListener.java | 4 +-
.../authority/listener/UserChangedListener.java | 4 +-
.../governance/core/facade/GovernanceFacade.java | 2 +-
.../governance/core/registry/RegistryCenter.java | 23 +-
.../core/registry/RegistryCenterNode.java | 389 ---------------------
.../governance/core/registry/UserNode.java | 40 +++
.../governance/core/registry/cache/CacheNode.java | 41 +++
.../registry/{ => cache}/RegistryCacheManager.java | 6 +-
.../ScalingRegistrySubscriber.java | 20 +-
.../listener/impl/DataSourceChangedListener.java | 11 +-
.../impl/DataSourceStateChangedListener.java | 15 +-
.../listener/impl/GlobalRuleChangedListener.java | 4 +-
.../listener/impl/MetaDataChangedListener.java | 14 +-
.../listener/impl/PropertiesChangedListener.java | 6 +-
.../listener/impl/RuleChangedListener.java | 14 +-
.../listener/impl/SchemaChangedListener.java | 8 +-
.../impl/TerminalStateChangedListener.java | 6 +-
.../config/impl/DataSourceRegistryService.java | 11 +-
.../config/impl/GlobalRuleRegistryService.java | 27 +-
.../config/impl/PropertiesRegistryService.java | 10 +-
.../config/impl/SchemaRuleRegistryService.java | 12 +-
.../registry/service/config/node/GlobalNode.java | 51 +++
.../service/config/node/SchemaMetadataNode.java | 155 ++++++++
.../core/registry/service/process/ProcessNode.java | 50 +++
.../service/process/ProcessRegistrySubscriber.java | 14 +-
.../service/schema/SchemaRegistryService.java | 24 +-
.../state/DataSourceStatusRegistryService.java | 12 +-
.../service/state/LockRegistryService.java | 6 +-
.../core/registry/service/state/StatesNode.java | 185 ++++++++++
.../core/registry/util/SchemaNameUtil.java | 45 +++
.../core/facade/GovernanceFacadeTest.java | 2 +-
.../core/registry/RegistryCenterNodeTest.java | 134 -------
.../core/registry/RegistryCenterTest.java | 2 +-
.../governance/core/registry/UserNodeTest.java | 31 ++
.../ScalingRegistrySubscriberTest.java | 3 +-
.../service/config/node/GlobalNodeTest.java | 36 ++
.../config/node/SchemaMetadataNodeTest.java | 61 ++++
.../state/DataSourceStatusRegistryServiceTest.java | 5 +-
.../registry/service/state/StatesNodeTest.java | 84 +++++
.../impl/GovernanceBootstrapInitializerTest.java | 15 +-
40 files changed, 899 insertions(+), 683 deletions(-)
diff --git
a/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/authority/listener/PrivilegeNodeChangedListener.java
b/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/authority/listener/PrivilegeNodeChangedListener.java
index 951d4f4..c21a9d3 100644
---
a/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/authority/listener/PrivilegeNodeChangedListener.java
+++
b/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/authority/listener/PrivilegeNodeChangedListener.java
@@ -18,9 +18,9 @@
package org.apache.shardingsphere.governance.context.authority.listener;
import
org.apache.shardingsphere.governance.context.authority.listener.event.AuthorityChangedEvent;
-import org.apache.shardingsphere.governance.core.registry.RegistryCenterNode;
import
org.apache.shardingsphere.governance.core.registry.listener.PostGovernanceRepositoryEventListener;
import
org.apache.shardingsphere.governance.core.registry.listener.event.GovernanceEvent;
+import
org.apache.shardingsphere.governance.core.registry.service.state.StatesNode;
import
org.apache.shardingsphere.governance.repository.api.listener.DataChangedEvent;
import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
import
org.apache.shardingsphere.infra.metadata.user.yaml.config.YamlUsersConfigurationConverter;
@@ -36,7 +36,7 @@ import java.util.Optional;
public final class PrivilegeNodeChangedListener extends
PostGovernanceRepositoryEventListener<GovernanceEvent> {
public PrivilegeNodeChangedListener(final RegistryCenterRepository
registryCenterRepository) {
- super(registryCenterRepository, Collections.singletonList(new
RegistryCenterNode().getPrivilegeNodePath()));
+ super(registryCenterRepository,
Collections.singletonList(StatesNode.getPrivilegeNodePath()));
}
@Override
diff --git
a/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/authority/listener/UserChangedListener.java
b/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/authority/listener/UserChangedListener.java
index 6054d84..60dd435 100644
---
a/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/authority/listener/UserChangedListener.java
+++
b/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/authority/listener/UserChangedListener.java
@@ -18,7 +18,7 @@
package org.apache.shardingsphere.governance.context.authority.listener;
import
org.apache.shardingsphere.governance.context.authority.listener.event.AuthorityChangedEvent;
-import org.apache.shardingsphere.governance.core.registry.RegistryCenterNode;
+import org.apache.shardingsphere.governance.core.registry.UserNode;
import
org.apache.shardingsphere.governance.core.registry.listener.PostGovernanceRepositoryEventListener;
import
org.apache.shardingsphere.governance.core.registry.listener.event.GovernanceEvent;
import
org.apache.shardingsphere.governance.repository.api.listener.DataChangedEvent;
@@ -36,7 +36,7 @@ import java.util.Optional;
public final class UserChangedListener extends
PostGovernanceRepositoryEventListener<GovernanceEvent> {
public UserChangedListener(final RegistryCenterRepository
registryCenterRepository) {
- super(registryCenterRepository, Collections.singletonList(new
RegistryCenterNode().getUsersNode()));
+ super(registryCenterRepository,
Collections.singletonList(UserNode.getRootNode()));
}
@Override
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/facade/GovernanceFacade.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/facade/GovernanceFacade.java
index 76dbce6..271c58e 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/facade/GovernanceFacade.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/facade/GovernanceFacade.java
@@ -78,7 +78,7 @@ public final class GovernanceFacade implements AutoCloseable {
*/
public void onlineInstance() {
registryCenter.registerInstanceOnline();
- registryCenter.initNodes();
+ registryCenter.initStateNodes();
listenerManager.initListeners();
}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java
index d682323..7b46a57 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java
@@ -25,11 +25,13 @@ import
org.apache.shardingsphere.governance.core.registry.service.config.impl.Da
import
org.apache.shardingsphere.governance.core.registry.service.config.impl.GlobalRuleRegistryService;
import
org.apache.shardingsphere.governance.core.registry.service.config.impl.PropertiesRegistryService;
import
org.apache.shardingsphere.governance.core.registry.service.config.impl.SchemaRuleRegistryService;
+import
org.apache.shardingsphere.governance.core.registry.service.config.node.SchemaMetadataNode;
import
org.apache.shardingsphere.governance.core.registry.service.process.ProcessRegistrySubscriber;
-import
org.apache.shardingsphere.governance.core.registry.service.scaling.ScalingRegistrySubscriber;
+import
org.apache.shardingsphere.governance.core.registry.cache.ScalingRegistrySubscriber;
import
org.apache.shardingsphere.governance.core.registry.service.schema.SchemaRegistryService;
import
org.apache.shardingsphere.governance.core.registry.service.state.DataSourceStatusRegistryService;
import
org.apache.shardingsphere.governance.core.registry.service.state.LockRegistryService;
+import
org.apache.shardingsphere.governance.core.registry.service.state.StatesNode;
import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
import org.apache.shardingsphere.infra.config.RuleConfiguration;
import
org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration;
@@ -50,8 +52,6 @@ public final class RegistryCenter {
private final RegistryCenterRepository repository;
- private final RegistryCenterNode node;
-
@Getter
private final DataSourceRegistryService dataSourceService;
@@ -76,7 +76,6 @@ public final class RegistryCenter {
public RegistryCenter(final RegistryCenterRepository repository) {
instanceId = GovernanceInstance.getInstance().getId();
this.repository = repository;
- node = new RegistryCenterNode();
dataSourceService = new DataSourceRegistryService(repository);
schemaRuleService = new SchemaRuleRegistryService(repository);
globalRuleService = new GlobalRuleRegistryService(repository);
@@ -90,11 +89,11 @@ public final class RegistryCenter {
}
/**
- * Initialize nodes.
+ * Initialize state nodes.
*/
- public void initNodes() {
- repository.persist(node.getDataNodesPath(), "");
- repository.persist(node.getPrimaryNodesPath(), "");
+ public void initStateNodes() {
+ repository.persist(StatesNode.getDataNodesPath(), "");
+ repository.persist(StatesNode.getPrimaryNodesPath(), "");
}
/**
@@ -120,9 +119,9 @@ public final class RegistryCenter {
}
private void persistSchemaName(final String schemaName) {
- String schemaNamesStr = repository.get(node.getMetadataNodePath());
+ String schemaNamesStr =
repository.get(SchemaMetadataNode.getMetadataNodePath());
if (Strings.isNullOrEmpty(schemaNamesStr)) {
- repository.persist(node.getMetadataNodePath(), schemaName);
+ repository.persist(SchemaMetadataNode.getMetadataNodePath(),
schemaName);
return;
}
Collection<String> schemaNames =
Splitter.on(",").splitToList(schemaNamesStr);
@@ -131,13 +130,13 @@ public final class RegistryCenter {
}
Collection<String> newSchemaNames = new ArrayList<>(schemaNames);
newSchemaNames.add(schemaName);
- repository.persist(node.getMetadataNodePath(), String.join(",",
newSchemaNames));
+ repository.persist(SchemaMetadataNode.getMetadataNodePath(),
String.join(",", newSchemaNames));
}
/**
* Register instance online.
*/
public void registerInstanceOnline() {
- repository.persistEphemeral(node.getProxyNodePath(instanceId), "");
+ repository.persistEphemeral(StatesNode.getProxyNodePath(instanceId),
"");
}
}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterNode.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterNode.java
deleted file mode 100644
index 3dd24d3..0000000
---
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterNode.java
+++ /dev/null
@@ -1,389 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.governance.core.registry;
-
-import com.google.common.base.Joiner;
-import com.google.common.base.Splitter;
-import com.google.common.base.Strings;
-import
org.apache.shardingsphere.governance.core.registry.schema.GovernanceSchema;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Optional;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
-
-/**
- * Registry center node.
- */
-public final class RegistryCenterNode {
-
- private static final String ROOT = "states";
-
- private static final String PROXY_NODES_NAME = "proxynodes";
-
- private static final String DATA_NODES_NAME = "datanodes";
-
- private static final String PRIMARY_NODES_NAME = "primarynodes";
-
- private static final String EXECUTION_NODES_NAME = "executionnodes";
-
- private static final String METADATA_NODE = "metadata";
-
- private static final String DATA_SOURCES_NODE = "dataSources";
-
- private static final String RULES_NODE = "rules";
-
- private static final String SCHEMA_NODE = "schema";
-
- private static final String USERS_NODE = "users";
-
- private static final String GLOBAL_RULE_NODE = "rules";
-
- private static final String PRIVILEGE_NODE = "privilegenode";
-
- private static final String PROPS_NODE = "props";
-
- private static final String COMMA_SEPARATOR = ",";
-
- private static final String PATH_SEPARATOR = "/";
-
- private static final String CACHE_NODE = "cache";
-
- /**
- * Get proxy node path.
- *
- * @param instanceId instance id
- * @return proxy node path
- */
- public String getProxyNodePath(final String instanceId) {
- return Joiner.on("/").join("", ROOT, PROXY_NODES_NAME, instanceId);
- }
-
- /**
- * Get data nodes path.
- *
- * @return data nodes path
- */
- public String getDataNodesPath() {
- return Joiner.on("/").join("", ROOT, DATA_NODES_NAME);
- }
-
- /**
- * Get primary nodes path.
- *
- * @return primary nodes path
- */
- public String getPrimaryNodesPath() {
- return Joiner.on("/").join("", ROOT, PRIMARY_NODES_NAME);
- }
-
- /**
- * Get schema path.
- *
- * @param schemaName schema name
- * @return schema path
- */
- public String getSchemaPath(final String schemaName) {
- return Joiner.on("/").join("", ROOT, DATA_NODES_NAME, schemaName);
- }
-
- /**
- * Get primary nodes schema path.
- *
- * @param schemaName schema name
- * @return schema path
- */
- public String getPrimaryNodesSchemaPath(final String schemaName) {
- return Joiner.on("/").join("", ROOT, PRIMARY_NODES_NAME, schemaName);
- }
-
- /**
- * Get data source path.
- *
- * @param schemaName schema name
- * @param dataSourceName data source name
- * @return data source path
- */
- public String getDataSourcePath(final String schemaName, final String
dataSourceName) {
- return Joiner.on("/").join("", ROOT, DATA_NODES_NAME, schemaName,
dataSourceName);
- }
-
- /**
- * Get metadata data source path.
- *
- * @param schemaName schema name
- * @return data source path
- */
- public String getMetadataDataSourcePath(final String schemaName) {
- return getFullMetadataPath(schemaName, DATA_SOURCES_NODE);
- }
-
- /**
- * Get primary data source path.
- *
- * @param schemaName schema name
- * @param groupName group name
- * @return data source path
- */
- public String getPrimaryDataSourcePath(final String schemaName, final
String groupName) {
- return Joiner.on("/").join("", ROOT, PRIMARY_NODES_NAME, schemaName,
groupName);
- }
-
- /**
- * Get governance schema.
- *
- * @param dataSourceNodeFullPath data source node full path
- * @return governance schema
- */
- public Optional<GovernanceSchema> getGovernanceSchema(final String
dataSourceNodeFullPath) {
- Pattern pattern = Pattern.compile(getDataNodesPath() + "/" +
"(\\w+)/(\\S+)$", Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(dataSourceNodeFullPath);
- return matcher.find() ? Optional.of(new
GovernanceSchema(matcher.group(1), matcher.group(2))) : Optional.empty();
- }
-
- /**
- * Get primary nodes governance schema.
- *
- * @param dataSourceNodeFullPath data source node full path
- * @return primary nodes governance schema
- */
- public Optional<GovernanceSchema> getPrimaryNodesGovernanceSchema(final
String dataSourceNodeFullPath) {
- Pattern pattern = Pattern.compile(getPrimaryNodesPath() + "/" +
"(\\w+)/(\\w+)$", Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(dataSourceNodeFullPath);
- return matcher.find() ? Optional.of(new
GovernanceSchema(matcher.group(1), matcher.group(2))) : Optional.empty();
- }
-
- /**
- * Is primary data source path.
- *
- * @param dataSourceNodeFullPath data source node full path
- * @return is primary data source path
- */
- public boolean isPrimaryDataSourcePath(final String
dataSourceNodeFullPath) {
- Pattern pattern = Pattern.compile(getPrimaryNodesPath() + "/" +
"(\\w+)/(\\w+)$", Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(dataSourceNodeFullPath);
- return matcher.find();
- }
-
- /**
- * Get all schema path.
- *
- * @param schemaNames collection of schema name
- * @return collection of schema path
- */
- public Collection<String> getAllSchemaPaths(final Collection<String>
schemaNames) {
- Collection<String> result = new ArrayList<>(schemaNames.size());
- for (String schemaName : schemaNames) {
- result.add(getSchemaPath(schemaName));
- result.add(getPrimaryNodesSchemaPath(schemaName));
- }
- return result;
- }
-
- /**
- * Get proxy nodes path.
- *
- * @return proxy nodes path
- */
- public String getProxyNodesPath() {
- return Joiner.on("/").join("", ROOT, PROXY_NODES_NAME);
- }
-
- /**
- * Get metadata node path.
- *
- * @return metadata node path
- */
- public String getMetadataNodePath() {
- return Joiner.on(PATH_SEPARATOR).join("", METADATA_NODE);
- }
-
- /**
- * Get schema name path.
- *
- * @param schemaName schema name
- * @return schema name path
- */
- public String getSchemaNamePath(final String schemaName) {
- return Joiner.on(PATH_SEPARATOR).join("", METADATA_NODE, schemaName);
- }
-
- /**
- * Get rule path.
- *
- * @param schemaName schema name
- * @return rule path
- */
- public String getRulePath(final String schemaName) {
- return getFullMetadataPath(schemaName, RULES_NODE);
- }
-
- /**
- * Get metadata schema path.
- *
- * @param schemaName schema name
- * @return schema path
- */
- public String getMetadataSchemaPath(final String schemaName) {
- return getFullMetadataPath(schemaName, SCHEMA_NODE);
- }
-
- /**
- * Get users path.
- *
- * @return users path
- */
- public String getUsersNode() {
- return getFullPath(USERS_NODE);
- }
-
- /**
- * Get global rule node path.
- *
- * @return global rule node path
- */
- public String getGlobalRuleNode() {
- return getFullPath(GLOBAL_RULE_NODE);
- }
-
- /**
- * Get privilege node path.
- *
- * @return privilege node path
- */
- public String getPrivilegeNodePath() {
- return Joiner.on(PATH_SEPARATOR).join("", ROOT, PRIVILEGE_NODE);
- }
-
- /**
- * Get properties path.
- *
- * @return properties path
- */
- public String getPropsPath() {
- return getFullPath(PROPS_NODE);
- }
-
- private String getFullMetadataPath(final String schemaName, final String
node) {
- return Joiner.on(PATH_SEPARATOR).join("", METADATA_NODE, schemaName,
node);
- }
-
- private String getFullPath(final String node) {
- return Joiner.on(PATH_SEPARATOR).join("", node);
- }
-
- /**
- * Get schema name.
- *
- * @param configurationNodeFullPath configuration node full path
- * @return schema name
- */
- public String getSchemaName(final String configurationNodeFullPath) {
- Pattern pattern = Pattern.compile(getMetadataNodePath() + "/(\\w+)" +
"(/datasource|/rule)?", Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(configurationNodeFullPath);
- return matcher.find() ? matcher.group(1) : "";
- }
-
- /**
- * Split schema name.
- *
- * @param schemaNames schema names
- * @return schema names
- */
- public Collection<String> splitSchemaName(final String schemaNames) {
- return Strings.isNullOrEmpty(schemaNames) ? Collections.emptyList() :
Splitter.on(COMMA_SEPARATOR).splitToList(schemaNames);
- }
-
- /**
- * Get all schema config paths.
- *
- * @param schemaNames schema names
- * @return config paths list
- */
- public Collection<String> getAllSchemaConfigPaths(final Collection<String>
schemaNames) {
- Collection<String> result = new
ArrayList<>(Collections.singleton(getMetadataNodePath()));
- for (String schemaName : schemaNames) {
- result.add(getRulePath(schemaName));
- result.add(getMetadataDataSourcePath(schemaName));
- result.add(getMetadataSchemaPath(schemaName));
- }
- return result;
- }
-
- /**
- * Get cache path.
- *
- * @param path path
- * @return cache path
- */
- public String getCachePath(final String path) {
- return Joiner.on(PATH_SEPARATOR).join(path, CACHE_NODE);
- }
-
- /**
- * Get all metadata schema paths.
- *
- * @param schemaNames schema names
- * @return list of schema path
- */
- public Collection<String> getAllMetadataSchemaPaths(final
Collection<String> schemaNames) {
- return
schemaNames.stream().map(this::getMetadataSchemaPath).collect(Collectors.toList());
- }
-
- /**
- * Get all rule paths.
- *
- * @param schemaNames schema names
- * @return list of rule path
- */
- public Collection<String> getAllRulePaths(final Collection<String>
schemaNames) {
- return
schemaNames.stream().map(this::getRulePath).collect(Collectors.toList());
- }
-
- /**
- * Get all data source paths.
- *
- * @param schemaNames schema names
- * @return list of data source path
- */
- public Collection<String> getAllDataSourcePaths(final Collection<String>
schemaNames) {
- return
schemaNames.stream().map(this::getMetadataDataSourcePath).collect(Collectors.toList());
- }
-
- /**
- * Get execution nodes path.
- *
- * @return execution nodes path
- */
- public String getExecutionNodesPath() {
- return Joiner.on("/").join("", EXECUTION_NODES_NAME);
- }
-
- /**
- * Get execution path.
- *
- * @param executionId execution id
- * @return execution path
- */
- public String getExecutionPath(final String executionId) {
- return Joiner.on("/").join("", EXECUTION_NODES_NAME, executionId);
- }
-}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/UserNode.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/UserNode.java
new file mode 100644
index 0000000..10456da
--- /dev/null
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/UserNode.java
@@ -0,0 +1,40 @@
+/*
+ * 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.governance.core.registry;
+
+import com.google.common.base.Joiner;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+
+/**
+ * User node.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class UserNode {
+
+ private static final String ROOT_NODE = "users";
+
+ /**
+ * Get users path.
+ *
+ * @return users path
+ */
+ public static String getRootNode() {
+ return Joiner.on("/").join("", ROOT_NODE);
+ }
+}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/cache/CacheNode.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/cache/CacheNode.java
new file mode 100644
index 0000000..1da73e9
--- /dev/null
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/cache/CacheNode.java
@@ -0,0 +1,41 @@
+/*
+ * 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.governance.core.registry.cache;
+
+import com.google.common.base.Joiner;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+
+/**
+ * Cache node.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class CacheNode {
+
+ private static final String CACHE_NODE = "cache";
+
+ /**
+ * Get cache path.
+ *
+ * @param path path
+ * @return cache path
+ */
+ public static String getCachePath(final String path) {
+ return Joiner.on("/").join(path, CACHE_NODE);
+ }
+}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCacheManager.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/cache/RegistryCacheManager.java
similarity index 92%
rename from
shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCacheManager.java
rename to
shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/cache/RegistryCacheManager.java
index a170c7b..c1bdadb 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCacheManager.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/cache/RegistryCacheManager.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.governance.core.registry;
+package org.apache.shardingsphere.governance.core.registry.cache;
import com.google.common.base.Joiner;
import lombok.RequiredArgsConstructor;
@@ -33,8 +33,6 @@ public final class RegistryCacheManager {
private final RegistryCenterRepository repository;
- private final RegistryCenterNode node;
-
/**
* Cache configuration.
*
@@ -74,6 +72,6 @@ public final class RegistryCacheManager {
}
private String getCachePath(final String path, final String cacheId) {
- return Joiner.on(PATH_SEPARATOR).join(node.getCachePath(path),
cacheId);
+ return Joiner.on(PATH_SEPARATOR).join(CacheNode.getCachePath(path),
cacheId);
}
}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/scaling/ScalingRegistrySubscriber.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/cache/ScalingRegistrySubscriber.java
similarity index 81%
rename from
shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/scaling/ScalingRegistrySubscriber.java
rename to
shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/cache/ScalingRegistrySubscriber.java
index 157cb0a..3dfcfd1 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/scaling/ScalingRegistrySubscriber.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/cache/ScalingRegistrySubscriber.java
@@ -15,15 +15,14 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.governance.core.registry.service.scaling;
+package org.apache.shardingsphere.governance.core.registry.cache;
import com.google.common.eventbus.Subscribe;
-import org.apache.shardingsphere.governance.core.registry.RegistryCacheManager;
-import org.apache.shardingsphere.governance.core.registry.RegistryCenterNode;
import
org.apache.shardingsphere.governance.core.registry.listener.event.rule.RuleConfigurationCachedEvent;
import
org.apache.shardingsphere.governance.core.registry.listener.event.rule.SwitchRuleConfigurationEvent;
import
org.apache.shardingsphere.governance.core.registry.listener.event.scaling.StartScalingEvent;
import
org.apache.shardingsphere.governance.core.registry.service.config.impl.SchemaRuleRegistryService;
+import
org.apache.shardingsphere.governance.core.registry.service.config.node.SchemaMetadataNode;
import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
import org.apache.shardingsphere.infra.config.RuleConfiguration;
import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
@@ -40,17 +39,14 @@ public final class ScalingRegistrySubscriber {
private final RegistryCenterRepository repository;
- private final RegistryCenterNode node;
-
private final SchemaRuleRegistryService schemaRuleService;
private final RegistryCacheManager registryCacheManager;
public ScalingRegistrySubscriber(final RegistryCenterRepository
repository, final SchemaRuleRegistryService schemaRuleService) {
this.repository = repository;
- node = new RegistryCenterNode();
this.schemaRuleService = schemaRuleService;
- registryCacheManager = new RegistryCacheManager(repository, node);
+ registryCacheManager = new RegistryCacheManager(repository);
ShardingSphereEventBus.getInstance().register(this);
}
@@ -62,13 +58,13 @@ public final class ScalingRegistrySubscriber {
@Subscribe
public void switchRuleConfiguration(final SwitchRuleConfigurationEvent
event) {
schemaRuleService.persist(event.getSchemaName(),
loadCachedRuleConfigurations(event.getSchemaName(),
event.getRuleConfigurationCacheId()));
-
registryCacheManager.deleteCache(node.getRulePath(event.getSchemaName()),
event.getRuleConfigurationCacheId());
+
registryCacheManager.deleteCache(SchemaMetadataNode.getRulePath(event.getSchemaName()),
event.getRuleConfigurationCacheId());
}
@SuppressWarnings("unchecked")
private Collection<RuleConfiguration> loadCachedRuleConfigurations(final
String schemaName, final String ruleConfigCacheId) {
return new
YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(
-
YamlEngine.unmarshal(registryCacheManager.loadCache(node.getRulePath(schemaName),
ruleConfigCacheId), Collection.class));
+
YamlEngine.unmarshal(registryCacheManager.loadCache(SchemaMetadataNode.getRulePath(schemaName),
ruleConfigCacheId), Collection.class));
}
/**
@@ -79,9 +75,9 @@ public final class ScalingRegistrySubscriber {
@Subscribe
public void cacheRuleConfiguration(final RuleConfigurationCachedEvent
event) {
StartScalingEvent startScalingEvent = new
StartScalingEvent(event.getSchemaName(),
-
repository.get(node.getMetadataDataSourcePath(event.getSchemaName())),
- repository.get(node.getRulePath(event.getSchemaName())),
-
registryCacheManager.loadCache(node.getRulePath(event.getSchemaName()),
event.getCacheId()), event.getCacheId());
+
repository.get(SchemaMetadataNode.getMetadataDataSourcePath(event.getSchemaName())),
+
repository.get(SchemaMetadataNode.getRulePath(event.getSchemaName())),
+
registryCacheManager.loadCache(SchemaMetadataNode.getRulePath(event.getSchemaName()),
event.getCacheId()), event.getCacheId());
ShardingSphereEventBus.getInstance().post(startScalingEvent);
}
}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/DataSourceChangedListener.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/DataSourceChangedListener.java
index 828b784..884b5b6 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/DataSourceChangedListener.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/DataSourceChangedListener.java
@@ -18,10 +18,10 @@
package org.apache.shardingsphere.governance.core.registry.listener.impl;
import com.google.common.base.Strings;
-import org.apache.shardingsphere.governance.core.registry.RegistryCenterNode;
import
org.apache.shardingsphere.governance.core.registry.listener.PostGovernanceRepositoryEventListener;
import
org.apache.shardingsphere.governance.core.registry.listener.event.GovernanceEvent;
import
org.apache.shardingsphere.governance.core.registry.listener.event.datasource.DataSourceChangedEvent;
+import
org.apache.shardingsphere.governance.core.registry.service.config.node.SchemaMetadataNode;
import
org.apache.shardingsphere.governance.repository.api.listener.DataChangedEvent;
import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
@@ -40,16 +40,13 @@ import java.util.stream.Collectors;
*/
public final class DataSourceChangedListener extends
PostGovernanceRepositoryEventListener<GovernanceEvent> {
- private final RegistryCenterNode registryCenterNode;
-
public DataSourceChangedListener(final RegistryCenterRepository
registryCenterRepository, final Collection<String> schemaNames) {
- super(registryCenterRepository, new
RegistryCenterNode().getAllDataSourcePaths(schemaNames));
- registryCenterNode = new RegistryCenterNode();
+ super(registryCenterRepository,
SchemaMetadataNode.getAllDataSourcePaths(schemaNames));
}
@Override
protected Optional<GovernanceEvent> createEvent(final DataChangedEvent
event) {
- String schemaName = new
RegistryCenterNode().getSchemaName(event.getKey());
+ String schemaName = SchemaMetadataNode.getSchemaName(event.getKey());
if (Strings.isNullOrEmpty(schemaName) ||
!isDataSourceChangedEvent(schemaName, event.getKey())
|| Strings.isNullOrEmpty(event.getValue())) {
return Optional.empty();
@@ -58,7 +55,7 @@ public final class DataSourceChangedListener extends
PostGovernanceRepositoryEve
}
private boolean isDataSourceChangedEvent(final String schemaName, final
String eventPath) {
- return
registryCenterNode.getMetadataDataSourcePath(schemaName).equals(eventPath);
+ return
SchemaMetadataNode.getMetadataDataSourcePath(schemaName).equals(eventPath);
}
@SuppressWarnings("unchecked")
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/DataSourceStateChangedListener.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/DataSourceStateChangedListener.java
index 47149c4..df4a592 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/DataSourceStateChangedListener.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/DataSourceStateChangedListener.java
@@ -17,15 +17,15 @@
package org.apache.shardingsphere.governance.core.registry.listener.impl;
-import org.apache.shardingsphere.governance.core.registry.RegistryCenterNode;
import
org.apache.shardingsphere.governance.core.registry.RegistryCenterNodeStatus;
import
org.apache.shardingsphere.governance.core.registry.listener.PostGovernanceRepositoryEventListener;
import
org.apache.shardingsphere.governance.core.registry.listener.event.GovernanceEvent;
import
org.apache.shardingsphere.governance.core.registry.listener.event.readwritesplitting.DisabledStateChangedEvent;
import
org.apache.shardingsphere.governance.core.registry.listener.event.readwritesplitting.PrimaryStateChangedEvent;
-import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
+import
org.apache.shardingsphere.governance.core.registry.service.state.StatesNode;
import
org.apache.shardingsphere.governance.repository.api.listener.DataChangedEvent;
import
org.apache.shardingsphere.governance.repository.api.listener.DataChangedEvent.Type;
+import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
import java.util.Collection;
import java.util.Optional;
@@ -35,19 +35,16 @@ import java.util.Optional;
*/
public final class DataSourceStateChangedListener extends
PostGovernanceRepositoryEventListener<GovernanceEvent> {
- private final RegistryCenterNode registryCenterNode;
-
public DataSourceStateChangedListener(final RegistryCenterRepository
registryCenterRepository, final Collection<String> schemaNames) {
- super(registryCenterRepository, new
RegistryCenterNode().getAllSchemaPaths(schemaNames));
- registryCenterNode = new RegistryCenterNode();
+ super(registryCenterRepository,
StatesNode.getAllSchemaPaths(schemaNames));
}
@Override
protected Optional<GovernanceEvent> createEvent(final DataChangedEvent
event) {
- if (registryCenterNode.isPrimaryDataSourcePath(event.getKey())) {
- return
registryCenterNode.getPrimaryNodesGovernanceSchema(event.getKey()).map(schema
-> new PrimaryStateChangedEvent(schema, event.getValue()));
+ if (StatesNode.isPrimaryDataSourcePath(event.getKey())) {
+ return
StatesNode.getPrimaryNodesGovernanceSchema(event.getKey()).map(schema -> new
PrimaryStateChangedEvent(schema, event.getValue()));
}
- return
registryCenterNode.getGovernanceSchema(event.getKey()).map(schema -> new
DisabledStateChangedEvent(schema, isDataSourceDisabled(event)));
+ return StatesNode.getGovernanceSchema(event.getKey()).map(schema ->
new DisabledStateChangedEvent(schema, isDataSourceDisabled(event)));
}
private boolean isDataSourceDisabled(final DataChangedEvent event) {
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/GlobalRuleChangedListener.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/GlobalRuleChangedListener.java
index 69176da..2339aef 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/GlobalRuleChangedListener.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/GlobalRuleChangedListener.java
@@ -18,10 +18,10 @@
package org.apache.shardingsphere.governance.core.registry.listener.impl;
import com.google.common.base.Preconditions;
-import org.apache.shardingsphere.governance.core.registry.RegistryCenterNode;
import
org.apache.shardingsphere.governance.core.registry.listener.PostGovernanceRepositoryEventListener;
import
org.apache.shardingsphere.governance.core.registry.listener.event.GovernanceEvent;
import
org.apache.shardingsphere.governance.core.registry.listener.event.rule.GlobalRuleConfigurationsChangedEvent;
+import
org.apache.shardingsphere.governance.core.registry.service.config.node.GlobalNode;
import
org.apache.shardingsphere.governance.repository.api.listener.DataChangedEvent;
import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
import org.apache.shardingsphere.infra.config.RuleConfiguration;
@@ -39,7 +39,7 @@ import java.util.Optional;
public final class GlobalRuleChangedListener extends
PostGovernanceRepositoryEventListener<GovernanceEvent> {
public GlobalRuleChangedListener(final RegistryCenterRepository
registryCenterRepository) {
- super(registryCenterRepository, Collections.singleton(new
RegistryCenterNode().getGlobalRuleNode()));
+ super(registryCenterRepository,
Collections.singleton(GlobalNode.getGlobalRuleNode()));
}
@Override
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/MetaDataChangedListener.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/MetaDataChangedListener.java
index 18b7c95..18b5e7d 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/MetaDataChangedListener.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/MetaDataChangedListener.java
@@ -18,13 +18,14 @@
package org.apache.shardingsphere.governance.core.registry.listener.impl;
import org.apache.commons.collections4.SetUtils;
-import org.apache.shardingsphere.governance.core.registry.RegistryCenterNode;
import
org.apache.shardingsphere.governance.core.registry.listener.PostGovernanceRepositoryEventListener;
import
org.apache.shardingsphere.governance.core.registry.listener.event.GovernanceEvent;
import
org.apache.shardingsphere.governance.core.registry.listener.event.metadata.MetaDataDeletedEvent;
import
org.apache.shardingsphere.governance.core.registry.listener.event.metadata.MetaDataPersistedEvent;
-import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
+import
org.apache.shardingsphere.governance.core.registry.service.config.node.SchemaMetadataNode;
+import org.apache.shardingsphere.governance.core.registry.util.SchemaNameUtil;
import
org.apache.shardingsphere.governance.repository.api.listener.DataChangedEvent;
+import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
import java.util.Collection;
import java.util.Collections;
@@ -40,18 +41,15 @@ public final class MetaDataChangedListener extends
PostGovernanceRepositoryEvent
private final Collection<String> existedSchemaNames;
- private final RegistryCenterNode registryCenterNode;
-
public MetaDataChangedListener(final RegistryCenterRepository
registryCenterRepository, final Collection<String> schemaNames) {
- super(registryCenterRepository, Collections.singleton(new
RegistryCenterNode().getMetadataNodePath()));
- registryCenterNode = new RegistryCenterNode();
+ super(registryCenterRepository,
Collections.singleton(SchemaMetadataNode.getMetadataNodePath()));
existedSchemaNames = new LinkedHashSet<>(schemaNames);
}
@Override
protected Optional<GovernanceEvent> createEvent(final DataChangedEvent
event) {
- if (registryCenterNode.getMetadataNodePath().equals(event.getKey())) {
- Collection<String> persistedSchemaNames =
registryCenterNode.splitSchemaName(event.getValue());
+ if (SchemaMetadataNode.getMetadataNodePath().equals(event.getKey())) {
+ Collection<String> persistedSchemaNames =
SchemaNameUtil.splitSchemaName(event.getValue());
Set<String> addedSchemaNames = SetUtils.difference(new
HashSet<>(persistedSchemaNames), new HashSet<>(existedSchemaNames));
if (!addedSchemaNames.isEmpty()) {
// TODO support multiple schemaNames
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/PropertiesChangedListener.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/PropertiesChangedListener.java
index eae7e91..358ea30 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/PropertiesChangedListener.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/PropertiesChangedListener.java
@@ -17,12 +17,12 @@
package org.apache.shardingsphere.governance.core.registry.listener.impl;
-import org.apache.shardingsphere.governance.core.registry.RegistryCenterNode;
import
org.apache.shardingsphere.governance.core.registry.listener.PostGovernanceRepositoryEventListener;
import
org.apache.shardingsphere.governance.core.registry.listener.event.GovernanceEvent;
import
org.apache.shardingsphere.governance.core.registry.listener.event.props.PropertiesChangedEvent;
-import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
+import
org.apache.shardingsphere.governance.core.registry.service.config.node.GlobalNode;
import
org.apache.shardingsphere.governance.repository.api.listener.DataChangedEvent;
+import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
import java.util.Collections;
@@ -35,7 +35,7 @@ import java.util.Properties;
public final class PropertiesChangedListener extends
PostGovernanceRepositoryEventListener<GovernanceEvent> {
public PropertiesChangedListener(final RegistryCenterRepository
registryCenterRepository) {
- super(registryCenterRepository, Collections.singletonList(new
RegistryCenterNode().getPropsPath()));
+ super(registryCenterRepository,
Collections.singletonList(GlobalNode.getPropsPath()));
}
@Override
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/RuleChangedListener.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/RuleChangedListener.java
index 6652804..055c3e6 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/RuleChangedListener.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/RuleChangedListener.java
@@ -19,11 +19,12 @@ package
org.apache.shardingsphere.governance.core.registry.listener.impl;
import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
-import org.apache.shardingsphere.governance.core.registry.RegistryCenterNode;
import
org.apache.shardingsphere.governance.core.registry.listener.PostGovernanceRepositoryEventListener;
import
org.apache.shardingsphere.governance.core.registry.listener.event.GovernanceEvent;
import
org.apache.shardingsphere.governance.core.registry.listener.event.rule.RuleConfigurationCachedEvent;
import
org.apache.shardingsphere.governance.core.registry.listener.event.rule.RuleConfigurationsChangedEvent;
+import
org.apache.shardingsphere.governance.core.registry.service.config.node.SchemaMetadataNode;
+import org.apache.shardingsphere.governance.core.registry.cache.CacheNode;
import
org.apache.shardingsphere.governance.repository.api.listener.DataChangedEvent;
import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
import org.apache.shardingsphere.infra.config.RuleConfiguration;
@@ -39,16 +40,13 @@ import java.util.Optional;
*/
public final class RuleChangedListener extends
PostGovernanceRepositoryEventListener<GovernanceEvent> {
- private final RegistryCenterNode registryCenterNode;
-
public RuleChangedListener(final RegistryCenterRepository
registryCenterRepository, final Collection<String> schemaNames) {
- super(registryCenterRepository, new
RegistryCenterNode().getAllRulePaths(schemaNames));
- registryCenterNode = new RegistryCenterNode();
+ super(registryCenterRepository,
SchemaMetadataNode.getAllRulePaths(schemaNames));
}
@Override
protected Optional<GovernanceEvent> createEvent(final DataChangedEvent
event) {
- String schemaName = registryCenterNode.getSchemaName(event.getKey());
+ String schemaName = SchemaMetadataNode.getSchemaName(event.getKey());
if (Strings.isNullOrEmpty(schemaName) ||
Strings.isNullOrEmpty(event.getValue())) {
return Optional.empty();
}
@@ -61,12 +59,12 @@ public final class RuleChangedListener extends
PostGovernanceRepositoryEventList
}
private boolean isRuleChangedEvent(final String schemaName, final String
eventPath) {
- String rulePath = registryCenterNode.getRulePath(schemaName);
+ String rulePath = SchemaMetadataNode.getRulePath(schemaName);
return rulePath.equals(eventPath);
}
private boolean isRuleCachedEvent(final String schemaName, final String
key) {
- String ruleCachePath =
registryCenterNode.getCachePath(registryCenterNode.getRulePath(schemaName));
+ String ruleCachePath =
CacheNode.getCachePath(SchemaMetadataNode.getRulePath(schemaName));
return ruleCachePath.equals(key);
}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/SchemaChangedListener.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/SchemaChangedListener.java
index 6ac0c72..f90cc50 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/SchemaChangedListener.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/SchemaChangedListener.java
@@ -17,14 +17,14 @@
package org.apache.shardingsphere.governance.core.registry.listener.impl;
-import org.apache.shardingsphere.governance.core.registry.RegistryCenterNode;
import
org.apache.shardingsphere.governance.core.registry.listener.PostGovernanceRepositoryEventListener;
import
org.apache.shardingsphere.governance.core.registry.listener.event.GovernanceEvent;
import
org.apache.shardingsphere.governance.core.registry.listener.event.schema.SchemaChangedEvent;
+import
org.apache.shardingsphere.governance.core.registry.service.config.node.SchemaMetadataNode;
import org.apache.shardingsphere.governance.core.yaml.schema.pojo.YamlSchema;
import
org.apache.shardingsphere.governance.core.yaml.schema.swapper.SchemaYamlSwapper;
-import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
import
org.apache.shardingsphere.governance.repository.api.listener.DataChangedEvent;
+import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
import java.util.Collection;
@@ -36,12 +36,12 @@ import java.util.Optional;
public final class SchemaChangedListener extends
PostGovernanceRepositoryEventListener<GovernanceEvent> {
public SchemaChangedListener(final RegistryCenterRepository
registryCenterRepository, final Collection<String> schemaNames) {
- super(registryCenterRepository, new
RegistryCenterNode().getAllMetadataSchemaPaths(schemaNames));
+ super(registryCenterRepository,
SchemaMetadataNode.getAllMetadataSchemaPaths(schemaNames));
}
@Override
protected Optional<GovernanceEvent> createEvent(final DataChangedEvent
event) {
- String schemaName = new
RegistryCenterNode().getSchemaName(event.getKey());
+ String schemaName = SchemaMetadataNode.getSchemaName(event.getKey());
return Optional.of(new SchemaChangedEvent(schemaName, new
SchemaYamlSwapper().swapToObject(YamlEngine.unmarshal(event.getValue(),
YamlSchema.class))));
}
}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/TerminalStateChangedListener.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/TerminalStateChangedListener.java
index a392fc2..c9a51d1 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/TerminalStateChangedListener.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/TerminalStateChangedListener.java
@@ -17,12 +17,12 @@
package org.apache.shardingsphere.governance.core.registry.listener.impl;
-import org.apache.shardingsphere.governance.core.registry.RegistryCenterNode;
import
org.apache.shardingsphere.governance.core.registry.RegistryCenterNodeStatus;
import
org.apache.shardingsphere.governance.core.registry.instance.GovernanceInstance;
import
org.apache.shardingsphere.governance.core.registry.listener.PostGovernanceRepositoryEventListener;
-import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
+import
org.apache.shardingsphere.governance.core.registry.service.state.StatesNode;
import
org.apache.shardingsphere.governance.repository.api.listener.DataChangedEvent;
+import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
import org.apache.shardingsphere.infra.state.StateEvent;
import org.apache.shardingsphere.infra.state.StateType;
@@ -35,7 +35,7 @@ import java.util.Optional;
public final class TerminalStateChangedListener extends
PostGovernanceRepositoryEventListener<StateEvent> {
public TerminalStateChangedListener(final RegistryCenterRepository
registryCenterRepository) {
- super(registryCenterRepository, Collections.singleton(new
RegistryCenterNode().getProxyNodePath(GovernanceInstance.getInstance().getId())));
+ super(registryCenterRepository,
Collections.singleton(StatesNode.getProxyNodePath(GovernanceInstance.getInstance().getId())));
}
@Override
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/config/impl/DataSourceRegistryService.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/config/impl/DataSourceRegistryService.java
index 36816ee..0970e81 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/config/impl/DataSourceRegistryService.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/config/impl/DataSourceRegistryService.java
@@ -19,10 +19,10 @@ package
org.apache.shardingsphere.governance.core.registry.service.config.impl;
import com.google.common.base.Strings;
import com.google.common.eventbus.Subscribe;
-import org.apache.shardingsphere.governance.core.registry.RegistryCenterNode;
import
org.apache.shardingsphere.governance.core.registry.listener.event.datasource.DataSourceAddedEvent;
import
org.apache.shardingsphere.governance.core.registry.listener.event.datasource.DataSourceAlteredEvent;
import
org.apache.shardingsphere.governance.core.registry.service.config.SchemaBasedRegistryService;
+import
org.apache.shardingsphere.governance.core.registry.service.config.node.SchemaMetadataNode;
import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
import
org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration;
import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
@@ -41,11 +41,8 @@ public final class DataSourceRegistryService implements
SchemaBasedRegistryServi
private final RegistryCenterRepository repository;
- private final RegistryCenterNode node;
-
public DataSourceRegistryService(final RegistryCenterRepository
repository) {
this.repository = repository;
- node = new RegistryCenterNode();
ShardingSphereEventBus.getInstance().register(this);
}
@@ -58,7 +55,7 @@ public final class DataSourceRegistryService implements
SchemaBasedRegistryServi
@Override
public void persist(final String schemaName, final Map<String,
DataSourceConfiguration> dataSourceConfigs) {
- repository.persist(node.getMetadataDataSourcePath(schemaName),
YamlEngine.marshal(swapYamlDataSourceConfiguration(dataSourceConfigs)));
+
repository.persist(SchemaMetadataNode.getMetadataDataSourcePath(schemaName),
YamlEngine.marshal(swapYamlDataSourceConfiguration(dataSourceConfigs)));
}
private Map<String, Map<String, Object>>
swapYamlDataSourceConfiguration(final Map<String, DataSourceConfiguration>
dataSourceConfigs) {
@@ -68,7 +65,7 @@ public final class DataSourceRegistryService implements
SchemaBasedRegistryServi
@Override
public Map<String, DataSourceConfiguration> load(final String schemaName) {
- return isExisted(schemaName) ?
getDataSourceConfigurations(repository.get(node.getMetadataDataSourcePath(schemaName)))
: new LinkedHashMap<>();
+ return isExisted(schemaName) ?
getDataSourceConfigurations(repository.get(SchemaMetadataNode.getMetadataDataSourcePath(schemaName)))
: new LinkedHashMap<>();
}
@SuppressWarnings("unchecked")
@@ -84,7 +81,7 @@ public final class DataSourceRegistryService implements
SchemaBasedRegistryServi
@Override
public boolean isExisted(final String schemaName) {
- return
!Strings.isNullOrEmpty(repository.get(node.getMetadataDataSourcePath(schemaName)));
+ return
!Strings.isNullOrEmpty(repository.get(SchemaMetadataNode.getMetadataDataSourcePath(schemaName)));
}
/**
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/config/impl/GlobalRuleRegistryService.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/config/impl/GlobalRuleRegistryService.java
index 263c420..5501034 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/config/impl/GlobalRuleRegistryService.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/config/impl/GlobalRuleRegistryService.java
@@ -21,8 +21,9 @@ import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import com.google.common.eventbus.Subscribe;
import
org.apache.shardingsphere.authority.api.config.AuthorityRuleConfiguration;
-import org.apache.shardingsphere.governance.core.registry.RegistryCenterNode;
import
org.apache.shardingsphere.governance.core.registry.service.config.GlobalRegistryService;
+import
org.apache.shardingsphere.governance.core.registry.service.config.node.GlobalNode;
+import
org.apache.shardingsphere.governance.core.registry.service.state.StatesNode;
import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
import org.apache.shardingsphere.infra.config.RuleConfiguration;
import
org.apache.shardingsphere.infra.metadata.mapper.event.dcl.impl.CreateUserStatementEvent;
@@ -45,17 +46,14 @@ public final class GlobalRuleRegistryService implements
GlobalRegistryService<Co
private final RegistryCenterRepository repository;
- private final RegistryCenterNode node;
-
public GlobalRuleRegistryService(final RegistryCenterRepository
repository) {
this.repository = repository;
- node = new RegistryCenterNode();
}
@Override
public void persist(final Collection<RuleConfiguration> globalRuleConfigs,
final boolean isOverwrite) {
if (!globalRuleConfigs.isEmpty() && (isOverwrite || !isExisted())) {
- repository.persist(node.getGlobalRuleNode(),
YamlEngine.marshal(new
YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfigurations(globalRuleConfigs)));
+ repository.persist(GlobalNode.getGlobalRuleNode(),
YamlEngine.marshal(new
YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfigurations(globalRuleConfigs)));
}
}
@@ -63,11 +61,12 @@ public final class GlobalRuleRegistryService implements
GlobalRegistryService<Co
@SuppressWarnings("unchecked")
public Collection<RuleConfiguration> load() {
return isExisted()
- ? new
YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(YamlEngine.unmarshal(repository.get(node.getGlobalRuleNode()),
Collection.class)) : Collections.emptyList();
+ ? new
YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(YamlEngine.unmarshal(repository.get(GlobalNode.getGlobalRuleNode()),
Collection.class))
+ : Collections.emptyList();
}
private boolean isExisted() {
- return
!Strings.isNullOrEmpty(repository.get(node.getGlobalRuleNode()));
+ return
!Strings.isNullOrEmpty(repository.get(GlobalNode.getGlobalRuleNode()));
}
@@ -94,18 +93,18 @@ public final class GlobalRuleRegistryService implements
GlobalRegistryService<Co
@Subscribe
public void update(final GrantStatementEvent event) {
if (!event.getUsers().isEmpty()) {
- repository.persist(node.getPrivilegeNodePath(),
YamlEngine.marshal(YamlUsersConfigurationConverter.convertYamlUserConfigurations(event.getUsers())));
+ repository.persist(StatesNode.getPrivilegeNodePath(),
YamlEngine.marshal(YamlUsersConfigurationConverter.convertYamlUserConfigurations(event.getUsers())));
}
}
- private void refreshAuthorityRuleConfiguration(final
AuthorityRuleConfiguration authRuleConfig, final Collection<ShardingSphereUser>
createUsers) {
- Collection<ShardingSphereUser> oldUsers = authRuleConfig.getUsers();
- Collection<ShardingSphereUser> newUsers = oldUsers.isEmpty() ?
createUsers : getChangedShardingSphereUsers(oldUsers, createUsers);
- authRuleConfig.getUsers().removeAll(oldUsers);
- authRuleConfig.getUsers().addAll(newUsers);
+ private void refreshAuthorityRuleConfiguration(final
AuthorityRuleConfiguration authorityRuleConfig, final
Collection<ShardingSphereUser> createdUsers) {
+ Collection<ShardingSphereUser> oldUsers =
authorityRuleConfig.getUsers();
+ Collection<ShardingSphereUser> newUsers = oldUsers.isEmpty() ?
createdUsers : getChangedUsers(oldUsers, createdUsers);
+ authorityRuleConfig.getUsers().removeAll(oldUsers);
+ authorityRuleConfig.getUsers().addAll(newUsers);
}
- private Collection<ShardingSphereUser> getChangedShardingSphereUsers(final
Collection<ShardingSphereUser> oldUsers, final Collection<ShardingSphereUser>
newUsers) {
+ private Collection<ShardingSphereUser> getChangedUsers(final
Collection<ShardingSphereUser> oldUsers, final Collection<ShardingSphereUser>
newUsers) {
Collection<ShardingSphereUser> result = new LinkedList<>(oldUsers);
ShardingSphereUsers shardingSphereUsers = new
ShardingSphereUsers(oldUsers);
for (ShardingSphereUser each : newUsers) {
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/config/impl/PropertiesRegistryService.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/config/impl/PropertiesRegistryService.java
index 8ee605d..97d47f7 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/config/impl/PropertiesRegistryService.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/config/impl/PropertiesRegistryService.java
@@ -19,8 +19,8 @@ package
org.apache.shardingsphere.governance.core.registry.service.config.impl;
import com.google.common.base.Strings;
import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.governance.core.registry.RegistryCenterNode;
import
org.apache.shardingsphere.governance.core.registry.service.config.GlobalRegistryService;
+import
org.apache.shardingsphere.governance.core.registry.service.config.node.GlobalNode;
import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
@@ -34,21 +34,19 @@ public final class PropertiesRegistryService implements
GlobalRegistryService<Pr
private final RegistryCenterRepository repository;
- private final RegistryCenterNode node = new RegistryCenterNode();
-
@Override
public void persist(final Properties props, final boolean isOverwrite) {
if (!props.isEmpty() && (isOverwrite || !isExisted())) {
- repository.persist(node.getPropsPath(), YamlEngine.marshal(props));
+ repository.persist(GlobalNode.getPropsPath(),
YamlEngine.marshal(props));
}
}
private boolean isExisted() {
- return !Strings.isNullOrEmpty(repository.get(node.getPropsPath()));
+ return
!Strings.isNullOrEmpty(repository.get(GlobalNode.getPropsPath()));
}
@Override
public Properties load() {
- return Strings.isNullOrEmpty(repository.get(node.getPropsPath())) ?
new Properties() : YamlEngine.unmarshal(repository.get(node.getPropsPath()),
Properties.class);
+ return
Strings.isNullOrEmpty(repository.get(GlobalNode.getPropsPath())) ? new
Properties() : YamlEngine.unmarshal(repository.get(GlobalNode.getPropsPath()),
Properties.class);
}
}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/config/impl/SchemaRuleRegistryService.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/config/impl/SchemaRuleRegistryService.java
index 9c8d4e1..8cae1d2 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/config/impl/SchemaRuleRegistryService.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/config/impl/SchemaRuleRegistryService.java
@@ -19,11 +19,11 @@ package
org.apache.shardingsphere.governance.core.registry.service.config.impl;
import com.google.common.base.Strings;
import com.google.common.eventbus.Subscribe;
-import org.apache.shardingsphere.governance.core.registry.RegistryCenterNode;
import
org.apache.shardingsphere.governance.core.registry.checker.RuleConfigurationChecker;
import
org.apache.shardingsphere.governance.core.registry.checker.RuleConfigurationCheckerFactory;
import
org.apache.shardingsphere.governance.core.registry.listener.event.rule.RuleConfigurationsAlteredEvent;
import
org.apache.shardingsphere.governance.core.registry.service.config.SchemaBasedRegistryService;
+import
org.apache.shardingsphere.governance.core.registry.service.config.node.SchemaMetadataNode;
import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
import org.apache.shardingsphere.infra.config.RuleConfiguration;
import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
@@ -42,11 +42,8 @@ public final class SchemaRuleRegistryService implements
SchemaBasedRegistryServi
private final RegistryCenterRepository repository;
- private final RegistryCenterNode node;
-
public SchemaRuleRegistryService(final RegistryCenterRepository
repository) {
this.repository = repository;
- node = new RegistryCenterNode();
ShardingSphereEventBus.getInstance().register(this);
}
@@ -59,7 +56,7 @@ public final class SchemaRuleRegistryService implements
SchemaBasedRegistryServi
@Override
public void persist(final String schemaName, final
Collection<RuleConfiguration> configs) {
- repository.persist(node.getRulePath(schemaName),
YamlEngine.marshal(createYamlRuleConfigurations(schemaName, configs)));
+ repository.persist(SchemaMetadataNode.getRulePath(schemaName),
YamlEngine.marshal(createYamlRuleConfigurations(schemaName, configs)));
}
private Collection<YamlRuleConfiguration>
createYamlRuleConfigurations(final String schemaName, final
Collection<RuleConfiguration> ruleConfigs) {
@@ -78,12 +75,13 @@ public final class SchemaRuleRegistryService implements
SchemaBasedRegistryServi
@SuppressWarnings("unchecked")
public Collection<RuleConfiguration> load(final String schemaName) {
return isExisted(schemaName)
- ? new
YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(YamlEngine.unmarshal(repository.get(node.getRulePath(schemaName)),
Collection.class)) : new LinkedList<>();
+ ? new
YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(YamlEngine.unmarshal(repository.get(SchemaMetadataNode.getRulePath(schemaName)),
Collection.class))
+ : new LinkedList<>();
}
@Override
public boolean isExisted(final String schemaName) {
- return
!Strings.isNullOrEmpty(repository.get(node.getRulePath(schemaName)));
+ return
!Strings.isNullOrEmpty(repository.get(SchemaMetadataNode.getRulePath(schemaName)));
}
/**
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/config/node/GlobalNode.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/config/node/GlobalNode.java
new file mode 100644
index 0000000..25ac806
--- /dev/null
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/config/node/GlobalNode.java
@@ -0,0 +1,51 @@
+/*
+ * 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.governance.core.registry.service.config.node;
+
+import com.google.common.base.Joiner;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+
+/**
+ * Global node.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class GlobalNode {
+
+ private static final String RULE_NODE = "rules";
+
+ private static final String PROPS_NODE = "props";
+
+ /**
+ * Get global rule node path.
+ *
+ * @return global rule node path
+ */
+ public static String getGlobalRuleNode() {
+ return Joiner.on("/").join("", RULE_NODE);
+ }
+
+ /**
+ * Get properties path.
+ *
+ * @return properties path
+ */
+ public static String getPropsPath() {
+ return Joiner.on("/").join("", PROPS_NODE);
+ }
+}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/config/node/SchemaMetadataNode.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/config/node/SchemaMetadataNode.java
new file mode 100644
index 0000000..69f5233
--- /dev/null
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/config/node/SchemaMetadataNode.java
@@ -0,0 +1,155 @@
+/*
+ * 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.governance.core.registry.service.config.node;
+
+import com.google.common.base.Joiner;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+/**
+ * Schema metadata node.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class SchemaMetadataNode {
+
+ private static final String ROOT_NODE = "metadata";
+
+ private static final String DATA_SOURCE_NODE = "dataSources";
+
+ private static final String RULE_NODE = "rules";
+
+ private static final String SCHEMA_NODE = "schema";
+
+ /**
+ * Get metadata data source path.
+ *
+ * @param schemaName schema name
+ * @return data source path
+ */
+ public static String getMetadataDataSourcePath(final String schemaName) {
+ return getFullMetadataPath(schemaName, DATA_SOURCE_NODE);
+ }
+
+ /**
+ * Get metadata node path.
+ *
+ * @return metadata node path
+ */
+ public static String getMetadataNodePath() {
+ return Joiner.on("/").join("", ROOT_NODE);
+ }
+
+ /**
+ * Get schema name path.
+ *
+ * @param schemaName schema name
+ * @return schema name path
+ */
+ public static String getSchemaNamePath(final String schemaName) {
+ return Joiner.on("/").join("", ROOT_NODE, schemaName);
+ }
+
+ /**
+ * Get rule path.
+ *
+ * @param schemaName schema name
+ * @return rule path
+ */
+ public static String getRulePath(final String schemaName) {
+ return getFullMetadataPath(schemaName, RULE_NODE);
+ }
+
+ /**
+ * Get metadata schema path.
+ *
+ * @param schemaName schema name
+ * @return schema path
+ */
+ public static String getMetadataSchemaPath(final String schemaName) {
+ return getFullMetadataPath(schemaName, SCHEMA_NODE);
+ }
+
+ private static String getFullMetadataPath(final String schemaName, final
String node) {
+ return Joiner.on("/").join("", ROOT_NODE, schemaName, node);
+ }
+
+ /**
+ * Get schema name.
+ *
+ * @param configurationNodeFullPath configuration node full path
+ * @return schema name
+ */
+ public static String getSchemaName(final String configurationNodeFullPath)
{
+ Pattern pattern = Pattern.compile(getMetadataNodePath() + "/(\\w+)" +
"(/datasource|/rule)?", Pattern.CASE_INSENSITIVE);
+ Matcher matcher = pattern.matcher(configurationNodeFullPath);
+ return matcher.find() ? matcher.group(1) : "";
+ }
+
+ /**
+ * Get all schema config paths.
+ *
+ * @param schemaNames schema names
+ * @return config paths list
+ */
+ public static Collection<String> getAllSchemaConfigPaths(final
Collection<String> schemaNames) {
+ Collection<String> result = new
ArrayList<>(Collections.singleton(getMetadataNodePath()));
+ for (String schemaName : schemaNames) {
+ result.add(getRulePath(schemaName));
+ result.add(getMetadataDataSourcePath(schemaName));
+ result.add(getMetadataSchemaPath(schemaName));
+ }
+ return result;
+ }
+
+ /**
+ * Get all metadata schema paths.
+ *
+ * @param schemaNames schema names
+ * @return list of schema path
+ */
+ public static Collection<String> getAllMetadataSchemaPaths(final
Collection<String> schemaNames) {
+ return
schemaNames.stream().map(SchemaMetadataNode::getMetadataSchemaPath).collect(Collectors.toList());
+ }
+
+ /**
+ * Get all rule paths.
+ *
+ * @param schemaNames schema names
+ * @return list of rule path
+ */
+ public static Collection<String> getAllRulePaths(final Collection<String>
schemaNames) {
+ return
schemaNames.stream().map(SchemaMetadataNode::getRulePath).collect(Collectors.toList());
+ }
+
+ /**
+ * Get all data source paths.
+ *
+ * @param schemaNames schema names
+ * @return list of data source path
+ */
+ public static Collection<String> getAllDataSourcePaths(final
Collection<String> schemaNames) {
+ return
schemaNames.stream().map(SchemaMetadataNode::getMetadataDataSourcePath).collect(Collectors.toList());
+ }
+}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/process/ProcessNode.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/process/ProcessNode.java
new file mode 100644
index 0000000..39c429e
--- /dev/null
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/process/ProcessNode.java
@@ -0,0 +1,50 @@
+/*
+ * 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.governance.core.registry.service.process;
+
+import com.google.common.base.Joiner;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+
+/**
+ * Process node.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class ProcessNode {
+
+ private static final String EXECUTION_NODE_NAME = "executionnodes";
+
+ /**
+ * Get execution nodes path.
+ *
+ * @return execution nodes path
+ */
+ public static String getExecutionNodesPath() {
+ return Joiner.on("/").join("", EXECUTION_NODE_NAME);
+ }
+
+ /**
+ * Get execution path.
+ *
+ * @param executionId execution id
+ * @return execution path
+ */
+ public static String getExecutionPath(final String executionId) {
+ return Joiner.on("/").join("", EXECUTION_NODE_NAME, executionId);
+ }
+}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/process/ProcessRegistrySubscriber.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/process/ProcessRegistrySubscriber.java
index d43630b..d670a65 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/process/ProcessRegistrySubscriber.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/process/ProcessRegistrySubscriber.java
@@ -18,7 +18,6 @@
package org.apache.shardingsphere.governance.core.registry.service.process;
import com.google.common.eventbus.Subscribe;
-import org.apache.shardingsphere.governance.core.registry.RegistryCenterNode;
import
org.apache.shardingsphere.governance.core.registry.listener.event.invocation.ExecuteProcessReportEvent;
import
org.apache.shardingsphere.governance.core.registry.listener.event.invocation.ExecuteProcessSummaryReportEvent;
import
org.apache.shardingsphere.governance.core.registry.listener.event.invocation.ExecuteProcessUnitReportEvent;
@@ -44,11 +43,8 @@ public final class ProcessRegistrySubscriber {
private final RegistryCenterRepository repository;
- private final RegistryCenterNode node;
-
public ProcessRegistrySubscriber(final RegistryCenterRepository
repository) {
this.repository = repository;
- node = new RegistryCenterNode();
ShardingSphereEventBus.getInstance().register(this);
}
@@ -59,8 +55,8 @@ public final class ProcessRegistrySubscriber {
*/
@Subscribe
public void loadShowProcessListData(final ShowProcessListRequestEvent
event) {
- List<String> childrenKeys =
repository.getChildrenKeys(node.getExecutionNodesPath());
- Collection<String> processListData = childrenKeys.stream().map(key ->
repository.get(node.getExecutionPath(key))).collect(Collectors.toList());
+ List<String> childrenKeys =
repository.getChildrenKeys(ProcessNode.getExecutionNodesPath());
+ Collection<String> processListData = childrenKeys.stream().map(key ->
repository.get(ProcessNode.getExecutionPath(key))).collect(Collectors.toList());
ShardingSphereEventBus.getInstance().post(new
ShowProcessListResponseEvent(processListData));
}
@@ -72,7 +68,7 @@ public final class ProcessRegistrySubscriber {
@Subscribe
public void reportExecuteProcessSummary(final
ExecuteProcessSummaryReportEvent event) {
ExecuteProcessContext executeProcessContext =
event.getExecuteProcessContext();
-
repository.persist(node.getExecutionPath(executeProcessContext.getExecutionID()),
YamlEngine.marshal(new YamlExecuteProcessContext(executeProcessContext)));
+
repository.persist(ProcessNode.getExecutionPath(executeProcessContext.getExecutionID()),
YamlEngine.marshal(new YamlExecuteProcessContext(executeProcessContext)));
}
/**
@@ -83,7 +79,7 @@ public final class ProcessRegistrySubscriber {
@Subscribe
public void reportExecuteProcessUnit(final ExecuteProcessUnitReportEvent
event) {
// TODO lock on the same jvm
- String executionPath = node.getExecutionPath(event.getExecutionID());
+ String executionPath =
ProcessNode.getExecutionPath(event.getExecutionID());
YamlExecuteProcessContext yamlExecuteProcessContext =
YamlEngine.unmarshal(repository.get(executionPath),
YamlExecuteProcessContext.class);
ExecuteProcessUnit executeProcessUnit = event.getExecuteProcessUnit();
for (YamlExecuteProcessUnit unit :
yamlExecuteProcessContext.getUnitStatuses()) {
@@ -101,7 +97,7 @@ public final class ProcessRegistrySubscriber {
*/
@Subscribe
public void reportExecuteProcess(final ExecuteProcessReportEvent event) {
- String executionPath = node.getExecutionPath(event.getExecutionID());
+ String executionPath =
ProcessNode.getExecutionPath(event.getExecutionID());
YamlExecuteProcessContext yamlExecuteProcessContext =
YamlEngine.unmarshal(repository.get(executionPath),
YamlExecuteProcessContext.class);
for (YamlExecuteProcessUnit unit :
yamlExecuteProcessContext.getUnitStatuses()) {
if (unit.getStatus() !=
ExecuteProcessConstants.EXECUTE_STATUS_DONE) {
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/schema/SchemaRegistryService.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/schema/SchemaRegistryService.java
index 63500a4..988f2ee 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/schema/SchemaRegistryService.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/schema/SchemaRegistryService.java
@@ -21,9 +21,10 @@ import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import com.google.common.base.Strings;
import com.google.common.eventbus.Subscribe;
-import org.apache.shardingsphere.governance.core.registry.RegistryCenterNode;
import
org.apache.shardingsphere.governance.core.registry.listener.event.metadata.MetaDataCreatedEvent;
import
org.apache.shardingsphere.governance.core.registry.listener.event.metadata.MetaDataDroppedEvent;
+import
org.apache.shardingsphere.governance.core.registry.service.config.node.SchemaMetadataNode;
+import org.apache.shardingsphere.governance.core.registry.util.SchemaNameUtil;
import org.apache.shardingsphere.governance.core.yaml.schema.pojo.YamlSchema;
import
org.apache.shardingsphere.governance.core.yaml.schema.swapper.SchemaYamlSwapper;
import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
@@ -44,11 +45,8 @@ public final class SchemaRegistryService {
private final RegistryCenterRepository repository;
- private final RegistryCenterNode node;
-
public SchemaRegistryService(final RegistryCenterRepository repository) {
this.repository = repository;
- node = new RegistryCenterNode();
ShardingSphereEventBus.getInstance().register(this);
}
@@ -59,7 +57,7 @@ public final class SchemaRegistryService {
* @param schema schema to be persisted
*/
public void persist(final String schemaName, final ShardingSphereSchema
schema) {
- repository.persist(node.getMetadataSchemaPath(schemaName),
YamlEngine.marshal(new SchemaYamlSwapper().swapToYamlConfiguration(schema)));
+
repository.persist(SchemaMetadataNode.getMetadataSchemaPath(schemaName),
YamlEngine.marshal(new SchemaYamlSwapper().swapToYamlConfiguration(schema)));
}
/**
@@ -68,7 +66,7 @@ public final class SchemaRegistryService {
* @param schemaName schema name to be deleted
*/
public void delete(final String schemaName) {
- repository.delete(node.getSchemaNamePath(schemaName));
+ repository.delete(SchemaMetadataNode.getSchemaNamePath(schemaName));
}
/**
@@ -78,7 +76,7 @@ public final class SchemaRegistryService {
* @return Loaded schema
*/
public Optional<ShardingSphereSchema> load(final String schemaName) {
- String path = repository.get(node.getMetadataSchemaPath(schemaName));
+ String path =
repository.get(SchemaMetadataNode.getMetadataSchemaPath(schemaName));
return Strings.isNullOrEmpty(path) ? Optional.empty() :
Optional.of(new SchemaYamlSwapper().swapToObject(YamlEngine.unmarshal(path,
YamlSchema.class)));
}
@@ -88,8 +86,8 @@ public final class SchemaRegistryService {
* @return all schema names
*/
public Collection<String> loadAllNames() {
- String schemaNames = repository.get(node.getMetadataNodePath());
- return Strings.isNullOrEmpty(schemaNames) ? new LinkedList<>() :
node.splitSchemaName(schemaNames);
+ String schemaNames =
repository.get(SchemaMetadataNode.getMetadataNodePath());
+ return Strings.isNullOrEmpty(schemaNames) ? new LinkedList<>() :
SchemaNameUtil.splitSchemaName(schemaNames);
}
/**
@@ -99,11 +97,11 @@ public final class SchemaRegistryService {
*/
@Subscribe
public void update(final MetaDataCreatedEvent event) {
- String schemaNames = repository.get(node.getMetadataNodePath());
+ String schemaNames =
repository.get(SchemaMetadataNode.getMetadataNodePath());
Collection<String> schemas = Strings.isNullOrEmpty(schemaNames) ? new
LinkedHashSet<>() : new
LinkedHashSet<>(Splitter.on(",").splitToList(schemaNames));
if (!schemas.contains(event.getSchemaName())) {
schemas.add(event.getSchemaName());
- repository.persist(node.getMetadataNodePath(),
Joiner.on(",").join(schemas));
+ repository.persist(SchemaMetadataNode.getMetadataNodePath(),
Joiner.on(",").join(schemas));
}
}
@@ -124,11 +122,11 @@ public final class SchemaRegistryService {
*/
@Subscribe
public void update(final MetaDataDroppedEvent event) {
- String schemaNames = repository.get(node.getMetadataNodePath());
+ String schemaNames =
repository.get(SchemaMetadataNode.getMetadataNodePath());
Collection<String> schemas = Strings.isNullOrEmpty(schemaNames) ? new
LinkedHashSet<>() : new
LinkedHashSet<>(Splitter.on(",").splitToList(schemaNames));
if (schemas.contains(event.getSchemaName())) {
schemas.remove(event.getSchemaName());
- repository.persist(node.getMetadataNodePath(),
Joiner.on(",").join(schemas));
+ repository.persist(SchemaMetadataNode.getMetadataNodePath(),
Joiner.on(",").join(schemas));
}
}
}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/state/DataSourceStatusRegistryService.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/state/DataSourceStatusRegistryService.java
index 705c6bc..c89559d 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/state/DataSourceStatusRegistryService.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/state/DataSourceStatusRegistryService.java
@@ -19,7 +19,6 @@ package
org.apache.shardingsphere.governance.core.registry.service.state;
import com.google.common.base.Strings;
import com.google.common.eventbus.Subscribe;
-import org.apache.shardingsphere.governance.core.registry.RegistryCenterNode;
import
org.apache.shardingsphere.governance.core.registry.RegistryCenterNodeStatus;
import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
@@ -36,11 +35,8 @@ public final class DataSourceStatusRegistryService {
private final RegistryCenterRepository repository;
- private final RegistryCenterNode node;
-
public DataSourceStatusRegistryService(final RegistryCenterRepository
repository) {
this.repository = repository;
- node = new RegistryCenterNode();
ShardingSphereEventBus.getInstance().register(this);
}
@@ -56,11 +52,11 @@ public final class DataSourceStatusRegistryService {
}
private Collection<String> loadDataSources(final String schemaName) {
- return repository.getChildrenKeys(node.getSchemaPath(schemaName));
+ return
repository.getChildrenKeys(StatesNode.getSchemaPath(schemaName));
}
private String getDataSourceNodeData(final String schemaName, final String
dataSourceName) {
- return repository.get(node.getDataSourcePath(schemaName,
dataSourceName));
+ return repository.get(StatesNode.getDataSourcePath(schemaName,
dataSourceName));
}
/**
@@ -71,7 +67,7 @@ public final class DataSourceStatusRegistryService {
@Subscribe
public void update(final DataSourceDisabledEvent event) {
String value = event.isDisabled() ?
RegistryCenterNodeStatus.DISABLED.toString() : "";
- repository.persist(node.getDataSourcePath(event.getSchemaName(),
event.getDataSourceName()), value);
+ repository.persist(StatesNode.getDataSourcePath(event.getSchemaName(),
event.getDataSourceName()), value);
}
/**
@@ -81,6 +77,6 @@ public final class DataSourceStatusRegistryService {
*/
@Subscribe
public void update(final PrimaryDataSourceEvent event) {
-
repository.persist(node.getPrimaryDataSourcePath(event.getSchemaName(),
event.getGroupName()), event.getDataSourceName());
+
repository.persist(StatesNode.getPrimaryDataSourcePath(event.getSchemaName(),
event.getGroupName()), event.getDataSourceName());
}
}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/state/LockRegistryService.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/state/LockRegistryService.java
index 1c9e4d9..8f4251c 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/state/LockRegistryService.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/state/LockRegistryService.java
@@ -21,7 +21,6 @@ import com.google.common.base.Joiner;
import com.google.common.base.Strings;
import org.apache.shardingsphere.governance.core.lock.node.LockAck;
import org.apache.shardingsphere.governance.core.lock.node.LockNode;
-import org.apache.shardingsphere.governance.core.registry.RegistryCenterNode;
import
org.apache.shardingsphere.governance.core.registry.instance.GovernanceInstance;
import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
@@ -41,14 +40,11 @@ public final class LockRegistryService {
private final RegistryCenterRepository repository;
- private final RegistryCenterNode node;
-
private final LockNode lockNode;
public LockRegistryService(final RegistryCenterRepository repository) {
instanceId = GovernanceInstance.getInstance().getId();
this.repository = repository;
- node = new RegistryCenterNode();
lockNode = new LockNode();
initLockNode();
}
@@ -130,7 +126,7 @@ public final class LockRegistryService {
}
private boolean checkAck(final String lockName, final String ackValue) {
- Collection<String> instanceIds =
repository.getChildrenKeys(node.getProxyNodesPath());
+ Collection<String> instanceIds =
repository.getChildrenKeys(StatesNode.getProxyNodesPath());
for (int i = 0; i < CHECK_ACK_MAXIMUM; i++) {
if (check(instanceIds, lockName, ackValue)) {
return true;
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/state/StatesNode.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/state/StatesNode.java
new file mode 100644
index 0000000..f3627cb
--- /dev/null
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/state/StatesNode.java
@@ -0,0 +1,185 @@
+/*
+ * 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.governance.core.registry.service.state;
+
+import com.google.common.base.Joiner;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import
org.apache.shardingsphere.governance.core.registry.schema.GovernanceSchema;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Optional;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * States node.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class StatesNode {
+
+ private static final String ROOT_NODE = "states";
+
+ private static final String PROXY_NODE = "proxynodes";
+
+ private static final String DATA_NODE = "datanodes";
+
+ private static final String PRIMARY_NODE = "primarynodes";
+
+ private static final String PRIVILEGE_NODE = "privilegenode";
+
+ /**
+ * Get proxy node path.
+ *
+ * @param instanceId instance id
+ * @return proxy node path
+ */
+ public static String getProxyNodePath(final String instanceId) {
+ return Joiner.on("/").join("", ROOT_NODE, PROXY_NODE, instanceId);
+ }
+
+ /**
+ * Get data nodes path.
+ *
+ * @return data nodes path
+ */
+ public static String getDataNodesPath() {
+ return Joiner.on("/").join("", ROOT_NODE, DATA_NODE);
+ }
+
+ /**
+ * Get primary nodes path.
+ *
+ * @return primary nodes path
+ */
+ public static String getPrimaryNodesPath() {
+ return Joiner.on("/").join("", ROOT_NODE, PRIMARY_NODE);
+ }
+
+ /**
+ * Get schema path.
+ *
+ * @param schemaName schema name
+ * @return schema path
+ */
+ public static String getSchemaPath(final String schemaName) {
+ return Joiner.on("/").join("", ROOT_NODE, DATA_NODE, schemaName);
+ }
+
+ /**
+ * Get primary nodes schema path.
+ *
+ * @param schemaName schema name
+ * @return schema path
+ */
+ public static String getPrimaryNodesSchemaPath(final String schemaName) {
+ return Joiner.on("/").join("", ROOT_NODE, PRIMARY_NODE, schemaName);
+ }
+
+ /**
+ * Get data source path.
+ *
+ * @param schemaName schema name
+ * @param dataSourceName data source name
+ * @return data source path
+ */
+ public static String getDataSourcePath(final String schemaName, final
String dataSourceName) {
+ return Joiner.on("/").join("", ROOT_NODE, DATA_NODE, schemaName,
dataSourceName);
+ }
+
+ /**
+ * Get primary data source path.
+ *
+ * @param schemaName schema name
+ * @param groupName group name
+ * @return data source path
+ */
+ public static String getPrimaryDataSourcePath(final String schemaName,
final String groupName) {
+ return Joiner.on("/").join("", ROOT_NODE, PRIMARY_NODE, schemaName,
groupName);
+ }
+
+ /**
+ * Get governance schema.
+ *
+ * @param dataSourceNodeFullPath data source node full path
+ * @return governance schema
+ */
+ public static Optional<GovernanceSchema> getGovernanceSchema(final String
dataSourceNodeFullPath) {
+ Pattern pattern = Pattern.compile(getDataNodesPath() + "/" +
"(\\w+)/(\\S+)$", Pattern.CASE_INSENSITIVE);
+ Matcher matcher = pattern.matcher(dataSourceNodeFullPath);
+ return matcher.find() ? Optional.of(new
GovernanceSchema(matcher.group(1), matcher.group(2))) : Optional.empty();
+ }
+
+ /**
+ * Get primary nodes governance schema.
+ *
+ * @param dataSourceNodeFullPath data source node full path
+ * @return primary nodes governance schema
+ */
+ public static Optional<GovernanceSchema>
getPrimaryNodesGovernanceSchema(final String dataSourceNodeFullPath) {
+ Pattern pattern = Pattern.compile(getPrimaryNodesPath() + "/" +
"(\\w+)/(\\w+)$", Pattern.CASE_INSENSITIVE);
+ Matcher matcher = pattern.matcher(dataSourceNodeFullPath);
+ return matcher.find() ? Optional.of(new
GovernanceSchema(matcher.group(1), matcher.group(2))) : Optional.empty();
+ }
+
+ /**
+ * Is primary data source path.
+ *
+ * @param dataSourceNodeFullPath data source node full path
+ * @return is primary data source path
+ */
+ public static boolean isPrimaryDataSourcePath(final String
dataSourceNodeFullPath) {
+ Pattern pattern = Pattern.compile(getPrimaryNodesPath() + "/" +
"(\\w+)/(\\w+)$", Pattern.CASE_INSENSITIVE);
+ Matcher matcher = pattern.matcher(dataSourceNodeFullPath);
+ return matcher.find();
+ }
+
+ /**
+ * Get all schema path.
+ *
+ * @param schemaNames collection of schema name
+ * @return collection of schema path
+ */
+ public static Collection<String> getAllSchemaPaths(final
Collection<String> schemaNames) {
+ Collection<String> result = new ArrayList<>(schemaNames.size());
+ for (String schemaName : schemaNames) {
+ result.add(getSchemaPath(schemaName));
+ result.add(getPrimaryNodesSchemaPath(schemaName));
+ }
+ return result;
+ }
+
+ /**
+ * Get proxy nodes path.
+ *
+ * @return proxy nodes path
+ */
+ public static String getProxyNodesPath() {
+ return Joiner.on("/").join("", ROOT_NODE, PROXY_NODE);
+ }
+
+ /**
+ * Get privilege node path.
+ *
+ * @return privilege node path
+ */
+ public static String getPrivilegeNodePath() {
+ return Joiner.on("/").join("", ROOT_NODE, PRIVILEGE_NODE);
+ }
+}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/util/SchemaNameUtil.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/util/SchemaNameUtil.java
new file mode 100644
index 0000000..7bab669
--- /dev/null
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/util/SchemaNameUtil.java
@@ -0,0 +1,45 @@
+/*
+ * 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.governance.core.registry.util;
+
+import com.google.common.base.Splitter;
+import com.google.common.base.Strings;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+
+import java.util.Collection;
+import java.util.Collections;
+
+/**
+ * Schema name utility.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class SchemaNameUtil {
+
+ private static final String SEPARATOR = ",";
+
+ /**
+ * Split schema name.
+ *
+ * @param schemaNames schema names
+ * @return schema names
+ */
+ public static Collection<String> splitSchemaName(final String schemaNames)
{
+ return Strings.isNullOrEmpty(schemaNames) ? Collections.emptyList() :
Splitter.on(SEPARATOR).splitToList(schemaNames);
+ }
+}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/facade/GovernanceFacadeTest.java
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/facade/GovernanceFacadeTest.java
index 35942f0..b2a6efd 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/facade/GovernanceFacadeTest.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/facade/GovernanceFacadeTest.java
@@ -76,7 +76,7 @@ public final class GovernanceFacadeTest {
governanceFacade.onlineInstance(Collections.singletonMap("sharding_db",
dataSourceConfigs), schemaRuleConfigs, globalRuleConfigs, props);
verify(registryCenter).persistConfigurations(Collections.singletonMap("sharding_db",
dataSourceConfigs), schemaRuleConfigs, globalRuleConfigs, props, false);
verify(registryCenter).registerInstanceOnline();
- verify(registryCenter).initNodes();
+ verify(registryCenter).initStateNodes();
verify(listenerManager).initListeners();
}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterNodeTest.java
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterNodeTest.java
deleted file mode 100644
index f3e3326..0000000
---
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterNodeTest.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.governance.core.registry;
-
-import
org.apache.shardingsphere.governance.core.registry.schema.GovernanceSchema;
-import org.apache.shardingsphere.infra.database.DefaultSchema;
-import org.junit.Test;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Optional;
-
-import static org.hamcrest.CoreMatchers.hasItem;
-import static org.hamcrest.CoreMatchers.hasItems;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-
-public final class RegistryCenterNodeTest {
-
- private final RegistryCenterNode registryCenterNode = new
RegistryCenterNode();
-
- @Test
- public void assertGetProxyNodePath() {
- assertThat(registryCenterNode.getProxyNodePath("testId"),
is("/states/proxynodes/testId"));
- }
-
- @Test
- public void assertGetDataNodesPath() {
- assertThat(registryCenterNode.getDataNodesPath(),
is("/states/datanodes"));
- }
-
- @Test
- public void assertGetGovernanceSchema() {
- Optional<GovernanceSchema> actual =
registryCenterNode.getGovernanceSchema("/states/datanodes/replica_query_db/replica_ds_0");
- assertTrue(actual.isPresent());
- assertThat(actual.get().getSchemaName(), is("replica_query_db"));
- assertThat(actual.get().getDataSourceName(), is("replica_ds_0"));
- }
-
- @Test
- public void assertGetGovernanceSchemaForIpDataSourceName() {
- Optional<GovernanceSchema> actual =
registryCenterNode.getGovernanceSchema("/states/datanodes/replica_query_db/127.0.0.1");
- assertTrue(actual.isPresent());
- assertThat(actual.get().getSchemaName(), is("replica_query_db"));
- assertThat(actual.get().getDataSourceName(), is("127.0.0.1"));
- }
-
- @Test
- public void assertGetSchemaPath() {
- assertThat(registryCenterNode.getSchemaPath("replica_query_db"),
is("/states/datanodes/replica_query_db"));
- }
-
- @Test
- public void assertGetDataSourcePath() {
- assertThat(registryCenterNode.getDataSourcePath("replica_query_db",
"replica_ds_0"), is("/states/datanodes/replica_query_db/replica_ds_0"));
- }
-
- @Test
- public void assertGetAllSchemaPaths() {
- Collection<String> schemaPaths =
registryCenterNode.getAllSchemaPaths(Arrays.asList("replica_query_db",
"sharding_db"));
- assertThat(schemaPaths.size(), is(4));
- assertThat(schemaPaths, hasItem("/states/datanodes/replica_query_db"));
- assertThat(schemaPaths, hasItem("/states/datanodes/sharding_db"));
- assertThat(schemaPaths,
hasItem("/states/primarynodes/replica_query_db"));
- assertThat(schemaPaths, hasItem("/states/primarynodes/sharding_db"));
- }
-
- @Test
- public void assertGetRulePath() {
- assertThat(registryCenterNode.getRulePath(DefaultSchema.LOGIC_NAME),
is("/metadata/logic_db/rules"));
- }
-
- @Test
- public void assertGetUsersNodePath() {
- assertThat(registryCenterNode.getUsersNode(), is("/users"));
- }
-
- @Test
- public void assertGetGlobalRuleNodePath() {
- assertThat(registryCenterNode.getGlobalRuleNode(), is("/rules"));
- }
-
- @Test
- public void assertGetPropsPath() {
- assertThat(registryCenterNode.getPropsPath(), is("/props"));
- }
-
- @Test
- public void assertGetSchemaName() {
-
assertThat(registryCenterNode.getSchemaName("/metadata/logic_db/rules"),
is(DefaultSchema.LOGIC_NAME));
- }
-
- @Test
- public void assertGetAllSchemaConfigPaths() {
- Collection<String> actual =
registryCenterNode.getAllSchemaConfigPaths(Collections.singletonList(DefaultSchema.LOGIC_NAME));
- assertThat(actual.size(), is(4));
- assertThat(actual, hasItems("/metadata"));
- assertThat(actual, hasItems("/metadata/logic_db/rules"));
- assertThat(actual, hasItems("/metadata/logic_db/dataSources"));
- assertThat(actual, hasItems("/metadata/logic_db/schema"));
- }
-
- @Test
- public void assertGetSchemaNamePath() {
- assertThat(registryCenterNode.getSchemaNamePath("sharding_db"),
is("/metadata/sharding_db"));
- }
-
- @Test
- public void assertGetTablePath() {
- assertThat(registryCenterNode.getMetadataSchemaPath("sharding_db"),
is("/metadata/sharding_db/schema"));
- }
-
- @Test
- public void assertGetPrivilegeNodePath() {
- assertThat(registryCenterNode.getPrivilegeNodePath(),
is("/states/privilegenode"));
- }
-}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterTest.java
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterTest.java
index 5233531..316b841 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterTest.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterTest.java
@@ -92,7 +92,7 @@ public final class RegistryCenterTest {
@Test
public void assertInitNodes() {
- registryCenter.initNodes();
+ registryCenter.initStateNodes();
verify(registryCenterRepository).persist("/states/datanodes", "");
verify(registryCenterRepository).persist("/states/primarynodes", "");
}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/UserNodeTest.java
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/UserNodeTest.java
new file mode 100644
index 0000000..f62e885
--- /dev/null
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/UserNodeTest.java
@@ -0,0 +1,31 @@
+/*
+ * 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.governance.core.registry;
+
+import org.junit.Test;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+public final class UserNodeTest {
+
+ @Test
+ public void assertGetUsersNodePath() {
+ assertThat(UserNode.getRootNode(), is("/users"));
+ }
+}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/scaling/ScalingRegistrySubscriberTest.java
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/cache/ScalingRegistrySubscriberTest.java
similarity index 95%
rename from
shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/scaling/ScalingRegistrySubscriberTest.java
rename to
shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/cache/ScalingRegistrySubscriberTest.java
index d5132a6..c8ca2e5 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/scaling/ScalingRegistrySubscriberTest.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/cache/ScalingRegistrySubscriberTest.java
@@ -15,10 +15,9 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.governance.core.registry.service.scaling;
+package org.apache.shardingsphere.governance.core.registry.cache;
import lombok.SneakyThrows;
-import org.apache.shardingsphere.governance.core.registry.RegistryCacheManager;
import
org.apache.shardingsphere.governance.core.registry.listener.event.rule.SwitchRuleConfigurationEvent;
import
org.apache.shardingsphere.governance.core.registry.service.config.impl.SchemaRuleRegistryService;
import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/config/node/GlobalNodeTest.java
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/config/node/GlobalNodeTest.java
new file mode 100644
index 0000000..27e0bce
--- /dev/null
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/config/node/GlobalNodeTest.java
@@ -0,0 +1,36 @@
+/*
+ * 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.governance.core.registry.service.config.node;
+
+import org.junit.Test;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+public final class GlobalNodeTest {
+
+ @Test
+ public void assertGetGlobalRuleNodePath() {
+ assertThat(GlobalNode.getGlobalRuleNode(), is("/rules"));
+ }
+
+ @Test
+ public void assertGetPropsPath() {
+ assertThat(GlobalNode.getPropsPath(), is("/props"));
+ }
+}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/config/node/SchemaMetadataNodeTest.java
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/config/node/SchemaMetadataNodeTest.java
new file mode 100644
index 0000000..7f4828d
--- /dev/null
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/config/node/SchemaMetadataNodeTest.java
@@ -0,0 +1,61 @@
+/*
+ * 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.governance.core.registry.service.config.node;
+
+import org.apache.shardingsphere.infra.database.DefaultSchema;
+import org.junit.Test;
+
+import java.util.Collection;
+import java.util.Collections;
+
+import static org.hamcrest.CoreMatchers.hasItems;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+public class SchemaMetadataNodeTest {
+
+ @Test
+ public void assertGetRulePath() {
+ assertThat(SchemaMetadataNode.getRulePath(DefaultSchema.LOGIC_NAME),
is("/metadata/logic_db/rules"));
+ }
+
+ @Test
+ public void assertGetSchemaName() {
+
assertThat(SchemaMetadataNode.getSchemaName("/metadata/logic_db/rules"),
is(DefaultSchema.LOGIC_NAME));
+ }
+
+ @Test
+ public void assertGetAllSchemaConfigPaths() {
+ Collection<String> actual =
SchemaMetadataNode.getAllSchemaConfigPaths(Collections.singletonList(DefaultSchema.LOGIC_NAME));
+ assertThat(actual.size(), is(4));
+ assertThat(actual, hasItems("/metadata"));
+ assertThat(actual, hasItems("/metadata/logic_db/rules"));
+ assertThat(actual, hasItems("/metadata/logic_db/dataSources"));
+ assertThat(actual, hasItems("/metadata/logic_db/schema"));
+ }
+
+ @Test
+ public void assertGetSchemaNamePath() {
+ assertThat(SchemaMetadataNode.getSchemaNamePath("sharding_db"),
is("/metadata/sharding_db"));
+ }
+
+ @Test
+ public void assertGetMetadataSchemaPath() {
+ assertThat(SchemaMetadataNode.getMetadataSchemaPath("sharding_db"),
is("/metadata/sharding_db/schema"));
+ }
+}
\ No newline at end of file
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/state/DataSourceStatusRegistryServiceTest.java
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/state/DataSourceStatusRegistryServiceTest.java
index 3525429..a61a4e8 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/state/DataSourceStatusRegistryServiceTest.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/state/DataSourceStatusRegistryServiceTest.java
@@ -17,7 +17,6 @@
package org.apache.shardingsphere.governance.core.registry.service.state;
-import org.apache.shardingsphere.governance.core.registry.RegistryCenterNode;
import
org.apache.shardingsphere.governance.core.registry.RegistryCenterNodeStatus;
import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
import org.apache.shardingsphere.infra.rule.event.impl.DataSourceDisabledEvent;
@@ -76,7 +75,7 @@ public final class DataSourceStatusRegistryServiceTest {
String dataSourceName = "replica_ds_0";
DataSourceDisabledEvent dataSourceDisabledEvent = new
DataSourceDisabledEvent(schemaName, dataSourceName, isDisabled);
dataSourceStatusRegistryService.update(dataSourceDisabledEvent);
- verify(registryCenterRepository).persist(new
RegistryCenterNode().getDataSourcePath(schemaName, dataSourceName), value);
+
verify(registryCenterRepository).persist(StatesNode.getDataSourcePath(schemaName,
dataSourceName), value);
}
@Test
@@ -86,6 +85,6 @@ public final class DataSourceStatusRegistryServiceTest {
String dataSourceName = "replica_ds_0";
PrimaryDataSourceEvent primaryDataSourceEvent = new
PrimaryDataSourceEvent(schemaName, groupName, dataSourceName);
dataSourceStatusRegistryService.update(primaryDataSourceEvent);
- verify(registryCenterRepository).persist(new
RegistryCenterNode().getPrimaryDataSourcePath(schemaName, groupName),
dataSourceName);
+
verify(registryCenterRepository).persist(StatesNode.getPrimaryDataSourcePath(schemaName,
groupName), dataSourceName);
}
}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/state/StatesNodeTest.java
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/state/StatesNodeTest.java
new file mode 100644
index 0000000..109aab3
--- /dev/null
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/state/StatesNodeTest.java
@@ -0,0 +1,84 @@
+/*
+ * 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.governance.core.registry.service.state;
+
+import
org.apache.shardingsphere.governance.core.registry.schema.GovernanceSchema;
+import org.junit.Test;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Optional;
+
+import static org.hamcrest.CoreMatchers.hasItem;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+
+public final class StatesNodeTest {
+
+ @Test
+ public void assertGetProxyNodePath() {
+ assertThat(StatesNode.getProxyNodePath("testId"),
is("/states/proxynodes/testId"));
+ }
+
+ @Test
+ public void assertGetDataNodesPath() {
+ assertThat(StatesNode.getDataNodesPath(), is("/states/datanodes"));
+ }
+
+ @Test
+ public void assertGetGovernanceSchema() {
+ Optional<GovernanceSchema> actual =
StatesNode.getGovernanceSchema("/states/datanodes/replica_query_db/replica_ds_0");
+ assertTrue(actual.isPresent());
+ assertThat(actual.get().getSchemaName(), is("replica_query_db"));
+ assertThat(actual.get().getDataSourceName(), is("replica_ds_0"));
+ }
+
+ @Test
+ public void assertGetGovernanceSchemaForIpDataSourceName() {
+ Optional<GovernanceSchema> actual =
StatesNode.getGovernanceSchema("/states/datanodes/replica_query_db/127.0.0.1");
+ assertTrue(actual.isPresent());
+ assertThat(actual.get().getSchemaName(), is("replica_query_db"));
+ assertThat(actual.get().getDataSourceName(), is("127.0.0.1"));
+ }
+
+ @Test
+ public void assertGetSchemaPath() {
+ assertThat(StatesNode.getSchemaPath("replica_query_db"),
is("/states/datanodes/replica_query_db"));
+ }
+
+ @Test
+ public void assertGetDataSourcePath() {
+ assertThat(StatesNode.getDataSourcePath("replica_query_db",
"replica_ds_0"), is("/states/datanodes/replica_query_db/replica_ds_0"));
+ }
+
+ @Test
+ public void assertGetAllSchemaPaths() {
+ Collection<String> schemaPaths =
StatesNode.getAllSchemaPaths(Arrays.asList("replica_query_db", "sharding_db"));
+ assertThat(schemaPaths.size(), is(4));
+ assertThat(schemaPaths, hasItem("/states/datanodes/replica_query_db"));
+ assertThat(schemaPaths, hasItem("/states/datanodes/sharding_db"));
+ assertThat(schemaPaths,
hasItem("/states/primarynodes/replica_query_db"));
+ assertThat(schemaPaths, hasItem("/states/primarynodes/sharding_db"));
+ }
+
+ @Test
+ public void assertGetPrivilegeNodePath() {
+ assertThat(StatesNode.getPrivilegeNodePath(),
is("/states/privilegenode"));
+ }
+}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/initializer/impl/GovernanceBootstrapInitializerTest.java
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/initializer/impl/GovernanceBootstrapInitializerTest.java
index 0403b0c..1c43ee3 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/initializer/impl/GovernanceBootstrapInitializerTest.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/initializer/impl/GovernanceBootstrapInitializerTest.java
@@ -20,7 +20,9 @@ package org.apache.shardingsphere.proxy.initializer.impl;
import lombok.SneakyThrows;
import
org.apache.shardingsphere.governance.context.metadata.GovernanceMetaDataContexts;
import
org.apache.shardingsphere.governance.context.transaction.GovernanceTransactionContexts;
-import org.apache.shardingsphere.governance.core.registry.RegistryCenterNode;
+import org.apache.shardingsphere.governance.core.registry.UserNode;
+import
org.apache.shardingsphere.governance.core.registry.service.config.node.GlobalNode;
+import
org.apache.shardingsphere.governance.core.registry.service.config.node.SchemaMetadataNode;
import org.apache.shardingsphere.infra.config.RuleConfiguration;
import
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
import org.apache.shardingsphere.infra.config.datasource.DataSourceParameter;
@@ -82,12 +84,11 @@ public final class GovernanceBootstrapInitializerTest
extends AbstractBootstrapI
}
private void initConfigCenter() {
- RegistryCenterNode node = new RegistryCenterNode();
- registryCenterRepository.persist(node.getUsersNode(),
readYAML(USERS_YAML));
- registryCenterRepository.persist(node.getPropsPath(),
readYAML(PROPS_YAML));
- registryCenterRepository.persist(node.getMetadataNodePath(), "db");
- registryCenterRepository.persist(node.getMetadataDataSourcePath("db"),
readYAML(DATA_SOURCE_YAML));
- registryCenterRepository.persist(node.getRulePath("db"),
readYAML(SHARDING_RULE_YAML));
+ registryCenterRepository.persist(UserNode.getRootNode(),
readYAML(USERS_YAML));
+ registryCenterRepository.persist(GlobalNode.getPropsPath(),
readYAML(PROPS_YAML));
+
registryCenterRepository.persist(SchemaMetadataNode.getMetadataNodePath(),
"db");
+
registryCenterRepository.persist(SchemaMetadataNode.getMetadataDataSourcePath("db"),
readYAML(DATA_SOURCE_YAML));
+ registryCenterRepository.persist(SchemaMetadataNode.getRulePath("db"),
readYAML(SHARDING_RULE_YAML));
}
@SneakyThrows({URISyntaxException.class, IOException.class})