You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by ji...@apache.org on 2023/01/01 13:50:42 UTC
[shardingsphere] branch master updated: Close heartbeat job when drop discovery rule (#23239)
This is an automated email from the ASF dual-hosted git repository.
jianglongtao 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 f994f77f7ea Close heartbeat job when drop discovery rule (#23239)
f994f77f7ea is described below
commit f994f77f7ea1a661d8562b87b9db873dc5fd4be0
Author: zhaojinchao <zh...@apache.org>
AuthorDate: Sun Jan 1 21:50:35 2023 +0800
Close heartbeat job when drop discovery rule (#23239)
* Close heartbeat job when drop discovery rule
* Add sleep
* Adjustment it
* Fix IT
---
.../dbdiscovery/rule/DatabaseDiscoveryRule.java | 9 ++++++++-
.../update/DropDatabaseDiscoveryRuleStatementUpdater.java | 6 ++++++
.../shardingsphere/infra/metadata/ShardingSphereMetaData.java | 2 +-
.../rule/identifier/type/DynamicDataSourceContainedRule.java | 11 +++++++++--
.../distsql/rdl/rule/RuleDefinitionBackendHandler.java | 1 -
.../shardingsphere/test/e2e/engine/rdl/BaseRDLE2EIT.java | 3 ++-
6 files changed, 26 insertions(+), 6 deletions(-)
diff --git a/features/db-discovery/core/src/main/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryRule.java b/features/db-discovery/core/src/main/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryRule.java
index 918ac66c561..56418c75861 100644
--- a/features/db-discovery/core/src/main/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryRule.java
+++ b/features/db-discovery/core/src/main/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryRule.java
@@ -156,7 +156,14 @@ public final class DatabaseDiscoveryRule implements DatabaseRule, DataSourceCont
}
@Override
- public void closeHeartBeatJob() {
+ public void closeSingleHeartBeatJob(final String groupName) {
+ DatabaseDiscoveryDataSourceRule dataSourceRule = dataSourceRules.get(groupName);
+ Preconditions.checkNotNull(dataSourceRule, "Can not find database discovery data source rule in database `%s`", databaseName);
+ scheduleContext.closeSchedule(dataSourceRule.getDatabaseDiscoveryProviderAlgorithm().getType() + "-" + databaseName + "-" + dataSourceRule.getGroupName());
+ }
+
+ @Override
+ public void closeAllHeartBeatJob() {
for (Entry<String, DatabaseDiscoveryDataSourceRule> entry : dataSourceRules.entrySet()) {
DatabaseDiscoveryDataSourceRule rule = entry.getValue();
scheduleContext.closeSchedule(rule.getDatabaseDiscoveryProviderAlgorithm().getType() + "-" + databaseName + "-" + rule.getGroupName());
diff --git a/features/db-discovery/distsql/handler/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/update/DropDatabaseDiscoveryRuleStatementUpdater.java b/features/db-discovery/distsql/handler/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/update/DropDatabaseDiscoveryRuleStatementUpdater.java
index feb538fd2c4..8708c833893 100644
--- a/features/db-discovery/distsql/handler/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/update/DropDatabaseDiscoveryRuleStatementUpdater.java
+++ b/features/db-discovery/distsql/handler/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/update/DropDatabaseDiscoveryRuleStatementUpdater.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.dbdiscovery.distsql.handler.update;
import org.apache.shardingsphere.dbdiscovery.api.config.DatabaseDiscoveryRuleConfiguration;
import org.apache.shardingsphere.dbdiscovery.api.config.rule.DatabaseDiscoveryDataSourceRuleConfiguration;
import org.apache.shardingsphere.dbdiscovery.distsql.parser.statement.DropDatabaseDiscoveryRuleStatement;
+import org.apache.shardingsphere.infra.rule.identifier.type.DynamicDataSourceContainedRule;
import org.apache.shardingsphere.infra.rule.identifier.type.exportable.constant.ExportableConstants;
import org.apache.shardingsphere.infra.rule.identifier.type.exportable.constant.ExportableItemConstants;
import org.apache.shardingsphere.distsql.handler.exception.rule.MissingRequiredRuleException;
@@ -50,6 +51,7 @@ public final class DropDatabaseDiscoveryRuleStatementUpdater implements RuleDefi
String databaseName = database.getName();
checkCurrentRuleConfiguration(databaseName, sqlStatement, currentRuleConfig);
checkIsInUse(databaseName, sqlStatement, database);
+ closeHeartbeatJob(database, sqlStatement);
}
private void checkCurrentRuleConfiguration(final String databaseName, final DropDatabaseDiscoveryRuleStatement sqlStatement, final DatabaseDiscoveryRuleConfiguration currentRuleConfig) {
@@ -79,6 +81,10 @@ public final class DropDatabaseDiscoveryRuleStatementUpdater implements RuleDefi
ShardingSpherePreconditions.checkState(invalid.isEmpty(), () -> new RuleInUsedException(RULE_TYPE, databaseName, invalid));
}
+ private void closeHeartbeatJob(final ShardingSphereDatabase database, final DropDatabaseDiscoveryRuleStatement sqlStatement) {
+ sqlStatement.getNames().forEach(each -> database.getRuleMetaData().findSingleRule(DynamicDataSourceContainedRule.class).ifPresent(optional -> optional.closeSingleHeartBeatJob(each)));
+ }
+
@Override
public boolean updateCurrentRuleConfiguration(final DropDatabaseDiscoveryRuleStatement sqlStatement, final DatabaseDiscoveryRuleConfiguration currentRuleConfig) {
sqlStatement.getNames().forEach(each -> dropRule(currentRuleConfig, each));
diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
index 32c52518512..14102a6fe16 100644
--- a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
+++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
@@ -124,7 +124,7 @@ public final class ShardingSphereMetaData {
String databaseName = database.getName();
globalRuleMetaData.findRules(ResourceHeldRule.class).forEach(each -> each.closeStaleResource(databaseName));
database.getRuleMetaData().findRules(ResourceHeldRule.class).forEach(each -> each.closeStaleResource(databaseName));
- database.getRuleMetaData().findSingleRule(DynamicDataSourceContainedRule.class).ifPresent(DynamicDataSourceContainedRule::closeHeartBeatJob);
+ database.getRuleMetaData().findSingleRule(DynamicDataSourceContainedRule.class).ifPresent(DynamicDataSourceContainedRule::closeAllHeartBeatJob);
Optional.ofNullable(database.getResourceMetaData()).ifPresent(optional -> optional.getDataSources().values().forEach(each -> database.getResourceMetaData().close(each)));
}
}
diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/identifier/type/DynamicDataSourceContainedRule.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/identifier/type/DynamicDataSourceContainedRule.java
index c30efdc001f..76f93fc1618 100644
--- a/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/identifier/type/DynamicDataSourceContainedRule.java
+++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/identifier/type/DynamicDataSourceContainedRule.java
@@ -58,7 +58,14 @@ public interface DynamicDataSourceContainedRule extends ShardingSphereRule {
void restartHeartBeatJob(DataSourceStatusChangedEvent event);
/**
- * Close heart beat.
+ * Close single heart beat job.
+ *
+ * @param groupName group name
+ */
+ void closeSingleHeartBeatJob(String groupName);
+
+ /**
+ * Close all heart beat job.
*/
- void closeHeartBeatJob();
+ void closeAllHeartBeatJob();
}
diff --git a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/rule/RuleDefinitionBackendHandler.java b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/rule/RuleDefinitionBackendHandler.java
index c3dc5a8ab8f..8e14e641eab 100644
--- a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/rule/RuleDefinitionBackendHandler.java
+++ b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/rule/RuleDefinitionBackendHandler.java
@@ -89,7 +89,6 @@ public final class RuleDefinitionBackendHandler<T extends RuleDefinitionStatemen
} else {
throw new UnsupportedSQLOperationException(String.format("Cannot support RDL updater type `%s`", updater.getClass().getCanonicalName()));
}
- ProxyContext.getInstance().getContextManager().alterRuleConfiguration(database.getName(), result);
return result;
}
diff --git a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rdl/BaseRDLE2EIT.java b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rdl/BaseRDLE2EIT.java
index efe540e0f8c..580dc8a5c45 100644
--- a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rdl/BaseRDLE2EIT.java
+++ b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rdl/BaseRDLE2EIT.java
@@ -51,7 +51,6 @@ public abstract class BaseRDLE2EIT extends SingleE2EIT {
try (Connection connection = getTargetDataSource().getConnection()) {
executeInitSQLs(connection);
}
- sleep();
}
@After
@@ -71,6 +70,7 @@ public abstract class BaseRDLE2EIT extends SingleE2EIT {
for (String each : Splitter.on(";").trimResults().splitToList(getAssertion().getInitialSQL().getSql())) {
try (PreparedStatement preparedStatement = connection.prepareStatement(each)) {
preparedStatement.executeUpdate();
+ sleep();
}
}
}
@@ -82,6 +82,7 @@ public abstract class BaseRDLE2EIT extends SingleE2EIT {
for (String each : Splitter.on(";").trimResults().splitToList(getAssertion().getDestroySQL().getSql())) {
try (PreparedStatement preparedStatement = connection.prepareStatement(each)) {
preparedStatement.executeUpdate();
+ sleep();
}
}
}