From 3ef30251886e217c69d8072ced52e521e7a13225 Mon Sep 17 00:00:00 2001 From: leo79901 Date: Wed, 4 Dec 2024 21:39:15 +0800 Subject: [PATCH 1/2] add check befor fencing Resolve the issur : Should not shutting down a server which is already shut. Thanks for DaanHoogland which provide code. --- .../cloudstack/kvm/ha/KVMHAProvider.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/kvm/ha/KVMHAProvider.java b/plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/kvm/ha/KVMHAProvider.java index 14922727d34d..4804310378ae 100644 --- a/plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/kvm/ha/KVMHAProvider.java +++ b/plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/kvm/ha/KVMHAProvider.java @@ -35,6 +35,7 @@ import org.apache.cloudstack.outofbandmanagement.OutOfBandManagementService; import org.apache.log4j.Logger; import org.joda.time.DateTime; +import com.cloud.host.Status; import javax.inject.Inject; import java.security.InvalidParameterException; @@ -86,17 +87,23 @@ public boolean recover(Host r) throws HARecoveryException { @Override public boolean fence(Host r) throws HAFenceException { - try { - if (outOfBandManagementService.isOutOfBandManagementEnabled(r)){ - final OutOfBandManagementResponse resp = outOfBandManagementService.executePowerOperation(r, PowerOperation.OFF, null); - return resp.getSuccess(); + // host exists and is managed OOB + if (r != null && outOfBandManagementService.isOutOfBandManagementEnabled(r)) { + // check host status + if (Status.Down.equals(r.getStatus())) { + logger.info("Host " + r.getName() + " is already down. Returning success."); + return true; + } else { + final OutOfBandManagementResponse resp = outOfBandManagementService.executePowerOperation(r, PowerOperation.OFF, null); + return resp.getSuccess(); + } } else { - LOG.warn("OOBM fence operation failed for this host " + r.getName()); + logger.warn("OOBM fence operation failed for this host " + r.getName()); return false; } } catch (Exception e){ - LOG.warn("OOBM service is not configured or enabled for this host " + r.getName() + " error is " + e.getMessage()); + logger.warn("OOBM service is not configured or enabled for this host " + r.getName() + " error is " + e.getMessage()); throw new HAFenceException("OBM service is not configured or enabled for this host " + r.getName() , e); } } From f5dee3b3240332811d1279108fffec0adef81467 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Sun, 8 Dec 2024 14:04:22 +0100 Subject: [PATCH 2/2] rename logger to prevent merge forward conflict --- .../java/org/apache/cloudstack/kvm/ha/KVMHAProvider.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/kvm/ha/KVMHAProvider.java b/plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/kvm/ha/KVMHAProvider.java index 4804310378ae..b429ef2f781f 100644 --- a/plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/kvm/ha/KVMHAProvider.java +++ b/plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/kvm/ha/KVMHAProvider.java @@ -41,7 +41,7 @@ import java.security.InvalidParameterException; public final class KVMHAProvider extends HAAbstractHostProvider implements HAProvider, Configurable { - private final static Logger LOG = Logger.getLogger(KVMHAProvider.class); + private final static Logger logger = Logger.getLogger(KVMHAProvider.class); @Inject protected KVMHostActivityChecker hostActivityChecker; @@ -76,11 +76,11 @@ public boolean recover(Host r) throws HARecoveryException { final OutOfBandManagementResponse resp = outOfBandManagementService.executePowerOperation(r, PowerOperation.RESET, null); return resp.getSuccess(); } else { - LOG.warn("OOBM recover operation failed for the host " + r.getName()); + logger.warn("OOBM recover operation failed for the host " + r.getName()); return false; } } catch (Exception e){ - LOG.warn("OOBM service is not configured or enabled for this host " + r.getName() + " error is " + e.getMessage()); + logger.warn("OOBM service is not configured or enabled for this host " + r.getName() + " error is " + e.getMessage()); throw new HARecoveryException(" OOBM service is not configured or enabled for this host " + r.getName(), e); } }