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 <[email protected]>
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,

Reply via email to