You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2022/01/19 10:59:12 UTC
[shardingsphere] branch master updated: Add overwrite judgment for persistence of proxy labels (#14901)
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 dbb6406 Add overwrite judgment for persistence of proxy labels (#14901)
dbb6406 is described below
commit dbb6406fa90262a04065347139f5e425ff0ffd71
Author: Haoran Meng <me...@gmail.com>
AuthorDate: Wed Jan 19 18:58:19 2022 +0800
Add overwrite judgment for persistence of proxy labels (#14901)
---
.../mode/metadata/persist/MetaDataPersistService.java | 5 +++--
.../metadata/persist/service/ComputeNodePersistService.java | 11 +++++++++--
.../mode/metadata/persist/MetaDataPersistServiceTest.java | 13 +++++++++++++
.../mode/manager/cluster/ClusterContextManagerBuilder.java | 8 +++-----
4 files changed, 28 insertions(+), 9 deletions(-)
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistService.java b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistService.java
index 73e5dce..aa591d6 100644
--- a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistService.java
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistService.java
@@ -88,8 +88,9 @@ public final class MetaDataPersistService {
*
* @param instanceId instance id
* @param labels collection of label
+ * @param isOverwrite whether overwrite registry center's configuration if existed
*/
- public void persistInstanceConfigurations(final String instanceId, final Collection<String> labels) {
- computeNodePersistService.persistInstanceLabels(instanceId, labels);
+ public void persistInstanceConfigurations(final String instanceId, final Collection<String> labels, final boolean isOverwrite) {
+ computeNodePersistService.persistInstanceLabels(instanceId, labels, isOverwrite);
}
}
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/ComputeNodePersistService.java b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/ComputeNodePersistService.java
index 96464b3..9bad684 100644
--- a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/ComputeNodePersistService.java
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/ComputeNodePersistService.java
@@ -46,9 +46,16 @@ public final class ComputeNodePersistService {
*
* @param instanceId instance id
* @param labels collection of label
+ * @param isOverwrite whether overwrite registry center's configuration if existed
*/
- public void persistInstanceLabels(final String instanceId, final Collection<String> labels) {
- repository.persist(ComputeNode.getInstanceLabelNodePath(instanceId), YamlEngine.marshal(labels));
+ public void persistInstanceLabels(final String instanceId, final Collection<String> labels, final boolean isOverwrite) {
+ if (null != labels && !labels.isEmpty() && (isOverwrite || !isExisted(instanceId))) {
+ repository.persist(ComputeNode.getInstanceLabelNodePath(instanceId), YamlEngine.marshal(labels));
+ }
+ }
+
+ private boolean isExisted(final String instanceId) {
+ return !Strings.isNullOrEmpty(repository.get(ComputeNode.getInstanceLabelNodePath(instanceId)));
}
/**
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistServiceTest.java b/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistServiceTest.java
index a5be652..6b0b720 100644
--- a/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistServiceTest.java
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistServiceTest.java
@@ -24,6 +24,7 @@ import org.apache.shardingsphere.infra.config.datasource.props.DataSourcePropert
import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
import org.apache.shardingsphere.infra.yaml.config.swapper.YamlRuleConfigurationSwapperEngine;
import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
+import org.apache.shardingsphere.mode.metadata.persist.service.ComputeNodePersistService;
import org.apache.shardingsphere.mode.metadata.persist.service.impl.DataSourcePersistService;
import org.apache.shardingsphere.mode.metadata.persist.service.impl.GlobalRulePersistService;
import org.apache.shardingsphere.mode.metadata.persist.service.impl.PropertiesPersistService;
@@ -42,6 +43,7 @@ import java.lang.reflect.Field;
import java.net.URISyntaxException;
import java.nio.file.Files;
import java.nio.file.Paths;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
@@ -50,6 +52,7 @@ import java.util.Map.Entry;
import java.util.Properties;
import java.util.stream.Collectors;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
@@ -70,6 +73,9 @@ public final class MetaDataPersistServiceTest {
@Mock
private PropertiesPersistService propsService;
+ @Mock
+ private ComputeNodePersistService computeNodePersistService;
+
private MetaDataPersistService metaDataPersistService;
@Before
@@ -79,6 +85,7 @@ public final class MetaDataPersistServiceTest {
setField("schemaRuleService", schemaRuleService);
setField("globalRuleService", globalRuleService);
setField("propsService", propsService);
+ setField("computeNodePersistService", computeNodePersistService);
}
private void setField(final String name, final Object value) throws ReflectiveOperationException {
@@ -101,6 +108,12 @@ public final class MetaDataPersistServiceTest {
verify(propsService).persist(props, false);
}
+ @Test
+ public void assertPersistInstanceConfigurations() {
+ metaDataPersistService.persistInstanceConfigurations("127.0.0.1@3307", Arrays.asList("foo_label"), false);
+ verify(computeNodePersistService).persistInstanceLabels(eq("127.0.0.1@3307"), eq(Arrays.asList("foo_label")), eq(false));
+ }
+
private Map<String, DataSourceProperties> createDataSourcePropertiesMap() {
return createDataSourceMap().entrySet().stream().collect(Collectors.toMap(Entry::getKey, entry ->
DataSourcePropertiesCreator.create(entry.getValue()), (oldValue, currentValue) -> oldValue, LinkedHashMap::new));
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
index abf1807..938effd 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
@@ -95,7 +95,7 @@ public final class ClusterContextManagerBuilder implements ContextManagerBuilder
ModeScheduleContextFactory.getInstance().init(parameter.getInstanceDefinition().getInstanceId().getId(), parameter.getModeConfig());
metaDataPersistService = new MetaDataPersistService(repository);
persistConfigurations(metaDataPersistService, parameter.getDataSourcesMap(), parameter.getSchemaRuleConfigs(), parameter.getGlobalRuleConfigs(), parameter.getProps(), parameter.isOverwrite());
- persistInstanceConfigurations(parameter.getLabels(), parameter.getInstanceDefinition());
+ persistInstanceConfigurations(parameter.getLabels(), parameter.getInstanceDefinition(), parameter.isOverwrite());
Collection<String> schemaNames = Strings.isNullOrEmpty(parameter.getSchemaName()) ? metaDataPersistService.getSchemaMetaDataService()
.loadAllNames() : Collections.singletonList(parameter.getSchemaName());
Map<String, Map<String, DataSource>> clusterDataSources = loadDataSourcesMap(metaDataPersistService, parameter.getDataSourcesMap(), schemaNames);
@@ -131,10 +131,8 @@ public final class ClusterContextManagerBuilder implements ContextManagerBuilder
}
}
- private void persistInstanceConfigurations(final Collection<String> labels, final InstanceDefinition instanceDefinition) {
- if (null != labels && !labels.isEmpty()) {
- metaDataPersistService.persistInstanceConfigurations(instanceDefinition.getInstanceId().getId(), labels);
- }
+ private void persistInstanceConfigurations(final Collection<String> labels, final InstanceDefinition instanceDefinition, final boolean overwrite) {
+ metaDataPersistService.persistInstanceConfigurations(instanceDefinition.getInstanceId().getId(), labels, overwrite);
}
private boolean isEmptyLocalConfiguration(final Map<String, Map<String, DataSource>> dataSourcesMap,