You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2023/05/06 06:31:19 UTC
[shardingsphere] branch master updated: Add new meta data builder SPI implementation (#25476)
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 <Pa...@163.com>
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();