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 82b44e45241 Move persist single table rule from refresher to persist service (#34814) 82b44e45241 is described below commit 82b44e45241ca63f3a57f3feaa35b92709afa2cb Author: Haoran Meng <menghaora...@gmail.com> AuthorDate: Fri Feb 28 11:10:54 2025 +0800 Move persist single table rule from refresher to persist service (#34814) --- .../pushdown/type/table/CreateTablePushDownMetaDataRefresher.java | 6 +----- .../mode/persist/service/MetaDataManagerPersistService.java | 3 ++- .../persist/service/ClusterMetaDataManagerPersistService.java | 4 ++++ .../persist/service/StandaloneMetaDataManagerPersistService.java | 6 +++++- .../service/StandaloneMetaDataManagerPersistServiceTest.java | 2 +- 5 files changed, 13 insertions(+), 8 deletions(-) diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/table/CreateTablePushDownMetaDataRefresher.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/table/CreateTablePushDownMetaDataRefresher.java index fd9ecf9e361..0ccf5e97feb 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/table/CreateTablePushDownMetaDataRefresher.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/table/CreateTablePushDownMetaDataRefresher.java @@ -47,15 +47,11 @@ public final class CreateTablePushDownMetaDataRefresher implements PushDownMetaD final String schemaName, final DatabaseType databaseType, final CreateTableStatement sqlStatement, final ConfigurationProperties props) throws SQLException { String tableName = TableRefreshUtils.getTableName(sqlStatement.getTable().getTableName().getIdentifier(), databaseType); RuleMetaData ruleMetaData = new RuleMetaData(new LinkedList<>(database.getRuleMetaData().getRules())); - boolean isSingleTable = TableRefreshUtils.isSingleTable(tableName, database); - if (isSingleTable) { + if (TableRefreshUtils.isSingleTable(tableName, database)) { ruleMetaData.getAttributes(MutableDataNodeRuleAttribute.class).forEach(each -> each.put(logicDataSourceNames.iterator().next(), schemaName, tableName)); } ShardingSphereTable loadedTable = loadTable(database, schemaName, tableName, ruleMetaData, props); metaDataManagerPersistService.createTable(database, schemaName, loadedTable); - if (isSingleTable && TableRefreshUtils.isNeedRefresh(ruleMetaData, schemaName, tableName)) { - metaDataManagerPersistService.alterSingleRuleConfiguration(database, ruleMetaData); - } } private ShardingSphereTable loadTable(final ShardingSphereDatabase database, final String schemaName, final String tableName, 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 ad5c4213939..f726f087f9a 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 @@ -92,8 +92,9 @@ public interface MetaDataManagerPersistService { * @param database database * @param schemaName schema name * @param table table + * @throws SQLException SQL exception */ - void createTable(ShardingSphereDatabase database, String schemaName, ShardingSphereTable table); + void createTable(ShardingSphereDatabase database, String schemaName, ShardingSphereTable table) throws SQLException; /** * Drop tables. 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 7d92f754e8d..d67288797e8 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 @@ -32,6 +32,7 @@ import org.apache.shardingsphere.mode.metadata.MetaDataContexts; import org.apache.shardingsphere.mode.metadata.manager.MetaDataContextManager; import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistFacade; import org.apache.shardingsphere.mode.metadata.persist.metadata.DatabaseMetaDataPersistFacade; +import org.apache.shardingsphere.mode.metadata.refresher.metadata.util.TableRefreshUtils; import org.apache.shardingsphere.mode.persist.service.MetaDataManagerPersistService; import org.apache.shardingsphere.mode.spi.repository.PersistRepository; import org.apache.shardingsphere.single.config.SingleRuleConfiguration; @@ -113,6 +114,9 @@ public final class ClusterMetaDataManagerPersistService implements MetaDataManag @Override public void createTable(final ShardingSphereDatabase database, final String schemaName, final ShardingSphereTable table) { metaDataPersistFacade.getDatabaseMetaDataFacade().getTable().persist(database.getName(), schemaName, Collections.singleton(table)); + if (TableRefreshUtils.isSingleTable(table.getName(), database) && TableRefreshUtils.isNeedRefresh(database.getRuleMetaData(), schemaName, table.getName())) { + alterSingleRuleConfiguration(database, database.getRuleMetaData()); + } } @Override 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 d11b91aca76..476d6e11650 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 @@ -36,6 +36,7 @@ import org.apache.shardingsphere.mode.metadata.changed.executor.type.RuleItemDro import org.apache.shardingsphere.mode.metadata.manager.MetaDataContextManager; import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistFacade; import org.apache.shardingsphere.mode.metadata.persist.metadata.DatabaseMetaDataPersistFacade; +import org.apache.shardingsphere.mode.metadata.refresher.metadata.util.TableRefreshUtils; import org.apache.shardingsphere.mode.persist.service.MetaDataManagerPersistService; import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem; import org.apache.shardingsphere.mode.spi.rule.item.drop.DropRuleItem; @@ -128,8 +129,11 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa } @Override - public void createTable(final ShardingSphereDatabase database, final String schemaName, final ShardingSphereTable table) { + public void createTable(final ShardingSphereDatabase database, final String schemaName, final ShardingSphereTable table) throws SQLException { metaDataPersistFacade.getDatabaseMetaDataFacade().getTable().persist(database.getName(), schemaName, Collections.singleton(table)); + if (TableRefreshUtils.isSingleTable(table.getName(), database) && TableRefreshUtils.isNeedRefresh(database.getRuleMetaData(), schemaName, table.getName())) { + alterSingleRuleConfiguration(database, database.getRuleMetaData()); + } metaDataContextManager.getDatabaseMetaDataManager().alterTable(database.getName(), schemaName, table); } 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 ae678672a95..e14d7b2a8ad 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 @@ -223,7 +223,7 @@ class StandaloneMetaDataManagerPersistServiceTest { } @Test - void assertCreateTable() { + void assertCreateTable() throws SQLException { ShardingSphereTable table = new ShardingSphereTable("foo_tbl", Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), TableType.TABLE); metaDataManagerPersistService.createTable(new ShardingSphereDatabase("foo_db", mock(), mock(), mock(), Collections.emptyList()), "foo_schema", table); verify(metaDataPersistFacade.getDatabaseMetaDataFacade().getTable()).persist("foo_db", "foo_schema", Collections.singleton(table));