You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by su...@apache.org on 2024/04/23 21:19:14 UTC
(shardingsphere) branch master updated: Refactor StaticDataSourceRuleAttribute (#30996)
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 <zh...@apache.org>
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