You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2021/06/04 06:20:57 UTC
[shardingsphere] branch master updated: Minor refactor for Drop
rules (#10650)
This is an automated email from the ASF dual-hosted git repository.
panjuan 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 3c3e6f2 Minor refactor for Drop rules (#10650)
3c3e6f2 is described below
commit 3c3e6f20b48b052b04a6db14e642ec287b8904a1
Author: Haoran Meng <me...@gmail.com>
AuthorDate: Fri Jun 4 14:20:12 2021 +0800
Minor refactor for Drop rules (#10650)
---
...ropShardingBindingTableRulesBackendHandler.java | 31 +++--------
...pShardingBroadcastTableRulesBackendHandler.java | 26 ++--------
.../impl/DropShardingTableRuleBackendHandler.java | 60 ++++++++--------------
3 files changed, 32 insertions(+), 85 deletions(-)
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/DropShardingBindingTableRulesBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/DropShardingBindingTableRulesBackendHandler.java
index 6f54c52..2b20b54 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/DropShardingBindingTableRulesBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/DropShardingBindingTableRulesBackendHandler.java
@@ -18,14 +18,8 @@
package org.apache.shardingsphere.proxy.backend.text.distsql.rdl.impl;
import org.apache.shardingsphere.distsql.parser.statement.rdl.drop.impl.DropShardingBindingTableRulesStatement;
-import org.apache.shardingsphere.governance.core.registry.config.event.rule.RuleConfigurationsAlteredSQLNotificationEvent;
-import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
-import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.exception.ShardingBindingTableRulesNotExistsException;
-import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
-import org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
-import org.apache.shardingsphere.proxy.backend.text.SchemaRequiredBackendHandler;
import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
import java.util.Optional;
@@ -33,35 +27,22 @@ import java.util.Optional;
/**
* Drop sharding binding table rules backend handler.
*/
-public final class DropShardingBindingTableRulesBackendHandler extends SchemaRequiredBackendHandler<DropShardingBindingTableRulesStatement> {
+public final class DropShardingBindingTableRulesBackendHandler extends RDLBackendHandler<DropShardingBindingTableRulesStatement> {
public DropShardingBindingTableRulesBackendHandler(final DropShardingBindingTableRulesStatement sqlStatement, final BackendConnection backendConnection) {
super(sqlStatement, backendConnection);
}
@Override
- public ResponseHeader execute(final String schemaName, final DropShardingBindingTableRulesStatement sqlStatement) {
+ protected void before(final String schemaName, final DropShardingBindingTableRulesStatement sqlStatement) {
Optional<ShardingRuleConfiguration> shardingRuleConfiguration = getShardingRuleConfiguration(schemaName);
- if (!shardingRuleConfiguration.isPresent()) {
+ if (!shardingRuleConfiguration.isPresent() || shardingRuleConfiguration.get().getBindingTableGroups().isEmpty()) {
throw new ShardingBindingTableRulesNotExistsException(schemaName);
}
- if (shardingRuleConfiguration.get().getBindingTableGroups().isEmpty()) {
- throw new ShardingBindingTableRulesNotExistsException(schemaName);
- }
- shardingRuleConfiguration.get().getBindingTableGroups().clear();
- post(schemaName);
- return new UpdateResponseHeader(sqlStatement);
}
- private Optional<ShardingRuleConfiguration> getShardingRuleConfiguration(final String schemaName) {
- return ProxyContext.getInstance().getMetaData(schemaName).getRuleMetaData().getConfigurations().stream()
- .filter(each -> each instanceof ShardingRuleConfiguration).map(each -> (ShardingRuleConfiguration) each).findFirst();
- }
-
- private void post(final String schemaName) {
- // TODO should use RuleConfigurationsChangeEvent
- ShardingSphereEventBus.getInstance().post(
- new RuleConfigurationsAlteredSQLNotificationEvent(schemaName, ProxyContext.getInstance().getMetaData(schemaName).getRuleMetaData().getConfigurations()));
- // TODO Need to get the executed feedback from registry center for returning.
+ @Override
+ protected void doExecute(final String schemaName, final DropShardingBindingTableRulesStatement sqlStatement) {
+ getShardingRuleConfiguration(schemaName).get().getBindingTableGroups().clear();
}
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/DropShardingBroadcastTableRulesBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/DropShardingBroadcastTableRulesBackendHandler.java
index 113f371..e6e4482 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/DropShardingBroadcastTableRulesBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/DropShardingBroadcastTableRulesBackendHandler.java
@@ -18,14 +18,8 @@
package org.apache.shardingsphere.proxy.backend.text.distsql.rdl.impl;
import org.apache.shardingsphere.distsql.parser.statement.rdl.drop.impl.DropShardingBroadcastTableRulesStatement;
-import org.apache.shardingsphere.governance.core.registry.config.event.rule.RuleConfigurationsAlteredSQLNotificationEvent;
-import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
-import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.exception.ShardingBroadcastTableRulesNotExistsException;
-import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
-import org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
-import org.apache.shardingsphere.proxy.backend.text.SchemaRequiredBackendHandler;
import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
import java.util.Optional;
@@ -33,32 +27,22 @@ import java.util.Optional;
/**
* Drop sharding broadcast table rules backend handler.
*/
-public final class DropShardingBroadcastTableRulesBackendHandler extends SchemaRequiredBackendHandler<DropShardingBroadcastTableRulesStatement> {
+public final class DropShardingBroadcastTableRulesBackendHandler extends RDLBackendHandler<DropShardingBroadcastTableRulesStatement> {
public DropShardingBroadcastTableRulesBackendHandler(final DropShardingBroadcastTableRulesStatement sqlStatement, final BackendConnection backendConnection) {
super(sqlStatement, backendConnection);
}
@Override
- public ResponseHeader execute(final String schemaName, final DropShardingBroadcastTableRulesStatement sqlStatement) {
+ protected void before(final String schemaName, final DropShardingBroadcastTableRulesStatement sqlStatement) {
Optional<ShardingRuleConfiguration> shardingRuleConfiguration = getShardingRuleConfiguration(schemaName);
if (!shardingRuleConfiguration.isPresent() || shardingRuleConfiguration.get().getBroadcastTables().isEmpty()) {
throw new ShardingBroadcastTableRulesNotExistsException(schemaName);
}
- shardingRuleConfiguration.get().getBroadcastTables().clear();
- post(schemaName);
- return new UpdateResponseHeader(sqlStatement);
}
- private Optional<ShardingRuleConfiguration> getShardingRuleConfiguration(final String schemaName) {
- return ProxyContext.getInstance().getMetaData(schemaName).getRuleMetaData().getConfigurations().stream()
- .filter(each -> each instanceof ShardingRuleConfiguration).map(each -> (ShardingRuleConfiguration) each).findFirst();
- }
-
- private void post(final String schemaName) {
- // TODO should use RuleConfigurationsChangeEvent
- ShardingSphereEventBus.getInstance().post(
- new RuleConfigurationsAlteredSQLNotificationEvent(schemaName, ProxyContext.getInstance().getMetaData(schemaName).getRuleMetaData().getConfigurations()));
- // TODO Need to get the executed feedback from registry center for returning.
+ @Override
+ protected void doExecute(final String schemaName, final DropShardingBroadcastTableRulesStatement sqlStatement) {
+ getShardingRuleConfiguration(schemaName).get().getBroadcastTables().clear();
}
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/DropShardingTableRuleBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/DropShardingTableRuleBackendHandler.java
index 072a7c3..2ff1b77 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/DropShardingTableRuleBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/DropShardingTableRuleBackendHandler.java
@@ -19,15 +19,9 @@ package org.apache.shardingsphere.proxy.backend.text.distsql.rdl.impl;
import com.google.common.base.Splitter;
import org.apache.shardingsphere.distsql.parser.statement.rdl.drop.impl.DropShardingTableRuleStatement;
-import org.apache.shardingsphere.governance.core.registry.config.event.rule.RuleConfigurationsAlteredSQLNotificationEvent;
-import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
-import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.exception.ShardingTableRuleNotExistedException;
import org.apache.shardingsphere.proxy.backend.exception.ShardingTableRulesInUsedException;
-import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
-import org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
-import org.apache.shardingsphere.proxy.backend.text.SchemaRequiredBackendHandler;
import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
import org.apache.shardingsphere.sharding.api.config.rule.ShardingAutoTableRuleConfiguration;
import org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
@@ -41,38 +35,43 @@ import java.util.stream.Collectors;
/**
* Drop sharding table rule backend handler.
*/
-public final class DropShardingTableRuleBackendHandler extends SchemaRequiredBackendHandler<DropShardingTableRuleStatement> {
+public final class DropShardingTableRuleBackendHandler extends RDLBackendHandler<DropShardingTableRuleStatement> {
public DropShardingTableRuleBackendHandler(final DropShardingTableRuleStatement sqlStatement, final BackendConnection backendConnection) {
super(sqlStatement, backendConnection);
}
@Override
- public ResponseHeader execute(final String schemaName, final DropShardingTableRuleStatement sqlStatement) {
+ protected void before(final String schemaName, final DropShardingTableRuleStatement sqlStatement) {
Collection<String> tableNames = sqlStatement.getTableNames().stream().map(each -> each.getIdentifier().getValue()).collect(Collectors.toList());
Optional<ShardingRuleConfiguration> shardingRuleConfig = getShardingRuleConfiguration(schemaName);
if (!shardingRuleConfig.isPresent()) {
throw new ShardingTableRuleNotExistedException(schemaName, tableNames);
}
- check(schemaName, shardingRuleConfig.get(), tableNames);
- drop(shardingRuleConfig.get(), tableNames);
- post(schemaName);
- return new UpdateResponseHeader(sqlStatement);
- }
-
- private void check(final String schemaName, final ShardingRuleConfiguration shardingRuleConfig, final Collection<String> tableNames) {
- Collection<String> shardingTableNames = getShardingTables(shardingRuleConfig);
+ Collection<String> shardingTableNames = getShardingTables(shardingRuleConfig.get());
Collection<String> notExistedTableNames = tableNames.stream().filter(each -> !shardingTableNames.contains(each)).collect(Collectors.toList());
if (!notExistedTableNames.isEmpty()) {
throw new ShardingTableRuleNotExistedException(schemaName, notExistedTableNames);
}
- Collection<String> bindingTables = getBindingTables(shardingRuleConfig);
+ Collection<String> bindingTables = getBindingTables(shardingRuleConfig.get());
Collection<String> usedTableNames = tableNames.stream().filter(bindingTables::contains).collect(Collectors.toList());
if (!usedTableNames.isEmpty()) {
throw new ShardingTableRulesInUsedException(usedTableNames);
}
}
+ @Override
+ protected void doExecute(final String schemaName, final DropShardingTableRuleStatement sqlStatement) {
+ ShardingRuleConfiguration shardingRuleConfiguration = getShardingRuleConfiguration(schemaName).get();
+ for (String each : getDroppedTables(sqlStatement)) {
+ dropShardingTable(shardingRuleConfiguration, each);
+ }
+ }
+
+ private Collection<String> getDroppedTables(final DropShardingTableRuleStatement sqlStatement) {
+ return sqlStatement.getTableNames().stream().map(each -> each.getIdentifier().getValue()).collect(Collectors.toList());
+ }
+
private Collection<String> getShardingTables(final ShardingRuleConfiguration shardingRuleConfiguration) {
Collection<String> result = new LinkedList<>();
result.addAll(shardingRuleConfiguration.getTables().stream().map(ShardingTableRuleConfiguration::getLogicTable).collect(Collectors.toList()));
@@ -80,21 +79,11 @@ public final class DropShardingTableRuleBackendHandler extends SchemaRequiredBac
return result;
}
- private void drop(final ShardingRuleConfiguration shardingRuleConfiguration, final Collection<String> tableNames) {
- // TODO add global lock
- for (String each : tableNames) {
- dropShardingTable(each, shardingRuleConfiguration);
- }
- }
-
- private void dropShardingTable(final String tableName, final ShardingRuleConfiguration shardingRuleConfig) {
- shardingRuleConfig.getTables().removeAll(shardingRuleConfig.getTables().stream().filter(each -> tableName.equalsIgnoreCase(each.getLogicTable())).collect(Collectors.toList()));
- shardingRuleConfig.getAutoTables().removeAll(shardingRuleConfig.getAutoTables().stream().filter(each -> tableName.equalsIgnoreCase(each.getLogicTable())).collect(Collectors.toList()));
- }
-
- private Optional<ShardingRuleConfiguration> getShardingRuleConfiguration(final String schemaName) {
- return ProxyContext.getInstance().getMetaData(schemaName).getRuleMetaData().getConfigurations().stream()
- .filter(each -> each instanceof ShardingRuleConfiguration).map(each -> (ShardingRuleConfiguration) each).findFirst();
+ private void dropShardingTable(final ShardingRuleConfiguration shardingRuleConfiguration, final String tableName) {
+ shardingRuleConfiguration.getTables().removeAll(shardingRuleConfiguration.getTables()
+ .stream().filter(each -> tableName.equalsIgnoreCase(each.getLogicTable())).collect(Collectors.toList()));
+ shardingRuleConfiguration.getAutoTables().removeAll(shardingRuleConfiguration.getAutoTables()
+ .stream().filter(each -> tableName.equalsIgnoreCase(each.getLogicTable())).collect(Collectors.toList()));
}
private Collection<String> getBindingTables(final ShardingRuleConfiguration shardingRuleConfiguration) {
@@ -102,11 +91,4 @@ public final class DropShardingTableRuleBackendHandler extends SchemaRequiredBac
shardingRuleConfiguration.getBindingTableGroups().forEach(each -> bindTables.addAll(Splitter.on(",").splitToList(each)));
return bindTables;
}
-
- private void post(final String schemaName) {
- // TODO should use RuleConfigurationsChangeEvent
- ShardingSphereEventBus.getInstance().post(
- new RuleConfigurationsAlteredSQLNotificationEvent(schemaName, ProxyContext.getInstance().getMetaData(schemaName).getRuleMetaData().getConfigurations()));
- // TODO Need to get the executed feedback from registry center for returning.
- }
}