This is an automated email from the ASF dual-hosted git repository.

sunnianjun 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 181dfe089cc Refactor StaticDataSourceRuleAttribute (#30996)
181dfe089cc is described below

commit 181dfe089cc149520e14f126cc07e76fb1de16bc
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Apr 24 05:19:07 2024 +0800

    Refactor StaticDataSourceRuleAttribute (#30996)
    
    * Refactor StorageNode
    
    * Refactor StaticDataSourceRuleAttribute
---
 ...adwriteSplittingStaticDataSourceRuleAttribute.java | 12 ++++--------
 .../rule/ReadwriteSplittingRuleTest.java              | 19 ++++++++-----------
 .../datasource/StaticDataSourceRuleAttribute.java     |  8 +++++---
 .../shardingsphere/mode/storage/node/StorageNode.java |  6 +++---
 .../subscriber/StateChangedSubscriber.java            |  3 +--
 .../subscriber/StateChangedSubscriberTest.java        |  8 +++-----
 6 files changed, 24 insertions(+), 32 deletions(-)

diff --git 
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/attribute/ReadwriteSplittingStaticDataSourceRuleAttribute.java
 
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/attribute/ReadwriteSplittingStaticDataSourceRuleAttribute.java
index fc973540b40..180b146b6d0 100644
--- 
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/attribute/ReadwriteSplittingStaticDataSourceRuleAttribute.java
+++ 
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/attribute/ReadwriteSplittingStaticDataSourceRuleAttribute.java
@@ -22,9 +22,7 @@ import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePrecondition
 import org.apache.shardingsphere.infra.instance.InstanceContext;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.QualifiedDataSource;
 import 
org.apache.shardingsphere.infra.rule.attribute.datasource.StaticDataSourceRuleAttribute;
-import org.apache.shardingsphere.infra.rule.event.DataSourceStatusChangedEvent;
 import org.apache.shardingsphere.infra.state.datasource.DataSourceState;
-import 
org.apache.shardingsphere.mode.event.storage.StorageNodeDataSourceChangedEvent;
 import 
org.apache.shardingsphere.mode.event.storage.StorageNodeDataSourceDeletedEvent;
 import 
org.apache.shardingsphere.readwritesplitting.exception.logic.ReadwriteSplittingDataSourceRuleNotFoundException;
 import 
org.apache.shardingsphere.readwritesplitting.rule.ReadwriteSplittingDataSourceRule;
@@ -56,16 +54,14 @@ public final class 
ReadwriteSplittingStaticDataSourceRuleAttribute implements St
     }
     
     @Override
-    public void updateStatus(final DataSourceStatusChangedEvent event) {
-        StorageNodeDataSourceChangedEvent dataSourceEvent = 
(StorageNodeDataSourceChangedEvent) event;
-        QualifiedDataSource qualifiedDataSource = 
dataSourceEvent.getQualifiedDataSource();
+    public void updateStatus(final QualifiedDataSource qualifiedDataSource, 
final DataSourceState status) {
         ReadwriteSplittingDataSourceRule dataSourceRule = 
dataSourceRules.get(qualifiedDataSource.getGroupName());
         ShardingSpherePreconditions.checkNotNull(dataSourceRule,
                 () -> new 
ReadwriteSplittingDataSourceRuleNotFoundException(qualifiedDataSource.getGroupName(),
 qualifiedDataSource.getDatabaseName()));
-        if (DataSourceState.DISABLED == 
dataSourceEvent.getDataSource().getStatus()) {
-            
dataSourceRule.disableDataSource(dataSourceEvent.getQualifiedDataSource().getDataSourceName());
+        if (DataSourceState.DISABLED == status) {
+            
dataSourceRule.disableDataSource(qualifiedDataSource.getDataSourceName());
         } else {
-            
dataSourceRule.enableDataSource(dataSourceEvent.getQualifiedDataSource().getDataSourceName());
+            
dataSourceRule.enableDataSource(qualifiedDataSource.getDataSourceName());
         }
     }
     
diff --git 
a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java
 
b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java
index 860097fc3a6..eab76eb6afc 100644
--- 
a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java
+++ 
b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java
@@ -22,9 +22,6 @@ import 
org.apache.shardingsphere.infra.instance.InstanceContext;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.QualifiedDataSource;
 import 
org.apache.shardingsphere.infra.rule.attribute.datasource.StaticDataSourceRuleAttribute;
 import org.apache.shardingsphere.infra.state.datasource.DataSourceState;
-import org.apache.shardingsphere.mode.event.storage.StorageNodeDataSource;
-import 
org.apache.shardingsphere.mode.event.storage.StorageNodeDataSourceChangedEvent;
-import org.apache.shardingsphere.mode.event.storage.StorageNodeRole;
 import 
org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
 import 
org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
 import org.junit.jupiter.api.Test;
@@ -70,27 +67,27 @@ class ReadwriteSplittingRuleTest {
     @Test
     void assertUpdateRuleStatusWithNotExistDataSource() {
         ReadwriteSplittingRule readwriteSplittingRule = 
createReadwriteSplittingRule();
-        
readwriteSplittingRule.getAttributes().getAttribute(StaticDataSourceRuleAttribute.class).updateStatus(new
 StorageNodeDataSourceChangedEvent(
-                new 
QualifiedDataSource("readwrite_splitting_db.readwrite.read_ds"), new 
StorageNodeDataSource(StorageNodeRole.MEMBER, DataSourceState.DISABLED)));
+        
readwriteSplittingRule.getAttributes().getAttribute(StaticDataSourceRuleAttribute.class).updateStatus(
+                new 
QualifiedDataSource("readwrite_splitting_db.readwrite.read_ds"), 
DataSourceState.DISABLED);
         
assertThat(readwriteSplittingRule.getSingleDataSourceRule().getDisabledDataSourceNames(),
 is(Collections.singleton("read_ds")));
     }
     
     @Test
     void assertUpdateRuleStatus() {
         ReadwriteSplittingRule readwriteSplittingRule = 
createReadwriteSplittingRule();
-        
readwriteSplittingRule.getAttributes().getAttribute(StaticDataSourceRuleAttribute.class).updateStatus(new
 StorageNodeDataSourceChangedEvent(
-                new 
QualifiedDataSource("readwrite_splitting_db.readwrite.read_ds_0"), new 
StorageNodeDataSource(StorageNodeRole.MEMBER, DataSourceState.DISABLED)));
+        
readwriteSplittingRule.getAttributes().getAttribute(StaticDataSourceRuleAttribute.class).updateStatus(
+                new 
QualifiedDataSource("readwrite_splitting_db.readwrite.read_ds_0"), 
DataSourceState.DISABLED);
         
assertThat(readwriteSplittingRule.getSingleDataSourceRule().getDisabledDataSourceNames(),
 is(Collections.singleton("read_ds_0")));
     }
     
     @Test
     void assertUpdateRuleStatusWithEnable() {
         ReadwriteSplittingRule readwriteSplittingRule = 
createReadwriteSplittingRule();
-        
readwriteSplittingRule.getAttributes().getAttribute(StaticDataSourceRuleAttribute.class).updateStatus(new
 StorageNodeDataSourceChangedEvent(
-                new 
QualifiedDataSource("readwrite_splitting_db.readwrite.read_ds_0"), new 
StorageNodeDataSource(StorageNodeRole.MEMBER, DataSourceState.DISABLED)));
+        
readwriteSplittingRule.getAttributes().getAttribute(StaticDataSourceRuleAttribute.class).updateStatus(
+                new 
QualifiedDataSource("readwrite_splitting_db.readwrite.read_ds_0"), 
DataSourceState.DISABLED);
         
assertThat(readwriteSplittingRule.getSingleDataSourceRule().getDisabledDataSourceNames(),
 is(Collections.singleton("read_ds_0")));
-        
readwriteSplittingRule.getAttributes().getAttribute(StaticDataSourceRuleAttribute.class).updateStatus(new
 StorageNodeDataSourceChangedEvent(
-                new 
QualifiedDataSource("readwrite_splitting_db.readwrite.read_ds_0"), new 
StorageNodeDataSource(StorageNodeRole.MEMBER, DataSourceState.ENABLED)));
+        
readwriteSplittingRule.getAttributes().getAttribute(StaticDataSourceRuleAttribute.class).updateStatus(
+                new 
QualifiedDataSource("readwrite_splitting_db.readwrite.read_ds_0"), 
DataSourceState.ENABLED);
         
assertThat(readwriteSplittingRule.getSingleDataSourceRule().getDisabledDataSourceNames(),
 is(Collections.emptySet()));
     }
     
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/attribute/datasource/StaticDataSourceRuleAttribute.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/attribute/datasource/StaticDataSourceRuleAttribute.java
index 7a7d92b1427..5acac069796 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/attribute/datasource/StaticDataSourceRuleAttribute.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/attribute/datasource/StaticDataSourceRuleAttribute.java
@@ -17,8 +17,9 @@
 
 package org.apache.shardingsphere.infra.rule.attribute.datasource;
 
-import org.apache.shardingsphere.infra.rule.event.DataSourceStatusChangedEvent;
+import 
org.apache.shardingsphere.infra.metadata.database.schema.QualifiedDataSource;
 import org.apache.shardingsphere.infra.rule.attribute.RuleAttribute;
+import org.apache.shardingsphere.infra.state.datasource.DataSourceState;
 
 import java.util.Collection;
 import java.util.Map;
@@ -38,9 +39,10 @@ public interface StaticDataSourceRuleAttribute extends 
RuleAttribute {
     /**
      * Update data source status.
      *
-     * @param event data source status changed event
+     * @param qualifiedDataSource qualified data source
+     * @param status data source state
      */
-    void updateStatus(DataSourceStatusChangedEvent event);
+    void updateStatus(QualifiedDataSource qualifiedDataSource, DataSourceState 
status);
     
     /**
      * Clean single storage node data source.
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/storage/node/StorageNode.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/storage/node/StorageNode.java
index de51b0fad23..7ee6d8a1cc3 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/storage/node/StorageNode.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/storage/node/StorageNode.java
@@ -57,11 +57,11 @@ public final class StorageNode {
     /**
      * Get storage node data source path.
      *
-     * @param database cluster database
+     * @param qualifiedDataSource qualified data source
      * @return status path of storage node
      */
-    public static String getStorageNodeDataSourcePath(final 
QualifiedDataSource database) {
-        return String.join("/", getRootPath(), database.toString());
+    public static String getStorageNodeDataSourcePath(final 
QualifiedDataSource qualifiedDataSource) {
+        return String.join("/", getRootPath(), qualifiedDataSource.toString());
     }
     
     /**
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/StateChangedSubscriber.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/StateChangedSubscriber.java
index 06ade7f913d..5a4f6bc815f 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/StateChangedSubscriber.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/StateChangedSubscriber.java
@@ -23,7 +23,6 @@ import 
org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.rule.attribute.datasource.StaticDataSourceRuleAttribute;
 import org.apache.shardingsphere.infra.state.datasource.DataSourceState;
 import org.apache.shardingsphere.infra.state.datasource.DataSourceStateManager;
-import 
org.apache.shardingsphere.mode.event.storage.StorageNodeDataSourceChangedEvent;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.RegistryCenter;
 import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.cluster.event.ClusterLockDeletedEvent;
@@ -64,7 +63,7 @@ public final class StateChangedSubscriber {
             return;
         }
         for (StaticDataSourceRuleAttribute each : 
metaData.getDatabase(event.getQualifiedDataSource().getDatabaseName()).getRuleMetaData().getAttributes(StaticDataSourceRuleAttribute.class))
 {
-            each.updateStatus(new 
StorageNodeDataSourceChangedEvent(event.getQualifiedDataSource(), 
event.getDataSource()));
+            each.updateStatus(event.getQualifiedDataSource(), 
event.getDataSource().getStatus());
         }
         DataSourceStateManager.getInstance().updateState(
                 event.getQualifiedDataSource().getDatabaseName(), 
event.getQualifiedDataSource().getDataSourceName(), 
DataSourceState.valueOf(event.getDataSource().getStatus().name()));
diff --git 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/StateChangedSubscriberTest.java
 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/StateChangedSubscriberTest.java
index 3facaf53c53..1968d5fe529 100644
--- 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/StateChangedSubscriberTest.java
+++ 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/StateChangedSubscriberTest.java
@@ -34,7 +34,6 @@ import 
org.apache.shardingsphere.infra.state.datasource.DataSourceState;
 import org.apache.shardingsphere.infra.state.instance.InstanceState;
 import org.apache.shardingsphere.infra.util.eventbus.EventBusContext;
 import org.apache.shardingsphere.mode.event.storage.StorageNodeDataSource;
-import 
org.apache.shardingsphere.mode.event.storage.StorageNodeDataSourceChangedEvent;
 import org.apache.shardingsphere.mode.event.storage.StorageNodeRole;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter;
@@ -55,7 +54,6 @@ import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Answers;
-import org.mockito.ArgumentMatcher;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 import org.mockito.junit.jupiter.MockitoSettings;
@@ -118,9 +116,9 @@ class StateChangedSubscriberTest {
         
when(database.getRuleMetaData().getAttributes(StaticDataSourceRuleAttribute.class)).thenReturn(Collections.singleton(ruleAttribute));
         StorageNodeChangedEvent event = new StorageNodeChangedEvent(new 
QualifiedDataSource("db.readwrite_ds.ds_0"), new 
StorageNodeDataSource(StorageNodeRole.MEMBER, DataSourceState.DISABLED));
         subscriber.renew(event);
-        verify(ruleAttribute).updateStatus(argThat(
-                (ArgumentMatcher<StorageNodeDataSourceChangedEvent>) 
argumentEvent -> Objects.equals(event.getQualifiedDataSource(), 
argumentEvent.getQualifiedDataSource())
-                        && Objects.equals(event.getDataSource(), 
argumentEvent.getDataSource())));
+        verify(ruleAttribute).updateStatus(
+                argThat(qualifiedDataSource -> 
Objects.equals(event.getQualifiedDataSource(), qualifiedDataSource)),
+                argThat(dataSourceState -> 
Objects.equals(event.getDataSource().getStatus(), dataSourceState)));
     }
     
     @Test

Reply via email to