This is an automated email from the ASF dual-hosted git repository. zhangliang 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 2a04603afa8 Refactor MetaDataManagerPersistService.alterSingleRuleConfiguration() (#34476) 2a04603afa8 is described below commit 2a04603afa84c5d8eb71c61bbaae87610723b0fc Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Sat Jan 25 00:40:12 2025 +0800 Refactor MetaDataManagerPersistService.alterSingleRuleConfiguration() (#34476) --- .../type/table/CreateTablePushDownMetaDataRefresher.java | 2 +- .../type/table/DropTablePushDownMetaDataRefresher.java | 2 +- .../persist/service/MetaDataManagerPersistService.java | 5 +++-- .../service/ClusterMetaDataManagerPersistService.java | 8 +++++--- .../ClusterMetaDataManagerPersistServiceTest.java | 16 +++++++--------- mode/type/standalone/core/pom.xml | 5 +++++ .../service/StandaloneMetaDataManagerPersistService.java | 10 ++++++---- .../StandaloneMetaDataManagerPersistServiceTest.java | 9 ++++++--- 8 files changed, 34 insertions(+), 23 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 137dec87b3f..f88518cbe43 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 @@ -59,7 +59,7 @@ public final class CreateTablePushDownMetaDataRefresher implements PushDownMetaD Preconditions.checkState(actualTableMetaData.isPresent(), "Load actual table metadata '%s' failed.", tableName); metaDataManagerPersistService.createTable(database.getName(), schemaName, actualTableMetaData.get(), logicDataSourceNames.isEmpty() ? null : logicDataSourceNames.iterator().next()); if (isSingleTable && TableRefreshUtils.isRuleRefreshRequired(ruleMetaData, schemaName, tableName)) { - metaDataManagerPersistService.alterSingleRuleConfiguration(database.getName(), ruleMetaData.getConfigurations()); + metaDataManagerPersistService.alterSingleRuleConfiguration(database.getName(), ruleMetaData); } } 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 72d4aa1e634..87f419a8c35 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 @@ -43,7 +43,7 @@ public final class DropTablePushDownMetaDataRefresher implements PushDownMetaDat metaDataManagerPersistService.dropTables(database.getName(), schemaName, tableNames); for (SimpleTableSegment each : sqlStatement.getTables()) { if (isRuleRefreshRequired && TableRefreshUtils.isSingleTable(each.getTableName().getIdentifier().getValue(), database)) { - metaDataManagerPersistService.alterSingleRuleConfiguration(database.getName(), database.getRuleMetaData().getConfigurations()); + metaDataManagerPersistService.alterSingleRuleConfiguration(database.getName(), database.getRuleMetaData()); break; } } 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 6eef3720a3f..344a34c9760 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 @@ -19,6 +19,7 @@ package org.apache.shardingsphere.mode.persist.service; import org.apache.shardingsphere.infra.config.rule.RuleConfiguration; import org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties; +import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView; @@ -135,10 +136,10 @@ public interface MetaDataManagerPersistService { * Alter single rule configuration. * * @param databaseName database name - * @param ruleConfigs rule configs + * @param ruleMetaData rule meta data * @throws SQLException SQL exception */ - void alterSingleRuleConfiguration(String databaseName, Collection<RuleConfiguration> ruleConfigs) throws SQLException; + void alterSingleRuleConfiguration(String databaseName, RuleMetaData ruleMetaData) throws SQLException; /** * Alter rule configuration. 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 875ac023887..29d7e89428a 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 @@ -23,6 +23,7 @@ import org.apache.shardingsphere.infra.datasource.pool.destroyer.DataSourcePoolD import org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties; import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData; import org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNode; +import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView; @@ -40,6 +41,7 @@ import org.apache.shardingsphere.mode.spi.repository.PersistRepository; import org.apache.shardingsphere.mode.state.database.ListenerAssistedPersistService; import org.apache.shardingsphere.mode.state.database.ListenerAssistedType; import org.apache.shardingsphere.single.config.SingleRuleConfiguration; +import org.apache.shardingsphere.single.rule.SingleRule; import javax.sql.DataSource; import java.sql.SQLException; @@ -208,10 +210,10 @@ public final class ClusterMetaDataManagerPersistService implements MetaDataManag } @Override - public void alterSingleRuleConfiguration(final String databaseName, final Collection<RuleConfiguration> ruleConfigs) { - ruleConfigs.removeIf(each -> !each.getClass().isAssignableFrom(SingleRuleConfiguration.class)); + public void alterSingleRuleConfiguration(final String databaseName, final RuleMetaData ruleMetaData) { + SingleRuleConfiguration singleRuleConfig = ruleMetaData.getSingleRule(SingleRule.class).getConfiguration(); metaDataPersistService.getMetaDataVersionPersistService() - .switchActiveVersion(metaDataPersistService.getDatabaseRulePersistService().persist(databaseName, ruleConfigs)); + .switchActiveVersion(metaDataPersistService.getDatabaseRulePersistService().persist(databaseName, Collections.singleton(singleRuleConfig))); } @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 9fdc23b5f23..958d1bb9f29 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 @@ -19,6 +19,7 @@ package org.apache.shardingsphere.mode.manager.cluster.persist.service; import lombok.SneakyThrows; import org.apache.shardingsphere.infra.config.rule.RuleConfiguration; +import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable; import org.apache.shardingsphere.mode.metadata.MetaDataContextManager; @@ -27,6 +28,7 @@ import org.apache.shardingsphere.mode.spi.repository.PersistRepository; import org.apache.shardingsphere.mode.state.database.ListenerAssistedPersistService; import org.apache.shardingsphere.mode.state.database.ListenerAssistedType; import org.apache.shardingsphere.single.config.SingleRuleConfiguration; +import org.apache.shardingsphere.single.rule.SingleRule; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -35,14 +37,9 @@ import org.mockito.Mock; import org.mockito.internal.configuration.plugins.Plugins; import org.mockito.junit.jupiter.MockitoExtension; -import java.util.Arrays; -import java.util.Collection; import java.util.Collections; -import java.util.LinkedList; import java.util.Properties; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyCollection; import static org.mockito.ArgumentMatchers.eq; @@ -132,10 +129,11 @@ class ClusterMetaDataManagerPersistServiceTest { @Test void assertAlterSingleRuleConfiguration() { - Collection<RuleConfiguration> ruleConfigs = new LinkedList<>(Arrays.asList(new SingleRuleConfiguration(), mock(RuleConfiguration.class))); - when(metaDataPersistService.getDatabaseRulePersistService().persist("foo_db", ruleConfigs)).thenReturn(Collections.emptyList()); - metaDataManagerPersistService.alterSingleRuleConfiguration("foo_db", ruleConfigs); - assertThat(ruleConfigs.size(), is(1)); + SingleRule singleRule = mock(SingleRule.class); + SingleRuleConfiguration singleRuleConfig = new SingleRuleConfiguration(); + when(singleRule.getConfiguration()).thenReturn(singleRuleConfig); + when(metaDataPersistService.getDatabaseRulePersistService().persist("foo_db", Collections.singleton(singleRuleConfig))).thenReturn(Collections.emptyList()); + metaDataManagerPersistService.alterSingleRuleConfiguration("foo_db", new RuleMetaData(Collections.singleton(singleRule))); verify(metaDataPersistService.getMetaDataVersionPersistService()).switchActiveVersion(Collections.emptyList()); } diff --git a/mode/type/standalone/core/pom.xml b/mode/type/standalone/core/pom.xml index 25abf72cac1..c3febec5da3 100644 --- a/mode/type/standalone/core/pom.xml +++ b/mode/type/standalone/core/pom.xml @@ -37,6 +37,11 @@ <artifactId>shardingsphere-standalone-mode-repository-api</artifactId> <version>${project.version}</version> </dependency> + <dependency> + <groupId>org.apache.shardingsphere</groupId> + <artifactId>shardingsphere-single-core</artifactId> + <version>${project.version}</version> + </dependency> <dependency> <groupId>org.apache.shardingsphere</groupId> 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 060d469b91a..72f187f58cb 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 @@ -22,6 +22,7 @@ import org.apache.shardingsphere.infra.config.rule.RuleConfiguration; import org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties; import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData; import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase; +import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView; @@ -44,6 +45,7 @@ import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItem; import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem; import org.apache.shardingsphere.mode.spi.rule.item.drop.DropRuleItem; import org.apache.shardingsphere.single.config.SingleRuleConfiguration; +import org.apache.shardingsphere.single.rule.SingleRule; import java.sql.SQLException; import java.util.Collection; @@ -291,12 +293,12 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa } @Override - public void alterSingleRuleConfiguration(final String databaseName, final Collection<RuleConfiguration> ruleConfigs) throws SQLException { - ruleConfigs.removeIf(each -> !each.getClass().isAssignableFrom(SingleRuleConfiguration.class)); + public void alterSingleRuleConfiguration(final String databaseName, final RuleMetaData ruleMetaData) throws SQLException { + SingleRuleConfiguration singleRuleConfig = ruleMetaData.getSingleRule(SingleRule.class).getConfiguration(); Collection<MetaDataVersion> metaDataVersions = metaDataPersistService.getDatabaseRulePersistService() - .persist(metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getName(), ruleConfigs); + .persist(metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getName(), Collections.singleton(singleRuleConfig)); metaDataPersistService.getMetaDataVersionPersistService().switchActiveVersion(metaDataVersions); - metaDataContextManager.getDatabaseRuleConfigurationManager().alterRuleConfiguration(databaseName, ruleConfigs.iterator().next()); + metaDataContextManager.getDatabaseRuleConfigurationManager().alterRuleConfiguration(databaseName, singleRuleConfig); clearServiceCache(); } 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 666fdc15705..492a5627ffd 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 @@ -23,6 +23,7 @@ import org.apache.shardingsphere.infra.config.rule.RuleConfiguration; import org.apache.shardingsphere.infra.database.core.metadata.database.enums.TableType; import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData; import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase; +import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable; import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion; @@ -33,6 +34,7 @@ import org.apache.shardingsphere.mode.metadata.persist.metadata.DatabaseMetaData import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem; import org.apache.shardingsphere.mode.spi.rule.item.drop.DropRuleItem; import org.apache.shardingsphere.single.config.SingleRuleConfiguration; +import org.apache.shardingsphere.single.rule.SingleRule; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -42,7 +44,6 @@ import org.mockito.internal.configuration.plugins.Plugins; import org.mockito.junit.jupiter.MockitoExtension; import java.sql.SQLException; -import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.LinkedList; @@ -149,8 +150,10 @@ class StandaloneMetaDataManagerPersistServiceTest { @Test void assertAlterSingleRuleConfiguration() throws SQLException { - RuleConfiguration singleRuleConfig = new SingleRuleConfiguration(); - metaDataManagerPersistService.alterSingleRuleConfiguration("foo_db", new LinkedList<>(Arrays.asList(singleRuleConfig, mock(RuleConfiguration.class)))); + SingleRuleConfiguration singleRuleConfig = new SingleRuleConfiguration(); + SingleRule singleRule = mock(SingleRule.class); + when(singleRule.getConfiguration()).thenReturn(singleRuleConfig); + metaDataManagerPersistService.alterSingleRuleConfiguration("foo_db", new RuleMetaData(Collections.singleton(singleRule))); verify(metaDataPersistService.getMetaDataVersionPersistService()).switchActiveVersion(any()); verify(metaDataContextManager.getDatabaseRuleConfigurationManager()).alterRuleConfiguration("foo_db", singleRuleConfig); }