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 <[email protected]>
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);
}