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 113810c2e40 Aggregation switch global rule and props active versions
(#31040)
113810c2e40 is described below
commit 113810c2e40c45c90fe619cf2008a28bec571bda
Author: zhaojinchao <[email protected]>
AuthorDate: Sun Apr 28 11:11:51 2024 +0800
Aggregation switch global rule and props active versions (#31040)
* Aggregation switch global rule and props active versions
* Fix ci
---
.../metadata/persist/MetaDataPersistService.java | 4 ++--
.../config/global/GlobalPersistService.java | 11 ---------
.../config/global/GlobalRulePersistService.java | 27 ++++++++--------------
.../config/global/PropertiesPersistService.java | 22 +++++-------------
.../manager/cluster/ClusterModeContextManager.java | 8 ++-----
.../standalone/StandaloneModeContextManager.java | 10 ++------
.../ral/updatable/SetDistVariableExecutorTest.java | 7 +++++-
7 files changed, 27 insertions(+), 62 deletions(-)
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
index 6553944e7d4..6655c5d924e 100644
---
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
@@ -77,8 +77,8 @@ public final class MetaDataPersistService implements
MetaDataBasedPersistService
dataSourceNodeService = new DataSourceNodePersistService(repository);
databaseMetaDataService = new
DatabaseMetaDataPersistService(repository, metaDataVersionPersistService);
databaseRulePersistService = new
DatabaseRulePersistService(repository);
- globalRuleService = new GlobalRulePersistService(repository);
- propsService = new PropertiesPersistService(repository);
+ globalRuleService = new GlobalRulePersistService(repository,
metaDataVersionPersistService);
+ propsService = new PropertiesPersistService(repository,
metaDataVersionPersistService);
shardingSphereDataPersistService = new
ShardingSphereDataPersistService(repository);
}
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalPersistService.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalPersistService.java
index e12eed6107c..fbe10f83ab2 100644
---
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalPersistService.java
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalPersistService.java
@@ -18,9 +18,6 @@
package org.apache.shardingsphere.metadata.persist.service.config.global;
import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
-import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
-
-import java.util.Collection;
/**
* Global persist service.
@@ -36,14 +33,6 @@ public interface GlobalPersistService<T> {
*/
void persist(T globalRuleConfigs);
- /**
- * Persist configurations.
- *
- * @param globalRuleConfigs global configurations
- * @return meta data versions
- */
- Collection<MetaDataVersion> persistConfigurations(T globalRuleConfigs);
-
/**
* Load configurations.
*
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalRulePersistService.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalRulePersistService.java
index fcd68699859..aae50b2ab20 100644
---
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalRulePersistService.java
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalRulePersistService.java
@@ -25,6 +25,7 @@ import
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlDataNodeGlob
import
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlDataNodeGlobalRuleConfigurationSwapperEngine;
import org.apache.shardingsphere.metadata.persist.node.GlobalNode;
import
org.apache.shardingsphere.metadata.persist.service.config.RepositoryTuplePersistService;
+import
org.apache.shardingsphere.metadata.persist.service.version.MetaDataVersionPersistService;
import org.apache.shardingsphere.mode.spi.PersistRepository;
import java.util.Collection;
@@ -42,37 +43,28 @@ public final class GlobalRulePersistService implements
GlobalPersistService<Coll
private final PersistRepository repository;
+ private final MetaDataVersionPersistService metaDataVersionPersistService;
+
private final RepositoryTuplePersistService repositoryTuplePersistService;
- public GlobalRulePersistService(final PersistRepository repository) {
+ public GlobalRulePersistService(final PersistRepository repository, final
MetaDataVersionPersistService metaDataVersionPersistService) {
this.repository = repository;
+ this.metaDataVersionPersistService = metaDataVersionPersistService;
repositoryTuplePersistService = new
RepositoryTuplePersistService(repository);
}
@SuppressWarnings({"unchecked", "rawtypes"})
@Override
public void persist(final Collection<RuleConfiguration> globalRuleConfigs)
{
+ Collection<MetaDataVersion> metaDataVersions = new LinkedList<>();
for (Entry<RuleConfiguration,
YamlDataNodeGlobalRuleConfigurationSwapper> entry : new
YamlDataNodeGlobalRuleConfigurationSwapperEngine()
.swapToYamlRuleConfigurations(globalRuleConfigs).entrySet()) {
Collection<RepositoryTuple> repositoryTuples =
entry.getValue().swapToRepositoryTuples(entry.getKey());
if (!repositoryTuples.isEmpty()) {
- persistTuples(repositoryTuples);
+ metaDataVersions.addAll(persistTuples(repositoryTuples));
}
}
- }
-
- @SuppressWarnings({"unchecked", "rawtypes"})
- @Override
- public Collection<MetaDataVersion> persistConfigurations(final
Collection<RuleConfiguration> globalRuleConfigs) {
- Collection<MetaDataVersion> result = new LinkedList<>();
- for (Entry<RuleConfiguration,
YamlDataNodeGlobalRuleConfigurationSwapper> entry : new
YamlDataNodeGlobalRuleConfigurationSwapperEngine()
- .swapToYamlRuleConfigurations(globalRuleConfigs).entrySet()) {
- Collection<RepositoryTuple> repositoryTuples =
entry.getValue().swapToRepositoryTuples(entry.getKey());
- if (!repositoryTuples.isEmpty()) {
- result.addAll(persistTuples(repositoryTuples));
- }
- }
- return result;
+ metaDataVersionPersistService.switchActiveVersion(metaDataVersions);
}
private Collection<MetaDataVersion> persistTuples(final
Collection<RepositoryTuple> repositoryTuples) {
@@ -80,8 +72,7 @@ public final class GlobalRulePersistService implements
GlobalPersistService<Coll
for (RepositoryTuple each : repositoryTuples) {
List<String> versions =
repository.getChildrenKeys(GlobalNode.getGlobalRuleVersionsNode(each.getKey()));
String nextActiveVersion = versions.isEmpty() ? DEFAULT_VERSION :
String.valueOf(Integer.parseInt(versions.get(0)) + 1);
- String persistKey =
GlobalNode.getGlobalRuleVersionNode(each.getKey(), nextActiveVersion);
- repository.persist(persistKey, each.getValue());
+
repository.persist(GlobalNode.getGlobalRuleVersionNode(each.getKey(),
nextActiveVersion), each.getValue());
if
(Strings.isNullOrEmpty(repository.getDirectly(GlobalNode.getGlobalRuleActiveVersionNode(each.getKey()))))
{
repository.persist(GlobalNode.getGlobalRuleActiveVersionNode(each.getKey()),
DEFAULT_VERSION);
}
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/PropertiesPersistService.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/PropertiesPersistService.java
index 3a37ec786f0..e38cf6c3fbf 100644
---
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/PropertiesPersistService.java
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/PropertiesPersistService.java
@@ -22,9 +22,9 @@ import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
import org.apache.shardingsphere.metadata.persist.node.GlobalNode;
+import
org.apache.shardingsphere.metadata.persist.service.version.MetaDataVersionPersistService;
import org.apache.shardingsphere.mode.spi.PersistRepository;
-import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Properties;
@@ -39,28 +39,18 @@ public final class PropertiesPersistService implements
GlobalPersistService<Prop
private final PersistRepository repository;
- @Override
- public void persist(final Properties props) {
- if (Strings.isNullOrEmpty(getActiveVersion())) {
- repository.persist(GlobalNode.getPropsActiveVersionNode(),
DEFAULT_VERSION);
- }
- List<String> versions =
repository.getChildrenKeys(GlobalNode.getPropsVersionsNode());
- repository.persist(GlobalNode.getPropsVersionNode(versions.isEmpty()
- ? DEFAULT_VERSION
- : String.valueOf(Integer.parseInt(versions.get(0)) + 1)),
YamlEngine.marshal(props));
-
- }
+ private final MetaDataVersionPersistService metaDataVersionPersistService;
@Override
- public Collection<MetaDataVersion> persistConfigurations(final Properties
props) {
+ public void persist(final Properties props) {
List<String> versions =
repository.getChildrenKeys(GlobalNode.getPropsVersionsNode());
String nextActiveVersion = versions.isEmpty() ? DEFAULT_VERSION :
String.valueOf(Integer.parseInt(versions.get(0)) + 1);
- String persistKey = GlobalNode.getPropsVersionNode(nextActiveVersion);
- repository.persist(persistKey, YamlEngine.marshal(props));
+ repository.persist(GlobalNode.getPropsVersionNode(nextActiveVersion),
YamlEngine.marshal(props));
if (Strings.isNullOrEmpty(getActiveVersion())) {
repository.persist(GlobalNode.getPropsActiveVersionNode(),
DEFAULT_VERSION);
}
- return Collections.singletonList(new
MetaDataVersion(GlobalNode.getPropsRootNode(), getActiveVersion(),
nextActiveVersion));
+
metaDataVersionPersistService.switchActiveVersion(Collections.singletonList(new
MetaDataVersion(GlobalNode.getPropsRootNode(),
+ getActiveVersion(), nextActiveVersion)));
}
@Override
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManager.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManager.java
index c3d212582ee..80cfe7ebf0e 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManager.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManager.java
@@ -27,7 +27,6 @@ import
org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchema
import
org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchemaPOJO;
import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
import
org.apache.shardingsphere.metadata.persist.service.config.database.DatabaseBasedPersistService;
-import
org.apache.shardingsphere.metadata.persist.service.config.global.GlobalPersistService;
import
org.apache.shardingsphere.metadata.persist.service.database.DatabaseMetaDataBasedPersistService;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.mode.manager.ContextManagerAware;
@@ -148,15 +147,12 @@ public final class ClusterModeContextManager implements
ModeContextManager, Cont
@Override
public void alterGlobalRuleConfiguration(final RuleConfiguration
toBeAlteredRuleConfig) {
- GlobalPersistService<Collection<RuleConfiguration>> globalRuleService
=
contextManager.getMetaDataContexts().getPersistService().getGlobalRuleService();
-
contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService()
-
.switchActiveVersion(globalRuleService.persistConfigurations(Collections.singleton(toBeAlteredRuleConfig)));
+
contextManager.getMetaDataContexts().getPersistService().getGlobalRuleService().persist(Collections.singleton(toBeAlteredRuleConfig));
}
@Override
public void alterProperties(final Properties props) {
- Collection<MetaDataVersion> versions =
contextManager.getMetaDataContexts().getPersistService().getPropsService().persistConfigurations(props);
-
contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService().switchActiveVersion(versions);
+
contextManager.getMetaDataContexts().getPersistService().getPropsService().persist(props);
}
@Override
diff --git
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java
index 7748699c0d5..41042cf9ee3 100644
---
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java
+++
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java
@@ -35,7 +35,6 @@ import org.apache.shardingsphere.infra.rule.scope.GlobalRule;
import
org.apache.shardingsphere.infra.rule.scope.GlobalRule.GlobalRuleChangedType;
import
org.apache.shardingsphere.infra.spi.type.ordered.cache.OrderedServicesCache;
import
org.apache.shardingsphere.metadata.persist.service.config.database.DatabaseBasedPersistService;
-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;
@@ -305,19 +304,14 @@ public final class StandaloneModeContextManager
implements ModeContextManager, C
@Override
public void alterGlobalRuleConfiguration(final RuleConfiguration
toBeAlteredRuleConfig) {
contextManager.getConfigurationContextManager().alterGlobalRuleConfiguration(toBeAlteredRuleConfig);
- GlobalPersistService<Collection<RuleConfiguration>> globalRuleService
=
contextManager.getMetaDataContexts().getPersistService().getGlobalRuleService();
-
contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService()
-
.switchActiveVersion(globalRuleService.persistConfigurations(Collections.singleton(toBeAlteredRuleConfig)));
+
contextManager.getMetaDataContexts().getPersistService().getGlobalRuleService().persist(Collections.singleton(toBeAlteredRuleConfig));
clearServiceCache();
}
@Override
public void alterProperties(final Properties props) {
contextManager.getConfigurationContextManager().alterProperties(props);
- if (null !=
contextManager.getMetaDataContexts().getPersistService().getPropsService()) {
- Collection<MetaDataVersion> versions =
contextManager.getMetaDataContexts().getPersistService().getPropsService().persistConfigurations(props);
-
contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService().switchActiveVersion(versions);
- }
+
contextManager.getMetaDataContexts().getPersistService().getPropsService().persist(props);
clearServiceCache();
}
diff --git
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableExecutorTest.java
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableExecutorTest.java
index 71d990eab4f..c3ec0c8322e 100644
---
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableExecutorTest.java
+++
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableExecutorTest.java
@@ -30,6 +30,7 @@ import org.apache.shardingsphere.infra.lock.LockContext;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.util.eventbus.EventBusContext;
import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
+import
org.apache.shardingsphere.metadata.persist.service.config.global.PropertiesPersistService;
import org.apache.shardingsphere.mode.manager.ContextManager;
import
org.apache.shardingsphere.mode.manager.standalone.StandaloneModeContextManager;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
@@ -48,6 +49,8 @@ import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
@ExtendWith(AutoMockExtension.class)
@StaticMockSettings(ProxyContext.class)
@@ -103,8 +106,10 @@ class SetDistVariableExecutorTest {
}
private ContextManager mockContextManager() {
+ MetaDataPersistService metaDataPersistService =
mock(MetaDataPersistService.class, RETURNS_DEEP_STUBS);
+
when(metaDataPersistService.getPropsService()).thenReturn(mock(PropertiesPersistService.class));
StandaloneModeContextManager standaloneModeContextManager = new
StandaloneModeContextManager();
- ContextManager result = new ContextManager(new
MetaDataContexts(mock(MetaDataPersistService.class), new
ShardingSphereMetaData()),
+ ContextManager result = new ContextManager(new
MetaDataContexts(metaDataPersistService, new ShardingSphereMetaData()),
new InstanceContext(new
ComputeNodeInstance(mock(InstanceMetaData.class)),
mock(WorkerIdGenerator.class),
new ModeConfiguration("Standalone", null),
standaloneModeContextManager, mock(LockContext.class), new EventBusContext()));
standaloneModeContextManager.setContextManagerAware(result);