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/24 13:13:38 UTC
[shardingsphere] branch master updated: Refactor single event & subscriber (#26480)
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 ffcd51c5692 Refactor single event & subscriber (#26480)
ffcd51c5692 is described below
commit ffcd51c5692e381b685f390628403b9a325df634
Author: ChenJiaHao <Pa...@163.com>
AuthorDate: Sat Jun 24 21:13:31 2023 +0800
Refactor single event & subscriber (#26480)
---
.../event/SingleRuleConfigurationEventBuilder.java | 19 +++----------------
.../single/event/config/AddSingleTableEvent.java | 5 +++--
.../single/event/config/AlterSingleTableEvent.java | 5 +++--
.../metadata/converter/SingleNodeConverter.java | 8 +++++---
.../subscriber/SingleConfigurationSubscriber.java | 18 ++++++++++++++++--
5 files changed, 30 insertions(+), 25 deletions(-)
diff --git a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/event/SingleRuleConfigurationEventBuilder.java b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/event/SingleRuleConfigurationEventBuilder.java
index b0a746176e4..69d9da5c3ea 100644
--- a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/event/SingleRuleConfigurationEventBuilder.java
+++ b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/event/SingleRuleConfigurationEventBuilder.java
@@ -19,16 +19,13 @@ package org.apache.shardingsphere.single.event;
import com.google.common.base.Strings;
import org.apache.shardingsphere.infra.rule.event.GovernanceEvent;
-import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
import org.apache.shardingsphere.mode.event.DataChangedEvent;
import org.apache.shardingsphere.mode.event.DataChangedEvent.Type;
import org.apache.shardingsphere.mode.spi.RuleConfigurationEventBuilder;
-import org.apache.shardingsphere.single.api.config.SingleRuleConfiguration;
import org.apache.shardingsphere.single.event.config.AddSingleTableEvent;
import org.apache.shardingsphere.single.event.config.AlterSingleTableEvent;
import org.apache.shardingsphere.single.event.config.DeleteSingleTableEvent;
import org.apache.shardingsphere.single.metadata.converter.SingleNodeConverter;
-import org.apache.shardingsphere.single.yaml.config.pojo.YamlSingleRuleConfiguration;
import java.util.Optional;
@@ -42,7 +39,7 @@ public final class SingleRuleConfigurationEventBuilder implements RuleConfigurat
if (!SingleNodeConverter.isSinglePath(event.getKey()) || Strings.isNullOrEmpty(event.getValue())) {
return Optional.empty();
}
- if (SingleNodeConverter.isTablesPath(event.getKey()) && !Strings.isNullOrEmpty(event.getValue())) {
+ if (SingleNodeConverter.isTablesActiveVersionPath(event.getKey()) && !Strings.isNullOrEmpty(event.getValue())) {
return createSingleConfigEvent(databaseName, event);
}
return Optional.empty();
@@ -50,21 +47,11 @@ public final class SingleRuleConfigurationEventBuilder implements RuleConfigurat
private Optional<GovernanceEvent> createSingleConfigEvent(final String databaseName, final DataChangedEvent event) {
if (Type.ADDED == event.getType()) {
- return Optional.of(new AddSingleTableEvent(databaseName, swapSingleTableRuleConfig(event.getValue())));
+ return Optional.of(new AddSingleTableEvent(databaseName, event.getKey(), event.getValue()));
}
if (Type.UPDATED == event.getType()) {
- return Optional.of(new AlterSingleTableEvent(databaseName, swapSingleTableRuleConfig(event.getValue())));
+ return Optional.of(new AlterSingleTableEvent(databaseName, event.getKey(), event.getValue()));
}
return Optional.of(new DeleteSingleTableEvent(databaseName));
}
-
- private SingleRuleConfiguration swapSingleTableRuleConfig(final String yamlContext) {
- SingleRuleConfiguration result = new SingleRuleConfiguration();
- YamlSingleRuleConfiguration yamlSingleRuleConfiguration = YamlEngine.unmarshal(yamlContext, YamlSingleRuleConfiguration.class);
- if (null != yamlSingleRuleConfiguration.getTables()) {
- result.getTables().addAll(yamlSingleRuleConfiguration.getTables());
- }
- result.setDefaultDataSource(yamlSingleRuleConfiguration.getDefaultDataSource());
- return result;
- }
}
diff --git a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/event/config/AddSingleTableEvent.java b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/event/config/AddSingleTableEvent.java
index 86591f2c0e8..9728b6663ed 100644
--- a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/event/config/AddSingleTableEvent.java
+++ b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/event/config/AddSingleTableEvent.java
@@ -20,7 +20,6 @@ package org.apache.shardingsphere.single.event.config;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.rule.event.GovernanceEvent;
-import org.apache.shardingsphere.single.api.config.SingleRuleConfiguration;
/**
* Add single table event.
@@ -31,5 +30,7 @@ public final class AddSingleTableEvent implements GovernanceEvent {
private final String databaseName;
- private final SingleRuleConfiguration config;
+ private final String activeVersionKey;
+
+ private final String activeVersion;
}
diff --git a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/event/config/AlterSingleTableEvent.java b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/event/config/AlterSingleTableEvent.java
index 19919b8decd..4241dc9ce41 100644
--- a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/event/config/AlterSingleTableEvent.java
+++ b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/event/config/AlterSingleTableEvent.java
@@ -20,7 +20,6 @@ package org.apache.shardingsphere.single.event.config;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.rule.event.GovernanceEvent;
-import org.apache.shardingsphere.single.api.config.SingleRuleConfiguration;
/**
* Alter single table event.
@@ -31,5 +30,7 @@ public final class AlterSingleTableEvent implements GovernanceEvent {
private final String databaseName;
- private final SingleRuleConfiguration config;
+ private final String activeVersionKey;
+
+ private final String activeVersion;
}
diff --git a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/metadata/converter/SingleNodeConverter.java b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/metadata/converter/SingleNodeConverter.java
index 37c001a237a..32fe7c9d4aa 100644
--- a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/metadata/converter/SingleNodeConverter.java
+++ b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/metadata/converter/SingleNodeConverter.java
@@ -37,6 +37,8 @@ public final class SingleNodeConverter {
private static final String VERSION_PATTERN = "/versions/\\d+";
+ private static final String RULE_ACTIVE_VERSION = "/active_version$";
+
/**
* Get tables path.
*
@@ -59,13 +61,13 @@ public final class SingleNodeConverter {
}
/**
- * Is tables path.
+ * Is tables active version path.
*
* @param rulePath rule path
* @return true or false
*/
- public static boolean isTablesPath(final String rulePath) {
- Pattern pattern = Pattern.compile(RULES_NODE_PREFIX + ROOT_NODE + "/" + TABLES_NODE + VERSION_PATTERN, Pattern.CASE_INSENSITIVE);
+ public static boolean isTablesActiveVersionPath(final String rulePath) {
+ Pattern pattern = Pattern.compile(RULES_NODE_PREFIX + ROOT_NODE + "/" + TABLES_NODE + RULE_ACTIVE_VERSION, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(rulePath);
return matcher.find();
}
diff --git a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/subscriber/SingleConfigurationSubscriber.java b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/subscriber/SingleConfigurationSubscriber.java
index 928f279282d..395acea2b22 100644
--- a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/subscriber/SingleConfigurationSubscriber.java
+++ b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/subscriber/SingleConfigurationSubscriber.java
@@ -22,12 +22,14 @@ import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.instance.InstanceContext;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.rule.RuleConfigurationSubscribeCoordinator;
+import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
import org.apache.shardingsphere.mode.event.config.DatabaseRuleConfigurationChangedEvent;
import org.apache.shardingsphere.single.api.config.SingleRuleConfiguration;
import org.apache.shardingsphere.single.event.config.AddSingleTableEvent;
import org.apache.shardingsphere.single.event.config.AlterSingleTableEvent;
import org.apache.shardingsphere.single.event.config.DeleteSingleTableEvent;
import org.apache.shardingsphere.single.rule.SingleRule;
+import org.apache.shardingsphere.single.yaml.config.pojo.YamlSingleRuleConfiguration;
import java.util.Map;
import java.util.Optional;
@@ -58,7 +60,8 @@ public final class SingleConfigurationSubscriber implements RuleConfigurationSub
@Subscribe
public synchronized void renew(final AddSingleTableEvent event) {
ShardingSphereDatabase database = databases.get(event.getDatabaseName());
- SingleRuleConfiguration needToAddedConfig = event.getConfig();
+ SingleRuleConfiguration needToAddedConfig = swapSingleTableRuleConfig(
+ instanceContext.getModeContextManager().getVersionPathByActiveVersionKey(event.getActiveVersionKey(), event.getActiveVersion()));
Optional<SingleRule> rule = database.getRuleMetaData().findSingleRule(SingleRule.class);
SingleRuleConfiguration config;
if (rule.isPresent()) {
@@ -79,7 +82,8 @@ public final class SingleConfigurationSubscriber implements RuleConfigurationSub
@Subscribe
public synchronized void renew(final AlterSingleTableEvent event) {
ShardingSphereDatabase database = databases.get(event.getDatabaseName());
- SingleRuleConfiguration needToAlteredConfig = event.getConfig();
+ SingleRuleConfiguration needToAlteredConfig = swapSingleTableRuleConfig(
+ instanceContext.getModeContextManager().getVersionPathByActiveVersionKey(event.getActiveVersionKey(), event.getActiveVersion()));
SingleRuleConfiguration config = database.getRuleMetaData().getSingleRule(SingleRule.class).getConfiguration();
config.setTables(needToAlteredConfig.getTables());
config.setDefaultDataSource(needToAlteredConfig.getDefaultDataSource().orElse(null));
@@ -99,4 +103,14 @@ public final class SingleConfigurationSubscriber implements RuleConfigurationSub
config.setDefaultDataSource(null);
instanceContext.getEventBusContext().post(new DatabaseRuleConfigurationChangedEvent(event.getDatabaseName(), config));
}
+
+ private SingleRuleConfiguration swapSingleTableRuleConfig(final String yamlContext) {
+ SingleRuleConfiguration result = new SingleRuleConfiguration();
+ YamlSingleRuleConfiguration yamlSingleRuleConfiguration = YamlEngine.unmarshal(yamlContext, YamlSingleRuleConfiguration.class);
+ if (null != yamlSingleRuleConfiguration.getTables()) {
+ result.getTables().addAll(yamlSingleRuleConfiguration.getTables());
+ }
+ result.setDefaultDataSource(yamlSingleRuleConfiguration.getDefaultDataSource());
+ return result;
+ }
}