@Override public Answer execute(final ResizeVolumeCommand command, final CitrixResourceBase citrixResourceBase) { Connection conn = citrixResourceBase.getConnection(); String volId = command.getPath(); long newSize = command.getNewSize(); try { if (command.getCurrentSize() >= newSize) { s_logger.info("No need to resize volume: " + volId +", current size " + command.getCurrentSize() + " is same as new size " + newSize); return new ResizeVolumeAnswer(command, true, "success", newSize); } if (command.isManaged()) { resizeSr(conn, command); } VDI vdi = citrixResourceBase.getVDIbyUuid(conn, volId); vdi.resize(conn, newSize); return new ResizeVolumeAnswer(command, true, "success", newSize); } catch (Exception ex) { s_logger.warn("Unable to resize volume", ex); String error = "Failed to resize volume: " + ex; return new ResizeVolumeAnswer(command, false, error); } }
@Override public void resize(DataObject data, AsyncCompletionCallback<CreateCmdResult> callback) { VolumeObject vol = (VolumeObject) data; StoragePool pool = (StoragePool) data.getDataStore(); ResizeVolumePayload resizeParameter = (ResizeVolumePayload) vol.getpayload(); ResizeVolumeCommand resizeCmd = new ResizeVolumeCommand(vol.getPath(), new StorageFilerTO(pool), vol.getSize(), resizeParameter.newSize, resizeParameter.shrinkOk, resizeParameter.instanceName); CreateCmdResult result = new CreateCmdResult(null, null); try { ResizeVolumeAnswer answer = (ResizeVolumeAnswer) storageMgr.sendToPool(pool, resizeParameter.hosts, resizeCmd); if (answer != null && answer.getResult()) { long finalSize = answer.getNewSize(); s_logger.debug("Resize: volume started at size " + vol.getSize() + " and ended at size " + finalSize); vol.setSize(finalSize); vol.update(); } else if (answer != null) { result.setResult(answer.getDetails()); } else { s_logger.debug("return a null answer, mark it as failed for unknown reason"); result.setResult("return a null answer, mark it as failed for unknown reason"); } } catch (Exception e) { s_logger.debug("sending resize command failed", e); result.setResult(e.toString()); } callback.complete(result); }
return new ResizeVolumeAnswer(command, true, "success", currentSize); type = libvirtComputingResource.getResizeScriptType(pool, vol); if (type.equals("QCOW2") && shrinkOk) { return new ResizeVolumeAnswer(command, false, "Unable to shrink volumes of type " + type); return new ResizeVolumeAnswer(command, false, e.toString()); return new ResizeVolumeAnswer(command, true, "Resize succeeded, but need reboot to notify guest"); } else { return new ResizeVolumeAnswer(command, false, result); final long finalSize = pool.getPhysicalDisk(volid).getVirtualSize(); s_logger.debug("after resize, size reports as " + finalSize + ", requested " + newSize); return new ResizeVolumeAnswer(command, true, "success", finalSize); } catch (final CloudRuntimeException e) { final String error = "Failed to resize volume: " + e.getMessage(); s_logger.debug(error); return new ResizeVolumeAnswer(command, false, error);