This is an automated email from the ASF dual-hosted git repository.
jianglongtao 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 58a77318f60 Add todo in ContextManager (#18806)
58a77318f60 is described below
commit 58a77318f60520133d2fb5e2f33bfb05f24c2411
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Jul 3 15:41:46 2022 +0800
Add todo in ContextManager (#18806)
* Add todo
* Change call order
---
.../mode/manager/ContextManager.java | 80 ++++++++++++----------
1 file changed, 42 insertions(+), 38 deletions(-)
diff --git
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
index 9f9e427e34a..d3c7057cfd4 100644
---
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
+++
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
@@ -221,6 +221,30 @@ public final class ContextManager implements AutoCloseable
{
metaDataContexts.getPersistService().ifPresent(optional ->
optional.getDataSourceService().append(databaseName,
toBeAlteredDataSourcePropsMap));
}
+ private void refreshMetaDataContext(final String databaseName, final
Map<String, DataSourceProperties> dataSourcePropsMap) throws SQLException {
+ MetaDataContexts changedMetaDataContexts =
buildChangedMetaDataContextWithAddedDataSource(databaseName,
dataSourcePropsMap);
+
metaDataContexts.getMetaData().getDatabases().putAll(changedMetaDataContexts.getMetaData().getDatabases());
+
metaDataContexts.getOptimizerContext().getFederationMetaData().getDatabases().putAll(changedMetaDataContexts.getOptimizerContext().getFederationMetaData().getDatabases());
+
metaDataContexts.getOptimizerContext().getParserContexts().putAll(changedMetaDataContexts.getOptimizerContext().getParserContexts());
+
metaDataContexts.getOptimizerContext().getPlannerContexts().putAll(changedMetaDataContexts.getOptimizerContext().getPlannerContexts());
+
metaDataContexts.getMetaData().getGlobalRuleMetaData().findRules(ResourceHeldRule.class).forEach(each
->
each.addResource(metaDataContexts.getMetaData().getDatabases().get(databaseName)));
+ }
+
+ private MetaDataContexts
buildChangedMetaDataContextWithAddedDataSource(final String databaseName, final
Map<String, DataSourceProperties> addedDataSourceProps) throws SQLException {
+ ShardingSphereDatabase database =
metaDataContexts.getMetaData().getDatabases().get(databaseName);
+ Map<String, DataSource> dataSourceMap = new
HashMap<>(database.getResource().getDataSources());
+
dataSourceMap.putAll(DataSourcePoolCreator.create(addedDataSourceProps));
+ ConfigurationProperties props =
metaDataContexts.getMetaData().getProps();
+ DatabaseConfiguration databaseConfig = new
DataSourceProvidedDatabaseConfiguration(dataSourceMap,
database.getRuleMetaData().getConfigurations());
+ Map<String, ShardingSphereDatabase> databases =
ShardingSphereDatabasesFactory.create(Collections.singletonMap(database.getName(),
databaseConfig), props, instanceContext);
+ ShardingSphereRuleMetaData globalMetaData = new
ShardingSphereRuleMetaData(
+
GlobalRulesBuilder.buildRules(metaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(),
databases, instanceContext));
+ ShardingSphereMetaData metaData = new
ShardingSphereMetaData(databases, globalMetaData, props);
+ MetaDataContexts result = new
MetaDataContexts(metaDataContexts.getPersistService().orElse(null), metaData,
OptimizerContextFactory.create(databases, globalMetaData));
+ persistMetaData(result);
+ return result;
+ }
+
/**
* Drop resource.
*
@@ -228,7 +252,11 @@ public final class ContextManager implements AutoCloseable
{
* @param toBeDroppedResourceNames to be dropped resource names
*/
public void dropResource(final String databaseName, final
Collection<String> toBeDroppedResourceNames) {
-
toBeDroppedResourceNames.forEach(metaDataContexts.getMetaData().getDatabases().get(databaseName).getResource().getDataSources()::remove);
+ Map<String, DataSource> dataSourceMap =
metaDataContexts.getMetaData().getDatabases().get(databaseName).getResource().getDataSources();
+ // TODO should check to be dropped resources are unused here.
ContextManager is atomic domain to maintain metadata, not Dist SQL handler
+ for (String each : toBeDroppedResourceNames) {
+ dataSourceMap.remove(each);
+ }
metaDataContexts.getPersistService().ifPresent(optional ->
optional.getDataSourceService().drop(databaseName, toBeDroppedResourceNames));
}
@@ -249,6 +277,19 @@ public final class ContextManager implements AutoCloseable
{
}
}
+ private MetaDataContexts buildChangedMetaDataContext(final
ShardingSphereDatabase originalDatabase, final Collection<RuleConfiguration>
ruleConfigs) throws SQLException {
+ ConfigurationProperties props =
metaDataContexts.getMetaData().getProps();
+ Map<String, ShardingSphereDatabase> databases =
ShardingSphereDatabasesFactory.create(
+ Collections.singletonMap(originalDatabase.getName(), new
DataSourceProvidedDatabaseConfiguration(originalDatabase.getResource().getDataSources(),
ruleConfigs)),
+ props, instanceContext);
+ ShardingSphereRuleMetaData globalMetaData = new
ShardingSphereRuleMetaData(
+
GlobalRulesBuilder.buildRules(metaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(),
databases, instanceContext));
+ ShardingSphereMetaData metaData = new
ShardingSphereMetaData(databases, globalMetaData, props);
+ MetaDataContexts result = new
MetaDataContexts(metaDataContexts.getPersistService().orElse(null), metaData,
OptimizerContextFactory.create(databases, globalMetaData));
+ persistMetaData(result);
+ return result;
+ }
+
/**
* Alter data source configuration.
*
@@ -477,15 +518,6 @@ public final class ContextManager implements AutoCloseable
{
return new
MetaDataContexts(metaDataContexts.getPersistService().orElse(null),
changedMetaData, metaDataContexts.getOptimizerContext());
}
- private void refreshMetaDataContext(final String databaseName, final
Map<String, DataSourceProperties> dataSourcePropsMap) throws SQLException {
- MetaDataContexts changedMetaDataContexts =
buildChangedMetaDataContextWithAddedDataSource(databaseName,
dataSourcePropsMap);
-
metaDataContexts.getMetaData().getDatabases().putAll(changedMetaDataContexts.getMetaData().getDatabases());
-
metaDataContexts.getOptimizerContext().getFederationMetaData().getDatabases().putAll(changedMetaDataContexts.getOptimizerContext().getFederationMetaData().getDatabases());
-
metaDataContexts.getOptimizerContext().getParserContexts().putAll(changedMetaDataContexts.getOptimizerContext().getParserContexts());
-
metaDataContexts.getOptimizerContext().getPlannerContexts().putAll(changedMetaDataContexts.getOptimizerContext().getPlannerContexts());
-
metaDataContexts.getMetaData().getGlobalRuleMetaData().findRules(ResourceHeldRule.class).forEach(each
->
each.addResource(metaDataContexts.getMetaData().getDatabases().get(databaseName)));
- }
-
private void refreshMetaDataContext(final String databaseName, final
MetaDataContexts changedMetaDataContexts, final Map<String,
DataSourceProperties> dataSourcePropsMap) {
metaDataContexts.getOptimizerContext().getFederationMetaData().getDatabases().putAll(changedMetaDataContexts.getOptimizerContext().getFederationMetaData().getDatabases());
Map<String, ShardingSphereDatabase> databases = new
HashMap<>(metaDataContexts.getMetaData().getDatabases());
@@ -499,34 +531,6 @@ public final class ContextManager implements AutoCloseable
{
pendingClosedDataSources.forEach(metaDataContexts.getMetaData().getDatabases().get(databaseName).getResource()::close);
}
- private MetaDataContexts
buildChangedMetaDataContextWithAddedDataSource(final String databaseName, final
Map<String, DataSourceProperties> addedDataSourceProps) throws SQLException {
- ShardingSphereDatabase database =
metaDataContexts.getMetaData().getDatabases().get(databaseName);
- Map<String, DataSource> dataSourceMap = new
HashMap<>(database.getResource().getDataSources());
-
dataSourceMap.putAll(DataSourcePoolCreator.create(addedDataSourceProps));
- ConfigurationProperties props =
metaDataContexts.getMetaData().getProps();
- DatabaseConfiguration databaseConfig = new
DataSourceProvidedDatabaseConfiguration(dataSourceMap,
database.getRuleMetaData().getConfigurations());
- Map<String, ShardingSphereDatabase> databases =
ShardingSphereDatabasesFactory.create(Collections.singletonMap(database.getName(),
databaseConfig), props, instanceContext);
- ShardingSphereRuleMetaData globalMetaData = new
ShardingSphereRuleMetaData(
-
GlobalRulesBuilder.buildRules(metaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(),
databases, instanceContext));
- ShardingSphereMetaData metaData = new
ShardingSphereMetaData(databases, globalMetaData, props);
- MetaDataContexts result = new
MetaDataContexts(metaDataContexts.getPersistService().orElse(null), metaData,
OptimizerContextFactory.create(databases, globalMetaData));
- persistMetaData(result);
- return result;
- }
-
- private MetaDataContexts buildChangedMetaDataContext(final
ShardingSphereDatabase originalDatabase, final Collection<RuleConfiguration>
ruleConfigs) throws SQLException {
- ConfigurationProperties props =
metaDataContexts.getMetaData().getProps();
- Map<String, ShardingSphereDatabase> databases =
ShardingSphereDatabasesFactory.create(
- Collections.singletonMap(originalDatabase.getName(), new
DataSourceProvidedDatabaseConfiguration(originalDatabase.getResource().getDataSources(),
ruleConfigs)),
- props, instanceContext);
- ShardingSphereRuleMetaData globalMetaData = new
ShardingSphereRuleMetaData(
-
GlobalRulesBuilder.buildRules(metaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(),
databases, instanceContext));
- ShardingSphereMetaData metaData = new
ShardingSphereMetaData(databases, globalMetaData, props);
- MetaDataContexts result = new
MetaDataContexts(metaDataContexts.getPersistService().orElse(null), metaData,
OptimizerContextFactory.create(databases, globalMetaData));
- persistMetaData(result);
- return result;
- }
-
private MetaDataContexts
buildChangedMetaDataContextWithChangedDataSource(final ShardingSphereDatabase
originalDatabase,
final Map<String, DataSourceProperties> newDataSourceProps) throws SQLException
{
Collection<String> deletedDataSources =
getDeletedDataSources(originalDatabase, newDataSourceProps).keySet();