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,