This is an automated email from the ASF dual-hosted git repository. menghaoran 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 b14fdd033ab Refactor ClusterMetaDataManagerPersistService (#34911) b14fdd033ab is described below commit b14fdd033ab300f51c492ed99b8be25b135b5f87 Author: Haoran Meng <menghaora...@gmail.com> AuthorDate: Thu Mar 6 18:40:45 2025 +0800 Refactor ClusterMetaDataManagerPersistService (#34911) --- .../exception/ReloadTableMetaFailedException.java | 31 ++++++++++++++++++++++ .../ClusterMetaDataManagerPersistService.java | 30 +++++++++++++-------- 2 files changed, 50 insertions(+), 11 deletions(-) diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/exception/ReloadTableMetaFailedException.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/exception/ReloadTableMetaFailedException.java new file mode 100644 index 00000000000..2d691890342 --- /dev/null +++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/exception/ReloadTableMetaFailedException.java @@ -0,0 +1,31 @@ +/* + * 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.exception; + +import org.apache.shardingsphere.infra.exception.core.external.sql.sqlstate.XOpenSQLState; +import org.apache.shardingsphere.infra.exception.core.external.sql.type.kernel.category.ClusterSQLException; + +/** + * Reload table meta failed exception. + */ +public final class ReloadTableMetaFailedException extends ClusterSQLException { + + public ReloadTableMetaFailedException() { + super(XOpenSQLState.GENERAL_ERROR, 12, "Failed to reload table meta data."); + } +} diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java index 5882da985a2..0e97a1bb731 100644 --- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java +++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java @@ -18,6 +18,7 @@ package org.apache.shardingsphere.mode.manager.cluster.persist.service; import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; import org.apache.shardingsphere.infra.config.rule.RuleConfiguration; import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry; import org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties; @@ -30,6 +31,7 @@ import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSp import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView; import org.apache.shardingsphere.mode.manager.cluster.exception.ReloadMetaDataContextFailedException; +import org.apache.shardingsphere.mode.manager.cluster.exception.ReloadTableMetaFailedException; import org.apache.shardingsphere.mode.manager.cluster.persist.coordinator.database.ClusterDatabaseListenerCoordinatorType; import org.apache.shardingsphere.mode.manager.cluster.persist.coordinator.database.ClusterDatabaseListenerPersistCoordinator; import org.apache.shardingsphere.mode.metadata.MetaDataContexts; @@ -54,6 +56,7 @@ import java.util.stream.Collectors; /** * Cluster meta data manager persist service. */ +@Slf4j public final class ClusterMetaDataManagerPersistService implements MetaDataManagerPersistService { private final MetaDataContextManager metaDataContextManager; @@ -196,37 +199,42 @@ public final class ClusterMetaDataManagerPersistService implements MetaDataManag } @Override - public void alterRuleConfiguration(final ShardingSphereDatabase database, final RuleConfiguration toBeAlteredRuleConfig) throws SQLException { + public void alterRuleConfiguration(final ShardingSphereDatabase database, final RuleConfiguration toBeAlteredRuleConfig) { if (null == toBeAlteredRuleConfig) { return; } - Collection<String> needReadTables = getNeedReloadTables(database, toBeAlteredRuleConfig); + Collection<String> needReloadTables = getNeedReloadTables(database, toBeAlteredRuleConfig); MetaDataContexts originalMetaDataContexts = new MetaDataContexts(metaDataContextManager.getMetaDataContexts().getMetaData(), metaDataContextManager.getMetaDataContexts().getStatistics()); metaDataPersistFacade.getDatabaseRuleService().persist(database.getName(), Collections.singleton(toBeAlteredRuleConfig)); - reloadAlteredTables(database.getName(), originalMetaDataContexts, needReadTables); + reloadAlteredTables(database.getName(), originalMetaDataContexts, needReloadTables); } @Override - public void removeRuleConfigurationItem(final ShardingSphereDatabase database, final RuleConfiguration toBeRemovedRuleConfig) throws SQLException { + public void removeRuleConfigurationItem(final ShardingSphereDatabase database, final RuleConfiguration toBeRemovedRuleConfig) { if (null == toBeRemovedRuleConfig) { return; } - Collection<String> needReadTables = getNeedReloadTables(database, toBeRemovedRuleConfig); + Collection<String> needReloadTables = getNeedReloadTables(database, toBeRemovedRuleConfig); MetaDataContexts originalMetaDataContexts = new MetaDataContexts(metaDataContextManager.getMetaDataContexts().getMetaData(), metaDataContextManager.getMetaDataContexts().getStatistics()); metaDataPersistFacade.getDatabaseRuleService().delete(database.getName(), Collections.singleton(toBeRemovedRuleConfig)); - reloadAlteredTables(database.getName(), originalMetaDataContexts, needReadTables); + reloadAlteredTables(database.getName(), originalMetaDataContexts, needReloadTables); } - private void reloadAlteredTables(final String databaseName, final MetaDataContexts originalMetaDataContexts, final Collection<String> needReadTables) throws SQLException { + private void reloadAlteredTables(final String databaseName, final MetaDataContexts originalMetaDataContexts, final Collection<String> needReloadTables) { MetaDataContexts reloadMetaDataContexts = getReloadMetaDataContexts(originalMetaDataContexts); ShardingSphereDatabase database = reloadMetaDataContexts.getMetaData().getDatabase(databaseName); GenericSchemaBuilderMaterial material = new GenericSchemaBuilderMaterial(database.getResourceMetaData().getStorageUnits(), database.getRuleMetaData().getRules(), reloadMetaDataContexts.getMetaData().getProps(), new DatabaseTypeRegistry(database.getProtocolType()).getDefaultSchemaName(databaseName)); - Map<String, ShardingSphereSchema> schemas = GenericSchemaBuilder.build(needReadTables, database.getProtocolType(), material); - for (Entry<String, ShardingSphereSchema> entry : schemas.entrySet()) { - Collection<ShardingSphereTable> tables = GenericSchemaManager.getToBeAddedTables(entry.getValue(), database.getSchema(entry.getKey())); - metaDataPersistFacade.getDatabaseMetaDataFacade().getTable().persist(databaseName, entry.getKey(), tables); + try { + Map<String, ShardingSphereSchema> schemas = GenericSchemaBuilder.build(needReloadTables, database.getProtocolType(), material); + for (Entry<String, ShardingSphereSchema> entry : schemas.entrySet()) { + Collection<ShardingSphereTable> tables = GenericSchemaManager.getToBeAddedTables(entry.getValue(), database.getSchema(entry.getKey())); + metaDataPersistFacade.getDatabaseMetaDataFacade().getTable().persist(databaseName, entry.getKey(), tables); + } + } catch (final SQLException ex) { + log.error("Reload table meta failed, databaseName:{}, needReloadTables:{}", databaseName, needReloadTables, ex); + throw new ReloadTableMetaFailedException(); } }