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 <[email protected]>
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();