Sergey Gotliv has uploaded a new change for review. Change subject: engine: Enable online virtual drive resize ......................................................................
engine: Enable online virtual drive resize Currently there is no option to extend virtual disk size after it's creation. This patch is providing such option from the engine side. Change-Id: Ie702348a68a26ac02a01f66aaa1ea42c2c675ebb Bug-Url:https://bugzilla.redhat.com/show_bug.cgi?id=600483 Signed-off-by: Sergey Gotliv <[email protected]> --- M backend/manager/dbscripts/images_sp.sql A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExtendImageSizeCommand.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ExtendImageSizeParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/asynctasks/AsyncTaskType.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/ExtendImageSizeVDSCommandParameters.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/ExtendVmDiskSizeVDSCommandParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageDao.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageDaoDbFacadeImpl.java M backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties M backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties A backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/ExtendImageSizeVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IIrsServer.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerConnector.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerWrapper.java A backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ExtendVmDiskSizeVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java 22 files changed, 452 insertions(+), 3 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/75/14975/1 diff --git a/backend/manager/dbscripts/images_sp.sql b/backend/manager/dbscripts/images_sp.sql index 65f829e..951b48b 100644 --- a/backend/manager/dbscripts/images_sp.sql +++ b/backend/manager/dbscripts/images_sp.sql @@ -88,6 +88,23 @@ +Create or replace FUNCTION UpdateImageSize( + v_image_group_id UUID, + v_size BIGINT, + v_lastModified TIMESTAMP WITH TIME ZONE) +RETURNS VOID +AS $procedure$ +BEGIN + UPDATE images + SET size = v_size, + lastModified = v_lastModified + WHERE image_group_id = v_image_group_id; +END; $procedure$ +LANGUAGE plpgsql; + + + + Create or replace FUNCTION UpdateImage( v_creation_date TIMESTAMP WITH TIME ZONE, v_image_guid UUID, diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExtendImageSizeCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExtendImageSizeCommand.java new file mode 100644 index 0000000..0eda1c2 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExtendImageSizeCommand.java @@ -0,0 +1,170 @@ +package org.ovirt.engine.core.bll; + +import org.apache.commons.lang.exception.ExceptionUtils; +import org.ovirt.engine.core.bll.utils.PermissionSubject; +import org.ovirt.engine.core.common.AuditLogType; +import org.ovirt.engine.core.common.VdcObjectType; +import org.ovirt.engine.core.common.action.ExtendImageSizeParameters; +import org.ovirt.engine.core.common.action.VdcActionType; +import org.ovirt.engine.core.common.asynctasks.AsyncTaskType; +import org.ovirt.engine.core.common.businessentities.ActionGroup; +import org.ovirt.engine.core.common.businessentities.Disk; +import org.ovirt.engine.core.common.businessentities.DiskImage; +import org.ovirt.engine.core.common.businessentities.VM; +import org.ovirt.engine.core.common.businessentities.VMStatus; +import org.ovirt.engine.core.common.errors.VdcBLLException; +import org.ovirt.engine.core.common.vdscommands.ExtendImageSizeVDSCommandParameters; +import org.ovirt.engine.core.common.vdscommands.ExtendVmDiskSizeVDSCommandParameters; +import org.ovirt.engine.core.common.vdscommands.GetImageInfoVDSCommandParameters; +import org.ovirt.engine.core.common.vdscommands.VDSCommandType; +import org.ovirt.engine.core.common.vdscommands.VDSReturnValue; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dal.VdcBllMessages; +import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector; + +import java.util.ArrayList; +import java.util.List; + +public class ExtendImageSizeCommand<T extends ExtendImageSizeParameters> extends BaseImagesCommand<T> { + + private List<PermissionSubject> permissionsList; + + public ExtendImageSizeCommand(T parameters) { + super(parameters); + } + + @Override + protected boolean canDoAction() { + return isImageExist() && isExtendCurrentSize(); + } + + @Override + protected void executeCommand() { + DiskImage diskImage = getImage(); + getParameters().setStoragePoolId(diskImage.getStoragePoolId().getValue()); + getParameters().setStorageDomainId(diskImage.getStorageIds().get(0)); + getParameters().setImageGroupID(diskImage.getId()); + + lockImage(); + + VDSReturnValue vdsReturnValue = runVdsCommand(VDSCommandType.ExtendImageSize, + createExtendImageSizeVDSCommandParameters(diskImage)); + + if (vdsReturnValue.getSucceeded()) { + Guid taskId = createTask(vdsReturnValue.getCreationInfo(), VdcActionType.ExtendImageSize); + getReturnValue().getTaskIdList().add(taskId); + setSucceeded(true); + } + } + + @Override + protected void endSuccessfully() { + try { + DiskImage image = (DiskImage) runVdsCommand( + VDSCommandType.GetImageInfo, + createGetImageInfoVDSCommandParameters() + ).getReturnValue(); + + if (image != null && getImage().getSize() != image.getSize()) { + updateImageSize(image); + updateRunningVms(image); + } + } finally { + unLockImage(); + setSucceeded(true); + } + } + + @Override + protected void endWithFailure() { + unLockImage(); + log.warnFormat("Failed to extend size of the volume '${0}', user: '${1}'", getImage().getId(), getUserName()); + addCustomValue("DiskId", getImageId().toString()); + addCustomValue("UserName", getUserName()); + AuditLogDirector.log(this, AuditLogType.USER_EXTEND_DISK_SIZE_FAILURE); + setSucceeded(true); + } + + private void updateImageSize(DiskImage diskImage) { + getImageDao().updateImageSize(diskImage.getId(), diskImage.getSize(), diskImage.getLastModifiedDate()); + } + + private void updateRunningVms(DiskImage diskImage) { + List<VM> vms = getDbFacade().getVmDao().getVmsListForDisk(diskImage.getId()); + for (VM vm : vms) { + if (vm.getStatus() == VMStatus.Up) { + try { + runVdsCommand(VDSCommandType.ExtendVmDiskSize, + createExtendVmDiskSizeVDSCommandParameters(vm, diskImage.getSize())); + } catch (VdcBLLException e) { + log.warnFormat("Failed to update VM {0} with the new volume size due to error: {1}", + vm.getName(), ExceptionUtils.getMessage(e)); + addCustomValue("VmName", getVmName()); + AuditLogDirector.log(this, AuditLogType.USER_EXTEND_DISK_SIZE_UPDATE_VM_FAILURE); + } + } + } + } + + private ExtendImageSizeVDSCommandParameters createExtendImageSizeVDSCommandParameters(DiskImage diskImage) { + ExtendImageSizeVDSCommandParameters params = new ExtendImageSizeVDSCommandParameters(); + params.setStoragePoolId(diskImage.getStoragePoolId().getValue()); + params.setStorageDomainId(diskImage.getStorageIds().get(0)); + params.setImageGroupId(diskImage.getId()); + params.setImageId(diskImage.getImageId()); + params.setNewSize(getParameters().getNewSize()); + return params; + } + + private GetImageInfoVDSCommandParameters createGetImageInfoVDSCommandParameters() { + return new GetImageInfoVDSCommandParameters( + getParameters().getStoragePoolId(), + getParameters().getStorageDomainId(), + getParameters().getImageGroupID(), + getParameters().getImageId() + ); + } + + private ExtendVmDiskSizeVDSCommandParameters createExtendVmDiskSizeVDSCommandParameters(VM vm, long newSize) { + ExtendVmDiskSizeVDSCommandParameters params = new ExtendVmDiskSizeVDSCommandParameters( + vm.getRunOnVds().getValue(), vm.getId(), newSize + ); + params.setStorageDomainId(getParameters().getStorageDomainId()); + params.setStoragePoolId(getParameters().getStoragePoolId()); + params.setImageGroupId(getParameters().getImageGroupID()); + params.setImageId(getParameters().getImageId()); + return params; + } + + private boolean isImageExist() { + if (getImage() == null || getImage().getDiskStorageType() != Disk.DiskStorageType.IMAGE) { + addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_DISK_NOT_EXIST); + return false; + } + return true; + } + + private boolean isExtendCurrentSize() { + long currentSize = getImage().getSize(); + if (currentSize > getParameters().getNewSize()) { + addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_SHRINK_IS_NOT_SUPPORTED); + return false; + } + return true; + } + + @Override + public List<PermissionSubject> getPermissionCheckSubjects() { + if (permissionsList == null) { + permissionsList = new ArrayList<PermissionSubject>(); + permissionsList.add(new PermissionSubject(getImageId(), VdcObjectType.Disk, ActionGroup.EDIT_DISK_PROPERTIES)); + } + + return permissionsList; + } + + @Override + protected AsyncTaskType getTaskType() { + return AsyncTaskType.extendImageSize; + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java index 1b0608e..ceb9e76 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java @@ -303,6 +303,8 @@ USER_PASSWORD_CHANGE_FAILED(347), USER_CLEAR_UNKNOWN_VMS(348), USER_FAILED_CLEAR_UNKNOWN_VMS(349), + USER_EXTEND_DISK_SIZE_FAILURE(370), + USER_EXTEND_DISK_SIZE_UPDATE_VM_FAILURE(371), AUTO_SUSPEND_VM(524), @Deprecated diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ExtendImageSizeParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ExtendImageSizeParameters.java new file mode 100644 index 0000000..45218ae --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ExtendImageSizeParameters.java @@ -0,0 +1,25 @@ +package org.ovirt.engine.core.common.action; + +import org.ovirt.engine.core.compat.Guid; + +public class ExtendImageSizeParameters extends ImagesActionsParametersBase { + + private long newSize; + + public ExtendImageSizeParameters() { + + } + + public ExtendImageSizeParameters(Guid imageId, long newSize) { + super(imageId); + this.newSize = newSize; + } + + public long getNewSize() { + return newSize; + } + + public void setNewSize(long newSize) { + this.newSize = newSize; + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java index e18f7b6..ada0b74 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java @@ -211,6 +211,7 @@ LiveMigrateDisk(1010, QuotaDependency.NONE), LiveMigrateVmDisks(1011, false, QuotaDependency.STORAGE), MoveDisks(1012, false, QuotaDependency.NONE), + ExtendImageSize(1013, false, QuotaDependency.NONE), // Event Notification AddEventSubscription(1100, QuotaDependency.NONE), RemoveEventSubscription(1101, QuotaDependency.NONE), diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/asynctasks/AsyncTaskType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/asynctasks/AsyncTaskType.java index e5300ae..163a853 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/asynctasks/AsyncTaskType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/asynctasks/AsyncTaskType.java @@ -9,7 +9,8 @@ deleteImage, mergeSnapshots, cloneImageStructure, - syncImageData; + syncImageData, + extendImageSize; public int getValue() { return this.ordinal(); diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/ExtendImageSizeVDSCommandParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/ExtendImageSizeVDSCommandParameters.java new file mode 100644 index 0000000..c6d5ae8 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/ExtendImageSizeVDSCommandParameters.java @@ -0,0 +1,52 @@ +package org.ovirt.engine.core.common.vdscommands; + +import org.ovirt.engine.core.compat.Guid; + +public class ExtendImageSizeVDSCommandParameters extends IrsBaseVDSCommandParameters { + + private Guid storagePoolId; + private Guid storageDomainId; + private Guid imageGroupId; + private Guid imageId; + private long newSize; + + public Guid getStoragePoolId() { + return storagePoolId; + } + + public void setStoragePoolId(Guid storagePoolId) { + this.storagePoolId = storagePoolId; + } + + public Guid getStorageDomainId() { + return storageDomainId; + } + + public void setStorageDomainId(Guid storageDomainId) { + this.storageDomainId = storageDomainId; + } + + public Guid getImageId() { + return imageId; + } + + public void setImageId(Guid imageId) { + this.imageId = imageId; + } + + public Guid getImageGroupId() { + return imageGroupId; + } + + public void setImageGroupId(Guid imageGroupId) { + this.imageGroupId = imageGroupId; + } + + public long getNewSize() { + return newSize; + } + + public void setNewSize(long newSize) { + this.newSize = newSize; + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/ExtendVmDiskSizeVDSCommandParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/ExtendVmDiskSizeVDSCommandParameters.java new file mode 100644 index 0000000..3716e68 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/ExtendVmDiskSizeVDSCommandParameters.java @@ -0,0 +1,73 @@ +package org.ovirt.engine.core.common.vdscommands; + +import org.ovirt.engine.core.compat.Guid; + +import java.util.HashMap; +import java.util.Map; + +public class ExtendVmDiskSizeVDSCommandParameters extends VdsAndVmIDVDSParametersBase { + + private long newSize; + private Guid storagePoolId; + private Guid storageDomainId; + private Guid imageGroupId; + private Guid imageId; + + public ExtendVmDiskSizeVDSCommandParameters() { + super(); + } + + public ExtendVmDiskSizeVDSCommandParameters(Guid vdsId, Guid vmId, long newSize) { + super(vdsId, vmId); + this.newSize = newSize; + } + + public long getNewSize() { + return newSize; + } + + public void setNewSize(long newSize) { + this.newSize = newSize; + } + + public Guid getStoragePoolId() { + return storagePoolId; + } + + public void setStoragePoolId(Guid storagePoolId) { + this.storagePoolId = storagePoolId; + } + + public Guid getStorageDomainId() { + return storageDomainId; + } + + public void setStorageDomainId(Guid storageDomainId) { + this.storageDomainId = storageDomainId; + } + + public Guid getImageGroupId() { + return imageGroupId; + } + + public void setImageGroupId(Guid imageGroupId) { + this.imageGroupId = imageGroupId; + } + + public Guid getImageId() { + return imageId; + } + + public void setImageId(Guid imageId) { + this.imageId = imageId; + } + + public Map<String, String> getDriveSpecs() { + Map<String, String> driveSpecs = new HashMap<String, String>(); + driveSpecs.put("poolID", getStoragePoolId().toString()); + driveSpecs.put("domainID", getStorageDomainId().toString()); + driveSpecs.put("imageID", getImageGroupId().toString()); + driveSpecs.put("volumeID", getImageId().toString()); + return driveSpecs; + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java index bdd5635..5f38f43 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java @@ -111,6 +111,8 @@ Snapshot("org.ovirt.engine.core.vdsbroker.vdsbroker"), UpdateVmInterface("org.ovirt.engine.core.vdsbroker.vdsbroker"), GetHardwareInfo("org.ovirt.engine.core.vdsbroker.vdsbroker"), + ExtendImageSize("org.ovirt.engine.core.vdsbroker.irsbroker"), + ExtendVmDiskSize("org.ovirt.engine.core.vdsbroker.vdsbroker"), // Gluster VDS commands CreateGlusterVolume("org.ovirt.engine.core.vdsbroker.gluster"), SetGlusterVolumeOption("org.ovirt.engine.core.vdsbroker.gluster"), diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java index 0487595..51033b1 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java @@ -672,6 +672,7 @@ ACTION_TYPE_FAILED_DISK_NOT_EXIST, ACTION_TYPE_FAILED_NO_DISKS_SPECIFIED, ACTION_TYPE_FAILED_SOURCE_AND_TARGET_SAME, + ACTION_TYPE_FAILED_SHRINK_IS_NOT_SUPPORTED, NON_VM_NETWORK_NOT_SUPPORTED_FOR_POOL_LEVEL, VALIDATION_STORAGE_CONNECTION_INVALID, VALIDATION_STORAGE_CONNECTION_EMPTY_VFSTYPE, diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageDao.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageDao.java index 17bda44..c755f9c 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageDao.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageDao.java @@ -5,11 +5,15 @@ import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.compat.NGuid; +import java.util.Date; + /** * <code>ImageDAO</code> defines a type for performing CRUD operations on instances of {@link Image}. */ public interface ImageDao extends GenericDao<Image, Guid>, StatusAwareDao<Guid, ImageStatus> { - void updateQuotaForImageAndSnapshots(Guid imageGroupId, NGuid quotaId); + public void updateQuotaForImageAndSnapshots(Guid imageGroupId, NGuid quotaId); public void updateImageVmSnapshotId(Guid id, Guid vmSnapshotId); + + public void updateImageSize(Guid id, long size, Date lastModified); } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageDaoDbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageDaoDbFacadeImpl.java index 31965af..2864901 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageDaoDbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageDaoDbFacadeImpl.java @@ -2,6 +2,7 @@ import java.sql.ResultSet; import java.sql.SQLException; +import java.util.Date; import org.ovirt.engine.core.common.businessentities.Image; import org.ovirt.engine.core.common.businessentities.ImageStatus; @@ -36,6 +37,15 @@ } @Override + public void updateImageSize(Guid id, long size, Date lastModified) { + MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() + .addValue("image_group_id", id) + .addValue("size", size) + .addValue("lastModified", lastModified); + getCallsHandler().executeModification("UpdateImageSize", parameterSource); + } + + @Override protected MapSqlParameterSource createFullParametersMapper(Image entity) { return createIdParameterMapper(entity.getId()) .addValue("creation_date", entity.getCreationDate()) diff --git a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties index e4b886c..5ab030c 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties @@ -205,6 +205,7 @@ ACTION_TYPE_FAILED_STORAGE_POOL_NAME_ALREADY_EXIST=Cannot ${action} ${type}. The Data Center name is already in use. ACTION_TYPE_FAILED_TEMPLATE_NOT_FOUND_ON_DESTINATION_DOMAIN=Cannot ${action} ${type}. The selected Storage Domain does not contain the VM Template. ACTION_TYPE_FAILED_NO_VDS_IN_POOL=Cannot ${action} ${type}. There is no active Host in the Data Center. +ACTION_TYPE_FAILED_SHRINK_IS_NOT_SUPPORTED=Cannot ${action} ${type}. The new size should be greater than the current. VAR__TYPE__HOST=$type Host VAR__ENTITIES__HOSTS=$entities hosts VAR__TYPE__NETWORK=$type Network diff --git a/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties b/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties index 1317a38..4c985ab 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties @@ -159,7 +159,8 @@ USER_TRY_BACK_TO_SNAPSHOT_FINISH_FAILURE=Failed to complete Snapshot-Preview ${SnapshotName} for VM ${VmName}. USER_UPDATE_BOOKMARK=Bookmark ${BookmarkName} was updated by ${UserName}. USER_UPDATE_BOOKMARK_FAILED=Failed to update bookmark: ${BookmarkName} (User: ${UserName}) - +USER_EXTEND_DISK_SIZE_UPDATE_VM_FAILURE=Failed to update VM {VmName} with the new volume size. VM restart is recommended. +USER_EXTEND_DISK_SIZE_FAILED=Failed to extend disk size ${DiskId}. (User: ${UserName}) USER_UPDATE_VDS=Host ${VdsName} parameters were updated by ${UserName}. USER_UPDATE_VM=VM ${VmName} parameters were updated by ${UserName}. USER_UPDATE_VM_CLUSTER_DEFAULT_HOST_CLEARED=${VmName} cluster was updated by ${UserName}, Default host was reset to auto assign. diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/ExtendImageSizeVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/ExtendImageSizeVDSCommand.java new file mode 100644 index 0000000..80688e6 --- /dev/null +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/ExtendImageSizeVDSCommand.java @@ -0,0 +1,36 @@ +package org.ovirt.engine.core.vdsbroker.irsbroker; + +import org.ovirt.engine.core.common.asynctasks.AsyncTaskCreationInfo; +import org.ovirt.engine.core.common.asynctasks.AsyncTaskType; +import org.ovirt.engine.core.common.vdscommands.ExtendImageSizeVDSCommandParameters; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.vdsbroker.vdsbroker.StatusForXmlRpc; + +public class ExtendImageSizeVDSCommand<P extends ExtendImageSizeVDSCommandParameters> extends IrsBrokerCommand<P> { + + private OneUuidReturnForXmlRpc result; + + public ExtendImageSizeVDSCommand(P parameters) { + super(parameters); + } + + @Override + protected void ExecuteIrsBrokerCommand() { + result = getIrsProxy().extendVolumeSize(getParameters().getStoragePoolId().toString(), + getParameters().getStorageDomainId().toString(), + getParameters().getImageGroupId().toString(), + getParameters().getImageId().toString(), + String.valueOf(getParameters().getNewSize())); + + ProceedProxyReturnValue(); + + getVDSReturnValue().setCreationInfo( + new AsyncTaskCreationInfo(Guid.createGuidFromString(result.mUuid), + AsyncTaskType.extendImageSize, getParameters().getStoragePoolId())); + } + + @Override + protected StatusForXmlRpc getReturnStatus() { + return result.mStatus; + } +} diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IIrsServer.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IIrsServer.java index 048b131..e0971d2 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IIrsServer.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IIrsServer.java @@ -84,4 +84,6 @@ ImagesListReturnForXmlRpc getImagesList(String sdUUID); UUIDListReturnForXmlRpc getVolumesList(String sdUUID, String spUUID, String imgUUID); + + OneUuidReturnForXmlRpc extendVolumeSize(String spUUID, String sdUUID, String imageUUID, String volumeUUID, String newSize); } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerConnector.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerConnector.java index e2013a7..6a9be80 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerConnector.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerConnector.java @@ -98,4 +98,6 @@ public Map<String, Object> getImagesList(String sdUUID); public Map<String, Object> getVolumesList(String sdUUID, String spUUID, String imgUUID); + + public Map<String, Object> extendVolumeSize(String spUUID, String sdUUID, String imageUUID, String volumeUUID, String newSize); } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerWrapper.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerWrapper.java index 6bb35fb..aa745c9 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerWrapper.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerWrapper.java @@ -280,4 +280,11 @@ UUIDListReturnForXmlRpc wrapper = new UUIDListReturnForXmlRpc(xmlRpcReturnValue); return wrapper; } + + @Override + public OneUuidReturnForXmlRpc extendVolumeSize(String spUUID, String sdUUID, String imageUUID, String volumeUUID, String newSize) { + Map<String, Object> xmlRpcReturnValue = irsServer.extendVolumeSize(spUUID, sdUUID, imageUUID, volumeUUID, newSize); + OneUuidReturnForXmlRpc wrapper = new OneUuidReturnForXmlRpc(xmlRpcReturnValue); + return wrapper; + } } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ExtendVmDiskSizeVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ExtendVmDiskSizeVDSCommand.java new file mode 100644 index 0000000..13a069e --- /dev/null +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ExtendVmDiskSizeVDSCommand.java @@ -0,0 +1,27 @@ +package org.ovirt.engine.core.vdsbroker.vdsbroker; + +import org.ovirt.engine.core.common.vdscommands.ExtendVmDiskSizeVDSCommandParameters; + +public class ExtendVmDiskSizeVDSCommand <P extends ExtendVmDiskSizeVDSCommandParameters> extends VdsBrokerCommand<P> { + + StatusOnlyReturnForXmlRpc status; + + public ExtendVmDiskSizeVDSCommand(P parameters) { + super(parameters); + } + + @Override + protected void ExecuteVdsBrokerCommand() { + status = getBroker().diskSizeExtend( + getParameters().getVmId().toString(), + getParameters().getDriveSpecs(), + String.valueOf(getParameters().getNewSize()) + ); + ProceedProxyReturnValue(); + } + + @Override + protected StatusForXmlRpc getReturnStatus() { + return status.mStatus; + } +} diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java index ec89a78..76005b2 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java @@ -175,6 +175,8 @@ StatusOnlyReturnForXmlRpc snapshot(String vmId, Map<String, String>[] snapParams); + StatusOnlyReturnForXmlRpc diskSizeExtend(String vmId, Map<String, String> diskParams, String newSize); + // Gluster vdsm Commands OneUuidReturnForXmlRpc glusterVolumeCreate(String volumeName, String[] brickList, diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java index 7af0e4a..c44b7f1 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java @@ -158,6 +158,8 @@ Map<String, Object> snapshot(String vmId, Map<String, String>[] snapParams); + public Map<String, Object> diskSizeExtend(String vmId, Map<String, String> diskParams, String newSize); + // Gluster vdsm commands public Map<String, Object> glusterVolumeCreate(String volumeName, String[] brickList, diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java index 82f8287..e77c3c0 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java @@ -855,6 +855,17 @@ } @Override + public StatusOnlyReturnForXmlRpc diskSizeExtend(String vmId, Map<String, String> diskParams, String newSize) { + try { + Map<String, Object> xmlRpcReturnValue = vdsServer.diskSizeExtend(vmId, diskParams, newSize); + StatusOnlyReturnForXmlRpc wrapper = new StatusOnlyReturnForXmlRpc(xmlRpcReturnValue); + return wrapper; + } catch (UndeclaredThrowableException ute) { + throw new XmlRpcRunTimeException(ute); + } + } + + @Override public OneUuidReturnForXmlRpc glusterVolumeCreate(String volumeName, String[] brickList, int replicaCount, -- To view, visit http://gerrit.ovirt.org/14975 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ie702348a68a26ac02a01f66aaa1ea42c2c675ebb Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Sergey Gotliv <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
