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 adb90bdda37 Refactor dataSource disable logic and add license. (#18267)
adb90bdda37 is described below
commit adb90bdda37fa344102ef604d79bfc4ddd8426f2
Author: zhaojinchao <[email protected]>
AuthorDate: Thu Jun 9 19:31:43 2022 +0800
Refactor dataSource disable logic and add license. (#18267)
* Refactor dataSource disable logic.
* Add license
---
.../dbdiscovery/rule/DatabaseDiscoveryRule.java | 12 +++++++-----
.../readwritesplitting/rule/ReadwriteSplittingRule.java | 10 ++++++----
.../rule/ReadwriteSplittingRuleTest.java | 17 ++++++++++++-----
.../rewrite/token/pojo/ConstraintTokenTest.java | 17 +++++++++++++++++
.../mode/metadata/storage/StorageNodeStatus.java | 12 +++++++++++-
...vent.java => StorageNodeDataSourceChangedEvent.java} | 7 ++++---
.../coordinator/ClusterContextManagerCoordinator.java | 17 ++++++++---------
...teChangedEvent.java => StorageNodeChangedEvent.java} | 7 ++++---
.../storage/watcher/StorageNodeStateChangedWatcher.java | 6 ++----
.../ClusterContextManagerCoordinatorTest.java | 15 +++++++++------
.../watcher/StorageNodeStateChangedWatcherTest.java | 16 +++++++++-------
11 files changed, 89 insertions(+), 47 deletions(-)
diff --git
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryRule.java
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryRule.java
index fc31987ca00..1e78b7ff2f1 100644
---
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryRule.java
+++
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryRule.java
@@ -37,7 +37,8 @@ import
org.apache.shardingsphere.infra.rule.identifier.type.DataSourceContainedR
import org.apache.shardingsphere.infra.rule.identifier.type.ExportableRule;
import org.apache.shardingsphere.infra.rule.identifier.type.InstanceAwareRule;
import
org.apache.shardingsphere.infra.rule.identifier.type.StatusContainedRule;
-import
org.apache.shardingsphere.mode.metadata.storage.event.DataSourceNameDisabledEvent;
+import org.apache.shardingsphere.mode.metadata.storage.StorageNodeStatus;
+import
org.apache.shardingsphere.mode.metadata.storage.event.StorageNodeDataSourceChangedEvent;
import
org.apache.shardingsphere.mode.metadata.storage.event.PrimaryDataSourceChangedEvent;
import org.apache.shardingsphere.schedule.core.api.CronJob;
import org.apache.shardingsphere.schedule.core.api.ModeScheduleContext;
@@ -151,12 +152,13 @@ public final class DatabaseDiscoveryRule implements
SchemaRule, DataSourceContai
@Override
public void updateStatus(final DataSourceStatusChangedEvent event) {
- if (event instanceof DataSourceNameDisabledEvent) {
+ if (event instanceof StorageNodeDataSourceChangedEvent) {
for (Entry<String, DatabaseDiscoveryDataSourceRule> entry :
dataSourceRules.entrySet()) {
- if (((DataSourceNameDisabledEvent) event).isDisabled()) {
-
entry.getValue().disableDataSource(((DataSourceNameDisabledEvent)
event).getQualifiedDatabase().getDataSourceName());
+ StorageNodeDataSourceChangedEvent dataSourceChangedEvent =
(StorageNodeDataSourceChangedEvent) event;
+ if
(StorageNodeStatus.isDisable(dataSourceChangedEvent.getDataSource().getStatus()))
{
+
entry.getValue().disableDataSource(dataSourceChangedEvent.getQualifiedDatabase().getDataSourceName());
} else {
-
entry.getValue().enableDataSource(((DataSourceNameDisabledEvent)
event).getQualifiedDatabase().getDataSourceName());
+
entry.getValue().enableDataSource(dataSourceChangedEvent.getQualifiedDatabase().getDataSourceName());
}
}
} else if (event instanceof PrimaryDataSourceChangedEvent) {
diff --git
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
index 0f1242aa39e..2146cdaef22 100644
---
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
+++
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
@@ -26,7 +26,8 @@ import
org.apache.shardingsphere.infra.rule.identifier.scope.SchemaRule;
import
org.apache.shardingsphere.infra.rule.identifier.type.DataSourceContainedRule;
import org.apache.shardingsphere.infra.rule.identifier.type.ExportableRule;
import
org.apache.shardingsphere.infra.rule.identifier.type.StatusContainedRule;
-import
org.apache.shardingsphere.mode.metadata.storage.event.DataSourceNameDisabledEvent;
+import org.apache.shardingsphere.mode.metadata.storage.StorageNodeStatus;
+import
org.apache.shardingsphere.mode.metadata.storage.event.StorageNodeDataSourceChangedEvent;
import
org.apache.shardingsphere.readwritesplitting.algorithm.config.AlgorithmProvidedReadwriteSplittingRuleConfiguration;
import
org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
import
org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
@@ -108,10 +109,11 @@ public final class ReadwriteSplittingRule implements
SchemaRule, DataSourceConta
@Override
public void updateStatus(final DataSourceStatusChangedEvent event) {
- if (event instanceof DataSourceNameDisabledEvent) {
+ if (event instanceof StorageNodeDataSourceChangedEvent) {
for (Entry<String, ReadwriteSplittingDataSourceRule> entry :
dataSourceRules.entrySet()) {
-
entry.getValue().updateDisabledDataSourceNames(((DataSourceNameDisabledEvent)
event).getQualifiedDatabase().getDataSourceName(),
- ((DataSourceNameDisabledEvent) event).isDisabled());
+ StorageNodeDataSourceChangedEvent dataSourceChangedEvent =
(StorageNodeDataSourceChangedEvent) event;
+
entry.getValue().updateDisabledDataSourceNames(dataSourceChangedEvent.getQualifiedDatabase().getDataSourceName(),
+
StorageNodeStatus.isDisable(dataSourceChangedEvent.getDataSource().getStatus()));
}
}
}
diff --git
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java
index 7a8608c0879..8f75eb859af 100644
---
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java
+++
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java
@@ -19,7 +19,10 @@ package org.apache.shardingsphere.readwritesplitting.rule;
import
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
import
org.apache.shardingsphere.infra.metadata.database.schema.QualifiedDatabase;
-import
org.apache.shardingsphere.mode.metadata.storage.event.DataSourceNameDisabledEvent;
+import org.apache.shardingsphere.mode.metadata.storage.StorageNodeDataSource;
+import org.apache.shardingsphere.mode.metadata.storage.StorageNodeRole;
+import org.apache.shardingsphere.mode.metadata.storage.StorageNodeStatus;
+import
org.apache.shardingsphere.mode.metadata.storage.event.StorageNodeDataSourceChangedEvent;
import
org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
import
org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
import org.junit.Test;
@@ -78,23 +81,27 @@ public final class ReadwriteSplittingRuleTest {
@Test
public void assertUpdateRuleStatusWithNotExistDataSource() {
ReadwriteSplittingRule readwriteSplittingRule =
createReadwriteSplittingRule();
- readwriteSplittingRule.updateStatus(new
DataSourceNameDisabledEvent(new
QualifiedDatabase("readwrite_splitting_db.readwrite.read_ds"), true));
+ readwriteSplittingRule.updateStatus(new
StorageNodeDataSourceChangedEvent(new
QualifiedDatabase("readwrite_splitting_db.readwrite.read_ds"),
+ new StorageNodeDataSource(StorageNodeRole.MEMBER,
StorageNodeStatus.DISABLED)));
assertThat(readwriteSplittingRule.getSingleDataSourceRule().getEnabledReplicaDataSources(),
is(Arrays.asList("read_ds_0", "read_ds_1")));
}
@Test
public void assertUpdateRuleStatus() {
ReadwriteSplittingRule readwriteSplittingRule =
createReadwriteSplittingRule();
- readwriteSplittingRule.updateStatus(new
DataSourceNameDisabledEvent(new
QualifiedDatabase("readwrite_splitting_db.readwrite.read_ds_0"), true));
+ readwriteSplittingRule.updateStatus(new
StorageNodeDataSourceChangedEvent(new
QualifiedDatabase("readwrite_splitting_db.readwrite.read_ds_0"),
+ new StorageNodeDataSource(StorageNodeRole.MEMBER,
StorageNodeStatus.DISABLED)));
assertThat(readwriteSplittingRule.getSingleDataSourceRule().getEnabledReplicaDataSources(),
is(Collections.singletonList("read_ds_1")));
}
@Test
public void assertUpdateRuleStatusWithEnable() {
ReadwriteSplittingRule readwriteSplittingRule =
createReadwriteSplittingRule();
- readwriteSplittingRule.updateStatus(new
DataSourceNameDisabledEvent(new
QualifiedDatabase("readwrite_splitting_db.readwrite.read_ds_0"), true));
+ readwriteSplittingRule.updateStatus(new
StorageNodeDataSourceChangedEvent(new
QualifiedDatabase("readwrite_splitting_db.readwrite.read_ds_0"),
+ new StorageNodeDataSource(StorageNodeRole.MEMBER,
StorageNodeStatus.DISABLED)));
assertThat(readwriteSplittingRule.getSingleDataSourceRule().getEnabledReplicaDataSources(),
is(Collections.singletonList("read_ds_1")));
- readwriteSplittingRule.updateStatus(new
DataSourceNameDisabledEvent(new
QualifiedDatabase("readwrite_splitting_db.readwrite.read_ds_0"), false));
+ readwriteSplittingRule.updateStatus(new
StorageNodeDataSourceChangedEvent(new
QualifiedDatabase("readwrite_splitting_db.readwrite.read_ds_0"),
+ new StorageNodeDataSource(StorageNodeRole.MEMBER,
StorageNodeStatus.ENABLED)));
assertThat(readwriteSplittingRule.getSingleDataSourceRule().getEnabledReplicaDataSources(),
is(Arrays.asList("read_ds_0", "read_ds_1")));
}
diff --git
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/ConstraintTokenTest.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/ConstraintTokenTest.java
index 59838955eaa..1d4d3c8cc48 100644
---
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/ConstraintTokenTest.java
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/ConstraintTokenTest.java
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
package org.apache.shardingsphere.sharding.rewrite.token.pojo;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
diff --git
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/storage/StorageNodeStatus.java
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/storage/StorageNodeStatus.java
index ade0e293154..66b7b71ec95 100644
---
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/storage/StorageNodeStatus.java
+++
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/storage/StorageNodeStatus.java
@@ -22,5 +22,15 @@ package org.apache.shardingsphere.mode.metadata.storage;
*/
public enum StorageNodeStatus {
- DISABLED, ENABLED
+ DISABLED, ENABLED;
+
+ /**
+ * Storage node disable or enable.
+ *
+ * @param status storage node status
+ * @return disable or enable
+ */
+ public static boolean isDisable(final String status) {
+ return DISABLED.name().toLowerCase().equals(status);
+ }
}
diff --git
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/storage/event/DataSourceNameDisabledEvent.java
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/storage/event/StorageNodeDataSourceChangedEvent.java
similarity index 81%
rename from
shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/storage/event/DataSourceNameDisabledEvent.java
rename to
shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/storage/event/StorageNodeDataSourceChangedEvent.java
index 1215015a4c7..7230f8c0fe4 100644
---
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/storage/event/DataSourceNameDisabledEvent.java
+++
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/storage/event/StorageNodeDataSourceChangedEvent.java
@@ -21,15 +21,16 @@ import lombok.Getter;
import lombok.RequiredArgsConstructor;
import
org.apache.shardingsphere.infra.metadata.database.schema.QualifiedDatabase;
import org.apache.shardingsphere.infra.rule.event.DataSourceStatusChangedEvent;
+import org.apache.shardingsphere.mode.metadata.storage.StorageNodeDataSource;
/**
- * Data source name disabled event.
+ * Storage node data source changed event.
*/
@RequiredArgsConstructor
@Getter
-public final class DataSourceNameDisabledEvent implements
DataSourceStatusChangedEvent {
+public final class StorageNodeDataSourceChangedEvent implements
DataSourceStatusChangedEvent {
private final QualifiedDatabase qualifiedDatabase;
- private final boolean isDisabled;
+ private final StorageNodeDataSource dataSource;
}
diff --git
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinator.java
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinator.java
index ae0bcc3f575..ad60f52ed13 100644
---
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinator.java
+++
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinator.java
@@ -30,7 +30,6 @@ import
org.apache.shardingsphere.infra.rule.identifier.type.InstanceAwareRule;
import
org.apache.shardingsphere.infra.rule.identifier.type.StatusContainedRule;
import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
import org.apache.shardingsphere.mode.manager.ContextManager;
-import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.datasource.DataSourceChangedEvent;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.props.PropertiesChangedEvent;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.rule.GlobalRuleConfigurationsChangedEvent;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.rule.RuleConfigurationsChangedEvent;
@@ -52,13 +51,13 @@ import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.statu
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.compute.event.WorkerIdEvent;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.compute.event.XaRecoveryIdAddedEvent;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.compute.event.XaRecoveryIdDeletedEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.storage.event.DisabledStateChangedEvent;
+import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.storage.event.StorageNodeChangedEvent;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.storage.event.PrimaryStateChangedEvent;
import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
import org.apache.shardingsphere.mode.metadata.persist.node.ComputeNode;
import org.apache.shardingsphere.mode.metadata.storage.StorageNodeDataSource;
import org.apache.shardingsphere.mode.metadata.storage.StorageNodeStatus;
-import
org.apache.shardingsphere.mode.metadata.storage.event.DataSourceNameDisabledEvent;
+import
org.apache.shardingsphere.mode.metadata.storage.event.StorageNodeDataSourceChangedEvent;
import
org.apache.shardingsphere.mode.metadata.storage.event.PrimaryDataSourceChangedEvent;
import org.apache.shardingsphere.transaction.rule.TransactionRule;
@@ -168,7 +167,7 @@ public final class ClusterContextManagerCoordinator {
* @param event data source changed event.
*/
@Subscribe
- public synchronized void renew(final DataSourceChangedEvent event) {
+ public synchronized void renew(final
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.datasource.DataSourceChangedEvent
event) {
if
(metaDataPersistService.getDatabaseVersionPersistService().isActiveVersion(event.getDatabaseName(),
event.getDatabaseVersion())) {
contextManager.alterDataSourceConfiguration(event.getDatabaseName(),
event.getDataSourcePropertiesMap());
buildSpecialRules();
@@ -178,14 +177,14 @@ public final class ClusterContextManagerCoordinator {
/**
* Renew disabled data source names.
*
- * @param event disabled state changed event
+ * @param event Storage node changed event
*/
@Subscribe
- public synchronized void renew(final DisabledStateChangedEvent event) {
+ public synchronized void renew(final StorageNodeChangedEvent event) {
QualifiedDatabase qualifiedDatabase = event.getQualifiedSchema();
contextManager.getMetaDataContexts().getMetaData().getDatabases().get(qualifiedDatabase.getDatabaseName()).getRuleMetaData().getRules()
.stream().filter(each -> each instanceof StatusContainedRule)
- .forEach(each -> ((StatusContainedRule) each).updateStatus(new
DataSourceNameDisabledEvent(qualifiedDatabase, event.isDisabled())));
+ .forEach(each -> ((StatusContainedRule) each).updateStatus(new
StorageNodeDataSourceChangedEvent(qualifiedDatabase, event.getDataSource())));
}
/**
@@ -355,8 +354,8 @@ public final class ClusterContextManagerCoordinator {
private void disableDataSources(final StatusContainedRule rule) {
Map<String, StorageNodeDataSource> storageNodes =
registryCenter.getStorageNodeStatusService().loadStorageNodes();
- Map<String, StorageNodeDataSource> disableDataSources =
storageNodes.entrySet().stream().filter(entry ->
StorageNodeStatus.DISABLED.name().toLowerCase().equals(entry.getValue().getStatus()))
+ Map<String, StorageNodeDataSource> disableDataSources =
storageNodes.entrySet().stream().filter(entry ->
StorageNodeStatus.isDisable(entry.getValue().getStatus()))
.collect(Collectors.toMap(Map.Entry::getKey,
Map.Entry::getValue));
- disableDataSources.forEach((key, value) -> rule.updateStatus(new
DataSourceNameDisabledEvent(new QualifiedDatabase(key), true)));
+ disableDataSources.forEach((key, value) -> rule.updateStatus(new
StorageNodeDataSourceChangedEvent(new QualifiedDatabase(key), value)));
}
}
diff --git
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/status/storage/event/DisabledStateChangedEvent.java
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/status/storage/event/StorageNodeChangedEvent.java
similarity index 84%
rename from
shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/status/storage/event/DisabledStateChangedEvent.java
rename to
shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/status/storage/event/StorageNodeChangedEvent.java
index 17949f86b8f..2ec22cc3a70 100644
---
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/status/storage/event/DisabledStateChangedEvent.java
+++
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/status/storage/event/StorageNodeChangedEvent.java
@@ -21,15 +21,16 @@ import lombok.Getter;
import lombok.RequiredArgsConstructor;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.GovernanceEvent;
import
org.apache.shardingsphere.infra.metadata.database.schema.QualifiedDatabase;
+import org.apache.shardingsphere.mode.metadata.storage.StorageNodeDataSource;
/**
- * Disabled state event.
+ * Storage node changed event.
*/
@RequiredArgsConstructor
@Getter
-public final class DisabledStateChangedEvent implements GovernanceEvent {
+public final class StorageNodeChangedEvent implements GovernanceEvent {
private final QualifiedDatabase qualifiedSchema;
- private final boolean disabled;
+ private final StorageNodeDataSource dataSource;
}
diff --git
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/status/storage/watcher/StorageNodeStateChangedWatcher.java
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/status/storage/watcher/StorageNodeStateChan
[...]
index 61df4f8b1ab..c2ea69db760 100644
---
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/status/storage/watcher/StorageNodeStateChangedWatcher.java
+++
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/status/storage/watcher/StorageNodeStateChangedWatcher.java
@@ -21,11 +21,10 @@ import com.google.common.base.Strings;
import
org.apache.shardingsphere.infra.metadata.database.schema.QualifiedDatabase;
import org.apache.shardingsphere.mode.metadata.storage.StorageNodeDataSource;
import org.apache.shardingsphere.mode.metadata.storage.StorageNodeRole;
-import org.apache.shardingsphere.mode.metadata.storage.StorageNodeStatus;
import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.GovernanceEvent;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.GovernanceWatcher;
-import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.storage.event.DisabledStateChangedEvent;
+import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.storage.event.StorageNodeChangedEvent;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.storage.event.PrimaryStateChangedEvent;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.storage.node.StorageNode;
import
org.apache.shardingsphere.mode.repository.cluster.listener.DataChangedEvent;
@@ -63,8 +62,7 @@ public final class StorageNodeStateChangedWatcher implements
GovernanceWatcher<G
if
(StorageNodeRole.PRIMARY.name().toLowerCase().equals(storageNodeDataSource.getRole()))
{
return Optional.of(new PrimaryStateChangedEvent(database));
}
- return Optional.of(new DisabledStateChangedEvent(database,
Type.DELETED == event.getType()
- ||
StorageNodeStatus.DISABLED.name().toLowerCase().equals(storageNodeDataSource.getStatus())));
+ return Optional.of(new StorageNodeChangedEvent(database,
storageNodeDataSource));
}
return Optional.empty();
}
diff --git
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinatorTest.java
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinatorTest.java
index 4d827b7a11c..57bff32c4c1 100644
---
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinatorTest.java
+++
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinatorTest.java
@@ -49,7 +49,6 @@ import org.apache.shardingsphere.infra.state.StateType;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter;
import
org.apache.shardingsphere.mode.manager.cluster.ClusterContextManagerBuilder;
-import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.datasource.DataSourceChangedEvent;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.props.PropertiesChangedEvent;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.rule.GlobalRuleConfigurationsChangedEvent;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.rule.RuleConfigurationsChangedEvent;
@@ -68,12 +67,15 @@ import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.statu
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.compute.event.StateEvent;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.compute.event.WorkerIdEvent;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.compute.event.XaRecoveryIdAddedEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.storage.event.DisabledStateChangedEvent;
+import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.storage.event.StorageNodeChangedEvent;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.storage.event.PrimaryStateChangedEvent;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.util.ReflectionUtil;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
-import
org.apache.shardingsphere.mode.metadata.storage.event.DataSourceNameDisabledEvent;
+import org.apache.shardingsphere.mode.metadata.storage.StorageNodeDataSource;
+import org.apache.shardingsphere.mode.metadata.storage.StorageNodeRole;
+import org.apache.shardingsphere.mode.metadata.storage.StorageNodeStatus;
+import
org.apache.shardingsphere.mode.metadata.storage.event.StorageNodeDataSourceChangedEvent;
import
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
import
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepositoryConfiguration;
import org.apache.shardingsphere.parser.rule.SQLParserRule;
@@ -221,16 +223,17 @@ public final class ClusterContextManagerCoordinatorTest {
public void assertDisableStateChanged() {
StatusContainedRule statusContainedRule =
mock(StatusContainedRule.class);
when(database.getRuleMetaData().getRules()).thenReturn(Collections.singletonList(statusContainedRule));
- DisabledStateChangedEvent event = new DisabledStateChangedEvent(new
QualifiedDatabase("db.readwrite_ds.ds_0"), true);
+ StorageNodeChangedEvent event = new StorageNodeChangedEvent(new
QualifiedDatabase("db.readwrite_ds.ds_0"), new
StorageNodeDataSource(StorageNodeRole.MEMBER, StorageNodeStatus.DISABLED));
coordinator.renew(event);
verify(statusContainedRule, times(1)).updateStatus(argThat(
- (ArgumentMatcher<DataSourceNameDisabledEvent>) argumentEvent
-> Objects.equals(event.getQualifiedSchema(),
argumentEvent.getQualifiedDatabase()) && argumentEvent.isDisabled()));
+ (ArgumentMatcher<StorageNodeDataSourceChangedEvent>)
argumentEvent -> Objects.equals(event.getQualifiedSchema(),
argumentEvent.getQualifiedDatabase())
+ && Objects.equals(event.getDataSource(),
argumentEvent.getDataSource())));
}
@Test
public void assertDataSourceChanged() {
when(metaDataPersistService.getDatabaseVersionPersistService().isActiveVersion("db",
"0")).thenReturn(true);
- coordinator.renew(new DataSourceChangedEvent("db", "0",
getChangedDataSourcePropertiesMap()));
+ coordinator.renew(new
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.datasource.DataSourceChangedEvent("db",
"0", getChangedDataSourcePropertiesMap()));
assertTrue(contextManager.getMetaDataContexts().getMetaData().getDatabases().get("db").getResource().getDataSources().containsKey("ds_2"));
}
diff --git
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/status/storage/watcher/StorageNodeStateChangedWatcherTest.java
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/status/storage/watcher/StorageNodeState
[...]
index a1f056d7a74..c1793bd0dd6 100644
---
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/status/storage/watcher/StorageNodeStateChangedWatcherTest.java
+++
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/status/storage/watcher/StorageNodeStateChangedWatcherTest.java
@@ -18,7 +18,7 @@
package
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.storage.watcher;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.GovernanceEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.storage.event.DisabledStateChangedEvent;
+import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.storage.event.StorageNodeChangedEvent;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.storage.event.PrimaryStateChangedEvent;
import
org.apache.shardingsphere.mode.repository.cluster.listener.DataChangedEvent;
import
org.apache.shardingsphere.mode.repository.cluster.listener.DataChangedEvent.Type;
@@ -45,27 +45,29 @@ public final class StorageNodeStateChangedWatcherTest {
}
@Test
- public void assertCreateEnabledStateChangedEvent() {
+ public void assertCreateEnabledStorageNodeChangedEvent() {
Optional<GovernanceEvent> actual = new
StorageNodeStateChangedWatcher().createGovernanceEvent(
new
DataChangedEvent("/nodes/storage_nodes/replica_query_db.readwrite_ds.replica_ds_0",
"role: member\nstatus: enable\n", Type.ADDED));
assertTrue(actual.isPresent());
- DisabledStateChangedEvent actualEvent = (DisabledStateChangedEvent)
actual.get();
+ StorageNodeChangedEvent actualEvent = (StorageNodeChangedEvent)
actual.get();
assertThat(actualEvent.getQualifiedSchema().getDatabaseName(),
is("replica_query_db"));
assertThat(actualEvent.getQualifiedSchema().getGroupName(),
is("readwrite_ds"));
assertThat(actualEvent.getQualifiedSchema().getDataSourceName(),
is("replica_ds_0"));
- assertFalse(actualEvent.isDisabled());
+ assertThat(actualEvent.getDataSource().getRole(), is("member"));
+ assertThat(actualEvent.getDataSource().getStatus(), is("enable"));
}
@Test
- public void assertCreateDisabledStateChangedEvent() {
+ public void assertCreateDisabledStorageNodeChangedEvent() {
Optional<GovernanceEvent> actual = new
StorageNodeStateChangedWatcher().createGovernanceEvent(
new
DataChangedEvent("/nodes/storage_nodes/replica_query_db.readwrite_ds.replica_ds_0",
"role: member\nstatus: disable\n", Type.DELETED));
assertTrue(actual.isPresent());
- DisabledStateChangedEvent actualEvent = (DisabledStateChangedEvent)
actual.get();
+ StorageNodeChangedEvent actualEvent = (StorageNodeChangedEvent)
actual.get();
assertThat(actualEvent.getQualifiedSchema().getDatabaseName(),
is("replica_query_db"));
assertThat(actualEvent.getQualifiedSchema().getGroupName(),
is("readwrite_ds"));
assertThat(actualEvent.getQualifiedSchema().getDataSourceName(),
is("replica_ds_0"));
- assertTrue(actualEvent.isDisabled());
+ assertThat(actualEvent.getDataSource().getRole(), is("member"));
+ assertThat(actualEvent.getDataSource().getStatus(), is("disable"));
}
@Test