CLOUDSTACK-5661 [VMware] DetachIsoCmd succeeds even though cdrom is locked by VM as cdrom is mounted

DetachISO is succeeding even though detach opeartion is failing as cdrom is locked by VM as it was mounted inside VM.
Detect if cdrom is locked or not. If locked fail detach operation and warn user to unmount before detaching the iso/cdrom device.

Signed-off-by: Sateesh Chodapuneedi <sateesh@apache.org>

Conflicts:

	plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
	plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java
	vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java
This commit is contained in:
Sateesh Chodapuneedi 2013-12-28 02:36:53 +05:30
parent f6b063de79
commit db99146187
3 changed files with 22 additions and 7 deletions

View File

@ -4945,9 +4945,12 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
if (cmd.isAttach()) {
vmMo.mountToolsInstaller();
} else {
try {
vmMo.unmountToolsInstaller();
} catch (Throwable e) {
try{
if (!vmMo.unmountToolsInstaller()) {
return new Answer(cmd, false,
"Failed to unmount vmware-tools installer ISO as the corresponding CDROM device is locked by VM. Please unmount the CDROM device inside the VM and ret-try.");
}
}catch(Throwable e){
vmMo.detachIso(null);
}
}

View File

@ -1263,9 +1263,11 @@ public class VmwareStorageProcessor implements StorageProcessor {
if (isAttach) {
vmMo.mountToolsInstaller();
} else {
try {
vmMo.unmountToolsInstaller();
} catch (Throwable e) {
try{
if (!vmMo.unmountToolsInstaller()) {
return new AttachAnswer("Failed to unmount vmware-tools installer ISO as the corresponding CDROM device is locked by VM. Please unmount the CDROM device inside the VM and ret-try.");
}
} catch(Throwable e){
vmMo.detachIso(null);
}
}

View File

@ -2345,11 +2345,13 @@ public class VirtualMachineMO extends BaseMO {
_context.getService().mountToolsInstaller(_mor);
}
public void unmountToolsInstaller() throws Exception {
public boolean unmountToolsInstaller() throws Exception {
int i = 1;
// Monitor VM questions
final Boolean[] flags = {false};
final VirtualMachineMO vmMo = this;
final boolean[] encounterQuestion = new boolean[1];
encounterQuestion[0] = false;
Future<?> future = MonitorServiceExecutor.submit(new Runnable() {
@Override
public void run() {
@ -2360,6 +2362,7 @@ public class VirtualMachineMO extends BaseMO {
VirtualMachineRuntimeInfo runtimeInfo = vmMo.getRuntimeInfo();
VirtualMachineQuestionInfo question = runtimeInfo.getQuestion();
if (question != null) {
encounterQuestion[0] = true;
if (s_logger.isTraceEnabled()) {
s_logger.trace("Question id: " + question.getId());
s_logger.trace("Question text: " + question.getText());
@ -2425,6 +2428,13 @@ public class VirtualMachineMO extends BaseMO {
flags[0] = true;
future.cancel(true);
}
if (encounterQuestion[0]) {
s_logger.warn("cdrom is locked by VM. Failed to detach the ISO.");
return false;
} else {
s_logger.info("Successfully unmounted tools installer from VM.");
return true;
}
}
public void redoRegistration(ManagedObjectReference morHost) throws Exception {