This is an automated email from the ASF dual-hosted git repository.

zhaojinchao 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 12dd7daefcf Fix failed to persist labels at startup (#31615)
12dd7daefcf is described below

commit 12dd7daefcfb3413d44dae1de58d295a514a2553
Author: Haoran Meng <[email protected]>
AuthorDate: Fri Jun 7 11:46:28 2024 +0800

    Fix failed to persist labels at startup (#31615)
---
 .../shardingsphere/infra/instance/ComputeNodeInstance.java    |  6 ++++++
 .../mode/manager/cluster/ClusterContextManagerBuilder.java    | 11 ++++-------
 2 files changed, 10 insertions(+), 7 deletions(-)

diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/instance/ComputeNodeInstance.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/instance/ComputeNodeInstance.java
index 9725f0ec8ce..3e45751644f 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/instance/ComputeNodeInstance.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/instance/ComputeNodeInstance.java
@@ -26,6 +26,7 @@ import 
org.apache.shardingsphere.infra.state.instance.InstanceStateContext;
 
 import javax.annotation.concurrent.ThreadSafe;
 import java.util.Collection;
+import java.util.Optional;
 import java.util.concurrent.CopyOnWriteArrayList;
 
 /**
@@ -45,6 +46,11 @@ public final class ComputeNodeInstance {
     @Setter
     private volatile int workerId = -1;
     
+    public ComputeNodeInstance(final InstanceMetaData metaData, final 
Collection<String> labels) {
+        this.metaData = metaData;
+        Optional.ofNullable(labels).ifPresent(this.labels::addAll);
+    }
+    
     /**
      * Switch state.
      *
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
index 7d7de23b622..dc790d7f747 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
@@ -58,7 +58,7 @@ public final class ClusterContextManagerBuilder implements 
ContextManagerBuilder
         ModeConfiguration modeConfig = param.getModeConfiguration();
         ClusterPersistRepositoryConfiguration config = 
(ClusterPersistRepositoryConfiguration) modeConfig.getRepository();
         ClusterPersistRepository repository = 
getClusterPersistRepository(config);
-        ComputeNodeInstanceContext computeNodeInstanceContext = 
buildComputeNodeInstanceContext(modeConfig, param.getInstanceMetaData(), 
repository, eventBusContext);
+        ComputeNodeInstanceContext computeNodeInstanceContext = 
buildComputeNodeInstanceContext(modeConfig, param.getInstanceMetaData(), 
repository, eventBusContext, param.getLabels());
         repository.init(config, computeNodeInstanceContext);
         MetaDataPersistService metaDataPersistService = new 
MetaDataPersistService(repository);
         MetaDataContexts metaDataContexts = 
MetaDataContextsFactory.create(metaDataPersistService, param, 
computeNodeInstanceContext,
@@ -74,9 +74,9 @@ public final class ClusterContextManagerBuilder implements 
ContextManagerBuilder
         return TypedSPILoader.getService(ClusterPersistRepository.class, 
config.getType(), config.getProps());
     }
     
-    private ComputeNodeInstanceContext buildComputeNodeInstanceContext(final 
ModeConfiguration modeConfig,
-                                                                       final 
InstanceMetaData instanceMetaData, final ClusterPersistRepository repository, 
final EventBusContext eventBusContext) {
-        return new ComputeNodeInstanceContext(new 
ComputeNodeInstance(instanceMetaData),
+    private ComputeNodeInstanceContext buildComputeNodeInstanceContext(final 
ModeConfiguration modeConfig, final InstanceMetaData instanceMetaData,
+                                                                       final 
ClusterPersistRepository repository, final EventBusContext eventBusContext, 
final Collection<String> labels) {
+        return new ComputeNodeInstanceContext(new 
ComputeNodeInstance(instanceMetaData, labels),
                 new ClusterWorkerIdGenerator(repository, 
instanceMetaData.getId()), modeConfig,
                 new GlobalLockContext(new 
GlobalLockPersistService(repository)), eventBusContext);
     }
@@ -91,9 +91,6 @@ public final class ClusterContextManagerBuilder implements 
ContextManagerBuilder
         
contextManager.getPersistServiceFacade().getComputeNodePersistService().registerOnline(computeNodeInstanceContext.getInstance());
         new GovernanceWatcherFactory(repository, 
eventBusContext).watchListeners();
         watchDatabaseMetaDataListener(param, 
contextManager.getPersistServiceFacade().getMetaDataPersistService(), 
eventBusContext);
-        if (null != param.getLabels()) {
-            
contextManager.getComputeNodeInstanceContext().getInstance().getLabels().addAll(param.getLabels());
-        }
         
contextManager.getComputeNodeInstanceContext().getAllClusterInstances().addAll(contextManager.getPersistServiceFacade().getComputeNodePersistService().loadAllComputeNodeInstances());
         new ClusterEventSubscriberRegistry(contextManager, 
repository).register();
     }

Reply via email to