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();
         }
     }
     

Reply via email to