From 2ababedd7b6446623cb5cb9a674a2d89d764046c Mon Sep 17 00:00:00 2001 From: zstack Date: Tue, 12 May 2026 00:18:55 -0700 Subject: [PATCH] [ceph]: skip ceph ops on non-enabled cluster + timeout Skip Ceph secret creation when cluster is not Enabled to prevent reconnect timeout. Add 5-minute await timeout to FutureCompletion to prevent permanent blocking. Resolves: ZSTAC-80275 Change-Id: Iaa61109103cc5b4ee9bf86485e1777456b172b56 --- .../storage/ceph/primary/CephKvmExtension.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/plugin/ceph/src/main/java/org/zstack/storage/ceph/primary/CephKvmExtension.java b/plugin/ceph/src/main/java/org/zstack/storage/ceph/primary/CephKvmExtension.java index 461e841f69f..dc0148f457d 100755 --- a/plugin/ceph/src/main/java/org/zstack/storage/ceph/primary/CephKvmExtension.java +++ b/plugin/ceph/src/main/java/org/zstack/storage/ceph/primary/CephKvmExtension.java @@ -27,11 +27,17 @@ import org.zstack.storage.ceph.CephConstants; import org.zstack.storage.primary.CheckHostStorageConnectionMsg; import org.zstack.utils.CollectionUtils; +import org.zstack.utils.Utils; import org.zstack.utils.function.Function; +import org.zstack.utils.logging.CLogger; + +import org.zstack.header.cluster.ClusterState; +import org.zstack.header.cluster.ClusterVO; import javax.persistence.TypedQuery; import java.util.List; import java.util.Map; +import java.util.concurrent.TimeUnit; import static org.zstack.utils.CollectionDSL.list; @@ -39,6 +45,8 @@ * Created by frank on 8/17/2015. */ public class CephKvmExtension implements KVMHostConnectExtensionPoint, HostConnectionReestablishExtensionPoint { + private static final CLogger logger = Utils.getLogger(CephKvmExtension.class); + @Autowired private CloudBus bus; @Autowired @@ -50,6 +58,14 @@ public void connectionReestablished(HostInventory inv) throws HostException { return; } + // skip Ceph storage operations if cluster is not Enabled (ZSTAC-80275) + ClusterVO cluster = dbf.findByUuid(inv.getClusterUuid(), ClusterVO.class); + if (cluster != null && cluster.getState() != ClusterState.Enabled) { + logger.info(String.format("skip Ceph secret creation on host[uuid:%s] because cluster[uuid:%s] is %s", + inv.getUuid(), inv.getClusterUuid(), cluster.getState())); + return; + } + FutureCompletion completion = new FutureCompletion(null); createSecret(inv.getUuid(), inv.getClusterUuid(), new Completion(completion) { @Override @@ -63,7 +79,7 @@ public void fail(ErrorCode errorCode) { } }); - completion.await(); + completion.await(TimeUnit.MINUTES.toMillis(5)); if (!completion.isSuccess()) { throw new OperationFailureException(completion.getErrorCode());