@Test public void testWithSingleHostDown() { final HostVO host = Mockito.mock(HostVO.class); Mockito.when(host.getClusterId()).thenReturn(1l); Mockito.when(host.getHypervisorType()).thenReturn(HypervisorType.KVM); Mockito.when(host.getDataCenterId()).thenReturn(1l); Mockito.when(host.getPodId()).thenReturn(1l); Mockito.when(host.getStatus()).thenReturn(HostStatus.Down); Mockito.when(host.getId()).thenReturn(1l); final VirtualMachine virtualMachine = Mockito.mock(VirtualMachine.class); Mockito.when(resourceManager.listAllHostsInCluster(1l)).thenReturn(Collections.singletonList(host)); Assert.assertFalse(fencer.fenceOff(virtualMachine, host)); }
@Override public Boolean fenceOff(final VirtualMachine vm, final Host host) { if (host.getHypervisorType() != HypervisorType.KVM) { s_logger.warn("Don't know how to fence non kvm hosts " + host.getHypervisorType()); return null; } final List<HostVO> hosts = _resourceMgr.listAllHostsInCluster(host.getClusterId()); final FenceCommand fence = new FenceCommand(vm, host); int i = 0; for (final HostVO h : hosts) { if (h.getHypervisorType() == HypervisorType.KVM) { if (h.getStatus() != HostStatus.Up) { continue; } i++; if (h.getId() == host.getId()) { continue; } final FenceAnswer answer; try { answer = (FenceAnswer) _agentMgr.send(h.getId(), fence); } catch (final AgentUnavailableException e) { s_logger.info("Moving on to the next host because " + h.toString() + " is unavailable"); continue; } catch (final OperationTimedoutException e) { s_logger.info("Moving on to the next host because " + h.toString() + " is unavailable"); continue; } if (answer != null && answer.getResult()) { return true; } } } _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_HOST, host.getDataCenterId(), host.getPodId(), "Unable to fence off host: " + host.getId(), "Fencing off host " + host.getId() + " did not succeed after asking " + i + " hosts. " + "Check Agent logs for more information."); s_logger.error("Unable to fence off " + vm.toString() + " on " + host.toString()); return false; }
KVMFencer extends AdapterBase implements FenceBuilder { @Override public Boolean fenceOff(final VirtualMachine vm, final Host host) { if (host.getHypervisorType() != HypervisorType.KVM) { s_logger.warn("Don't know how to fence non kvm hosts " + host.getHypervisorType()); return null; } final List<HostVO> hosts = _resourceMgr.listAllHostsInCluster(host.getClusterId()); final FenceCommand fence = new FenceCommand(vm, host); int i = 0; for (final HostVO h : hosts) { if (h.getHypervisorType() == HypervisorType.KVM) { if (h.getStatus() != HostStatus.Up) { continue; } i++; if (h.getId() == host.getId()) { continue; } final FenceAnswer answer; try { answer = (FenceAnswer) _agentMgr.send(h.getId(), fence); } catch (final AgentUnavailableException e) { s_logger.info("Moving on to the next host because " + h.toString() + " is unavailable"); continue; } catch (final OperationTimedoutException e) { s_logger.info("Moving on to the next host because " + h.toString() + " is unavailable"); continue; } if (answer != null && answer.getResult()) { return true; } } } _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_HOST, host.getDataCenterId(), host.getPodId(), "Unable to fence off host: " + host.getId(), "Fencing off host " + host.getId() + " did not succeed after asking " + i + " hosts. " + "Check Agent logs for more information."); s_logger.error("Unable to fence off " + vm.toString() + " on " + host.toString()); return false; } }
KVMFencer extends AdapterBase implements FenceBuilder { @Override public Boolean fenceOff(final VirtualMachine vm, final Host host) { if (host.getHypervisorType() != HypervisorType.KVM) { s_logger.warn("Don't know how to fence non kvm hosts " + host.getHypervisorType()); return null; } final List<HostVO> hosts = _resourceMgr.listAllHostsInCluster(host.getClusterId()); final FenceCommand fence = new FenceCommand(vm, host); int i = 0; for (final HostVO h : hosts) { if (h.getHypervisorType() == HypervisorType.KVM) { if (h.getStatus() != HostStatus.Up) { continue; } i++; if (h.getId() == host.getId()) { continue; } final FenceAnswer answer; try { answer = (FenceAnswer) _agentMgr.send(h.getId(), fence); } catch (final AgentUnavailableException e) { s_logger.info("Moving on to the next host because " + h.toString() + " is unavailable"); continue; } catch (final OperationTimedoutException e) { s_logger.info("Moving on to the next host because " + h.toString() + " is unavailable"); continue; } if (answer != null && answer.getResult()) { return true; } } } _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_HOST, host.getDataCenterId(), host.getPodId(), "Unable to fence off host: " + host.getId(), "Fencing off host " + host.getId() + " did not succeed after asking " + i + " hosts. " + "Check Agent logs for more information."); s_logger.error("Unable to fence off " + vm.toString() + " on " + host.toString()); return false; } KVMFencer(); }
KVMFencer extends AdapterBase implements FenceBuilder { @Override public Boolean fenceOff(final VirtualMachine vm, final Host host) { if (host.getHypervisorType() != HypervisorType.KVM) { s_logger.warn("Don't know how to fence non kvm hosts " + host.getHypervisorType()); return null; } final List<HostVO> hosts = _resourceMgr.listAllHostsInCluster(host.getClusterId()); final FenceCommand fence = new FenceCommand(vm, host); int i = 0; for (final HostVO h : hosts) { if (h.getHypervisorType() == HypervisorType.KVM) { if (h.getStatus() != HostStatus.Up) { continue; } i++; if (h.getId() == host.getId()) { continue; } final FenceAnswer answer; try { answer = (FenceAnswer) _agentMgr.send(h.getId(), fence); } catch (final AgentUnavailableException e) { s_logger.info("Moving on to the next host because " + h.toString() + " is unavailable"); continue; } catch (final OperationTimedoutException e) { s_logger.info("Moving on to the next host because " + h.toString() + " is unavailable"); continue; } if (answer != null && answer.getResult()) { return true; } } } _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_HOST, host.getDataCenterId(), host.getPodId(), "Unable to fence off host: " + host.getId(), "Fencing off host " + host.getId() + " did not succeed after asking " + i + " hosts. " + "Check Agent logs for more information."); s_logger.error("Unable to fence off " + vm.toString() + " on " + host.toString()); return false; } KVMFencer(); @Override boolean configure(final String name, final Map<String, Object> params); @Override boolean start(); @Override boolean stop(); @Override Boolean fenceOff(final VirtualMachine vm, final Host host); }
KVMFencer extends AdapterBase implements FenceBuilder { @Override public Boolean fenceOff(final VirtualMachine vm, final Host host) { if (host.getHypervisorType() != HypervisorType.KVM) { s_logger.warn("Don't know how to fence non kvm hosts " + host.getHypervisorType()); return null; } final List<HostVO> hosts = _resourceMgr.listAllHostsInCluster(host.getClusterId()); final FenceCommand fence = new FenceCommand(vm, host); int i = 0; for (final HostVO h : hosts) { if (h.getHypervisorType() == HypervisorType.KVM) { if (h.getStatus() != HostStatus.Up) { continue; } i++; if (h.getId() == host.getId()) { continue; } final FenceAnswer answer; try { answer = (FenceAnswer) _agentMgr.send(h.getId(), fence); } catch (final AgentUnavailableException e) { s_logger.info("Moving on to the next host because " + h.toString() + " is unavailable"); continue; } catch (final OperationTimedoutException e) { s_logger.info("Moving on to the next host because " + h.toString() + " is unavailable"); continue; } if (answer != null && answer.getResult()) { return true; } } } _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_HOST, host.getDataCenterId(), host.getPodId(), "Unable to fence off host: " + host.getId(), "Fencing off host " + host.getId() + " did not succeed after asking " + i + " hosts. " + "Check Agent logs for more information."); s_logger.error("Unable to fence off " + vm.toString() + " on " + host.toString()); return false; } KVMFencer(); @Override boolean configure(final String name, final Map<String, Object> params); @Override boolean start(); @Override boolean stop(); @Override Boolean fenceOff(final VirtualMachine vm, final Host host);  }