Daniel Erez has uploaded a new change for review. Change subject: core: support Cinder disk update ......................................................................
core: support Cinder disk update Support updating/extending Cinder disks. Change-Id: I16d4ce9f53569ddfe1984b29dcbe1cdda4f7b444 Bug-Url: https://bugzilla.redhat.com/1185826 Signed-off-by: Daniel Erez <de...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AttachDiskToVmCommandTest.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVmDiskCommandTest.java 4 files changed, 68 insertions(+), 10 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/01/39201/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java index 24f7ccd..af00aca 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java @@ -9,12 +9,15 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.bll.profiles.DiskProfileHelper; import org.ovirt.engine.core.bll.quota.QuotaConsumptionParameter; import org.ovirt.engine.core.bll.quota.QuotaStorageConsumptionParameter; import org.ovirt.engine.core.bll.quota.QuotaStorageDependent; +import org.ovirt.engine.core.bll.tasks.CommandCoordinatorUtil; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.bll.utils.VmDeviceUtils; import org.ovirt.engine.core.bll.validator.LocalizedVmStatus; @@ -37,6 +40,7 @@ import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.core.common.businessentities.VmDevice; import org.ovirt.engine.core.common.businessentities.network.VmNic; +import org.ovirt.engine.core.common.businessentities.storage.CinderDisk; import org.ovirt.engine.core.common.businessentities.storage.Disk; import org.ovirt.engine.core.common.businessentities.storage.DiskStorageType; import org.ovirt.engine.core.common.businessentities.storage.DiskImage; @@ -124,7 +128,14 @@ ImagesHandler.setDiskAlias(getParameters().getDiskInfo(), getVm()); if (resizeDiskImageRequested()) { - extendDiskImageSize(); + switch (getOldDisk().getDiskStorageType()) { + case IMAGE: + extendDiskImageSize(); + break; + case CINDER: + extendCinderDiskSize(); + break; + } } else { try { performDiskUpdate(false); @@ -171,7 +182,8 @@ return false; } } - if (DiskStorageType.IMAGE == getOldDisk().getDiskStorageType() && !validateCanResizeDisk()) { + if ((DiskStorageType.IMAGE == getOldDisk().getDiskStorageType() || + DiskStorageType.CINDER == getOldDisk().getDiskStorageType()) && !validateCanResizeDisk()) { return false; } @@ -359,7 +371,7 @@ return listPermissionSubjects; } - private void performDiskUpdate(final boolean unlockImage) { + protected void performDiskUpdate(final boolean unlockImage) { if (shouldPerformMetadataUpdate()) { updateMetaDataDescription((DiskImage) getNewDisk()); } @@ -381,6 +393,14 @@ getImageDao().update(diskImage.getImage()); updateQuota(diskImage); updateDiskProfile(); + } else if (disk.getDiskStorageType() == DiskStorageType.CINDER) { + CinderDisk cinderDisk = (CinderDisk) disk; + setStorageDomainId(cinderDisk.getStorageIds().get(0)); + getCinderBroker().updateDisk(cinderDisk); + if (unlockImage && cinderDisk.getImageStatus() == ImageStatus.LOCKED) { + cinderDisk.setImageStatus(ImageStatus.OK); + } + getImageDao().update(cinderDisk.getImage()); } reloadDisks(); @@ -508,8 +528,31 @@ setSucceeded(ret.getSucceeded()); } + private void extendCinderDiskSize() { + lockImageInDb(); + CinderDisk newCinderDisk = (CinderDisk) getNewDisk(); + Future<VdcReturnValueBase> future = CommandCoordinatorUtil.executeAsyncCommand( + VdcActionType.ExtendCinderDisk, + new UpdateVmDiskParameters(getVmId(), newCinderDisk.getId(), newCinderDisk), + cloneContextAndDetachFromParent()); + addCustomValue("NewSize", String.valueOf(getNewDiskSizeInGB())); + try { + setReturnValue(future.get()); + setSucceeded(getReturnValue().getSucceeded()); + } catch (InterruptedException | ExecutionException e) { + log.error("Error extending Cinder disk '{}': {}", + getNewDisk().getDiskAlias(), + e.getMessage()); + log.debug("Exception", e); + } + } + @Override protected void endSuccessfully() { + if (!isDiskImage()) { + return; + } + VdcReturnValueBase ret = getBackend().endAction(VdcActionType.ExtendImageSize, createExtendImageSizeParameters(), getContext().clone().withoutCompensationContext().withoutExecutionContext().withoutLock()); @@ -577,8 +620,17 @@ return jobProperties; } + public long getNewDiskSizeInGB() { + CinderDisk cinderDisk = (CinderDisk) getNewDisk(); + return cinderDisk.getSize() / (1024 * 1024 * 1024); + } + private boolean isDiskImage() { return getOldDisk() != null && getNewDisk() != null && DiskStorageType.IMAGE == getOldDisk().getDiskStorageType(); + } + + private boolean isCinderDisk() { + return getOldDisk() != null && getNewDisk() != null && DiskStorageType.CINDER == getOldDisk().getDiskStorageType(); } protected Guid getQuotaId() { @@ -639,8 +691,14 @@ } private boolean resizeDiskImageRequested() { - return getNewDisk().getDiskStorageType() == DiskStorageType.IMAGE && - vmDeviceForVm.getSnapshotId() == null && getNewDisk().getSize() != getOldDisk().getSize(); + boolean sizeChanged = getNewDisk().getSize() != getOldDisk().getSize(); + switch (getNewDisk().getDiskStorageType()) { + case IMAGE: + return sizeChanged && vmDeviceForVm.getSnapshotId() == null; + case CINDER: + return sizeChanged; + } + return false; } private boolean updateParametersRequiringVmDownRequested() { @@ -705,7 +763,7 @@ return oldDisk; } - private Disk getNewDisk() { + protected Disk getNewDisk() { return getParameters().getDiskInfo(); } @@ -754,7 +812,7 @@ }); } - private void unlockImageInDb() { + public void unlockImageInDb() { final DiskImage diskImage = (DiskImage) getOldDisk(); diskImage.setImageStatus(ImageStatus.OK); ImagesHandler.updateImageStatus(diskImage.getImageId(), ImageStatus.OK); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java index 228bae6..e548f87 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java @@ -524,7 +524,7 @@ return getDbFacade().getTagDao(); } - protected DiskDao getDiskDao() { + public DiskDao getDiskDao() { return getDbFacade().getDiskDao(); } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AttachDiskToVmCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AttachDiskToVmCommandTest.java index 657b621..a91b0db 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AttachDiskToVmCommandTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AttachDiskToVmCommandTest.java @@ -100,7 +100,7 @@ // Overridden here and not during spying, since it's called in the constructor @SuppressWarnings("synthetic-access") @Override - protected DiskDao getDiskDao() { + public DiskDao getDiskDao() { return diskDao; } }); diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVmDiskCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVmDiskCommandTest.java index 0ab92f7..5465dbb 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVmDiskCommandTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVmDiskCommandTest.java @@ -574,7 +574,7 @@ // Overridden here and not during spying, since it's called in the constructor @SuppressWarnings("synthetic-access") @Override - protected DiskDao getDiskDao() { + public DiskDao getDiskDao() { return diskDao; } -- To view, visit https://gerrit.ovirt.org/39201 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I16d4ce9f53569ddfe1984b29dcbe1cdda4f7b444 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Daniel Erez <de...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches