You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by tu...@apache.org on 2022/06/24 15:23:54 UTC
[shardingsphere] branch master updated: Decouple ShardingSphereRuleMetaData.configurations' status held (#18574)
This is an automated email from the ASF dual-hosted git repository.
tuichenchuxin 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 54470ca438e Decouple ShardingSphereRuleMetaData.configurations' status held (#18574)
54470ca438e is described below
commit 54470ca438e3470ba096511d9a07db6d108e8bfc
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Fri Jun 24 23:23:43 2022 +0800
Decouple ShardingSphereRuleMetaData.configurations' status held (#18574)
* Decouple ShardingSphereRuleMetaData.configurations' status held
* For checkstyle
* Fix test case
* Fix test case
---
.../rdl/rule/RuleDefinitionBackendHandler.java | 53 ++++++++++++----------
.../distsql/DistSQLBackendHandlerFactoryTest.java | 3 +-
.../rql/RuleDefinitionBackendHandlerTest.java | 5 +-
.../impl/OracleDDLStatementSQLVisitor.java | 2 +-
4 files changed, 37 insertions(+), 26 deletions(-)
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/RuleDefinitionBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/RuleDefinitionBackendHandler.java
index e37bf48d826..11cd9939a6e 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/RuleDefinitionBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/RuleDefinitionBackendHandler.java
@@ -48,6 +48,7 @@ import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
+import java.util.LinkedList;
import java.util.Optional;
import java.util.Set;
@@ -85,8 +86,8 @@ public final class RuleDefinitionBackendHandler<T extends RuleDefinitionStatemen
return new UpdateResponseHeader(sqlStatement);
}
if (getRefreshStatus(sqlStatement, currentRuleConfig, ruleDefinitionUpdater)) {
- processSQLStatement(database, sqlStatement, ruleDefinitionUpdater, currentRuleConfig);
- persistRuleConfigurationChange(database);
+ Collection<RuleConfiguration> alteredConfigs = processSQLStatement(database, sqlStatement, ruleDefinitionUpdater, currentRuleConfig);
+ persistRuleConfigurationChange(databaseName, alteredConfigs);
}
return new UpdateResponseHeader(sqlStatement);
}
@@ -101,42 +102,50 @@ public final class RuleDefinitionBackendHandler<T extends RuleDefinitionStatemen
}
@SuppressWarnings("rawtypes")
- private void processSQLStatement(final ShardingSphereDatabase database, final T sqlStatement, final RuleDefinitionUpdater updater, final RuleConfiguration currentRuleConfig) {
+ private Collection<RuleConfiguration> processSQLStatement(final ShardingSphereDatabase database,
+ final T sqlStatement, final RuleDefinitionUpdater updater, final RuleConfiguration currentRuleConfig) {
+ Collection<RuleConfiguration> result = new LinkedList<>(database.getRuleMetaData().getConfigurations());
if (updater instanceof RuleDefinitionCreateUpdater) {
- processCreate(database, sqlStatement, (RuleDefinitionCreateUpdater) updater, currentRuleConfig);
+ if (null != currentRuleConfig) {
+ result.remove(currentRuleConfig);
+ }
+ result.add(processCreate(sqlStatement, (RuleDefinitionCreateUpdater) updater, currentRuleConfig));
} else if (updater instanceof RuleDefinitionAlterUpdater) {
- processAlter(sqlStatement, (RuleDefinitionAlterUpdater) updater, currentRuleConfig);
+ result.remove(currentRuleConfig);
+ result.add(processAlter(sqlStatement, (RuleDefinitionAlterUpdater) updater, currentRuleConfig));
} else if (updater instanceof RuleDefinitionDropUpdater) {
- processDrop(database, sqlStatement, (RuleDefinitionDropUpdater) updater, currentRuleConfig);
+ processDrop(result, sqlStatement, (RuleDefinitionDropUpdater) updater, currentRuleConfig);
} else {
throw new UnsupportedOperationException(String.format("Cannot support RDL updater type `%s`", updater.getClass().getCanonicalName()));
}
- ProxyContext.getInstance().getContextManager().alterRuleConfiguration(database.getName(), database.getRuleMetaData().getConfigurations());
+ ProxyContext.getInstance().getContextManager().alterRuleConfiguration(database.getName(), result);
+ return result;
}
@SuppressWarnings({"rawtypes", "unchecked"})
- private void processCreate(final ShardingSphereDatabase database, final T sqlStatement, final RuleDefinitionCreateUpdater updater, final RuleConfiguration currentRuleConfig) {
+ private RuleConfiguration processCreate(final T sqlStatement, final RuleDefinitionCreateUpdater updater, final RuleConfiguration currentRuleConfig) {
RuleConfiguration toBeCreatedRuleConfig = updater.buildToBeCreatedRuleConfiguration(sqlStatement);
if (null == currentRuleConfig) {
- database.getRuleMetaData().getConfigurations().add(toBeCreatedRuleConfig);
- } else {
- updater.updateCurrentRuleConfiguration(currentRuleConfig, toBeCreatedRuleConfig);
+ return toBeCreatedRuleConfig;
}
+ updater.updateCurrentRuleConfiguration(currentRuleConfig, toBeCreatedRuleConfig);
+ return currentRuleConfig;
}
@SuppressWarnings({"rawtypes", "unchecked"})
- private void processAlter(final T sqlStatement, final RuleDefinitionAlterUpdater updater, final RuleConfiguration currentRuleConfig) {
+ private RuleConfiguration processAlter(final T sqlStatement, final RuleDefinitionAlterUpdater updater, final RuleConfiguration currentRuleConfig) {
RuleConfiguration toBeAlteredRuleConfig = updater.buildToBeAlteredRuleConfiguration(sqlStatement);
updater.updateCurrentRuleConfiguration(currentRuleConfig, toBeAlteredRuleConfig);
+ return toBeAlteredRuleConfig;
}
@SuppressWarnings({"rawtypes", "unchecked"})
- private void processDrop(final ShardingSphereDatabase database, final T sqlStatement, final RuleDefinitionDropUpdater updater, final RuleConfiguration currentRuleConfig) {
+ private void processDrop(final Collection<RuleConfiguration> configs, final T sqlStatement, final RuleDefinitionDropUpdater updater, final RuleConfiguration currentRuleConfig) {
if (!updater.hasAnyOneToBeDropped(sqlStatement, currentRuleConfig)) {
return;
}
if (updater.updateCurrentRuleConfiguration(sqlStatement, currentRuleConfig)) {
- database.getRuleMetaData().getConfigurations().remove(currentRuleConfig);
+ configs.remove(currentRuleConfig);
}
}
@@ -148,23 +157,21 @@ public final class RuleDefinitionBackendHandler<T extends RuleDefinitionStatemen
if (!newVersion.isPresent()) {
throw new RuntimeException(String.format("Unable to get a new version for database: %s", database.getName()));
}
- persistRuleConfigurationChange(metaDataPersistService.get(), newVersion.get(), database, currentRuleConfig,
- getAlteredRuleConfig(sqlStatement, updater, currentRuleConfig, preprocessor));
+ persistRuleConfigurationChange(metaDataPersistService.get(), newVersion.get(), database, currentRuleConfig, getAlteredRuleConfig(sqlStatement, updater, currentRuleConfig, preprocessor));
}
}
private void persistRuleConfigurationChange(final MetaDataPersistService metaDataPersistService, final String version, final ShardingSphereDatabase database,
final RuleConfiguration currentRuleConfig, final RuleConfiguration alteredRuleConfig) {
- Collection<RuleConfiguration> configurations = database.getRuleMetaData().getConfigurations();
- configurations.remove(currentRuleConfig);
- configurations.add(alteredRuleConfig);
- metaDataPersistService.getDatabaseRulePersistService().persist(database.getName(), version, configurations);
+ Collection<RuleConfiguration> configs = new LinkedList<>(database.getRuleMetaData().getConfigurations());
+ configs.remove(currentRuleConfig);
+ configs.add(alteredRuleConfig);
+ metaDataPersistService.getDatabaseRulePersistService().persist(database.getName(), version, configs);
ShardingSphereEventBus.getInstance().post(new MetadataVersionPreparedEvent(version, database.getName()));
}
- private void persistRuleConfigurationChange(final ShardingSphereDatabase database) {
- ProxyContext.getInstance().getContextManager().getMetaDataContexts().getPersistService().ifPresent(optional -> optional.getDatabaseRulePersistService().persist(
- database.getName(), database.getRuleMetaData().getConfigurations()));
+ private void persistRuleConfigurationChange(final String databaseName, final Collection<RuleConfiguration> alteredConfigs) {
+ ProxyContext.getInstance().getContextManager().getMetaDataContexts().getPersistService().ifPresent(optional -> optional.getDatabaseRulePersistService().persist(databaseName, alteredConfigs));
}
private RuleConfiguration getAlteredRuleConfig(final T sqlStatement, final RuleDefinitionAlterUpdater updater, final RuleConfiguration currentRuleConfig,
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/DistSQLBackendHandlerFactoryTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/DistSQLBackendHandlerFactoryTest.java
index 2bcb2ef6fdc..5b2a08f49d3 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/DistSQLBackendHandlerFactoryTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/DistSQLBackendHandlerFactoryTest.java
@@ -113,7 +113,7 @@ public final class DistSQLBackendHandlerFactoryTest extends ProxyContextRestorer
public void assertExecuteShardingTableRuleContext() throws SQLException {
setContextManager(true);
ShardingSphereDatabase database = ProxyContext.getInstance().getDatabase("db");
- when(database.getRuleMetaData().getRules()).thenReturn(Collections.emptyList());
+ when(database.getRuleMetaData()).thenReturn(new ShardingSphereRuleMetaData(Collections.emptyList()));
ResponseHeader response = RDLBackendHandlerFactory.newInstance(mock(CreateShardingTableRuleStatement.class), connectionSession).execute();
assertThat(response, instanceOf(UpdateResponseHeader.class));
}
@@ -275,6 +275,7 @@ public final class DistSQLBackendHandlerFactoryTest extends ProxyContextRestorer
when(database.getResource().getDatabaseType()).thenReturn(new MySQLDatabaseType());
when(database.getResource().getDataSources()).thenReturn(Collections.emptyMap());
when(database.getResource().getNotExistedResources(any())).thenReturn(Collections.emptyList());
+ when(database.getRuleMetaData()).thenReturn(new ShardingSphereRuleMetaData(Collections.emptyList()));
when(result.getMetaData().getDatabases()).thenReturn(Collections.singletonMap("db", database));
return result;
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RuleDefinitionBackendHandlerTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RuleDefinitionBackendHandlerTest.java
index 81b45797c7e..3f1f6ac81b0 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RuleDefinitionBackendHandlerTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RuleDefinitionBackendHandlerTest.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.proxy.backend.text.distsql.rql;
import io.netty.util.DefaultAttributeMap;
import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
@@ -51,7 +52,9 @@ public final class RuleDefinitionBackendHandlerTest extends ProxyContextRestorer
private ContextManager mockContextManager() {
ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
- when(result.getMetaDataContexts().getMetaData().getDatabases()).thenReturn(Collections.singletonMap("test", mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS)));
+ ShardingSphereDatabase database = mock(ShardingSphereDatabase.class);
+ when(database.getRuleMetaData()).thenReturn(new ShardingSphereRuleMetaData(Collections.emptyList()));
+ when(result.getMetaDataContexts().getMetaData().getDatabases()).thenReturn(Collections.singletonMap("test", database));
return result;
}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDDLStatementSQLVisitor.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDDLStatementSQLVisitor.java
index 80a0769228c..d370fb4a130 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDDLStatementSQLVisitor.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDDLStatementSQLVisitor.java
@@ -880,7 +880,7 @@ public final class OracleDDLStatementSQLVisitor extends OracleStatementSQLVisito
public ASTNode visitDropOperator(final DropOperatorContext ctx) {
return new OracleDropOperatorStatement();
}
-
+
@Override
public ASTNode visitAlterLibrary(final AlterLibraryContext ctx) {
return new OracleAlterLibraryStatement();