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 40929eb7f3b Refactor build MetaDataContext to avoid modifying data
sources when new metadata context not finish built (#31434)
40929eb7f3b is described below
commit 40929eb7f3bdfc8e9db89972cab861670c7ad078
Author: zhaojinchao <[email protected]>
AuthorDate: Wed May 29 13:43:48 2024 +0800
Refactor build MetaDataContext to avoid modifying data sources when new
metadata context not finish built (#31434)
---
.../mode/manager/ContextManager.java | 1 -
.../mode/service/manager/ConfigurationManager.java | 22 ++++++++++------------
.../StandaloneMetaDataManagerPersistService.java | 2 --
3 files changed, 10 insertions(+), 15 deletions(-)
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
index 76ee61a2391..a6af4feacf1 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
@@ -173,7 +173,6 @@ public final class ContextManager implements AutoCloseable {
ConfigurationManager configurationManager =
metaDataContextManager.getConfigurationManager();
Map<String, DataSourcePoolProperties> dataSourcePoolPropsFromRegCenter
= metaDataPersistService.getDataSourceUnitService().load(database.getName());
SwitchingResource switchingResource = new
ResourceSwitchManager().alterStorageUnit(database.getResourceMetaData(),
dataSourcePoolPropsFromRegCenter);
-
metaDataContexts.get().getMetaData().getDatabases().putAll(configurationManager.renewDatabase(database,
switchingResource));
Collection<RuleConfiguration> ruleConfigs =
metaDataPersistService.getDatabaseRulePersistService().load(database.getName());
Map<String, ShardingSphereDatabase> changedDatabases =
configurationManager.createChangedDatabases(database.getName(), false,
switchingResource, ruleConfigs);
ConfigurationProperties props = new
ConfigurationProperties(metaDataPersistService.getPropsService().load());
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/service/manager/ConfigurationManager.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/service/manager/ConfigurationManager.java
index 5fb6face955..d90a65a6c69 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/service/manager/ConfigurationManager.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/service/manager/ConfigurationManager.java
@@ -131,7 +131,6 @@ public final class ConfigurationManager {
}
private void buildNewMetaDataContext(final String databaseName, final
SwitchingResource switchingResource, final boolean isDropConfig) throws
SQLException {
-
metaDataContexts.get().getMetaData().getDatabases().putAll(renewDatabase(metaDataContexts.get().getMetaData().getDatabase(databaseName),
switchingResource));
MetaDataContexts reloadMetaDataContexts =
createMetaDataContexts(databaseName, false, switchingResource, null);
persistSchemaMetaData(databaseName, reloadMetaDataContexts,
isDropConfig);
Optional.ofNullable(reloadMetaDataContexts.getStatistics().getDatabaseData().get(databaseName))
@@ -244,23 +243,22 @@ public final class ConfigurationManager {
}
/**
- * Renew ShardingSphere databases.
+ * Get effective resource meta data.
*
* @param database database
* @param resource resource
- * @return ShardingSphere databases
+ * @return effective resource meta data
*/
- public Map<String, ShardingSphereDatabase> renewDatabase(final
ShardingSphereDatabase database, final SwitchingResource resource) {
+ public ResourceMetaData getEffectiveResourceMetaData(final
ShardingSphereDatabase database, final SwitchingResource resource) {
Map<StorageNode, DataSource> storageNodes =
getStorageNodes(database.getResourceMetaData().getDataSources(), resource);
Map<String, StorageUnit> storageUnits =
getStorageUnits(database.getResourceMetaData().getStorageUnits(), resource);
- return Collections.singletonMap(database.getName().toLowerCase(), new
ShardingSphereDatabase(database.getName(), database.getProtocolType(),
- new ResourceMetaData(storageNodes, storageUnits),
database.getRuleMetaData(), database.getSchemas()));
+ return new ResourceMetaData(storageNodes, storageUnits);
}
private Map<StorageNode, DataSource> getStorageNodes(final
Map<StorageNode, DataSource> currentStorageNodes, final SwitchingResource
resource) {
Map<StorageNode, DataSource> result = new
LinkedHashMap<>(currentStorageNodes.size(), 1F);
for (Entry<StorageNode, DataSource> entry :
currentStorageNodes.entrySet()) {
- if (!resource.getStaleDataSources().containsKey(entry.getKey())) {
+ if (null == resource ||
!resource.getStaleDataSources().containsKey(entry.getKey())) {
result.put(entry.getKey(), entry.getValue());
}
}
@@ -270,7 +268,7 @@ public final class ConfigurationManager {
private Map<String, StorageUnit> getStorageUnits(final Map<String,
StorageUnit> currentStorageUnits, final SwitchingResource resource) {
Map<String, StorageUnit> result = new
LinkedHashMap<>(currentStorageUnits.size(), 1F);
for (Entry<String, StorageUnit> entry :
currentStorageUnits.entrySet()) {
- if (!resource.getStaleStorageUnitNames().contains(entry.getKey()))
{
+ if (null == resource ||
!resource.getStaleStorageUnitNames().contains(entry.getKey())) {
result.put(entry.getKey(), entry.getValue());
}
}
@@ -296,8 +294,8 @@ public final class ConfigurationManager {
* @return MetaDataContexts meta data contexts
* @throws SQLException SQL exception
*/
- public MetaDataContexts createMetaDataContexts(final String databaseName,
final boolean internalLoadMetaData, final SwitchingResource switchingResource,
- final
Collection<RuleConfiguration> ruleConfigs) throws SQLException {
+ public MetaDataContexts createMetaDataContexts(final String databaseName,
final boolean internalLoadMetaData,
+ final SwitchingResource
switchingResource, final Collection<RuleConfiguration> ruleConfigs) throws
SQLException {
Map<String, ShardingSphereDatabase> changedDatabases =
createChangedDatabases(databaseName, internalLoadMetaData, switchingResource,
ruleConfigs);
ConfigurationProperties props =
metaDataContexts.get().getMetaData().getProps();
RuleMetaData changedGlobalMetaData = new RuleMetaData(
@@ -317,11 +315,11 @@ public final class ConfigurationManager {
*/
public synchronized Map<String, ShardingSphereDatabase>
createChangedDatabases(final String databaseName, final boolean
internalLoadMetaData,
final SwitchingResource switchingResource, final
Collection<RuleConfiguration> ruleConfigs) throws SQLException {
+ ResourceMetaData effectiveResourceMetaData =
getEffectiveResourceMetaData(metaDataContexts.get().getMetaData().getDatabase(databaseName),
switchingResource);
Collection<RuleConfiguration> toBeCreatedRuleConfigs = null ==
ruleConfigs
?
metaDataContexts.get().getMetaData().getDatabase(databaseName).getRuleMetaData().getConfigurations()
: ruleConfigs;
- DatabaseConfiguration toBeCreatedDatabaseConfig =
getDatabaseConfiguration(
-
metaDataContexts.get().getMetaData().getDatabase(databaseName).getResourceMetaData(),
switchingResource, toBeCreatedRuleConfigs);
+ DatabaseConfiguration toBeCreatedDatabaseConfig =
getDatabaseConfiguration(effectiveResourceMetaData, switchingResource,
toBeCreatedRuleConfigs);
ShardingSphereDatabase changedDatabase =
createChangedDatabase(metaDataContexts.get().getMetaData().getDatabase(databaseName).getName(),
internalLoadMetaData,
persistServiceFacade.getMetaDataPersistService(),
toBeCreatedDatabaseConfig, metaDataContexts.get().getMetaData().getProps(),
computeNodeInstanceContext);
Map<String, ShardingSphereDatabase> result = new
LinkedHashMap<>(metaDataContexts.get().getMetaData().getDatabases());
diff --git
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/service/StandaloneMetaDataManagerPersistService.java
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/service/StandaloneMetaDataManagerPersistService.java
index b526e0a0a0c..f5600759226 100644
---
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/service/StandaloneMetaDataManagerPersistService.java
+++
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/service/StandaloneMetaDataManagerPersistService.java
@@ -250,8 +250,6 @@ public final class StandaloneMetaDataManagerPersistService
implements MetaDataMa
SwitchingResource switchingResource =
new
ResourceSwitchManager().unregisterStorageUnit(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getResourceMetaData(),
toBeDroppedStorageUnitNames);
ConfigurationManager configurationManager =
contextManager.getMetaDataContextManager().getConfigurationManager();
- contextManager.getMetaDataContexts().getMetaData().getDatabases()
-
.putAll(configurationManager.renewDatabase(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName),
switchingResource));
MetaDataContexts reloadMetaDataContexts =
configurationManager.createMetaDataContexts(databaseName, false,
switchingResource, null);
configurationManager.alterSchemaMetaData(databaseName,
reloadMetaDataContexts.getMetaData().getDatabase(databaseName),
contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName),
true);