This is an automated email from the ASF dual-hosted git repository.
menghaoran 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 5e3a3f808b0 Unify ContextManagerBuilder impl (#18795)
5e3a3f808b0 is described below
commit 5e3a3f808b0db72b5957bf202eef3105eb69be1b
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Jul 3 00:44:50 2022 +0800
Unify ContextManagerBuilder impl (#18795)
---
.../dbdiscovery/rule/DatabaseDiscoveryRule.java | 42 ++++++++++----------
.../shardingsphere/sharding/rule/ShardingRule.java | 18 ++++-----
.../core/connection/ConnectionManagerTest.java | 16 +-------
.../cluster/ClusterContextManagerBuilder.java | 46 +++++++++++-----------
.../ClusterContextManagerCoordinator.java | 20 +++++-----
.../ClusterContextManagerCoordinatorTest.java | 16 ++++----
.../memory/MemoryContextManagerBuilder.java | 14 +++----
.../StandaloneContextManagerBuilder.java | 30 ++++++--------
.../rdl/rule/RuleDefinitionBackendHandler.java | 4 +-
.../pipeline/core/util/PipelineContextUtil.java | 8 ++--
10 files changed, 98 insertions(+), 116 deletions(-)
diff --git
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryRule.java
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryRule.java
index a46964674e6..caacbd7530b 100644
---
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryRule.java
+++
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryRule.java
@@ -59,7 +59,7 @@ import java.util.stream.Collectors;
/**
* Database discovery rule.
*/
-public final class DatabaseDiscoveryRule implements DatabaseRule,
DataSourceContainedRule, StatusContainedRule, ExportableRule, InstanceAwareRule
{
+public final class DatabaseDiscoveryRule implements DatabaseRule,
InstanceAwareRule, DataSourceContainedRule, StatusContainedRule, ExportableRule
{
@Getter
private final RuleConfiguration configuration;
@@ -127,6 +127,26 @@ public final class DatabaseDiscoveryRule implements
DatabaseRule, DataSourceCont
DynamicDataSourceStrategyFactory.findInstance().ifPresent(optional ->
optional.init(this));
}
+ @Override
+ public void setInstanceContext(final InstanceContext instanceContext) {
+
initHeartBeatJobs(instanceContext.getInstance().getInstanceMetaData().getId());
+ }
+
+ private void initHeartBeatJobs(final String instanceId) {
+ Optional<ModeScheduleContext> modeScheduleContext =
ModeScheduleContextFactory.getInstance().get(instanceId);
+ if (modeScheduleContext.isPresent()) {
+ for (Entry<String, DatabaseDiscoveryDataSourceRule> entry :
dataSourceRules.entrySet()) {
+ DatabaseDiscoveryDataSourceRule rule = entry.getValue();
+ Map<String, DataSource> dataSources =
dataSourceMap.entrySet().stream().filter(each ->
!rule.getDisabledDataSourceNames().contains(each.getKey()))
+ .collect(Collectors.toMap(Entry::getKey,
Entry::getValue));
+ String jobName =
rule.getDatabaseDiscoveryProviderAlgorithm().getType() + "-" + databaseName +
"-" + rule.getGroupName();
+ CronJob job = new CronJob(jobName, each -> new
HeartbeatJob(databaseName, rule.getGroupName(),
rule.getPrimaryDataSourceName(), dataSources,
+ rule.getDatabaseDiscoveryProviderAlgorithm(),
rule.getDisabledDataSourceNames()).execute(null),
rule.getHeartbeatProps().getProperty("keep-alive-cron"));
+ modeScheduleContext.get().startCronJob(job);
+ }
+ }
+ }
+
/**
* Get single data source rule.
*
@@ -186,28 +206,8 @@ public final class DatabaseDiscoveryRule implements
DatabaseRule, DataSourceCont
return result;
}
- private void initHeartBeatJobs(final InstanceContext instanceContext) {
- Optional<ModeScheduleContext> modeScheduleContext =
ModeScheduleContextFactory.getInstance().get(instanceContext.getInstance().getInstanceMetaData().getId());
- if (modeScheduleContext.isPresent()) {
- for (Entry<String, DatabaseDiscoveryDataSourceRule> entry :
dataSourceRules.entrySet()) {
- DatabaseDiscoveryDataSourceRule rule = entry.getValue();
- Map<String, DataSource> dataSources =
dataSourceMap.entrySet().stream().filter(each ->
!rule.getDisabledDataSourceNames().contains(each.getKey()))
- .collect(Collectors.toMap(Entry::getKey,
Entry::getValue));
- String jobName =
rule.getDatabaseDiscoveryProviderAlgorithm().getType() + "-" + databaseName +
"-" + rule.getGroupName();
- CronJob job = new CronJob(jobName, each -> new
HeartbeatJob(databaseName, rule.getGroupName(),
rule.getPrimaryDataSourceName(), dataSources,
- rule.getDatabaseDiscoveryProviderAlgorithm(),
rule.getDisabledDataSourceNames()).execute(null),
rule.getHeartbeatProps().getProperty("keep-alive-cron"));
- modeScheduleContext.get().startCronJob(job);
- }
- }
- }
-
@Override
public String getType() {
return DatabaseDiscoveryRule.class.getSimpleName();
}
-
- @Override
- public void setInstanceContext(final InstanceContext instanceContext) {
- initHeartBeatJobs(instanceContext);
- }
}
diff --git
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
index ee827159edb..68ee7e50d7a 100644
---
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
@@ -83,7 +83,7 @@ import java.util.stream.Collectors;
* Sharding rule.
*/
@Getter
-public final class ShardingRule implements DatabaseRule,
DataNodeContainedRule, TableContainedRule, InstanceAwareRule {
+public final class ShardingRule implements DatabaseRule, InstanceAwareRule,
DataNodeContainedRule, TableContainedRule {
private static final String ALGORITHM_EXPRESSION_KEY =
"algorithm-expression";
@@ -307,6 +307,14 @@ public final class ShardingRule implements DatabaseRule,
DataNodeContainedRule,
return null == shardingColumn ? "" : shardingColumn;
}
+ @Override
+ public void setInstanceContext(final InstanceContext instanceContext) {
+ keyGenerators.values().stream().filter(each -> each instanceof
InstanceAwareAlgorithm).forEach(each -> ((InstanceAwareAlgorithm)
each).setInstanceContext(instanceContext));
+ if (defaultKeyGenerateAlgorithm instanceof InstanceAwareAlgorithm) {
+ ((InstanceAwareAlgorithm)
defaultKeyGenerateAlgorithm).setInstanceContext(instanceContext);
+ }
+ }
+
@Override
public Collection<String> getAllTables() {
Collection<String> result = new HashSet<>(getTables());
@@ -774,14 +782,6 @@ public final class ShardingRule implements DatabaseRule,
DataNodeContainedRule,
return binaryExpression.getLeft() instanceof ColumnSegment &&
binaryExpression.getRight() instanceof ColumnSegment &&
"=".equals(binaryExpression.getOperator());
}
- @Override
- public void setInstanceContext(final InstanceContext instanceContext) {
- keyGenerators.values().stream().filter(each -> each instanceof
InstanceAwareAlgorithm).forEach(each -> ((InstanceAwareAlgorithm)
each).setInstanceContext(instanceContext));
- if (defaultKeyGenerateAlgorithm instanceof InstanceAwareAlgorithm) {
- ((InstanceAwareAlgorithm)
defaultKeyGenerateAlgorithm).setInstanceContext(instanceContext);
- }
- }
-
private ShardingAlgorithm createShardingAlgorithm(final String name, final
ShardingSphereAlgorithmConfiguration config, final
Collection<ShardingTableRuleConfiguration> tables,
final
Collection<ShardingAutoTableRuleConfiguration> autoTables) {
Map<String, String> algorithmTablePrefixMap =
getAlgorithmTablePrefixMap(tables, autoTables);
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManagerTest.java
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManagerTest.java
index 7d62061b1a9..5590e84cd4a 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManagerTest.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManagerTest.java
@@ -30,9 +30,6 @@ import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
import org.apache.shardingsphere.test.mock.MockedDataSource;
import org.apache.shardingsphere.traffic.rule.TrafficRule;
-import org.apache.shardingsphere.traffic.rule.TrafficStrategyRule;
-import org.apache.shardingsphere.traffic.spi.TrafficAlgorithm;
-import org.apache.shardingsphere.traffic.spi.TrafficLoadBalanceAlgorithm;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.apache.shardingsphere.transaction.core.TransactionTypeHolder;
import org.apache.shardingsphere.transaction.rule.TransactionRule;
@@ -87,10 +84,9 @@ public final class ConnectionManagerTest {
private ContextManager mockContextManager() throws SQLException {
ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
Map<String, DataSource> dataSourceMap = mockDataSourceMap();
- TrafficRule trafficRule = mockTrafficRule();
- MetaDataPersistService metaDataPersistService =
mockMetaDataPersistService();
+ MetaDataPersistService persistService = mockMetaDataPersistService();
when(result.getDataSourceMap(DefaultDatabase.LOGIC_NAME)).thenReturn(dataSourceMap);
-
when(result.getMetaDataContexts().getPersistService()).thenReturn(Optional.of(metaDataPersistService));
+
when(result.getMetaDataContexts().getPersistService()).thenReturn(Optional.of(persistService));
ShardingSphereRuleMetaData globalRuleMetaData =
mock(ShardingSphereRuleMetaData.class);
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
when(globalRuleMetaData.getSingleRule(TransactionRule.class)).thenReturn(mock(TransactionRule.class,
RETURNS_DEEP_STUBS));
@@ -130,14 +126,6 @@ public final class ConnectionManagerTest {
return result;
}
- private TrafficRule mockTrafficRule() {
- TrafficRule result = mock(TrafficRule.class);
- when(result.getLabels()).thenReturn(Arrays.asList("OLTP", "OLAP"));
- when(result.getStrategyRules()).thenReturn(Collections.singletonList(
- new TrafficStrategyRule("sql_match", Arrays.asList("OLTP",
"OLAP"), mock(TrafficAlgorithm.class),
mock(TrafficLoadBalanceAlgorithm.class))));
- return result;
- }
-
private Map<String, DataSource> mockDataSourceMap() throws SQLException {
Map<String, DataSource> result = new HashMap<>(2, 1);
result.put("ds", new MockedDataSource());
diff --git
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
index 8793b7830e8..52916e3e0fd 100644
---
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
+++
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
@@ -64,42 +64,43 @@ public final class ClusterContextManagerBuilder implements
ContextManagerBuilder
MetaDataPersistService persistService = new
MetaDataPersistService(repository);
persistConfigurations(persistService, parameter);
RegistryCenter registryCenter = new RegistryCenter(repository);
- MetaDataContexts metaDataContexts =
createMetaDataContexts(persistService, parameter);
+ MetaDataContexts metaDataContexts =
buildMetaDataContexts(persistService, parameter);
persistMetaData(metaDataContexts);
- ContextManager result = createContextManager(repository,
registryCenter, parameter.getInstanceMetaData(), metaDataContexts,
parameter.getModeConfig());
- registerOnline(persistService, parameter, result, registryCenter);
+ InstanceContext instanceContext = buildInstanceContext(registryCenter,
parameter.getInstanceMetaData(), parameter.getModeConfig());
+ registryCenter.getRepository().watchSessionConnection(instanceContext);
+ ContextManager result = new ContextManager(metaDataContexts,
instanceContext);
+ registerOnline(persistService, registryCenter, parameter, result);
return result;
}
- private void persistConfigurations(final MetaDataPersistService
metaDataPersistService, final ContextManagerBuilderParameter parameter) {
+ private void persistConfigurations(final MetaDataPersistService
persistService, final ContextManagerBuilderParameter parameter) {
boolean isOverwrite = parameter.getModeConfig().isOverwrite();
if (!parameter.isEmpty()) {
-
metaDataPersistService.persistConfigurations(parameter.getDatabaseConfigs(),
parameter.getGlobalRuleConfigs(), parameter.getProps(), isOverwrite);
+
persistService.persistConfigurations(parameter.getDatabaseConfigs(),
parameter.getGlobalRuleConfigs(), parameter.getProps(), isOverwrite);
}
}
- private MetaDataContexts createMetaDataContexts(final
MetaDataPersistService persistService, final ContextManagerBuilderParameter
parameter) throws SQLException {
+ private MetaDataContexts buildMetaDataContexts(final
MetaDataPersistService persistService, final ContextManagerBuilderParameter
parameter) throws SQLException {
Collection<String> databaseNames = parameter.getInstanceMetaData()
instanceof JDBCInstanceMetaData
? parameter.getDatabaseConfigs().keySet()
:
persistService.getSchemaMetaDataService().loadAllDatabaseNames();
Collection<RuleConfiguration> globalRuleConfigs =
persistService.getGlobalRuleService().load();
ConfigurationProperties props = new
ConfigurationProperties(persistService.getPropsService().load());
- Map<String, ShardingSphereDatabase> databases =
ShardingSphereDatabasesFactory.create(getDatabaseConfigMap(databaseNames,
persistService, parameter), props);
+ Map<String, ShardingSphereDatabase> databases =
ShardingSphereDatabasesFactory.create(buildDatabaseConfigMap(databaseNames,
persistService, parameter), props);
ShardingSphereRuleMetaData globalMetaData = new
ShardingSphereRuleMetaData(GlobalRulesBuilder.buildRules(globalRuleConfigs,
databases));
return new MetaDataContexts(persistService, new
ShardingSphereMetaData(databases, globalMetaData, props),
OptimizerContextFactory.create(databases, globalMetaData));
}
- private Map<String, DatabaseConfiguration> getDatabaseConfigMap(final
Collection<String> databaseNames,
- final
MetaDataPersistService metaDataPersistService, final
ContextManagerBuilderParameter parameter) {
+ private Map<String, DatabaseConfiguration> buildDatabaseConfigMap(final
Collection<String> databaseNames,
+ final
MetaDataPersistService persistService, final ContextManagerBuilderParameter
parameter) {
Map<String, DatabaseConfiguration> result = new
HashMap<>(databaseNames.size(), 1);
- databaseNames.forEach(each -> result.put(each,
createDatabaseConfiguration(each, metaDataPersistService, parameter)));
+ databaseNames.forEach(each -> result.put(each,
buildDatabaseConfiguration(each, persistService, parameter)));
return result;
}
- private DatabaseConfiguration createDatabaseConfiguration(final String
databaseName,
- final
MetaDataPersistService metaDataPersistService, final
ContextManagerBuilderParameter parameter) {
- Map<String, DataSource> dataSources =
metaDataPersistService.getEffectiveDataSources(databaseName,
parameter.getDatabaseConfigs());
- Collection<RuleConfiguration> databaseRuleConfigs =
metaDataPersistService.getDatabaseRulePersistService().load(databaseName);
+ private DatabaseConfiguration buildDatabaseConfiguration(final String
databaseName, final MetaDataPersistService persistService, final
ContextManagerBuilderParameter parameter) {
+ Map<String, DataSource> dataSources =
persistService.getEffectiveDataSources(databaseName,
parameter.getDatabaseConfigs());
+ Collection<RuleConfiguration> databaseRuleConfigs =
persistService.getDatabaseRulePersistService().load(databaseName);
return new DataSourceProvidedDatabaseConfiguration(dataSources,
databaseRuleConfigs);
}
@@ -108,20 +109,17 @@ public final class ClusterContextManagerBuilder
implements ContextManagerBuilder
.forEach((schemaName, tables) ->
metaDataContexts.getPersistService().ifPresent(optional ->
optional.getSchemaMetaDataService().persistMetaData(databaseName, schemaName,
tables))));
}
- private ContextManager createContextManager(final ClusterPersistRepository
repository, final RegistryCenter registryCenter, final InstanceMetaData
instanceMetaData,
- final MetaDataContexts
metaDataContexts, final ModeConfiguration modeConfig) {
- ClusterWorkerIdGenerator clusterWorkerIdGenerator = new
ClusterWorkerIdGenerator(repository, registryCenter, instanceMetaData);
- DistributedLockContext distributedLockContext = new
DistributedLockContext(repository);
- InstanceContext instanceContext = new InstanceContext(new
ComputeNodeInstance(instanceMetaData), clusterWorkerIdGenerator, modeConfig,
distributedLockContext);
- repository.watchSessionConnection(instanceContext);
- return new ContextManager(metaDataContexts, instanceContext);
+ private InstanceContext buildInstanceContext(final RegistryCenter
registryCenter, final InstanceMetaData instanceMetaData, final
ModeConfiguration modeConfig) {
+ ClusterWorkerIdGenerator clusterWorkerIdGenerator = new
ClusterWorkerIdGenerator(registryCenter.getRepository(), registryCenter,
instanceMetaData);
+ DistributedLockContext distributedLockContext = new
DistributedLockContext(registryCenter.getRepository());
+ return new InstanceContext(new ComputeNodeInstance(instanceMetaData),
clusterWorkerIdGenerator, modeConfig, distributedLockContext);
}
- private void registerOnline(final MetaDataPersistService
metaDataPersistService,
- final ContextManagerBuilderParameter
parameter, final ContextManager contextManager, final RegistryCenter
registryCenter) {
+ private void registerOnline(final MetaDataPersistService persistService,
final RegistryCenter registryCenter,
+ final ContextManagerBuilderParameter
parameter, final ContextManager contextManager) {
contextManager.getInstanceContext().getInstance().setLabels(parameter.getLabels());
contextManager.getInstanceContext().getComputeNodeInstances().addAll(registryCenter.getComputeNodeStatusService().loadAllComputeNodeInstances());
- new ClusterContextManagerCoordinator(metaDataPersistService,
contextManager, registryCenter);
+ new ClusterContextManagerCoordinator(persistService, registryCenter,
contextManager);
registryCenter.onlineInstance(contextManager.getInstanceContext().getInstance());
}
diff --git
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinator.java
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinator.java
index b28f423d9cd..79698ae9c0b 100644
---
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinator.java
+++
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinator.java
@@ -68,16 +68,16 @@ import java.util.stream.Collectors;
*/
public final class ClusterContextManagerCoordinator {
- private final MetaDataPersistService metaDataPersistService;
-
- private final ContextManager contextManager;
+ private final MetaDataPersistService persistService;
private final RegistryCenter registryCenter;
- public ClusterContextManagerCoordinator(final MetaDataPersistService
metaDataPersistService, final ContextManager contextManager, final
RegistryCenter registryCenter) {
- this.metaDataPersistService = metaDataPersistService;
- this.contextManager = contextManager;
+ private final ContextManager contextManager;
+
+ public ClusterContextManagerCoordinator(final MetaDataPersistService
persistService, final RegistryCenter registryCenter, final ContextManager
contextManager) {
+ this.persistService = persistService;
this.registryCenter = registryCenter;
+ this.contextManager = contextManager;
ShardingSphereEventBus.getInstance().register(this);
disableDataSources();
}
@@ -150,7 +150,7 @@ public final class ClusterContextManagerCoordinator {
*/
@Subscribe
public synchronized void renew(final RuleConfigurationsChangedEvent event)
{
- if
(metaDataPersistService.getDatabaseVersionPersistService().isActiveVersion(event.getDatabaseName(),
event.getDatabaseVersion())) {
+ if
(persistService.getDatabaseVersionPersistService().isActiveVersion(event.getDatabaseName(),
event.getDatabaseVersion())) {
contextManager.alterRuleConfiguration(event.getDatabaseName(),
event.getRuleConfigurations());
disableDataSources();
}
@@ -163,7 +163,7 @@ public final class ClusterContextManagerCoordinator {
*/
@Subscribe
public synchronized void renew(final DataSourceChangedEvent event) {
- if
(metaDataPersistService.getDatabaseVersionPersistService().isActiveVersion(event.getDatabaseName(),
event.getDatabaseVersion())) {
+ if
(persistService.getDatabaseVersionPersistService().isActiveVersion(event.getDatabaseName(),
event.getDatabaseVersion())) {
contextManager.alterDataSourceConfiguration(event.getDatabaseName(),
event.getDataSourcePropertiesMap());
disableDataSources();
}
@@ -268,8 +268,8 @@ public final class ClusterContextManagerCoordinator {
*/
@Subscribe
public synchronized void renew(final DatabaseVersionChangedEvent event) {
- Map<String, DataSourceProperties> dataSourcePropertiesMap =
metaDataPersistService.getDataSourceService().load(event.getDatabaseName(),
event.getActiveVersion());
- Collection<RuleConfiguration> ruleConfigs =
metaDataPersistService.getDatabaseRulePersistService().load(event.getDatabaseName(),
event.getActiveVersion());
+ Map<String, DataSourceProperties> dataSourcePropertiesMap =
persistService.getDataSourceService().load(event.getDatabaseName(),
event.getActiveVersion());
+ Collection<RuleConfiguration> ruleConfigs =
persistService.getDatabaseRulePersistService().load(event.getDatabaseName(),
event.getActiveVersion());
contextManager.alterDataSourceAndRuleConfiguration(event.getDatabaseName(),
dataSourcePropertiesMap, ruleConfigs);
disableDataSources();
}
diff --git
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinatorTest.java
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinatorTest.java
index 64859cc5f84..653fbc31659 100644
---
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinatorTest.java
+++
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinatorTest.java
@@ -125,7 +125,7 @@ public final class ClusterContextManagerCoordinatorTest {
private ContextManager contextManager;
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
- private MetaDataPersistService metaDataPersistService;
+ private MetaDataPersistService persistService;
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private ShardingSphereDatabase database;
@@ -140,7 +140,7 @@ public final class ClusterContextManagerCoordinatorTest {
contextManager.renewMetaDataContexts(new
MetaDataContexts(contextManager.getMetaDataContexts().getPersistService().get(),
new ShardingSphereMetaData(createDatabases(),
contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData(), new
ConfigurationProperties(new Properties())),
createOptimizerContext()));
- coordinator = new
ClusterContextManagerCoordinator(metaDataPersistService, contextManager, new
RegistryCenter(mock(ClusterPersistRepository.class)));
+ coordinator = new ClusterContextManagerCoordinator(persistService, new
RegistryCenter(mock(ClusterPersistRepository.class)), contextManager);
}
private ContextManagerBuilderParameter
createContextManagerBuilderParameter() {
@@ -169,8 +169,8 @@ public final class ClusterContextManagerCoordinatorTest {
@Test
public void assertDatabaseAdd() throws SQLException {
-
when(metaDataPersistService.getDataSourceService().load("db_add")).thenReturn(getDataSourcePropertiesMap());
-
when(metaDataPersistService.getDatabaseRulePersistService().load("db_add")).thenReturn(Collections.emptyList());
+
when(persistService.getDataSourceService().load("db_add")).thenReturn(getDataSourcePropertiesMap());
+
when(persistService.getDatabaseRulePersistService().load("db_add")).thenReturn(Collections.emptyList());
coordinator.renew(new DatabaseAddedEvent("db_add"));
assertNotNull(contextManager.getMetaDataContexts().getMetaData().getDatabases().get("db_add").getResource().getDataSources());
}
@@ -216,7 +216,7 @@ public final class ClusterContextManagerCoordinatorTest {
@Test
public void assertRuleConfigurationsChanged() {
-
when(metaDataPersistService.getDatabaseVersionPersistService().isActiveVersion("db",
"0")).thenReturn(true);
+
when(persistService.getDatabaseVersionPersistService().isActiveVersion("db",
"0")).thenReturn(true);
assertThat(contextManager.getMetaDataContexts().getMetaData().getDatabases().get("db"),
is(database));
coordinator.renew(new RuleConfigurationsChangedEvent("db", "0",
Collections.emptyList()));
assertThat(contextManager.getMetaDataContexts().getMetaData().getDatabases().get("db"),
not(database));
@@ -235,7 +235,7 @@ public final class ClusterContextManagerCoordinatorTest {
@Test
public void assertDataSourceChanged() {
-
when(metaDataPersistService.getDatabaseVersionPersistService().isActiveVersion("db",
"0")).thenReturn(true);
+
when(persistService.getDatabaseVersionPersistService().isActiveVersion("db",
"0")).thenReturn(true);
coordinator.renew(new DataSourceChangedEvent("db", "0",
getChangedDataSourcePropertiesMap()));
assertTrue(contextManager.getMetaDataContexts().getMetaData().getDatabases().get("db").getResource().getDataSources().containsKey("ds_2"));
}
@@ -321,8 +321,8 @@ public final class ClusterContextManagerCoordinatorTest {
@Test
public void assertRenewDatabaseVersionChangedEvent() {
- when(metaDataPersistService.getDataSourceService().load("db",
"1")).thenReturn(getVersionChangedDataSourcePropertiesMap());
- when(metaDataPersistService.getDatabaseRulePersistService().load("db",
"1")).thenReturn(Collections.emptyList());
+ when(persistService.getDataSourceService().load("db",
"1")).thenReturn(getVersionChangedDataSourcePropertiesMap());
+ when(persistService.getDatabaseRulePersistService().load("db",
"1")).thenReturn(Collections.emptyList());
Map<String, DataSource> dataSourceMap = initContextManager();
coordinator.renew(new DatabaseVersionChangedEvent("db", "1"));
assertThat(contextManager.getDataSourceMap("db").get("ds_0"),
is(dataSourceMap.get("ds_0")));
diff --git
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/MemoryContextManagerBuilder.java
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/MemoryContextManagerBuilder.java
index 0f56ba12f40..9d613c9e4f9 100644
---
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/MemoryContextManagerBuilder.java
+++
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/MemoryContextManagerBuilder.java
@@ -45,21 +45,21 @@ public final class MemoryContextManagerBuilder implements
ContextManagerBuilder
@Override
public ContextManager build(final ContextManagerBuilderParameter
parameter) throws SQLException {
+ return new ContextManager(buildMetaDataContexts(parameter),
buildInstanceContext(parameter));
+ }
+
+ private MetaDataContexts buildMetaDataContexts(final
ContextManagerBuilderParameter parameter) throws SQLException {
ConfigurationProperties props = new
ConfigurationProperties(parameter.getProps());
Map<String, ShardingSphereDatabase> databases =
ShardingSphereDatabasesFactory.create(parameter.getDatabaseConfigs(), props);
ShardingSphereRuleMetaData globalMetaData = new
ShardingSphereRuleMetaData(GlobalRulesBuilder.buildRules(parameter.getGlobalRuleConfigs(),
databases));
- MetaDataContexts metaDataContexts = new MetaDataContexts(null, new
ShardingSphereMetaData(databases, globalMetaData, props),
OptimizerContextFactory.create(databases, globalMetaData));
- return new ContextManager(metaDataContexts,
buildInstanceContext(parameter));
+ return new MetaDataContexts(null, new
ShardingSphereMetaData(databases, globalMetaData, props),
OptimizerContextFactory.create(databases, globalMetaData));
}
private InstanceContext buildInstanceContext(final
ContextManagerBuilderParameter parameter) {
ComputeNodeInstance instance = new
ComputeNodeInstance(parameter.getInstanceMetaData());
instance.setLabels(parameter.getLabels());
- return new InstanceContext(instance, new MemoryWorkerIdGenerator(),
buildMemoryModeConfiguration(parameter.getModeConfig()), new
MemoryLockContext());
- }
-
- private ModeConfiguration buildMemoryModeConfiguration(final
ModeConfiguration modeConfiguration) {
- return Optional.ofNullable(modeConfiguration).orElseGet(() -> new
ModeConfiguration(getType(), null, false));
+ return new InstanceContext(instance,
+ new MemoryWorkerIdGenerator(),
Optional.ofNullable(parameter.getModeConfig()).orElseGet(() -> new
ModeConfiguration(getType(), null, false)), new MemoryLockContext());
}
@Override
diff --git
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
index 3b89d5f8fe5..5c439ed25e2 100644
---
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
+++
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
@@ -54,21 +54,20 @@ public final class StandaloneContextManagerBuilder
implements ContextManagerBuil
public ContextManager build(final ContextManagerBuilderParameter
parameter) throws SQLException {
MetaDataPersistService persistService = new
MetaDataPersistService(StandalonePersistRepositoryFactory.getInstance(parameter.getModeConfig().getRepository()));
persistConfigurations(persistService, parameter);
- MetaDataContexts metaDataContexts =
createMetaDataContexts(persistService, parameter);
- return createContextManager(parameter, metaDataContexts);
+ return new ContextManager(buildMetaDataContexts(persistService,
parameter), buildInstanceContext(parameter));
}
- private void persistConfigurations(final MetaDataPersistService
metaDataPersistService, final ContextManagerBuilderParameter parameter) {
+ private void persistConfigurations(final MetaDataPersistService
persistService, final ContextManagerBuilderParameter parameter) {
if (!parameter.isEmpty()) {
-
metaDataPersistService.persistConfigurations(parameter.getDatabaseConfigs(),
parameter.getGlobalRuleConfigs(), parameter.getProps(),
parameter.getModeConfig().isOverwrite());
+
persistService.persistConfigurations(parameter.getDatabaseConfigs(),
parameter.getGlobalRuleConfigs(), parameter.getProps(),
parameter.getModeConfig().isOverwrite());
}
}
- private MetaDataContexts createMetaDataContexts(final
MetaDataPersistService persistService, final ContextManagerBuilderParameter
parameter) throws SQLException {
+ private MetaDataContexts buildMetaDataContexts(final
MetaDataPersistService persistService, final ContextManagerBuilderParameter
parameter) throws SQLException {
Collection<String> databaseNames = parameter.getInstanceMetaData()
instanceof JDBCInstanceMetaData
? parameter.getDatabaseConfigs().keySet()
:
persistService.getSchemaMetaDataService().loadAllDatabaseNames();
- Map<String, DatabaseConfiguration> databaseConfigMap =
getDatabaseConfigMap(databaseNames, persistService, parameter);
+ Map<String, DatabaseConfiguration> databaseConfigMap =
buildDatabaseConfigMap(databaseNames, persistService, parameter);
Collection<RuleConfiguration> globalRuleConfigs =
persistService.getGlobalRuleService().load();
ConfigurationProperties props = new
ConfigurationProperties(persistService.getPropsService().load());
Map<String, ShardingSphereDatabase> databases =
ShardingSphereDatabasesFactory.create(databaseConfigMap, props);
@@ -76,24 +75,21 @@ public final class StandaloneContextManagerBuilder
implements ContextManagerBuil
return new MetaDataContexts(persistService, new
ShardingSphereMetaData(databases, globalMetaData, props),
OptimizerContextFactory.create(databases, globalMetaData));
}
- private Map<String, DatabaseConfiguration> getDatabaseConfigMap(final
Collection<String> databaseNames, final MetaDataPersistService
metaDataPersistService,
- final
ContextManagerBuilderParameter parameter) {
+ private Map<String, DatabaseConfiguration> buildDatabaseConfigMap(final
Collection<String> databaseNames,
+ final
MetaDataPersistService persistService, final ContextManagerBuilderParameter
parameter) {
Map<String, DatabaseConfiguration> result = new
HashMap<>(databaseNames.size(), 1);
- databaseNames.forEach(each -> result.put(each,
createDatabaseConfiguration(each, metaDataPersistService, parameter)));
+ databaseNames.forEach(each -> result.put(each,
buildDatabaseConfiguration(each, persistService, parameter)));
return result;
}
- private DatabaseConfiguration createDatabaseConfiguration(final String
databaseName, final MetaDataPersistService metaDataPersistService,
- final
ContextManagerBuilderParameter parameter) {
- Map<String, DataSource> dataSources =
metaDataPersistService.getEffectiveDataSources(databaseName,
parameter.getDatabaseConfigs());
- Collection<RuleConfiguration> databaseRuleConfigs =
metaDataPersistService.getDatabaseRulePersistService().load(databaseName);
+ private DatabaseConfiguration buildDatabaseConfiguration(final String
databaseName, final MetaDataPersistService persistService, final
ContextManagerBuilderParameter parameter) {
+ Map<String, DataSource> dataSources =
persistService.getEffectiveDataSources(databaseName,
parameter.getDatabaseConfigs());
+ Collection<RuleConfiguration> databaseRuleConfigs =
persistService.getDatabaseRulePersistService().load(databaseName);
return new DataSourceProvidedDatabaseConfiguration(dataSources,
databaseRuleConfigs);
}
- private ContextManager createContextManager(final
ContextManagerBuilderParameter parameter, final MetaDataContexts
metaDataContexts) {
- InstanceContext instanceContext = new InstanceContext(
- new ComputeNodeInstance(parameter.getInstanceMetaData()), new
StandaloneWorkerIdGenerator(), parameter.getModeConfig(), new
StandaloneLockContext());
- return new ContextManager(metaDataContexts, instanceContext);
+ private InstanceContext buildInstanceContext(final
ContextManagerBuilderParameter parameter) {
+ return new InstanceContext(new
ComputeNodeInstance(parameter.getInstanceMetaData()), new
StandaloneWorkerIdGenerator(), parameter.getModeConfig(), new
StandaloneLockContext());
}
@Override
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/RuleDefinitionBackendHandler.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/RuleDefinitionBackendHandler.java
index 19440280bbd..aa55c545dc0 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/RuleDefinitionBackendHandler.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/RuleDefinitionBackendHandler.java
@@ -161,12 +161,12 @@ public final class RuleDefinitionBackendHandler<T extends
RuleDefinitionStatemen
}
}
- private void persistRuleConfigurationChange(final MetaDataPersistService
metaDataPersistService, final String version, final ShardingSphereDatabase
database,
+ private void persistRuleConfigurationChange(final MetaDataPersistService
persistService, final String version, final ShardingSphereDatabase database,
final RuleConfiguration
currentRuleConfig, final RuleConfiguration alteredRuleConfig) {
Collection<RuleConfiguration> configs = new
LinkedList<>(database.getRuleMetaData().getConfigurations());
configs.remove(currentRuleConfig);
configs.add(alteredRuleConfig);
-
metaDataPersistService.getDatabaseRulePersistService().persist(database.getName(),
version, configs);
+
persistService.getDatabaseRulePersistService().persist(database.getName(),
version, configs);
ShardingSphereEventBus.getInstance().post(new
MetadataVersionPreparedEvent(version, database.getName()));
}
diff --git
a/shardingsphere-test/shardingsphere-pipeline-test/src/test/java/org/apache/shardingsphere/data/pipeline/core/util/PipelineContextUtil.java
b/shardingsphere-test/shardingsphere-pipeline-test/src/test/java/org/apache/shardingsphere/data/pipeline/core/util/PipelineContextUtil.java
index efcea8515a9..45ee81513c4 100644
---
a/shardingsphere-test/shardingsphere-pipeline-test/src/test/java/org/apache/shardingsphere/data/pipeline/core/util/PipelineContextUtil.java
+++
b/shardingsphere-test/shardingsphere-pipeline-test/src/test/java/org/apache/shardingsphere/data/pipeline/core/util/PipelineContextUtil.java
@@ -96,8 +96,8 @@ public final class PipelineContextUtil {
ConfigurationFileUtil.readFile("config_sharding_sphere_jdbc_source.yaml"));
ShardingSphereDataSource dataSource = (ShardingSphereDataSource)
PipelineDataSourceFactory.newInstance(pipelineDataSourceConfig).getDataSource();
ContextManager contextManager = getContextManager(dataSource);
- MetaDataPersistService metaDataPersistService = new
MetaDataPersistService(getClusterPersistRepository());
- MetaDataContexts metaDataContexts =
renewMetaDataContexts(contextManager.getMetaDataContexts(),
metaDataPersistService);
+ MetaDataPersistService persistService = new
MetaDataPersistService(getClusterPersistRepository());
+ MetaDataContexts metaDataContexts =
renewMetaDataContexts(contextManager.getMetaDataContexts(), persistService);
PipelineContext.initContextManager(new
ContextManager(metaDataContexts, contextManager.getInstanceContext()));
}
@@ -113,12 +113,12 @@ public final class PipelineContextUtil {
return PERSIST_REPOSITORY_LAZY_INITIALIZER.get();
}
- private static MetaDataContexts renewMetaDataContexts(final
MetaDataContexts old, final MetaDataPersistService metaDataPersistService) {
+ private static MetaDataContexts renewMetaDataContexts(final
MetaDataContexts old, final MetaDataPersistService persistService) {
Map<String, ShardingSphereTable> tables = new HashMap<>(3, 1);
tables.put("t_order", new ShardingSphereTable("t_order",
Arrays.asList(new ShardingSphereColumn("order_id", Types.INTEGER, true, false,
false),
new ShardingSphereColumn("user_id", Types.VARCHAR, false,
false, false)), Collections.emptyList(), Collections.emptyList()));
old.getMetaData().getDatabases().get(DefaultDatabase.LOGIC_NAME).getSchemas().get(DefaultDatabase.LOGIC_NAME).putAll(tables);
- return new MetaDataContexts(metaDataPersistService, old.getMetaData(),
old.getOptimizerContext());
+ return new MetaDataContexts(persistService, old.getMetaData(),
old.getOptimizerContext());
}
/**