This is an automated email from the ASF dual-hosted git repository.
yx9o 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 3797f67c64e Extract GlobalConfigurationManager from
ConfigurationManager (#32071)
3797f67c64e is described below
commit 3797f67c64e85866cae58f9f3bbd3cd1f154c04b
Author: Haoran Meng <[email protected]>
AuthorDate: Fri Jul 12 14:22:48 2024 +0800
Extract GlobalConfigurationManager from ConfigurationManager (#32071)
* Extract GlobalConfigurationManager from ConfigurationManager
* Revert "Extract GlobalConfigurationManager from ConfigurationManager"
This reverts commit 9802d28c6b77efaed56dd1e133809d5743c058a6.
* Extract GlobalConfigurationManager from ConfigurationManager
* Revert global.yaml
* Remove useless methods of ConfigurationManager
---
.../mode/metadata/MetaDataContextManager.java | 6 +-
.../metadata/manager/ConfigurationManager.java | 54 -----------
.../manager/GlobalConfigurationManager.java | 105 +++++++++++++++++++++
.../mode/manager/ContextManagerTest.java | 2 +-
.../GlobalRuleConfigurationEventSubscriber.java | 2 +-
.../dispatch/PropertiesEventSubscriber.java | 2 +-
.../StandaloneMetaDataManagerPersistService.java | 4 +-
7 files changed, 115 insertions(+), 60 deletions(-)
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
index c75242e1c9a..cb79560374c 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
@@ -24,9 +24,10 @@ import
org.apache.shardingsphere.infra.metadata.database.schema.manager.GenericS
import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
import org.apache.shardingsphere.mode.metadata.manager.ConfigurationManager;
import
org.apache.shardingsphere.mode.metadata.manager.DatabaseRuleConfigurationManager;
-import org.apache.shardingsphere.mode.metadata.manager.SchemaMetaDataManager;
+import
org.apache.shardingsphere.mode.metadata.manager.GlobalConfigurationManager;
import org.apache.shardingsphere.mode.metadata.manager.ResourceSwitchManager;
import org.apache.shardingsphere.mode.metadata.manager.RuleItemManager;
+import org.apache.shardingsphere.mode.metadata.manager.SchemaMetaDataManager;
import
org.apache.shardingsphere.mode.metadata.manager.ShardingSphereDatabaseDataManager;
import org.apache.shardingsphere.mode.metadata.manager.StorageUnitManager;
import org.apache.shardingsphere.mode.spi.PersistRepository;
@@ -57,6 +58,8 @@ public class MetaDataContextManager {
private final DatabaseRuleConfigurationManager
databaseRuleConfigurationManager;
+ private final GlobalConfigurationManager globalConfigurationManager;
+
public MetaDataContextManager(final AtomicReference<MetaDataContexts>
metaDataContexts, final ComputeNodeInstanceContext computeNodeInstanceContext,
final PersistRepository repository) {
this.metaDataContexts = metaDataContexts;
@@ -67,6 +70,7 @@ public class MetaDataContextManager {
configurationManager = new ConfigurationManager(metaDataContexts,
computeNodeInstanceContext, repository);
schemaMetaDataManager = new SchemaMetaDataManager(metaDataContexts,
repository);
ruleItemManager = new RuleItemManager(metaDataContexts, repository,
databaseRuleConfigurationManager);
+ globalConfigurationManager = new
GlobalConfigurationManager(metaDataContexts, repository);
metaDataPersistService = new MetaDataPersistService(repository);
}
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/ConfigurationManager.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/ConfigurationManager.java
index 78d100e9f91..0ab0fca1172 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/ConfigurationManager.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/ConfigurationManager.java
@@ -17,7 +17,6 @@
package org.apache.shardingsphere.mode.metadata.manager;
-import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration;
import
org.apache.shardingsphere.infra.config.database.impl.DataSourceProvidedDatabaseConfiguration;
@@ -33,29 +32,20 @@ import
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUn
import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.manager.GenericSchemaManager;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
-import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
-import
org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
-import
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
import org.apache.shardingsphere.metadata.factory.ExternalMetaDataFactory;
import org.apache.shardingsphere.metadata.factory.InternalMetaDataFactory;
import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
import org.apache.shardingsphere.mode.spi.PersistRepository;
-import org.apache.shardingsphere.mode.tuple.annotation.RepositoryTupleEntity;
-import org.apache.shardingsphere.transaction.rule.TransactionRule;
import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.Collection;
import java.util.LinkedHashMap;
-import java.util.LinkedList;
import java.util.Map;
import java.util.Map.Entry;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.Properties;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
@@ -198,50 +188,6 @@ public final class ConfigurationManager {
: ExternalMetaDataFactory.create(databaseName, databaseConfig,
props, computeNodeInstanceContext);
}
- /**
- * Alter global rule configuration.
- *
- * @param ruleConfig global rule configuration
- */
- public synchronized void alterGlobalRuleConfiguration(final
RuleConfiguration ruleConfig) {
- if (null == ruleConfig) {
- return;
- }
- closeStaleTransactionRule(ruleConfig);
- Collection<ShardingSphereRule> rules = new
LinkedList<>(metaDataContexts.get().getMetaData().getGlobalRuleMetaData().getRules());
- rules.removeIf(each ->
each.getConfiguration().getClass().isAssignableFrom(ruleConfig.getClass()));
- rules.addAll(GlobalRulesBuilder.buildSingleRules(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().getGlobalResourceMetaData(),
- metaDataContexts.get().getMetaData().getGlobalRuleMetaData(),
metaDataContexts.get().getMetaData().getProps());
- metaDataContexts.set(newMetaDataContexts(toBeChangedMetaData));
- }
-
- // Optimize string comparison rule type.
- @SneakyThrows(Exception.class)
- private void closeStaleTransactionRule(final RuleConfiguration ruleConfig)
{
- YamlRuleConfiguration yamlRuleConfig = new
YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfiguration(ruleConfig);
- if
(!"transaction".equals(Objects.requireNonNull(yamlRuleConfig.getClass().getAnnotation(RepositoryTupleEntity.class)).value()))
{
- return;
- }
- Optional<TransactionRule> transactionRule =
metaDataContexts.get().getMetaData().getGlobalRuleMetaData().findSingleRule(TransactionRule.class);
- if (transactionRule.isPresent()) {
- ((AutoCloseable) transactionRule.get()).close();
- }
- }
-
- /**
- * Alter properties.
- *
- * @param props properties to be altered
- */
- public synchronized void alterProperties(final Properties props) {
- ShardingSphereMetaData toBeChangedMetaData = new
ShardingSphereMetaData(metaDataContexts.get().getMetaData().getDatabases(),
metaDataContexts.get().getMetaData().getGlobalResourceMetaData(),
- metaDataContexts.get().getMetaData().getGlobalRuleMetaData(),
new ConfigurationProperties(props));
- metaDataContexts.set(newMetaDataContexts(toBeChangedMetaData));
- }
-
private MetaDataContexts newMetaDataContexts(final ShardingSphereMetaData
metaData) {
return MetaDataContextsFactory.create(metaDataPersistService,
metaData);
}
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/GlobalConfigurationManager.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/GlobalConfigurationManager.java
new file mode 100644
index 00000000000..d2de121876a
--- /dev/null
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/GlobalConfigurationManager.java
@@ -0,0 +1,105 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.mode.metadata.manager;
+
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
+import
org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
+import
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
+import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
+import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
+import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.spi.PersistRepository;
+import org.apache.shardingsphere.mode.tuple.annotation.RepositoryTupleEntity;
+import org.apache.shardingsphere.transaction.rule.TransactionRule;
+
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.Properties;
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * Configuration context manager.
+ */
+@Slf4j
+public final class GlobalConfigurationManager {
+
+ private final AtomicReference<MetaDataContexts> metaDataContexts;
+
+ private final MetaDataPersistService metaDataPersistService;
+
+ public GlobalConfigurationManager(final AtomicReference<MetaDataContexts>
metaDataContexts, final PersistRepository repository) {
+ this.metaDataContexts = metaDataContexts;
+ metaDataPersistService = new MetaDataPersistService(repository);
+ }
+
+ /**
+ * Alter global rule configuration.
+ *
+ * @param ruleConfig global rule configuration
+ */
+ public synchronized void alterGlobalRuleConfiguration(final
RuleConfiguration ruleConfig) {
+ if (null == ruleConfig) {
+ return;
+ }
+ closeStaleTransactionRule(ruleConfig);
+ Collection<ShardingSphereRule> rules = new
LinkedList<>(metaDataContexts.get().getMetaData().getGlobalRuleMetaData().getRules());
+ rules.removeIf(each ->
each.getConfiguration().getClass().isAssignableFrom(ruleConfig.getClass()));
+ rules.addAll(GlobalRulesBuilder.buildSingleRules(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().getGlobalResourceMetaData(),
+ metaDataContexts.get().getMetaData().getGlobalRuleMetaData(),
metaDataContexts.get().getMetaData().getProps());
+ metaDataContexts.set(newMetaDataContexts(toBeChangedMetaData));
+ }
+
+ // Optimize string comparison rule type.
+ @SneakyThrows(Exception.class)
+ private void closeStaleTransactionRule(final RuleConfiguration ruleConfig)
{
+ YamlRuleConfiguration yamlRuleConfig = new
YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfiguration(ruleConfig);
+ if
(!"transaction".equals(Objects.requireNonNull(yamlRuleConfig.getClass().getAnnotation(RepositoryTupleEntity.class)).value()))
{
+ return;
+ }
+ Optional<TransactionRule> transactionRule =
metaDataContexts.get().getMetaData().getGlobalRuleMetaData().findSingleRule(TransactionRule.class);
+ if (transactionRule.isPresent()) {
+ ((AutoCloseable) transactionRule.get()).close();
+ }
+ }
+
+ /**
+ * Alter properties.
+ *
+ * @param props properties to be altered
+ */
+ public synchronized void alterProperties(final Properties props) {
+ ShardingSphereMetaData toBeChangedMetaData = new
ShardingSphereMetaData(metaDataContexts.get().getMetaData().getDatabases(),
metaDataContexts.get().getMetaData().getGlobalResourceMetaData(),
+ metaDataContexts.get().getMetaData().getGlobalRuleMetaData(),
new ConfigurationProperties(props));
+ metaDataContexts.set(newMetaDataContexts(toBeChangedMetaData));
+ }
+
+ private MetaDataContexts newMetaDataContexts(final ShardingSphereMetaData
metaData) {
+ return MetaDataContextsFactory.create(metaDataPersistService,
metaData);
+ }
+}
diff --git
a/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
b/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
index 67d9b0fc5e9..aa5965e287b 100644
---
a/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
+++
b/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
@@ -243,7 +243,7 @@ class ContextManagerTest {
@Test
void assertAlterProperties() {
-
contextManager.getMetaDataContextManager().getConfigurationManager().alterProperties(PropertiesBuilder.build(new
Property("foo", "foo_value")));
+
contextManager.getMetaDataContextManager().getGlobalConfigurationManager().alterProperties(PropertiesBuilder.build(new
Property("foo", "foo_value")));
assertThat(contextManager.getMetaDataContexts().getMetaData().getProps().getProps().getProperty("foo"),
is("foo_value"));
}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/GlobalRuleConfigurationEventSubscriber.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/GlobalRuleConfigurationEventSubscriber.java
index 1c9313d45b9..5f657f4c6e7 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/GlobalRuleConfigurationEventSubscriber.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/GlobalRuleConfigurationEventSubscriber.java
@@ -43,7 +43,7 @@ public final class GlobalRuleConfigurationEventSubscriber
implements EventSubscr
return;
}
contextManager.getPersistServiceFacade().getMetaDataPersistService().getGlobalRuleService().load(event.getRuleSimpleName())
- .ifPresent(optional ->
contextManager.getMetaDataContextManager().getConfigurationManager().alterGlobalRuleConfiguration(optional));
+ .ifPresent(optional ->
contextManager.getMetaDataContextManager().getGlobalConfigurationManager().alterGlobalRuleConfiguration(optional));
}
}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/PropertiesEventSubscriber.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/PropertiesEventSubscriber.java
index 89935d580ad..f728a981ed9 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/PropertiesEventSubscriber.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/PropertiesEventSubscriber.java
@@ -42,6 +42,6 @@ public final class PropertiesEventSubscriber implements
EventSubscriber {
.getActiveVersionByFullPath(event.getActiveVersionKey()))) {
return;
}
-
contextManager.getMetaDataContextManager().getConfigurationManager().alterProperties(contextManager.getPersistServiceFacade().getMetaDataPersistService().getPropsService().load());
+
contextManager.getMetaDataContextManager().getGlobalConfigurationManager().alterProperties(contextManager.getPersistServiceFacade().getMetaDataPersistService().getPropsService().load());
}
}
diff --git
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/StandaloneMetaDataManagerPersistService.java
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/StandaloneMetaDataManagerPersistService.java
index b9b6dd3b81b..25d68f1c060 100644
---
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/StandaloneMetaDataManagerPersistService.java
+++
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/StandaloneMetaDataManagerPersistService.java
@@ -321,14 +321,14 @@ public final class
StandaloneMetaDataManagerPersistService implements MetaDataMa
@Override
public void alterGlobalRuleConfiguration(final RuleConfiguration
toBeAlteredRuleConfig) {
-
metaDataContextManager.getConfigurationManager().alterGlobalRuleConfiguration(toBeAlteredRuleConfig);
+
metaDataContextManager.getGlobalConfigurationManager().alterGlobalRuleConfiguration(toBeAlteredRuleConfig);
metaDataPersistService.getGlobalRuleService().persist(Collections.singleton(toBeAlteredRuleConfig));
clearServiceCache();
}
@Override
public void alterProperties(final Properties props) {
-
metaDataContextManager.getConfigurationManager().alterProperties(props);
+
metaDataContextManager.getGlobalConfigurationManager().alterProperties(props);
metaDataPersistService.getPropsService().persist(props);
clearServiceCache();
}