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