This is an automated email from the ASF dual-hosted git repository.
sunnianjun 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 7f8e798296b Refactor LegacyDatabaseRuleDefinitionExecuteEngine (#29910)
7f8e798296b is described below
commit 7f8e798296b24a9736e62f5fb8a0f8fce6a52147
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Jan 30 08:09:23 2024 +0800
Refactor LegacyDatabaseRuleDefinitionExecuteEngine (#29910)
* Simplify assertion of ClasspathWithEnvironmentURLProviderTest
* Refactor LegacyDatabaseRuleDefinitionExecuteEngine
* Refactor DatabaseRuleDefinitionExecuteEngine
* Refactor GlobalRuleDefinitionExecutor
---
.../ReadwriteSplittingRuleStatementChecker.java | 10 ----------
.../database/DatabaseRuleDefinitionExecuteEngine.java | 8 ++++----
.../global/GlobalRuleDefinitionExecuteEngine.java | 2 +-
.../LegacyGlobalRuleDefinitionExecuteEngine.java | 2 +-
.../rule/spi/global/GlobalRuleDefinitionExecutor.java | 6 +++---
.../ClasspathWithEnvironmentURLProviderTest.java | 1 -
.../handler/update/AlterGlobalClockRuleExecutor.java | 2 +-
.../update/AlterGlobalClockRuleExecutorTest.java | 2 +-
.../update/AlterSQLFederationRuleExecutor.java | 2 +-
.../update/AlterSQLFederationRuleExecutorTest.java | 2 +-
.../handler/update/AlterSQLParserRuleExecutor.java | 2 +-
.../update/AlterSQLParserRuleExecutorTest.java | 2 +-
.../update/AlterSQLTranslatorRuleExecutor.java | 2 +-
.../update/AlterSQLTranslatorRuleExecutorTest.java | 2 +-
.../handler/update/AlterTrafficRuleExecutor.java | 2 +-
.../handler/update/AlterTrafficRuleExecutorTest.java | 4 ++--
.../handler/update/AlterTransactionRuleExecutor.java | 2 +-
.../update/AlterTransactionRuleExecutorTest.java | 4 ++--
.../LegacyDatabaseRuleDefinitionExecuteEngine.java | 19 ++++++++++++++++++-
19 files changed, 41 insertions(+), 35 deletions(-)
diff --git
a/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/checker/ReadwriteSplittingRuleStatementChecker.java
b/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/checker/ReadwriteSplittingRuleStatementChecker.java
index 34ab5b3db7a..83d82367a2b 100644
---
a/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/checker/ReadwriteSplittingRuleStatementChecker.java
+++
b/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/checker/ReadwriteSplittingRuleStatementChecker.java
@@ -86,16 +86,6 @@ public final class ReadwriteSplittingRuleStatementChecker {
checkLoadBalancers(segments);
}
- /**
- * Check current rule configuration exist.
- *
- * @param database database
- * @param currentRuleConfig current rule config
- */
- public static void checkRuleConfigurationExist(final
ShardingSphereDatabase database, final ReadwriteSplittingRuleConfiguration
currentRuleConfig) {
- ShardingSpherePreconditions.checkNotNull(currentRuleConfig, () -> new
MissingRequiredRuleException("Readwrite-splitting", database.getName()));
- }
-
private static void checkRuleNamesExist(final
Collection<ReadwriteSplittingRuleSegment> segments, final
ReadwriteSplittingRuleConfiguration currentRuleConfig, final String
databaseName) {
Collection<String> requiredRuleNames =
segments.stream().map(ReadwriteSplittingRuleSegment::getName).collect(Collectors.toList());
Collection<String> currentRuleNames =
currentRuleConfig.getDataSources().stream().map(ReadwriteSplittingDataSourceRuleConfiguration::getName).collect(Collectors.toList());
diff --git
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/engine/database/DatabaseRuleDefinitionExecuteEngine.java
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/engine/database/DatabaseRuleDefinitionExecuteEngine.java
index 3508cf048d8..137f8defbad 100644
---
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/engine/database/DatabaseRuleDefinitionExecuteEngine.java
+++
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/engine/database/DatabaseRuleDefinitionExecuteEngine.java
@@ -61,6 +61,10 @@ public final class DatabaseRuleDefinitionExecuteEngine {
}
}
+ private Optional<RuleConfiguration> findCurrentRuleConfiguration(final
ShardingSphereDatabase database, final Class<? extends RuleConfiguration>
ruleConfigClass) {
+ return
database.getRuleMetaData().getConfigurations().stream().filter(each ->
ruleConfigClass.isAssignableFrom(each.getClass())).findFirst();
+ }
+
@SuppressWarnings("unchecked")
private void checkBeforeUpdate(final RuleConfiguration currentRuleConfig) {
Optional.ofNullable(executor.getClass().getAnnotation(DistSQLExecutorCurrentRuleRequired.class)).ifPresent(optional
-> checkCurrentRule(currentRuleConfig, optional));
@@ -74,10 +78,6 @@ public final class DatabaseRuleDefinitionExecuteEngine {
ShardingSpherePreconditions.checkNotNull(currentRuleConfig, () -> new
MissingRequiredRuleException(currentRuleRequired.value(), database.getName()));
}
- private Optional<RuleConfiguration> findCurrentRuleConfiguration(final
ShardingSphereDatabase database, final Class<? extends RuleConfiguration>
ruleConfigClass) {
- return
database.getRuleMetaData().getConfigurations().stream().filter(each ->
ruleConfigClass.isAssignableFrom(each.getClass())).findFirst();
- }
-
@SuppressWarnings({"rawtypes", "unchecked"})
private boolean getRefreshStatus(final RuleConfiguration
currentRuleConfig) {
return !(executor instanceof DatabaseRuleDropExecutor) ||
((DatabaseRuleDropExecutor) executor).hasAnyOneToBeDropped(sqlStatement,
currentRuleConfig);
diff --git
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/engine/global/GlobalRuleDefinitionExecuteEngine.java
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/engine/global/GlobalRuleDefinitionExecuteEngine.java
index a81ab4b5726..5378332343a 100644
---
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/engine/global/GlobalRuleDefinitionExecuteEngine.java
+++
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/engine/global/GlobalRuleDefinitionExecuteEngine.java
@@ -52,7 +52,7 @@ public final class GlobalRuleDefinitionExecuteEngine {
@SuppressWarnings("unchecked")
private RuleConfiguration processUpdate(final RuleDefinitionStatement
sqlStatement, final RuleConfiguration currentRuleConfig) {
- RuleConfiguration result =
executor.buildAlteredRuleConfiguration(sqlStatement);
+ RuleConfiguration result =
executor.buildToBeAlteredRuleConfiguration(sqlStatement);
Collection<RuleConfiguration> ruleConfigs =
contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getConfigurations();
ruleConfigs.remove(currentRuleConfig);
ruleConfigs.add(result);
diff --git
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/engine/legacy/LegacyGlobalRuleDefinitionExecuteEngine.java
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/engine/legacy/LegacyGlobalRuleDefinitionExecuteEngine.java
index fcfac8c3e2b..a33b530d5a4 100644
---
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/engine/legacy/LegacyGlobalRuleDefinitionExecuteEngine.java
+++
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/engine/legacy/LegacyGlobalRuleDefinitionExecuteEngine.java
@@ -57,7 +57,7 @@ public final class LegacyGlobalRuleDefinitionExecuteEngine {
Collection<RuleConfiguration> ruleConfigs =
contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getConfigurations();
Collection<RuleConfiguration> result = new LinkedList<>(ruleConfigs);
result.remove(currentRuleConfig);
- result.add(executor.buildAlteredRuleConfiguration(sqlStatement));
+ result.add(executor.buildToBeAlteredRuleConfiguration(sqlStatement));
return result;
}
}
diff --git
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/spi/global/GlobalRuleDefinitionExecutor.java
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/spi/global/GlobalRuleDefinitionExecutor.java
index a46b348c652..c1e1965da93 100644
---
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/spi/global/GlobalRuleDefinitionExecutor.java
+++
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/spi/global/GlobalRuleDefinitionExecutor.java
@@ -42,12 +42,12 @@ public interface GlobalRuleDefinitionExecutor<T extends
RuleDefinitionStatement,
}
/**
- * Build altered rule configuration.
+ * Build to be altered rule configuration.
*
* @param sqlStatement SQL statement
- * @return built altered rule configuration
+ * @return built to be altered rule configuration
*/
- RuleConfiguration buildAlteredRuleConfiguration(T sqlStatement);
+ RuleConfiguration buildToBeAlteredRuleConfiguration(T sqlStatement);
@Override
Class<T> getType();
diff --git
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/classpath/ClasspathWithEnvironmentURLProviderTest.java
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/classpath/ClasspathWithEnvironmentURLProviderTest.java
index 09fe9e14e2e..ead7526a2b4 100644
---
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/classpath/ClasspathWithEnvironmentURLProviderTest.java
+++
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/classpath/ClasspathWithEnvironmentURLProviderTest.java
@@ -35,7 +35,6 @@ public class ClasspathWithEnvironmentURLProviderTest {
when(spy.getEnvironmentVariables("FIXTURE_USERNAME")).thenReturn("sa");
byte[] actual =
spy.getContent("jdbc:shardingsphere:classpath-environment:config/driver/foo-driver-environment-variables-fixture.yaml",
urlPrefix);
byte[] actualOrigin =
ShardingSphereURLManager.getContent("jdbc:shardingsphere:classpath:config/driver/foo-driver-fixture.yaml",
urlPrefix);
- assertThat(actual.length, is(999));
assertThat(actual, is(actualOrigin));
}
}
diff --git
a/kernel/global-clock/distsql/handler/src/main/java/org/apache/shardingsphere/globalclock/distsql/handler/update/AlterGlobalClockRuleExecutor.java
b/kernel/global-clock/distsql/handler/src/main/java/org/apache/shardingsphere/globalclock/distsql/handler/update/AlterGlobalClockRuleExecutor.java
index b4b8dd2c02e..4e6ad9b87d4 100644
---
a/kernel/global-clock/distsql/handler/src/main/java/org/apache/shardingsphere/globalclock/distsql/handler/update/AlterGlobalClockRuleExecutor.java
+++
b/kernel/global-clock/distsql/handler/src/main/java/org/apache/shardingsphere/globalclock/distsql/handler/update/AlterGlobalClockRuleExecutor.java
@@ -28,7 +28,7 @@ import
org.apache.shardingsphere.globalclock.distsql.statement.updatable.AlterGl
public final class AlterGlobalClockRuleExecutor implements
GlobalRuleDefinitionExecutor<AlterGlobalClockRuleStatement, GlobalClockRule> {
@Override
- public GlobalClockRuleConfiguration buildAlteredRuleConfiguration(final
AlterGlobalClockRuleStatement sqlStatement) {
+ public GlobalClockRuleConfiguration
buildToBeAlteredRuleConfiguration(final AlterGlobalClockRuleStatement
sqlStatement) {
return new GlobalClockRuleConfiguration(sqlStatement.getType(),
sqlStatement.getProvider(), sqlStatement.isEnabled(), sqlStatement.getProps());
}
diff --git
a/kernel/global-clock/distsql/handler/src/test/java/org/apache/shardingsphere/globalclock/distsql/handler/update/AlterGlobalClockRuleExecutorTest.java
b/kernel/global-clock/distsql/handler/src/test/java/org/apache/shardingsphere/globalclock/distsql/handler/update/AlterGlobalClockRuleExecutorTest.java
index 2ab25967791..be0c0c2a524 100644
---
a/kernel/global-clock/distsql/handler/src/test/java/org/apache/shardingsphere/globalclock/distsql/handler/update/AlterGlobalClockRuleExecutorTest.java
+++
b/kernel/global-clock/distsql/handler/src/test/java/org/apache/shardingsphere/globalclock/distsql/handler/update/AlterGlobalClockRuleExecutorTest.java
@@ -40,7 +40,7 @@ class AlterGlobalClockRuleExecutorTest {
GlobalClockRule rule = mock(GlobalClockRule.class);
when(rule.getConfiguration()).thenReturn(getSQLParserRuleConfiguration());
executor.setRule(rule);
- GlobalClockRuleConfiguration actual =
executor.buildAlteredRuleConfiguration(sqlStatement);
+ GlobalClockRuleConfiguration actual =
executor.buildToBeAlteredRuleConfiguration(sqlStatement);
assertThat(actual.getType(), is("TSO"));
assertThat(actual.getProvider(), is("redis"));
assertTrue(actual.isEnabled());
diff --git
a/kernel/sql-federation/distsql/handler/src/main/java/org/apache/shardingsphere/sqlfederation/distsql/handler/update/AlterSQLFederationRuleExecutor.java
b/kernel/sql-federation/distsql/handler/src/main/java/org/apache/shardingsphere/sqlfederation/distsql/handler/update/AlterSQLFederationRuleExecutor.java
index 6192bbeeefb..9697bc005e8 100644
---
a/kernel/sql-federation/distsql/handler/src/main/java/org/apache/shardingsphere/sqlfederation/distsql/handler/update/AlterSQLFederationRuleExecutor.java
+++
b/kernel/sql-federation/distsql/handler/src/main/java/org/apache/shardingsphere/sqlfederation/distsql/handler/update/AlterSQLFederationRuleExecutor.java
@@ -34,7 +34,7 @@ public final class AlterSQLFederationRuleExecutor implements
GlobalRuleDefinitio
private SQLFederationRule rule;
@Override
- public SQLFederationRuleConfiguration buildAlteredRuleConfiguration(final
AlterSQLFederationRuleStatement sqlStatement) {
+ public SQLFederationRuleConfiguration
buildToBeAlteredRuleConfiguration(final AlterSQLFederationRuleStatement
sqlStatement) {
boolean sqlFederationEnabled = null ==
sqlStatement.getSqlFederationEnabled() ?
rule.getConfiguration().isSqlFederationEnabled() :
sqlStatement.getSqlFederationEnabled();
boolean allQueryUseSQLFederation = null ==
sqlStatement.getAllQueryUseSQLFederation() ?
rule.getConfiguration().isAllQueryUseSQLFederation() :
sqlStatement.getAllQueryUseSQLFederation();
CacheOption executionPlanCache = null ==
sqlStatement.getExecutionPlanCache()
diff --git
a/kernel/sql-federation/distsql/handler/src/test/java/org/apache/shardingsphere/sqlfederation/distsql/handler/update/AlterSQLFederationRuleExecutorTest.java
b/kernel/sql-federation/distsql/handler/src/test/java/org/apache/shardingsphere/sqlfederation/distsql/handler/update/AlterSQLFederationRuleExecutorTest.java
index 40debe564df..7f355866727 100644
---
a/kernel/sql-federation/distsql/handler/src/test/java/org/apache/shardingsphere/sqlfederation/distsql/handler/update/AlterSQLFederationRuleExecutorTest.java
+++
b/kernel/sql-federation/distsql/handler/src/test/java/org/apache/shardingsphere/sqlfederation/distsql/handler/update/AlterSQLFederationRuleExecutorTest.java
@@ -39,7 +39,7 @@ class AlterSQLFederationRuleExecutorTest {
SQLFederationRule rule = mock(SQLFederationRule.class);
when(rule.getConfiguration()).thenReturn(getSQLFederationRuleConfiguration());
executor.setRule(rule);
- SQLFederationRuleConfiguration actual =
executor.buildAlteredRuleConfiguration(sqlStatement);
+ SQLFederationRuleConfiguration actual =
executor.buildToBeAlteredRuleConfiguration(sqlStatement);
assertTrue(actual.isSqlFederationEnabled());
assertTrue(actual.isAllQueryUseSQLFederation());
assertThat(actual.getExecutionPlanCache().getInitialCapacity(),
is(64));
diff --git
a/kernel/sql-parser/distsql/handler/src/main/java/org/apache/shardingsphere/parser/distsql/handler/update/AlterSQLParserRuleExecutor.java
b/kernel/sql-parser/distsql/handler/src/main/java/org/apache/shardingsphere/parser/distsql/handler/update/AlterSQLParserRuleExecutor.java
index 0336afac0bd..a84aadfc3af 100644
---
a/kernel/sql-parser/distsql/handler/src/main/java/org/apache/shardingsphere/parser/distsql/handler/update/AlterSQLParserRuleExecutor.java
+++
b/kernel/sql-parser/distsql/handler/src/main/java/org/apache/shardingsphere/parser/distsql/handler/update/AlterSQLParserRuleExecutor.java
@@ -34,7 +34,7 @@ public final class AlterSQLParserRuleExecutor implements
GlobalRuleDefinitionExe
private SQLParserRule rule;
@Override
- public SQLParserRuleConfiguration buildAlteredRuleConfiguration(final
AlterSQLParserRuleStatement sqlStatement) {
+ public SQLParserRuleConfiguration buildToBeAlteredRuleConfiguration(final
AlterSQLParserRuleStatement sqlStatement) {
CacheOption parseTreeCache = null == sqlStatement.getParseTreeCache()
? rule.getConfiguration().getParseTreeCache()
:
createCacheOption(rule.getConfiguration().getParseTreeCache(),
sqlStatement.getParseTreeCache());
diff --git
a/kernel/sql-parser/distsql/handler/src/test/java/org/apache/shardingsphere/parser/distsql/handler/update/AlterSQLParserRuleExecutorTest.java
b/kernel/sql-parser/distsql/handler/src/test/java/org/apache/shardingsphere/parser/distsql/handler/update/AlterSQLParserRuleExecutorTest.java
index b4b2ea50849..0e0ac8abcdd 100644
---
a/kernel/sql-parser/distsql/handler/src/test/java/org/apache/shardingsphere/parser/distsql/handler/update/AlterSQLParserRuleExecutorTest.java
+++
b/kernel/sql-parser/distsql/handler/src/test/java/org/apache/shardingsphere/parser/distsql/handler/update/AlterSQLParserRuleExecutorTest.java
@@ -38,7 +38,7 @@ class AlterSQLParserRuleExecutorTest {
SQLParserRule rule = mock(SQLParserRule.class);
when(rule.getConfiguration()).thenReturn(getSQLParserRuleConfiguration());
executor.setRule(rule);
- SQLParserRuleConfiguration actual =
executor.buildAlteredRuleConfiguration(sqlStatement);
+ SQLParserRuleConfiguration actual =
executor.buildToBeAlteredRuleConfiguration(sqlStatement);
assertThat(actual.getSqlStatementCache().getInitialCapacity(),
is(1000));
assertThat(actual.getSqlStatementCache().getMaximumSize(), is(1000L));
assertThat(actual.getParseTreeCache().getInitialCapacity(), is(64));
diff --git
a/kernel/sql-translator/distsql/handler/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/handler/update/AlterSQLTranslatorRuleExecutor.java
b/kernel/sql-translator/distsql/handler/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/handler/update/AlterSQLTranslatorRuleExecutor.java
index 987c0cd1a13..e335f50a006 100644
---
a/kernel/sql-translator/distsql/handler/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/handler/update/AlterSQLTranslatorRuleExecutor.java
+++
b/kernel/sql-translator/distsql/handler/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/handler/update/AlterSQLTranslatorRuleExecutor.java
@@ -39,7 +39,7 @@ public final class AlterSQLTranslatorRuleExecutor implements
GlobalRuleDefinitio
}
@Override
- public SQLTranslatorRuleConfiguration buildAlteredRuleConfiguration(final
AlterSQLTranslatorRuleStatement sqlStatement) {
+ public SQLTranslatorRuleConfiguration
buildToBeAlteredRuleConfiguration(final AlterSQLTranslatorRuleStatement
sqlStatement) {
boolean useOriginalSQLWhenTranslatingFailed = null ==
sqlStatement.getUseOriginalSQLWhenTranslatingFailed()
?
rule.getConfiguration().isUseOriginalSQLWhenTranslatingFailed()
: sqlStatement.getUseOriginalSQLWhenTranslatingFailed();
diff --git
a/kernel/sql-translator/distsql/handler/src/test/java/org/apache/shardingsphere/sqltranslator/distsql/handler/update/AlterSQLTranslatorRuleExecutorTest.java
b/kernel/sql-translator/distsql/handler/src/test/java/org/apache/shardingsphere/sqltranslator/distsql/handler/update/AlterSQLTranslatorRuleExecutorTest.java
index 5b31b9857ba..48e84dcd90b 100644
---
a/kernel/sql-translator/distsql/handler/src/test/java/org/apache/shardingsphere/sqltranslator/distsql/handler/update/AlterSQLTranslatorRuleExecutorTest.java
+++
b/kernel/sql-translator/distsql/handler/src/test/java/org/apache/shardingsphere/sqltranslator/distsql/handler/update/AlterSQLTranslatorRuleExecutorTest.java
@@ -43,7 +43,7 @@ class AlterSQLTranslatorRuleExecutorTest {
SQLTranslatorRule rule = mock(SQLTranslatorRule.class);
when(rule.getConfiguration()).thenReturn(createSQLTranslatorRuleConfiguration());
executor.setRule(rule);
- SQLTranslatorRuleConfiguration actual =
executor.buildAlteredRuleConfiguration(
+ SQLTranslatorRuleConfiguration actual =
executor.buildToBeAlteredRuleConfiguration(
new AlterSQLTranslatorRuleStatement(new
AlgorithmSegment("JOOQ", PropertiesBuilder.build(new Property("foo", "bar"))),
null));
assertThat(actual.getType(), is("JOOQ"));
assertFalse(actual.getProps().isEmpty());
diff --git
a/kernel/traffic/distsql/handler/src/main/java/org/apache/shardingsphere/traffic/distsql/handler/update/AlterTrafficRuleExecutor.java
b/kernel/traffic/distsql/handler/src/main/java/org/apache/shardingsphere/traffic/distsql/handler/update/AlterTrafficRuleExecutor.java
index f69ea6df1ab..22d16cc4dee 100644
---
a/kernel/traffic/distsql/handler/src/main/java/org/apache/shardingsphere/traffic/distsql/handler/update/AlterTrafficRuleExecutor.java
+++
b/kernel/traffic/distsql/handler/src/main/java/org/apache/shardingsphere/traffic/distsql/handler/update/AlterTrafficRuleExecutor.java
@@ -72,7 +72,7 @@ public final class AlterTrafficRuleExecutor implements
GlobalRuleDefinitionExecu
}
@Override
- public TrafficRuleConfiguration buildAlteredRuleConfiguration(final
AlterTrafficRuleStatement sqlStatement) {
+ public TrafficRuleConfiguration buildToBeAlteredRuleConfiguration(final
AlterTrafficRuleStatement sqlStatement) {
TrafficRuleConfiguration result = new TrafficRuleConfiguration();
TrafficRuleConfiguration configFromSQLStatement =
TrafficRuleConverter.convert(sqlStatement.getSegments());
result.getTrafficStrategies().addAll(createToBeAlteredStrategyConfigurations(configFromSQLStatement));
diff --git
a/kernel/traffic/distsql/handler/src/test/java/org/apache/shardingsphere/traffic/distsql/handler/update/AlterTrafficRuleExecutorTest.java
b/kernel/traffic/distsql/handler/src/test/java/org/apache/shardingsphere/traffic/distsql/handler/update/AlterTrafficRuleExecutorTest.java
index 9cfb681890b..4ccd27c60b9 100644
---
a/kernel/traffic/distsql/handler/src/test/java/org/apache/shardingsphere/traffic/distsql/handler/update/AlterTrafficRuleExecutorTest.java
+++
b/kernel/traffic/distsql/handler/src/test/java/org/apache/shardingsphere/traffic/distsql/handler/update/AlterTrafficRuleExecutorTest.java
@@ -73,7 +73,7 @@ class AlterTrafficRuleExecutorTest {
TrafficRule rule = mock(TrafficRule.class);
when(rule.getConfiguration()).thenReturn(createTrafficRuleConfiguration());
executor.setRule(rule);
- TrafficRuleConfiguration actual =
executor.buildAlteredRuleConfiguration(new
AlterTrafficRuleStatement(Collections.singleton(trafficRuleSegment)));
+ TrafficRuleConfiguration actual =
executor.buildToBeAlteredRuleConfiguration(new
AlterTrafficRuleStatement(Collections.singleton(trafficRuleSegment)));
assertThat(actual.getTrafficStrategies().size(), is(2));
assertThat(actual.getTrafficAlgorithms().size(), is(2));
assertThat(actual.getLoadBalancers().size(), is(1));
@@ -90,7 +90,7 @@ class AlterTrafficRuleExecutorTest {
when(rule.getConfiguration()).thenReturn(createTrafficRuleConfiguration());
executor.setRule(rule);
TrafficRuleConfiguration actual =
- executor.buildAlteredRuleConfiguration(new
AlterTrafficRuleStatement(Arrays.asList(trafficRuleSegment1,
trafficRuleSegment2)));
+ executor.buildToBeAlteredRuleConfiguration(new
AlterTrafficRuleStatement(Arrays.asList(trafficRuleSegment1,
trafficRuleSegment2)));
assertThat(actual.getTrafficStrategies().size(), is(2));
assertThat(actual.getTrafficAlgorithms().size(), is(2));
assertThat(actual.getLoadBalancers().size(), is(2));
diff --git
a/kernel/transaction/distsql/handler/src/main/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleExecutor.java
b/kernel/transaction/distsql/handler/src/main/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleExecutor.java
index a8dd4530adf..cc37b6678f9 100644
---
a/kernel/transaction/distsql/handler/src/main/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleExecutor.java
+++
b/kernel/transaction/distsql/handler/src/main/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleExecutor.java
@@ -70,7 +70,7 @@ public final class AlterTransactionRuleExecutor implements
GlobalRuleDefinitionE
}
@Override
- public TransactionRuleConfiguration buildAlteredRuleConfiguration(final
AlterTransactionRuleStatement sqlStatement) {
+ public TransactionRuleConfiguration
buildToBeAlteredRuleConfiguration(final AlterTransactionRuleStatement
sqlStatement) {
return new TransactionRuleConfiguration(sqlStatement.getDefaultType(),
sqlStatement.getProvider().getProviderType(),
sqlStatement.getProvider().getProps());
}
diff --git
a/kernel/transaction/distsql/handler/src/test/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleExecutorTest.java
b/kernel/transaction/distsql/handler/src/test/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleExecutorTest.java
index d3e5b92179e..7bfe2ab646b 100644
---
a/kernel/transaction/distsql/handler/src/test/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleExecutorTest.java
+++
b/kernel/transaction/distsql/handler/src/test/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleExecutorTest.java
@@ -54,7 +54,7 @@ class AlterTransactionRuleExecutorTest {
"XA", new TransactionProviderSegment("Atomikos",
PropertiesBuilder.build(new Property("host", "127.0.0.1"), new
Property("databaseName", "jbossts"))));
TransactionRule rule = mock(TransactionRule.class);
executor.setRule(rule);
- TransactionRuleConfiguration actual =
executor.buildAlteredRuleConfiguration(sqlStatement);
+ TransactionRuleConfiguration actual =
executor.buildToBeAlteredRuleConfiguration(sqlStatement);
assertThat(actual.getDefaultType(), is("XA"));
assertThat(actual.getProviderType(), is("Atomikos"));
assertFalse(actual.getProps().isEmpty());
@@ -68,7 +68,7 @@ class AlterTransactionRuleExecutorTest {
AlterTransactionRuleExecutor executor = new
AlterTransactionRuleExecutor();
TransactionRule rule = mock(TransactionRule.class);
executor.setRule(rule);
- TransactionRuleConfiguration actual =
executor.buildAlteredRuleConfiguration(new
AlterTransactionRuleStatement("LOCAL", new TransactionProviderSegment("", new
Properties())));
+ TransactionRuleConfiguration actual =
executor.buildToBeAlteredRuleConfiguration(new
AlterTransactionRuleStatement("LOCAL", new TransactionProviderSegment("", new
Properties())));
assertThat(actual.getDefaultType(), is("LOCAL"));
assertThat(actual.getProviderType(), is(""));
}
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/legacy/LegacyDatabaseRuleDefinitionExecuteEngine.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/legacy/LegacyDatabaseRuleDefinitionExecuteEngine.java
index 27bc35cf7e1..6f8d692e43b 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/legacy/LegacyDatabaseRuleDefinitionExecuteEngine.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/legacy/LegacyDatabaseRuleDefinitionExecuteEngine.java
@@ -18,13 +18,17 @@
package org.apache.shardingsphere.proxy.backend.handler.distsql.legacy;
import lombok.RequiredArgsConstructor;
+import
org.apache.shardingsphere.distsql.handler.exception.rule.MissingRequiredRuleException;
+import
org.apache.shardingsphere.distsql.handler.required.DistSQLExecutorCurrentRuleRequired;
import
org.apache.shardingsphere.distsql.handler.type.rdl.rule.spi.database.DatabaseRuleAlterExecutor;
import
org.apache.shardingsphere.distsql.handler.type.rdl.rule.spi.database.DatabaseRuleCreateExecutor;
import
org.apache.shardingsphere.distsql.handler.type.rdl.rule.spi.database.DatabaseRuleDefinitionExecutor;
import
org.apache.shardingsphere.distsql.handler.type.rdl.rule.spi.database.DatabaseRuleDropExecutor;
import
org.apache.shardingsphere.distsql.statement.rdl.rule.RuleDefinitionStatement;
+import
org.apache.shardingsphere.distsql.statement.rdl.rule.type.DropRuleStatement;
import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
import
org.apache.shardingsphere.infra.config.rule.decorator.RuleConfigurationDecorator;
+import
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
import
org.apache.shardingsphere.infra.exception.core.external.sql.type.generic.UnsupportedSQLOperationException;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
@@ -62,7 +66,7 @@ public final class LegacyDatabaseRuleDefinitionExecuteEngine {
Class<? extends RuleConfiguration> ruleConfigClass =
executor.getRuleConfigurationClass();
RuleConfiguration currentRuleConfig =
findCurrentRuleConfiguration(database, ruleConfigClass).orElse(null);
executor.setDatabase(database);
- executor.checkBeforeUpdate(sqlStatement, currentRuleConfig);
+ checkBeforeUpdate(currentRuleConfig);
if (getRefreshStatus(sqlStatement, currentRuleConfig, executor)) {
contextManager.getInstanceContext().getModeContextManager()
.alterRuleConfiguration(database.getName(),
processSQLStatement(database, sqlStatement, executor, currentRuleConfig));
@@ -73,6 +77,19 @@ public final class LegacyDatabaseRuleDefinitionExecuteEngine
{
return
database.getRuleMetaData().getConfigurations().stream().filter(each ->
ruleConfigClass.isAssignableFrom(each.getClass())).findFirst();
}
+ @SuppressWarnings("unchecked")
+ private void checkBeforeUpdate(final RuleConfiguration currentRuleConfig) {
+
Optional.ofNullable(executor.getClass().getAnnotation(DistSQLExecutorCurrentRuleRequired.class)).ifPresent(optional
-> checkCurrentRule(currentRuleConfig, optional));
+ executor.checkBeforeUpdate(sqlStatement, currentRuleConfig);
+ }
+
+ private void checkCurrentRule(final RuleConfiguration currentRuleConfig,
final DistSQLExecutorCurrentRuleRequired currentRuleRequired) {
+ if (sqlStatement instanceof DropRuleStatement && ((DropRuleStatement)
sqlStatement).isIfExists()) {
+ return;
+ }
+ ShardingSpherePreconditions.checkNotNull(currentRuleConfig, () -> new
MissingRequiredRuleException(currentRuleRequired.value(), database.getName()));
+ }
+
@SuppressWarnings({"unchecked", "rawtypes"})
private boolean getRefreshStatus(final SQLStatement sqlStatement, final
RuleConfiguration currentRuleConfig, final DatabaseRuleDefinitionExecutor<?, ?>
executor) {
return !(executor instanceof DatabaseRuleDropExecutor) ||
((DatabaseRuleDropExecutor) executor).hasAnyOneToBeDropped(sqlStatement,
currentRuleConfig);