This is an automated email from the ASF dual-hosted git repository.
zhaojinchao 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 a3412da56de Add new meta data builder SPI implementation (#25476)
a3412da56de is described below
commit a3412da56dee61dbf1225a7714a6e89ad845776e
Author: ChenJiaHao <[email protected]>
AuthorDate: Sat May 6 14:31:07 2023 +0800
Add new meta data builder SPI implementation (#25476)
* Add new meta data builder SPI implementation
* Modify AbstractMetaDataPersistService to interface
* Update new metadata implementation comments
* Rename AbstractMetaDataPersistService to MetaDataBasedPersistService
* Fix code style
---
.../jdbc/core/connection/ConnectionManager.java | 6 +-
.../shardingsphere/metadata/MetaDataFactory.java | 3 +-
...etaDataFactory.java => NewMetaDataFactory.java} | 17 +-
.../metadata/factory/InternalMetaDataFactory.java | 8 +-
...actory.java => NewInternalMetaDataFactory.java} | 13 +-
.../persist/MetaDataBasedPersistService.java | 125 ++++++++++++++
.../metadata/persist/MetaDataPersistService.java | 6 +-
...Service.java => NewMetaDataPersistService.java} | 12 +-
.../ShardingSphereDataBasedPersistService.java | 58 +++++++
.../data/ShardingSphereDataPersistService.java | 2 +-
.../database/DatabaseBasedPersistService.java | 11 ++
.../config/global/GlobalPersistService.java | 15 ++
.../DatabaseMetaDataBasedPersistService.java | 119 +++++++++++++
.../DatabaseMetaDataPersistService.java | 4 +-
.../ShardingSphereTableRowDataPersistService.java | 2 +-
.../schema/TableRowDataBasedPersistService.java | 62 +++++++
.../MetaDataVersionBasedPersistService.java} | 50 +++---
.../MetaDataVersionPersistService.java | 4 +-
.../DatabaseMetaDataPersistServiceTest.java | 1 +
.../service/MetaDataVersionPersistServiceTest.java | 1 +
.../mode/manager/ContextManager.java | 4 +-
.../mode/metadata/MetaDataContexts.java | 6 +-
.../mode/metadata/NewMetaDataContextsFactory.java | 185 +++++++++++++++++++++
.../mode/manager/ContextManagerTest.java | 2 +-
.../mode/metadata/MetaDataContextsFactoryTest.java | 2 +-
.../manager/cluster/ClusterModeContextManager.java | 8 +-
.../cluster/NewClusterContextManagerBuilder.java | 97 +++++++++++
.../NewConfigurationChangedSubscriber.java | 154 +++++++++++++++++
.../NewContextManagerSubscriberFacade.java | 40 +++++
...rYamlPersistRepositoryConfigurationSwapper.java | 50 ++++++
....mode.YamlPersistRepositoryConfigurationSwapper | 1 +
...ardingsphere.mode.manager.ContextManagerBuilder | 1 +
.../standalone/StandaloneModeContextManager.java | 12 +-
...wStatusFromReadwriteSplittingRulesExecutor.java | 4 +-
...SplittingStorageUnitStatusStatementUpdater.java | 12 +-
.../ral/updatable/LabelComputeNodeUpdater.java | 4 +-
.../ral/updatable/UnlabelComputeNodeUpdater.java | 4 +-
37 files changed, 1011 insertions(+), 94 deletions(-)
diff --git
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManager.java
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManager.java
index 11a41b5a719..381f48ac743 100644
---
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManager.java
+++
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManager.java
@@ -27,17 +27,17 @@ import
org.apache.shardingsphere.driver.jdbc.adapter.invocation.MethodInvocation
import org.apache.shardingsphere.driver.jdbc.core.ShardingSphereSavepoint;
import org.apache.shardingsphere.infra.connection.ConnectionContext;
import
org.apache.shardingsphere.infra.connection.transaction.TransactionConnectionContext;
-import
org.apache.shardingsphere.infra.exception.OverallConnectionNotEnoughException;
import
org.apache.shardingsphere.infra.datasource.pool.creator.DataSourcePoolCreator;
import org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
+import
org.apache.shardingsphere.infra.exception.OverallConnectionNotEnoughException;
import
org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
import
org.apache.shardingsphere.infra.executor.sql.prepare.driver.jdbc.ExecutorJDBCConnectionManager;
import org.apache.shardingsphere.infra.instance.metadata.InstanceMetaData;
import org.apache.shardingsphere.infra.instance.metadata.InstanceType;
import
org.apache.shardingsphere.infra.instance.metadata.proxy.ProxyInstanceMetaData;
import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUser;
+import org.apache.shardingsphere.metadata.persist.MetaDataBasedPersistService;
import org.apache.shardingsphere.mode.manager.ContextManager;
-import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
import org.apache.shardingsphere.traffic.rule.TrafficRule;
import org.apache.shardingsphere.transaction.ConnectionSavepointManager;
import org.apache.shardingsphere.transaction.ConnectionTransaction;
@@ -95,7 +95,7 @@ public final class ConnectionManager implements
ExecutorJDBCConnectionManager, A
if (rule.getStrategyRules().isEmpty()) {
return Collections.emptyMap();
}
- MetaDataPersistService persistService =
contextManager.getMetaDataContexts().getPersistService();
+ MetaDataBasedPersistService persistService =
contextManager.getMetaDataContexts().getPersistService();
String actualDatabaseName =
contextManager.getMetaDataContexts().getMetaData().getActualDatabaseName(databaseName);
Map<String, DataSourceProperties> dataSourcePropsMap =
persistService.getDataSourceService().load(actualDatabaseName);
Preconditions.checkState(!dataSourcePropsMap.isEmpty(), "Can not get
data source properties from meta data.");
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 79549ff1e70..6d160ac5cb5 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
@@ -25,6 +25,7 @@ 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.MetaDataBasedPersistService;
import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
import java.sql.SQLException;
@@ -48,7 +49,7 @@ public final class MetaDataFactory {
* @return database meta data
* @throws SQLException sql exception
*/
- public static ShardingSphereDatabase create(final String databaseName,
final boolean internalLoadMetaData, final MetaDataPersistService persistService,
+ public static ShardingSphereDatabase create(final String databaseName,
final boolean internalLoadMetaData, final MetaDataBasedPersistService
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);
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/NewMetaDataFactory.java
similarity index 80%
copy from
kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/MetaDataFactory.java
copy to
kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/NewMetaDataFactory.java
index 79549ff1e70..e7e39830398 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/NewMetaDataFactory.java
@@ -24,17 +24,18 @@ import
org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
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 org.apache.shardingsphere.metadata.factory.NewInternalMetaDataFactory;
+import org.apache.shardingsphere.metadata.persist.NewMetaDataPersistService;
import java.sql.SQLException;
import java.util.Map;
/**
- * Meta data factory.
+ * TODO replace the old implementation after meta data refactor completed
+ * New meta data factory.
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class MetaDataFactory {
+public final class NewMetaDataFactory {
/**
* Create database meta data for governance center.
@@ -48,9 +49,9 @@ public final class MetaDataFactory {
* @return database meta data
* @throws SQLException sql exception
*/
- public static ShardingSphereDatabase create(final String databaseName,
final boolean internalLoadMetaData, final MetaDataPersistService persistService,
+ public static ShardingSphereDatabase create(final String databaseName,
final boolean internalLoadMetaData, final NewMetaDataPersistService
persistService,
final DatabaseConfiguration
databaseConfig, final ConfigurationProperties props, final InstanceContext
instanceContext) throws SQLException {
- return internalLoadMetaData ?
InternalMetaDataFactory.create(databaseName, persistService, databaseConfig,
props, instanceContext)
+ return internalLoadMetaData ?
NewInternalMetaDataFactory.create(databaseName, persistService, databaseConfig,
props, instanceContext)
: ExternalMetaDataFactory.create(databaseName, databaseConfig,
props, instanceContext);
}
@@ -65,10 +66,10 @@ public final class MetaDataFactory {
* @return database meta data
* @throws SQLException sql exception
*/
- public static Map<String, ShardingSphereDatabase> create(final boolean
internalLoadMetaData, final MetaDataPersistService persistService,
+ public static Map<String, ShardingSphereDatabase> create(final boolean
internalLoadMetaData, final NewMetaDataPersistService persistService,
final Map<String,
DatabaseConfiguration> databaseConfigMap, final ConfigurationProperties props,
final
InstanceContext instanceContext) throws SQLException {
- return internalLoadMetaData ?
InternalMetaDataFactory.create(persistService, databaseConfigMap, props,
instanceContext)
+ return internalLoadMetaData ?
NewInternalMetaDataFactory.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 69c949b3e02..ec4c5cfc502 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
@@ -26,7 +26,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 org.apache.shardingsphere.metadata.persist.MetaDataBasedPersistService;
import java.util.Map;
import java.util.Map.Entry;
@@ -48,7 +48,7 @@ public final class InternalMetaDataFactory {
* @param instanceContext instance context
* @return database meta data
*/
- public static ShardingSphereDatabase create(final String databaseName,
final MetaDataPersistService persistService, final DatabaseConfiguration
databaseConfig,
+ public static ShardingSphereDatabase create(final String databaseName,
final MetaDataBasedPersistService 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),
persistService.getDatabaseMetaDataService().loadSchemas(databaseName));
@@ -63,12 +63,12 @@ public final class InternalMetaDataFactory {
* @param instanceContext instance context
* @return databases
*/
- public static Map<String, ShardingSphereDatabase> create(final
MetaDataPersistService persistService, final Map<String, DatabaseConfiguration>
databaseConfigMap,
+ public static Map<String, ShardingSphereDatabase> create(final
MetaDataBasedPersistService persistService, final Map<String,
DatabaseConfiguration> databaseConfigMap,
final
ConfigurationProperties props, final InstanceContext instanceContext) {
return createDatabases(persistService, databaseConfigMap,
DatabaseTypeEngine.getProtocolType(databaseConfigMap, props), props,
instanceContext);
}
- private static Map<String, ShardingSphereDatabase> createDatabases(final
MetaDataPersistService persistService, final Map<String, DatabaseConfiguration>
databaseConfigMap,
+ private static Map<String, ShardingSphereDatabase> createDatabases(final
MetaDataBasedPersistService 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()) {
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/NewInternalMetaDataFactory.java
similarity index 87%
copy from
kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactory.java
copy to
kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/NewInternalMetaDataFactory.java
index 69c949b3e02..4c832a58ca9 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/NewInternalMetaDataFactory.java
@@ -26,17 +26,18 @@ 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 org.apache.shardingsphere.metadata.persist.NewMetaDataPersistService;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
/**
- * Internal meta data factory.
+ * TODO replace the old implementation after meta data refactor completed
+ * New internal meta data factory.
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class InternalMetaDataFactory {
+public final class NewInternalMetaDataFactory {
/**
* Create database meta data for governance center.
@@ -48,7 +49,7 @@ public final class InternalMetaDataFactory {
* @param instanceContext instance context
* @return database meta data
*/
- public static ShardingSphereDatabase create(final String databaseName,
final MetaDataPersistService persistService, final DatabaseConfiguration
databaseConfig,
+ public static ShardingSphereDatabase create(final String databaseName,
final NewMetaDataPersistService 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),
persistService.getDatabaseMetaDataService().loadSchemas(databaseName));
@@ -63,12 +64,12 @@ public final class InternalMetaDataFactory {
* @param instanceContext instance context
* @return databases
*/
- public static Map<String, ShardingSphereDatabase> create(final
MetaDataPersistService persistService, final Map<String, DatabaseConfiguration>
databaseConfigMap,
+ public static Map<String, ShardingSphereDatabase> create(final
NewMetaDataPersistService persistService, final Map<String,
DatabaseConfiguration> databaseConfigMap,
final
ConfigurationProperties props, final InstanceContext instanceContext) {
return createDatabases(persistService, databaseConfigMap,
DatabaseTypeEngine.getProtocolType(databaseConfigMap, props), props,
instanceContext);
}
- private static Map<String, ShardingSphereDatabase> createDatabases(final
MetaDataPersistService persistService, final Map<String, DatabaseConfiguration>
databaseConfigMap,
+ private static Map<String, ShardingSphereDatabase> createDatabases(final
NewMetaDataPersistService 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()) {
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataBasedPersistService.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataBasedPersistService.java
new file mode 100644
index 00000000000..388b2a29f55
--- /dev/null
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataBasedPersistService.java
@@ -0,0 +1,125 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.metadata.persist;
+
+import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration;
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import
org.apache.shardingsphere.metadata.persist.data.ShardingSphereDataBasedPersistService;
+import
org.apache.shardingsphere.metadata.persist.service.config.database.DatabaseBasedPersistService;
+import
org.apache.shardingsphere.metadata.persist.service.config.database.DatabaseRuleBasedPersistService;
+import
org.apache.shardingsphere.metadata.persist.service.config.global.GlobalPersistService;
+import
org.apache.shardingsphere.metadata.persist.service.database.DatabaseMetaDataBasedPersistService;
+import
org.apache.shardingsphere.metadata.persist.service.version.MetaDataVersionBasedPersistService;
+import org.apache.shardingsphere.mode.spi.PersistRepository;
+
+import javax.sql.DataSource;
+import java.util.Collection;
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * TODO replace the old implementation after meta data refactor completed
+ * Abstract meta data persist service.
+ */
+public interface MetaDataBasedPersistService {
+
+ /**
+ * Get repository.
+ *
+ * @return repository
+ */
+ PersistRepository getRepository();
+
+ /**
+ * Get data source service.
+ *
+ * @return persist service
+ */
+ DatabaseBasedPersistService<Map<String, DataSourceProperties>>
getDataSourceService();
+
+ /**
+ * Get database meta data service.
+ *
+ * @return persist service
+ */
+ DatabaseMetaDataBasedPersistService getDatabaseMetaDataService();
+
+ /**
+ * Get database rule persist service.
+ *
+ * @return persist service
+ */
+ DatabaseRuleBasedPersistService<Collection<RuleConfiguration>>
getDatabaseRulePersistService();
+
+ /**
+ * Get global rule service.
+ *
+ * @return repository
+ */
+ GlobalPersistService<Collection<RuleConfiguration>> getGlobalRuleService();
+
+ /**
+ * Get props service.
+ *
+ * @return persist service
+ */
+ GlobalPersistService<Properties> getPropsService();
+
+ /**
+ * Get meta data version persist service.
+ *
+ * @return persist service
+ */
+ MetaDataVersionBasedPersistService getMetaDataVersionPersistService();
+
+ /**
+ * Get ShardingSphere data persist service.
+ *
+ * @return persist service
+ */
+ ShardingSphereDataBasedPersistService
getShardingSphereDataPersistService();
+
+ /**
+ * Persist global rule configurations.
+ *
+ * @param globalRuleConfigs global rule configurations
+ * @param props properties
+ */
+ void persistGlobalRuleConfiguration(Collection<RuleConfiguration>
globalRuleConfigs, Properties props);
+
+ /**
+ * Persist configurations.
+ *
+ * @param databaseName database name
+ * @param databaseConfigs database configurations
+ * @param dataSources data sources
+ * @param rules rules
+ */
+ void persistConfigurations(String databaseName, DatabaseConfiguration
databaseConfigs, Map<String, DataSource> dataSources,
Collection<ShardingSphereRule> rules);
+
+ /**
+ * Get effective data sources.
+ *
+ * @param databaseName database name
+ * @param databaseConfigs database configurations
+ * @return effective data sources
+ */
+ Map<String, DataSource> getEffectiveDataSources(String databaseName,
Map<String, ? extends DatabaseConfiguration> databaseConfigs);
+}
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
index 3b941bc66d9..3e92ff893a7 100644
---
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
@@ -26,8 +26,8 @@ import
org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
import
org.apache.shardingsphere.infra.datasource.props.DataSourcePropertiesCreator;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import
org.apache.shardingsphere.metadata.persist.data.ShardingSphereDataPersistService;
-import
org.apache.shardingsphere.metadata.persist.service.DatabaseMetaDataPersistService;
-import
org.apache.shardingsphere.metadata.persist.service.MetaDataVersionPersistService;
+import
org.apache.shardingsphere.metadata.persist.service.database.DatabaseMetaDataPersistService;
+import
org.apache.shardingsphere.metadata.persist.service.version.MetaDataVersionPersistService;
import
org.apache.shardingsphere.metadata.persist.service.config.database.DataSourcePersistService;
import
org.apache.shardingsphere.metadata.persist.service.config.database.DatabaseRulePersistService;
import
org.apache.shardingsphere.metadata.persist.service.config.global.GlobalRulePersistService;
@@ -45,7 +45,7 @@ import java.util.Properties;
* Meta data persist service.
*/
@Getter
-public final class MetaDataPersistService {
+public final class MetaDataPersistService implements
MetaDataBasedPersistService {
private final PersistRepository repository;
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/NewMetaDataPersistService.java
similarity index 93%
copy from
kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
copy to
kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/NewMetaDataPersistService.java
index 3b941bc66d9..7589b36f9e1 100644
---
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/NewMetaDataPersistService.java
@@ -26,8 +26,8 @@ import
org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
import
org.apache.shardingsphere.infra.datasource.props.DataSourcePropertiesCreator;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import
org.apache.shardingsphere.metadata.persist.data.ShardingSphereDataPersistService;
-import
org.apache.shardingsphere.metadata.persist.service.DatabaseMetaDataPersistService;
-import
org.apache.shardingsphere.metadata.persist.service.MetaDataVersionPersistService;
+import
org.apache.shardingsphere.metadata.persist.service.database.DatabaseMetaDataPersistService;
+import
org.apache.shardingsphere.metadata.persist.service.version.MetaDataVersionPersistService;
import
org.apache.shardingsphere.metadata.persist.service.config.database.DataSourcePersistService;
import
org.apache.shardingsphere.metadata.persist.service.config.database.DatabaseRulePersistService;
import
org.apache.shardingsphere.metadata.persist.service.config.global.GlobalRulePersistService;
@@ -42,13 +42,15 @@ import java.util.Map.Entry;
import java.util.Properties;
/**
- * Meta data persist service.
+ * TODO replace the old implementation after meta data refactor completed
+ * New meta data persist service.
*/
@Getter
-public final class MetaDataPersistService {
+public final class NewMetaDataPersistService implements
MetaDataBasedPersistService {
private final PersistRepository repository;
+ // TODO replace all service to new persist service
private final DataSourcePersistService dataSourceService;
private final DatabaseMetaDataPersistService databaseMetaDataService;
@@ -63,7 +65,7 @@ public final class MetaDataPersistService {
private final ShardingSphereDataPersistService
shardingSphereDataPersistService;
- public MetaDataPersistService(final PersistRepository repository) {
+ public NewMetaDataPersistService(final PersistRepository repository) {
this.repository = repository;
dataSourceService = new DataSourcePersistService(repository);
databaseMetaDataService = new
DatabaseMetaDataPersistService(repository);
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/data/ShardingSphereDataBasedPersistService.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/data/ShardingSphereDataBasedPersistService.java
new file mode 100644
index 00000000000..3273a92d310
--- /dev/null
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/data/ShardingSphereDataBasedPersistService.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.metadata.persist.data;
+
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import org.apache.shardingsphere.infra.metadata.data.ShardingSphereData;
+import org.apache.shardingsphere.infra.metadata.data.ShardingSphereSchemaData;
+import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import
org.apache.shardingsphere.metadata.persist.service.schema.TableRowDataBasedPersistService;
+
+import java.util.Map;
+import java.util.Optional;
+
+/**
+ * TODO replace the old implementation after meta data refactor completed
+ * ShardingSphere data based registry service.
+ */
+public interface ShardingSphereDataBasedPersistService {
+
+ /**
+ * Get table row data persist service.
+ *
+ * @return Stable row data persist service
+ */
+ TableRowDataBasedPersistService getTableRowDataPersistService();
+
+ /**
+ * Load ShardingSphere data.
+ *
+ * @param metaData meta data
+ * @return ShardingSphere data
+ */
+ Optional<ShardingSphereData> load(ShardingSphereMetaData metaData);
+
+ /**
+ * Persist table.
+ * @param databaseName database name
+ * @param schemaName schema name
+ * @param schemaData schema data
+ * @param databases databases
+ */
+ void persist(String databaseName, String schemaName,
ShardingSphereSchemaData schemaData, Map<String, ShardingSphereDatabase>
databases);
+}
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/data/ShardingSphereDataPersistService.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/data/ShardingSphereDataPersistService.java
index eb4d206d575..c6be3491dfb 100644
---
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/data/ShardingSphereDataPersistService.java
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/data/ShardingSphereDataPersistService.java
@@ -40,7 +40,7 @@ import java.util.stream.Collectors;
* ShardingSphere data persist service.
*/
@Getter
-public final class ShardingSphereDataPersistService {
+public final class ShardingSphereDataPersistService implements
ShardingSphereDataBasedPersistService {
private final PersistRepository repository;
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseBasedPersistService.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseBasedPersistService.java
index 2f4de995d8c..3cdb0d968a4 100644
---
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseBasedPersistService.java
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseBasedPersistService.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.metadata.persist.service.config.database;
+import org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import javax.sql.DataSource;
@@ -73,4 +74,14 @@ public interface DatabaseBasedPersistService<T> {
* @return configuration existed or not
*/
boolean isExisted(String databaseName);
+
+ /**
+ * TODO remove this after meta data refactor completed
+ * Append data source properties map.
+ *
+ * @param databaseName database name
+ * @param toBeAppendedDataSourcePropsMap data source properties map to be
appended
+ */
+ default void append(final String databaseName, final Map<String,
DataSourceProperties> toBeAppendedDataSourcePropsMap) {
+ }
}
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalPersistService.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalPersistService.java
index c5aeb87a973..45a5e1125cd 100644
---
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalPersistService.java
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalPersistService.java
@@ -17,6 +17,11 @@
package org.apache.shardingsphere.metadata.persist.service.config.global;
+import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUser;
+
+import java.util.Collection;
+import java.util.Collections;
+
/**
* Global persist service.
*
@@ -37,4 +42,14 @@ public interface GlobalPersistService<T> {
* @return configurations
*/
T load();
+
+ /**
+ * TODO remove this after meta data refactor completed
+ * Load all users.
+ *
+ * @return collection of user
+ */
+ default Collection<ShardingSphereUser> loadUsers() {
+ return Collections.emptyList();
+ }
}
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/database/DatabaseMetaDataBasedPersistService.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/database/DatabaseMetaDataBasedPersistService.java
new file mode 100644
index 00000000000..0e749bd2dcb
--- /dev/null
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/database/DatabaseMetaDataBasedPersistService.java
@@ -0,0 +1,119 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.metadata.persist.service.database;
+
+import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
+import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
+import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView;
+import
org.apache.shardingsphere.metadata.persist.service.schema.SchemaMetaDataPersistService;
+
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * TODO replace the old implementation after meta data refactor completed
+ * Database meta data based registry service.
+ */
+public interface DatabaseMetaDataBasedPersistService {
+
+ /**
+ * Add database name.
+ *
+ * @param databaseName database name
+ */
+ void addDatabase(String databaseName);
+
+ /**
+ * Drop database.
+ *
+ * @param databaseName database name to be deleted
+ */
+ void dropDatabase(String databaseName);
+
+ /**
+ * Load all database names.
+ *
+ * @return all database names
+ */
+ Collection<String> loadAllDatabaseNames();
+
+ /**
+ * Add schema.
+ *
+ * @param databaseName database name
+ * @param schemaName schema name
+ */
+ void addSchema(String databaseName, String schemaName);
+
+ /**
+ * Drop schema.
+ *
+ * @param databaseName database name
+ * @param schemaName schema name
+ */
+ void dropSchema(String databaseName, String schemaName);
+
+ /**
+ * Compare and persist schema meta data.
+ *
+ * @param databaseName database name
+ * @param schemaName schema name
+ * @param schema schema meta data
+ */
+ void compareAndPersist(String databaseName, String schemaName,
ShardingSphereSchema schema);
+
+ /**
+ * Persist schema meta data.
+ *
+ * @param databaseName database name
+ * @param schemaName schema name
+ * @param schema schema meta data
+ */
+ void persist(String databaseName, String schemaName, ShardingSphereSchema
schema);
+
+ /**
+ * Delete schema meta data.
+ *
+ * @param databaseName database name
+ * @param schemaName schema name
+ * @param schema schema meta data
+ */
+ void delete(String databaseName, String schemaName, ShardingSphereSchema
schema);
+
+ /**
+ * Load schema meta data.
+ *
+ * @param databaseName database name
+ * @return schema meta data
+ */
+ Map<String, ShardingSphereSchema> loadSchemas(String databaseName);
+
+ /**
+ * Get table meta data persist service.
+ *
+ * @return persist service
+ */
+ SchemaMetaDataPersistService<Map<String, ShardingSphereTable>>
getTableMetaDataPersistService();
+
+ /**
+ * Get view meta data persist service.
+ *
+ * @return persist service
+ */
+ SchemaMetaDataPersistService<Map<String, ShardingSphereView>>
getViewMetaDataPersistService();
+}
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/DatabaseMetaDataPersistService.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/database/DatabaseMetaDataPersistService.java
similarity index 97%
rename from
kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/DatabaseMetaDataPersistService.java
rename to
kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/database/DatabaseMetaDataPersistService.java
index ce1eed0899f..98ccff85929 100644
---
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/DatabaseMetaDataPersistService.java
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/database/DatabaseMetaDataPersistService.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.metadata.persist.service;
+package org.apache.shardingsphere.metadata.persist.service.database;
import lombok.Getter;
import org.apache.shardingsphere.infra.metadata.database.schema.SchemaManager;
@@ -34,7 +34,7 @@ import java.util.Map;
* Database meta data registry service.
*/
@Getter
-public final class DatabaseMetaDataPersistService {
+public final class DatabaseMetaDataPersistService implements
DatabaseMetaDataBasedPersistService {
private final PersistRepository repository;
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/schema/ShardingSphereTableRowDataPersistService.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/schema/ShardingSphereTableRowDataPersistService.java
index 851795ac414..3b246bb6049 100644
---
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/schema/ShardingSphereTableRowDataPersistService.java
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/schema/ShardingSphereTableRowDataPersistService.java
@@ -34,7 +34,7 @@ import java.util.Collection;
* ShardingSphere table row data persist service.
*/
@RequiredArgsConstructor
-public final class ShardingSphereTableRowDataPersistService {
+public final class ShardingSphereTableRowDataPersistService implements
TableRowDataBasedPersistService {
private final PersistRepository repository;
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/schema/TableRowDataBasedPersistService.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/schema/TableRowDataBasedPersistService.java
new file mode 100644
index 00000000000..0480f2c5ab9
--- /dev/null
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/schema/TableRowDataBasedPersistService.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.metadata.persist.service.schema;
+
+import org.apache.shardingsphere.infra.metadata.data.ShardingSphereTableData;
+import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
+import
org.apache.shardingsphere.infra.yaml.data.pojo.YamlShardingSphereRowData;
+
+import java.util.Collection;
+
+/**
+ * TODO replace the old implementation after meta data refactor completed
+ * Schema meta data persist service.
+ */
+public interface TableRowDataBasedPersistService {
+
+ /**
+ * Persist table row data.
+ *
+ * @param databaseName database name
+ * @param schemaName schema name
+ * @param tableName table name
+ * @param rows rows
+ */
+ void persist(String databaseName, String schemaName, String tableName,
Collection<YamlShardingSphereRowData> rows);
+
+ /**
+ * Delete table row data.
+ *
+ * @param databaseName database name
+ * @param schemaName schema name
+ * @param tableName table name
+ * @param rows rows
+ */
+ void delete(String databaseName, String schemaName, String tableName,
Collection<YamlShardingSphereRowData> rows);
+
+ /**
+ * Load table data.
+ *
+ * @param databaseName database name
+ * @param schemaName schema name
+ * @param tableName table name
+ * @param table table
+ * @return ShardingSphere table data
+ */
+ ShardingSphereTableData load(String databaseName, String schemaName,
String tableName, ShardingSphereTable table);
+}
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseBasedPersistService.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/version/MetaDataVersionBasedPersistService.java
similarity index 52%
copy from
kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseBasedPersistService.java
copy to
kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/version/MetaDataVersionBasedPersistService.java
index 2f4de995d8c..14acfd17315 100644
---
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseBasedPersistService.java
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/version/MetaDataVersionBasedPersistService.java
@@ -15,62 +15,54 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.metadata.persist.service.config.database;
+package org.apache.shardingsphere.metadata.persist.service.version;
-import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-
-import javax.sql.DataSource;
-import java.util.Map;
-import java.util.Collection;
+import java.util.Optional;
/**
- * Database based persist service.
- *
- * @param <T> type of configuration
+ * TODO replace the old implementation after meta data refactor completed
+ * Meta data version based registry service.
*/
-public interface DatabaseBasedPersistService<T> {
+public interface MetaDataVersionBasedPersistService {
/**
- * Persist configurations.
+ * Get active version.
*
* @param databaseName database name
- * @param configs configurations
+ * @return active database version
*/
- void persist(String databaseName, T configs);
+ Optional<String> getActiveVersion(String databaseName);
/**
- * Persist version configurations.
- *
+ * Judge whether active version.
+ *
* @param databaseName database name
* @param version version
- * @param dataSources data sources
- * @param rules rules
- * @param configs configurations
+ * @return is active version or not
*/
- void persist(String databaseName, String version, Map<String, DataSource>
dataSources, Collection<ShardingSphereRule> rules, T configs);
+ boolean isActiveVersion(String databaseName, String version);
/**
- * Load configurations.
+ * Create new schema version.
*
* @param databaseName database name
- * @return configurations
+ * @return new version
*/
- T load(String databaseName);
+ Optional<String> createNewVersion(String databaseName);
/**
- * Load configurations based version.
- *
+ * Persist active database version.
+ *
* @param databaseName database name
* @param version version
- * @return configurations
*/
- T load(String databaseName, String version);
+ void persistActiveVersion(String databaseName, String version);
/**
- * Judge whether schema configuration existed.
+ * Delete database version.
*
* @param databaseName database name
- * @return configuration existed or not
+ * @param version version
*/
- boolean isExisted(String databaseName);
+ void deleteVersion(String databaseName, String version);
}
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/MetaDataVersionPersistService.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/version/MetaDataVersionPersistService.java
similarity index 95%
rename from
kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/MetaDataVersionPersistService.java
rename to
kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/version/MetaDataVersionPersistService.java
index 367afb3ac06..f826741ed52 100644
---
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/MetaDataVersionPersistService.java
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/version/MetaDataVersionPersistService.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.metadata.persist.service;
+package org.apache.shardingsphere.metadata.persist.service.version;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.metadata.persist.node.DatabaseMetaDataNode;
@@ -28,7 +28,7 @@ import java.util.concurrent.atomic.AtomicLong;
* Meta data version persist service.
*/
@RequiredArgsConstructor
-public final class MetaDataVersionPersistService {
+public final class MetaDataVersionPersistService implements
MetaDataVersionBasedPersistService {
private final PersistRepository repository;
diff --git
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/DatabaseMetaDataPersistServiceTest.java
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/DatabaseMetaDataPersistServiceTest.java
index 5b99aa7d2f1..25f10c59f42 100644
---
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/DatabaseMetaDataPersistServiceTest.java
+++
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/DatabaseMetaDataPersistServiceTest.java
@@ -24,6 +24,7 @@ import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSp
import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
import
org.apache.shardingsphere.infra.yaml.schema.pojo.YamlShardingSphereTable;
import org.apache.shardingsphere.infra.yaml.schema.swapper.YamlTableSwapper;
+import
org.apache.shardingsphere.metadata.persist.service.database.DatabaseMetaDataPersistService;
import org.apache.shardingsphere.mode.spi.PersistRepository;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
diff --git
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/MetaDataVersionPersistServiceTest.java
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/MetaDataVersionPersistServiceTest.java
index bf6a933b41d..ed70adf36cd 100644
---
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/MetaDataVersionPersistServiceTest.java
+++
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/MetaDataVersionPersistServiceTest.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.metadata.persist.service;
import org.apache.shardingsphere.metadata.persist.node.DatabaseMetaDataNode;
+import
org.apache.shardingsphere.metadata.persist.service.version.MetaDataVersionPersistService;
import org.apache.shardingsphere.mode.spi.PersistRepository;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
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 e6d761fe031..501a86ecc5b 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
@@ -52,7 +52,7 @@ import
org.apache.shardingsphere.infra.state.cluster.ClusterStateContext;
import
org.apache.shardingsphere.infra.yaml.data.pojo.YamlShardingSphereRowData;
import
org.apache.shardingsphere.infra.yaml.data.swapper.YamlShardingSphereRowDataSwapper;
import org.apache.shardingsphere.metadata.MetaDataFactory;
-import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
+import org.apache.shardingsphere.metadata.persist.MetaDataBasedPersistService;
import org.apache.shardingsphere.mode.manager.switcher.ResourceSwitchManager;
import org.apache.shardingsphere.mode.manager.switcher.SwitchingResource;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
@@ -354,7 +354,7 @@ public final class ContextManager implements AutoCloseable {
}
private MetaDataContexts createMetaDataContexts(final String databaseName,
final SwitchingResource switchingResource) throws SQLException {
- MetaDataPersistService metaDataPersistService =
metaDataContexts.getPersistService();
+ MetaDataBasedPersistService metaDataPersistService =
metaDataContexts.getPersistService();
Map<String, ShardingSphereDatabase> changedDatabases =
createChangedDatabases(databaseName, false,
switchingResource,
metaDataPersistService.getDatabaseRulePersistService().load(databaseName));
ConfigurationProperties props = new
ConfigurationProperties(metaDataPersistService.getPropsService().load());
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContexts.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContexts.java
index cf8253f298e..d8459547df7 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContexts.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContexts.java
@@ -27,7 +27,7 @@ import
org.apache.shardingsphere.infra.metadata.data.ShardingSphereTableData;
import
org.apache.shardingsphere.infra.metadata.data.builder.ShardingSphereDataBuilder;
import org.apache.shardingsphere.infra.rule.identifier.type.ResourceHeldRule;
import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
+import org.apache.shardingsphere.metadata.persist.MetaDataBasedPersistService;
import java.util.Map.Entry;
import java.util.Optional;
@@ -38,13 +38,13 @@ import java.util.Optional;
@Getter
public final class MetaDataContexts implements AutoCloseable {
- private final MetaDataPersistService persistService;
+ private final MetaDataBasedPersistService persistService;
private final ShardingSphereMetaData metaData;
private final ShardingSphereData shardingSphereData;
- public MetaDataContexts(final MetaDataPersistService persistService, final
ShardingSphereMetaData metaData) {
+ public MetaDataContexts(final MetaDataBasedPersistService persistService,
final ShardingSphereMetaData metaData) {
this.persistService = persistService;
this.metaData = metaData;
this.shardingSphereData = initShardingSphereData(metaData);
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/NewMetaDataContextsFactory.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/NewMetaDataContextsFactory.java
new file mode 100644
index 00000000000..ec96cc4f43b
--- /dev/null
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/NewMetaDataContextsFactory.java
@@ -0,0 +1,185 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.mode.metadata;
+
+import com.google.common.base.Preconditions;
+import com.google.common.base.Splitter;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration;
+import
org.apache.shardingsphere.infra.config.database.impl.DataSourceProvidedDatabaseConfiguration;
+import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import org.apache.shardingsphere.infra.datasource.state.DataSourceState;
+import org.apache.shardingsphere.infra.datasource.state.DataSourceStateManager;
+import org.apache.shardingsphere.infra.instance.InstanceContext;
+import
org.apache.shardingsphere.infra.instance.metadata.jdbc.JDBCInstanceMetaData;
+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.NewMetaDataFactory;
+import org.apache.shardingsphere.metadata.persist.NewMetaDataPersistService;
+import org.apache.shardingsphere.mode.event.storage.StorageNodeDataSource;
+import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter;
+
+import javax.sql.DataSource;
+import java.sql.SQLException;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Properties;
+import java.util.stream.Collectors;
+
+/**
+ * TODO replace the old implementation after meta data refactor completed
+ * New meta data contexts factory.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class NewMetaDataContextsFactory {
+
+ /**
+ * Create meta data contexts.
+ *
+ * @param persistService persist service
+ * @param param context manager builder parameter
+ * @param instanceContext instance context
+ * @return meta data contexts
+ * @throws SQLException SQL exception
+ */
+ public static MetaDataContexts create(final NewMetaDataPersistService
persistService, final ContextManagerBuilderParameter param, final
InstanceContext instanceContext) throws SQLException {
+ return create(persistService, param, instanceContext,
Collections.emptyMap());
+ }
+
+ /**
+ * Create meta data contexts.
+ *
+ * @param persistService persist service
+ * @param param context manager builder parameter
+ * @param instanceContext instance context
+ * @param storageNodes storage nodes
+ * @return meta data contexts
+ * @throws SQLException SQL exception
+ */
+ public static MetaDataContexts create(final NewMetaDataPersistService
persistService, final ContextManagerBuilderParameter param,
+ final InstanceContext
instanceContext, final Map<String, StorageNodeDataSource> storageNodes) throws
SQLException {
+ boolean databaseMetaDataExisted =
databaseMetaDataExisted(persistService);
+ Map<String, DatabaseConfiguration> effectiveDatabaseConfigs =
getDatabaseConfigurations(databaseMetaDataExisted,
+ getDatabaseNames(instanceContext, param.getDatabaseConfigs(),
persistService), param.getDatabaseConfigs(), persistService);
+ 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, 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);
+ persistMetaData(databaseMetaDataExisted, result);
+ return result;
+ }
+
+ private static boolean databaseMetaDataExisted(final
NewMetaDataPersistService persistService) {
+ return
!persistService.getDatabaseMetaDataService().loadAllDatabaseNames().isEmpty();
+ }
+
+ private static Collection<String> getDatabaseNames(final InstanceContext
instanceContext,
+ final Map<String,
DatabaseConfiguration> databaseConfigs, final NewMetaDataPersistService
persistService) {
+ return instanceContext.getInstance().getMetaData() instanceof
JDBCInstanceMetaData ? databaseConfigs.keySet() :
persistService.getDatabaseMetaDataService().loadAllDatabaseNames();
+ }
+
+ private static ConfigurationProperties getConfigurationProperties(final
boolean databaseMetaDataExisted, final NewMetaDataPersistService
persistService, final Properties props) {
+ return databaseMetaDataExisted ? new
ConfigurationProperties(persistService.getPropsService().load()) : new
ConfigurationProperties(props);
+ }
+
+ private static Map<String, DatabaseConfiguration>
getDatabaseConfigurations(final boolean databaseMetaDataExisted, final
Collection<String> databaseNames,
+
final Map<String, DatabaseConfiguration> databaseConfigs, final
NewMetaDataPersistService persistService) {
+ return databaseMetaDataExisted ?
createEffectiveDatabaseConfigurations(databaseNames, databaseConfigs,
persistService) : databaseConfigs;
+ }
+
+ private static Map<String, DatabaseConfiguration>
createEffectiveDatabaseConfigurations(final Collection<String> databaseNames,
+
final Map<String, DatabaseConfiguration> databaseConfigs, final
NewMetaDataPersistService persistService) {
+ return databaseNames.stream().collect(
+ Collectors.toMap(each -> each, each ->
createEffectiveDatabaseConfiguration(each, databaseConfigs, persistService),
(a, b) -> b, () -> new HashMap<>(databaseNames.size(), 1)));
+ }
+
+ private static DatabaseConfiguration
createEffectiveDatabaseConfiguration(final String databaseName,
+
final Map<String, DatabaseConfiguration> databaseConfigs, final
NewMetaDataPersistService persistService) {
+ Map<String, DataSource> effectiveDataSources =
persistService.getEffectiveDataSources(databaseName, databaseConfigs);
+ Collection<RuleConfiguration> databaseRuleConfigs =
persistService.getDatabaseRulePersistService().load(databaseName);
+ return new
DataSourceProvidedDatabaseConfiguration(effectiveDataSources,
databaseRuleConfigs);
+ }
+
+ private static void checkDataSourceStates(final Map<String,
DatabaseConfiguration> databaseConfigs, final Map<String,
StorageNodeDataSource> storageNodes, final boolean force) {
+ Map<String, DataSourceState> storageDataSourceStates =
getStorageDataSourceStates(storageNodes);
+ databaseConfigs.forEach((key, value) -> {
+ if (!value.getDataSources().isEmpty()) {
+ DataSourceStateManager.getInstance().initStates(key,
value.getDataSources(), storageDataSourceStates, force);
+ }
+ });
+ }
+
+ private static Map<String, DataSourceState>
getStorageDataSourceStates(final Map<String, StorageNodeDataSource>
storageDataSourceStates) {
+ Map<String, DataSourceState> result = new
HashMap<>(storageDataSourceStates.size(), 1);
+ storageDataSourceStates.forEach((key, value) -> {
+ List<String> values = Splitter.on(".").splitToList(key);
+ Preconditions.checkArgument(3 == values.size(), "Illegal data
source of storage node.");
+ String databaseName = values.get(0);
+ String dataSourceName = values.get(2);
+ result.put(databaseName + "." + dataSourceName,
DataSourceState.valueOf(value.getStatus().name()));
+ });
+ return result;
+ }
+
+ private static Collection<RuleConfiguration> getGlobalRuleConfigs(final
boolean databaseMetaDataExisted, final NewMetaDataPersistService persistService,
+ final
Collection<RuleConfiguration> globalRuleConfigs) {
+ return databaseMetaDataExisted ?
persistService.getGlobalRuleService().load() : globalRuleConfigs;
+ }
+
+ private static Map<String, ShardingSphereDatabase> getDatabases(final
boolean databaseMetaDataExisted, final NewMetaDataPersistService persistService,
+ final
Map<String, DatabaseConfiguration> databaseConfigMap, final
ConfigurationProperties props,
+ final
InstanceContext instanceContext) throws SQLException {
+ return NewMetaDataFactory.create(databaseMetaDataExisted,
persistService, databaseConfigMap, props, instanceContext);
+ }
+
+ private static void persistDatabaseConfigurations(final boolean
databaseMetaDataExisted, final ContextManagerBuilderParameter param, final
MetaDataContexts metadataContexts) {
+ if (!databaseMetaDataExisted) {
+ persistDatabaseConfigurations(metadataContexts, param);
+ }
+ }
+
+ private static void persistDatabaseConfigurations(final MetaDataContexts
metadataContexts, final ContextManagerBuilderParameter param) {
+
metadataContexts.getPersistService().persistGlobalRuleConfiguration(param.getGlobalRuleConfigs(),
param.getProps());
+ for (Entry<String, ? extends DatabaseConfiguration> entry :
param.getDatabaseConfigs().entrySet()) {
+ String databaseName = entry.getKey();
+
metadataContexts.getPersistService().persistConfigurations(entry.getKey(),
entry.getValue(),
+
metadataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData().getDataSources(),
+
metadataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getRules());
+ }
+ }
+
+ private static void persistMetaData(final boolean databaseMetaDataExisted,
final MetaDataContexts metaDataContexts) {
+ if (!databaseMetaDataExisted) {
+
metaDataContexts.getMetaData().getDatabases().values().forEach(each ->
each.getSchemas()
+ .forEach((schemaName, schema) ->
metaDataContexts.getPersistService().getDatabaseMetaDataService().persist(each.getName(),
schemaName, schema)));
+
metaDataContexts.getShardingSphereData().getDatabaseData().forEach((databaseName,
databaseData) -> databaseData.getSchemaData().forEach((schemaName, schemaData)
-> metaDataContexts
+
.getPersistService().getShardingSphereDataPersistService().persist(databaseName,
schemaName, schemaData, metaDataContexts.getMetaData().getDatabases())));
+ }
+ }
+}
diff --git
a/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
b/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
index a1619edb9ba..8c48225392b 100644
---
a/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
+++
b/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
@@ -37,7 +37,7 @@ import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSp
import
org.apache.shardingsphere.infra.rule.identifier.type.MutableDataNodeRule;
import org.apache.shardingsphere.infra.state.cluster.ClusterState;
import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
-import
org.apache.shardingsphere.metadata.persist.service.DatabaseMetaDataPersistService;
+import
org.apache.shardingsphere.metadata.persist.service.database.DatabaseMetaDataPersistService;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
import org.apache.shardingsphere.test.util.PropertiesBuilder;
diff --git
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactoryTest.java
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactoryTest.java
index 29f4a5a3843..013bff31b84 100644
---
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactoryTest.java
+++
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactoryTest.java
@@ -24,7 +24,7 @@ import
org.apache.shardingsphere.infra.instance.metadata.jdbc.JDBCInstanceMetaDa
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
import org.apache.shardingsphere.metadata.factory.ExternalMetaDataFactory;
-import
org.apache.shardingsphere.metadata.persist.service.DatabaseMetaDataPersistService;
+import
org.apache.shardingsphere.metadata.persist.service.database.DatabaseMetaDataPersistService;
import
org.apache.shardingsphere.metadata.persist.service.config.database.DatabaseRulePersistService;
import
org.apache.shardingsphere.metadata.persist.service.config.global.GlobalRulePersistService;
import
org.apache.shardingsphere.metadata.persist.service.config.global.PropertiesPersistService;
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 81212bd8ece..44dc6bb02b4 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
@@ -25,7 +25,7 @@ import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSp
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView;
import
org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchemaMetaDataPOJO;
import
org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchemaPOJO;
-import
org.apache.shardingsphere.metadata.persist.service.DatabaseMetaDataPersistService;
+import
org.apache.shardingsphere.metadata.persist.service.database.DatabaseMetaDataBasedPersistService;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.mode.manager.ContextManagerAware;
@@ -61,7 +61,7 @@ public final class ClusterModeContextManager implements
ModeContextManager, Cont
String databaseName = alterSchemaPOJO.getDatabaseName();
String schemaName = alterSchemaPOJO.getSchemaName();
ShardingSphereSchema schema =
contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getSchema(schemaName);
- DatabaseMetaDataPersistService databaseMetaDataService =
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService();
+ DatabaseMetaDataBasedPersistService databaseMetaDataService =
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService();
databaseMetaDataService.persist(databaseName,
alterSchemaPOJO.getRenameSchemaName(), schema);
databaseMetaDataService.getViewMetaDataPersistService().persist(databaseName,
alterSchemaPOJO.getRenameSchemaName(), schema.getViews());
databaseMetaDataService.dropSchema(databaseName, schemaName);
@@ -69,7 +69,7 @@ public final class ClusterModeContextManager implements
ModeContextManager, Cont
@Override
public void dropSchema(final String databaseName, final Collection<String>
schemaNames) {
- DatabaseMetaDataPersistService databaseMetaDataService =
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService();
+ DatabaseMetaDataBasedPersistService databaseMetaDataService =
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService();
schemaNames.forEach(each ->
databaseMetaDataService.dropSchema(databaseName, each));
}
@@ -79,7 +79,7 @@ public final class ClusterModeContextManager implements
ModeContextManager, Cont
String schemaName = alterSchemaMetaDataPOJO.getSchemaName();
Map<String, ShardingSphereTable> tables =
alterSchemaMetaDataPOJO.getAlteredTables().stream().collect(Collectors.toMap(ShardingSphereTable::getName,
table -> table));
Map<String, ShardingSphereView> views =
alterSchemaMetaDataPOJO.getAlteredViews().stream().collect(Collectors.toMap(ShardingSphereView::getName,
view -> view));
- DatabaseMetaDataPersistService databaseMetaDataService =
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService();
+ DatabaseMetaDataBasedPersistService databaseMetaDataService =
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService();
databaseMetaDataService.getTableMetaDataPersistService().persist(databaseName,
schemaName, tables);
databaseMetaDataService.getViewMetaDataPersistService().persist(databaseName,
schemaName, views);
alterSchemaMetaDataPOJO.getDroppedTables().forEach(each ->
databaseMetaDataService.getTableMetaDataPersistService().delete(databaseName,
schemaName, each));
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/NewClusterContextManagerBuilder.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/NewClusterContextManagerBuilder.java
new file mode 100644
index 00000000000..b2277348b69
--- /dev/null
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/NewClusterContextManagerBuilder.java
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.mode.manager.cluster;
+
+import com.google.common.base.Preconditions;
+import org.apache.shardingsphere.infra.instance.ComputeNodeInstance;
+import org.apache.shardingsphere.infra.instance.InstanceContext;
+import org.apache.shardingsphere.infra.instance.InstanceContextAware;
+import org.apache.shardingsphere.infra.util.eventbus.EventBusContext;
+import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
+import org.apache.shardingsphere.metadata.persist.NewMetaDataPersistService;
+import org.apache.shardingsphere.mode.lock.GlobalLockContext;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import org.apache.shardingsphere.mode.manager.ContextManagerAware;
+import org.apache.shardingsphere.mode.manager.ContextManagerBuilder;
+import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter;
+import
org.apache.shardingsphere.mode.manager.cluster.coordinator.RegistryCenter;
+import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.workerid.generator.ClusterWorkerIdGenerator;
+import
org.apache.shardingsphere.mode.manager.cluster.coordinator.subscriber.NewContextManagerSubscriberFacade;
+import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
+import org.apache.shardingsphere.mode.metadata.NewMetaDataContextsFactory;
+import
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
+import
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepositoryConfiguration;
+
+import java.sql.SQLException;
+
+/**
+ * TODO replace the old implementation after meta data refactor completed
+ * New cluster context manager builder.
+ */
+public final class NewClusterContextManagerBuilder implements
ContextManagerBuilder {
+
+ @Override
+ public ContextManager build(final ContextManagerBuilderParameter param)
throws SQLException {
+ ClusterPersistRepository repository =
getClusterPersistRepository((ClusterPersistRepositoryConfiguration)
param.getModeConfiguration().getRepository());
+ RegistryCenter registryCenter = new RegistryCenter(repository, new
EventBusContext(), param.getInstanceMetaData(), param.getDatabaseConfigs());
+ InstanceContext instanceContext = buildInstanceContext(registryCenter,
param);
+ if (registryCenter.getRepository() instanceof InstanceContextAware) {
+ ((InstanceContextAware)
registryCenter.getRepository()).setInstanceContext(instanceContext);
+ }
+ NewMetaDataPersistService persistService = new
NewMetaDataPersistService(repository);
+ MetaDataContexts metaDataContexts =
NewMetaDataContextsFactory.create(persistService, param, instanceContext,
registryCenter.getStorageNodeStatusService().loadStorageNodes());
+ ContextManager result = new ContextManager(metaDataContexts,
instanceContext);
+ setContextManagerAware(result);
+ registerOnline(persistService, registryCenter, param, result);
+ return result;
+ }
+
+ private ClusterPersistRepository getClusterPersistRepository(final
ClusterPersistRepositoryConfiguration config) {
+ Preconditions.checkNotNull(config, "Cluster persist repository
configuration cannot be null.");
+ ClusterPersistRepository result =
TypedSPILoader.getService(ClusterPersistRepository.class, config.getType(),
config.getProps());
+ result.init(config);
+ return result;
+ }
+
+ private InstanceContext buildInstanceContext(final RegistryCenter
registryCenter, final ContextManagerBuilderParameter param) {
+ return new InstanceContext(new
ComputeNodeInstance(param.getInstanceMetaData()), new
ClusterWorkerIdGenerator(registryCenter, param.getInstanceMetaData()),
+ param.getModeConfiguration(), new ClusterModeContextManager(),
new GlobalLockContext(registryCenter.getGlobalLockPersistService()),
registryCenter.getEventBusContext());
+ }
+
+ private void setContextManagerAware(final ContextManager contextManager) {
+ ((ContextManagerAware)
contextManager.getInstanceContext().getModeContextManager()).setContextManagerAware(contextManager);
+ }
+
+ private void registerOnline(final NewMetaDataPersistService
persistService, final RegistryCenter registryCenter, final
ContextManagerBuilderParameter param, final ContextManager contextManager) {
+ loadClusterStatus(registryCenter, contextManager);
+
contextManager.getInstanceContext().getInstance().setLabels(param.getLabels());
+
contextManager.getInstanceContext().getAllClusterInstances().addAll(registryCenter.getComputeNodeStatusService().loadAllComputeNodeInstances());
+ new NewContextManagerSubscriberFacade(persistService, registryCenter,
contextManager);
+
registryCenter.onlineInstance(contextManager.getInstanceContext().getInstance());
+ }
+
+ private void loadClusterStatus(final RegistryCenter registryCenter, final
ContextManager contextManager) {
+ registryCenter.persistClusterState(contextManager);
+
contextManager.updateClusterState(registryCenter.getClusterStatusService().loadClusterStatus());
+ }
+
+ @Override
+ public String getType() {
+ return "New_Cluster";
+ }
+}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewConfigurationChangedSubscriber.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewConfigurationChangedSubscriber.java
new file mode 100644
index 00000000000..5aa0a938fa6
--- /dev/null
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewConfigurationChangedSubscriber.java
@@ -0,0 +1,154 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.mode.manager.cluster.coordinator.subscriber;
+
+import com.google.common.eventbus.Subscribe;
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
+import org.apache.shardingsphere.infra.datasource.state.DataSourceState;
+import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import
org.apache.shardingsphere.infra.metadata.database.schema.QualifiedDatabase;
+import
org.apache.shardingsphere.infra.rule.identifier.type.StaticDataSourceContainedRule;
+import org.apache.shardingsphere.metadata.persist.NewMetaDataPersistService;
+import org.apache.shardingsphere.mode.event.storage.StorageNodeDataSource;
+import
org.apache.shardingsphere.mode.event.storage.StorageNodeDataSourceChangedEvent;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import
org.apache.shardingsphere.mode.manager.cluster.coordinator.RegistryCenter;
+import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.datasource.DataSourceChangedEvent;
+import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.props.PropertiesChangedEvent;
+import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.rule.GlobalRuleConfigurationsChangedEvent;
+import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.rule.RuleConfigurationsChangedEvent;
+import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.version.DatabaseVersionChangedEvent;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.stream.Collectors;
+
+/**
+ * TODO replace the old implementation after meta data refactor completed
+ * New configuration changed subscriber.
+ */
+@SuppressWarnings("UnstableApiUsage")
+public final class NewConfigurationChangedSubscriber {
+
+ private final NewMetaDataPersistService persistService;
+
+ private final RegistryCenter registryCenter;
+
+ private final ContextManager contextManager;
+
+ public NewConfigurationChangedSubscriber(final NewMetaDataPersistService
persistService, final RegistryCenter registryCenter, final ContextManager
contextManager) {
+ this.persistService = persistService;
+ this.registryCenter = registryCenter;
+ this.contextManager = contextManager;
+
contextManager.getInstanceContext().getEventBusContext().register(this);
+ disableDataSources();
+ }
+
+ /**
+ * Renew data source configuration.
+ *
+ * @param event data source changed event.
+ */
+ @Subscribe
+ public synchronized void renew(final DataSourceChangedEvent event) {
+ if
(persistService.getMetaDataVersionPersistService().isActiveVersion(event.getDatabaseName(),
event.getDatabaseVersion())) {
+
contextManager.alterDataSourceConfiguration(event.getDatabaseName(),
event.getDataSourcePropertiesMap());
+ disableDataSources();
+ }
+ }
+
+ /**
+ * Renew rule configurations.
+ *
+ * @param event rule configurations changed event
+ */
+ @Subscribe
+ public synchronized void renew(final RuleConfigurationsChangedEvent event)
{
+ if
(persistService.getMetaDataVersionPersistService().isActiveVersion(event.getDatabaseName(),
event.getDatabaseVersion())) {
+ contextManager.alterRuleConfiguration(event.getDatabaseName(),
event.getRuleConfigs());
+ disableDataSources();
+ }
+ }
+
+ /**
+ * Renew global rule configurations.
+ *
+ * @param event global rule configurations changed event
+ */
+ @Subscribe
+ public synchronized void renew(final GlobalRuleConfigurationsChangedEvent
event) {
+ contextManager.alterGlobalRuleConfiguration(event.getRuleConfigs());
+ disableDataSources();
+ }
+
+ /**
+ * Renew with new database version.
+ *
+ * @param event database version changed event
+ */
+ @Subscribe
+ public synchronized void renew(final DatabaseVersionChangedEvent event) {
+ 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();
+ }
+
+ /**
+ * Renew properties.
+ *
+ * @param event properties changed event
+ */
+ @Subscribe
+ public synchronized void renew(final PropertiesChangedEvent event) {
+ contextManager.alterProperties(event.getProps());
+ }
+
+ private void disableDataSources() {
+ Map<String, StorageNodeDataSource> storageNodes =
getDisabledDataSources();
+ for (Entry<String, ShardingSphereDatabase> entry :
contextManager.getMetaDataContexts().getMetaData().getDatabases().entrySet()) {
+
entry.getValue().getRuleMetaData().findRules(StaticDataSourceContainedRule.class).forEach(each
-> disableDataSources(entry.getKey(), each, storageNodes));
+ }
+ }
+
+ private void disableDataSources(final String databaseName, final
StaticDataSourceContainedRule rule, final Map<String, StorageNodeDataSource>
storageNodes) {
+ for (Entry<String, StorageNodeDataSource> entry :
storageNodes.entrySet()) {
+ QualifiedDatabase database = new QualifiedDatabase(entry.getKey());
+ if (!database.getDatabaseName().equals(databaseName)) {
+ continue;
+ }
+ disableDataSources(entry.getValue(), rule, database);
+ }
+ }
+
+ private void disableDataSources(final StorageNodeDataSource
storageNodeDataSource, final StaticDataSourceContainedRule rule, final
QualifiedDatabase database) {
+ for (Entry<String, Collection<String>> entry :
rule.getDataSourceMapper().entrySet()) {
+ if (!database.getGroupName().equals(entry.getKey())) {
+ continue;
+ }
+ entry.getValue().forEach(each -> rule.updateStatus(new
StorageNodeDataSourceChangedEvent(database, storageNodeDataSource)));
+ }
+ }
+
+ private Map<String, StorageNodeDataSource> getDisabledDataSources() {
+ return
registryCenter.getStorageNodeStatusService().loadStorageNodes().entrySet()
+ .stream().filter(entry -> DataSourceState.DISABLED ==
entry.getValue().getStatus()).collect(Collectors.toMap(Entry::getKey,
Entry::getValue));
+ }
+}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewContextManagerSubscriberFacade.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewContextManagerSubscriberFacade.java
new file mode 100644
index 00000000000..37264389dbf
--- /dev/null
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewContextManagerSubscriberFacade.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.mode.manager.cluster.coordinator.subscriber;
+
+import org.apache.shardingsphere.metadata.persist.NewMetaDataPersistService;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import
org.apache.shardingsphere.mode.manager.cluster.coordinator.RegistryCenter;
+import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.process.subscriber.ProcessListChangedSubscriber;
+
+/**
+ * TODO replace the old implementation after meta data refactor completed
+ * New context manager subscriber facade.
+ */
+public final class NewContextManagerSubscriberFacade {
+
+ public NewContextManagerSubscriberFacade(final NewMetaDataPersistService
persistService, final RegistryCenter registryCenter, final ContextManager
contextManager) {
+ new NewConfigurationChangedSubscriber(persistService, registryCenter,
contextManager);
+ // TODO replace all to new subscriber
+ new ResourceMetaDataChangedSubscriber(contextManager);
+ new DatabaseChangedSubscriber(contextManager);
+ new StateChangedSubscriber(registryCenter, contextManager);
+ new ProcessListChangedSubscriber(registryCenter, contextManager);
+ new
CacheEvictedSubscriber(contextManager.getInstanceContext().getEventBusContext());
+ }
+}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/yaml/NewClusterYamlPersistRepositoryConfigurationSwapper.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/yaml/NewClusterYamlPersistRepositoryConfigurationSwapper.java
new file mode 100644
index 00000000000..1ef2a91a899
--- /dev/null
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/yaml/NewClusterYamlPersistRepositoryConfigurationSwapper.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.mode.manager.cluster.yaml;
+
+import
org.apache.shardingsphere.infra.yaml.config.pojo.mode.YamlPersistRepositoryConfiguration;
+import
org.apache.shardingsphere.infra.yaml.config.swapper.mode.YamlPersistRepositoryConfigurationSwapper;
+import
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepositoryConfiguration;
+
+/**
+ * TODO replace the old implementation after meta data refactor completed
+ * New cluster YAML persist repository configuration swapper.
+ */
+public final class NewClusterYamlPersistRepositoryConfigurationSwapper
implements
YamlPersistRepositoryConfigurationSwapper<ClusterPersistRepositoryConfiguration>
{
+
+ @Override
+ public YamlPersistRepositoryConfiguration swapToYamlConfiguration(final
ClusterPersistRepositoryConfiguration data) {
+ YamlPersistRepositoryConfiguration result = new
YamlPersistRepositoryConfiguration();
+ result.setType(data.getType());
+ result.setProps(data.getProps());
+ result.getProps().setProperty("namespace", data.getNamespace());
+ result.getProps().setProperty("server-lists", data.getServerLists());
+ return result;
+ }
+
+ @Override
+ public ClusterPersistRepositoryConfiguration swapToObject(final
YamlPersistRepositoryConfiguration yamlConfig) {
+ return new ClusterPersistRepositoryConfiguration(
+ yamlConfig.getType(),
yamlConfig.getProps().getProperty("namespace"),
yamlConfig.getProps().getProperty("server-lists"), yamlConfig.getProps());
+ }
+
+ @Override
+ public String getType() {
+ return "New_Cluster";
+ }
+}
diff --git
a/mode/type/cluster/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.yaml.config.swapper.mode.YamlPersistRepositoryConfigurationSwapper
b/mode/type/cluster/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.yaml.config.swapper.mode.YamlPersistRepositoryConfigurationSwapper
index c99b74c9e28..32547afa5a6 100644
---
a/mode/type/cluster/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.yaml.config.swapper.mode.YamlPersistRepositoryConfigurationSwapper
+++
b/mode/type/cluster/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.yaml.config.swapper.mode.YamlPersistRepositoryConfigurationSwapper
@@ -16,3 +16,4 @@
#
org.apache.shardingsphere.mode.manager.cluster.yaml.ClusterYamlPersistRepositoryConfigurationSwapper
+org.apache.shardingsphere.mode.manager.cluster.yaml.NewClusterYamlPersistRepositoryConfigurationSwapper
diff --git
a/mode/type/cluster/core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.manager.ContextManagerBuilder
b/mode/type/cluster/core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.manager.ContextManagerBuilder
index 953967ea3f1..ba7c524d7ee 100644
---
a/mode/type/cluster/core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.manager.ContextManagerBuilder
+++
b/mode/type/cluster/core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.manager.ContextManagerBuilder
@@ -16,3 +16,4 @@
#
org.apache.shardingsphere.mode.manager.cluster.ClusterContextManagerBuilder
+org.apache.shardingsphere.mode.manager.cluster.NewClusterContextManagerBuilder
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 7754978fc55..9dc8d1fd27f 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
@@ -31,7 +31,7 @@ import
org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRul
import
org.apache.shardingsphere.infra.rule.identifier.type.MutableDataNodeRule;
import org.apache.shardingsphere.infra.rule.identifier.type.ResourceHeldRule;
import
org.apache.shardingsphere.infra.util.spi.type.ordered.cache.OrderedServicesCache;
-import
org.apache.shardingsphere.metadata.persist.service.DatabaseMetaDataPersistService;
+import
org.apache.shardingsphere.metadata.persist.service.database.DatabaseMetaDataBasedPersistService;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.mode.manager.ContextManagerAware;
import org.apache.shardingsphere.mode.manager.switcher.ResourceSwitchManager;
@@ -40,12 +40,12 @@ import
org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import java.sql.SQLException;
import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Map.Entry;
-import java.util.Properties;
-import java.util.Collections;
import java.util.Optional;
-import java.util.LinkedHashSet;
+import java.util.Properties;
import java.util.stream.Collectors;
/**
@@ -81,7 +81,7 @@ public final class StandaloneModeContextManager implements
ModeContextManager, C
ShardingSphereDatabase database =
contextManager.getMetaDataContexts().getMetaData().getDatabase(alterSchemaPOJO.getDatabaseName());
putSchemaMetaData(database, alterSchemaPOJO.getSchemaName(),
alterSchemaPOJO.getRenameSchemaName(),
alterSchemaPOJO.getLogicDataSourceName());
removeSchemaMetaData(database, alterSchemaPOJO.getSchemaName());
- DatabaseMetaDataPersistService databaseMetaDataService =
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService();
+ DatabaseMetaDataBasedPersistService databaseMetaDataService =
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService();
databaseMetaDataService.persist(alterSchemaPOJO.getDatabaseName(),
alterSchemaPOJO.getRenameSchemaName(),
database.getSchema(alterSchemaPOJO.getRenameSchemaName()));
databaseMetaDataService.getViewMetaDataPersistService().persist(alterSchemaPOJO.getDatabaseName(),
alterSchemaPOJO.getRenameSchemaName(),
database.getSchema(alterSchemaPOJO.getRenameSchemaName()).getViews());
@@ -187,7 +187,7 @@ public final class StandaloneModeContextManager implements
ModeContextManager, C
Map<String, ShardingSphereView> views =
alterSchemaMetaDataPOJO.getAlteredViews().stream().collect(Collectors.toMap(ShardingSphereView::getName,
view -> view));
addDataNode(database,
alterSchemaMetaDataPOJO.getLogicDataSourceName(), schemaName, tables, views);
removeDataNode(database, schemaName,
alterSchemaMetaDataPOJO.getDroppedTables(),
alterSchemaMetaDataPOJO.getDroppedViews());
- DatabaseMetaDataPersistService databaseMetaDataService =
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService();
+ DatabaseMetaDataBasedPersistService databaseMetaDataService =
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService();
databaseMetaDataService.getTableMetaDataPersistService().persist(databaseName,
schemaName, tables);
databaseMetaDataService.getViewMetaDataPersistService().persist(databaseName,
schemaName, views);
alterSchemaMetaDataPOJO.getDroppedTables().forEach(each ->
databaseMetaDataService.getTableMetaDataPersistService().delete(databaseName,
schemaName, each));
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowStatusFromReadwriteSplittingRulesExecutor.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowStatusFromReadwriteSplittingRulesExecutor.java
index 99872351e8a..3005f216e27 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowStatusFromReadwriteSplittingRulesExecutor.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowStatusFromReadwriteSplittingRulesExecutor.java
@@ -29,7 +29,7 @@ import
org.apache.shardingsphere.infra.rule.identifier.type.exportable.Exportabl
import
org.apache.shardingsphere.infra.rule.identifier.type.exportable.RuleExportEngine;
import
org.apache.shardingsphere.infra.rule.identifier.type.exportable.constant.ExportableConstants;
import
org.apache.shardingsphere.infra.rule.identifier.type.exportable.constant.ExportableItemConstants;
-import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
+import org.apache.shardingsphere.metadata.persist.MetaDataBasedPersistService;
import org.apache.shardingsphere.mode.event.storage.StorageNodeDataSource;
import org.apache.shardingsphere.mode.event.storage.StorageNodeRole;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.storage.service.StorageNodeStatusService;
@@ -96,7 +96,7 @@ public final class
ShowStatusFromReadwriteSplittingRulesExecutor implements Conn
.map(this::deconstructString).flatMap(Collection::stream).collect(Collectors.toCollection(LinkedHashSet::new));
}
- private Map<String, StorageNodeDataSource>
getPersistentReadResources(final String databaseName, final
MetaDataPersistService persistService) {
+ private Map<String, StorageNodeDataSource>
getPersistentReadResources(final String databaseName, final
MetaDataBasedPersistService persistService) {
if (null == persistService || null == persistService.getRepository()
|| !(persistService.getRepository() instanceof ClusterPersistRepository)) {
return Collections.emptyMap();
}
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/AlterReadwriteSplittingStorageUnitStatusStatementUpdater.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/AlterReadwriteSplittingStorageUnitStatusStatementUpdater.java
index 8f6f72b265e..3b1f6d6bd61 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/AlterReadwriteSplittingStorageUnitStatusStatementUpdater.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/AlterReadwriteSplittingStorageUnitStatusStatementUpdater.java
@@ -30,12 +30,12 @@ import
org.apache.shardingsphere.infra.rule.identifier.type.exportable.constant.
import
org.apache.shardingsphere.infra.rule.identifier.type.exportable.constant.ExportableItemConstants;
import
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
import
org.apache.shardingsphere.infra.util.exception.external.sql.type.generic.UnsupportedSQLOperationException;
-import org.apache.shardingsphere.mode.manager.ContextManager;
-import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.storage.service.StorageNodeStatusService;
-import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
+import org.apache.shardingsphere.metadata.persist.MetaDataBasedPersistService;
+import org.apache.shardingsphere.mode.event.storage.DataSourceDisabledEvent;
import org.apache.shardingsphere.mode.event.storage.StorageNodeDataSource;
import org.apache.shardingsphere.mode.event.storage.StorageNodeRole;
-import org.apache.shardingsphere.mode.event.storage.DataSourceDisabledEvent;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.storage.service.StorageNodeStatusService;
import
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import
org.apache.shardingsphere.readwritesplitting.distsql.parser.statement.status.AlterReadwriteSplittingStorageUnitStatusStatement;
@@ -123,7 +123,7 @@ public final class
AlterReadwriteSplittingStorageUnitStatusStatementUpdater impl
}
private Map<String, String> getDisabledResources(final ContextManager
contextManager, final String databaseName) {
- MetaDataPersistService persistService =
contextManager.getMetaDataContexts().getPersistService();
+ MetaDataBasedPersistService persistService =
contextManager.getMetaDataContexts().getPersistService();
return getDisabledStorageNodes(databaseName, persistService).stream()
.collect(Collectors.toMap(QualifiedDatabase::getDataSourceName,
QualifiedDatabase::getGroupName, (value1, value2) -> String.join(",", value1,
value2)));
}
@@ -185,7 +185,7 @@ public final class
AlterReadwriteSplittingStorageUnitStatusStatementUpdater impl
});
}
- private Collection<QualifiedDatabase> getDisabledStorageNodes(final String
databaseName, final MetaDataPersistService persistService) {
+ private Collection<QualifiedDatabase> getDisabledStorageNodes(final String
databaseName, final MetaDataBasedPersistService persistService) {
Map<String, StorageNodeDataSource> storageNodes = new
StorageNodeStatusService((ClusterPersistRepository)
persistService.getRepository()).loadStorageNodes();
return storageNodes.entrySet().stream().filter(each ->
DataSourceState.DISABLED == each.getValue().getStatus())
.map(each -> new QualifiedDatabase(each.getKey())).filter(each
->
databaseName.equalsIgnoreCase(each.getDatabaseName())).collect(Collectors.toList());
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/LabelComputeNodeUpdater.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/LabelComputeNodeUpdater.java
index e2282f670f2..37888483005 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/LabelComputeNodeUpdater.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/LabelComputeNodeUpdater.java
@@ -22,9 +22,9 @@ import
org.apache.shardingsphere.distsql.parser.statement.ral.updatable.LabelCom
import org.apache.shardingsphere.infra.instance.ComputeNodeInstance;
import
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
import
org.apache.shardingsphere.infra.util.exception.external.sql.type.generic.UnsupportedSQLOperationException;
+import org.apache.shardingsphere.metadata.persist.MetaDataBasedPersistService;
import org.apache.shardingsphere.mode.manager.ContextManager;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.compute.event.LabelsChangedEvent;
-import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
import
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
@@ -42,7 +42,7 @@ public final class LabelComputeNodeUpdater implements
RALUpdater<LabelComputeNod
@Override
public void executeUpdate(final String databaseName, final
LabelComputeNodeStatement sqlStatement) throws SQLException {
ContextManager contextManager =
ProxyContext.getInstance().getContextManager();
- MetaDataPersistService persistService =
contextManager.getMetaDataContexts().getPersistService();
+ MetaDataBasedPersistService persistService =
contextManager.getMetaDataContexts().getPersistService();
ShardingSpherePreconditions.checkState(null != persistService && null
!= persistService.getRepository() && persistService.getRepository() instanceof
ClusterPersistRepository,
() -> new UnsupportedSQLOperationException("Labels can only be
added in cluster mode"));
String instanceId = sqlStatement.getInstanceId();
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/UnlabelComputeNodeUpdater.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/UnlabelComputeNodeUpdater.java
index 27a9c408747..1ea08a262ae 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/UnlabelComputeNodeUpdater.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/UnlabelComputeNodeUpdater.java
@@ -22,9 +22,9 @@ import
org.apache.shardingsphere.distsql.parser.statement.ral.updatable.UnlabelC
import org.apache.shardingsphere.infra.instance.ComputeNodeInstance;
import
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
import
org.apache.shardingsphere.infra.util.exception.external.sql.type.generic.UnsupportedSQLOperationException;
+import org.apache.shardingsphere.metadata.persist.MetaDataBasedPersistService;
import org.apache.shardingsphere.mode.manager.ContextManager;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.compute.event.LabelsChangedEvent;
-import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
import
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
@@ -41,7 +41,7 @@ public final class UnlabelComputeNodeUpdater implements
RALUpdater<UnlabelComput
@Override
public void executeUpdate(final String databaseName, final
UnlabelComputeNodeStatement sqlStatement) {
- MetaDataPersistService persistService =
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getPersistService();
+ MetaDataBasedPersistService persistService =
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getPersistService();
ShardingSpherePreconditions.checkState(null !=
persistService.getRepository() && persistService.getRepository() instanceof
ClusterPersistRepository,
() -> new UnsupportedSQLOperationException("Labels can only be
removed in cluster mode"));
String instanceId = sqlStatement.getInstanceId();