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 7fd8a87de9a Move refresh single table rule from refresher to persist 
service after table dropped (#34818)
7fd8a87de9a is described below

commit 7fd8a87de9af9a6c796b1125a050223dd5a22d61
Author: Haoran Meng <menghaora...@gmail.com>
AuthorDate: Fri Feb 28 15:19:06 2025 +0800

    Move refresh single table rule from refresher to persist service after 
table dropped (#34818)
---
 .../type/table/DropTablePushDownMetaDataRefresher.java     | 14 +++-----------
 .../refresher/metadata/util/TableRefreshUtils.java         |  7 +++----
 .../persist/service/MetaDataManagerPersistService.java     |  5 +++--
 .../service/ClusterMetaDataManagerPersistService.java      |  7 +++++--
 .../service/ClusterMetaDataManagerPersistServiceTest.java  |  5 +++--
 .../service/StandaloneMetaDataManagerPersistService.java   | 11 ++++++++---
 .../StandaloneMetaDataManagerPersistServiceTest.java       |  5 +++--
 7 files changed, 28 insertions(+), 26 deletions(-)

diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/table/DropTablePushDownMetaDataRefresher.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/table/DropTablePushDownMetaDataRefresher.java
index f7ee2b0a21e..64e8b4ff0f2 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/table/DropTablePushDownMetaDataRefresher.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/table/DropTablePushDownMetaDataRefresher.java
@@ -21,13 +21,12 @@ import 
org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.mode.metadata.refresher.metadata.pushdown.PushDownMetaDataRefresher;
-import 
org.apache.shardingsphere.mode.metadata.refresher.metadata.util.TableRefreshUtils;
 import 
org.apache.shardingsphere.mode.persist.service.MetaDataManagerPersistService;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropTableStatement;
 
 import java.sql.SQLException;
 import java.util.Collection;
+import java.util.stream.Collectors;
 
 /**
  * Drop table push down meta data refresher.
@@ -37,15 +36,8 @@ public final class DropTablePushDownMetaDataRefresher 
implements PushDownMetaDat
     @Override
     public void refresh(final MetaDataManagerPersistService 
metaDataManagerPersistService, final ShardingSphereDatabase database, final 
Collection<String> logicDataSourceNames,
                         final String schemaName, final DatabaseType 
databaseType, final DropTableStatement sqlStatement, final 
ConfigurationProperties props) throws SQLException {
-        boolean needRefresh = 
TableRefreshUtils.isNeedRefresh(database.getRuleMetaData(), schemaName, 
sqlStatement.getTables());
-        boolean isRefreshed = false;
-        for (SimpleTableSegment each : sqlStatement.getTables()) {
-            metaDataManagerPersistService.dropTable(database, schemaName, 
each.getTableName().getIdentifier().getValue());
-            if (!isRefreshed && needRefresh && 
TableRefreshUtils.isSingleTable(each.getTableName().getIdentifier().getValue(), 
database)) {
-                
metaDataManagerPersistService.alterSingleRuleConfiguration(database, 
database.getRuleMetaData());
-                isRefreshed = true;
-            }
-        }
+        Collection<String> tableNames = 
sqlStatement.getTables().stream().map(each -> 
each.getTableName().getIdentifier().getValue()).collect(Collectors.toList());
+        metaDataManagerPersistService.dropTables(database, schemaName, 
tableNames);
     }
     
     @Override
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/util/TableRefreshUtils.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/util/TableRefreshUtils.java
index 3c701676a9b..ffe88698371 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/util/TableRefreshUtils.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/util/TableRefreshUtils.java
@@ -32,7 +32,6 @@ import 
org.apache.shardingsphere.infra.rule.attribute.datanode.MutableDataNodeRu
 import 
org.apache.shardingsphere.infra.rule.attribute.table.TableMapperRuleAttribute;
 import org.apache.shardingsphere.single.config.SingleRuleConfiguration;
 import org.apache.shardingsphere.single.constant.SingleTableConstants;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 
 import java.util.Collection;
@@ -74,11 +73,11 @@ public final class TableRefreshUtils {
      *
      * @param ruleMetaData rule meta data
      * @param schemaName schema name
-     * @param tableSegments table segments
+     * @param tableNames table names
      * @return need to refresh or not
      */
-    public static boolean isNeedRefresh(final RuleMetaData ruleMetaData, final 
String schemaName, final Collection<SimpleTableSegment> tableSegments) {
-        return tableSegments.stream().anyMatch(each -> 
isNeedRefresh(ruleMetaData, schemaName, 
each.getTableName().getIdentifier().getValue()));
+    public static boolean isNeedRefresh(final RuleMetaData ruleMetaData, final 
String schemaName, final Collection<String> tableNames) {
+        return tableNames.stream().anyMatch(each -> 
isNeedRefresh(ruleMetaData, schemaName, each));
     }
     
     /**
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/MetaDataManagerPersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/MetaDataManagerPersistService.java
index f726f087f9a..56b9cb4d8b5 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/MetaDataManagerPersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/MetaDataManagerPersistService.java
@@ -101,9 +101,10 @@ public interface MetaDataManagerPersistService {
      *
      * @param database database
      * @param schemaName schema name
-     * @param tableName table name
+     * @param tableNames table names
+     * @throws SQLException SQL exception
      */
-    void dropTable(ShardingSphereDatabase database, String schemaName, String 
tableName);
+    void dropTables(ShardingSphereDatabase database, String schemaName, 
Collection<String> tableNames) throws SQLException;
     
     /**
      * Register storage units.
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 d67288797e8..ea1e8e69623 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
@@ -120,8 +120,11 @@ public final class ClusterMetaDataManagerPersistService 
implements MetaDataManag
     }
     
     @Override
-    public void dropTable(final ShardingSphereDatabase database, final String 
schemaName, final String tableName) {
-        
metaDataPersistFacade.getDatabaseMetaDataFacade().getTable().drop(database.getName(),
 schemaName, tableName);
+    public void dropTables(final ShardingSphereDatabase database, final String 
schemaName, final Collection<String> tableNames) {
+        tableNames.forEach(each -> 
metaDataPersistFacade.getDatabaseMetaDataFacade().getTable().drop(database.getName(),
 schemaName, each));
+        if (TableRefreshUtils.isNeedRefresh(database.getRuleMetaData(), 
schemaName, tableNames) && tableNames.stream().anyMatch(each -> 
TableRefreshUtils.isSingleTable(each, database))) {
+            alterSingleRuleConfiguration(database, database.getRuleMetaData());
+        }
     }
     
     @Override
diff --git 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java
 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java
index c23b7e7d5c7..f8d7244622d 100644
--- 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java
+++ 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java
@@ -192,8 +192,9 @@ class ClusterMetaDataManagerPersistServiceTest {
     }
     
     @Test
-    void assertDropTable() {
-        metaDataManagerPersistService.dropTable(new 
ShardingSphereDatabase("foo_db", mock(), mock(), mock(), 
Collections.emptyList()), "foo_schema", "foo_tbl");
+    void assertDropTables() {
+        metaDataManagerPersistService.dropTables(new 
ShardingSphereDatabase("foo_db", mock(), mock(), mock(),
+                Collections.emptyList()), "foo_schema", 
Collections.singleton("foo_tbl"));
         
verify(metaDataPersistFacade.getDatabaseMetaDataFacade().getTable()).drop("foo_db",
 "foo_schema", "foo_tbl");
     }
 }
diff --git 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
index 5887977463b..0c7608a4d67 100644
--- 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
+++ 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
@@ -138,9 +138,14 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
     }
     
     @Override
-    public void dropTable(final ShardingSphereDatabase database, final String 
schemaName, final String tableName) {
-        
metaDataPersistFacade.getDatabaseMetaDataFacade().getTable().drop(database.getName(),
 schemaName, tableName);
-        
metaDataContextManager.getDatabaseMetaDataManager().dropTable(database.getName(),
 schemaName, tableName);
+    public void dropTables(final ShardingSphereDatabase database, final String 
schemaName, final Collection<String> tableNames) throws SQLException {
+        tableNames.forEach(each -> {
+            
metaDataPersistFacade.getDatabaseMetaDataFacade().getTable().drop(database.getName(),
 schemaName, each);
+            
metaDataContextManager.getDatabaseMetaDataManager().dropTable(database.getName(),
 schemaName, each);
+        });
+        if (TableRefreshUtils.isNeedRefresh(database.getRuleMetaData(), 
schemaName, tableNames) && tableNames.stream().anyMatch(each -> 
TableRefreshUtils.isSingleTable(each, database))) {
+            alterSingleRuleConfiguration(database, database.getRuleMetaData());
+        }
     }
     
     @Override
diff --git 
a/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
 
b/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
index e14d7b2a8ad..bd55516bbf6 100644
--- 
a/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
+++ 
b/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
@@ -230,8 +230,9 @@ class StandaloneMetaDataManagerPersistServiceTest {
     }
     
     @Test
-    void assertDropTable() {
-        metaDataManagerPersistService.dropTable(new 
ShardingSphereDatabase("foo_db", mock(), mock(), mock(), 
Collections.emptyList()), "foo_schema", "foo_tbl");
+    void assertDropTables() throws SQLException {
+        metaDataManagerPersistService.dropTables(new 
ShardingSphereDatabase("foo_db", mock(), mock(), mock(),
+                Collections.emptyList()), "foo_schema", 
Collections.singleton("foo_tbl"));
         
verify(metaDataPersistFacade.getDatabaseMetaDataFacade().getTable()).drop("foo_db",
 "foo_schema", "foo_tbl");
     }
     

Reply via email to