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 2024/04/08 15:34:56 UTC
(shardingsphere) branch master updated: Split persistByDropConfiguration and persistByAlterConfiguration for DatabaseMetaDataBasedPersistService (#30810)
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 1c3a831b550 Split persistByDropConfiguration and persistByAlterConfiguration for DatabaseMetaDataBasedPersistService (#30810)
1c3a831b550 is described below
commit 1c3a831b550eb56d03a5464e5b27ad0798552d8f
Author: zhaojinchao <zh...@apache.org>
AuthorDate: Mon Apr 8 23:34:48 2024 +0800
Split persistByDropConfiguration and persistByAlterConfiguration for DatabaseMetaDataBasedPersistService (#30810)
---
.../DatabaseMetaDataBasedPersistService.java | 14 ++++-
.../database/DatabaseMetaDataPersistService.java | 65 +++-------------------
.../mode/manager/ContextManager.java | 2 +-
.../context/ConfigurationContextManager.java | 26 ++++-----
.../mode/metadata/MetaDataContextsFactory.java | 12 +---
.../manager/cluster/ClusterModeContextManager.java | 2 +-
.../standalone/StandaloneModeContextManager.java | 6 +-
7 files changed, 39 insertions(+), 88 deletions(-)
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
index 0e749bd2dcb..3eab43302f2 100644
--- 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
@@ -26,7 +26,6 @@ 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 {
@@ -78,13 +77,22 @@ public interface DatabaseMetaDataBasedPersistService {
void compareAndPersist(String databaseName, String schemaName, ShardingSphereSchema schema);
/**
- * Persist schema meta data.
+ * Persist schema meta data by alter configuration.
*
* @param databaseName database name
* @param schemaName schema name
* @param schema schema meta data
*/
- void persist(String databaseName, String schemaName, ShardingSphereSchema schema);
+ void persistByAlterConfiguration(String databaseName, String schemaName, ShardingSphereSchema schema);
+
+ /**
+ * Persist schema meta data by drop configuration.
+ *
+ * @param databaseName database name
+ * @param schemaName schema name
+ * @param schema schema meta data
+ */
+ void persistByDropConfiguration(String databaseName, String schemaName, ShardingSphereSchema schema);
/**
* Delete schema meta data.
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/database/DatabaseMetaDataPersistService.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/database/DatabaseMetaDataPersistService.java
index 3f5c40a3140..1115177ad4b 100644
--- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/database/DatabaseMetaDataPersistService.java
+++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/database/DatabaseMetaDataPersistService.java
@@ -52,69 +52,35 @@ public final class DatabaseMetaDataPersistService implements DatabaseMetaDataBas
this.metaDataVersionPersistService = metaDataVersionPersistService;
}
- /**
- * Add database name.
- *
- * @param databaseName database name
- */
@Override
public void addDatabase(final String databaseName) {
repository.persist(DatabaseMetaDataNode.getDatabaseNamePath(databaseName), "");
}
- /**
- * Drop database.
- *
- * @param databaseName database name to be deleted
- */
@Override
public void dropDatabase(final String databaseName) {
repository.delete(DatabaseMetaDataNode.getDatabaseNamePath(databaseName));
}
- /**
- * Load all database names.
- *
- * @return all database names
- */
@Override
public Collection<String> loadAllDatabaseNames() {
return repository.getChildrenKeys(DatabaseMetaDataNode.getMetaDataNode());
}
- /**
- * Add schema.
- *
- * @param databaseName database name
- * @param schemaName schema name
- */
@Override
public void addSchema(final String databaseName, final String schemaName) {
repository.persist(DatabaseMetaDataNode.getMetaDataTablesPath(databaseName, schemaName), "");
}
- /**
- * Drop schema.
- *
- * @param databaseName database name
- * @param schemaName schema name
- */
@Override
public void dropSchema(final String databaseName, final String schemaName) {
repository.delete(DatabaseMetaDataNode.getMetaDataSchemaPath(databaseName, schemaName));
}
- /**
- * Compare and persist schema meta data.
- *
- * @param databaseName database name
- * @param schemaName schema name
- * @param schema schema meta data
- */
@Override
public void compareAndPersist(final String databaseName, final String schemaName, final ShardingSphereSchema schema) {
if (schema.getTables().isEmpty() && schema.getViews().isEmpty()) {
- return;
+ addSchema(databaseName, schemaName);
}
Map<String, ShardingSphereTable> currentTables = tableMetaDataPersistService.load(databaseName, schemaName);
metaDataVersionPersistService.switchActiveVersion(tableMetaDataPersistService
@@ -122,39 +88,24 @@ public final class DatabaseMetaDataPersistService implements DatabaseMetaDataBas
GenericSchemaManager.getToBeDeletedTables(schema.getTables(), currentTables).forEach((key, value) -> tableMetaDataPersistService.delete(databaseName, schemaName, key));
}
- /**
- * Persist schema meta data.
- *
- * @param databaseName database name
- * @param schemaName schema name
- * @param schema schema meta data
- */
@Override
- public void persist(final String databaseName, final String schemaName, final ShardingSphereSchema schema) {
+ public void persistByAlterConfiguration(final String databaseName, final String schemaName, final ShardingSphereSchema schema) {
if (schema.getTables().isEmpty() && schema.getViews().isEmpty()) {
- return;
+ addSchema(databaseName, schemaName);
}
metaDataVersionPersistService.switchActiveVersion(tableMetaDataPersistService.persistSchemaMetaData(databaseName, schemaName, schema.getTables()));
}
- /**
- * Delete schema meta data.
- *
- * @param databaseName database name
- * @param schemaName schema name
- * @param schema schema meta data
- */
+ @Override
+ public void persistByDropConfiguration(final String databaseName, final String schemaName, final ShardingSphereSchema schema) {
+ metaDataVersionPersistService.switchActiveVersion(tableMetaDataPersistService.persistSchemaMetaData(databaseName, schemaName, schema.getTables()));
+ }
+
@Override
public void delete(final String databaseName, final String schemaName, final ShardingSphereSchema schema) {
schema.getTables().forEach((key, value) -> tableMetaDataPersistService.delete(databaseName, schemaName, key));
}
- /**
- * Load schema meta data.
- *
- * @param databaseName database name
- * @return schema meta data
- */
@Override
public Map<String, ShardingSphereSchema> loadSchemas(final String databaseName) {
Collection<String> schemaNames = loadAllSchemaNames(databaseName);
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 f7b34c1f323..ba07398303c 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
@@ -137,7 +137,7 @@ public final class ContextManager implements AutoCloseable {
MetaDataBasedPersistService persistService = metaDataContexts.get().getPersistService();
if (force) {
metaDataContexts.set(reloadedMetaDataContexts);
- database.getSchemas().forEach((schemaName, schema) -> persistService.getDatabaseMetaDataService().persist(database.getName(), schemaName, schema));
+ database.getSchemas().forEach((schemaName, schema) -> persistService.getDatabaseMetaDataService().persistByAlterConfiguration(database.getName(), schemaName, schema));
} else {
deletedSchemaNames(database.getName(), reloadedMetaDataContexts.getMetaData().getDatabase(database.getName()), database);
metaDataContexts.set(reloadedMetaDataContexts);
diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ConfigurationContextManager.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ConfigurationContextManager.java
index 4ce36aed639..373edadd894 100644
--- a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ConfigurationContextManager.java
+++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ConfigurationContextManager.java
@@ -123,8 +123,7 @@ public final class ConfigurationContextManager {
private void buildNewMetaDataContext(final String databaseName, final SwitchingResource switchingResource, final boolean isDropConfig) throws SQLException {
metaDataContexts.get().getMetaData().getDatabases().putAll(renewDatabase(metaDataContexts.get().getMetaData().getDatabase(databaseName), switchingResource));
MetaDataContexts reloadMetaDataContexts = createMetaDataContexts(databaseName, false, switchingResource, null);
- reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getSchemas().forEach((schemaName, schema) -> reloadMetaDataContexts.getPersistService().getDatabaseMetaDataService()
- .persist(reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getName(), schemaName, schema));
+ persistSchemaMetaData(databaseName, reloadMetaDataContexts, isDropConfig);
Optional.ofNullable(reloadMetaDataContexts.getStatistics().getDatabaseData().get(databaseName))
.ifPresent(optional -> optional.getSchemaData().forEach((schemaName, schemaData) -> reloadMetaDataContexts.getPersistService().getShardingSphereDataPersistService()
.persist(databaseName, schemaName, schemaData, metaDataContexts.get().getMetaData().getDatabases())));
@@ -134,6 +133,16 @@ public final class ConfigurationContextManager {
switchingResource.closeStaleDataSources();
}
+ private void persistSchemaMetaData(final String databaseName, final MetaDataContexts reloadMetaDataContexts, final boolean isDropConfig) {
+ if (isDropConfig) {
+ reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getSchemas().forEach((schemaName, schema) -> reloadMetaDataContexts.getPersistService().getDatabaseMetaDataService()
+ .persistByDropConfiguration(reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getName(), schemaName, schema));
+ } else {
+ reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getSchemas().forEach((schemaName, schema) -> reloadMetaDataContexts.getPersistService().getDatabaseMetaDataService()
+ .persistByAlterConfiguration(reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getName(), schemaName, schema));
+ }
+ }
+
/**
* Alter rule configuration.
*
@@ -228,22 +237,13 @@ public final class ConfigurationContextManager {
Map<String, ShardingSphereSchema> toBeAlterSchemas = GenericSchemaManager.getToBeDeletedTablesBySchemas(reloadDatabase.getSchemas(), currentDatabase.getSchemas());
Map<String, ShardingSphereSchema> toBeAddedSchemas = GenericSchemaManager.getToBeAddedTablesBySchemas(reloadDatabase.getSchemas(), currentDatabase.getSchemas());
if (isDropConfig) {
- toBeAddedSchemas.forEach((key, value) -> metaDataContexts.get().getPersistService().getDatabaseMetaDataService().persist(databaseName, key, value));
+ toBeAddedSchemas.forEach((key, value) -> metaDataContexts.get().getPersistService().getDatabaseMetaDataService().persistByDropConfiguration(databaseName, key, value));
} else {
- alterSchemaMetaData(databaseName, toBeAddedSchemas);
+ toBeAddedSchemas.forEach((key, value) -> metaDataContexts.get().getPersistService().getDatabaseMetaDataService().persistByAlterConfiguration(databaseName, key, value));
}
toBeAlterSchemas.forEach((key, value) -> metaDataContexts.get().getPersistService().getDatabaseMetaDataService().delete(databaseName, key, value));
}
- private void alterSchemaMetaData(final String databaseName, final Map<String, ShardingSphereSchema> toBeAddedSchemas) {
- for (Entry<String, ShardingSphereSchema> entry : toBeAddedSchemas.entrySet()) {
- if (entry.getValue().getTables().isEmpty() && entry.getValue().getViews().isEmpty()) {
- metaDataContexts.get().getPersistService().getDatabaseMetaDataService().addSchema(databaseName, entry.getKey());
- }
- metaDataContexts.get().getPersistService().getDatabaseMetaDataService().persist(databaseName, entry.getKey(), entry.getValue());
- }
- }
-
/**
* Renew ShardingSphere databases.
*
diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
index 2ebef6ecac8..1edba228140 100644
--- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
+++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
@@ -33,13 +33,11 @@ import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
-import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
import org.apache.shardingsphere.infra.state.datasource.DataSourceState;
import org.apache.shardingsphere.infra.state.datasource.DataSourceStateManager;
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 org.apache.shardingsphere.mode.event.storage.StorageNodeDataSource;
import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter;
@@ -165,15 +163,9 @@ public final class MetaDataContextsFactory {
}
private static void persistMetaData(final MetaDataContexts metaDataContexts) {
- metaDataContexts.getMetaData().getDatabases().values().forEach(each -> persistMetaData(each.getName(), each.getSchemas(), metaDataContexts.getPersistService()));
+ metaDataContexts.getMetaData().getDatabases().values().forEach(each -> each.getSchemas()
+ .forEach((schemaName, schema) -> metaDataContexts.getPersistService().getDatabaseMetaDataService().persistByAlterConfiguration(each.getName(), schemaName, schema)));
metaDataContexts.getStatistics().getDatabaseData().forEach((databaseName, databaseData) -> databaseData.getSchemaData().forEach((schemaName, schemaData) -> metaDataContexts
.getPersistService().getShardingSphereDataPersistService().persist(databaseName, schemaName, schemaData, metaDataContexts.getMetaData().getDatabases())));
}
-
- private static void persistMetaData(final String databaseName, final Map<String, ShardingSphereSchema> schemas, final MetaDataBasedPersistService metaDataBasedPersistService) {
- for (Entry<String, ShardingSphereSchema> entry : schemas.entrySet()) {
- metaDataBasedPersistService.getDatabaseMetaDataService().addSchema(databaseName, entry.getKey());
- metaDataBasedPersistService.getDatabaseMetaDataService().persist(databaseName, entry.getKey(), entry.getValue());
- }
- }
}
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 0ca8b9af456..bc6f58179a1 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
@@ -69,7 +69,7 @@ public final class ClusterModeContextManager implements ModeContextManager, Cont
String schemaName = alterSchemaPOJO.getSchemaName();
ShardingSphereSchema schema = contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getSchema(schemaName);
DatabaseMetaDataBasedPersistService databaseMetaDataService = contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService();
- databaseMetaDataService.persist(databaseName, alterSchemaPOJO.getRenameSchemaName(), schema);
+ databaseMetaDataService.persistByAlterConfiguration(databaseName, alterSchemaPOJO.getRenameSchemaName(), schema);
databaseMetaDataService.getViewMetaDataPersistService().persist(databaseName, alterSchemaPOJO.getRenameSchemaName(), schema.getViews());
databaseMetaDataService.dropSchema(databaseName, schemaName);
}
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 fbbd964bf8f..c6cd7983628 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
@@ -86,7 +86,7 @@ public final class StandaloneModeContextManager implements ModeContextManager, C
ShardingSphereDatabase database = metaData.getDatabase(databaseName);
database.addSchema(schemaName, schema);
metaData.getGlobalRuleMetaData().getRules().forEach(each -> ((GlobalRule) each).refresh(metaData.getDatabases(), GlobalRuleChangedType.SCHEMA_CHANGED));
- contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService().persist(databaseName, schemaName, schema);
+ contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService().persistByAlterConfiguration(databaseName, schemaName, schema);
}
@Override
@@ -97,7 +97,7 @@ public final class StandaloneModeContextManager implements ModeContextManager, C
removeSchemaMetaData(database, alterSchemaPOJO.getSchemaName());
metaData.getGlobalRuleMetaData().getRules().forEach(each -> ((GlobalRule) each).refresh(metaData.getDatabases(), GlobalRuleChangedType.SCHEMA_CHANGED));
DatabaseMetaDataBasedPersistService databaseMetaDataService = contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService();
- databaseMetaDataService.persist(alterSchemaPOJO.getDatabaseName(), alterSchemaPOJO.getRenameSchemaName(), database.getSchema(alterSchemaPOJO.getRenameSchemaName()));
+ databaseMetaDataService.persistByAlterConfiguration(alterSchemaPOJO.getDatabaseName(), alterSchemaPOJO.getRenameSchemaName(), database.getSchema(alterSchemaPOJO.getRenameSchemaName()));
databaseMetaDataService.getViewMetaDataPersistService().persist(alterSchemaPOJO.getDatabaseName(), alterSchemaPOJO.getRenameSchemaName(),
database.getSchema(alterSchemaPOJO.getRenameSchemaName()).getViews());
databaseMetaDataService.dropSchema(alterSchemaPOJO.getDatabaseName(), alterSchemaPOJO.getSchemaName());
@@ -217,7 +217,7 @@ public final class StandaloneModeContextManager implements ModeContextManager, C
.forEach(each -> ((GlobalRule) each).refresh(contextManager.getMetaDataContexts().getMetaData().getDatabases(), GlobalRuleChangedType.DATABASE_CHANGED));
contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getSchemas()
.forEach((schemaName, schema) -> contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService()
- .persist(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getName(), schemaName, schema));
+ .persistByAlterConfiguration(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getName(), schemaName, schema));
DatabaseBasedPersistService<Map<String, DataSourcePoolProperties>> dataSourceService = contextManager.getMetaDataContexts().getPersistService().getDataSourceUnitService();
contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService().switchActiveVersion(dataSourceService.persistConfig(databaseName, toBeRegisteredProps));
clearServiceCache();