diff --git a/api/src/main/java/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementService.java b/api/src/main/java/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementService.java index 4f6f1ad66c93..789961a229f3 100644 --- a/api/src/main/java/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementService.java +++ b/api/src/main/java/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementService.java @@ -38,6 +38,7 @@ public interface OutOfBandManagementService { long getId(); boolean isOutOfBandManagementEnabled(Host host); + boolean isOutOfBandManagementEnabledForHost(Long hostId); void submitBackgroundPowerSyncTask(Host host); boolean transitionPowerStateToDisabled(List hostIds); 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 b937be5265b7..f819e3d2da20 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 @@ -47,7 +47,7 @@ public final class KVMHAProvider extends HAAbstractHostProvider implements HAPro @Override public boolean isEligible(final Host host) { - if (outOfBandManagementService.isOutOfBandManagementEnabled(host)){ + if (outOfBandManagementService.isOutOfBandManagementEnabled(host)) { return !isInMaintenanceMode(host) && !isDisabled(host) && hostActivityChecker.getNeighbors(host).length > 0 && (Hypervisor.HypervisorType.KVM.equals(host.getHypervisorType()) || @@ -57,45 +57,54 @@ public boolean isEligible(final Host host) { } @Override - public boolean isHealthy(final Host r) throws HACheckerException { - return hostActivityChecker.isHealthy(r); + public boolean isHealthy(final Host host) throws HACheckerException { + return hostActivityChecker.isHealthy(host); } @Override - public boolean hasActivity(final Host r, final DateTime suspectTime) throws HACheckerException { - return hostActivityChecker.isActive(r, suspectTime); + public boolean hasActivity(final Host host, final DateTime suspectTime) throws HACheckerException { + return hostActivityChecker.isActive(host, suspectTime); } @Override - public boolean recover(Host r) throws HARecoveryException { + public boolean recover(Host host) throws HARecoveryException { try { - if (outOfBandManagementService.isOutOfBandManagementEnabled(r)){ - final OutOfBandManagementResponse resp = outOfBandManagementService.executePowerOperation(r, PowerOperation.RESET, null); + if (outOfBandManagementService.isOutOfBandManagementEnabled(host)) { + final OutOfBandManagementResponse resp = outOfBandManagementService.executePowerOperation(host, PowerOperation.RESET, null); return resp.getSuccess(); } else { - logger.warn("OOBM recover operation failed for the host {}", r); + logger.warn("OOBM recover operation failed for the host {}", host); return false; } - } catch (Exception e){ - logger.warn("OOBM service is not configured or enabled for this host {} error is {}", r, e.getMessage()); - throw new HARecoveryException(String.format(" OOBM service is not configured or enabled for this host %s", r), e); + } catch (Exception e) { + String msg = "Failed to recover host " + host; + if (host != null && !outOfBandManagementService.isOutOfBandManagementEnabledForHost(host.getId())) { + msg = "OOBM service is not configured or enabled for this host " + host; + } + + logger.warn("{}, error is {}", msg, e.getMessage()); + throw new HARecoveryException(msg, e); } } @Override - public boolean fence(Host r) throws HAFenceException { - + public boolean fence(Host host) throws HAFenceException { try { - if (outOfBandManagementService.isOutOfBandManagementEnabled(r)){ - final OutOfBandManagementResponse resp = outOfBandManagementService.executePowerOperation(r, PowerOperation.OFF, null); + if (outOfBandManagementService.isOutOfBandManagementEnabled(host)){ + final OutOfBandManagementResponse resp = outOfBandManagementService.executePowerOperation(host, PowerOperation.OFF, null); return resp.getSuccess(); } else { - logger.warn("OOBM fence operation failed for this host {}", r); + logger.warn("OOBM fence operation failed for this host {}", host); return false; } - } catch (Exception e){ - logger.warn("OOBM service is not configured or enabled for this host {} error is {}", r, e.getMessage()); - throw new HAFenceException(String.format("OBM service is not configured or enabled for this host %s", r.getName()), e); + } catch (Exception e) { + String msg = "Failed to fence host " + host; + if (host != null && !outOfBandManagementService.isOutOfBandManagementEnabledForHost(host.getId())) { + msg = "OOBM service is not configured or enabled for this host " + host; + } + + logger.warn("{}, error is {}", msg, e.getMessage()); + throw new HAFenceException(msg, e); } } diff --git a/server/src/main/java/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementServiceImpl.java b/server/src/main/java/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementServiceImpl.java index d5013f71cb5a..611c386c3dac 100644 --- a/server/src/main/java/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementServiceImpl.java +++ b/server/src/main/java/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementServiceImpl.java @@ -236,6 +236,7 @@ private boolean isOutOfBandManagementEnabledForZone(Long zoneId) { } final DataCenterDetailVO zoneDetails = dataCenterDetailsDao.findDetail(zoneId, OOBM_ENABLED_DETAIL); if (zoneDetails != null && StringUtils.isNotEmpty(zoneDetails.getValue()) && !Boolean.valueOf(zoneDetails.getValue())) { + logger.debug("Out-of-band management disabled for zone {}", zoneId); return false; } return true; @@ -247,12 +248,13 @@ private boolean isOutOfBandManagementEnabledForCluster(Long clusterId) { } final ClusterDetailsVO clusterDetails = clusterDetailsDao.findDetail(clusterId, OOBM_ENABLED_DETAIL); if (clusterDetails != null && StringUtils.isNotEmpty(clusterDetails.getValue()) && !Boolean.valueOf(clusterDetails.getValue())) { + logger.debug("Out-of-band management disabled for cluster {}", clusterId); return false; } return true; } - private boolean isOutOfBandManagementEnabledForHost(Long hostId) { + public boolean isOutOfBandManagementEnabledForHost(Long hostId) { if (hostId == null) { return false; } @@ -266,6 +268,7 @@ private boolean isOutOfBandManagementEnabledForHost(Long hostId) { final OutOfBandManagement outOfBandManagementConfig = outOfBandManagementDao.findByHost(hostId); if (outOfBandManagementConfig == null || !outOfBandManagementConfig.isEnabled()) { + logger.debug("Out-of-band management disabled for host {}", hostId); return false; } return true;