Merge branch '4.9'

This commit is contained in:
Rohit Yadav 2016-11-25 13:10:56 +05:30
commit d8c038e5b2
No known key found for this signature in database
GPG Key ID: 484248210EE3D884
8 changed files with 40 additions and 2 deletions

View File

@ -89,6 +89,8 @@ public interface VirtualMachineManager extends Manager {
void stop(String vmUuid) throws ResourceUnavailableException; void stop(String vmUuid) throws ResourceUnavailableException;
void stopForced(String vmUuid) throws ResourceUnavailableException;
void expunge(String vmUuid) throws ResourceUnavailableException; void expunge(String vmUuid) throws ResourceUnavailableException;
void registerGuru(VirtualMachine.Type type, VirtualMachineGuru guru); void registerGuru(VirtualMachine.Type type, VirtualMachineGuru guru);

View File

@ -114,6 +114,12 @@ public interface VirtualMachineEntity extends CloudStackEntity {
*/ */
boolean stop(String caller) throws ResourceUnavailableException, CloudException; boolean stop(String caller) throws ResourceUnavailableException, CloudException;
/**
* Stop the virtual machine, by force if necessary
*
*/
boolean stopForced(String caller) throws ResourceUnavailableException, CloudException;
/** /**
* Cleans up after any botched starts. CloudStack Orchestration Platform * Cleans up after any botched starts. CloudStack Orchestration Platform
* will attempt a best effort to actually shutdown any resource but * will attempt a best effort to actually shutdown any resource but

View File

@ -1239,6 +1239,18 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
} catch (final ConcurrentOperationException e) { } catch (final ConcurrentOperationException e) {
throw new CloudRuntimeException("Unable to stop vm because of a concurrent operation", e); throw new CloudRuntimeException("Unable to stop vm because of a concurrent operation", e);
} }
}
@Override
public void stopForced(String vmUuid) throws ResourceUnavailableException {
try {
advanceStop(vmUuid, true);
} catch (final OperationTimedoutException e) {
throw new AgentUnavailableException("Unable to stop vm because the operation to stop timed out", e.getAgentId(), e);
} catch (final ConcurrentOperationException e) {
throw new CloudRuntimeException("Unable to stop vm because of a concurrent operation", e);
}
} }
@Override @Override

View File

@ -44,5 +44,7 @@ public interface VMEntityManager {
boolean stopvirtualmachine(VMEntityVO vmEntityVO, String caller) throws ResourceUnavailableException; boolean stopvirtualmachine(VMEntityVO vmEntityVO, String caller) throws ResourceUnavailableException;
boolean stopvirtualmachineforced(VMEntityVO vmEntityVO, String caller) throws ResourceUnavailableException;
boolean destroyVirtualMachine(VMEntityVO vmEntityVO, String caller) throws AgentUnavailableException, OperationTimedoutException, ConcurrentOperationException; boolean destroyVirtualMachine(VMEntityVO vmEntityVO, String caller) throws AgentUnavailableException, OperationTimedoutException, ConcurrentOperationException;
} }

View File

@ -254,6 +254,12 @@ public class VMEntityManagerImpl implements VMEntityManager {
return true; return true;
} }
@Override
public boolean stopvirtualmachineforced(VMEntityVO vmEntityVO, String caller) throws ResourceUnavailableException {
_itMgr.stopForced(vmEntityVO.getUuid());
return true;
}
@Override @Override
public boolean destroyVirtualMachine(VMEntityVO vmEntityVO, String caller) throws AgentUnavailableException, OperationTimedoutException, ConcurrentOperationException { public boolean destroyVirtualMachine(VMEntityVO vmEntityVO, String caller) throws AgentUnavailableException, OperationTimedoutException, ConcurrentOperationException {

View File

@ -217,6 +217,11 @@ public class VirtualMachineEntityImpl implements VirtualMachineEntity {
return manager.stopvirtualmachine(this.vmEntityVO, caller); return manager.stopvirtualmachine(this.vmEntityVO, caller);
} }
@Override
public boolean stopForced(String caller) throws ResourceUnavailableException {
return manager.stopvirtualmachineforced(this.vmEntityVO, caller);
}
@Override @Override
public void cleanup() { public void cleanup() {
// TODO Auto-generated method stub // TODO Auto-generated method stub

View File

@ -200,7 +200,7 @@ public class BaremetalPxeManagerImpl extends ManagerBase implements BaremetalPxe
cmd.addVmData("metadata", "local-hostname", StringUtils.unicodeEscape(vm.getInstanceName())); cmd.addVmData("metadata", "local-hostname", StringUtils.unicodeEscape(vm.getInstanceName()));
cmd.addVmData("metadata", "public-ipv4", nic.getIPv4Address()); cmd.addVmData("metadata", "public-ipv4", nic.getIPv4Address());
cmd.addVmData("metadata", "public-hostname", StringUtils.unicodeEscape(vm.getInstanceName())); cmd.addVmData("metadata", "public-hostname", StringUtils.unicodeEscape(vm.getInstanceName()));
cmd.addVmData("metadata", "instance-id", String.valueOf(vm.getId())); cmd.addVmData("metadata", "instance-id", String.valueOf(vm.getUuid()));
cmd.addVmData("metadata", "vm-id", String.valueOf(vm.getInstanceName())); cmd.addVmData("metadata", "vm-id", String.valueOf(vm.getInstanceName()));
cmd.addVmData("metadata", "public-keys", null); cmd.addVmData("metadata", "public-keys", null);
String cloudIdentifier = _configDao.getValue("cloud.identifier"); String cloudIdentifier = _configDao.getValue("cloud.identifier");

View File

@ -3918,7 +3918,12 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
boolean status = false; boolean status = false;
try { try {
VirtualMachineEntity vmEntity = _orchSrvc.getVirtualMachine(vm.getUuid()); VirtualMachineEntity vmEntity = _orchSrvc.getVirtualMachine(vm.getUuid());
status = vmEntity.stop(Long.toString(userId));
if(forced) {
status = vmEntity.stopForced(Long.toString(userId));
} else {
status = vmEntity.stop(Long.toString(userId));
}
if (status) { if (status) {
return _vmDao.findById(vmId); return _vmDao.findById(vmId);
} else { } else {