This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 fc56fcd Check encryptor & loadBalancer not in use before drop it
(#11280)
fc56fcd is described below
commit fc56fcda8d10e4e4e8553fd8a2f784e6b1ec006b
Author: Haoran Meng <[email protected]>
AuthorDate: Mon Jul 12 18:16:59 2021 +0800
Check encryptor & loadBalancer not in use before drop it (#11280)
---
.../update/DropEncryptRuleStatementUpdater.java | 14 ++++++++++--
.../DropEncryptRuleStatementUpdaterTest.java | 26 ++++++++++++++++++++--
...DropReadwriteSplittingRuleStatementUpdater.java | 8 ++++++-
...ReadwriteSplittingRuleStatementUpdaterTest.java | 25 +++++++++++++++++++--
4 files changed, 66 insertions(+), 7 deletions(-)
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleStatementUpdater.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleStatementUpdater.java
index c371ebf..919439c 100644
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleStatementUpdater.java
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleStatementUpdater.java
@@ -21,9 +21,9 @@ import com.google.common.base.Preconditions;
import org.apache.shardingsphere.encrypt.api.config.EncryptRuleConfiguration;
import
org.apache.shardingsphere.encrypt.api.config.rule.EncryptTableRuleConfiguration;
import
org.apache.shardingsphere.encrypt.distsql.parser.statement.DropEncryptRuleStatement;
-import
org.apache.shardingsphere.infra.distsql.update.RuleDefinitionDropUpdater;
import
org.apache.shardingsphere.infra.distsql.exception.rule.RequiredRuleMissedException;
import
org.apache.shardingsphere.infra.distsql.exception.rule.RuleDefinitionViolationException;
+import
org.apache.shardingsphere.infra.distsql.update.RuleDefinitionDropUpdater;
import
org.apache.shardingsphere.infra.metadata.resource.ShardingSphereResource;
import java.util.Collection;
@@ -69,7 +69,17 @@ public final class DropEncryptRuleStatementUpdater
implements RuleDefinitionDrop
Optional<EncryptTableRuleConfiguration> encryptTableRuleConfig =
currentRuleConfig.getTables().stream().filter(tableRule ->
tableRule.getName().equals(ruleName)).findAny();
Preconditions.checkState(encryptTableRuleConfig.isPresent());
currentRuleConfig.getTables().remove(encryptTableRuleConfig.get());
- encryptTableRuleConfig.get().getColumns().forEach(column ->
currentRuleConfig.getEncryptors().remove(column.getEncryptorName()));
+ encryptTableRuleConfig.get().getColumns().stream().filter(column ->
!isEncryptorInUse(currentRuleConfig, column.getEncryptorName()))
+ .forEach(column ->
currentRuleConfig.getEncryptors().remove(column.getEncryptorName()));
+ }
+
+ private boolean isEncryptorInUse(final EncryptRuleConfiguration
currentRuleConfig, final String toBeDroppedEncryptorName) {
+ for (EncryptTableRuleConfiguration encryptTableRuleConfiguration :
currentRuleConfig.getTables()) {
+ if
(encryptTableRuleConfiguration.getColumns().stream().filter(column ->
column.getEncryptorName().equals(toBeDroppedEncryptorName)).findAny().isPresent())
{
+ return true;
+ }
+ }
+ return false;
}
@Override
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleStatementUpdaterTest.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleStatementUpdaterTest.java
index 35a2fc1..78ca07e 100644
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleStatementUpdaterTest.java
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleStatementUpdaterTest.java
@@ -27,12 +27,17 @@ import
org.apache.shardingsphere.infra.distsql.exception.rule.RuleDefinitionViol
import
org.apache.shardingsphere.infra.metadata.resource.ShardingSphereResource;
import org.junit.Test;
+import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Properties;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.hamcrest.CoreMatchers.is;
import static org.mockito.Mockito.mock;
public final class DropEncryptRuleStatementUpdaterTest {
@@ -51,8 +56,16 @@ public final class DropEncryptRuleStatementUpdaterTest {
@Test
public void assertUpdateCurrentRuleConfiguration() {
- updater.updateCurrentRuleConfiguration(createSQLStatement(),
createCurrentRuleConfiguration());
- // TODO assert current rule configuration
+ EncryptRuleConfiguration encryptRuleConfiguration =
createCurrentRuleConfiguration();
+
assertTrue(updater.updateCurrentRuleConfiguration(createSQLStatement(),
encryptRuleConfiguration));
+ assertTrue(encryptRuleConfiguration.getEncryptors().isEmpty());
+ }
+
+ @Test
+ public void assertUpdateCurrentRuleConfigurationWithInUsedEncryptor() {
+ EncryptRuleConfiguration encryptRuleConfiguration =
createCurrentRuleConfigurationWithMultipleTableRules();
+
assertFalse(updater.updateCurrentRuleConfiguration(createSQLStatement(),
encryptRuleConfiguration));
+ assertThat(encryptRuleConfiguration.getEncryptors().size(), is(1));
}
private DropEncryptRuleStatement createSQLStatement() {
@@ -66,4 +79,13 @@ public final class DropEncryptRuleStatementUpdaterTest {
encryptors.put("t_encrypt_user_id_MD5", new
ShardingSphereAlgorithmConfiguration("TEST", new Properties()));
return new EncryptRuleConfiguration(new
LinkedList<>(Collections.singleton(tableRuleConfig)), encryptors, true);
}
+
+ private EncryptRuleConfiguration
createCurrentRuleConfigurationWithMultipleTableRules() {
+ EncryptColumnRuleConfiguration columnRuleConfig = new
EncryptColumnRuleConfiguration("user_id", "user_cipher", "", "user_plain",
"t_encrypt_user_id_MD5");
+ EncryptTableRuleConfiguration tableRuleConfig = new
EncryptTableRuleConfiguration("t_encrypt",
Collections.singleton(columnRuleConfig));
+ Map<String, ShardingSphereAlgorithmConfiguration> encryptors = new
HashMap<>(1, 1);
+ encryptors.put("t_encrypt_user_id_MD5", new
ShardingSphereAlgorithmConfiguration("TEST", new Properties()));
+ return new EncryptRuleConfiguration(new
LinkedList<>(Arrays.asList(tableRuleConfig,
+ new EncryptTableRuleConfiguration("t_encrypt_another",
Collections.singleton(columnRuleConfig)))), encryptors, true);
+ }
}
diff --git
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleStatementUpdater.java
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/main/java/org/apache/shardingsphere/re
[...]
index 3cc40e3..045a392 100644
---
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleStatementUpdater.java
+++
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleStatementUpdater.java
@@ -70,7 +70,13 @@ public final class
DropReadwriteSplittingRuleStatementUpdater implements RuleDef
=
currentRuleConfig.getDataSources().stream().filter(dataSource ->
ruleName.equals(dataSource.getName())).findAny();
Preconditions.checkState(dataSourceRuleConfig.isPresent());
currentRuleConfig.getDataSources().remove(dataSourceRuleConfig.get());
-
currentRuleConfig.getLoadBalancers().remove(dataSourceRuleConfig.get().getLoadBalancerName());
+ if (isLoadBalancerNotInUse(currentRuleConfig,
dataSourceRuleConfig.get().getLoadBalancerName())) {
+
currentRuleConfig.getLoadBalancers().remove(dataSourceRuleConfig.get().getLoadBalancerName());
+ }
+ }
+
+ private boolean isLoadBalancerNotInUse(final
ReadwriteSplittingRuleConfiguration currentRuleConfig, final String
toBeDroppedLoadBalancerName) {
+ return !currentRuleConfig.getDataSources().stream().filter(each ->
each.getLoadBalancerName().equals(toBeDroppedLoadBalancerName)).findAny().isPresent();
}
@Override
diff --git
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleStatementUpdaterTest.java
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingspher
[...]
index 20b6af1..e40aa21 100644
---
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleStatementUpdaterTest.java
+++
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleStatementUpdaterTest.java
@@ -26,12 +26,17 @@ import
org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingD
import
org.apache.shardingsphere.readwritesplitting.distsql.parser.statement.DropReadwriteSplittingRuleStatement;
import org.junit.Test;
+import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Properties;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
public final class DropReadwriteSplittingRuleStatementUpdaterTest {
@@ -50,8 +55,16 @@ public final class
DropReadwriteSplittingRuleStatementUpdaterTest {
@Test
public void assertUpdateCurrentRuleConfiguration() {
- updater.updateCurrentRuleConfiguration(createSQLStatement(),
createCurrentRuleConfiguration());
- // TODO assert current rule configuration
+ ReadwriteSplittingRuleConfiguration
readwriteSplittingRuleConfiguration = createCurrentRuleConfiguration();
+
assertTrue(updater.updateCurrentRuleConfiguration(createSQLStatement(),
readwriteSplittingRuleConfiguration));
+
assertThat(readwriteSplittingRuleConfiguration.getLoadBalancers().size(),
is(1));
+ }
+
+ @Test
+ public void assertUpdateCurrentRuleConfigurationWithInUsedLoadBalancer() {
+ ReadwriteSplittingRuleConfiguration
readwriteSplittingRuleConfiguration = createMultipleCurrentRuleConfigurations();
+
assertFalse(updater.updateCurrentRuleConfiguration(createSQLStatement(),
readwriteSplittingRuleConfiguration));
+
assertThat(readwriteSplittingRuleConfiguration.getLoadBalancers().size(),
is(1));
}
private DropReadwriteSplittingRuleStatement createSQLStatement() {
@@ -64,4 +77,12 @@ public final class
DropReadwriteSplittingRuleStatementUpdaterTest {
ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig =
new ReadwriteSplittingDataSourceRuleConfiguration("readwrite_ds", null, null,
null, "TEST");
return new ReadwriteSplittingRuleConfiguration(new
LinkedList<>(Collections.singleton(dataSourceRuleConfig)), loadBalancers);
}
+
+ private ReadwriteSplittingRuleConfiguration
createMultipleCurrentRuleConfigurations() {
+ Map<String, ShardingSphereAlgorithmConfiguration> loadBalancers = new
HashMap<>(1, 1);
+ loadBalancers.put("readwrite_ds", new
ShardingSphereAlgorithmConfiguration("TEST", new Properties()));
+ ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig =
new ReadwriteSplittingDataSourceRuleConfiguration("readwrite_ds", null, null,
null, "TEST");
+ return new ReadwriteSplittingRuleConfiguration(new
LinkedList<>(Arrays.asList(dataSourceRuleConfig,
+ new
ReadwriteSplittingDataSourceRuleConfiguration("readwrite_ds_another", null,
null, null, "TEST"))), loadBalancers);
+ }
}