Maor Lipchuk has uploaded a new change for review. Change subject: core: Use coco for add cinder disk command ......................................................................
core: Use coco for add cinder disk command Adding a new command for add Cinder disk and use the coco infrastructure to create a new Disk Change-Id: I087453ddfae71b8ee94a248f1456faf8c9ed9ede Signed-off-by: Maor Lipchuk <mlipc...@redhat.com> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddCinderDiskCommand.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddCinderDiskCommandCallback.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java 4 files changed, 138 insertions(+), 56 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/45/36345/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddCinderDiskCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddCinderDiskCommand.java new file mode 100644 index 0000000..2b1fa22 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddCinderDiskCommand.java @@ -0,0 +1,103 @@ +package org.ovirt.engine.core.bll; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Date; +import java.util.List; + +import org.ovirt.engine.core.bll.context.CommandContext; +import org.ovirt.engine.core.bll.provider.storage.OpenStackVolumeProviderProxy; +import org.ovirt.engine.core.bll.tasks.interfaces.CommandCallBack; +import org.ovirt.engine.core.bll.utils.PermissionSubject; +import org.ovirt.engine.core.bll.utils.VmDeviceUtils; +import org.ovirt.engine.core.common.VdcObjectType; +import org.ovirt.engine.core.common.action.AddDiskParameters; +import org.ovirt.engine.core.common.businessentities.CinderDisk; +import org.ovirt.engine.core.common.businessentities.VmDeviceGeneralType; +import org.ovirt.engine.core.common.businessentities.VmDeviceId; +import org.ovirt.engine.core.common.businessentities.VolumeFormat; +import org.ovirt.engine.core.common.businessentities.VolumeType; +import org.ovirt.engine.core.common.businessentities.image_storage_domain_map; +import org.ovirt.engine.core.common.utils.VmDeviceType; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.utils.transaction.TransactionMethod; +import org.ovirt.engine.core.utils.transaction.TransactionSupport; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@InternalCommandAttribute +public class AddCinderDiskCommand<T extends AddDiskParameters> extends AddDiskCommand<T> { + + private static final Logger log = LoggerFactory.getLogger(MergeCommand.class); + + public AddCinderDiskCommand(T parameters) { + super(parameters); + } + + public AddCinderDiskCommand(T parameters, CommandContext cmdContext) { + super(parameters, cmdContext); + } + + @Override + public void executeCommand() { + OpenStackVolumeProviderProxy proxy = getVolumeProviderProxy(); + + final CinderDisk cinderDisk = new CinderDisk(); + cinderDisk.setDiskAlias(getDiskAlias()); + cinderDisk.setSize(getParameters().getDiskInfo().getSize()); + + String newVolumeId = proxy.createVolumeFromDiskImage(cinderDisk); + cinderDisk.setId(Guid.createGuidFromString(newVolumeId)); + cinderDisk.setImageId(Guid.createGuidFromString(newVolumeId)); + cinderDisk.setBoot(getParameters().getDiskInfo().isBoot()); + cinderDisk.setDiskInterface(getParameters().getDiskInfo().getDiskInterface()); + cinderDisk.setDiskAlias(getParameters().getDiskInfo().getDiskAlias()); + cinderDisk.setDiskDescription(getParameters().getDiskInfo().getDiskDescription()); + cinderDisk.setShareable(getParameters().getDiskInfo().isShareable()); + cinderDisk.setStorageIds(new ArrayList<>(Arrays.asList(getParameters().getStorageDomainId()))); + cinderDisk.setSize(getParameters().getDiskInfo().getSize()); + cinderDisk.setVolumeType(VolumeType.Unassigned); + cinderDisk.setvolumeFormat(VolumeFormat.RAW); + cinderDisk.setCreationDate(new Date()); + cinderDisk.setLastModified(new Date()); + cinderDisk.setActive(true); + // cinderDisk.setImageStatus(ImageStatus.LOCKED); + // cinderDisk.setVmSnapshotId(getParameters().getVmSnapshotId()); + + TransactionSupport.executeInNewTransaction(new TransactionMethod<Void>() { + @Override + public Void runInTransaction() { + getBaseDiskDao().save(cinderDisk); + getImageDao().save(cinderDisk.getImage()); + getImageStorageDomainMapDao().save(new image_storage_domain_map(cinderDisk.getImageId(), + cinderDisk.getStorageIds().get(0), cinderDisk.getQuotaId(), cinderDisk.getDiskProfileId())); + + if (getVm() != null) { + VmDeviceUtils.addManagedDevice(new VmDeviceId(cinderDisk.getId(), getVmId()), + VmDeviceGeneralType.DISK, + VmDeviceType.DISK, + null, + shouldDiskBePlugged(), + Boolean.TRUE.equals(cinderDisk.getReadOnly()), + null); + } + return null; + } + }); + getReturnValue().setActionReturnValue(cinderDisk.getId()); + plugDiskToVmIfNeeded(); + } + + @Override + public List<PermissionSubject> getPermissionCheckSubjects() { + return Collections.singletonList(new PermissionSubject(getParameters().getStorageDomainId(), + VdcObjectType.Storage, + getActionType().getActionGroup())); + } + + @Override + public CommandCallBack getCallBack() { + return new AddCinderDiskCommandCallback(); + } +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddCinderDiskCommandCallback.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddCinderDiskCommandCallback.java new file mode 100644 index 0000000..6d56e22 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddCinderDiskCommandCallback.java @@ -0,0 +1,24 @@ +package org.ovirt.engine.core.bll; + +import java.util.List; + +import org.ovirt.engine.core.bll.tasks.CommandCoordinatorUtil; +import org.ovirt.engine.core.bll.tasks.interfaces.CommandCallBack; +import org.ovirt.engine.core.common.action.AddDiskParameters; +import org.ovirt.engine.core.compat.Guid; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class AddCinderDiskCommandCallback extends CommandCallBack { + private static final Logger log = LoggerFactory.getLogger(MergeCommandCallback.class); + + @Override + public void doPolling(Guid cmdId, List<Guid> childCmdIds) { + Integer shtut = new Integer(5); + shtut.intValue(); + } + + private AddCinderDiskCommand<AddDiskParameters> getCommand(Guid cmdId) { + return (AddCinderDiskCommand<AddDiskParameters>) CommandCoordinatorUtil.retrieveCommand(cmdId); + } +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java index be10303..4b59e99 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java @@ -1,21 +1,19 @@ package org.ovirt.engine.core.bll; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; -import java.util.Date; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.bll.context.CommandContext; import org.ovirt.engine.core.bll.profiles.DiskProfileHelper; -import org.ovirt.engine.core.bll.provider.storage.OpenStackVolumeProviderProxy; 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.storage.StorageDomainCommandBase; import org.ovirt.engine.core.bll.storage.StoragePoolValidator; +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.DiskValidator; @@ -29,7 +27,6 @@ import org.ovirt.engine.core.common.action.VdcReturnValueBase; import org.ovirt.engine.core.common.asynctasks.EntityInfo; import org.ovirt.engine.core.common.businessentities.ActionGroup; -import org.ovirt.engine.core.common.businessentities.CinderDisk; import org.ovirt.engine.core.common.businessentities.Disk; import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType; import org.ovirt.engine.core.common.businessentities.DiskImage; @@ -47,9 +44,6 @@ import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.core.common.businessentities.VmDeviceGeneralType; import org.ovirt.engine.core.common.businessentities.VmDeviceId; -import org.ovirt.engine.core.common.businessentities.VolumeFormat; -import org.ovirt.engine.core.common.businessentities.VolumeType; -import org.ovirt.engine.core.common.businessentities.image_storage_domain_map; import org.ovirt.engine.core.common.config.Config; import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.common.errors.VdcBllMessages; @@ -411,7 +405,7 @@ setSucceeded(true); } - private boolean shouldDiskBePlugged() { + protected boolean shouldDiskBePlugged() { return getVm().getStatus() == VMStatus.Down && !Boolean.FALSE.equals(getParameters().getPlugDiskToVm()); } @@ -475,52 +469,10 @@ } private void createDiskBasedOnCinder() { - OpenStackVolumeProviderProxy proxy = getVolumeProviderProxy(); - - final CinderDisk cinderDisk = new CinderDisk(); - cinderDisk.setDiskAlias(getDiskAlias()); - cinderDisk.setSize(getParameters().getDiskInfo().getSize()); - - String newVolumeId = proxy.createVolumeFromDiskImage(cinderDisk); - cinderDisk.setId(Guid.createGuidFromString(newVolumeId)); - cinderDisk.setImageId(Guid.createGuidFromString(newVolumeId)); - cinderDisk.setBoot(getParameters().getDiskInfo().isBoot()); - cinderDisk.setDiskInterface(getParameters().getDiskInfo().getDiskInterface()); - cinderDisk.setDiskAlias(getParameters().getDiskInfo().getDiskAlias()); - cinderDisk.setDiskDescription(getParameters().getDiskInfo().getDiskDescription()); - cinderDisk.setShareable(getParameters().getDiskInfo().isShareable()); - cinderDisk.setStorageIds(new ArrayList<>(Arrays.asList(getParameters().getStorageDomainId()))); - cinderDisk.setSize(getParameters().getDiskInfo().getSize()); - cinderDisk.setVolumeType(VolumeType.Unassigned); - cinderDisk.setvolumeFormat(VolumeFormat.RAW); - cinderDisk.setCreationDate(new Date()); - cinderDisk.setLastModified(new Date()); - cinderDisk.setActive(true); - //cinderDisk.setImageStatus(ImageStatus.LOCKED); - //cinderDisk.setVmSnapshotId(getParameters().getVmSnapshotId()); - - TransactionSupport.executeInNewTransaction(new TransactionMethod<Void>() { - @Override - public Void runInTransaction() { - getBaseDiskDao().save(cinderDisk); - getImageDao().save(cinderDisk.getImage()); - getImageStorageDomainMapDao().save(new image_storage_domain_map(cinderDisk.getImageId(), - cinderDisk.getStorageIds().get(0), cinderDisk.getQuotaId(), cinderDisk.getDiskProfileId())); - - if (getVm() != null) { - VmDeviceUtils.addManagedDevice(new VmDeviceId(cinderDisk.getId(), getVmId()), - VmDeviceGeneralType.DISK, - VmDeviceType.DISK, - null, - shouldDiskBePlugged(), - Boolean.TRUE.equals(cinderDisk.getReadOnly()), - null); - } - return null; - } - }); - getReturnValue().setActionReturnValue(cinderDisk.getId()); - plugDiskToVmIfNeeded(); + CommandCoordinatorUtil.executeAsyncCommand( + VdcActionType.AddCinderDisk, + getParameters(), + cloneContextAndDetachFromParent()); setSucceeded(true); } @@ -654,7 +606,7 @@ super.endSuccessfully(); } - private void plugDiskToVmIfNeeded() { + protected void plugDiskToVmIfNeeded() { if (Boolean.TRUE.equals(getParameters().getPlugDiskToVm()) && getVm() != null && getVm().getStatus() != VMStatus.Down) { HotPlugDiskToVmParameters params = new HotPlugDiskToVmParameters(getVmId(), getParameters().getDiskInfo().getId()); params.setShouldBeLogged(false); 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 3165e6b..3cba91d 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 @@ -399,7 +399,10 @@ // Mac Pool AddMacPool(3100, ActionGroup.CREATE_MAC_POOL, false, QuotaDependency.NONE), UpdateMacPool(3101, ActionGroup.EDIT_MAC_POOL, false, QuotaDependency.NONE), - RemoveMacPool(3102, ActionGroup.DELETE_MAC_POOL, false, QuotaDependency.NONE); + RemoveMacPool(3102, ActionGroup.DELETE_MAC_POOL, false, QuotaDependency.NONE), + + // Cinder + AddCinderDisk(3200, ActionGroup.CONFIGURE_VM_STORAGE, false, QuotaDependency.NONE); private int intValue; private ActionGroup actionGroup; -- To view, visit http://gerrit.ovirt.org/36345 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I087453ddfae71b8ee94a248f1456faf8c9ed9ede Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Maor Lipchuk <mlipc...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches