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

Reply via email to