This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 10b8c16 Split RegistryCenter to multiple RegistryServives (#10405)
10b8c16 is described below
commit 10b8c16d8cbf41c00a953989a3bdef18dbb5ce86
Author: Liang Zhang <[email protected]>
AuthorDate: Thu May 20 20:54:57 2021 +0800
Split RegistryCenter to multiple RegistryServives (#10405)
* Refactor RegistryCenter
* Add DataSourceRegistryCenter
* Refactor DataSourceRegistryCenter
* Add SchemaRuleRegistryCenter
* Add GlobalRuleRegistryCenter
* Add GlobalRuleRegistryCenter
* Add GlobalRuleRegistryCenter
* Add service package
* Add SchemaBasedRegistryService
* Refactor DataSourceRegistryCenter
* Refactor GlobalRuleRegistryCenter
* Refactor GlobalRuleRegistryCenter
* Move to impl package
* Rename RegistryService
* Add PropertiesRegistryService
* Fix PropertiesRegistryServiceTest
* Refactor RegistryCenter
---
.../metadata/GovernanceMetaDataContexts.java | 14 +-
.../metadata/GovernanceMetaDataContextsTest.java | 10 +-
.../governance/core/lock/GovernanceLock.java | 16 +-
.../governance/core/registry/RegistryCenter.java | 211 ++++----------------
.../registry/service/GlobalRegistryService.java | 41 ++++
.../service/SchemaBasedRegistryService.java | 59 ++++++
.../service/impl/DataSourceRegistryService.java | 81 ++++++++
.../service/impl/GlobalRuleRegistryService.java | 59 ++++++
.../impl/LockRegistryService.java} | 8 +-
.../service/impl/PropertiesRegistryService.java | 54 ++++++
.../service/impl/SchemaRuleRegistryService.java | 81 ++++++++
.../governance/core/lock/GovernanceLockTest.java | 16 +-
.../core/registry/RegistryCenterTest.java | 212 ---------------------
.../impl/DataSourceRegistryServiceTest.java | 132 +++++++++++++
.../impl/GlobalRuleRegistryServiceTest.java | 90 +++++++++
.../impl/LockRegistryServiceTest.java} | 18 +-
.../impl/PropertiesRegistryServiceTest.java} | 43 ++---
.../impl/SchemaRuleRegistryServiceTest.java | 149 +++++++++++++++
.../GovernanceShardingSphereDataSource.java | 6 +-
.../impl/GovernanceBootstrapInitializer.java | 11 +-
20 files changed, 848 insertions(+), 463 deletions(-)
diff --git
a/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java
b/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java
index 4b5f57b..fdad7bd 100644
---
a/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java
+++
b/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java
@@ -330,18 +330,18 @@ public final class GovernanceMetaDataContexts implements
MetaDataContexts {
private ShardingSphereMetaData buildMetaData(final MetaDataPersistedEvent
event) throws SQLException {
String schemaName = event.getSchemaName();
- if
(!governanceFacade.getRegistryCenter().hasDataSourceConfiguration(schemaName)) {
-
governanceFacade.getRegistryCenter().persistDataSourceConfigurations(schemaName,
new LinkedHashMap<>());
+ if
(!governanceFacade.getRegistryCenter().getDataSourceService().isExisted(schemaName))
{
+
governanceFacade.getRegistryCenter().getDataSourceService().persist(schemaName,
new LinkedHashMap<>());
}
- if
(!governanceFacade.getRegistryCenter().hasRuleConfiguration(schemaName)) {
-
governanceFacade.getRegistryCenter().persistRuleConfigurations(schemaName, new
LinkedList<>());
+ if
(!governanceFacade.getRegistryCenter().getSchemaRuleService().isExisted(schemaName))
{
+
governanceFacade.getRegistryCenter().getSchemaRuleService().persist(schemaName,
new LinkedList<>());
}
Map<String, Map<String, DataSource>> dataSourcesMap =
createDataSourcesMap(Collections.singletonMap(schemaName,
-
governanceFacade.getRegistryCenter().loadDataSourceConfigurations(schemaName)));
+
governanceFacade.getRegistryCenter().getDataSourceService().load(schemaName)));
MetaDataContextsBuilder metaDataContextsBuilder = new
MetaDataContextsBuilder(dataSourcesMap,
- Collections.singletonMap(schemaName,
governanceFacade.getRegistryCenter().loadRuleConfigurations(schemaName)),
+ Collections.singletonMap(schemaName,
governanceFacade.getRegistryCenter().getSchemaRuleService().load(schemaName)),
// TODO load global schema from reg center
-
governanceFacade.getRegistryCenter().loadGlobalRuleConfigurations(),
+
governanceFacade.getRegistryCenter().getGlobalRuleService().load(),
metaDataContexts.getProps().getProps());
return
metaDataContextsBuilder.build().getMetaDataMap().get(schemaName);
}
diff --git
a/shardingsphere-governance/shardingsphere-governance-context/src/test/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContextsTest.java
b/shardingsphere-governance/shardingsphere-governance-context/src/test/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContextsTest.java
index 722c31d..b39f9a6 100644
---
a/shardingsphere-governance/shardingsphere-governance-context/src/test/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContextsTest.java
+++
b/shardingsphere-governance/shardingsphere-governance-context/src/test/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContextsTest.java
@@ -18,16 +18,16 @@
package org.apache.shardingsphere.governance.context.metadata;
import
org.apache.shardingsphere.authority.api.config.AuthorityRuleConfiguration;
+import org.apache.shardingsphere.governance.core.facade.GovernanceFacade;
+import org.apache.shardingsphere.governance.core.registry.RegistryCenter;
import
org.apache.shardingsphere.governance.core.registry.listener.event.datasource.DataSourceChangedEvent;
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.core.registry.listener.event.props.PropertiesChangedEvent;
+import
org.apache.shardingsphere.governance.core.registry.listener.event.readwritesplitting.DisabledStateChangedEvent;
import
org.apache.shardingsphere.governance.core.registry.listener.event.rule.GlobalRuleConfigurationsChangedEvent;
import
org.apache.shardingsphere.governance.core.registry.listener.event.rule.RuleConfigurationsChangedEvent;
import
org.apache.shardingsphere.governance.core.registry.listener.event.schema.SchemaChangedEvent;
-import org.apache.shardingsphere.governance.core.facade.GovernanceFacade;
-import org.apache.shardingsphere.governance.core.registry.RegistryCenter;
-import
org.apache.shardingsphere.governance.core.registry.listener.event.readwritesplitting.DisabledStateChangedEvent;
import
org.apache.shardingsphere.governance.core.registry.schema.GovernanceSchema;
import org.apache.shardingsphere.infra.config.RuleConfiguration;
import
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
@@ -81,7 +81,7 @@ public final class GovernanceMetaDataContextsTest {
@Mock
private GovernanceFacade governanceFacade;
- @Mock
+ @Mock(answer = Answers.RETURNS_DEEP_STUBS)
private RegistryCenter registryCenter;
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
@@ -131,7 +131,7 @@ public final class GovernanceMetaDataContextsTest {
@Test
public void assertSchemaAdd() throws SQLException {
MetaDataPersistedEvent event = new
MetaDataPersistedEvent("schema_add");
-
when(registryCenter.loadDataSourceConfigurations("schema_add")).thenReturn(getDataSourceConfigurations());
+
when(registryCenter.getDataSourceService().load("schema_add")).thenReturn(getDataSourceConfigurations());
governanceMetaDataContexts.renew(event);
assertNotNull(governanceMetaDataContexts.getMetaData("schema_add"));
assertNotNull(governanceMetaDataContexts.getMetaData("schema_add").getResource().getDataSources());
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/GovernanceLock.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/GovernanceLock.java
index eeadb67..d86b9e5 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/GovernanceLock.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/GovernanceLock.java
@@ -56,7 +56,7 @@ public final class GovernanceLock implements
ShardingSphereLock {
*/
@Override
public boolean tryLock(final String lockName) {
- return registryCenter.getLock().tryLock(lockName,
lockTimeoutMilliseconds) && registryCenter.getLock().checkLockAck(lockName);
+ return registryCenter.getLockService().tryLock(lockName,
lockTimeoutMilliseconds) &&
registryCenter.getLockService().checkLockAck(lockName);
}
/**
@@ -68,7 +68,7 @@ public final class GovernanceLock implements
ShardingSphereLock {
*/
@Override
public boolean tryLock(final String lockName, final long
timeoutMilliseconds) {
- return registryCenter.getLock().tryLock(lockName, timeoutMilliseconds)
&& registryCenter.getLock().checkLockAck(lockName);
+ return registryCenter.getLockService().tryLock(lockName,
timeoutMilliseconds) && registryCenter.getLockService().checkLockAck(lockName);
}
/**
@@ -78,8 +78,8 @@ public final class GovernanceLock implements
ShardingSphereLock {
*/
@Override
public void releaseLock(final String lockName) {
- registryCenter.getLock().releaseLock(lockName);
- registryCenter.getLock().checkUnlockAck(lockName);
+ registryCenter.getLockService().releaseLock(lockName);
+ registryCenter.getLockService().checkUnlockAck(lockName);
}
/**
@@ -95,7 +95,7 @@ public final class GovernanceLock implements
ShardingSphereLock {
@Override
public boolean isReleased(final String lockName) {
- return registryCenter.getLock().checkUnlockAck(lockName);
+ return registryCenter.getLockService().checkUnlockAck(lockName);
}
@Override
@@ -122,7 +122,7 @@ public final class GovernanceLock implements
ShardingSphereLock {
@Subscribe
public void renew(final LockNotificationEvent event) {
lockedResources.add(event.getLockName());
- registryCenter.getLock().ackLock(event.getLockName());
+ registryCenter.getLockService().ackLock(event.getLockName());
}
/**
@@ -132,7 +132,7 @@ public final class GovernanceLock implements
ShardingSphereLock {
*/
@Subscribe
public void renew(final LockReleasedEvent event) {
- registryCenter.getLock().deleteLockAck(event.getLockName());
+ registryCenter.getLockService().deleteLockAck(event.getLockName());
}
/**
@@ -148,7 +148,7 @@ public final class GovernanceLock implements
ShardingSphereLock {
private void releaseInnerLock(final String lockName) {
if (lockedResources.contains(lockName)) {
lockedResources.remove(lockName);
- registryCenter.getLock().ackUnlock(lockName);
+ registryCenter.getLockService().ackUnlock(lockName);
}
}
}
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 6501c11..78d783e 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
@@ -24,9 +24,6 @@ import com.google.common.base.Strings;
import com.google.common.eventbus.Subscribe;
import lombok.Getter;
import
org.apache.shardingsphere.authority.api.config.AuthorityRuleConfiguration;
-import org.apache.shardingsphere.governance.core.lock.node.LockNode;
-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.instance.GovernanceInstance;
import
org.apache.shardingsphere.governance.core.registry.listener.event.datasource.DataSourceAddedEvent;
import
org.apache.shardingsphere.governance.core.registry.listener.event.datasource.DataSourceAlteredEvent;
@@ -41,7 +38,11 @@ import
org.apache.shardingsphere.governance.core.registry.listener.event.rule.Ru
import
org.apache.shardingsphere.governance.core.registry.listener.event.rule.RuleConfigurationsAlteredEvent;
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.lock.LockRegistryCenter;
+import
org.apache.shardingsphere.governance.core.registry.service.impl.DataSourceRegistryService;
+import
org.apache.shardingsphere.governance.core.registry.service.impl.GlobalRuleRegistryService;
+import
org.apache.shardingsphere.governance.core.registry.service.impl.LockRegistryService;
+import
org.apache.shardingsphere.governance.core.registry.service.impl.PropertiesRegistryService;
+import
org.apache.shardingsphere.governance.core.registry.service.impl.SchemaRuleRegistryService;
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;
@@ -62,14 +63,12 @@ import
org.apache.shardingsphere.infra.metadata.user.ShardingSphereUsers;
import
org.apache.shardingsphere.infra.metadata.user.yaml.config.YamlUsersConfigurationConverter;
import org.apache.shardingsphere.infra.rule.event.impl.DataSourceDisabledEvent;
import org.apache.shardingsphere.infra.rule.event.impl.PrimaryDataSourceEvent;
-import org.apache.shardingsphere.infra.yaml.config.YamlRuleConfiguration;
import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
import
org.apache.shardingsphere.infra.yaml.swapper.YamlDataSourceConfigurationSwapper;
import
org.apache.shardingsphere.infra.yaml.swapper.YamlRuleConfigurationSwapperEngine;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.LinkedList;
@@ -91,29 +90,36 @@ public final class RegistryCenter {
private final RegistryCenterNode node;
- private final LockNode lockNode;
-
private final RegistryCacheManager registryCacheManager;
@Getter
- private final LockRegistryCenter lock;
+ private final DataSourceRegistryService dataSourceService;
+
+ @Getter
+ private final SchemaRuleRegistryService schemaRuleService;
+
+ @Getter
+ private final GlobalRuleRegistryService globalRuleService;
+
+ @Getter
+ private final PropertiesRegistryService propsService;
+
+ @Getter
+ private final LockRegistryService lockService;
public RegistryCenter(final RegistryCenterRepository repository) {
instanceId = GovernanceInstance.getInstance().getId();
this.repository = repository;
node = new RegistryCenterNode();
- lockNode = new LockNode();
- initLockNode();
registryCacheManager = new RegistryCacheManager(repository, node);
- lock = new LockRegistryCenter(repository);
+ dataSourceService = new DataSourceRegistryService(repository);
+ schemaRuleService = new SchemaRuleRegistryService(repository);
+ globalRuleService = new GlobalRuleRegistryService(repository);
+ propsService = new PropertiesRegistryService(repository);
+ lockService = new LockRegistryService(repository);
ShardingSphereEventBus.getInstance().register(this);
}
- private void initLockNode() {
- repository.persist(lockNode.getLockRootNodePath(), "");
- repository.persist(lockNode.getLockedAckRootNodePah(), "");
- }
-
/**
* Persist rule configuration.
*
@@ -124,44 +130,12 @@ public final class RegistryCenter {
*/
public void persistConfigurations(final String schemaName,
final Map<String,
DataSourceConfiguration> dataSourceConfigs, final Collection<RuleConfiguration>
ruleConfigs, final boolean isOverwrite) {
- persistDataSourceConfigurations(schemaName, dataSourceConfigs,
isOverwrite);
- persistRuleConfigurations(schemaName, ruleConfigs, isOverwrite);
+ dataSourceService.persist(schemaName, dataSourceConfigs, isOverwrite);
+ schemaRuleService.persist(schemaName, ruleConfigs, isOverwrite);
// TODO Consider removing the following one.
persistSchemaName(schemaName);
}
- private void persistDataSourceConfigurations(final String schemaName,
final Map<String, DataSourceConfiguration> dataSourceConfigs, final boolean
isOverwrite) {
- if (!dataSourceConfigs.isEmpty() && (isOverwrite ||
!hasDataSourceConfiguration(schemaName))) {
- persistDataSourceConfigurations(schemaName, dataSourceConfigs);
- }
- }
-
- /**
- * Persist data source configurations.
- *
- * @param schemaName schema name
- * @param dataSourceConfigs data source configurations
- */
- public void persistDataSourceConfigurations(final String schemaName, final
Map<String, DataSourceConfiguration> dataSourceConfigs) {
- repository.persist(node.getMetadataDataSourcePath(schemaName),
YamlEngine.marshal(createYamlDataSourceConfiguration(dataSourceConfigs)));
- }
-
- private void persistRuleConfigurations(final String schemaName, final
Collection<RuleConfiguration> ruleConfigs, final boolean isOverwrite) {
- if (!ruleConfigs.isEmpty() && (isOverwrite ||
!hasRuleConfiguration(schemaName))) {
- persistRuleConfigurations(schemaName, ruleConfigs);
- }
- }
-
- /**
- * Persist rule configurations.
- *
- * @param schemaName schema name
- * @param ruleConfigs rule configurations
- */
- public void persistRuleConfigurations(final String schemaName, final
Collection<RuleConfiguration> ruleConfigs) {
- repository.persist(node.getRulePath(schemaName),
YamlEngine.marshal(createYamlRuleConfigurations(schemaName, ruleConfigs)));
- }
-
/**
* Persist global configuration.
*
@@ -170,20 +144,8 @@ public final class RegistryCenter {
* @param isOverwrite is overwrite config center's configuration
*/
public void persistGlobalConfiguration(final Collection<RuleConfiguration>
globalRuleConfigs, final Properties props, final boolean isOverwrite) {
- persistGlobalRuleConfigurations(globalRuleConfigs, isOverwrite);
- persistProperties(props, isOverwrite);
- }
-
- private void persistGlobalRuleConfigurations(final
Collection<RuleConfiguration> globalRuleConfigs, final boolean isOverwrite) {
- if (!globalRuleConfigs.isEmpty() && (isOverwrite ||
!hasGlobalRuleConfigurations())) {
- repository.persist(node.getGlobalRuleNode(),
YamlEngine.marshal(new
YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfigurations(globalRuleConfigs)));
- }
- }
-
- private void persistProperties(final Properties props, final boolean
isOverwrite) {
- if (!props.isEmpty() && (isOverwrite || !hasProperties())) {
- repository.persist(node.getPropsPath(), YamlEngine.marshal(props));
- }
+ globalRuleService.persist(globalRuleConfigs, isOverwrite);
+ propsService.persist(props, isOverwrite);
}
@SuppressWarnings("unchecked")
@@ -193,7 +155,7 @@ public final class RegistryCenter {
}
private void addDataSourceConfigurations(final String schemaName, final
Map<String, DataSourceConfiguration> dataSourceConfigs) {
- Map<String, DataSourceConfiguration> dataSourceConfigMap =
loadDataSourceConfigurations(schemaName);
+ Map<String, DataSourceConfiguration> dataSourceConfigMap =
dataSourceService.load(schemaName);
dataSourceConfigMap.putAll(dataSourceConfigs);
repository.persist(node.getMetadataDataSourcePath(schemaName),
YamlEngine.marshal(createYamlDataSourceConfiguration(dataSourceConfigMap)));
}
@@ -203,32 +165,12 @@ public final class RegistryCenter {
.collect(Collectors.toMap(Entry::getKey, entry -> new
YamlDataSourceConfigurationSwapper().swapToMap(entry.getValue()), (oldValue,
currentValue) -> oldValue, LinkedHashMap::new));
}
- private Collection<YamlRuleConfiguration>
createYamlRuleConfigurations(final String schemaName, final
Collection<RuleConfiguration> ruleConfigs) {
- Collection<RuleConfiguration> configs = new LinkedList<>();
- for (RuleConfiguration each : ruleConfigs) {
- Optional<RuleConfigurationChecker> checker =
RuleConfigurationCheckerFactory.newInstance(each);
- if (checker.isPresent()) {
- checker.get().check(schemaName, each);
- configs.add(each);
- }
- }
- return new
YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfigurations(configs);
- }
-
private void persistChangedPrivilege(final Collection<ShardingSphereUser>
users) {
if (!users.isEmpty()) {
repository.persist(node.getPrivilegeNodePath(),
YamlEngine.marshal(YamlUsersConfigurationConverter.convertYamlUserConfigurations(users)));
}
}
- private boolean hasGlobalRuleConfigurations() {
- return
!Strings.isNullOrEmpty(repository.get(node.getGlobalRuleNode()));
- }
-
- private boolean hasProperties() {
- return !Strings.isNullOrEmpty(repository.get(node.getPropsPath()));
- }
-
private void persistSchemaName(final String schemaName) {
String schemaNames = repository.get(node.getMetadataNodePath());
if (Strings.isNullOrEmpty(schemaNames)) {
@@ -243,59 +185,6 @@ public final class RegistryCenter {
newArrayList.add(schemaName);
repository.persist(node.getMetadataNodePath(),
Joiner.on(",").join(newArrayList));
}
-
- /**
- * Load data source configurations.
- *
- * @param schemaName schema name
- * @return data source configurations
- */
- public Map<String, DataSourceConfiguration>
loadDataSourceConfigurations(final String schemaName) {
- return hasDataSourceConfiguration(schemaName) ?
getDataSourceConfigurations(repository.get(node.getMetadataDataSourcePath(schemaName)))
: new LinkedHashMap<>();
- }
-
- @SuppressWarnings("unchecked")
- private static Map<String, DataSourceConfiguration>
getDataSourceConfigurations(final String yamlContent) {
- Map<String, Map<String, Object>> yamlDataSources =
YamlEngine.unmarshal(yamlContent, Map.class);
- if (yamlDataSources.isEmpty()) {
- return new LinkedHashMap<>();
- }
- Map<String, DataSourceConfiguration> result = new
LinkedHashMap<>(yamlDataSources.size());
- yamlDataSources.forEach((key, value) -> result.put(key, new
YamlDataSourceConfigurationSwapper().swapToDataSourceConfiguration(value)));
- return result;
- }
-
- /**
- * Load rule configurations.
- *
- * @param schemaName schema name
- * @return rule configurations
- */
- @SuppressWarnings("unchecked")
- public Collection<RuleConfiguration> loadRuleConfigurations(final String
schemaName) {
- return hasRuleConfiguration(schemaName)
- ? new
YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(YamlEngine.unmarshal(repository.get(node.getRulePath(schemaName)),
Collection.class)) : new LinkedList<>();
- }
-
- /**
- * Load global rule configurations.
- *
- * @return global rule configurations
- */
- @SuppressWarnings("unchecked")
- public Collection<RuleConfiguration> loadGlobalRuleConfigurations() {
- return hasGlobalRuleConfigurations()
- ? new
YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(YamlEngine.unmarshal(repository.get(node.getGlobalRuleNode()),
Collection.class)) : Collections.emptyList();
- }
-
- /**
- * Load properties configuration.
- *
- * @return properties
- */
- public Properties loadProperties() {
- return Strings.isNullOrEmpty(repository.get(node.getPropsPath())) ?
new Properties() : YamlEngine.unmarshal(repository.get(node.getPropsPath()),
Properties.class);
- }
/**
* Load all schema names.
@@ -308,26 +197,6 @@ public final class RegistryCenter {
}
/**
- * Judge whether schema has data source configuration.
- *
- * @param schemaName schema name
- * @return has data source configuration or not
- */
- public boolean hasDataSourceConfiguration(final String schemaName) {
- return
!Strings.isNullOrEmpty(repository.get(node.getMetadataDataSourcePath(schemaName)));
- }
-
- /**
- * Judge whether schema has rule configuration.
- *
- * @param schemaName schema name
- * @return has rule configuration or not
- */
- public boolean hasRuleConfiguration(final String schemaName) {
- return
!Strings.isNullOrEmpty(repository.get(node.getRulePath(schemaName)));
- }
-
- /**
* Persist ShardingSphere schema.
*
* @param schemaName schema name
@@ -398,7 +267,7 @@ public final class RegistryCenter {
*/
@Subscribe
public synchronized void renew(final DataSourceAlteredEvent event) {
- persistDataSourceConfigurations(event.getSchemaName(),
event.getDataSourceConfigurations());
+ dataSourceService.persist(event.getSchemaName(),
event.getDataSourceConfigurations());
}
/**
@@ -408,8 +277,7 @@ public final class RegistryCenter {
*/
@Subscribe
public synchronized void renew(final RuleConfigurationsAlteredEvent event)
{
- //TODO
- persistRuleConfigurations(event.getSchemaName(),
event.getRuleConfigurations());
+ schemaRuleService.persist(event.getSchemaName(),
event.getRuleConfigurations());
}
/**
@@ -459,7 +327,7 @@ public final class RegistryCenter {
*/
@Subscribe
public synchronized void renew(final SwitchRuleConfigurationEvent event) {
- persistRuleConfigurations(event.getSchemaName(),
loadCachedRuleConfigurations(event.getSchemaName(),
event.getRuleConfigurationCacheId()));
+ schemaRuleService.persist(event.getSchemaName(),
loadCachedRuleConfigurations(event.getSchemaName(),
event.getRuleConfigurationCacheId()));
registryCacheManager.deleteCache(node.getRulePath(event.getSchemaName()),
event.getRuleConfigurationCacheId());
}
@@ -478,18 +346,18 @@ public final class RegistryCenter {
}
/**
- * User configuration event.
+ * Renew create user statement.
*
- * @param event user configuration event
+ * @param event create user statement event
*/
@Subscribe
public synchronized void renew(final CreateUserStatementEvent event) {
- Collection<RuleConfiguration> globalRuleConfigs =
loadGlobalRuleConfigurations();
+ Collection<RuleConfiguration> globalRuleConfigs =
globalRuleService.load();
Optional<AuthorityRuleConfiguration> authorityRuleConfig =
globalRuleConfigs.stream().filter(each -> each instanceof
AuthorityRuleConfiguration)
.findAny().map(each -> (AuthorityRuleConfiguration) each);
Preconditions.checkState(authorityRuleConfig.isPresent());
refreshAuthorityRuleConfiguration(authorityRuleConfig.get(),
event.getUsers());
- persistGlobalRuleConfigurations(globalRuleConfigs, true);
+ globalRuleService.persist(globalRuleConfigs, true);
}
/**
@@ -621,15 +489,6 @@ public final class RegistryCenter {
}
/**
- * Load all instances.
- *
- * @return collection of all instances
- */
- public Collection<String> loadAllInstances() {
- return repository.getChildrenKeys(node.getProxyNodesPath());
- }
-
- /**
* Load disabled data sources.
*
* @param schemaName schema name
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/GlobalRegistryService.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/GlobalRegistryService.java
new file mode 100644
index 0000000..0cfc83b
--- /dev/null
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/GlobalRegistryService.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.service;
+
+/**
+ * Global registry service.
+ *
+ * @param <T> type of configuration
+ */
+public interface GlobalRegistryService<T> {
+
+ /**
+ * Persist configurations.
+ *
+ * @param globalRuleConfigs configurations
+ * @param isOverwrite is overwrite
+ */
+ void persist(T globalRuleConfigs, boolean isOverwrite);
+
+ /**
+ * Load configurations.
+ *
+ * @return configurations
+ */
+ T load();
+}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/SchemaBasedRegistryService.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/SchemaBasedRegistryService.java
new file mode 100644
index 0000000..efa53f8
--- /dev/null
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/SchemaBasedRegistryService.java
@@ -0,0 +1,59 @@
+/*
+ * 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;
+
+/**
+ * Schema based registry service.
+ *
+ * @param <T> type of configuration
+ */
+public interface SchemaBasedRegistryService<T> {
+
+ /**
+ * Persist configurations.
+ *
+ * @param schemaName schema name
+ * @param configs configurations
+ * @param isOverwrite is overwrite
+ */
+ void persist(String schemaName, T configs, boolean isOverwrite);
+
+ /**
+ * Persist configurations.
+ *
+ * @param schemaName schema name
+ * @param configs configurations
+ */
+ void persist(String schemaName, T configs);
+
+ /**
+ * Load configurations.
+ *
+ * @param schemaName schema name
+ * @return configurations
+ */
+ T load(String schemaName);
+
+ /**
+ * Judge whether schema configuration existed.
+ *
+ * @param schemaName schema name
+ * @return configuration existed or not
+ */
+ boolean isExisted(String schemaName);
+}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/impl/DataSourceRegistryService.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/impl/DataSourceRegistryService.java
new file mode 100644
index 0000000..dc8b01f
--- /dev/null
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/impl/DataSourceRegistryService.java
@@ -0,0 +1,81 @@
+/*
+ * 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.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.SchemaBasedRegistryService;
+import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
+import
org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration;
+import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
+import
org.apache.shardingsphere.infra.yaml.swapper.YamlDataSourceConfigurationSwapper;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.stream.Collectors;
+
+/**
+ * Data source registry service.
+ */
+@RequiredArgsConstructor
+public final class DataSourceRegistryService implements
SchemaBasedRegistryService<Map<String, DataSourceConfiguration>> {
+
+ private final RegistryCenterRepository repository;
+
+ private final RegistryCenterNode node = new RegistryCenterNode();
+
+ @Override
+ public void persist(final String schemaName, final Map<String,
DataSourceConfiguration> dataSourceConfigs, final boolean isOverwrite) {
+ if (!dataSourceConfigs.isEmpty() && (isOverwrite ||
!isExisted(schemaName))) {
+ persist(schemaName, dataSourceConfigs);
+ }
+ }
+
+ @Override
+ public void persist(final String schemaName, final Map<String,
DataSourceConfiguration> dataSourceConfigs) {
+ repository.persist(node.getMetadataDataSourcePath(schemaName),
YamlEngine.marshal(createYamlDataSourceConfiguration(dataSourceConfigs)));
+ }
+
+ private Map<String, Map<String, Object>>
createYamlDataSourceConfiguration(final Map<String, DataSourceConfiguration>
dataSourceConfigs) {
+ return dataSourceConfigs.entrySet().stream()
+ .collect(Collectors.toMap(Entry::getKey, entry -> new
YamlDataSourceConfigurationSwapper().swapToMap(entry.getValue()), (oldValue,
currentValue) -> oldValue, LinkedHashMap::new));
+ }
+
+ @Override
+ public Map<String, DataSourceConfiguration> load(final String schemaName) {
+ return isExisted(schemaName) ?
getDataSourceConfigurations(repository.get(node.getMetadataDataSourcePath(schemaName)))
: new LinkedHashMap<>();
+ }
+
+ @SuppressWarnings("unchecked")
+ private static Map<String, DataSourceConfiguration>
getDataSourceConfigurations(final String yamlContent) {
+ Map<String, Map<String, Object>> yamlDataSources =
YamlEngine.unmarshal(yamlContent, Map.class);
+ if (yamlDataSources.isEmpty()) {
+ return new LinkedHashMap<>();
+ }
+ Map<String, DataSourceConfiguration> result = new
LinkedHashMap<>(yamlDataSources.size());
+ yamlDataSources.forEach((key, value) -> result.put(key, new
YamlDataSourceConfigurationSwapper().swapToDataSourceConfiguration(value)));
+ return result;
+ }
+
+ @Override
+ public boolean isExisted(final String schemaName) {
+ return
!Strings.isNullOrEmpty(repository.get(node.getMetadataDataSourcePath(schemaName)));
+ }
+}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/impl/GlobalRuleRegistryService.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/impl/GlobalRuleRegistryService.java
new file mode 100644
index 0000000..5099db8
--- /dev/null
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/impl/GlobalRuleRegistryService.java
@@ -0,0 +1,59 @@
+/*
+ * 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.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.GlobalRegistryService;
+import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
+import org.apache.shardingsphere.infra.config.RuleConfiguration;
+import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
+import
org.apache.shardingsphere.infra.yaml.swapper.YamlRuleConfigurationSwapperEngine;
+
+import java.util.Collection;
+import java.util.Collections;
+
+/**
+ * Global rule registry service.
+ */
+@RequiredArgsConstructor
+public final class GlobalRuleRegistryService implements
GlobalRegistryService<Collection<RuleConfiguration>> {
+
+ private final RegistryCenterRepository repository;
+
+ private final RegistryCenterNode 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)));
+ }
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public Collection<RuleConfiguration> load() {
+ return isExisted()
+ ? new
YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(YamlEngine.unmarshal(repository.get(node.getGlobalRuleNode()),
Collection.class)) : Collections.emptyList();
+ }
+
+ private boolean isExisted() {
+ return
!Strings.isNullOrEmpty(repository.get(node.getGlobalRuleNode()));
+ }
+}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/lock/LockRegistryCenter.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/impl/LockRegistryService.java
similarity index 95%
rename from
shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/lock/LockRegistryCenter.java
rename to
shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/impl/LockRegistryService.java
index 6864c49..fd78b39 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/lock/LockRegistryCenter.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/impl/LockRegistryService.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.governance.core.registry.lock;
+package org.apache.shardingsphere.governance.core.registry.service.impl;
import com.google.common.base.Joiner;
import com.google.common.base.Strings;
@@ -29,9 +29,9 @@ import java.util.Collection;
import java.util.concurrent.TimeUnit;
/**
- * Lock registry center.
+ * Lock registry service.
*/
-public final class LockRegistryCenter {
+public final class LockRegistryService {
private static final int CHECK_ACK_MAXIMUM = 5;
@@ -45,7 +45,7 @@ public final class LockRegistryCenter {
private final LockNode lockNode;
- public LockRegistryCenter(final RegistryCenterRepository repository) {
+ public LockRegistryService(final RegistryCenterRepository repository) {
instanceId = GovernanceInstance.getInstance().getId();
this.repository = repository;
node = new RegistryCenterNode();
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/impl/PropertiesRegistryService.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/impl/PropertiesRegistryService.java
new file mode 100644
index 0000000..4e5e82d
--- /dev/null
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/impl/PropertiesRegistryService.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.governance.core.registry.service.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.GlobalRegistryService;
+import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
+import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
+
+import java.util.Properties;
+
+/**
+ * Properties registry service.
+ */
+@RequiredArgsConstructor
+public final class PropertiesRegistryService implements
GlobalRegistryService<Properties> {
+
+ 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));
+ }
+ }
+
+ private boolean isExisted() {
+ return !Strings.isNullOrEmpty(repository.get(node.getPropsPath()));
+ }
+
+ @Override
+ public Properties load() {
+ return Strings.isNullOrEmpty(repository.get(node.getPropsPath())) ?
new Properties() : YamlEngine.unmarshal(repository.get(node.getPropsPath()),
Properties.class);
+ }
+}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/impl/SchemaRuleRegistryService.java
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/impl/SchemaRuleRegistryService.java
new file mode 100644
index 0000000..0f7da56
--- /dev/null
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/impl/SchemaRuleRegistryService.java
@@ -0,0 +1,81 @@
+/*
+ * 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.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.checker.RuleConfigurationChecker;
+import
org.apache.shardingsphere.governance.core.registry.checker.RuleConfigurationCheckerFactory;
+import
org.apache.shardingsphere.governance.core.registry.service.SchemaBasedRegistryService;
+import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
+import org.apache.shardingsphere.infra.config.RuleConfiguration;
+import org.apache.shardingsphere.infra.yaml.config.YamlRuleConfiguration;
+import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
+import
org.apache.shardingsphere.infra.yaml.swapper.YamlRuleConfigurationSwapperEngine;
+
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.Optional;
+
+/**
+ * Schema rule registry service.
+ */
+@RequiredArgsConstructor
+public final class SchemaRuleRegistryService implements
SchemaBasedRegistryService<Collection<RuleConfiguration>> {
+
+ private final RegistryCenterRepository repository;
+
+ private final RegistryCenterNode node = new RegistryCenterNode();
+
+ @Override
+ public void persist(final String schemaName, final
Collection<RuleConfiguration> configs, final boolean isOverwrite) {
+ if (!configs.isEmpty() && (isOverwrite || !isExisted(schemaName))) {
+ persist(schemaName, configs);
+ }
+ }
+
+ @Override
+ public void persist(final String schemaName, final
Collection<RuleConfiguration> configs) {
+ repository.persist(node.getRulePath(schemaName),
YamlEngine.marshal(createYamlRuleConfigurations(schemaName, configs)));
+ }
+
+ private Collection<YamlRuleConfiguration>
createYamlRuleConfigurations(final String schemaName, final
Collection<RuleConfiguration> ruleConfigs) {
+ Collection<RuleConfiguration> configs = new LinkedList<>();
+ for (RuleConfiguration each : ruleConfigs) {
+ Optional<RuleConfigurationChecker> checker =
RuleConfigurationCheckerFactory.newInstance(each);
+ if (checker.isPresent()) {
+ checker.get().check(schemaName, each);
+ configs.add(each);
+ }
+ }
+ return new
YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfigurations(configs);
+ }
+
+ @Override
+ @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<>();
+ }
+
+ @Override
+ public boolean isExisted(final String schemaName) {
+ return
!Strings.isNullOrEmpty(repository.get(node.getRulePath(schemaName)));
+ }
+}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/GovernanceLockTest.java
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/GovernanceLockTest.java
index 8424be6..27f5d70 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/GovernanceLockTest.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/GovernanceLockTest.java
@@ -18,7 +18,7 @@
package org.apache.shardingsphere.governance.core.lock;
import org.apache.shardingsphere.governance.core.registry.RegistryCenter;
-import
org.apache.shardingsphere.governance.core.registry.lock.LockRegistryCenter;
+import
org.apache.shardingsphere.governance.core.registry.service.impl.LockRegistryService;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -34,29 +34,29 @@ import static org.mockito.Mockito.when;
public final class GovernanceLockTest {
@Mock
- private LockRegistryCenter lockRegistryCenter;
+ private LockRegistryService lockRegistryService;
private GovernanceLock lock;
@Before
public void setUp() {
RegistryCenter registryCenter = mock(RegistryCenter.class);
- when(registryCenter.getLock()).thenReturn(lockRegistryCenter);
+ when(registryCenter.getLockService()).thenReturn(lockRegistryService);
lock = new GovernanceLock(registryCenter, 50L);
}
@Test
public void assertTryLock() {
- when(lockRegistryCenter.tryLock(eq("test"),
eq(50L))).thenReturn(Boolean.TRUE);
+ when(lockRegistryService.tryLock(eq("test"),
eq(50L))).thenReturn(Boolean.TRUE);
lock.tryLock("test", 50L);
- verify(lockRegistryCenter).tryLock(eq("test"), eq(50L));
+ verify(lockRegistryService).tryLock(eq("test"), eq(50L));
}
@Test
public void assertReleaseLock() {
-
when(lockRegistryCenter.checkUnlockAck("test")).thenReturn(Boolean.TRUE);
+
when(lockRegistryService.checkUnlockAck("test")).thenReturn(Boolean.TRUE);
lock.releaseLock("test");
- verify(lockRegistryCenter).checkUnlockAck(eq("test"));
- verify(lockRegistryCenter).releaseLock(eq("test"));
+ verify(lockRegistryService).checkUnlockAck(eq("test"));
+ verify(lockRegistryService).releaseLock(eq("test"));
}
}
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 13c3ad3..ee73d50 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
@@ -18,9 +18,6 @@
package org.apache.shardingsphere.governance.core.registry;
import lombok.SneakyThrows;
-import
org.apache.shardingsphere.authority.api.config.AuthorityRuleConfiguration;
-import
org.apache.shardingsphere.dbdiscovery.api.config.DatabaseDiscoveryRuleConfiguration;
-import org.apache.shardingsphere.encrypt.api.config.EncryptRuleConfiguration;
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.listener.event.metadata.MetaDataCreatedEvent;
@@ -31,18 +28,12 @@ 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.infra.config.RuleConfiguration;
-import
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
import
org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration;
import
org.apache.shardingsphere.infra.config.properties.ConfigurationPropertyKey;
import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
import
org.apache.shardingsphere.infra.metadata.schema.refresher.event.SchemaAlteredEvent;
-import org.apache.shardingsphere.infra.metadata.user.Grantee;
-import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUser;
import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
import
org.apache.shardingsphere.infra.yaml.swapper.YamlRuleConfigurationSwapperEngine;
-import
org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
-import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
-import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -55,20 +46,17 @@ import java.lang.reflect.Field;
import java.net.URISyntaxException;
import java.nio.file.Files;
import java.nio.file.Paths;
-import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-import java.util.Objects;
import java.util.Optional;
import java.util.Properties;
import java.util.stream.Collectors;
import static org.hamcrest.CoreMatchers.hasItems;
import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
@@ -82,11 +70,7 @@ import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public final class RegistryCenterTest {
- private static final String DATA_SOURCE_YAM =
"yaml/registryCenter/data-source.yaml";
-
private static final String SHARDING_RULE_YAML =
"yaml/registryCenter/data-sharding-rule.yaml";
-
- private static final String SHARDING_AND_ENCRYPT_RULE_YAML =
"yaml/registryCenter/data-sharding-encrypt-rule.yaml";
private static final String READWRITE_SPLITTING_RULE_YAML =
"yaml/registryCenter/data-readwrite-splitting-rule.yaml";
@@ -100,8 +84,6 @@ public final class RegistryCenterTest {
private static final String PROPS_YAML =
ConfigurationPropertyKey.SQL_SHOW.getKey() + ": false\n";
- private static final String DATA_SOURCE_YAML_WITH_CONNECTION_INIT_SQL =
"yaml/registryCenter/data-source-init-sql.yaml";
-
private static final String META_DATA_YAML = "yaml/schema.yaml";
@Mock
@@ -155,7 +137,6 @@ public final class RegistryCenterTest {
@Test
public void
assertPersistConfigurationForShardingRuleWithoutAuthenticationAndIsNotOverwriteAndConfigurationIsExisted()
{
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
registryCenter.persistConfigurations("sharding_db",
createDataSourceConfigurations(), createRuleConfigurations(), false);
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
any());
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/rules"),
any());
@@ -163,21 +144,18 @@ public final class RegistryCenterTest {
@Test
public void assertMoreSchema() {
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
registryCenter.persistConfigurations("sharding_db",
createDataSourceConfigurations(), createRuleConfigurations(), false);
verify(registryCenterRepository, times(0)).persist("/metadata",
"myTest1,myTest2,sharding_db");
}
@Test
public void assertMoreAndContainsSchema() {
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
registryCenter.persistConfigurations("sharding_db",
createDataSourceConfigurations(), createRuleConfigurations(), false);
verify(registryCenterRepository, times(0)).persist("/metadata",
"myTest1,sharding_db");
}
@Test
public void
assertPersistConfigurationForShardingRuleWithoutAuthenticationAndIsNotOverwriteAndConfigurationIsNotExisted()
{
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
registryCenter.persistConfigurations("sharding_db",
createDataSourceConfigurations(), createRuleConfigurations(), false);
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
any());
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/rules"),
any());
@@ -185,7 +163,6 @@ public final class RegistryCenterTest {
@Test
public void
assertPersistConfigurationForShardingRuleWithoutAuthenticationAndIsOverwrite() {
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
registryCenter.persistConfigurations("sharding_db",
createDataSourceConfigurations(), createRuleConfigurations(), true);
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
any());
verify(registryCenterRepository,
times(0)).persist("/metadata/sharding_db/rules", readYAML(SHARDING_RULE_YAML));
@@ -193,7 +170,6 @@ public final class RegistryCenterTest {
@Test
public void
assertPersistConfigurationForReplicaQueryRuleWithoutAuthenticationAndIsNotOverwriteAndConfigurationIsExisted()
{
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
registryCenter.persistConfigurations("sharding_db",
createDataSourceConfigurations(), createReadwriteSplittingRuleConfiguration(),
false);
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
any());
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/rules"),
any());
@@ -201,7 +177,6 @@ public final class RegistryCenterTest {
@Test
public void
assertPersistConfigurationForReplicaQueryRuleWithoutAuthenticationAndIsNotOverwriteAndConfigurationIsNotExisted()
{
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
registryCenter.persistConfigurations("sharding_db",
createDataSourceConfigurations(), createReadwriteSplittingRuleConfiguration(),
false);
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
any());
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/rules"),
any());
@@ -209,7 +184,6 @@ public final class RegistryCenterTest {
@Test
public void
assertPersistConfigurationForReadwriteSplittingWithoutAuthenticationAndIsOverwrite()
{
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
registryCenter.persistConfigurations("sharding_db",
createDataSourceConfigurations(), createReadwriteSplittingRuleConfiguration(),
true);
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
any());
verify(registryCenterRepository,
times(0)).persist("/metadata/sharding_db/rules",
readYAML(READWRITE_SPLITTING_RULE_YAML));
@@ -217,7 +191,6 @@ public final class RegistryCenterTest {
@Test
public void
assertPersistConfigurationForDatabaseDiscoveryRuleWithoutAuthenticationAndIsOverwrite()
{
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
registryCenter.persistConfigurations("sharding_db",
createDataSourceConfigurations(), createDatabaseDiscoveryRuleConfiguration(),
true);
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
any());
verify(registryCenterRepository,
times(0)).persist("/metadata/sharding_db/rules",
readYAML(DB_DISCOVERY_RULE_YAML));
@@ -225,7 +198,6 @@ public final class RegistryCenterTest {
@Test
public void
assertPersistConfigurationForShardingRuleWithAuthenticationAndIsNotOverwriteAndConfigurationIsExisted()
{
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
registryCenter.persistConfigurations("sharding_db",
createDataSourceConfigurations(), createRuleConfigurations(), false);
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
any());
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/rules"),
any());
@@ -233,7 +205,6 @@ public final class RegistryCenterTest {
@Test
public void
assertPersistConfigurationForShardingRuleWithAuthenticationAndIsNotOverwriteAndConfigurationIsNotExisted()
{
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
registryCenter.persistConfigurations("sharding_db",
createDataSourceConfigurations(), createRuleConfigurations(), false);
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
any());
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/rules"),
any());
@@ -241,7 +212,6 @@ public final class RegistryCenterTest {
@Test
public void
assertPersistConfigurationForShardingRuleWithAuthenticationAndIsOverwrite() {
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
registryCenter.persistConfigurations("sharding_db",
createDataSourceConfigurations(), createRuleConfigurations(), true);
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
any());
verify(registryCenterRepository,
times(0)).persist("/metadata/sharding_db/rules", readYAML(SHARDING_RULE_YAML));
@@ -249,7 +219,6 @@ public final class RegistryCenterTest {
@Test
public void
assertPersistConfigurationForReplicaQueryRuleWithAuthenticationAndIsNotOverwriteAndConfigurationIsExisted()
{
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
registryCenter.persistConfigurations("sharding_db",
createDataSourceConfigurations(), createReadwriteSplittingRuleConfiguration(),
false);
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
any());
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/rules"),
any());
@@ -257,7 +226,6 @@ public final class RegistryCenterTest {
@Test
public void
assertPersistConfigurationForReadwriteSplittingRuleWithAuthenticationAndIsNotOverwriteAndConfigurationIsNotExisted()
{
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
registryCenter.persistConfigurations("sharding_db",
createDataSourceConfigurations(), createReadwriteSplittingRuleConfiguration(),
false);
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
any());
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/rules"),
any());
@@ -265,7 +233,6 @@ public final class RegistryCenterTest {
@Test
public void
assertPersistConfigurationForReadwriteSplittingRuleWithAuthenticationAndIsOverwrite()
{
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
registryCenter.persistConfigurations("sharding_db",
createDataSourceConfigurations(), createReadwriteSplittingRuleConfiguration(),
true);
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
any());
verify(registryCenterRepository,
times(0)).persist("/metadata/sharding_db/rules",
readYAML(READWRITE_SPLITTING_RULE_YAML));
@@ -273,7 +240,6 @@ public final class RegistryCenterTest {
@Test
public void
assertPersistConfigurationForDatabaseDiscoveryRuleWithAuthenticationAndIsOverwrite()
{
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
registryCenter.persistConfigurations("sharding_db",
createDataSourceConfigurations(), createDatabaseDiscoveryRuleConfiguration(),
true);
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
any());
verify(registryCenterRepository,
times(0)).persist("/metadata/sharding_db/rules",
readYAML(DB_DISCOVERY_RULE_YAML));
@@ -281,7 +247,6 @@ public final class RegistryCenterTest {
@Test
public void assertPersistConfigurationForEncrypt() {
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
registryCenter.persistConfigurations("sharding_db",
createDataSourceConfigurations(), createEncryptRuleConfiguration(), true);
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
any());
verify(registryCenterRepository,
times(0)).persist("/metadata/sharding_db/rules", readYAML(ENCRYPT_RULE_YAML));
@@ -289,13 +254,11 @@ public final class RegistryCenterTest {
@Test
public void assertNullRuleConfiguration() {
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
registryCenter.persistConfigurations("sharding_db",
createDataSourceConfigurations(), Collections.emptyList(), true);
}
@Test
public void assertPersistConfigurationForShadow() {
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
registryCenter.persistConfigurations("sharding_db",
createDataSourceConfigurations(), createShadowRuleConfiguration(), true);
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
any());
verify(registryCenterRepository,
times(0)).persist("/metadata/sharding_db/rules", readYAML(SHADOW_RULE_YAML));
@@ -303,7 +266,6 @@ public final class RegistryCenterTest {
@Test
public void assertPersistGlobalConfiguration() {
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
registryCenter.persistGlobalConfiguration(createGlobalRuleConfigurations(),
createProperties(), true);
verify(registryCenterRepository).persist(eq("/rules"), any());
verify(registryCenterRepository).persist("/props", PROPS_YAML);
@@ -314,10 +276,6 @@ public final class RegistryCenterTest {
DataSourceConfiguration.getDataSourceConfiguration(entry.getValue()),
(oldValue, currentValue) -> oldValue, LinkedHashMap::new));
}
- private DataSourceConfiguration createDataSourceConfiguration(final
DataSource dataSource) {
- return DataSourceConfiguration.getDataSourceConfiguration(dataSource);
- }
-
private Map<String, DataSource> createDataSourceMap() {
Map<String, DataSource> result = new LinkedHashMap<>(2, 1);
result.put("ds_0", createDataSource("ds_0"));
@@ -371,169 +329,14 @@ public final class RegistryCenterTest {
}
@Test
- public void assertLoadDataSourceConfigurations() {
-
when(registryCenterRepository.get("/metadata/sharding_db/dataSources")).thenReturn(readYAML(DATA_SOURCE_YAM));
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
- Map<String, DataSourceConfiguration> actual =
registryCenter.loadDataSourceConfigurations("sharding_db");
- assertThat(actual.size(), is(2));
- assertDataSourceConfiguration(actual.get("ds_0"),
createDataSourceConfiguration(createDataSource("ds_0")));
- assertDataSourceConfiguration(actual.get("ds_1"),
createDataSourceConfiguration(createDataSource("ds_1")));
- }
-
- private void assertDataSourceConfiguration(final DataSourceConfiguration
actual, final DataSourceConfiguration expected) {
- assertThat(actual.getDataSourceClassName(),
is(expected.getDataSourceClassName()));
- assertThat(actual.getProps().get("url"),
is(expected.getProps().get("url")));
- assertThat(actual.getProps().get("username"),
is(expected.getProps().get("username")));
- assertThat(actual.getProps().get("password"),
is(expected.getProps().get("password")));
- }
-
- @Test
- public void assertLoadDataSourceConfigurationsNotExistPath() {
-
when(registryCenterRepository.get("/metadata/sharding_db/dataSources")).thenReturn("");
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
- Map<String, DataSourceConfiguration> actual =
registryCenter.loadDataSourceConfigurations("sharding_db");
- assertThat(actual.size(), is(0));
- }
-
- @Test
- public void assertLoadShardingAndEncryptRuleConfiguration() {
-
when(registryCenterRepository.get("/metadata/sharding_db/rules")).thenReturn(readYAML(SHARDING_AND_ENCRYPT_RULE_YAML));
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
- Collection<RuleConfiguration> ruleConfigurations =
registryCenter.loadRuleConfigurations("sharding_db");
- assertThat(ruleConfigurations.size(), is(2));
- for (RuleConfiguration each : ruleConfigurations) {
- if (each instanceof ShardingRuleConfiguration) {
- ShardingRuleConfiguration shardingRuleConfig =
(ShardingRuleConfiguration) each;
- assertThat(shardingRuleConfig.getTables().size(), is(1));
-
assertThat(shardingRuleConfig.getTables().iterator().next().getLogicTable(),
is("t_order"));
- } else if (each instanceof EncryptRuleConfiguration) {
- EncryptRuleConfiguration encryptRuleConfig =
(EncryptRuleConfiguration) each;
- assertThat(encryptRuleConfig.getEncryptors().size(), is(2));
- ShardingSphereAlgorithmConfiguration encryptAlgorithmConfig =
encryptRuleConfig.getEncryptors().get("aes_encryptor");
- assertThat(encryptAlgorithmConfig.getType(), is("AES"));
-
assertThat(encryptAlgorithmConfig.getProps().get("aes-key-value").toString(),
is("123456abcd"));
- }
- }
- }
-
- @Test
- public void assertLoadShardingRuleConfiguration() {
-
when(registryCenterRepository.get("/metadata/sharding_db/rules")).thenReturn(readYAML(SHARDING_RULE_YAML));
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
- Collection<RuleConfiguration> actual =
registryCenter.loadRuleConfigurations("sharding_db");
- assertThat(actual.size(), is(1));
- ShardingRuleConfiguration actualShardingRuleConfig =
(ShardingRuleConfiguration) actual.iterator().next();
- assertThat(actualShardingRuleConfig.getTables().size(), is(1));
-
assertThat(actualShardingRuleConfig.getTables().iterator().next().getLogicTable(),
is("t_order"));
- }
-
- @Test
- public void assertLoadReadwriteSplittingRuleConfiguration() {
-
when(registryCenterRepository.get("/metadata/sharding_db/rules")).thenReturn(readYAML(READWRITE_SPLITTING_RULE_YAML));
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
- Collection<RuleConfiguration> actual =
registryCenter.loadRuleConfigurations("sharding_db");
- ReadwriteSplittingRuleConfiguration config =
(ReadwriteSplittingRuleConfiguration) actual.iterator().next();
- assertThat(config.getDataSources().size(), is(1));
-
assertThat(config.getDataSources().iterator().next().getWriteDataSourceName(),
is("write_ds"));
-
assertThat(config.getDataSources().iterator().next().getReadDataSourceNames().size(),
is(2));
- }
-
- @Test
- public void assertLoadDatabaseDiscoveryRuleConfiguration() {
-
when(registryCenterRepository.get("/metadata/sharding_db/rules")).thenReturn(readYAML(DB_DISCOVERY_RULE_YAML));
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
- Collection<RuleConfiguration> actual =
registryCenter.loadRuleConfigurations("sharding_db");
- DatabaseDiscoveryRuleConfiguration config =
(DatabaseDiscoveryRuleConfiguration) actual.iterator().next();
- assertThat(config.getDataSources().size(), is(1));
-
assertThat(config.getDataSources().iterator().next().getDataSourceNames().size(),
is(3));
- }
-
- @Test
- public void assertLoadEncryptRuleConfiguration() {
-
when(registryCenterRepository.get("/metadata/sharding_db/rules")).thenReturn(readYAML(ENCRYPT_RULE_YAML));
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
- EncryptRuleConfiguration actual = (EncryptRuleConfiguration)
registryCenter.loadRuleConfigurations("sharding_db").iterator().next();
- assertThat(actual.getEncryptors().size(), is(1));
- ShardingSphereAlgorithmConfiguration encryptAlgorithmConfig =
actual.getEncryptors().get("order_encryptor");
- assertThat(encryptAlgorithmConfig.getType(), is("AES"));
-
assertThat(encryptAlgorithmConfig.getProps().get("aes-key-value").toString(),
is("123456"));
- }
-
- @Test
- public void assertLoadShadowRuleConfiguration() {
-
when(registryCenterRepository.get("/metadata/sharding_db/rules")).thenReturn(readYAML(SHADOW_RULE_YAML));
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
- ShadowRuleConfiguration actual = (ShadowRuleConfiguration)
registryCenter.loadRuleConfigurations("sharding_db").iterator().next();
- assertThat(actual.getSourceDataSourceNames(), is(Arrays.asList("ds",
"ds1")));
- assertThat(actual.getShadowDataSourceNames(),
is(Arrays.asList("shadow_ds", "shadow_ds1")));
- assertThat(actual.getColumn(), is("shadow"));
- }
-
- @Test
- public void assertLoadProperties() {
- when(registryCenterRepository.get("/props")).thenReturn(PROPS_YAML);
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
- Properties actual = registryCenter.loadProperties();
- assertThat(actual.get(ConfigurationPropertyKey.SQL_SHOW.getKey()),
is(Boolean.FALSE));
- }
-
- @Test
- public void assertLoadGlobalRuleConfigurations() {
-
when(registryCenterRepository.get("/rules")).thenReturn(readYAML(GLOBAL_RULE_YAML));
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
- Collection<RuleConfiguration> globalRuleConfigs =
registryCenter.loadGlobalRuleConfigurations();
- assertFalse(globalRuleConfigs.isEmpty());
- Collection<ShardingSphereUser> users =
globalRuleConfigs.stream().filter(each -> each instanceof
AuthorityRuleConfiguration)
- .flatMap(each -> ((AuthorityRuleConfiguration)
each).getUsers().stream()).collect(Collectors.toList());
- Optional<ShardingSphereUser> user = users.stream().filter(each ->
each.getGrantee().equals(new Grantee("root", ""))).findFirst();
- assertTrue(user.isPresent());
- assertThat(user.get().getPassword(), is("root"));
- Collection<ShardingSphereAlgorithmConfiguration> providers =
globalRuleConfigs.stream()
- .filter(each -> each instanceof AuthorityRuleConfiguration &&
Objects.nonNull(((AuthorityRuleConfiguration) each).getProvider()))
- .map(each -> ((AuthorityRuleConfiguration)
each).getProvider()).collect(Collectors.toList());
- assertFalse(providers.isEmpty());
- Optional<ShardingSphereAlgorithmConfiguration> nativeProvider =
providers.stream().filter(each -> "NATIVE".equals(each.getType())).findFirst();
- assertTrue(nativeProvider.isPresent());
- }
-
- @Test
public void assertLoadAllSchemaNames() {
when(registryCenterRepository.get("/metadata")).thenReturn("sharding_db,replica_query_db");
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
Collection<String> actual = registryCenter.loadAllSchemaNames();
assertThat(actual.size(), is(2));
assertThat(actual, hasItems("sharding_db"));
assertThat(actual, hasItems("replica_query_db"));
}
- @Test
- public void assertLoadDataSourceConfigurationsWithConnectionInitSQLs() {
-
when(registryCenterRepository.get("/metadata/sharding_db/dataSources")).thenReturn(readYAML(DATA_SOURCE_YAML_WITH_CONNECTION_INIT_SQL));
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
- Map<String, DataSourceConfiguration> actual =
registryCenter.loadDataSourceConfigurations("sharding_db");
- assertThat(actual.size(), is(2));
-
assertDataSourceConfigurationWithConnectionInitSqls(actual.get("ds_0"),
createDataSourceConfiguration(createDataSourceWithConnectionInitSqls("ds_0")));
-
assertDataSourceConfigurationWithConnectionInitSqls(actual.get("ds_1"),
createDataSourceConfiguration(createDataSourceWithConnectionInitSqls("ds_1")));
- }
-
- private DataSource createDataSourceWithConnectionInitSqls(final String
name) {
- MockDataSource result = new MockDataSource();
- result.setDriverClassName("com.mysql.jdbc.Driver");
- result.setUrl("jdbc:mysql://localhost:3306/" + name);
- result.setUsername("root");
- result.setPassword("root");
- result.setConnectionInitSqls(Arrays.asList("set names utf8mb4;", "set
names utf8;"));
- return result;
- }
-
- private void assertDataSourceConfigurationWithConnectionInitSqls(final
DataSourceConfiguration actual, final DataSourceConfiguration expected) {
- assertThat(actual.getDataSourceClassName(),
is(expected.getDataSourceClassName()));
- assertThat(actual.getProps().get("url"),
is(expected.getProps().get("url")));
- assertThat(actual.getProps().get("username"),
is(expected.getProps().get("username")));
- assertThat(actual.getProps().get("password"),
is(expected.getProps().get("password")));
- assertThat(actual.getProps().get("connectionInitSqls"),
is(expected.getProps().get("connectionInitSqls")));
- }
-
@SneakyThrows({IOException.class, URISyntaxException.class})
private String readYAML(final String yamlFile) {
return
Files.readAllLines(Paths.get(ClassLoader.getSystemResource(yamlFile).toURI()))
@@ -542,7 +345,6 @@ public final class RegistryCenterTest {
@Test
public void assertPersistSchemaNameWithExistSchema() {
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
when(registryCenterRepository.get("/metadata")).thenReturn("sharding_db");
registryCenter.persistConfigurations("sharding_db",
createDataSourceConfigurations(), createRuleConfigurations(), true);
verify(registryCenterRepository, times(0)).persist(eq("/metadata"),
eq("sharding_db"));
@@ -550,7 +352,6 @@ public final class RegistryCenterTest {
@Test
public void assertPersistSchemaNameWithExistAndNewSchema() {
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
when(registryCenterRepository.get("/metadata")).thenReturn("replica_query_db");
registryCenter.persistConfigurations("sharding_db",
createDataSourceConfigurations(), createRuleConfigurations(), true);
verify(registryCenterRepository).persist(eq("/metadata"),
eq("replica_query_db,sharding_db"));
@@ -559,7 +360,6 @@ public final class RegistryCenterTest {
@Test
public void assertRenewDataSourceEvent() {
DataSourceAddedEvent event = new DataSourceAddedEvent("sharding_db",
createDataSourceConfigurations());
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
registryCenter.renew(event);
verify(registryCenterRepository).persist(startsWith("/metadata/sharding_db/dataSources"),
anyString());
}
@@ -567,7 +367,6 @@ public final class RegistryCenterTest {
@Test
public void assertRenewDataSourceEventHasDataSourceConfig() {
DataSourceAddedEvent event = new DataSourceAddedEvent("sharding_db",
createDataSourceConfigurations());
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
String dataSourceYaml = "ds_0:\n"
+ " dataSourceClassName: xxx\n"
+ " url:
jdbc:mysql://127.0.0.1:3306/demo_ds_0?serverTimezone=UTC&useSSL=false\n"
@@ -587,7 +386,6 @@ public final class RegistryCenterTest {
@Test
public void assertRenewRuleEvent() {
RuleConfigurationsAlteredEvent event = new
RuleConfigurationsAlteredEvent("sharding_db", createRuleConfigurations());
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
registryCenter.renew(event);
verify(registryCenterRepository).persist(startsWith("/metadata/sharding_db/rules"),
anyString());
}
@@ -596,7 +394,6 @@ public final class RegistryCenterTest {
public void assertRenewSchemaNameEventWithDrop() {
MetaDataDroppedEvent event = new MetaDataDroppedEvent("sharding_db");
when(registryCenterRepository.get("/metadata")).thenReturn("sharding_db,replica_query_db");
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
registryCenter.renew(event);
verify(registryCenterRepository).persist(eq("/metadata"),
eq("replica_query_db"));
}
@@ -605,7 +402,6 @@ public final class RegistryCenterTest {
public void assertRenewSchemaNameEventWithDropAndNotExist() {
MetaDataDroppedEvent event = new MetaDataDroppedEvent("sharding_db");
when(registryCenterRepository.get("/metadata")).thenReturn("replica_query_db");
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
registryCenter.renew(event);
verify(registryCenterRepository, times(0)).persist(eq("/metadata"),
eq("replica_query_db"));
}
@@ -614,7 +410,6 @@ public final class RegistryCenterTest {
public void assertRenewSchemaNameEventWithAdd() {
MetaDataCreatedEvent event = new MetaDataCreatedEvent("sharding_db");
when(registryCenterRepository.get("/metadata")).thenReturn("replica_query_db");
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
registryCenter.renew(event);
verify(registryCenterRepository).persist(eq("/metadata"),
eq("replica_query_db,sharding_db"));
}
@@ -623,7 +418,6 @@ public final class RegistryCenterTest {
public void assertRenewSchemaNameEventWithAddAndExist() {
MetaDataCreatedEvent event = new MetaDataCreatedEvent("sharding_db");
when(registryCenterRepository.get("/metadata")).thenReturn("sharding_db,replica_query_db");
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
registryCenter.renew(event);
verify(registryCenterRepository, times(0)).persist(eq("/metadata"),
eq("sharding_db,replica_query_db"));
}
@@ -631,7 +425,6 @@ public final class RegistryCenterTest {
@Test
public void assertPersistSchema() {
ShardingSphereSchema schema = new
SchemaYamlSwapper().swapToObject(YamlEngine.unmarshal(readYAML(META_DATA_YAML),
YamlSchema.class));
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
registryCenter.persistSchema("sharding_db", schema);
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/schema"),
anyString());
}
@@ -639,7 +432,6 @@ public final class RegistryCenterTest {
@Test
public void assertLoadSchema() {
when(registryCenterRepository.get("/metadata/sharding_db/schema")).thenReturn(readYAML(META_DATA_YAML));
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
Optional<ShardingSphereSchema> schemaOptional =
registryCenter.loadSchema("sharding_db");
assertTrue(schemaOptional.isPresent());
Optional<ShardingSphereSchema> empty =
registryCenter.loadSchema("test");
@@ -655,14 +447,12 @@ public final class RegistryCenterTest {
@Test
public void assertRenewSchemaAlteredEvent() {
SchemaAlteredEvent event = new SchemaAlteredEvent("sharding_db", new
SchemaYamlSwapper().swapToObject(YamlEngine.unmarshal(readYAML(META_DATA_YAML),
YamlSchema.class)));
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
registryCenter.renew(event);
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/schema"),
anyString());
}
@Test
public void assertDeleteSchema() {
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
registryCenter.deleteSchema("sharding_db");
verify(registryCenterRepository).delete(eq("/metadata/sharding_db"));
}
@@ -670,7 +460,6 @@ public final class RegistryCenterTest {
@Test
@SneakyThrows
public void assertRenewSwitchRuleConfigurationEvent() {
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
Field field =
RegistryCenter.class.getDeclaredField("registryCacheManager");
field.setAccessible(true);
field.set(registryCenter, registryCacheManager);
@@ -684,7 +473,6 @@ public final class RegistryCenterTest {
@Test
public void assertRenewDataSourceAlteredEvent() {
DataSourceAlteredEvent event = new
DataSourceAlteredEvent("sharding_db", createDataSourceConfigurations());
- RegistryCenter registryCenter = new
RegistryCenter(registryCenterRepository);
registryCenter.renew(event);
verify(registryCenterRepository).persist(startsWith("/metadata/sharding_db/dataSources"),
anyString());
}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/impl/DataSourceRegistryServiceTest.java
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/impl/DataSourceRegistryServiceTest.java
new file mode 100644
index 0000000..8cb2334
--- /dev/null
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/impl/DataSourceRegistryServiceTest.java
@@ -0,0 +1,132 @@
+/*
+ * 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.impl;
+
+import lombok.SneakyThrows;
+import org.apache.shardingsphere.governance.core.registry.MockDataSource;
+import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
+import
org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.net.URISyntaxException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
+
+@RunWith(MockitoJUnitRunner.class)
+public final class DataSourceRegistryServiceTest {
+
+ private static final String DATA_SOURCE_YAM =
"yaml/registryCenter/data-source.yaml";
+
+ private static final String DATA_SOURCE_YAML_WITH_CONNECTION_INIT_SQL =
"yaml/registryCenter/data-source-init-sql.yaml";
+
+ @Mock
+ private RegistryCenterRepository registryCenterRepository;
+
+ private DataSourceRegistryService dataSourceRegistryService;
+
+ @Before
+ public void setUp() throws ReflectiveOperationException {
+ dataSourceRegistryService = new
DataSourceRegistryService(registryCenterRepository);
+ Field field =
dataSourceRegistryService.getClass().getDeclaredField("repository");
+ field.setAccessible(true);
+ field.set(dataSourceRegistryService, registryCenterRepository);
+ }
+
+ @Test
+ public void assertLoad() {
+
when(registryCenterRepository.get("/metadata/sharding_db/dataSources")).thenReturn(readYAML(DATA_SOURCE_YAM));
+ Map<String, DataSourceConfiguration> actual =
dataSourceRegistryService.load("sharding_db");
+ assertThat(actual.size(), is(2));
+ assertDataSourceConfiguration(actual.get("ds_0"),
createDataSourceConfiguration(createDataSource("ds_0")));
+ assertDataSourceConfiguration(actual.get("ds_1"),
createDataSourceConfiguration(createDataSource("ds_1")));
+ }
+
+ private void assertDataSourceConfiguration(final DataSourceConfiguration
actual, final DataSourceConfiguration expected) {
+ assertThat(actual.getDataSourceClassName(),
is(expected.getDataSourceClassName()));
+ assertThat(actual.getProps().get("url"),
is(expected.getProps().get("url")));
+ assertThat(actual.getProps().get("username"),
is(expected.getProps().get("username")));
+ assertThat(actual.getProps().get("password"),
is(expected.getProps().get("password")));
+ }
+
+ @Test
+ public void assertLoadWhenPathNotExist() {
+
when(registryCenterRepository.get("/metadata/sharding_db/dataSources")).thenReturn("");
+ Map<String, DataSourceConfiguration> actual =
dataSourceRegistryService.load("sharding_db");
+ assertThat(actual.size(), is(0));
+ }
+
+ @Test
+ public void assertLoadWithConnectionInitSQLs() {
+
when(registryCenterRepository.get("/metadata/sharding_db/dataSources")).thenReturn(readYAML(DATA_SOURCE_YAML_WITH_CONNECTION_INIT_SQL));
+ Map<String, DataSourceConfiguration> actual =
dataSourceRegistryService.load("sharding_db");
+ assertThat(actual.size(), is(2));
+
assertDataSourceConfigurationWithConnectionInitSQLs(actual.get("ds_0"),
createDataSourceConfiguration(createDataSourceWithConnectionInitSQLs("ds_0")));
+
assertDataSourceConfigurationWithConnectionInitSQLs(actual.get("ds_1"),
createDataSourceConfiguration(createDataSourceWithConnectionInitSQLs("ds_1")));
+ }
+
+ private DataSource createDataSourceWithConnectionInitSQLs(final String
name) {
+ MockDataSource result = new MockDataSource();
+ result.setDriverClassName("com.mysql.jdbc.Driver");
+ result.setUrl("jdbc:mysql://localhost:3306/" + name);
+ result.setUsername("root");
+ result.setPassword("root");
+ result.setConnectionInitSqls(Arrays.asList("set names utf8mb4;", "set
names utf8;"));
+ return result;
+ }
+
+ private void assertDataSourceConfigurationWithConnectionInitSQLs(final
DataSourceConfiguration actual, final DataSourceConfiguration expected) {
+ assertThat(actual.getDataSourceClassName(),
is(expected.getDataSourceClassName()));
+ assertThat(actual.getProps().get("url"),
is(expected.getProps().get("url")));
+ assertThat(actual.getProps().get("username"),
is(expected.getProps().get("username")));
+ assertThat(actual.getProps().get("password"),
is(expected.getProps().get("password")));
+ assertThat(actual.getProps().get("connectionInitSqls"),
is(expected.getProps().get("connectionInitSqls")));
+ }
+
+ private DataSourceConfiguration createDataSourceConfiguration(final
DataSource dataSource) {
+ return DataSourceConfiguration.getDataSourceConfiguration(dataSource);
+ }
+
+ @SneakyThrows({IOException.class, URISyntaxException.class})
+ private String readYAML(final String yamlFile) {
+ return
Files.readAllLines(Paths.get(ClassLoader.getSystemResource(yamlFile).toURI()))
+ .stream().filter(each -> !each.startsWith("#")).map(each ->
each + System.lineSeparator()).collect(Collectors.joining());
+ }
+
+ private DataSource createDataSource(final String name) {
+ MockDataSource result = new MockDataSource();
+ result.setDriverClassName("com.mysql.jdbc.Driver");
+ result.setUrl("jdbc:mysql://localhost:3306/" + name);
+ result.setUsername("root");
+ result.setPassword("root");
+ return result;
+ }
+}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/impl/GlobalRuleRegistryServiceTest.java
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/impl/GlobalRuleRegistryServiceTest.java
new file mode 100644
index 0000000..e7acda8
--- /dev/null
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/impl/GlobalRuleRegistryServiceTest.java
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.governance.core.registry.service.impl;
+
+import lombok.SneakyThrows;
+import
org.apache.shardingsphere.authority.api.config.AuthorityRuleConfiguration;
+import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
+import org.apache.shardingsphere.infra.config.RuleConfiguration;
+import
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
+import org.apache.shardingsphere.infra.metadata.user.Grantee;
+import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUser;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.net.URISyntaxException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.Collection;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.when;
+
+@RunWith(MockitoJUnitRunner.class)
+public final class GlobalRuleRegistryServiceTest {
+
+ private static final String GLOBAL_RULE_YAML =
"yaml/registryCenter/data-global-rule.yaml";
+
+ @Mock
+ private RegistryCenterRepository registryCenterRepository;
+
+ private GlobalRuleRegistryService globalRuleRegistryService;
+
+ @Before
+ public void setUp() throws ReflectiveOperationException {
+ globalRuleRegistryService = new
GlobalRuleRegistryService(registryCenterRepository);
+ Field field =
globalRuleRegistryService.getClass().getDeclaredField("repository");
+ field.setAccessible(true);
+ field.set(globalRuleRegistryService, registryCenterRepository);
+ }
+
+ @Test
+ public void assertLoad() {
+
when(registryCenterRepository.get("/rules")).thenReturn(readYAML(GLOBAL_RULE_YAML));
+ Collection<RuleConfiguration> globalRuleConfigs =
globalRuleRegistryService.load();
+ assertFalse(globalRuleConfigs.isEmpty());
+ Collection<ShardingSphereUser> users =
globalRuleConfigs.stream().filter(each -> each instanceof
AuthorityRuleConfiguration)
+ .flatMap(each -> ((AuthorityRuleConfiguration)
each).getUsers().stream()).collect(Collectors.toList());
+ Optional<ShardingSphereUser> user = users.stream().filter(each ->
each.getGrantee().equals(new Grantee("root", ""))).findFirst();
+ assertTrue(user.isPresent());
+ assertThat(user.get().getPassword(), is("root"));
+ Collection<ShardingSphereAlgorithmConfiguration> providers =
globalRuleConfigs.stream()
+ .filter(each -> each instanceof AuthorityRuleConfiguration &&
Objects.nonNull(((AuthorityRuleConfiguration) each).getProvider()))
+ .map(each -> ((AuthorityRuleConfiguration)
each).getProvider()).collect(Collectors.toList());
+ assertFalse(providers.isEmpty());
+ Optional<ShardingSphereAlgorithmConfiguration> nativeProvider =
providers.stream().filter(each -> "NATIVE".equals(each.getType())).findFirst();
+ assertTrue(nativeProvider.isPresent());
+ }
+
+ @SneakyThrows({IOException.class, URISyntaxException.class})
+ private String readYAML(final String yamlFile) {
+ return
Files.readAllLines(Paths.get(ClassLoader.getSystemResource(yamlFile).toURI()))
+ .stream().filter(each -> !each.startsWith("#")).map(each ->
each + System.lineSeparator()).collect(Collectors.joining());
+ }
+}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/lock/LockRegistryCenterTest.java
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/impl/LockRegistryServiceTest.java
similarity index 78%
copy from
shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/lock/LockRegistryCenterTest.java
copy to
shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/impl/LockRegistryServiceTest.java
index f0fe4b2..f3672c3 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/lock/LockRegistryCenterTest.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/impl/LockRegistryServiceTest.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.governance.core.registry.lock;
+package org.apache.shardingsphere.governance.core.registry.service.impl;
import org.apache.shardingsphere.governance.core.lock.node.LockNode;
import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
@@ -33,36 +33,36 @@ import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.verify;
@RunWith(MockitoJUnitRunner.class)
-public final class LockRegistryCenterTest {
+public final class LockRegistryServiceTest {
@Mock
private RegistryCenterRepository registryCenterRepository;
- private LockRegistryCenter lockRegistryCenter;
+ private LockRegistryService lockRegistryService;
@Before
public void setUp() throws ReflectiveOperationException {
- lockRegistryCenter = new LockRegistryCenter(registryCenterRepository);
- Field field =
lockRegistryCenter.getClass().getDeclaredField("repository");
+ lockRegistryService = new
LockRegistryService(registryCenterRepository);
+ Field field =
lockRegistryService.getClass().getDeclaredField("repository");
field.setAccessible(true);
- field.set(lockRegistryCenter, registryCenterRepository);
+ field.set(lockRegistryService, registryCenterRepository);
}
@Test
public void assertTryLock() {
- lockRegistryCenter.tryLock("test", 50L);
+ lockRegistryService.tryLock("test", 50L);
verify(registryCenterRepository).tryLock(eq(new
LockNode().getLockNodePath("test")), eq(50L), eq(TimeUnit.MILLISECONDS));
}
@Test
public void assertReleaseLock() {
- lockRegistryCenter.releaseLock("test");
+ lockRegistryService.releaseLock("test");
verify(registryCenterRepository).releaseLock(eq(new
LockNode().getLockNodePath("test")));
}
@Test
public void assertDeleteLockAck() {
- lockRegistryCenter.deleteLockAck("test");
+ lockRegistryService.deleteLockAck("test");
verify(registryCenterRepository).delete(anyString());
}
}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/lock/LockRegistryCenterTest.java
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/impl/PropertiesRegistryServiceTest.java
similarity index 52%
rename from
shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/lock/LockRegistryCenterTest.java
rename to
shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/impl/PropertiesRegistryServiceTest.java
index f0fe4b2..eaa9888 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/lock/LockRegistryCenterTest.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/impl/PropertiesRegistryServiceTest.java
@@ -15,10 +15,10 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.governance.core.registry.lock;
+package org.apache.shardingsphere.governance.core.registry.service.impl;
-import org.apache.shardingsphere.governance.core.lock.node.LockNode;
import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
+import
org.apache.shardingsphere.infra.config.properties.ConfigurationPropertyKey;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -26,43 +26,34 @@ import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import java.lang.reflect.Field;
-import java.util.concurrent.TimeUnit;
+import java.util.Properties;
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.verify;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
-public final class LockRegistryCenterTest {
+public final class PropertiesRegistryServiceTest {
+
+ private static final String PROPS_YAML =
ConfigurationPropertyKey.SQL_SHOW.getKey() + ": false\n";
@Mock
private RegistryCenterRepository registryCenterRepository;
- private LockRegistryCenter lockRegistryCenter;
+ private PropertiesRegistryService propertiesRegistryService;
@Before
public void setUp() throws ReflectiveOperationException {
- lockRegistryCenter = new LockRegistryCenter(registryCenterRepository);
- Field field =
lockRegistryCenter.getClass().getDeclaredField("repository");
+ propertiesRegistryService = new
PropertiesRegistryService(registryCenterRepository);
+ Field field =
propertiesRegistryService.getClass().getDeclaredField("repository");
field.setAccessible(true);
- field.set(lockRegistryCenter, registryCenterRepository);
- }
-
- @Test
- public void assertTryLock() {
- lockRegistryCenter.tryLock("test", 50L);
- verify(registryCenterRepository).tryLock(eq(new
LockNode().getLockNodePath("test")), eq(50L), eq(TimeUnit.MILLISECONDS));
- }
-
- @Test
- public void assertReleaseLock() {
- lockRegistryCenter.releaseLock("test");
- verify(registryCenterRepository).releaseLock(eq(new
LockNode().getLockNodePath("test")));
+ field.set(propertiesRegistryService, registryCenterRepository);
}
@Test
- public void assertDeleteLockAck() {
- lockRegistryCenter.deleteLockAck("test");
- verify(registryCenterRepository).delete(anyString());
+ public void assertLoad() {
+ when(registryCenterRepository.get("/props")).thenReturn(PROPS_YAML);
+ Properties actual = propertiesRegistryService.load();
+ assertThat(actual.get(ConfigurationPropertyKey.SQL_SHOW.getKey()),
is(Boolean.FALSE));
}
}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/impl/SchemaRuleRegistryServiceTest.java
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/impl/SchemaRuleRegistryServiceTest.java
new file mode 100644
index 0000000..efc2ca9
--- /dev/null
+++
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/impl/SchemaRuleRegistryServiceTest.java
@@ -0,0 +1,149 @@
+/*
+ * 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.impl;
+
+import lombok.SneakyThrows;
+import
org.apache.shardingsphere.dbdiscovery.api.config.DatabaseDiscoveryRuleConfiguration;
+import org.apache.shardingsphere.encrypt.api.config.EncryptRuleConfiguration;
+import
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
+import org.apache.shardingsphere.infra.config.RuleConfiguration;
+import
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
+import
org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
+import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
+import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.net.URISyntaxException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.stream.Collectors;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
+
+@RunWith(MockitoJUnitRunner.class)
+public final class SchemaRuleRegistryServiceTest {
+
+ private static final String SHARDING_RULE_YAML =
"yaml/registryCenter/data-sharding-rule.yaml";
+
+ private static final String READWRITE_SPLITTING_RULE_YAML =
"yaml/registryCenter/data-readwrite-splitting-rule.yaml";
+
+ private static final String DB_DISCOVERY_RULE_YAML =
"yaml/registryCenter/data-database-discovery-rule.yaml";
+
+ private static final String ENCRYPT_RULE_YAML =
"yaml/registryCenter/data-encrypt-rule.yaml";
+
+ private static final String SHADOW_RULE_YAML =
"yaml/registryCenter/data-shadow-rule.yaml";
+
+ private static final String SHARDING_AND_ENCRYPT_RULE_YAML =
"yaml/registryCenter/data-sharding-encrypt-rule.yaml";
+
+ @Mock
+ private RegistryCenterRepository registryCenterRepository;
+
+ private SchemaRuleRegistryService schemaRuleRegistryService;
+
+ @Before
+ public void setUp() throws ReflectiveOperationException {
+ schemaRuleRegistryService = new
SchemaRuleRegistryService(registryCenterRepository);
+ Field field =
schemaRuleRegistryService.getClass().getDeclaredField("repository");
+ field.setAccessible(true);
+ field.set(schemaRuleRegistryService, registryCenterRepository);
+ }
+
+ @Test
+ public void assertLoadShardingAndEncryptRuleConfigurations() {
+
when(registryCenterRepository.get("/metadata/sharding_db/rules")).thenReturn(readYAML(SHARDING_AND_ENCRYPT_RULE_YAML));
+ Collection<RuleConfiguration> ruleConfigurations =
schemaRuleRegistryService.load("sharding_db");
+ assertThat(ruleConfigurations.size(), is(2));
+ for (RuleConfiguration each : ruleConfigurations) {
+ if (each instanceof ShardingRuleConfiguration) {
+ ShardingRuleConfiguration shardingRuleConfig =
(ShardingRuleConfiguration) each;
+ assertThat(shardingRuleConfig.getTables().size(), is(1));
+
assertThat(shardingRuleConfig.getTables().iterator().next().getLogicTable(),
is("t_order"));
+ } else if (each instanceof EncryptRuleConfiguration) {
+ EncryptRuleConfiguration encryptRuleConfig =
(EncryptRuleConfiguration) each;
+ assertThat(encryptRuleConfig.getEncryptors().size(), is(2));
+ ShardingSphereAlgorithmConfiguration encryptAlgorithmConfig =
encryptRuleConfig.getEncryptors().get("aes_encryptor");
+ assertThat(encryptAlgorithmConfig.getType(), is("AES"));
+
assertThat(encryptAlgorithmConfig.getProps().get("aes-key-value").toString(),
is("123456abcd"));
+ }
+ }
+ }
+
+ @Test
+ public void assertLoadShardingRuleConfiguration() {
+
when(registryCenterRepository.get("/metadata/sharding_db/rules")).thenReturn(readYAML(SHARDING_RULE_YAML));
+ Collection<RuleConfiguration> actual =
schemaRuleRegistryService.load("sharding_db");
+ assertThat(actual.size(), is(1));
+ ShardingRuleConfiguration actualShardingRuleConfig =
(ShardingRuleConfiguration) actual.iterator().next();
+ assertThat(actualShardingRuleConfig.getTables().size(), is(1));
+
assertThat(actualShardingRuleConfig.getTables().iterator().next().getLogicTable(),
is("t_order"));
+ }
+
+ @Test
+ public void assertLoadReadwriteSplittingRuleConfiguration() {
+
when(registryCenterRepository.get("/metadata/sharding_db/rules")).thenReturn(readYAML(READWRITE_SPLITTING_RULE_YAML));
+ Collection<RuleConfiguration> actual =
schemaRuleRegistryService.load("sharding_db");
+ ReadwriteSplittingRuleConfiguration config =
(ReadwriteSplittingRuleConfiguration) actual.iterator().next();
+ assertThat(config.getDataSources().size(), is(1));
+
assertThat(config.getDataSources().iterator().next().getWriteDataSourceName(),
is("write_ds"));
+
assertThat(config.getDataSources().iterator().next().getReadDataSourceNames().size(),
is(2));
+ }
+
+ @Test
+ public void assertLoadDatabaseDiscoveryRuleConfiguration() {
+
when(registryCenterRepository.get("/metadata/sharding_db/rules")).thenReturn(readYAML(DB_DISCOVERY_RULE_YAML));
+ Collection<RuleConfiguration> actual =
schemaRuleRegistryService.load("sharding_db");
+ DatabaseDiscoveryRuleConfiguration config =
(DatabaseDiscoveryRuleConfiguration) actual.iterator().next();
+ assertThat(config.getDataSources().size(), is(1));
+
assertThat(config.getDataSources().iterator().next().getDataSourceNames().size(),
is(3));
+ }
+
+ @Test
+ public void assertLoadEncryptRuleConfiguration() {
+
when(registryCenterRepository.get("/metadata/sharding_db/rules")).thenReturn(readYAML(ENCRYPT_RULE_YAML));
+ EncryptRuleConfiguration actual = (EncryptRuleConfiguration)
schemaRuleRegistryService.load("sharding_db").iterator().next();
+ assertThat(actual.getEncryptors().size(), is(1));
+ ShardingSphereAlgorithmConfiguration encryptAlgorithmConfig =
actual.getEncryptors().get("order_encryptor");
+ assertThat(encryptAlgorithmConfig.getType(), is("AES"));
+
assertThat(encryptAlgorithmConfig.getProps().get("aes-key-value").toString(),
is("123456"));
+ }
+
+ @Test
+ public void assertLoadShadowRuleConfiguration() {
+
when(registryCenterRepository.get("/metadata/sharding_db/rules")).thenReturn(readYAML(SHADOW_RULE_YAML));
+ ShadowRuleConfiguration actual = (ShadowRuleConfiguration)
schemaRuleRegistryService.load("sharding_db").iterator().next();
+ assertThat(actual.getSourceDataSourceNames(), is(Arrays.asList("ds",
"ds1")));
+ assertThat(actual.getShadowDataSourceNames(),
is(Arrays.asList("shadow_ds", "shadow_ds1")));
+ assertThat(actual.getColumn(), is("shadow"));
+ }
+
+ @SneakyThrows({IOException.class, URISyntaxException.class})
+ private String readYAML(final String yamlFile) {
+ return
Files.readAllLines(Paths.get(ClassLoader.getSystemResource(yamlFile).toURI()))
+ .stream().filter(each -> !each.startsWith("#")).map(each ->
each + System.lineSeparator()).collect(Collectors.joining());
+ }
+}
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSource.java
b/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSource.java
index 7576ebf..cf0b416 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSource.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSource.java
@@ -93,11 +93,11 @@ public final class GovernanceShardingSphereDataSource
extends AbstractUnsupporte
private StandardMetaDataContexts createMetaDataContexts(final
GovernanceFacade governanceFacade) throws SQLException {
RegistryCenter registryCenter = governanceFacade.getRegistryCenter();
- Map<String, DataSourceConfiguration> dataSourceConfigs =
registryCenter.loadDataSourceConfigurations(DefaultSchema.LOGIC_NAME);
- Collection<RuleConfiguration> ruleConfigurations =
registryCenter.loadRuleConfigurations(DefaultSchema.LOGIC_NAME);
+ Map<String, DataSourceConfiguration> dataSourceConfigs =
registryCenter.getDataSourceService().load(DefaultSchema.LOGIC_NAME);
+ Collection<RuleConfiguration> ruleConfigurations =
registryCenter.getSchemaRuleService().load(DefaultSchema.LOGIC_NAME);
Map<String, DataSource> dataSourceMap =
DataSourceConverter.getDataSourceMap(dataSourceConfigs);
MetaDataContextsBuilder metaDataContextsBuilder = new
MetaDataContextsBuilder(Collections.singletonMap(DefaultSchema.LOGIC_NAME,
dataSourceMap),
- Collections.singletonMap(DefaultSchema.LOGIC_NAME,
ruleConfigurations), registryCenter.loadGlobalRuleConfigurations(),
registryCenter.loadProperties());
+ Collections.singletonMap(DefaultSchema.LOGIC_NAME,
ruleConfigurations), registryCenter.getGlobalRuleService().load(),
registryCenter.getPropsService().load());
return metaDataContextsBuilder.build();
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/GovernanceBootstrapInitializer.java
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/GovernanceBootstrapInitializer.java
index 43f0439..b574c52 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/GovernanceBootstrapInitializer.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/GovernanceBootstrapInitializer.java
@@ -98,21 +98,22 @@ public final class GovernanceBootstrapInitializer extends
AbstractBootstrapIniti
Collection<String> schemaNames =
governanceFacade.getRegistryCenter().loadAllSchemaNames();
Map<String, Map<String, DataSourceParameter>> schemaDataSources =
loadDataSourceParametersMap(schemaNames);
Map<String, Collection<RuleConfiguration>> schemaRules =
loadSchemaRules(schemaNames);
- Properties props =
governanceFacade.getRegistryCenter().loadProperties();
+ Properties props =
governanceFacade.getRegistryCenter().getPropsService().load();
// TODO load global rules from reg center
- Collection<RuleConfiguration> globalRuleConfigs =
governanceFacade.getRegistryCenter().loadGlobalRuleConfigurations();
+ Collection<RuleConfiguration> globalRuleConfigs =
governanceFacade.getRegistryCenter().getGlobalRuleService().load();
return new ProxyConfiguration(schemaDataSources, schemaRules,
globalRuleConfigs, props);
}
private Map<String, Map<String, DataSourceParameter>>
loadDataSourceParametersMap(final Collection<String> schemaNames) {
return schemaNames.stream()
- .collect(Collectors.toMap(each -> each, each ->
DataSourceParameterConverter.getDataSourceParameterMap(governanceFacade.getRegistryCenter().loadDataSourceConfigurations(each)),
+ .collect(Collectors.toMap(each -> each,
+ each ->
DataSourceParameterConverter.getDataSourceParameterMap(governanceFacade.getRegistryCenter().getDataSourceService().load(each)),
(oldValue, currentValue) -> oldValue, LinkedHashMap::new));
}
private Map<String, Collection<RuleConfiguration>> loadSchemaRules(final
Collection<String> schemaNames) {
- return schemaNames.stream()
- .collect(Collectors.toMap(each -> each, each ->
governanceFacade.getRegistryCenter().loadRuleConfigurations(each), (oldValue,
currentValue) -> oldValue, LinkedHashMap::new));
+ return schemaNames.stream().collect(
+ Collectors.toMap(each -> each, each ->
governanceFacade.getRegistryCenter().getSchemaRuleService().load(each),
(oldValue, currentValue) -> oldValue, LinkedHashMap::new));
}
@Override