mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
CLOUDSTACK-7248. [VMware] Extract volume fails with an NPE.
Synchronize attach disk to VM on the VM object value instead of using a DB lock.
This commit is contained in:
parent
bb7fc59947
commit
b41a78ce0f
@ -1056,26 +1056,28 @@ public class VirtualMachineMO extends BaseMO {
|
|||||||
s_logger.trace("vCenter API trace - attachDisk(). target MOR: " + _mor.getValue() + ", vmdkDatastorePath: " + new Gson().toJson(vmdkDatastorePathChain) +
|
s_logger.trace("vCenter API trace - attachDisk(). target MOR: " + _mor.getValue() + ", vmdkDatastorePath: " + new Gson().toJson(vmdkDatastorePathChain) +
|
||||||
", datastore: " + morDs.getValue());
|
", datastore: " + morDs.getValue());
|
||||||
|
|
||||||
VirtualDevice newDisk = VmwareHelper.prepareDiskDevice(this, null, getScsiDeviceControllerKey(), vmdkDatastorePathChain, morDs, -1, 1);
|
synchronized (_mor.getValue().intern()) {
|
||||||
VirtualMachineConfigSpec reConfigSpec = new VirtualMachineConfigSpec();
|
VirtualDevice newDisk = VmwareHelper.prepareDiskDevice(this, null, getScsiDeviceControllerKey(), vmdkDatastorePathChain, morDs, -1, 1);
|
||||||
VirtualDeviceConfigSpec deviceConfigSpec = new VirtualDeviceConfigSpec();
|
VirtualMachineConfigSpec reConfigSpec = new VirtualMachineConfigSpec();
|
||||||
|
VirtualDeviceConfigSpec deviceConfigSpec = new VirtualDeviceConfigSpec();
|
||||||
|
|
||||||
deviceConfigSpec.setDevice(newDisk);
|
deviceConfigSpec.setDevice(newDisk);
|
||||||
deviceConfigSpec.setOperation(VirtualDeviceConfigSpecOperation.ADD);
|
deviceConfigSpec.setOperation(VirtualDeviceConfigSpecOperation.ADD);
|
||||||
|
|
||||||
reConfigSpec.getDeviceChange().add(deviceConfigSpec);
|
reConfigSpec.getDeviceChange().add(deviceConfigSpec);
|
||||||
|
|
||||||
ManagedObjectReference morTask = _context.getService().reconfigVMTask(_mor, reConfigSpec);
|
ManagedObjectReference morTask = _context.getService().reconfigVMTask(_mor, reConfigSpec);
|
||||||
boolean result = _context.getVimClient().waitForTask(morTask);
|
boolean result = _context.getVimClient().waitForTask(morTask);
|
||||||
|
|
||||||
if (!result) {
|
if (!result) {
|
||||||
if (s_logger.isTraceEnabled())
|
if (s_logger.isTraceEnabled())
|
||||||
s_logger.trace("vCenter API trace - attachDisk() done(failed)");
|
s_logger.trace("vCenter API trace - attachDisk() done(failed)");
|
||||||
throw new Exception("Failed to attach disk due to " + TaskMO.getTaskFailureInfo(_context, morTask));
|
throw new Exception("Failed to attach disk due to " + TaskMO.getTaskFailureInfo(_context, morTask));
|
||||||
|
}
|
||||||
|
|
||||||
|
_context.waitForTaskProgressDone(morTask);
|
||||||
}
|
}
|
||||||
|
|
||||||
_context.waitForTaskProgressDone(morTask);
|
|
||||||
|
|
||||||
if (s_logger.isTraceEnabled())
|
if (s_logger.isTraceEnabled())
|
||||||
s_logger.trace("vCenter API trace - attachDisk() done(successfully)");
|
s_logger.trace("vCenter API trace - attachDisk() done(successfully)");
|
||||||
}
|
}
|
||||||
@ -1085,26 +1087,28 @@ public class VirtualMachineMO extends BaseMO {
|
|||||||
if (s_logger.isTraceEnabled())
|
if (s_logger.isTraceEnabled())
|
||||||
s_logger.trace("vCenter API trace - attachDisk(). target MOR: " + _mor.getValue() + ", vmdkDatastorePath: " + new Gson().toJson(vmdkDatastorePathChain));
|
s_logger.trace("vCenter API trace - attachDisk(). target MOR: " + _mor.getValue() + ", vmdkDatastorePath: " + new Gson().toJson(vmdkDatastorePathChain));
|
||||||
|
|
||||||
VirtualDevice newDisk = VmwareHelper.prepareDiskDevice(this, controllerKey, vmdkDatastorePathChain, -1, 1);
|
synchronized (_mor.getValue().intern()) {
|
||||||
VirtualMachineConfigSpec reConfigSpec = new VirtualMachineConfigSpec();
|
VirtualDevice newDisk = VmwareHelper.prepareDiskDevice(this, controllerKey, vmdkDatastorePathChain, -1, 1);
|
||||||
VirtualDeviceConfigSpec deviceConfigSpec = new VirtualDeviceConfigSpec();
|
VirtualMachineConfigSpec reConfigSpec = new VirtualMachineConfigSpec();
|
||||||
|
VirtualDeviceConfigSpec deviceConfigSpec = new VirtualDeviceConfigSpec();
|
||||||
|
|
||||||
deviceConfigSpec.setDevice(newDisk);
|
deviceConfigSpec.setDevice(newDisk);
|
||||||
deviceConfigSpec.setOperation(VirtualDeviceConfigSpecOperation.ADD);
|
deviceConfigSpec.setOperation(VirtualDeviceConfigSpecOperation.ADD);
|
||||||
|
|
||||||
reConfigSpec.getDeviceChange().add(deviceConfigSpec);
|
reConfigSpec.getDeviceChange().add(deviceConfigSpec);
|
||||||
|
|
||||||
ManagedObjectReference morTask = _context.getService().reconfigVMTask(_mor, reConfigSpec);
|
ManagedObjectReference morTask = _context.getService().reconfigVMTask(_mor, reConfigSpec);
|
||||||
boolean result = _context.getVimClient().waitForTask(morTask);
|
boolean result = _context.getVimClient().waitForTask(morTask);
|
||||||
|
|
||||||
if (!result) {
|
if (!result) {
|
||||||
if (s_logger.isTraceEnabled())
|
if (s_logger.isTraceEnabled())
|
||||||
s_logger.trace("vCenter API trace - attachDisk() done(failed)");
|
s_logger.trace("vCenter API trace - attachDisk() done(failed)");
|
||||||
throw new Exception("Failed to attach disk due to " + TaskMO.getTaskFailureInfo(_context, morTask));
|
throw new Exception("Failed to attach disk due to " + TaskMO.getTaskFailureInfo(_context, morTask));
|
||||||
|
}
|
||||||
|
|
||||||
|
_context.waitForTaskProgressDone(morTask);
|
||||||
}
|
}
|
||||||
|
|
||||||
_context.waitForTaskProgressDone(morTask);
|
|
||||||
|
|
||||||
if (s_logger.isTraceEnabled())
|
if (s_logger.isTraceEnabled())
|
||||||
s_logger.trace("vCenter API trace - attachDisk() done(successfully)");
|
s_logger.trace("vCenter API trace - attachDisk() done(successfully)");
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user