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 f87a7ca4f28 Refactor MetaDataContextsFactory.createChangedDatabases()
to createChangedDatabase() (#33933)
f87a7ca4f28 is described below
commit f87a7ca4f28c2e3fab18abb7e78b651285c8196d
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Dec 6 16:25:34 2024 +0800
Refactor MetaDataContextsFactory.createChangedDatabases() to
createChangedDatabase() (#33933)
* Refactor MetaDataContextsFactory.createChangedDatabases()
* Refactor MetaDataContextsFactory.createChangedDatabases()
* Refactor MetaDataContextsFactory.createChangedDatabases()
---
.../infra/metadata/ShardingSphereMetaData.java | 9 ++++
.../mode/metadata/MetaDataContextManager.java | 11 ++--
.../mode/metadata/MetaDataContextsFactory.java | 62 ++++++++++++----------
.../StandaloneMetaDataManagerPersistService.java | 8 +--
4 files changed, 54 insertions(+), 36 deletions(-)
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
index 1c0bac2d332..1970cc4ae39 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
@@ -111,6 +111,15 @@ public final class ShardingSphereMetaData {
globalRuleMetaData.getRules().forEach(each -> ((GlobalRule)
each).refresh(databases.values(), GlobalRuleChangedType.DATABASE_CHANGED));
}
+ /**
+ * Put database.
+ *
+ * @param database database
+ */
+ public void putDatabase(final ShardingSphereDatabase database) {
+ databases.put(database.getName(), database);
+ }
+
/**
* Drop database.
*
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
index 65a9639b6d0..7da1734731d 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
@@ -150,13 +150,14 @@ public class MetaDataContextManager {
Map<String, DataSourcePoolProperties> dataSourcePoolPropsFromRegCenter
= metaDataPersistService.getDataSourceUnitService().load(database.getName());
SwitchingResource switchingResource =
resourceSwitchManager.switchByAlterStorageUnit(database.getResourceMetaData(),
dataSourcePoolPropsFromRegCenter);
Collection<RuleConfiguration> ruleConfigs =
metaDataPersistService.getDatabaseRulePersistService().load(database.getName());
- Map<String, ShardingSphereDatabase> changedDatabases =
MetaDataContextsFactory
- .createChangedDatabases(database.getName(), false,
switchingResource, ruleConfigs, metaDataContexts.get(), metaDataPersistService,
computeNodeInstanceContext);
+ ShardingSphereDatabase changedDatabase = MetaDataContextsFactory
+ .createChangedDatabase(database.getName(), false,
switchingResource, ruleConfigs, metaDataContexts.get(), metaDataPersistService,
computeNodeInstanceContext);
+ metaDataContexts.get().getMetaData().putDatabase(changedDatabase);
ConfigurationProperties props = new
ConfigurationProperties(metaDataPersistService.getPropsService().load());
- RuleMetaData changedGlobalMetaData = new RuleMetaData(
-
GlobalRulesBuilder.buildRules(ruleConfigPersistDecorateEngine.restore(metaDataPersistService.getGlobalRuleService().load()),
changedDatabases.values(), props));
+ RuleMetaData changedGlobalMetaData = new
RuleMetaData(GlobalRulesBuilder.buildRules(
+
ruleConfigPersistDecorateEngine.restore(metaDataPersistService.getGlobalRuleService().load()),
metaDataContexts.get().getMetaData().getAllDatabases(), props));
MetaDataContexts result =
MetaDataContextsFactory.create(metaDataPersistService,
- new ShardingSphereMetaData(changedDatabases.values(),
metaDataContexts.get().getMetaData().getGlobalResourceMetaData(),
changedGlobalMetaData, props));
+ new
ShardingSphereMetaData(metaDataContexts.get().getMetaData().getAllDatabases(),
metaDataContexts.get().getMetaData().getGlobalResourceMetaData(),
changedGlobalMetaData, props));
switchingResource.closeStaleDataSources();
return result;
}
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
index f9638a63f7c..f2b67e77511 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
@@ -267,12 +267,14 @@ public final class MetaDataContextsFactory {
public static MetaDataContexts createBySwitchResource(final String
databaseName, final boolean internalLoadMetaData, final SwitchingResource
switchingResource,
final
MetaDataContexts originalMetaDataContexts, final MetaDataPersistService
metaDataPersistService,
final
ComputeNodeInstanceContext computeNodeInstanceContext) throws SQLException {
- Map<String, ShardingSphereDatabase> changedDatabases =
- createChangedDatabases(databaseName, internalLoadMetaData,
switchingResource, null, originalMetaDataContexts, metaDataPersistService,
computeNodeInstanceContext);
+ ShardingSphereDatabase changedDatabase = createChangedDatabase(
+ databaseName, internalLoadMetaData, switchingResource, null,
originalMetaDataContexts, metaDataPersistService, computeNodeInstanceContext);
ConfigurationProperties props =
originalMetaDataContexts.getMetaData().getProps();
+ ShardingSphereMetaData clonedMetaData =
cloneMetaData(originalMetaDataContexts.getMetaData(), changedDatabase);
RuleMetaData changedGlobalMetaData = new RuleMetaData(
-
GlobalRulesBuilder.buildRules(originalMetaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(),
changedDatabases.values(), props));
- return create(metaDataPersistService, new
ShardingSphereMetaData(changedDatabases.values(),
originalMetaDataContexts.getMetaData().getGlobalResourceMetaData(),
changedGlobalMetaData, props));
+
GlobalRulesBuilder.buildRules(originalMetaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(),
clonedMetaData.getAllDatabases(), props));
+ return create(
+ metaDataPersistService, new
ShardingSphereMetaData(clonedMetaData.getAllDatabases(),
originalMetaDataContexts.getMetaData().getGlobalResourceMetaData(),
changedGlobalMetaData, props));
}
/**
@@ -290,16 +292,25 @@ public final class MetaDataContextsFactory {
public static MetaDataContexts createByAlterRule(final String
databaseName, final boolean internalLoadMetaData, final
Collection<RuleConfiguration> ruleConfigs,
final MetaDataContexts
originalMetaDataContexts, final MetaDataPersistService metaDataPersistService,
final
ComputeNodeInstanceContext computeNodeInstanceContext) throws SQLException {
- Map<String, ShardingSphereDatabase> changedDatabases =
- createChangedDatabases(databaseName, internalLoadMetaData,
null, ruleConfigs, originalMetaDataContexts, metaDataPersistService,
computeNodeInstanceContext);
+ ShardingSphereDatabase changedDatabase = createChangedDatabase(
+ databaseName, internalLoadMetaData, null, ruleConfigs,
originalMetaDataContexts, metaDataPersistService, computeNodeInstanceContext);
+ ShardingSphereMetaData clonedMetaData =
cloneMetaData(originalMetaDataContexts.getMetaData(), changedDatabase);
ConfigurationProperties props =
originalMetaDataContexts.getMetaData().getProps();
RuleMetaData changedGlobalMetaData = new RuleMetaData(
-
GlobalRulesBuilder.buildRules(originalMetaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(),
changedDatabases.values(), props));
- return create(metaDataPersistService, new
ShardingSphereMetaData(changedDatabases.values(),
originalMetaDataContexts.getMetaData().getGlobalResourceMetaData(),
changedGlobalMetaData, props));
+
GlobalRulesBuilder.buildRules(originalMetaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(),
clonedMetaData.getAllDatabases(), props));
+ return create(metaDataPersistService, new ShardingSphereMetaData(
+ clonedMetaData.getAllDatabases(),
originalMetaDataContexts.getMetaData().getGlobalResourceMetaData(),
changedGlobalMetaData, props));
+ }
+
+ private static ShardingSphereMetaData cloneMetaData(final
ShardingSphereMetaData originalMetaData, final ShardingSphereDatabase
changedDatabase) {
+ ShardingSphereMetaData result = new ShardingSphereMetaData(
+ originalMetaData.getAllDatabases(),
originalMetaData.getGlobalResourceMetaData(),
originalMetaData.getGlobalRuleMetaData(), originalMetaData.getProps());
+ result.putDatabase(changedDatabase);
+ return result;
}
/**
- * Create changed databases by switch resource.
+ * Create changed database by switch resource.
*
* @param databaseName database name
* @param internalLoadMetaData internal load meta data
@@ -308,24 +319,29 @@ public final class MetaDataContextsFactory {
* @param originalMetaDataContext original meta data contexts
* @param metaDataPersistService meta data persist service
* @param computeNodeInstanceContext compute node instance context
- * @return changed databases
+ * @return changed database
* @throws SQLException SQL exception
*/
- public static Map<String, ShardingSphereDatabase>
createChangedDatabases(final String databaseName, final boolean
internalLoadMetaData,
-
final SwitchingResource switchingResource, final Collection<RuleConfiguration>
ruleConfigs,
-
final MetaDataContexts originalMetaDataContext,
-
final MetaDataPersistService metaDataPersistService,
-
final ComputeNodeInstanceContext computeNodeInstanceContext) throws
SQLException {
+ public static ShardingSphereDatabase createChangedDatabase(final String
databaseName, final boolean internalLoadMetaData,
+ final
SwitchingResource switchingResource, final Collection<RuleConfiguration>
ruleConfigs,
+ final
MetaDataContexts originalMetaDataContext,
+ final
MetaDataPersistService metaDataPersistService,
+ final
ComputeNodeInstanceContext computeNodeInstanceContext) throws SQLException {
ResourceMetaData effectiveResourceMetaData =
getEffectiveResourceMetaData(originalMetaDataContext.getMetaData().getDatabase(databaseName),
switchingResource);
Collection<RuleConfiguration> toBeCreatedRuleConfigs = null ==
ruleConfigs
?
originalMetaDataContext.getMetaData().getDatabase(databaseName).getRuleMetaData().getConfigurations()
: ruleConfigs;
DatabaseConfiguration toBeCreatedDatabaseConfig =
getDatabaseConfiguration(effectiveResourceMetaData, switchingResource,
toBeCreatedRuleConfigs);
- ShardingSphereDatabase changedDatabase =
createChangedDatabase(originalMetaDataContext.getMetaData().getDatabase(databaseName).getName(),
internalLoadMetaData,
+ return
createChangedDatabase(originalMetaDataContext.getMetaData().getDatabase(databaseName).getName(),
internalLoadMetaData,
metaDataPersistService, toBeCreatedDatabaseConfig,
originalMetaDataContext.getMetaData().getProps(), computeNodeInstanceContext);
- Map<String, ShardingSphereDatabase> result = new
LinkedHashMap<>(originalMetaDataContext.getMetaData().getDatabases());
- result.put(databaseName.toLowerCase(), changedDatabase);
- return result;
+ }
+
+ private static ShardingSphereDatabase createChangedDatabase(final String
databaseName, final boolean internalLoadMetaData, final MetaDataPersistService
persistService,
+ final
DatabaseConfiguration databaseConfig, final ConfigurationProperties props,
+ final
ComputeNodeInstanceContext computeNodeInstanceContext) throws SQLException {
+ return internalLoadMetaData
+ ? InternalMetaDataFactory.create(databaseName, persistService,
databaseConfig, props, computeNodeInstanceContext)
+ : ExternalMetaDataFactory.create(databaseName, databaseConfig,
props, computeNodeInstanceContext);
}
private static ResourceMetaData getEffectiveResourceMetaData(final
ShardingSphereDatabase database, final SwitchingResource resource) {
@@ -369,12 +385,4 @@ public final class MetaDataContextsFactory {
}
return result;
}
-
- private static ShardingSphereDatabase createChangedDatabase(final String
databaseName, final boolean internalLoadMetaData, final MetaDataPersistService
persistService,
- final
DatabaseConfiguration databaseConfig, final ConfigurationProperties props,
- final
ComputeNodeInstanceContext computeNodeInstanceContext) throws SQLException {
- return internalLoadMetaData
- ? InternalMetaDataFactory.create(databaseName, persistService,
databaseConfig, props, computeNodeInstanceContext)
- : ExternalMetaDataFactory.create(databaseName, databaseConfig,
props, computeNodeInstanceContext);
- }
}
diff --git
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/StandaloneMetaDataManagerPersistService.java
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/StandaloneMetaDataManagerPersistService.java
index f7058181afd..9e98b5621d5 100644
---
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/StandaloneMetaDataManagerPersistService.java
+++
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/StandaloneMetaDataManagerPersistService.java
@@ -224,9 +224,9 @@ public final class StandaloneMetaDataManagerPersistService
implements MetaDataMa
public void registerStorageUnits(final String databaseName, final
Map<String, DataSourcePoolProperties> toBeRegisteredProps) throws SQLException {
SwitchingResource switchingResource =
metaDataContextManager.getResourceSwitchManager().switchByRegisterStorageUnit(metaDataContextManager.getMetaDataContexts().get()
.getMetaData().getDatabase(databaseName).getResourceMetaData(),
toBeRegisteredProps);
- Map<String, ShardingSphereDatabase> changedDatabases =
MetaDataContextsFactory.createChangedDatabases(databaseName, false,
switchingResource, null,
+ ShardingSphereDatabase changedDatabase =
MetaDataContextsFactory.createChangedDatabase(databaseName, false,
switchingResource, null,
metaDataContextManager.getMetaDataContexts().get(),
metaDataPersistService, metaDataContextManager.getComputeNodeInstanceContext());
-
metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabases().putAll(changedDatabases);
+
metaDataContextManager.getMetaDataContexts().get().getMetaData().putDatabase(changedDatabase);
metaDataContextManager.getMetaDataContexts().get().getMetaData().getGlobalRuleMetaData().getRules()
.forEach(each -> ((GlobalRule)
each).refresh(metaDataContextManager.getMetaDataContexts().get().getMetaData().getAllDatabases(),
GlobalRuleChangedType.DATABASE_CHANGED));
metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabase(databaseName).getAllSchemas()
@@ -246,9 +246,9 @@ public final class StandaloneMetaDataManagerPersistService
implements MetaDataMa
public void alterStorageUnits(final String databaseName, final Map<String,
DataSourcePoolProperties> toBeUpdatedProps) throws SQLException {
SwitchingResource switchingResource =
metaDataContextManager.getResourceSwitchManager().switchByAlterStorageUnit(metaDataContextManager.getMetaDataContexts().get().getMetaData()
.getDatabase(databaseName).getResourceMetaData(),
toBeUpdatedProps);
- Map<String, ShardingSphereDatabase> changedDatabases =
MetaDataContextsFactory.createChangedDatabases(databaseName, true,
switchingResource, null,
+ ShardingSphereDatabase changedDatabase =
MetaDataContextsFactory.createChangedDatabase(databaseName, true,
switchingResource, null,
metaDataContextManager.getMetaDataContexts().get(),
metaDataPersistService, metaDataContextManager.getComputeNodeInstanceContext());
-
metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabases().putAll(changedDatabases);
+
metaDataContextManager.getMetaDataContexts().get().getMetaData().putDatabase(changedDatabase);
metaDataContextManager.getMetaDataContexts().get().getMetaData().getGlobalRuleMetaData().getRules()
.forEach(each -> ((GlobalRule)
each).refresh(metaDataContextManager.getMetaDataContexts().get().getMetaData().getAllDatabases(),
GlobalRuleChangedType.DATABASE_CHANGED));
DataSourceUnitPersistService dataSourceService =
metaDataPersistService.getDataSourceUnitService();