mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
Bug 11670 - OVM - HA failed when host is disconnected from network
status 11670: resolved fixed
This commit is contained in:
parent
c46f9c5bf0
commit
cd6b872f8d
@ -79,6 +79,7 @@
|
||||
<adapter name="XenServerFenceBuilder" class="com.cloud.ha.XenServerFencer"/>
|
||||
<adapter name="KVMFenceBuilder" class="com.cloud.ha.KVMFencer"/>
|
||||
<adapter name="VmwareFenceBuilder" class="com.cloud.ha.VmwareFencer"/>
|
||||
<adapter name="VmwareFenceBuilder" class="com.cloud.ovm.hypervisor.OvmFencer"/>
|
||||
</adapters>
|
||||
<adapters key="com.cloud.hypervisor.HypervisorGuru">
|
||||
<adapter name="XenServerGuru" class="com.cloud.hypervisor.XenServerGuru"/>
|
||||
|
||||
109
ovm/src/com/cloud/ovm/hypervisor/OvmFencer.java
Executable file
109
ovm/src/com/cloud/ovm/hypervisor/OvmFencer.java
Executable file
@ -0,0 +1,109 @@
|
||||
package com.cloud.ovm.hypervisor;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.ejb.Local;
|
||||
import javax.naming.ConfigurationException;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.agent.AgentManager;
|
||||
import com.cloud.agent.api.FenceAnswer;
|
||||
import com.cloud.agent.api.FenceCommand;
|
||||
import com.cloud.exception.AgentUnavailableException;
|
||||
import com.cloud.exception.OperationTimedoutException;
|
||||
import com.cloud.ha.FenceBuilder;
|
||||
import com.cloud.host.HostVO;
|
||||
import com.cloud.host.Status;
|
||||
import com.cloud.host.dao.HostDao;
|
||||
import com.cloud.hypervisor.Hypervisor.HypervisorType;
|
||||
import com.cloud.utils.component.Inject;
|
||||
import com.cloud.vm.VMInstanceVO;
|
||||
|
||||
@Local(value=FenceBuilder.class)
|
||||
public class OvmFencer implements FenceBuilder {
|
||||
private static final Logger s_logger = Logger.getLogger(OvmFencer.class);
|
||||
String _name;
|
||||
@Inject HostDao _hostDao;
|
||||
@Inject AgentManager _agentMgr;
|
||||
|
||||
@Override
|
||||
public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
|
||||
_name = name;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
// TODO Auto-generated method stub
|
||||
return _name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean start() {
|
||||
// TODO Auto-generated method stub
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean stop() {
|
||||
// TODO Auto-generated method stub
|
||||
return true;
|
||||
}
|
||||
|
||||
public OvmFencer() {
|
||||
super();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean fenceOff(VMInstanceVO vm, HostVO host) {
|
||||
if (host.getHypervisorType() != HypervisorType.Ovm) {
|
||||
s_logger.debug("Don't know how to fence non Ovm hosts " + host.getHypervisorType());
|
||||
return null;
|
||||
}
|
||||
|
||||
List<HostVO> hosts = _hostDao.listByCluster(host.getClusterId());
|
||||
FenceCommand fence = new FenceCommand(vm, host);
|
||||
|
||||
for (HostVO h : hosts) {
|
||||
if (h.getHypervisorType() != HypervisorType.Ovm) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if( h.getStatus() != Status.Up ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if( h.getId() == host.getId() ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
FenceAnswer answer;
|
||||
try {
|
||||
answer = (FenceAnswer)_agentMgr.send(h.getId(), fence);
|
||||
} catch (AgentUnavailableException e) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Moving on to the next host because " + h.toString() + " is unavailable");
|
||||
}
|
||||
continue;
|
||||
} catch (OperationTimedoutException e) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Moving on to the next host because " + h.toString() + " is unavailable");
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
if (answer != null && answer.getResult()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Unable to fence off " + vm.toString() + " on " + host.toString());
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
@ -3210,7 +3210,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
|
||||
}
|
||||
throw new InvalidParameterValueException("VM is not Running, unable to migrate the vm " + vm);
|
||||
}
|
||||
if (!vm.getHypervisorType().equals(HypervisorType.XenServer) && !vm.getHypervisorType().equals(HypervisorType.VMware) && !vm.getHypervisorType().equals(HypervisorType.KVM)) {
|
||||
if (!vm.getHypervisorType().equals(HypervisorType.XenServer) && !vm.getHypervisorType().equals(HypervisorType.VMware) && !vm.getHypervisorType().equals(HypervisorType.KVM) && !vm.getHypervisorType().equals(HypervisorType.Ovm)) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug(vm + " is not XenServer/VMware/KVM, cannot migrate this VM.");
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user