This is an automated email from the ASF dual-hosted git repository.
tuichenchuxin 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 5e7e0524e78 Move refresh global rule and database rule to
ContextManager (#26440)
5e7e0524e78 is described below
commit 5e7e0524e78a4f32e03f7eb2ef9de0f8b779e4c5
Author: zhaojinchao <[email protected]>
AuthorDate: Tue Jun 20 14:06:57 2023 +0800
Move refresh global rule and database rule to ContextManager (#26440)
* Move refresh new metadata to ContextManager
* Fix ci
---
.../infra/metadata/version/MetaDataVersion.java | 2 +
.../schema/NewTableMetaDataPersistService.java | 23 ++++++
.../schema/NewViewMetaDataPersistService.java | 25 ++++++
.../schema/SchemaMetaDataPersistService.java | 14 ++++
.../schema/TableMetaDataPersistService.java | 7 ++
.../service/schema/ViewMetaDataPersistService.java | 7 ++
.../mode/manager/ContextManager.java | 89 ++++++++++++++++++++++
.../NewConfigurationChangedSubscriber.java | 37 +--------
8 files changed, 170 insertions(+), 34 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 ab62861af65..da264a93aaf 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
@@ -17,11 +17,13 @@
package org.apache.shardingsphere.infra.metadata.version;
+import lombok.Getter;
import lombok.RequiredArgsConstructor;
/**
* Meta data version.
*/
+@Getter
@RequiredArgsConstructor
public final class MetaDataVersion {
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 5d0ed10ee40..e517d32a559 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
@@ -20,6 +20,7 @@ package
org.apache.shardingsphere.metadata.persist.service.schema;
import com.google.common.base.Strings;
import lombok.RequiredArgsConstructor;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
+import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
import
org.apache.shardingsphere.infra.yaml.schema.pojo.YamlShardingSphereTable;
import org.apache.shardingsphere.infra.yaml.schema.swapper.YamlTableSwapper;
@@ -30,6 +31,7 @@ import org.apache.shardingsphere.mode.spi.PersistRepository;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
+import java.util.LinkedList;
import java.util.Map;
import java.util.List;
import java.util.Map.Entry;
@@ -59,6 +61,27 @@ public final class NewTableMetaDataPersistService implements
SchemaMetaDataPersi
}
}
+ @Override
+ public Collection<MetaDataVersion> persistSchemaMetaData(final String
databaseName, final String schemaName, final Map<String, ShardingSphereTable>
tables) {
+ Collection<MetaDataVersion> result = new LinkedList<>();
+ for (Entry<String, ShardingSphereTable> entry : tables.entrySet()) {
+ String tableName = entry.getKey().toLowerCase();
+ if (Strings.isNullOrEmpty(getActiveVersion(databaseName,
schemaName, tableName))) {
+
repository.persist(NewDatabaseMetaDataNode.getTableActiveVersionNode(databaseName,
schemaName, tableName), DEFAULT_VERSION);
+ }
+ List<String> versions =
repository.getChildrenKeys(NewDatabaseMetaDataNode.getTableVersionsNode(databaseName,
schemaName, tableName));
+ String nextActiveVersion = versions.isEmpty() ? DEFAULT_VERSION :
String.valueOf(Integer.parseInt(versions.get(0)) + 1);
+ String persistKey =
NewDatabaseMetaDataNode.getTableVersionNode(databaseName, schemaName,
tableName, nextActiveVersion);
+ repository.persist(persistKey, YamlEngine.marshal(new
YamlTableSwapper().swapToYamlConfiguration(entry.getValue())));
+ result.add(new MetaDataVersion(persistKey,
getActiveVersion(databaseName, schemaName, tableName), nextActiveVersion));
+ }
+ return result;
+ }
+
+ private String getActiveVersion(final String databaseName, final String
schemaName, final String tableName) {
+ return
repository.getDirectly(NewDatabaseMetaDataNode.getTableActiveVersionNode(databaseName,
schemaName, tableName));
+ }
+
@Override
public Map<String, ShardingSphereTable> load(final String databaseName,
final String schemaName) {
Collection<String> tableNames =
repository.getChildrenKeys(DatabaseMetaDataNode.getMetaDataTablesPath(databaseName,
schemaName));
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/schema/NewViewMetaDataPersistService.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/schema/NewViewMetaDataPersistService.java
index b8e5536e3a2..9503bb48688 100644
---
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/schema/NewViewMetaDataPersistService.java
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/schema/NewViewMetaDataPersistService.java
@@ -20,6 +20,7 @@ package
org.apache.shardingsphere.metadata.persist.service.schema;
import com.google.common.base.Strings;
import lombok.RequiredArgsConstructor;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView;
+import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
import org.apache.shardingsphere.infra.yaml.schema.pojo.YamlShardingSphereView;
import org.apache.shardingsphere.infra.yaml.schema.swapper.YamlViewSwapper;
@@ -30,6 +31,7 @@ import org.apache.shardingsphere.mode.spi.PersistRepository;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
+import java.util.LinkedList;
import java.util.Map;
import java.util.List;
import java.util.Map.Entry;
@@ -59,6 +61,29 @@ public final class NewViewMetaDataPersistService implements
SchemaMetaDataPersis
}
}
+ @Override
+ public Collection<MetaDataVersion> persistSchemaMetaData(final String
databaseName, final String schemaName, final Map<String, ShardingSphereView>
views) {
+ Collection<MetaDataVersion> result = new LinkedList<>();
+ for (Entry<String, ShardingSphereView> entry : views.entrySet()) {
+ String viewName = entry.getKey().toLowerCase();
+ if (Strings.isNullOrEmpty(getActiveVersion(databaseName,
schemaName, viewName))) {
+
repository.persist(NewDatabaseMetaDataNode.getViewActiveVersionNode(databaseName,
schemaName, viewName), DEFAULT_VERSION);
+ }
+ List<String> versions =
repository.getChildrenKeys(NewDatabaseMetaDataNode.getViewVersionsNode(databaseName,
schemaName, viewName));
+ String nextActiveVersion =
NewDatabaseMetaDataNode.getViewVersionNode(databaseName, schemaName, viewName,
versions.isEmpty()
+ ? DEFAULT_VERSION
+ : String.valueOf(Integer.parseInt(versions.get(0)) + 1));
+ String persistKey =
NewDatabaseMetaDataNode.getViewVersionNode(databaseName, schemaName, viewName,
nextActiveVersion);
+ repository.persist(persistKey, YamlEngine.marshal(new
YamlViewSwapper().swapToYamlConfiguration(entry.getValue())));
+ result.add(new MetaDataVersion(persistKey,
getActiveVersion(databaseName, schemaName, viewName), nextActiveVersion));
+ }
+ return result;
+ }
+
+ private String getActiveVersion(final String databaseName, final String
schemaName, final String viewName) {
+ return
repository.getDirectly(NewDatabaseMetaDataNode.getViewActiveVersionNode(databaseName,
schemaName, viewName));
+ }
+
@Override
public Map<String, ShardingSphereView> load(final String databaseName,
final String schemaName) {
Collection<String> viewNames =
repository.getChildrenKeys(DatabaseMetaDataNode.getMetaDataViewsPath(databaseName,
schemaName));
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/schema/SchemaMetaDataPersistService.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/schema/SchemaMetaDataPersistService.java
index 75c46f46f37..067cd061007 100644
---
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/schema/SchemaMetaDataPersistService.java
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/schema/SchemaMetaDataPersistService.java
@@ -17,6 +17,10 @@
package org.apache.shardingsphere.metadata.persist.service.schema;
+import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
+
+import java.util.Collection;
+
/**
* Schema meta data persist service.
*
@@ -33,6 +37,16 @@ public interface SchemaMetaDataPersistService<T> {
*/
void persist(String databaseName, String schemaName, T schema);
+ /**
+ * Persist schema meta data.
+ *
+ * @param databaseName database name
+ * @param schemaName schema name
+ * @param schema schema meta data
+ * @return meta data versions
+ */
+ Collection<MetaDataVersion> persistSchemaMetaData(String databaseName,
String schemaName, T schema);
+
/**
* Load schema meta data.
*
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/schema/TableMetaDataPersistService.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/schema/TableMetaDataPersistService.java
index 0216deb6932..ce2763c6f79 100644
---
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/schema/TableMetaDataPersistService.java
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/schema/TableMetaDataPersistService.java
@@ -20,6 +20,7 @@ package
org.apache.shardingsphere.metadata.persist.service.schema;
import com.google.common.base.Strings;
import lombok.RequiredArgsConstructor;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
+import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
import
org.apache.shardingsphere.infra.yaml.schema.pojo.YamlShardingSphereTable;
import org.apache.shardingsphere.infra.yaml.schema.swapper.YamlTableSwapper;
@@ -45,6 +46,12 @@ public final class TableMetaDataPersistService implements
SchemaMetaDataPersistS
YamlEngine.marshal(new
YamlTableSwapper().swapToYamlConfiguration(value))));
}
+ // TODO Remove this when metadata structure adjustment completed. #25485
+ @Override
+ public Collection<MetaDataVersion> persistSchemaMetaData(final String
databaseName, final String schemaName, final Map<String, ShardingSphereTable>
schema) {
+ return Collections.emptyList();
+ }
+
@Override
public Map<String, ShardingSphereTable> load(final String databaseName,
final String schemaName) {
Collection<String> tableNames =
repository.getChildrenKeys(DatabaseMetaDataNode.getMetaDataTablesPath(databaseName,
schemaName));
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/schema/ViewMetaDataPersistService.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/schema/ViewMetaDataPersistService.java
index c0c02d217d7..c54db42265b 100644
---
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/schema/ViewMetaDataPersistService.java
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/schema/ViewMetaDataPersistService.java
@@ -20,6 +20,7 @@ package
org.apache.shardingsphere.metadata.persist.service.schema;
import com.google.common.base.Strings;
import lombok.RequiredArgsConstructor;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView;
+import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
import org.apache.shardingsphere.infra.yaml.schema.pojo.YamlShardingSphereView;
import org.apache.shardingsphere.infra.yaml.schema.swapper.YamlViewSwapper;
@@ -45,6 +46,12 @@ public final class ViewMetaDataPersistService implements
SchemaMetaDataPersistSe
YamlEngine.marshal(new
YamlViewSwapper().swapToYamlConfiguration(value))));
}
+ // TODO Remove this when metadata structure adjustment completed. #25485
+ @Override
+ public Collection<MetaDataVersion> persistSchemaMetaData(final String
databaseName, final String schemaName, final Map<String, ShardingSphereView>
schema) {
+ return Collections.emptyList();
+ }
+
@Override
public Map<String, ShardingSphereView> load(final String databaseName,
final String schemaName) {
Collection<String> viewNames =
repository.getChildrenKeys(DatabaseMetaDataNode.getMetaDataViewsPath(databaseName,
schemaName));
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
index 76cf9adf4f9..15fb11d1629 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
@@ -43,6 +43,8 @@ import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSp
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import
org.apache.shardingsphere.infra.rule.builder.database.DatabaseRulesBuilder;
import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
import org.apache.shardingsphere.infra.rule.identifier.type.MetaDataHeldRule;
import
org.apache.shardingsphere.infra.rule.identifier.type.MutableDataNodeRule;
@@ -342,6 +344,30 @@ public final class ContextManager implements AutoCloseable
{
}
}
+ /**
+ * Alter rule configuration.
+ *
+ * @param databaseName database name
+ * @param ruleConfig rule configurations
+ */
+ @SuppressWarnings("rawtypes")
+ public synchronized void alterRuleConfiguration(final String databaseName,
final RuleConfiguration ruleConfig) {
+ try {
+ ShardingSphereDatabase database =
metaDataContexts.get().getMetaData().getDatabase(databaseName);
+ Collection<ShardingSphereRule> rules = new
LinkedList<>(database.getRuleMetaData().getRules());
+ rules.addAll(DatabaseRulesBuilder.build(databaseName,
database.getResourceMetaData().getDataSources(),
database.getRuleMetaData().getRules(),
+ ruleConfig, instanceContext));
+ database.getRuleMetaData().getRules().clear();
+ database.getRuleMetaData().getRules().addAll(rules);
+ MetaDataContexts reloadMetaDataContexts =
createMetaDataContextsByAlterRule(databaseName, false, null,
database.getRuleMetaData().getConfigurations());
+ alterSchemaMetaData(databaseName,
reloadMetaDataContexts.getMetaData().getDatabase(databaseName),
metaDataContexts.get().getMetaData().getDatabase(databaseName));
+ metaDataContexts.set(reloadMetaDataContexts);
+
metaDataContexts.get().getMetaData().getDatabase(databaseName).getSchemas().putAll(newShardingSphereSchemas(metaDataContexts.get().getMetaData().getDatabase(databaseName)));
+ } catch (final SQLException ex) {
+ log.error("Alter database: {} rule configurations failed",
databaseName, ex);
+ }
+ }
+
/**
* Alter schema meta data.
*
@@ -410,6 +436,23 @@ public final class ContextManager implements AutoCloseable
{
return result;
}
+ /**
+ * Create meta data contexts by alter rule.
+ *
+ * @param databaseName database name
+ * @param internalLoadMetaData internal load meta data
+ * @param switchingResource switching resource
+ * @param ruleConfigs rule configs
+ * @return MetaDataContexts meta data contexts
+ * @throws SQLException SQL exception
+ */
+ public MetaDataContexts createMetaDataContextsByAlterRule(final String
databaseName, final boolean internalLoadMetaData, final SwitchingResource
switchingResource,
+ final
Collection<RuleConfiguration> ruleConfigs) throws SQLException {
+ Map<String, ShardingSphereDatabase> changedDatabases =
createChangedDatabases(databaseName, internalLoadMetaData, switchingResource,
ruleConfigs);
+ return newMetaDataContexts(new ShardingSphereMetaData(changedDatabases,
+ metaDataContexts.get().getMetaData().getGlobalRuleMetaData(),
metaDataContexts.get().getMetaData().getProps()));
+ }
+
/**
* Create meta data contexts.
*
@@ -516,6 +559,52 @@ public final class ContextManager implements AutoCloseable
{
metaDataContexts.set(newMetaDataContexts(toBeChangedMetaData));
}
+ /**
+ * Alter global rule configuration.
+ *
+ * @param ruleName rule name
+ * @param ruleConfig global rule configuration
+ */
+ @SuppressWarnings("rawtypes")
+ public synchronized void alterGlobalRuleConfiguration(final String
ruleName, final RuleConfiguration ruleConfig) {
+ Collection<ShardingSphereRule> rules =
removeSingleGlobalRule(ruleName);
+
rules.addAll(GlobalRulesBuilder.buildRules(Collections.singletonList(ruleConfig),
metaDataContexts.get().getMetaData().getDatabases(),
+ metaDataContexts.get().getMetaData().getProps()));
+
metaDataContexts.get().getMetaData().getGlobalRuleMetaData().getRules().clear();
+
metaDataContexts.get().getMetaData().getGlobalRuleMetaData().getRules().addAll(rules);
+ ShardingSphereMetaData toBeChangedMetaData = new
ShardingSphereMetaData(
+ metaDataContexts.get().getMetaData().getDatabases(),
metaDataContexts.get().getMetaData().getGlobalRuleMetaData(),
metaDataContexts.get().getMetaData().getProps());
+ metaDataContexts.set(newMetaDataContexts(toBeChangedMetaData));
+ }
+
+ /**
+ * Drop global rule configuration.
+ *
+ * @param ruleName rule name
+ */
+ @SuppressWarnings("rawtypes")
+ public synchronized void dropGlobalRuleConfiguration(final String
ruleName) {
+ Collection<ResourceHeldRule> staleResourceHeldRules =
metaDataContexts.get().getMetaData().getGlobalRuleMetaData().findRules(ResourceHeldRule.class);
+ staleResourceHeldRules.forEach(ResourceHeldRule::closeStaleResource);
+ Collection<ShardingSphereRule> rules =
removeSingleGlobalRule(ruleName);
+
metaDataContexts.get().getMetaData().getGlobalRuleMetaData().getRules().clear();
+
metaDataContexts.get().getMetaData().getGlobalRuleMetaData().getRules().addAll(rules);
+ ShardingSphereMetaData toBeChangedMetaData = new
ShardingSphereMetaData(metaDataContexts.get().getMetaData().getDatabases(),
+ new
ShardingSphereRuleMetaData(metaDataContexts.get().getMetaData().getGlobalRuleMetaData().getRules()),
metaDataContexts.get().getMetaData().getProps());
+ metaDataContexts.set(newMetaDataContexts(toBeChangedMetaData));
+ }
+
+ private Collection<ShardingSphereRule> removeSingleGlobalRule(final String
ruleSimpleName) {
+ Collection<ShardingSphereRule> result = new
LinkedList<>(metaDataContexts.get().getMetaData().getGlobalRuleMetaData().getRules());
+ for (ShardingSphereRule each : result) {
+ if (!each.getType().equals(ruleSimpleName)) {
+ continue;
+ }
+ result.remove(each);
+ }
+ return result;
+ }
+
/**
* Alter properties.
*
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewConfigurationChangedSubscriber.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewConfigurationChangedSubscriber.java
index 549eaf4b167..a8d50514928 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewConfigurationChangedSubscriber.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewConfigurationChangedSubscriber.java
@@ -20,17 +20,9 @@ package
org.apache.shardingsphere.mode.manager.cluster.coordinator.subscriber;
import com.google.common.eventbus.Subscribe;
import
org.apache.shardingsphere.infra.config.rule.global.event.AlterGlobalRuleConfigurationEvent;
import
org.apache.shardingsphere.infra.config.rule.global.event.DeleteGlobalRuleConfigurationEvent;
-import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-import
org.apache.shardingsphere.infra.rule.builder.database.DatabaseRulesBuilder;
-import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
import
org.apache.shardingsphere.mode.event.config.DatabaseRuleConfigurationChangedEvent;
import org.apache.shardingsphere.mode.manager.ContextManager;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.LinkedList;
-
/**
* TODO Rename ConfigurationChangedSubscriber when metadata structure
adjustment completed. #25485
* New configuration changed subscriber.
@@ -52,13 +44,7 @@ public final class NewConfigurationChangedSubscriber {
*/
@Subscribe
public synchronized void renew(final DatabaseRuleConfigurationChangedEvent
event) {
- String databaseName = event.getDatabaseName();
- ShardingSphereDatabase database =
contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName);
- Collection<ShardingSphereRule> rules = new
LinkedList<>(database.getRuleMetaData().getRules());
- rules.addAll(DatabaseRulesBuilder.build(databaseName,
database.getResourceMetaData().getDataSources(),
database.getRuleMetaData().getRules(),
- event.getRuleConfig(), contextManager.getInstanceContext()));
- database.getRuleMetaData().getRules().clear();
- database.getRuleMetaData().getRules().addAll(rules);
+ contextManager.alterRuleConfiguration(event.getDatabaseName(),
event.getRuleConfig());
}
/**
@@ -68,11 +54,7 @@ public final class NewConfigurationChangedSubscriber {
*/
@Subscribe
public synchronized void renew(final AlterGlobalRuleConfigurationEvent
event) {
- Collection<ShardingSphereRule> rules =
removeSingleGlobalRule(event.getRuleSimpleName());
-
rules.addAll(GlobalRulesBuilder.buildRules(Collections.singletonList(event.getConfig()),
contextManager.getMetaDataContexts().getMetaData().getDatabases(),
-
contextManager.getMetaDataContexts().getMetaData().getProps()));
-
contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getRules().clear();
-
contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getRules().addAll(rules);
+ contextManager.alterGlobalRuleConfiguration(event.getRuleSimpleName(),
event.getConfig());
}
/**
@@ -82,19 +64,6 @@ public final class NewConfigurationChangedSubscriber {
*/
@Subscribe
public synchronized void renew(final DeleteGlobalRuleConfigurationEvent
event) {
- Collection<ShardingSphereRule> rules =
removeSingleGlobalRule(event.getRuleSimpleName());
-
contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getRules().clear();
-
contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getRules().addAll(rules);
- }
-
- private Collection<ShardingSphereRule> removeSingleGlobalRule(final String
ruleSimpleName) {
- Collection<ShardingSphereRule> result = new
LinkedList<>(contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getRules());
- for (ShardingSphereRule each : result) {
- if (!each.getType().equals(ruleSimpleName)) {
- continue;
- }
- result.remove(each);
- }
- return result;
+ contextManager.dropGlobalRuleConfiguration(event.getRuleSimpleName());
}
}