You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2024/06/07 03:46:34 UTC

(shardingsphere) branch master updated: Fix failed to persist labels at startup (#31615)

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 <me...@gmail.com>
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();
     }