You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2023/06/20 08:31:00 UTC
[shardingsphere] branch master updated: Add version to feature rule event. (#26452)
This is an automated email from the ASF dual-hosted git repository.
zhaojinchao 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 d0d9b5ac2bd Add version to feature rule event. (#26452)
d0d9b5ac2bd is described below
commit d0d9b5ac2bde6faf7f6d445fb0460cdaec8b9b3d
Author: Chuxin Chen <ch...@qq.com>
AuthorDate: Tue Jun 20 16:30:53 2023 +0800
Add version to feature rule event. (#26452)
---
.../BroadcastRuleConfigurationEventBuilder.java | 13 ++++++----
.../event/config/AddBroadcastTableEvent.java | 4 +++
.../event/config/AlterBroadcastTableEvent.java | 4 +++
.../event/config/DeleteBroadcastTableEvent.java | 4 +++
.../metadata/converter/BroadcastNodeConverter.java | 15 +++++++++++
.../BroadcastConfigurationSubscriber.java | 9 +++++++
.../coverter/BroadcastNodeConverterTest.java} | 30 ++++++++++++----------
.../encrypt/subscriber/EncryptorSubscriber.java | 6 +++++
8 files changed, 66 insertions(+), 19 deletions(-)
diff --git a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/event/BroadcastRuleConfigurationEventBuilder.java b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/event/BroadcastRuleConfigurationEventBuilder.java
index 523983b9e1a..88ac3987f18 100644
--- a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/event/BroadcastRuleConfigurationEventBuilder.java
+++ b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/event/BroadcastRuleConfigurationEventBuilder.java
@@ -43,19 +43,22 @@ public final class BroadcastRuleConfigurationEventBuilder implements RuleConfigu
return Optional.empty();
}
if (BroadcastNodeConverter.isTablesPath(event.getKey()) && !Strings.isNullOrEmpty(event.getValue())) {
- return createBroadcastConfigEvent(databaseName, event);
+ Optional<String> tablesVersion = BroadcastNodeConverter.getTablesVersion(event.getKey());
+ if (tablesVersion.isPresent()) {
+ return createBroadcastConfigEvent(databaseName, Integer.parseInt(tablesVersion.get()), event);
+ }
}
return Optional.empty();
}
- private Optional<GovernanceEvent> createBroadcastConfigEvent(final String databaseName, final DataChangedEvent event) {
+ private Optional<GovernanceEvent> createBroadcastConfigEvent(final String databaseName, final int version, final DataChangedEvent event) {
if (Type.ADDED == event.getType()) {
- return Optional.of(new AddBroadcastTableEvent(databaseName, swapBroadcastTableRuleConfig(event.getValue())));
+ return Optional.of(new AddBroadcastTableEvent(databaseName, swapBroadcastTableRuleConfig(event.getValue()), event.getKey(), version));
}
if (Type.UPDATED == event.getType()) {
- return Optional.of(new AlterBroadcastTableEvent(databaseName, swapBroadcastTableRuleConfig(event.getValue())));
+ return Optional.of(new AlterBroadcastTableEvent(databaseName, swapBroadcastTableRuleConfig(event.getValue()), event.getKey(), version));
}
- return Optional.of(new DeleteBroadcastTableEvent(databaseName));
+ return Optional.of(new DeleteBroadcastTableEvent(databaseName, event.getKey(), version));
}
private BroadcastRuleConfiguration swapBroadcastTableRuleConfig(final String yamlContext) {
diff --git a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/event/config/AddBroadcastTableEvent.java b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/event/config/AddBroadcastTableEvent.java
index 54a6508fe81..ce5be3d6e81 100644
--- a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/event/config/AddBroadcastTableEvent.java
+++ b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/event/config/AddBroadcastTableEvent.java
@@ -32,4 +32,8 @@ public final class AddBroadcastTableEvent implements GovernanceEvent {
private final String databaseName;
private final BroadcastRuleConfiguration config;
+
+ private final String versionKey;
+
+ private final int version;
}
diff --git a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/event/config/AlterBroadcastTableEvent.java b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/event/config/AlterBroadcastTableEvent.java
index 626c8749c48..998e9536472 100644
--- a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/event/config/AlterBroadcastTableEvent.java
+++ b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/event/config/AlterBroadcastTableEvent.java
@@ -32,4 +32,8 @@ public final class AlterBroadcastTableEvent implements GovernanceEvent {
private final String databaseName;
private final BroadcastRuleConfiguration config;
+
+ private final String versionKey;
+
+ private final int version;
}
diff --git a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/event/config/DeleteBroadcastTableEvent.java b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/event/config/DeleteBroadcastTableEvent.java
index bd624005d20..09132477652 100644
--- a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/event/config/DeleteBroadcastTableEvent.java
+++ b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/event/config/DeleteBroadcastTableEvent.java
@@ -29,4 +29,8 @@ import org.apache.shardingsphere.infra.rule.event.GovernanceEvent;
public final class DeleteBroadcastTableEvent implements GovernanceEvent {
private final String databaseName;
+
+ private final String versionKey;
+
+ private final int version;
}
diff --git a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/metadata/converter/BroadcastNodeConverter.java b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/metadata/converter/BroadcastNodeConverter.java
index 78efb88b514..3f2e6dbdeee 100644
--- a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/metadata/converter/BroadcastNodeConverter.java
+++ b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/metadata/converter/BroadcastNodeConverter.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.broadcast.metadata.converter;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
+import java.util.Optional;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -37,6 +38,8 @@ public final class BroadcastNodeConverter {
private static final String VERSION_PATTERN = "/versions/[0-9]+";
+ private static final String VERSION_PATH = "/versions/([0-9]+)";
+
/**
* Get tables path.
*
@@ -69,4 +72,16 @@ public final class BroadcastNodeConverter {
Matcher matcher = pattern.matcher(rulePath);
return matcher.find();
}
+
+ /**
+ * Get tables version.
+ *
+ * @param rulePath rule path
+ * @return tables version
+ */
+ public static Optional<String> getTablesVersion(final String rulePath) {
+ Pattern pattern = Pattern.compile(RULES_NODE_PREFIX + ROOT_NODE + "/" + TABLES_NODE + VERSION_PATH, Pattern.CASE_INSENSITIVE);
+ Matcher matcher = pattern.matcher(rulePath);
+ return matcher.find() ? Optional.of(matcher.group(3)) : Optional.empty();
+ }
}
diff --git a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/subscriber/BroadcastConfigurationSubscriber.java b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/subscriber/BroadcastConfigurationSubscriber.java
index b5789233479..3180c28f8c5 100644
--- a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/subscriber/BroadcastConfigurationSubscriber.java
+++ b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/subscriber/BroadcastConfigurationSubscriber.java
@@ -57,6 +57,9 @@ public final class BroadcastConfigurationSubscriber implements RuleConfiguration
*/
@Subscribe
public synchronized void renew(final AddBroadcastTableEvent event) {
+ if (event.getVersion() < instanceContext.getModeContextManager().getActiveVersionByKey(event.getVersionKey())) {
+ return;
+ }
ShardingSphereDatabase database = databases.get(event.getDatabaseName());
BroadcastRuleConfiguration needToAddedConfig = event.getConfig();
Optional<BroadcastRule> rule = database.getRuleMetaData().findSingleRule(BroadcastRule.class);
@@ -78,6 +81,9 @@ public final class BroadcastConfigurationSubscriber implements RuleConfiguration
*/
@Subscribe
public synchronized void renew(final AlterBroadcastTableEvent event) {
+ if (event.getVersion() < instanceContext.getModeContextManager().getActiveVersionByKey(event.getVersionKey())) {
+ return;
+ }
ShardingSphereDatabase database = databases.get(event.getDatabaseName());
BroadcastRuleConfiguration needToAlteredConfig = event.getConfig();
BroadcastRuleConfiguration config = database.getRuleMetaData().getSingleRule(BroadcastRule.class).getConfiguration();
@@ -93,6 +99,9 @@ public final class BroadcastConfigurationSubscriber implements RuleConfiguration
*/
@Subscribe
public synchronized void renew(final DeleteBroadcastTableEvent event) {
+ if (event.getVersion() < instanceContext.getModeContextManager().getActiveVersionByKey(event.getVersionKey())) {
+ return;
+ }
ShardingSphereDatabase database = databases.get(event.getDatabaseName());
BroadcastRuleConfiguration config = database.getRuleMetaData().getSingleRule(BroadcastRule.class).getConfiguration();
config.getTables().clear();
diff --git a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/event/config/AddBroadcastTableEvent.java b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/metadata/coverter/BroadcastNodeConverterTest.java
similarity index 54%
copy from features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/event/config/AddBroadcastTableEvent.java
copy to features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/metadata/coverter/BroadcastNodeConverterTest.java
index 54a6508fe81..38cfd212f8f 100644
--- a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/event/config/AddBroadcastTableEvent.java
+++ b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/metadata/coverter/BroadcastNodeConverterTest.java
@@ -15,21 +15,23 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.broadcast.event.config;
+package org.apache.shardingsphere.broadcast.metadata.coverter;
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.broadcast.api.config.BroadcastRuleConfiguration;
-import org.apache.shardingsphere.infra.rule.event.GovernanceEvent;
+import org.apache.shardingsphere.broadcast.metadata.converter.BroadcastNodeConverter;
+import org.junit.jupiter.api.Test;
-/**
- * Add broadcast table event.
- */
-@RequiredArgsConstructor
-@Getter
-public final class AddBroadcastTableEvent implements GovernanceEvent {
-
- private final String databaseName;
+import java.util.Optional;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+class BroadcastNodeConverterTest {
- private final BroadcastRuleConfiguration config;
+ @Test
+ void assertGetTablesVersion() {
+ Optional<String> actual = BroadcastNodeConverter.getTablesVersion("/metadata/foo_db/rules/broadcast/tables/versions/1");
+ assertTrue(actual.isPresent());
+ assertThat(actual.get(), is("1"));
+ }
}
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/subscriber/EncryptorSubscriber.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/subscriber/EncryptorSubscriber.java
index aad6f95523d..c4b0bf2698f 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/subscriber/EncryptorSubscriber.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/subscriber/EncryptorSubscriber.java
@@ -55,6 +55,9 @@ public final class EncryptorSubscriber implements RuleConfigurationSubscribeCoor
*/
@Subscribe
public synchronized void renew(final AlterEncryptorEvent event) {
+ if (event.getVersion() < instanceContext.getModeContextManager().getActiveVersionByKey(event.getVersionKey())) {
+ return;
+ }
ShardingSphereDatabase database = databases.get(event.getDatabaseName());
EncryptRuleConfiguration config = (EncryptRuleConfiguration) database.getRuleMetaData().getSingleRule(EncryptRule.class).getConfiguration();
config.getEncryptors().put(event.getEncryptorName(), event.getConfig());
@@ -67,6 +70,9 @@ public final class EncryptorSubscriber implements RuleConfigurationSubscribeCoor
*/
@Subscribe
public synchronized void renew(final DeleteEncryptorEvent event) {
+ if (event.getVersion() < instanceContext.getModeContextManager().getActiveVersionByKey(event.getVersionKey())) {
+ return;
+ }
ShardingSphereDatabase database = databases.get(event.getDatabaseName());
EncryptRuleConfiguration config = (EncryptRuleConfiguration) database.getRuleMetaData().getSingleRule(EncryptRule.class).getConfiguration();
config.getEncryptors().remove(event.getEncryptorName());