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 <[email protected]>
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();
}
}
}