This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 189647b72e3 Fix miss sharding rule problem when use Standalone mode
(#29326)
189647b72e3 is described below
commit 189647b72e3d19509921bbc7ee6d2e9693402bb5
Author: zhaojinchao <[email protected]>
AuthorDate: Sun Dec 10 09:38:07 2023 +0800
Fix miss sharding rule problem when use Standalone mode (#29326)
* Fix miss sharding rule problem when use Standalone mode
* Fix spotless
---
.../infra/metadata/version/MetaDataVersion.java | 20 ++++++++++++++++
.../database/DatabaseBasedPersistService.java | 4 +++-
.../NewDataSourceNodePersistService.java | 11 +++++----
.../NewDataSourceUnitPersistService.java | 11 +++++----
.../rule/NewDatabaseRulePersistService.java | 18 +++++++++-----
.../schema/NewTableMetaDataPersistService.java | 3 +--
.../builder}/RuleConfigurationEventBuilder.java | 2 +-
.../NewConfigurationChangedSubscriber.java | 2 +-
.../cluster/NewClusterModeContextManager.java | 4 ++--
.../watcher/NewMetaDataChangedWatcher.java | 1 +
.../NewContextManagerSubscriberFacade.java | 1 +
.../NewStandaloneContextManagerBuilder.java | 8 +++++++
.../NewStandaloneModeContextManager.java | 28 ++++++++++++++++++----
13 files changed, 87 insertions(+), 26 deletions(-)
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/version/MetaDataVersion.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/version/MetaDataVersion.java
index 0dfe1c219eb..15b54c364a0 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/version/MetaDataVersion.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/version/MetaDataVersion.java
@@ -20,6 +20,9 @@ package org.apache.shardingsphere.infra.metadata.version;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
+import java.util.Arrays;
+import java.util.Collection;
+
/**
* Meta data version.
*/
@@ -27,9 +30,26 @@ import lombok.RequiredArgsConstructor;
@Getter
public final class MetaDataVersion {
+ private static final String ACTIVE_VERSION = "active_version";
+
private final String key;
private final String currentActiveVersion;
private final String nextActiveVersion;
+
+ public MetaDataVersion(final String key) {
+ this.key = key;
+ this.currentActiveVersion = "";
+ this.nextActiveVersion = "";
+ }
+
+ /**
+ * Get active version keys.
+ *
+ * @return active version keys
+ */
+ public Collection<String> getActiveVersionKeys() {
+ return Arrays.asList(String.join("/", key, ACTIVE_VERSION),
String.join("/", key, ACTIVE_VERSION, currentActiveVersion));
+ }
}
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseBasedPersistService.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseBasedPersistService.java
index 03411991926..82a6ebba11a 100644
---
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseBasedPersistService.java
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseBasedPersistService.java
@@ -72,8 +72,10 @@ public interface DatabaseBasedPersistService<T> {
*
* @param databaseName database name
* @param configs configurations
+ * @return meta data versions
*/
- default void delete(String databaseName, T configs) {
+ default Collection<MetaDataVersion> deleteConfig(String databaseName, T
configs) {
+ return Collections.emptyList();
}
/**
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/datasource/NewDataSourceNodePersistService.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/datasource/NewDataSourceNodePersistService.java
index 03b716ffee0..3cb906cfd42 100644
---
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/datasource/NewDataSourceNodePersistService.java
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/datasource/NewDataSourceNodePersistService.java
@@ -60,10 +60,14 @@ public final class NewDataSourceNodePersistService
implements DatabaseBasedPersi
}
@Override
- public void delete(final String databaseName, final Map<String,
DataSourcePoolProperties> dataSourceConfigs) {
+ public Collection<MetaDataVersion> deleteConfig(final String databaseName,
final Map<String, DataSourcePoolProperties> dataSourceConfigs) {
+ Collection<MetaDataVersion> result = new LinkedList<>();
for (Entry<String, DataSourcePoolProperties> entry :
dataSourceConfigs.entrySet()) {
-
repository.delete(NewDatabaseMetaDataNode.getDataSourceNode(databaseName,
entry.getKey()));
+ String delKey =
NewDatabaseMetaDataNode.getDataSourceNode(databaseName, entry.getKey());
+ repository.delete(delKey);
+ result.add(new MetaDataVersion(delKey));
}
+ return result;
}
@Override
@@ -77,8 +81,7 @@ public final class NewDataSourceNodePersistService implements
DatabaseBasedPersi
if (Strings.isNullOrEmpty(getDataSourceActiveVersion(databaseName,
entry.getKey()))) {
repository.persist(NewDatabaseMetaDataNode.getDataSourceNodeActiveVersionNode(databaseName,
entry.getKey()), DEFAULT_VERSION);
}
- result.add(new
MetaDataVersion(NewDatabaseMetaDataNode.getDataSourceNode(databaseName,
entry.getKey()),
- getDataSourceActiveVersion(databaseName, entry.getKey()),
nextActiveVersion));
+ result.add(new
MetaDataVersion(NewDatabaseMetaDataNode.getDataSourceNode(databaseName,
entry.getKey()), getDataSourceActiveVersion(databaseName, entry.getKey()),
nextActiveVersion));
}
return result;
}
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/datasource/NewDataSourceUnitPersistService.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/datasource/NewDataSourceUnitPersistService.java
index eac8654fe27..98c5c6946a3 100644
---
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/datasource/NewDataSourceUnitPersistService.java
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/datasource/NewDataSourceUnitPersistService.java
@@ -60,10 +60,14 @@ public final class NewDataSourceUnitPersistService
implements DatabaseBasedPersi
}
@Override
- public void delete(final String databaseName, final Map<String,
DataSourcePoolProperties> dataSourceConfigs) {
+ public Collection<MetaDataVersion> deleteConfig(final String databaseName,
final Map<String, DataSourcePoolProperties> dataSourceConfigs) {
+ Collection<MetaDataVersion> result = new LinkedList<>();
for (Entry<String, DataSourcePoolProperties> entry :
dataSourceConfigs.entrySet()) {
-
repository.delete(NewDatabaseMetaDataNode.getDataSourceUnitNode(databaseName,
entry.getKey()));
+ String delKey =
NewDatabaseMetaDataNode.getDataSourceUnitNode(databaseName, entry.getKey());
+ repository.delete(delKey);
+ result.add(new MetaDataVersion(delKey));
}
+ return result;
}
@Override
@@ -77,8 +81,7 @@ public final class NewDataSourceUnitPersistService implements
DatabaseBasedPersi
if (Strings.isNullOrEmpty(getDataSourceActiveVersion(databaseName,
entry.getKey()))) {
repository.persist(NewDatabaseMetaDataNode.getDataSourceUnitActiveVersionNode(databaseName,
entry.getKey()), DEFAULT_VERSION);
}
- result.add(new
MetaDataVersion(NewDatabaseMetaDataNode.getDataSourceUnitNode(databaseName,
entry.getKey()),
- getDataSourceActiveVersion(databaseName, entry.getKey()),
nextActiveVersion));
+ result.add(new
MetaDataVersion(NewDatabaseMetaDataNode.getDataSourceUnitNode(databaseName,
entry.getKey()), getDataSourceActiveVersion(databaseName, entry.getKey()),
nextActiveVersion));
}
return result;
}
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/rule/NewDatabaseRulePersistService.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/rule/NewDatabaseRulePersistService.java
index d20ca2a1394..4911c473d71 100644
---
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/rule/NewDatabaseRulePersistService.java
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/rule/NewDatabaseRulePersistService.java
@@ -98,17 +98,19 @@ public final class NewDatabaseRulePersistService extends
AbstractPersistService
@SuppressWarnings({"unchecked", "rawtypes"})
@Override
- public void delete(final String databaseName, final
Collection<RuleConfiguration> configs) {
+ public Collection<MetaDataVersion> deleteConfig(final String databaseName,
final Collection<RuleConfiguration> configs) {
+ Collection<MetaDataVersion> result = new LinkedList<>();
Map<RuleConfiguration, NewYamlRuleConfigurationSwapper> yamlConfigs =
new
NewYamlRuleConfigurationSwapperEngine().swapToYamlRuleConfigurations(configs);
for (Entry<RuleConfiguration, NewYamlRuleConfigurationSwapper> entry :
yamlConfigs.entrySet()) {
Collection<YamlDataNode> dataNodes =
entry.getValue().swapToDataNodes(entry.getKey());
if (dataNodes.isEmpty()) {
continue;
}
- List<YamlDataNode> result = new LinkedList<>(dataNodes);
- Collections.reverse(result);
- deleteDataNodes(databaseName,
entry.getValue().getRuleTagName().toLowerCase(), result);
+ List<YamlDataNode> newDataNodes = new LinkedList<>(dataNodes);
+ Collections.reverse(newDataNodes);
+ result.addAll(deleteDataNodes(databaseName,
entry.getValue().getRuleTagName().toLowerCase(), newDataNodes));
}
+ return result;
}
@Override
@@ -116,10 +118,14 @@ public final class NewDatabaseRulePersistService extends
AbstractPersistService
repository.delete(NewDatabaseMetaDataNode.getDatabaseRuleNode(databaseName,
ruleName));
}
- private void deleteDataNodes(final String databaseName, final String
ruleName, final Collection<YamlDataNode> dataNodes) {
+ private Collection<MetaDataVersion> deleteDataNodes(final String
databaseName, final String ruleName, final Collection<YamlDataNode> dataNodes) {
+ Collection<MetaDataVersion> result = new LinkedList<>();
for (YamlDataNode each : dataNodes) {
-
repository.delete(NewDatabaseMetaDataNode.getDatabaseRuleNode(databaseName,
ruleName, each.getKey()));
+ String delKey =
NewDatabaseMetaDataNode.getDatabaseRuleNode(databaseName, ruleName,
each.getKey());
+ repository.delete(delKey);
+ result.add(new MetaDataVersion(delKey));
}
+ return result;
}
@Override
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/schema/NewTableMetaDataPersistService.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/schema/NewTableMetaDataPersistService.java
index ea454839797..a0911e21b55 100644
---
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/schema/NewTableMetaDataPersistService.java
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/schema/NewTableMetaDataPersistService.java
@@ -73,8 +73,7 @@ public final class NewTableMetaDataPersistService implements
SchemaMetaDataPersi
if (Strings.isNullOrEmpty(getActiveVersion(databaseName,
schemaName, tableName))) {
repository.persist(NewDatabaseMetaDataNode.getTableActiveVersionNode(databaseName,
schemaName, tableName), DEFAULT_VERSION);
}
- result.add(new
MetaDataVersion(NewDatabaseMetaDataNode.getTableNode(databaseName, schemaName,
tableName),
- getActiveVersion(databaseName, schemaName, tableName),
nextActiveVersion));
+ result.add(new
MetaDataVersion(NewDatabaseMetaDataNode.getTableNode(databaseName, schemaName,
tableName), getActiveVersion(databaseName, schemaName, tableName),
nextActiveVersion));
}
return result;
}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/RuleConfigurationEventBuilder.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/builder/RuleConfigurationEventBuilder.java
similarity index 97%
rename from
mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/RuleConfigurationEventBuilder.java
rename to
mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/builder/RuleConfigurationEventBuilder.java
index 474d8f9cf02..a804671849d 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/RuleConfigurationEventBuilder.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/builder/RuleConfigurationEventBuilder.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.metadata.watcher;
+package org.apache.shardingsphere.mode.metadata.builder;
import com.google.common.base.Strings;
import org.apache.shardingsphere.mode.path.RuleNodePath;
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewConfigurationChangedSubscriber.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/subsciber/NewConfigurationChangedSubscriber.java
similarity index 98%
rename from
mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewConfigurationChangedSubscriber.java
rename to
mode/core/src/main/java/org/apache/shardingsphere/mode/subsciber/NewConfigurationChangedSubscriber.java
index 349542fc3d6..bdc49618922 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewConfigurationChangedSubscriber.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/subsciber/NewConfigurationChangedSubscriber.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.mode.manager.cluster.coordinator.subscriber;
+package org.apache.shardingsphere.mode.subsciber;
import com.google.common.eventbus.Subscribe;
import
org.apache.shardingsphere.mode.event.config.AlterDatabaseRuleConfigurationEvent;
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/NewClusterModeContextManager.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/NewClusterModeContextManager.java
index c5bc6037617..306730e536e 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/NewClusterModeContextManager.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/NewClusterModeContextManager.java
@@ -110,7 +110,7 @@ public final class NewClusterModeContextManager implements
ModeContextManager, C
@Override
public void unregisterStorageUnits(final String databaseName, final
Collection<String> toBeDroppedStorageUnitNames) {
-
contextManager.getMetaDataContexts().getPersistService().getDataSourceUnitService().delete(databaseName,
+
contextManager.getMetaDataContexts().getPersistService().getDataSourceUnitService().deleteConfig(databaseName,
getToBeDroppedDataSourcePoolProperties(contextManager.getMetaDataContexts().getPersistService().getDataSourceUnitService().load(databaseName),
toBeDroppedStorageUnitNames));
}
@@ -142,7 +142,7 @@ public final class NewClusterModeContextManager implements
ModeContextManager, C
@Override
public void removeRuleConfigurationItem(final String databaseName, final
RuleConfiguration toBeRemovedRuleConfig) {
if (null != toBeRemovedRuleConfig) {
-
contextManager.getMetaDataContexts().getPersistService().getDatabaseRulePersistService().delete(databaseName,
Collections.singleton(toBeRemovedRuleConfig));
+
contextManager.getMetaDataContexts().getPersistService().getDatabaseRulePersistService().deleteConfig(databaseName,
Collections.singleton(toBeRemovedRuleConfig));
}
}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/NewMetaDataChangedWatcher.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/NewMetaDataChangedWatcher.java
index ebb5fcbbb24..ed5c1d9e84c 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/NewMetaDataChangedWatcher.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/NewMetaDataChangedWatcher.java
@@ -38,6 +38,7 @@ import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.metad
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.metadata.event.DatabaseDeletedEvent;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.metadata.event.SchemaAddedEvent;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.metadata.event.SchemaDeletedEvent;
+import
org.apache.shardingsphere.mode.metadata.builder.RuleConfigurationEventBuilder;
import java.util.Arrays;
import java.util.Collection;
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewContextManagerSubscriberFacade.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewContextManagerSubscriberFacade.java
index 169b7221e15..b59bc752e4a 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewContextManagerSubscriberFacade.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewContextManagerSubscriberFacade.java
@@ -20,6 +20,7 @@ package
org.apache.shardingsphere.mode.manager.cluster.coordinator.subscriber;
import org.apache.shardingsphere.mode.manager.ContextManager;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.NewRegistryCenter;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.process.subscriber.NewProcessListChangedSubscriber;
+import
org.apache.shardingsphere.mode.subsciber.NewConfigurationChangedSubscriber;
/**
* TODO replace the old implementation after meta data refactor completed
diff --git
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/NewStandaloneContextManagerBuilder.java
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/NewStandaloneContextManagerBuilder.java
index eeb80576e06..53603441d0c 100644
---
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/NewStandaloneContextManagerBuilder.java
+++
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/NewStandaloneContextManagerBuilder.java
@@ -32,6 +32,8 @@ import
org.apache.shardingsphere.mode.manager.standalone.workerid.generator.Stan
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.mode.metadata.NewMetaDataContextsFactory;
import
org.apache.shardingsphere.mode.repository.standalone.StandalonePersistRepository;
+import
org.apache.shardingsphere.mode.subsciber.NewConfigurationChangedSubscriber;
+import org.apache.shardingsphere.mode.subsciber.RuleItemChangedSubscriber;
import java.sql.SQLException;
import java.util.Properties;
@@ -52,6 +54,7 @@ public final class NewStandaloneContextManagerBuilder
implements ContextManagerB
new StandaloneProcessSubscriber(instanceContext.getEventBusContext());
MetaDataContexts metaDataContexts =
NewMetaDataContextsFactory.create(persistService, param, instanceContext);
ContextManager result = new ContextManager(metaDataContexts,
instanceContext);
+ registerSubscriber(result);
setContextManagerAware(result);
return result;
}
@@ -61,6 +64,11 @@ public final class NewStandaloneContextManagerBuilder
implements ContextManagerB
new StandaloneWorkerIdGenerator(),
param.getModeConfiguration(), new NewStandaloneModeContextManager(), new
GlobalLockContext(null), new EventBusContext());
}
+ private void registerSubscriber(final ContextManager contextManager) {
+ contextManager.getInstanceContext().getEventBusContext().register(new
RuleItemChangedSubscriber(contextManager));
+ new NewConfigurationChangedSubscriber(contextManager);
+ }
+
private void setContextManagerAware(final ContextManager contextManager) {
((NewStandaloneModeContextManager)
contextManager.getInstanceContext().getModeContextManager()).setContextManagerAware(contextManager);
}
diff --git
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/NewStandaloneModeContextManager.java
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/NewStandaloneModeContextManager.java
index cdd94a83b68..ffe378f9550 100644
---
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/NewStandaloneModeContextManager.java
+++
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/NewStandaloneModeContextManager.java
@@ -35,11 +35,14 @@ import
org.apache.shardingsphere.infra.rule.identifier.type.TableContainedRule;
import
org.apache.shardingsphere.infra.spi.type.ordered.cache.OrderedServicesCache;
import
org.apache.shardingsphere.metadata.persist.service.config.global.GlobalPersistService;
import
org.apache.shardingsphere.metadata.persist.service.database.DatabaseMetaDataBasedPersistService;
+import org.apache.shardingsphere.mode.event.DataChangedEvent;
+import org.apache.shardingsphere.mode.event.DataChangedEvent.Type;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.mode.manager.ContextManagerAware;
import
org.apache.shardingsphere.mode.manager.switcher.NewResourceSwitchManager;
import org.apache.shardingsphere.mode.manager.switcher.SwitchingResource;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
+import
org.apache.shardingsphere.mode.metadata.builder.RuleConfigurationEventBuilder;
import java.sql.SQLException;
import java.util.Collection;
@@ -57,6 +60,8 @@ import java.util.stream.Collectors;
*/
public final class NewStandaloneModeContextManager implements
ModeContextManager, ContextManagerAware {
+ private final RuleConfigurationEventBuilder ruleConfigurationEventBuilder
= new RuleConfigurationEventBuilder();
+
private ContextManager contextManager;
@Override
@@ -260,19 +265,32 @@ public final class NewStandaloneModeContextManager
implements ModeContextManager
@Override
public Collection<MetaDataVersion> alterRuleConfiguration(final String
databaseName, final RuleConfiguration toBeAlteredRuleConfig) {
if (null != toBeAlteredRuleConfig) {
-
contextManager.getConfigurationContextManager().alterRuleConfiguration(databaseName,
Collections.singletonList(toBeAlteredRuleConfig));
- contextManager.getMetaDataContexts().getPersistService()
-
.getDatabaseRulePersistService().persist(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getName(),
Collections.singletonList(toBeAlteredRuleConfig));
+ sendDatabaseRuleChangedEvent(databaseName,
+
contextManager.getMetaDataContexts().getPersistService().getDatabaseRulePersistService()
+
.persistConfig(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getName(),
Collections.singletonList(toBeAlteredRuleConfig)));
clearServiceCache();
}
return Collections.emptyList();
}
+ private void sendDatabaseRuleChangedEvent(final String databaseName, final
Collection<MetaDataVersion> metaDataVersions) {
+ for (MetaDataVersion each : metaDataVersions) {
+ sendDatabaseRuleChangedEvent(databaseName, each);
+ }
+ }
+
+ private void sendDatabaseRuleChangedEvent(final String databaseName, final
MetaDataVersion metaDataVersion) {
+ for (String each : metaDataVersion.getActiveVersionKeys()) {
+ ruleConfigurationEventBuilder.build(databaseName, new
DataChangedEvent(each, metaDataVersion.getCurrentActiveVersion(), Type.UPDATED))
+ .ifPresent(optional ->
contextManager.getInstanceContext().getEventBusContext().post(optional));
+ }
+ }
+
@Override
public void removeRuleConfigurationItem(final String databaseName, final
RuleConfiguration toBeRemovedRuleConfig) {
if (null != toBeRemovedRuleConfig) {
-
contextManager.getConfigurationContextManager().dropRuleConfiguration(databaseName,
toBeRemovedRuleConfig);
-
contextManager.getMetaDataContexts().getPersistService().getDatabaseRulePersistService().delete(databaseName,
Collections.singleton(toBeRemovedRuleConfig));
+ sendDatabaseRuleChangedEvent(databaseName,
+
contextManager.getMetaDataContexts().getPersistService().getDatabaseRulePersistService().deleteConfig(databaseName,
Collections.singleton(toBeRemovedRuleConfig)));
clearServiceCache();
}
}