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 <[email protected]>
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.
- }
}