You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2023/04/11 10:12:23 UTC
[shardingsphere] branch master updated: Avoid ContextManager is null when startup and governance center has meta data (#25107)
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 a07e22e0c48 Avoid ContextManager is null when startup and governance center has meta data (#25107)
a07e22e0c48 is described below
commit a07e22e0c48d871fbe42cf5bf4420a3875887d63
Author: zhaojinchao <zh...@apache.org>
AuthorDate: Tue Apr 11 18:12:16 2023 +0800
Avoid ContextManager is null when startup and governance center has meta data (#25107)
* Fix NPE problem when governance center has metadata
* Update
---
.../infra/instance/mode/ModeContextManager.java | 9 -------
.../shardingsphere/metadata/MetaDataFactory.java | 29 +++++++++++++++++++---
.../metadata/factory/InternalMetaDataFactory.java | 17 +++++++------
.../mode/manager/ContextManager.java | 2 +-
.../mode/metadata/MetaDataContextsFactory.java | 13 +++++-----
.../manager/cluster/ClusterModeContextManager.java | 5 ----
.../standalone/StandaloneModeContextManager.java | 5 ----
7 files changed, 42 insertions(+), 38 deletions(-)
diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/instance/mode/ModeContextManager.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/instance/mode/ModeContextManager.java
index 917eee13f53..5ed7d90bf52 100644
--- a/infra/common/src/main/java/org/apache/shardingsphere/infra/instance/mode/ModeContextManager.java
+++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/instance/mode/ModeContextManager.java
@@ -19,7 +19,6 @@ package org.apache.shardingsphere.infra.instance.mode;
import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
import org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
-import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
import org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchemaMetaDataPOJO;
import org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchemaPOJO;
@@ -124,12 +123,4 @@ public interface ModeContextManager {
* @param props pros
*/
void alterProperties(Properties props);
-
- /**
- * Get schemas.
- *
- * @param databaseName database name
- * @return schemas
- */
- Map<String, ShardingSphereSchema> getSchemas(String databaseName);
}
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/MetaDataFactory.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/MetaDataFactory.java
index 9de29a62f96..3b69075cb29 100644
--- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/MetaDataFactory.java
+++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/MetaDataFactory.java
@@ -23,8 +23,10 @@ import org.apache.shardingsphere.infra.instance.InstanceContext;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.metadata.factory.ExternalMetaDataFactory;
import org.apache.shardingsphere.metadata.factory.InternalMetaDataFactory;
+import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
import java.sql.SQLException;
+import java.util.Map;
/**
* Meta data factory.
@@ -35,16 +37,35 @@ public final class MetaDataFactory {
* Create database meta data for governance center.
*
* @param databaseName database name
- * @param databaseConfig database configuration
* @param internalLoadMetaData internal load meta data
+ * @param persistService meta data persist service
+ * @param databaseConfig database configuration
* @param props configuration properties
* @param instanceContext instance context
* @return database meta data
* @throws SQLException sql exception
*/
- public static ShardingSphereDatabase create(final String databaseName, final boolean internalLoadMetaData, final DatabaseConfiguration databaseConfig,
- final ConfigurationProperties props, final InstanceContext instanceContext) throws SQLException {
- return internalLoadMetaData ? InternalMetaDataFactory.create(databaseName, databaseConfig, props, instanceContext)
+ public static ShardingSphereDatabase create(final String databaseName, final boolean internalLoadMetaData, final MetaDataPersistService persistService,
+ final DatabaseConfiguration databaseConfig, final ConfigurationProperties props, final InstanceContext instanceContext) throws SQLException {
+ return internalLoadMetaData ? InternalMetaDataFactory.create(databaseName, persistService, databaseConfig, props, instanceContext)
: ExternalMetaDataFactory.create(databaseName, databaseConfig, props, instanceContext);
}
+
+ /**
+ * Create database meta data for governance center.
+ *
+ * @param internalLoadMetaData internal load meta data
+ * @param persistService meta data persist service
+ * @param databaseConfigMap database configuration
+ * @param props configuration properties
+ * @param instanceContext instance context
+ * @return database meta data
+ * @throws SQLException sql exception
+ */
+ public static Map<String, ShardingSphereDatabase> create(final boolean internalLoadMetaData, final MetaDataPersistService persistService,
+ final Map<String, DatabaseConfiguration> databaseConfigMap, final ConfigurationProperties props,
+ final InstanceContext instanceContext) throws SQLException {
+ return internalLoadMetaData ? InternalMetaDataFactory.create(persistService, databaseConfigMap, props, instanceContext)
+ : ExternalMetaDataFactory.create(databaseConfigMap, props, instanceContext);
+ }
}
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactory.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactory.java
index 385342e5614..a817293c462 100644
--- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactory.java
+++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactory.java
@@ -24,6 +24,7 @@ import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
import org.apache.shardingsphere.infra.instance.InstanceContext;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.rule.builder.database.DatabaseRulesBuilder;
+import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
import java.util.Map;
import java.util.Map.Entry;
@@ -38,37 +39,39 @@ public final class InternalMetaDataFactory {
* Create database meta data for governance center.
*
* @param databaseName database name
+ * @param persistService meta data persist service
* @param databaseConfig database configuration
* @param props configuration properties
* @param instanceContext instance context
* @return database meta data
*/
- public static ShardingSphereDatabase create(final String databaseName, final DatabaseConfiguration databaseConfig,
+ public static ShardingSphereDatabase create(final String databaseName, final MetaDataPersistService persistService, final DatabaseConfiguration databaseConfig,
final ConfigurationProperties props, final InstanceContext instanceContext) {
return ShardingSphereDatabase.create(databaseName, DatabaseTypeEngine.getProtocolType(databaseName, databaseConfig, props), databaseConfig,
- DatabaseRulesBuilder.build(databaseName, databaseConfig, instanceContext), instanceContext.getModeContextManager().getSchemas(databaseName));
+ DatabaseRulesBuilder.build(databaseName, databaseConfig, instanceContext), persistService.getDatabaseMetaDataService().loadSchemas(databaseName));
}
/**
* Create databases meta data for governance center.
*
+ * @param persistService meta data persist service
* @param databaseConfigMap database configuration map
* @param props properties
* @param instanceContext instance context
* @return databases
*/
- public static Map<String, ShardingSphereDatabase> create(final Map<String, DatabaseConfiguration> databaseConfigMap,
+ public static Map<String, ShardingSphereDatabase> create(final MetaDataPersistService persistService, final Map<String, DatabaseConfiguration> databaseConfigMap,
final ConfigurationProperties props, final InstanceContext instanceContext) {
- return createDatabases(databaseConfigMap, DatabaseTypeEngine.getProtocolType(databaseConfigMap, props), props, instanceContext);
+ return createDatabases(persistService, databaseConfigMap, DatabaseTypeEngine.getProtocolType(databaseConfigMap, props), props, instanceContext);
}
- private static Map<String, ShardingSphereDatabase> createDatabases(final Map<String, DatabaseConfiguration> databaseConfigMap, final DatabaseType protocolType,
- final ConfigurationProperties props, final InstanceContext instanceContext) {
+ private static Map<String, ShardingSphereDatabase> createDatabases(final MetaDataPersistService persistService, final Map<String, DatabaseConfiguration> databaseConfigMap,
+ final DatabaseType protocolType, final ConfigurationProperties props, final InstanceContext instanceContext) {
Map<String, ShardingSphereDatabase> result = new ConcurrentHashMap<>(databaseConfigMap.size(), 1);
for (Entry<String, DatabaseConfiguration> entry : databaseConfigMap.entrySet()) {
String databaseName = entry.getKey();
if (!entry.getValue().getDataSources().isEmpty()) {
- result.put(databaseName.toLowerCase(), create(databaseName, entry.getValue(), props, instanceContext));
+ result.put(databaseName.toLowerCase(), create(databaseName, persistService, entry.getValue(), props, instanceContext));
} else {
result.put(databaseName.toLowerCase(), ShardingSphereDatabase.create(databaseName, protocolType));
}
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 9e2ba5c8c4c..25644ab3af8 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
@@ -384,7 +384,7 @@ public final class ContextManager implements AutoCloseable {
DatabaseConfiguration toBeCreatedDatabaseConfig =
new DataSourceProvidedDatabaseConfiguration(metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData().getDataSources(), toBeCreatedRuleConfigs);
ShardingSphereDatabase changedDatabase = MetaDataFactory.create(metaDataContexts.getMetaData().getActualDatabaseName(databaseName),
- internalLoadMetaData, toBeCreatedDatabaseConfig, metaDataContexts.getMetaData().getProps(), instanceContext);
+ internalLoadMetaData, metaDataContexts.getPersistService(), toBeCreatedDatabaseConfig, metaDataContexts.getMetaData().getProps(), instanceContext);
Map<String, ShardingSphereDatabase> result = new LinkedHashMap<>(metaDataContexts.getMetaData().getDatabases());
changedDatabase.getSchemas().putAll(newShardingSphereSchemas(changedDatabase));
result.put(databaseName.toLowerCase(), changedDatabase);
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 78f147c91cd..0deec38a9d0 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
@@ -33,8 +33,7 @@ import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
-import org.apache.shardingsphere.metadata.factory.ExternalMetaDataFactory;
-import org.apache.shardingsphere.metadata.factory.InternalMetaDataFactory;
+import org.apache.shardingsphere.metadata.MetaDataFactory;
import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter;
import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
import org.apache.shardingsphere.mode.event.storage.StorageNodeDataSource;
@@ -87,7 +86,7 @@ public final class MetaDataContextsFactory {
checkDataSourceStates(effectiveDatabaseConfigs, storageNodes, param.isForce());
Collection<RuleConfiguration> globalRuleConfigs = getGlobalRuleConfigs(databaseMetaDataExisted, persistService, param.getGlobalRuleConfigs());
ConfigurationProperties props = getConfigurationProperties(databaseMetaDataExisted, persistService, param.getProps());
- Map<String, ShardingSphereDatabase> databases = getDatabases(databaseMetaDataExisted, effectiveDatabaseConfigs, props, instanceContext);
+ Map<String, ShardingSphereDatabase> databases = getDatabases(databaseMetaDataExisted, persistService, effectiveDatabaseConfigs, props, instanceContext);
ShardingSphereRuleMetaData globalMetaData = new ShardingSphereRuleMetaData(GlobalRulesBuilder.buildRules(globalRuleConfigs, databases, props));
MetaDataContexts result = new MetaDataContexts(persistService, new ShardingSphereMetaData(databases, globalMetaData, props));
persistDatabaseConfigurations(databaseMetaDataExisted, param, result);
@@ -151,10 +150,10 @@ public final class MetaDataContextsFactory {
return databaseMetaDataExisted ? persistService.getGlobalRuleService().load() : globalRuleConfigs;
}
- private static Map<String, ShardingSphereDatabase> getDatabases(final boolean databaseMetaDataExisted, final Map<String, DatabaseConfiguration> databaseConfigMap,
- final ConfigurationProperties props, final InstanceContext instanceContext) throws SQLException {
- return databaseMetaDataExisted ? InternalMetaDataFactory.create(databaseConfigMap, props, instanceContext)
- : ExternalMetaDataFactory.create(databaseConfigMap, props, instanceContext);
+ private static Map<String, ShardingSphereDatabase> getDatabases(final boolean databaseMetaDataExisted, final MetaDataPersistService persistService,
+ final Map<String, DatabaseConfiguration> databaseConfigMap, final ConfigurationProperties props,
+ final InstanceContext instanceContext) throws SQLException {
+ return MetaDataFactory.create(databaseMetaDataExisted, persistService, databaseConfigMap, props, instanceContext);
}
private static void persistDatabaseConfigurations(final boolean databaseMetaDataExisted, final ContextManagerBuilderParameter param, final MetaDataContexts metadataContexts) {
diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManager.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManager.java
index be22cbfcb39..0f1815ff005 100644
--- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManager.java
+++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManager.java
@@ -125,11 +125,6 @@ public final class ClusterModeContextManager implements ModeContextManager, Cont
contextManager.getMetaDataContexts().getPersistService().getPropsService().persist(props);
}
- @Override
- public Map<String, ShardingSphereSchema> getSchemas(final String databaseName) {
- return contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService().loadSchemas(databaseName);
- }
-
@Override
public void setContextManagerAware(final ContextManager contextManager) {
this.contextManager = contextManager;
diff --git a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java
index 2de894d080b..2fcf620cd92 100644
--- a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java
+++ b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java
@@ -279,11 +279,6 @@ public final class StandaloneModeContextManager implements ModeContextManager, C
clearServiceCache();
}
- @Override
- public Map<String, ShardingSphereSchema> getSchemas(final String databaseName) {
- return contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService().loadSchemas(databaseName);
- }
-
private void clearServiceCache() {
OrderedServicesCache.clearCache();
}