Daniel Erez has uploaded a new change for review. Change subject: core: adding ExtendCinderDisk command and callback ......................................................................
core: adding ExtendCinderDisk command and callback Introducing ExtendCinderDiskCommand and ExtendCinderDiskCommandCallback. Change-Id: I03e0b6993d52f27f6241aeb7ad9a8b01326883d0 Bug-Url: https://bugzilla.redhat.com/1185826 Signed-off-by: Daniel Erez <[email protected]> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ExtendCinderDiskCommand.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ExtendCinderDiskCommandCallback.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java 3 files changed, 155 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/99/39199/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ExtendCinderDiskCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ExtendCinderDiskCommand.java new file mode 100644 index 0000000..0476819 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ExtendCinderDiskCommand.java @@ -0,0 +1,72 @@ +package org.ovirt.engine.core.bll.storage; + +import org.ovirt.engine.core.bll.InternalCommandAttribute; +import org.ovirt.engine.core.bll.UpdateVmDiskCommand; +import org.ovirt.engine.core.bll.context.CommandContext; +import org.ovirt.engine.core.bll.tasks.interfaces.CommandCallback; +import org.ovirt.engine.core.common.action.UpdateVmDiskParameters; +import org.ovirt.engine.core.common.businessentities.storage.CinderDisk; +import org.ovirt.engine.core.common.utils.Pair; +import org.ovirt.engine.core.compat.Guid; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Collections; +import java.util.Map; + +@InternalCommandAttribute +public class ExtendCinderDiskCommand<T extends UpdateVmDiskParameters> extends UpdateVmDiskCommand<T> { + + private static final Logger log = LoggerFactory.getLogger(ExtendCinderDiskCommand.class); + + public ExtendCinderDiskCommand(T parameters) { + super(parameters); + } + + public ExtendCinderDiskCommand(T parameters, CommandContext commandContext) { + super(parameters); + } + + @Override + public void executeCommand() { + CinderDisk cinderDisk = (CinderDisk) getNewDisk(); + getCinderBroker().extendDisk(cinderDisk, (int) getNewDiskSizeInGB()); + + persistCommand(getParameters().getParentCommand(), true); + getReturnValue().setActionReturnValue(cinderDisk.getId()); + setSucceeded(true); + } + + protected void performDiskUpdate() { + CinderDisk cinderDisk = (CinderDisk) getNewDisk(); + getImageDao().updateImageSize(cinderDisk.getImageId(), cinderDisk.getSize()); + performDiskUpdate(true); + } + + @Override + public CommandCallback getCallback() { + return new ExtendCinderDiskCommandCallback(); + } + + @Override + public boolean canDoAction() { + return true; + } + + @Override + protected Map<String, Pair<String, String>> getExclusiveLocks() { + return Collections.emptyMap(); + } + + @Override + protected Map<String, Pair<String, String>> getSharedLocks() { + return Collections.emptyMap(); + } + + @Override + public Guid getStorageDomainId() { + CinderDisk cinderDisk = (CinderDisk) getNewDisk(); + return cinderDisk.getStorageIds().get(0); + } + +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ExtendCinderDiskCommandCallback.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ExtendCinderDiskCommandCallback.java new file mode 100644 index 0000000..f29dd03 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ExtendCinderDiskCommandCallback.java @@ -0,0 +1,82 @@ +package org.ovirt.engine.core.bll.storage; + +import org.ovirt.engine.core.bll.tasks.CommandCoordinatorUtil; +import org.ovirt.engine.core.common.AuditLogType; +import org.ovirt.engine.core.common.action.UpdateVmDiskParameters; +import org.ovirt.engine.core.common.businessentities.storage.CinderDisk; +import org.ovirt.engine.core.common.businessentities.storage.DiskImage; +import org.ovirt.engine.core.common.businessentities.storage.ImageStatus; +import org.ovirt.engine.core.compat.CommandStatus; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector; + +import java.util.List; + +public class ExtendCinderDiskCommandCallback extends AbstractCinderDiskCommandCallback<ExtendCinderDiskCommand<UpdateVmDiskParameters>> { + + @Override + public void doPolling(Guid cmdId, List<Guid> childCmdIds) { + super.doPolling(cmdId, childCmdIds); + + ImageStatus imageStatus = getCinderBroker().getDiskStatus(getDiskId()); + DiskImage disk = getDisk(); + if (imageStatus != null && imageStatus != disk.getImageStatus()) { + switch (imageStatus) { + case OK: + getCommand().setCommandStatus(CommandStatus.SUCCEEDED); + break; + case ILLEGAL: + getCommand().setCommandStatus(CommandStatus.FAILED); + break; + } + } + } + + @Override + public void onFailed(Guid cmdId, List<Guid> childCmdIds) { + super.onFailed(cmdId, childCmdIds); + + getCommand().unlockImageInDb(); + log.error("Failed extending disk. ID: {}", getDiskId()); + updateAuditLog(AuditLogType.USER_EXTEND_DISK_SIZE_FAILURE, getCommand().getNewDiskSizeInGB()); + + getCommand().endAction(); + CommandCoordinatorUtil.removeAllCommandsInHierarchy(cmdId); + } + + @Override + public void onSucceeded(Guid cmdId, List<Guid> childCmdIds) { + super.onSucceeded(cmdId, childCmdIds); + + getCommand().performDiskUpdate(); + log.error("Disk has been successfully extended. ID: {}", getDiskId()); + updateAuditLog(AuditLogType.USER_EXTEND_DISK_SIZE_SUCCESS, getCommand().getNewDiskSizeInGB()); + + getCommand().endAction(); + CommandCoordinatorUtil.removeAllCommandsInHierarchy(cmdId); + } + + private void updateAuditLog(AuditLogType auditLogType, Long imageSizeInGigabytes) { + getCommand().addCustomValue("DiskAlias", getDisk().getDiskAlias()); + getCommand().addCustomValue("NewSize", String.valueOf(imageSizeInGigabytes)); + new AuditLogDirector().log(getCommand(), auditLogType); + } + + @Override + protected Guid getDiskId() { + return getCommand().getParameters().getDiskId(); + } + + @Override + protected CinderDisk getDisk() { + if (disk == null) { + disk = (CinderDisk) getCommand().getDiskDao().get(getDiskId()); + } + return disk; + } + + @Override + protected CinderBroker getCinderBroker() { + return getCommand().getCinderBroker(); + } +} 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 b71fdaf..c52954a 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 @@ -427,6 +427,7 @@ // Cinder AddCinderDisk(3200, ActionGroup.CONFIGURE_VM_STORAGE, false, QuotaDependency.NONE), RemoveCinderDisk(3201, QuotaDependency.STORAGE), + ExtendCinderDisk(3202, ActionGroup.CONFIGURE_VM_STORAGE, false, QuotaDependency.NONE), // Host Devices RefreshHostDevices(4000, ActionGroup.MANIPULATE_HOST, false, QuotaDependency.NONE); -- To view, visit https://gerrit.ovirt.org/39199 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I03e0b6993d52f27f6241aeb7ad9a8b01326883d0 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Daniel Erez <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
