Liron Aravot has uploaded a new change for review. Change subject: tmp2 ......................................................................
tmp2 Change-Id: I85ddaf7abb736d6298be7f5e358d52cf2e5a48cb Signed-off-by: lara...@redhat.com <lara...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddImageFromScratchCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmAndCloneImageCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CloneImageGroupVolumeCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CloneImageGroupVolumesCommand.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CloneImageGroupVolumesWithCollapseCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ConcurrentChildCommandsExecutionCallback.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CopyImageGroupCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateImageTemplateCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateSnapshotCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/EntitiesPollingCallback.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmTemplateParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/CloneImageGroupVolumesCommandParameters.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/CloneImageGroupVolumesWithCollapseCommandParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ImagesActionsParametersBase.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/businessentities/LeaseState.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/CreateVolumeVDSCommandParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/GetImageInfoVDSCommandParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/StorageDomainVdsCommandParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/DoesImageExistVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcIIrsServer.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CopyVolumeDataVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/GetImageInfoVDSCommand.java 32 files changed, 617 insertions(+), 254 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/10/39210/2 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 c13a568..3be8467 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 @@ -465,7 +465,7 @@ ArrayList<Guid> taskList = isExecutedAsChildCommand() ? getReturnValue().getInternalVdsmTaskIdList() : getReturnValue().getVdsmTaskIdList(); taskList.addAll(tmpRetValue.getInternalVdsmTaskIdList()); } else { - tmpRetValue = executeCommandCoordinatorCommandSync(VdcActionType.AddImageFromScratch, parameters); + tmpRetValue = executeCoCoCommandSyncWithTasksContext(VdcActionType.AddImageFromScratch, parameters); } getReturnValue().setFault(tmpRetValue.getFault()); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddImageFromScratchCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddImageFromScratchCommand.java index e5c756e..aeab32b 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddImageFromScratchCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddImageFromScratchCommand.java @@ -39,7 +39,11 @@ @Override protected AsyncTaskType getTaskType() { - return AsyncTaskType.notSupported; + if (isDataCenterWithoutSpm()) { + return AsyncTaskType.notSupported; + } + + return super.getTaskType(); } @Override @@ -121,10 +125,17 @@ } else { runVdsCommand( VDSCommandType.CreateVolumeContainer, - new CreateVolumeVDSCommandParameters(getParameters().getStoragePoolId(), getParameters() - .getStorageDomainId(), getImageGroupId(), getParameters().getDiskInfo().getSize(), - getParameters().getDiskInfo().getVolumeType(), getParameters().getDiskInfo() - .getVolumeFormat(), getDestinationImageId(), diskDescription != null ? diskDescription : "", null, null)); + new CreateVolumeVDSCommandParameters(getParameters().getStoragePoolId(), + getParameters() + .getStorageDomainId(), + getImageGroupId(), + getParameters().getDiskInfo().getSize(), + getParameters().getDiskInfo() + .getVolumeFormat(), + getDestinationImageId(), + diskDescription != null ? diskDescription : "", + null, + null)); return true; } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmAndCloneImageCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmAndCloneImageCommand.java index b8ad07f..4876829 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmAndCloneImageCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmAndCloneImageCommand.java @@ -9,6 +9,7 @@ import java.util.Set; import org.ovirt.engine.core.bll.network.vm.VnicProfileHelper; +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.bll.validator.DiskImagesValidator; @@ -65,6 +66,15 @@ @Override protected Map<String, Pair<String, String>> getSharedLocks() { + return null; + } + + @Override + public CommandCallBack getCallBack() { + if (isDataCenterWithoutSpm()){ + return new ConcurrentChildCommandsExecutionCallback(); + } + return null; } @@ -255,7 +265,11 @@ * @return */ protected VdcReturnValueBase executeChildCopyingCommand(VdcActionParametersBase parameters) { - return runInternalActionWithTasksContext(getChildActionType(), parameters); + if (isDataCenterWithSpm()) { + return runInternalActionWithTasksContext(getChildActionType(), parameters); + } else { + return executeCoCoCommandSyncWithTasksContext(getChildActionType(), parameters); + } } @Override diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java index 16aee42..d1623e9 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java @@ -22,6 +22,7 @@ import org.ovirt.engine.core.bll.quota.QuotaStorageDependent; import org.ovirt.engine.core.bll.quota.QuotaVdsDependent; import org.ovirt.engine.core.bll.snapshots.SnapshotsManager; +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.bll.validator.StorageDomainValidator; @@ -1099,6 +1100,15 @@ } @Override + public CommandCallBack getCallBack() { + if (isDataCenterWithoutSpm()){ + return new ConcurrentChildCommandsExecutionCallback(); + } + + return null; + } + + @Override protected void endWithFailure() { super.endActionOnDisks(); removeVmRelatedEntitiesFromDb(); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java index 46ca248..69f658f 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java @@ -11,6 +11,7 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; + import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.bll.context.CommandContext; import org.ovirt.engine.core.bll.profiles.CpuProfileHelper; @@ -23,6 +24,7 @@ import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator; import org.ovirt.engine.core.bll.storage.StoragePoolValidator; import org.ovirt.engine.core.bll.tasks.CommandCoordinatorUtil; +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.bll.validator.DiskImagesValidator; @@ -107,6 +109,7 @@ VmStatic parameterMasterVm = parameters.getMasterVm(); if (parameterMasterVm != null) { super.setVmId(parameterMasterVm.getId()); + parameters.setVmId(parameterMasterVm.getId()); setVdsGroupId(parameterMasterVm.getVdsGroupId()); // API backward compatibility @@ -134,6 +137,15 @@ setStoragePoolId(getVdsGroup().getStoragePoolId()); } updateDiskInfoDestinationMap(); + } + + @Override + public CommandCallBack getCallBack() { + if (isDataCenterWithoutSpm()){ + return new ConcurrentChildCommandsExecutionCallback(); + } + + return null; } protected void separateCustomProperties(VmStatic parameterMasterVm) { @@ -203,9 +215,11 @@ @Override protected void buildChildCommandInfos() { - Guid vmSnapshotId = Guid.newGuid(); - for (DiskImage diskImage : mImages) { - addChildCommandInfo(diskImage.getImageId(), VdcActionType.CreateImageTemplate, buildChildCommandParameters(diskImage, vmSnapshotId)); + if (isDataCenterWithSpm()) { + Guid vmSnapshotId = Guid.newGuid(); + for (DiskImage diskImage : mImages) { + addChildCommandInfo(diskImage.getImageId(), VdcActionType.CreateImageTemplate, buildChildCommandParameters(diskImage, vmSnapshotId)); + } } } @@ -220,6 +234,7 @@ .get(0)); createParams.setDiskAlias(diskInfoDestinationMap.get(diskImage.getId()).getDiskAlias()); createParams.setParentParameters(getParameters()); + createParams.setParentCommand(getActionType()); createParams.setQuotaId(getQuotaIdForDisk(diskImage)); createParams.setDiskProfileId(diskInfoDestinationMap.get(diskImage.getId()).getDiskProfileId()); return createParams; @@ -315,7 +330,7 @@ // means that there are no asynchronous tasks to execute and that we can // end the command synchronously - pendingAsyncTasks = !getReturnValue().getVdsmTaskIdList().isEmpty(); + pendingAsyncTasks = !getReturnValue().getVdsmTaskIdList().isEmpty() || (isDataCenterWithoutSpm() && !CommandCoordinatorUtil.getChildCommandIds(getCommandId()).isEmpty()); if (!pendingAsyncTasks) { endSuccessfullySynchronous(); } @@ -662,29 +677,31 @@ } protected void addVmTemplateImages(Map<Guid, Guid> srcDeviceIdToTargetDeviceIdMapping) { + Guid vmSnapshotId = Guid.newGuid(); for (DiskImage diskImage : mImages) { - // The return value of this action is the 'copyImage' task GUID: - VdcReturnValueBase retValue = executeChildCommand(diskImage.getImageId()); + VdcReturnValueBase retValue; + if (isDataCenterWithSpm()) { + // The return value of this action is the 'copyImage' task GUID: + retValue = executeChildCommand(diskImage.getImageId()); - if (!retValue.getSucceeded()) { - throw new VdcBLLException(retValue.getFault().getError(), retValue.getFault().getMessage()); + if (!retValue.getSucceeded()) { + throw new VdcBLLException(retValue.getFault().getError(), retValue.getFault().getMessage()); + } + + getReturnValue().getVdsmTaskIdList().addAll(retValue.getInternalVdsmTaskIdList()); + } else { + retValue = executeCoCoCommandSyncWithTasksContext(VdcActionType.CreateImageTemplate, buildChildCommandParameters(diskImage, vmSnapshotId)); } - getReturnValue().getVdsmTaskIdList().addAll(retValue.getInternalVdsmTaskIdList()); DiskImage newImage = (DiskImage) retValue.getActionReturnValue(); srcDeviceIdToTargetDeviceIdMapping.put(diskImage.getId(), newImage.getId()); } } - - private Guid getVmIdFromImageParameters(){ - return ((CreateImageTemplateParameters)getParameters().getImagesParameters().get(0)).getVmId(); - } - @Override protected void endSuccessfully() { setVmTemplateId(getParameters().getVmTemplateId()); - setVmId(getVmIdFromImageParameters()); + setVmId(getParameters().getVmId()); isVmInDb = getVm() != null; getVmStaticDAO().incrementDbGeneration(getVmTemplateId()); @@ -763,7 +780,7 @@ // statement. // (a template without images doesn't exist in the 'vm_template_view'). setVmTemplateId(getParameters().getVmTemplateId()); - setVmId(getVmIdFromImageParameters()); + setVmId(getParameters().getVmId()); for (VdcActionParametersBase p : getParameters().getImagesParameters()) { p.setTaskGroupSuccess(false); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CloneImageGroupVolumeCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CloneImageGroupVolumeCommand.java index ac05aa1..83c2873 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CloneImageGroupVolumeCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CloneImageGroupVolumeCommand.java @@ -4,12 +4,17 @@ import org.ovirt.engine.core.bll.tasks.interfaces.CommandCallBack; import org.ovirt.engine.core.common.action.CloneImageGroupVolumeCommandParameters; import org.ovirt.engine.core.common.asynctasks.AsyncTaskType; +import org.ovirt.engine.core.common.businessentities.DiskImage; +import org.ovirt.engine.core.common.businessentities.ImageStatus; +import org.ovirt.engine.core.common.businessentities.LeaseState; import org.ovirt.engine.core.common.businessentities.VdsmImageLocationInfo; import org.ovirt.engine.core.common.vdscommands.CopyVolumeDataVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.CreateVolumeVDSCommandParameters; +import org.ovirt.engine.core.common.vdscommands.GetImageInfoVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.VDSCommandType; import org.ovirt.engine.core.compat.CommandStatus; +@InternalCommandAttribute public class CloneImageGroupVolumeCommand<T extends CloneImageGroupVolumeCommandParameters> extends BaseImagesCommand<T> implements EntityPollingCommand { public CloneImageGroupVolumeCommand(T parameters, CommandContext cmdContext) { @@ -37,10 +42,17 @@ private void createVolume() { runVdsCommand(VDSCommandType.CreateVolumeContainer, - new CreateVolumeVDSCommandParameters(getParameters().getStoragePoolId(), getParameters() - .getDstDomainId(), getImageGroupId(), getImage().getSize(), - getImage().getVolumeType(), getImage() - .getVolumeFormat(), getImageId(), getImage().getDiskDescription() != null ? getImage().getDescription() : "", null, null)); + new CreateVolumeVDSCommandParameters(getParameters().getStoragePoolId(), + getParameters() + .getDstDomainId(), + getParameters().getDstImageGroupId(), + getImage().getSize(), + ImagesHandler.getVolumeFormatForDomain(getImage() + .getVolumeFormat(), getImage().getVolumeType(), getParameters().getDstDomainId()), + getParameters().getDstImageId(), + getImage().getDiskDescription() != null ? getImage().getDescription() : "", + null, + null)); } protected AsyncTaskType getTaskType() { @@ -68,27 +80,25 @@ @Override public CommandStatus poll() { -// DiskImage imageInfo = -// (DiskImage) runVdsCommand( -// VDSCommandType.GetImageInfo, -// new GetImageInfoVDSCommandParameters(getParameters().getStoragePoolId(), -// getParameters().getDstDomainId(), -// getParameters().getImageGroupId(), -// getParameters().getImageId())).getReturnValue(); -// if (imageInfo.getLeaseState() != LeaseState.FREE) { -// return null; -// } -// -// if (imageInfo.getImageStatus() == ImageStatus.ILLEGAL) { -// return CommandStatus.FAILED; -// } -// -// if (imageInfo.getImageStatus() == ImageStatus.OK) { -// return CommandStatus.SUCCEEDED; -// } -// -// return null; + DiskImage imageInfo = + (DiskImage) runVdsCommand( + VDSCommandType.GetImageInfo, + new GetImageInfoVDSCommandParameters(getParameters().getStoragePoolId(), + getParameters().getDstDomainId(), + getParameters().getDstImageGroupId(), + getParameters().getDstImageId())).getReturnValue(); + if (imageInfo.getLeaseState() != LeaseState.FREE) { + return null; + } - return CommandStatus.SUCCEEDED; + if (imageInfo.getImageStatus() == ImageStatus.ILLEGAL) { + return CommandStatus.FAILED; + } + + if (imageInfo.getImageStatus() == ImageStatus.OK) { + return CommandStatus.SUCCEEDED; + } + + return null; } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CloneImageGroupVolumesCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CloneImageGroupVolumesCommand.java index dcf24dc..63dcd5d 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CloneImageGroupVolumesCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CloneImageGroupVolumesCommand.java @@ -1,24 +1,24 @@ package org.ovirt.engine.core.bll; +import java.util.Collections; import java.util.List; import org.ovirt.engine.core.bll.context.CommandContext; import org.ovirt.engine.core.bll.tasks.CommandCoordinatorUtil; import org.ovirt.engine.core.bll.tasks.interfaces.CommandCallBack; +import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.common.action.CloneImageGroupVolumeCommandParameters; -import org.ovirt.engine.core.common.action.MoveOrCopyImageGroupParameters; +import org.ovirt.engine.core.common.action.CloneImageGroupVolumesCommandParameters; import org.ovirt.engine.core.common.action.VdcActionParametersBase; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.DiskImage; -import org.ovirt.engine.core.common.businessentities.ImageStatus; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.DbFacade; -public class CloneImageGroupVolumesCommand<T extends MoveOrCopyImageGroupParameters> extends BaseImagesCommand<T> implements SerialChildExecutingCommand { +@InternalCommandAttribute +public class CloneImageGroupVolumesCommand<T extends CloneImageGroupVolumesCommandParameters> extends CommandBase<T> implements SerialChildExecutingCommand { public CloneImageGroupVolumesCommand(T parameters, CommandContext cmdContext) { super(parameters, cmdContext); - setImageGroupId(getParameters().getImageGroupID()); - setImageId(getParameters().getImageId()); } public CloneImageGroupVolumesCommand(T parameters) { @@ -28,16 +28,13 @@ @Override public CommandCallBack getCallBack() { return new SerialChildCommandsExecutionCallback(); - } @Override protected void executeCommand() { - // Lock all disk images in advance - updateImagesChainStatus(ImageStatus.LOCKED); List<DiskImage> images = DbFacade.getInstance() .getDiskImageDao() - .getAllSnapshotsForImageGroup(getParameters().getImageGroupID()); + .getAllSnapshotsForImageGroup(getParameters().getSrcImageGroupId()); ImagesHandler.sortImageList(images); getParameters().setImageIds(ImagesHandler.getDiskImageIds(images)); setSucceeded(true); @@ -46,31 +43,17 @@ private VdcActionParametersBase buildChildCommandParams(Guid imageId) { //will be used to pass further parameters CloneImageGroupVolumeCommandParameters params = new CloneImageGroupVolumeCommandParameters(); - params.setSrcDomainId(getParameters().getSourceDomainId()); - params.setDstDomainId(getParameters().getStorageDomainId()); - params.setImageGroupID(getParameters().getImageGroupID()); + params.setSrcDomainId(getParameters().getSrcDomain()); + params.setDstDomainId(getParameters().getDestDomain()); + params.setImageGroupID(getParameters().getSrcImageGroupId()); params.setImageId(imageId); params.setStoragePoolId(getParameters().getStoragePoolId()); params.setParentCommand(getActionType()); params.setParentParameters(getParameters()); params.setDstImageId(imageId); - params.setDstImageGroupId(getParameters().getImageGroupID()); + params.setDstImageGroupId(getParameters().getDstImageGroupId()); + params.setCollapse(false); return params; - } - - @Override - public void endSuccessfully() { - updateImagesChainStatus(ImageStatus.OK); - } - - @Override - public void endWithFailure() { - updateImagesChainStatus(ImageStatus.OK); - } - - private void updateImagesChainStatus(ImageStatus imagesStatus) { - ImagesHandler.updateAllDiskImageSnapshotsStatus(getImageGroupId(), imagesStatus); - } @Override @@ -89,6 +72,11 @@ } @Override + public List<PermissionSubject> getPermissionCheckSubjects() { + return Collections.emptyList(); + } + + @Override public int getChildCount() { return getParameters().getImageIds().size(); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CloneImageGroupVolumesWithCollapseCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CloneImageGroupVolumesWithCollapseCommand.java new file mode 100644 index 0000000..37df986 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CloneImageGroupVolumesWithCollapseCommand.java @@ -0,0 +1,59 @@ +package org.ovirt.engine.core.bll; + +import java.util.Collections; +import java.util.List; + +import org.ovirt.engine.core.bll.context.CommandContext; +import org.ovirt.engine.core.bll.tasks.CommandCoordinatorUtil; +import org.ovirt.engine.core.bll.tasks.interfaces.CommandCallBack; +import org.ovirt.engine.core.bll.utils.PermissionSubject; +import org.ovirt.engine.core.common.action.CloneImageGroupVolumeCommandParameters; +import org.ovirt.engine.core.common.action.CloneImageGroupVolumesWithCollapseCommandParameters; +import org.ovirt.engine.core.common.action.VdcActionParametersBase; +import org.ovirt.engine.core.common.action.VdcActionType; + +@InternalCommandAttribute +public class CloneImageGroupVolumesWithCollapseCommand<T extends CloneImageGroupVolumesWithCollapseCommandParameters> extends CommandBase<T>{ + public CloneImageGroupVolumesWithCollapseCommand(T parameters, CommandContext cmdContext) { + super(parameters, cmdContext); + } + + public CloneImageGroupVolumesWithCollapseCommand(T parameters) { + this(parameters, null); + } + + @Override + public CommandCallBack getCallBack() { + return new ConcurrentChildCommandsExecutionCallback(); + } + + @Override + protected void executeCommand() { + CommandCoordinatorUtil.executeAsyncCommand( + VdcActionType.CloneImageGroupVolume, + buildChildCommandParams(), + cloneContextAndDetachFromParent()); + setSucceeded(true); + } + + @Override + public List<PermissionSubject> getPermissionCheckSubjects() { + return Collections.emptyList(); + } + + private VdcActionParametersBase buildChildCommandParams() { + // will be used to pass further parameters + CloneImageGroupVolumeCommandParameters params = new CloneImageGroupVolumeCommandParameters(); + params.setSrcDomainId(getParameters().getSrcDomain()); + params.setDstDomainId(getParameters().getDestDomain()); + params.setImageGroupID(getParameters().getSrcImageGroupId()); + params.setImageId(getParameters().getSrcImageId()); + params.setStoragePoolId(getParameters().getStoragePoolId()); + params.setParentCommand(getActionType()); + params.setParentParameters(getParameters()); + params.setDstImageId(getParameters().getDstImageId()); + params.setDstImageGroupId(getParameters().getDstImageGroupId()); + params.setCollapse(true); + return params; + } +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java index 1a7a017..91b08a4 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java @@ -7,6 +7,7 @@ import java.util.Collection; import java.util.HashMap; import java.util.Iterator; +import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -508,7 +509,7 @@ if (!hasTaskHandlers() || getExecutionIndex() == getTaskHandlers().size() - 1) { startFinalizingStep(); } - + obtainChildCommands(); try { initiateLockEndAction(); setActionState(); @@ -569,6 +570,22 @@ _actionState = CommandActionState.END_SUCCESS; } else { _actionState = CommandActionState.END_FAILURE; + } + } + + public void obtainChildCommands() { + if (getCallBack() != null) { + List<Guid> childCommands = CommandCoordinatorUtil.getChildCommandIds(getCommandId()); + CommandBase<?> commandBase = CommandCoordinatorUtil.retrieveCommand(getCommandId()); + //List<Pair<VdcActionType, VdcActionParametersBase>> parameters = new LinkedList<>(); + List<VdcActionParametersBase> parameters = new LinkedList<>(); + for (Guid id : childCommands) { + CommandBase<?> command = CommandCoordinatorUtil.retrieveCommand(id); + command.getParameters().setCommandType(command.getActionType()); + parameters.add(command.getParameters()); + } + + commandBase.getParameters().setImagesParameters(parameters); } } @@ -2296,16 +2313,13 @@ return null; } - public VdcReturnValueBase executeCommandCoordinatorCommandSync(VdcActionType actionType, VdcActionParametersBase parameters) { - try { - return CommandCoordinatorUtil.executeAsyncCommand(actionType, parameters, cloneContextAndDetachFromParent()).get(); - } catch (Exception e) { - throw new RuntimeException(e); - } - } protected VdcReturnValueBase runInternalAction(VdcActionType actionType, VdcActionParametersBase parameters) { return getBackend().runInternalAction(actionType, parameters, context.clone()); + } + + protected VdcReturnValueBase executeCoCoCommandSync(VdcActionType actionType, VdcActionParametersBase parameters) { + return executeCoCoCommandSync(actionType, parameters, context.clone()); } protected VdcReturnValueBase runInternalAction(VdcActionType actionType, @@ -2314,6 +2328,16 @@ return getBackend().runInternalAction(actionType, parameters, internalCommandContext); + } + + public VdcReturnValueBase executeCoCoCommandSync(VdcActionType actionType, + VdcActionParametersBase parameters, + CommandContext internalCommandContext) { + try { + return CommandCoordinatorUtil.executeAsyncCommand(actionType, parameters, internalCommandContext).get(); + } catch (Exception e) { + throw new RuntimeException(e); + } } protected ArrayList<VdcReturnValueBase> runInternalMultipleActions(VdcActionType actionType, @@ -2334,12 +2358,16 @@ return runInternalActionWithTasksContext(actionType, parameters, null); } + public VdcReturnValueBase executeCoCoCommandSyncWithTasksContext(VdcActionType actionType, VdcActionParametersBase parameters) { + return executeCoCoCommandSyncWithTasksContext(actionType, parameters, null); + } + protected VdcReturnValueBase runChildActionWithTasksContextIfNeeded(VdcActionType actionType, VdcActionParametersBase parameters) { if (isDataCenterWithSpm()) { return runInternalActionWithTasksContext(actionType, parameters, null); } else { - return executeCommandCoordinatorCommandSync(actionType, parameters); + return executeCoCoCommandSync(actionType, parameters, null); } } @@ -2351,6 +2379,18 @@ ExecutionHandler.createDefaultContextForTasks(getContext(), lock)); } + protected VdcReturnValueBase runInternalActionWithTasksContextAndCompensationContext(VdcActionType actionType, + VdcActionParametersBase parameters, EngineLock lock) { + return runInternalAction( + actionType, + parameters, + ExecutionHandler.createDefaultContextForTasks(getContext(), lock)); + } + + public VdcReturnValueBase executeCoCoCommandSyncWithTasksContext(VdcActionType actionType, VdcActionParametersBase parameters, EngineLock lock) { + return executeCoCoCommandSync(actionType, parameters, ExecutionHandler.createDefaultContextForTasks(getContext(), lock)); + } + protected VdcQueryReturnValue runInternalQuery(VdcQueryType type, VdcQueryParametersBase queryParams) { return getBackend().runInternalQuery(type, queryParams, context.getEngineContext()); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ConcurrentChildCommandsExecutionCallback.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ConcurrentChildCommandsExecutionCallback.java index b70ccac..1497b6c 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ConcurrentChildCommandsExecutionCallback.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ConcurrentChildCommandsExecutionCallback.java @@ -103,21 +103,22 @@ // } // } - private void endAction(CommandBase<?> commandBase, List<Guid> childCmdIds) { + private void endAction(CommandBase<?> commandBase, List<Guid> childCmdIds) { //List<Pair<VdcActionType, VdcActionParametersBase>> parameters = new LinkedList<>(); - List<VdcActionParametersBase> parameters = new LinkedList<>(); - for (Guid id : childCmdIds) { - CommandBase<?> command = getCommand(id); - command.getParameters().setCommandType(command.getActionType()); - parameters.add(command.getParameters()); - //parameters.add(new Pair<>(command.getActionType(), command.getParameters())); - } +// List<VdcActionParametersBase> parameters = new LinkedList<>(); +// for (Guid id : childCmdIds) { +// CommandBase<?> command = getCommand(id); +// command.getParameters().setCommandType(command.getActionType()); +// parameters.add(command.getParameters()); +// //parameters.add(new Pair<>(command.getActionType(), command.getParameters())); +// } //TODO: handle case of grandpa command // commandBase.getParameters().setCocoChildCommands(parameters); - commandBase.getParameters().setImagesParameters(parameters); - commandBase.endAction(); + if (commandBase.getParameters().getParentCommand() == VdcActionType.Unknown) { + //endaction method will set the child commands. + commandBase.endAction(); // well remove the hirerchy only if there's no parent, otherwise the parent will clean // the hirerchy. #TODO: consider change to add a member to the parameters for that CommandCoordinatorUtil.removeAllCommandsInHierarchy(commandBase.getCommandId()); @@ -135,6 +136,7 @@ CommandBase<?> commandBase = getCommand(cmdId); //This should be removed as soon as infra bug will be fixed and failed execution will reach endWithFailure commandBase.getParameters().setTaskGroupSuccess(false); + endAction(commandBase, childCmdIds); // endAction(cmdId, childCmdIds); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CopyImageGroupCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CopyImageGroupCommand.java index 3f6e869..1ae7fbf 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CopyImageGroupCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CopyImageGroupCommand.java @@ -1,11 +1,13 @@ package org.ovirt.engine.core.bll; -import org.ovirt.engine.core.bll.context.CommandContext; - import java.util.List; +import org.ovirt.engine.core.bll.context.CommandContext; import org.ovirt.engine.core.bll.storage.PostZeroHandler; +import org.ovirt.engine.core.bll.tasks.interfaces.CommandCallBack; import org.ovirt.engine.core.common.VdcObjectType; +import org.ovirt.engine.core.common.action.CloneImageGroupVolumesCommandParameters; +import org.ovirt.engine.core.common.action.CloneImageGroupVolumesWithCollapseCommandParameters; import org.ovirt.engine.core.common.action.MoveOrCopyImageGroupParameters; import org.ovirt.engine.core.common.action.RemoveImageParameters; import org.ovirt.engine.core.common.action.VdcActionParametersBase; @@ -17,9 +19,6 @@ import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.ImageOperation; import org.ovirt.engine.core.common.businessentities.ImageStorageDomainMapId; -import org.ovirt.engine.core.common.businessentities.StorageDomainStatic; -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.vdscommands.CopyImageVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.MoveImageGroupVDSCommandParameters; @@ -57,61 +56,19 @@ } } + public CommandCallBack getCallBack() { + if (isDataCenterWithoutSpm()){ + return new ConcurrentChildCommandsExecutionCallback(); + } + + return null; + } + @Override protected void executeCommand() { lockImage(); - VDSReturnValue vdsReturnValue = null; - Guid sourceDomainId = getParameters().getSourceDomainId() != null ? getParameters().getSourceDomainId() - : getDiskImage().getStorageIds().get(0); - - Guid taskId = persistAsyncTaskPlaceHolder(getParameters().getParentCommand()); - - if (getParameters().getUseCopyCollapse()) { - vdsReturnValue = runVdsCommand( - VDSCommandType.CopyImage, - PostZeroHandler.fixParametersWithPostZero( - new CopyImageVDSCommandParameters(getStorageDomain().getStoragePoolId(), - sourceDomainId, - getParameters().getContainerId(), - getParameters().getImageGroupID(), - getParameters().getImageId(), - getParameters().getDestImageGroupId(), - getParameters().getDestinationImageId(), - "", - getParameters().getStorageDomainId(), - getParameters().getCopyVolumeType(), - getVolumeFormatForDomain(), - getParameters().getVolumeType(), - isWipeAfterDelete(), - getParameters().getForceOverride()))); - } else { - vdsReturnValue = runVdsCommand( - VDSCommandType.MoveImageGroup, - PostZeroHandler.fixParametersWithPostZero( - new MoveImageGroupVDSCommandParameters( - getDiskImage() != null ? getDiskImage().getStoragePoolId() - : getStorageDomain().getStoragePoolId(), - sourceDomainId, - getDiskImage() != null ? - getDiskImage().getId() : getParameters().getImageGroupID(), - getParameters().getStorageDomainId(), - getParameters().getContainerId(), - ImageOperation.Copy, - isWipeAfterDelete(), - getParameters().getForceOverride()))); - } - - if (vdsReturnValue.getSucceeded()) { - AsyncTaskCreationInfo taskCreationInfo = vdsReturnValue.getCreationInfo(); - getReturnValue().getInternalVdsmTaskIdList().add( - createTask(taskId, - taskCreationInfo, - getParameters().getParentCommand(), - VdcObjectType.Storage, - sourceDomainId, - getParameters().getStorageDomainId())); - + if (performVdsmOperation()) { // Add storage domain in db only if there is new entity in DB. if (!shouldUpdateStorageDisk() && getParameters().getAddImageDomainMapping()) { getImageStorageDomainMapDao().save @@ -130,26 +87,88 @@ : getParameters().getWipeAfterDelete(); } - /** - * Since we are supporting copy/move operations between different storage families (file/block) we have to - * predetermine the volume format according to the destination storage type, for block domains we cannot use sparse - * combined with raw so we will change the raw to cow in that case, file domains will have the original format - * retained - */ - private VolumeFormat getVolumeFormatForDomain() { - if (getParameters().getVolumeFormat() == VolumeFormat.COW) { - return VolumeFormat.COW; - } - StorageDomainStatic destDomain = getStorageDomainStaticDAO().get(getParameters().getStorageDomainId()); - if (destDomain.getStorageType().isBlockDomain() && getParameters().getVolumeType() == VolumeType.Sparse) { - return VolumeFormat.COW; - } - else { - return VolumeFormat.RAW; + private boolean performVdsmOperation() { + Guid sourceDomainId = getParameters().getSourceDomainId() != null ? getParameters().getSourceDomainId() + : getDiskImage().getStorageIds().get(0); + VDSReturnValue vdsReturnValue; + if (isDataCenterWithSpm()) { + Guid taskId = persistAsyncTaskPlaceHolder(getParameters().getParentCommand()); + if (getParameters().getUseCopyCollapse()) { + vdsReturnValue = runVdsCommand( + VDSCommandType.CopyImage, + PostZeroHandler.fixParametersWithPostZero( + new CopyImageVDSCommandParameters(getStorageDomain().getStoragePoolId(), + sourceDomainId, + getParameters().getContainerId(), + getParameters().getImageGroupID(), + getParameters().getImageId(), + getParameters().getDestImageGroupId(), + getParameters().getDestinationImageId(), + "", + getParameters().getStorageDomainId(), + getParameters().getCopyVolumeType(), + ImagesHandler.getVolumeFormatForDomain(getParameters().getVolumeFormat(), getParameters().getVolumeType(), getParameters().getStorageDomainId()), + getParameters().getVolumeType(), + isWipeAfterDelete(), + getParameters().getForceOverride()))); + } else { + vdsReturnValue = runVdsCommand( + VDSCommandType.MoveImageGroup, + PostZeroHandler.fixParametersWithPostZero( + new MoveImageGroupVDSCommandParameters( + getDiskImage() != null ? getDiskImage().getStoragePoolId() + : getStorageDomain().getStoragePoolId(), + sourceDomainId, + getDiskImage() != null ? + getDiskImage().getId() : getParameters().getImageGroupID(), + getParameters().getStorageDomainId(), + getParameters().getContainerId(), + ImageOperation.Copy, + isWipeAfterDelete(), + getParameters().getForceOverride()))); + } + + if (vdsReturnValue.getSucceeded()) { + AsyncTaskCreationInfo taskCreationInfo = vdsReturnValue.getCreationInfo(); + getReturnValue().getInternalVdsmTaskIdList().add( + createTask(taskId, + taskCreationInfo, + getParameters().getParentCommand(), + VdcObjectType.Storage, + sourceDomainId, + getParameters().getStorageDomainId())); + } + + return vdsReturnValue.getSucceeded(); + } else { + if (getParameters().getUseCopyCollapse()) { + return executeCoCoCommandSyncWithTasksContext(VdcActionType.CloneImageGroupVolumesWithCollapse, + new CloneImageGroupVolumesWithCollapseCommandParameters + (getStorageDomain().getStoragePoolId(), + null, + sourceDomainId, + getParameters().getImageGroupID(), + getParameters().getImageId(), + getParameters().getStorageDomainId(), + getParameters().getDestImageGroupId(), + getParameters().getDestinationImageId(), + getActionType(), + getParameters())).getSucceeded(); + + } else { + return executeCoCoCommandSyncWithTasksContext(VdcActionType.CloneImageGroupVolumes, + new CloneImageGroupVolumesCommandParameters + (getStorageDomain().getStoragePoolId(), + sourceDomainId, + getParameters().getImageGroupID(), + getParameters().getStorageDomainId(), + getParameters().getDestImageGroupId(), + getActionType(), + getParameters())).getSucceeded(); + } } } - /** * Shareable disk which shared between more then one VM, will be returned more then once when fetching the images by image group * since it has multiple VM devices (one for each VM it is attached to) and not because he has snapshots, diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java index 4583ff6..3ad9aa8 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java @@ -262,7 +262,7 @@ "Failed to create snapshot!"); } } else { - executeCommandCoordinatorCommandSync(VdcActionType.CreateSnapshot, buildCreateSnapshotParameters(image)); + executeCoCoCommandSyncWithTasksContext(VdcActionType.CreateSnapshot, buildCreateSnapshotParameters(image)); } } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateImageTemplateCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateImageTemplateCommand.java index 90a0d0f..5d8f170 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateImageTemplateCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateImageTemplateCommand.java @@ -6,7 +6,9 @@ import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.bll.context.CommandContext; import org.ovirt.engine.core.bll.storage.PostZeroHandler; +import org.ovirt.engine.core.bll.tasks.interfaces.CommandCallBack; import org.ovirt.engine.core.common.VdcObjectType; +import org.ovirt.engine.core.common.action.CloneImageGroupVolumesWithCollapseCommandParameters; import org.ovirt.engine.core.common.action.CreateImageTemplateParameters; import org.ovirt.engine.core.common.action.RemoveImageParameters; import org.ovirt.engine.core.common.action.VdcActionType; @@ -37,8 +39,19 @@ } @Override + public CommandCallBack getCallBack() { + if (isDataCenterWithoutSpm()){ + return new ConcurrentChildCommandsExecutionCallback(); + } + + return null; + } + + @Override protected void insertAsyncTaskPlaceHolders() { - persistAsyncTaskPlaceHolder(VdcActionType.AddVmTemplate); + if (isDataCenterWithSpm()) { + persistAsyncTaskPlaceHolder(VdcActionType.AddVmTemplate); + } } @Override @@ -59,21 +72,35 @@ VolumeFormat targetFormat = getTargetVolumeFormat(newImage.getVolumeFormat(), newImage.getVolumeType(), getParameters().getDestinationStorageDomainId()); - VDSReturnValue vdsReturnValue = runVdsCommand(VDSCommandType.CopyImage, - PostZeroHandler.fixParametersWithPostZero( - new CopyImageVDSCommandParameters(storagePoolId, getParameters().getStorageDomainId(), - getParameters().getVmId(), imageGroupId, snapshotId, destinationImageGroupID, - getDestinationImageId(), StringUtils.defaultString(newImage.getDescription()), - getParameters().getDestinationStorageDomainId(), CopyVolumeType.SharedVol, - targetFormat, newImage.getVolumeType(), getDiskImage().isWipeAfterDelete(), false))); + if (isDataCenterWithSpm()) { + VDSReturnValue vdsReturnValue = runVdsCommand(VDSCommandType.CopyImage, + PostZeroHandler.fixParametersWithPostZero( + new CopyImageVDSCommandParameters(storagePoolId, getParameters().getStorageDomainId(), + getParameters().getVmId(), imageGroupId, snapshotId, destinationImageGroupID, + getDestinationImageId(), StringUtils.defaultString(newImage.getDescription()), + getParameters().getDestinationStorageDomainId(), CopyVolumeType.SharedVol, + targetFormat, newImage.getVolumeType(), getDiskImage().isWipeAfterDelete(), false))); - getReturnValue().getInternalVdsmTaskIdList().add( - createTask(taskId, - vdsReturnValue.getCreationInfo(), - VdcActionType.AddVmTemplate, - VdcObjectType.Storage, - getParameters().getStorageDomainId(), - getParameters().getDestinationStorageDomainId())); + getReturnValue().getInternalVdsmTaskIdList().add( + createTask(taskId, + vdsReturnValue.getCreationInfo(), + VdcActionType.AddVmTemplate, + VdcObjectType.Storage, + getParameters().getStorageDomainId(), + getParameters().getDestinationStorageDomainId())); + } else { + executeCoCoCommandSyncWithTasksContext(VdcActionType.CloneImageGroupVolumesWithCollapse, + new CloneImageGroupVolumesWithCollapseCommandParameters(storagePoolId, + null, + getParameters().getStorageDomainId(), + imageGroupId, + snapshotId, + getParameters().getDestinationStorageDomainId(), + destinationImageGroupID, + getDestinationImageId(), + getActionType(), + getParameters())); + } newImage.setId(destinationImageGroupID); newImage.setDiskAlias(getParameters().getDiskAlias() != null ? @@ -138,7 +165,11 @@ @Override protected AsyncTaskType getTaskType() { - return AsyncTaskType.copyImage; + if (isDataCenterWithSpm()) { + return AsyncTaskType.copyImage; + } + + return super.getTaskType(); } @Override diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateSnapshotCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateSnapshotCommand.java index 3868a5c..eef142c 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateSnapshotCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateSnapshotCommand.java @@ -129,9 +129,15 @@ vdsReturnValue = runVdsCommand( VDSCommandType.CreateVolumeContainer, - new CreateVolumeVDSCommandParameters(getStoragePoolId(), getDestinationStorageDomainId(), - getImageGroupId(), getDiskImage().getSize(), newDiskImage.getVolumeType(), newDiskImage.getVolumeFormat(), - getDestinationImageId(), "", getImageGroupId(), getImage().getImageId())); + new CreateVolumeVDSCommandParameters(getStoragePoolId(), + getDestinationStorageDomainId(), + getImageGroupId(), + getDiskImage().getSize(), + newDiskImage.getVolumeFormat(), + getDestinationImageId(), + "", + getImageGroupId(), + getImage().getImageId())); } } catch (Exception e) { log.error("Failed creating snapshot from image id '{}'", getImage().getImageId()); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/EntitiesPollingCallback.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/EntitiesPollingCallback.java index 14bb2ab..42a787c 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/EntitiesPollingCallback.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/EntitiesPollingCallback.java @@ -17,23 +17,26 @@ @Override public void doPolling(Guid cmdId, List<Guid> childCmdIds) { - CommandExecutionStatus status = CommandCoordinatorUtil.getCommandExecutionStatus(cmdId); + CommandExecutionStatus commandExecutionStatus = CommandCoordinatorUtil.getCommandExecutionStatus(cmdId); + CommandStatus commandStatus = CommandCoordinatorUtil.getCommandStatus(cmdId); // TODO: should be removed when doPolloing will be moved to run only after execute finish - here for test purpose only. - if (status != CommandExecutionStatus.EXECUTED && - CommandCoordinatorUtil.getCommandStatus(cmdId) == CommandStatus.ACTIVE) { + if (commandExecutionStatus != CommandExecutionStatus.EXECUTED && + commandStatus == CommandStatus.ACTIVE) { return; } EntityPollingCommand entityPollingCommand = getCommand(cmdId); - CommandBase<?> command = (CommandBase<?>)entityPollingCommand; + CommandBase<?> command = (CommandBase<?>) entityPollingCommand; + if (commandStatus == commandStatus.ACTIVE) { + CommandStatus pollingStatus = entityPollingCommand.poll(); - CommandStatus commandStatus = entityPollingCommand.poll(); + if (pollingStatus == null) { + return; + } - if (commandStatus == null) { - return; + command.setCommandStatus(pollingStatus); } - command.setCommandStatus(commandStatus); log.info("Polling ended on entites of '{}' (id : '{}'), status '{}'", command.getActionType(), cmdId, command.getCommandStatus()); } @@ -43,8 +46,8 @@ private void endAction(Guid cmdId, List<Guid> childCmdIds) { CommandBase<?> commandBase = (CommandBase<?>)getCommand(cmdId); - commandBase.endAction(); if (commandBase.getParameters().getParentCommand() == VdcActionType.Unknown) { + commandBase.endAction(); CommandCoordinatorUtil.removeAllCommandsInHierarchy(cmdId); } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmCommand.java index b1630fa..d63502c7 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmCommand.java @@ -21,7 +21,6 @@ import org.ovirt.engine.core.bll.validator.StorageDomainValidator; import org.ovirt.engine.core.bll.validator.VmValidator; import org.ovirt.engine.core.common.AuditLogType; -import org.ovirt.engine.core.common.FeatureSupported; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.LockProperties; import org.ovirt.engine.core.common.action.LockProperties.Scope; @@ -395,24 +394,11 @@ return params; } - private boolean isDataCenterWithoutSpm() { - return FeatureSupported.dataCenterWithoutSpm(getStoragePool().getcompatibility_version()); - } - - public VdcActionType getActionTypeForOperation() { - if (isDataCenterWithoutSpm()) { - return VdcActionType.CloneImageGroupVolumes; - } - - return VdcActionType.CopyImageGroup; - } - - @Override protected void moveOrCopyAllImageGroups(Guid containerID, Iterable<DiskImage> disks) { for (DiskImage disk : disks) { VdcReturnValueBase vdcRetValue = runChildActionWithTasksContextIfNeeded( - getActionTypeForOperation(), + VdcActionType.CopyImageGroup, buildMoveOrCopyImageGroupParametersForDisk(containerID, disk)); if (!vdcRetValue.getSucceeded()) { throw new VdcBLLException(vdcRetValue.getFault().getError(), "Failed during ExportVmCommand"); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java index 9b269e6..3f15df8 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java @@ -850,4 +850,24 @@ dummy.getSnapshots().addAll(ImagesHandler.getAllImageSnapshots(dummy.getImageId())); return dummy; } + + /** + * Since we are supporting copy/move operations between different storage families (file/block) we have to + * predetermine the volume format according to the destination storage type, for block domains we cannot use sparse + * combined with raw so we will change the raw to cow in that case, file domains will have the original format + * retained + */ + public static VolumeFormat getVolumeFormatForDomain(VolumeFormat volumeFormat, VolumeType volumeType, Guid dstDomain) { + if (volumeFormat == VolumeFormat.COW) { + return VolumeFormat.COW; + } + + StorageDomainStatic destDomain = DbFacade.getInstance().getStorageDomainStaticDao().get(dstDomain); + if (destDomain.getStorageType().isBlockDomain() && volumeType == VolumeType.Sparse) { + return VolumeFormat.COW; + } + else { + return VolumeFormat.RAW; + } + } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java index c4da09c..9fbdb38 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java @@ -13,6 +13,7 @@ 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.interfaces.CommandCallBack; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.bll.validator.DiskValidator; import org.ovirt.engine.core.bll.validator.StorageDomainValidator; @@ -39,7 +40,7 @@ import org.ovirt.engine.core.dao.VmDeviceDAO; @DisableInPrepareMode -@NonTransactiveCommandAttribute +@NonTransactiveCommandAttribute(forceCompensation = true) public class MoveOrCopyDiskCommand<T extends MoveOrCopyImageGroupParameters> extends CopyImageGroupCommand<T> implements QuotaStorageDependent { @@ -207,6 +208,15 @@ return validate(createDiskValidator().isDiskPluggedToVmsThatAreNotDown(false, getVmsWithVmDeviceInfoForDiskId())); } + @Override + public CommandCallBack getCallBack() { + if (isDataCenterWithoutSpm()){ + return new ConcurrentChildCommandsExecutionCallback(); + } + + return null; + } + /** * Cache method to retrieve all the VMs with the device info related to the image */ @@ -244,12 +254,19 @@ return VdcActionType.CopyImageGroup; } + protected VdcReturnValueBase performOperation() { + if (isDataCenterWithSpm()) { + return runInternalActionWithTasksContext( + getImagesActionType(), + createChildParameters()); + } else { + return executeCoCoCommandSyncWithTasksContext(getImagesActionType(), createChildParameters()); + } + } + @Override protected void executeCommand() { - overrideParameters(); - VdcReturnValueBase vdcRetValue = runInternalActionWithTasksContext( - getImagesActionType(), - getParameters()); + VdcReturnValueBase vdcRetValue = performOperation(); if (!vdcRetValue.getSucceeded()) { setSucceeded(false); getReturnValue().setFault(vdcRetValue.getFault()); @@ -260,10 +277,12 @@ } private void endCommandActions() { - getBackend().endAction(getImagesActionType(), - getParameters(), - getContext().clone().withoutCompensationContext().withoutLock()); - setSucceeded(true); + if (!getParameters().getImagesParameters().isEmpty()) { + getBackend().endAction(getImagesActionType(), + getParameters().getImagesParameters().get(0), + getContext().clone().withoutCompensationContext().withoutLock()); + setSucceeded(true); + } } @Override @@ -328,6 +347,7 @@ * correct values for these scenario in order to be used at parent class */ private void overrideParameters() { + if (getParameters().getOperation() == ImageOperation.Copy) { getParameters().setUseCopyCollapse(true); getParameters().setAddImageDomainMapping(true); @@ -345,6 +365,28 @@ getParameters().setDiskProfileId(getImage().getDiskProfileId()); } + private MoveOrCopyImageGroupParameters createChildParameters() { + MoveOrCopyImageGroupParameters params = new MoveOrCopyImageGroupParameters(); + if (getParameters().getOperation() == ImageOperation.Copy) { + params.setUseCopyCollapse(true); + params.setAddImageDomainMapping(true); + } else { + params.setUseCopyCollapse(false); + } + params.setStorageDomainId(getParameters().getStorageDomainId()); + params.setDestinationImageId(getImageId()); + params.setImageGroupID(getImageGroupId()); + params.setImageId(getParameters().getImageId()); + params.setDestImageGroupId(getImageGroupId()); + params.setVolumeFormat(getDiskImage().getVolumeFormat()); + params.setVolumeType(getDiskImage().getVolumeType()); + params.setCopyVolumeType(CopyVolumeType.SharedVol); + params.setParentCommand(getActionType()); + params.setParentParameters(getParameters()); + params.setDiskProfileId(getImage().getDiskProfileId()); + return params; + } + /** * The following method will determine if a provided vm/template exists * @return diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmTemplateParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmTemplateParameters.java index 544ea2f..cd0c3ad 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmTemplateParameters.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmTemplateParameters.java @@ -24,6 +24,7 @@ templateType = VmEntityType.TEMPLATE; } + private Guid vmId; private VmStatic _masterVm; private Guid privateVmTemplateID; private Guid destinationStorageDomainId; @@ -171,4 +172,11 @@ this.baseTemplateId = baseTemplateId; } + public Guid getVmId() { + return vmId; + } + + public void setVmId(Guid vmId) { + this.vmId = vmId; + } } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/CloneImageGroupVolumesCommandParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/CloneImageGroupVolumesCommandParameters.java index 1b96e8c..26b6b1c 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/CloneImageGroupVolumesCommandParameters.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/CloneImageGroupVolumesCommandParameters.java @@ -4,16 +4,30 @@ import org.ovirt.engine.core.compat.Guid; -public class CloneImageGroupVolumesCommandParameters extends ImagesContainterParametersBase { +public class CloneImageGroupVolumesCommandParameters extends StoragePoolParametersBase { private List<Guid> imageIds; private Guid destDomain; private Guid srcDomain; - - public CloneImageGroupVolumesCommandParameters(List<Guid> images) { - this.imageIds = images; - } + private Guid srcImageGroupId; + private Guid dstImageGroupId; public CloneImageGroupVolumesCommandParameters() { + } + + public CloneImageGroupVolumesCommandParameters(Guid storagePoolId, + Guid srcDomain, + Guid srcImageGroupId, + Guid destDomain, + Guid dstImageGroupId, + VdcActionType parentType, + VdcActionParametersBase parentParams) { + super(storagePoolId, null); + this.destDomain = destDomain; + this.srcDomain = srcDomain; + this.srcImageGroupId = srcImageGroupId; + this.dstImageGroupId = dstImageGroupId; + setParentCommand(parentType); + setParentParameters(parentParams); } public List<Guid> getImageIds() { @@ -39,4 +53,20 @@ public void setSrcDomain(Guid srcDomain) { this.srcDomain = srcDomain; } + + public Guid getSrcImageGroupId() { + return srcImageGroupId; + } + + public void setSrcImageGroupId(Guid srcImageGroupId) { + this.srcImageGroupId = srcImageGroupId; + } + + public Guid getDstImageGroupId() { + return dstImageGroupId; + } + + public void setDstImageGroupId(Guid dstImageGroupId) { + this.dstImageGroupId = dstImageGroupId; + } } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/CloneImageGroupVolumesWithCollapseCommandParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/CloneImageGroupVolumesWithCollapseCommandParameters.java new file mode 100644 index 0000000..a688b83 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/CloneImageGroupVolumesWithCollapseCommandParameters.java @@ -0,0 +1,84 @@ +package org.ovirt.engine.core.common.action; + +import org.ovirt.engine.core.compat.Guid; + +public class CloneImageGroupVolumesWithCollapseCommandParameters extends StoragePoolParametersBase { + private Guid destDomain; + private Guid srcDomain; + private Guid srcImageGroupId; + private Guid srcImageId; + private Guid dstImageGroupId; + private Guid dstImageId; + + public CloneImageGroupVolumesWithCollapseCommandParameters(Guid storagePoolId, + Guid vdsId, + Guid srcDomain, + Guid srcImageGroupId, + Guid srcImageId, + Guid destDomain, + Guid dstImageGroupId, + Guid dstImageId, + VdcActionType parentCommand, + VdcActionParametersBase parentParmaters) { + super(storagePoolId, vdsId); + this.destDomain = destDomain; + this.srcDomain = srcDomain; + this.srcImageGroupId = srcImageGroupId; + this.srcImageId = srcImageId; + this.dstImageGroupId = dstImageGroupId; + this.dstImageId = dstImageId; + setParentParameters(parentParmaters); + setParentCommand(parentCommand); + } + + public Guid getDestDomain() { + return destDomain; + } + + public void setDestDomain(Guid destDomain) { + this.destDomain = destDomain; + } + + public Guid getSrcDomain() { + return srcDomain; + } + + public void setSrcDomain(Guid srcDomain) { + this.srcDomain = srcDomain; + } + + public Guid getSrcImageGroupId() { + return srcImageGroupId; + } + + public void setSrcImageGroupId(Guid srcImageGroupId) { + this.srcImageGroupId = srcImageGroupId; + } + + public Guid getDstImageGroupId() { + return dstImageGroupId; + } + + public void setDstImageGroupId(Guid dstImageGroupId) { + this.dstImageGroupId = dstImageGroupId; + } + + public Guid getDstImageId() { + return dstImageId; + } + + public void setDstImageId(Guid dstImageId) { + this.dstImageId = dstImageId; + } + + public Guid getSrcImageId() { + return srcImageId; + } + + public void setSrcImageId(Guid srcImageId) { + this.srcImageId = srcImageId; + } + + public CloneImageGroupVolumesWithCollapseCommandParameters() { + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ImagesActionsParametersBase.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ImagesActionsParametersBase.java index 8c7717b..29a07cc4 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ImagesActionsParametersBase.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ImagesActionsParametersBase.java @@ -40,7 +40,7 @@ /** * Needed in order to be able to deserialize this field. */ - protected void setImageId(Guid imageId) { + public void setImageId(Guid imageId) { this.imageId = imageId; } 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 1fb7abb..da28982 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 @@ -267,7 +267,7 @@ SyncLunsInfoForBlockStorageDomain(1018, false, QuotaDependency.NONE), CloneImageGroupVolume(1019, QuotaDependency.STORAGE), CloneImageGroupVolumes(1020, QuotaDependency.STORAGE), - CloneImageGroups(1021, QuotaDependency.STORAGE), + CloneImageGroupVolumesWithCollapse(1021, QuotaDependency.STORAGE), // Event Notification AddEventSubscription(1100, false, QuotaDependency.NONE), diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/LeaseState.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/LeaseState.java index 4a51f01..b672d3f 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/LeaseState.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/LeaseState.java @@ -1,5 +1,5 @@ package org.ovirt.engine.core.common.businessentities; public enum LeaseState { - FREE, HELD, UNCHECKED; + FREE, HELD, UNCHECKED, LeaseState; } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/CreateVolumeVDSCommandParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/CreateVolumeVDSCommandParameters.java index 30277ac..0f11d2b 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/CreateVolumeVDSCommandParameters.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/CreateVolumeVDSCommandParameters.java @@ -1,24 +1,21 @@ package org.ovirt.engine.core.common.vdscommands; import org.ovirt.engine.core.common.businessentities.VolumeFormat; -import org.ovirt.engine.core.common.businessentities.VolumeType; import org.ovirt.engine.core.compat.Guid; public class CreateVolumeVDSCommandParameters extends StorageDomainVdsCommandParameters { private long imageSizeInBytes; - private VolumeType imageType; private Guid newImageID; private Guid srcVolume; private Guid srcImageGroupId; private Guid imageGroupId; public CreateVolumeVDSCommandParameters(Guid storagePoolId, Guid storageDomainId, Guid imageGroupId, - long imageSizeInBytes, VolumeType imageType, VolumeFormat volFormat, Guid newImageId, + long imageSizeInBytes, VolumeFormat volFormat, Guid newImageId, String newImageDescription, Guid srcImageGroupId, Guid srcVolume) { super(storagePoolId, storageDomainId, null); this.imageSizeInBytes = imageSizeInBytes; - this.imageType = imageType; this.setVolumeFormat(volFormat); this.setImageGroupId(imageGroupId); setStoragePoolGuid(storagePoolId); @@ -30,10 +27,6 @@ public long getImageSizeInBytes() { return imageSizeInBytes; - } - - public VolumeType getImageType() { - return imageType; } private VolumeFormat privateVolumeFormat; @@ -66,10 +59,6 @@ public void setImageSizeInBytes(long imageSizeInBytes) { this.imageSizeInBytes = imageSizeInBytes; - } - - public void setImageType(VolumeType imageType) { - this.imageType = imageType; } public Guid getSrcVolume() { diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/GetImageInfoVDSCommandParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/GetImageInfoVDSCommandParameters.java index 61014ab..78ea3a5 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/GetImageInfoVDSCommandParameters.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/GetImageInfoVDSCommandParameters.java @@ -9,8 +9,8 @@ public GetImageInfoVDSCommandParameters() { } - public GetImageInfoVDSCommandParameters(Guid storagePoolId, Guid storageDomainId, Guid vdsId, Guid imageGroupId, Guid imageId) { - super(storagePoolId, storageDomainId, vdsId); + public GetImageInfoVDSCommandParameters(Guid storagePoolId, Guid storageDomainId, Guid imageGroupId, Guid imageId) { + super(storagePoolId, storageDomainId, null); this.imageGroupId = imageGroupId; this.imageId = imageId; } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/StorageDomainVdsCommandParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/StorageDomainVdsCommandParameters.java index 8610263..c5c0591 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/StorageDomainVdsCommandParameters.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/StorageDomainVdsCommandParameters.java @@ -26,6 +26,7 @@ super(vdsId); this.storagePoolId = storagePoolId; this.storageDomainId = storageDomainId; + setStoragePoolGuid(storagePoolId); } public StorageDomainVdsCommandParameters() { 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 d1121ee..1d7f53d 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 @@ -59,7 +59,7 @@ CopyVolumeData("org.ovirt.engine.core.vdsbroker.vdsbroker"), AllocateVolume("org.ovirt.engine.core.vdsbroker.vdsbroker"), DestroyImage("org.ovirt.engine.core.vdsbroker.irsbroker"), - GetImageInfo("org.ovirt.engine.core.vdsbroker.irsbroker"), + GetImageInfo("org.ovirt.engine.core.vdsbroker.vdsbroker"), SetVolumeDescription("org.ovirt.engine.core.vdsbroker.irsbroker"), DoesImageExist("org.ovirt.engine.core.vdsbroker.irsbroker"), CopyImage("org.ovirt.engine.core.vdsbroker.irsbroker"), diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/DoesImageExistVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/DoesImageExistVDSCommand.java index 3d3f22c..d5314b7 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/DoesImageExistVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/DoesImageExistVDSCommand.java @@ -14,7 +14,7 @@ } @Override - protected void executeIrsBrokerCommand() { + protected void executeVdsBrokerCommand() { imageInfoReturn = getBroker().getVolumeInfo(getParameters().getStorageDomainId().toString(), getParameters().getStoragePoolId().toString(), getParameters().getImageGroupId().toString(), getParameters().getImageId().toString()); diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcIIrsServer.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcIIrsServer.java index 56cef81..57b7d5d 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcIIrsServer.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcIIrsServer.java @@ -9,14 +9,13 @@ import org.ovirt.engine.core.vdsbroker.irsbroker.IIrsServer; import org.ovirt.engine.core.vdsbroker.irsbroker.ImagesListReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.irsbroker.IrsStatsAndStatusXmlRpc; -import org.ovirt.engine.core.vdsbroker.irsbroker.OneImageInfoReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.irsbroker.OneUuidReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.irsbroker.StoragePoolInfoReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.irsbroker.StorageStatusReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.irsbroker.UUIDListReturnForXmlRpc; +import org.ovirt.engine.core.vdsbroker.irsbroker.VolumeListReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.vdsbroker.StatusOnlyReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.vdsbroker.StorageDomainListReturnForXmlRpc; -import org.ovirt.engine.core.vdsbroker.irsbroker.VolumeListReturnForXmlRpc; import org.ovirt.vdsm.jsonrpc.client.JsonRpcClient; import org.ovirt.vdsm.jsonrpc.client.JsonRpcRequest; import org.ovirt.vdsm.jsonrpc.client.RequestBuilder; diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CopyVolumeDataVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CopyVolumeDataVDSCommand.java index d2f0205..32d23e5 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CopyVolumeDataVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CopyVolumeDataVDSCommand.java @@ -5,7 +5,6 @@ import org.ovirt.engine.core.common.businessentities.LocationInfo; import org.ovirt.engine.core.common.utils.LocationInfoHelper; import org.ovirt.engine.core.common.vdscommands.CopyVolumeDataVDSCommandParameters; -import org.ovirt.engine.core.vdsbroker.irsbroker.OneUuidReturnForXmlRpc; public class CopyVolumeDataVDSCommand<P extends CopyVolumeDataVDSCommandParameters> extends VdsBrokerCommand<P> { public CopyVolumeDataVDSCommand(P parameters) { diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/GetImageInfoVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/GetImageInfoVDSCommand.java index 5ba4498..ea5a418 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/GetImageInfoVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/GetImageInfoVDSCommand.java @@ -13,17 +13,12 @@ import org.ovirt.engine.core.common.errors.VdcBllErrors; import org.ovirt.engine.core.common.utils.EnumUtils; import org.ovirt.engine.core.common.vdscommands.GetImageInfoVDSCommandParameters; -import org.ovirt.engine.core.common.vdscommands.GetVolumeInfoVDSCommandParameters; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.DbFacade; -import org.ovirt.engine.core.vdsbroker.irsbroker.IRSErrorException; -import org.ovirt.engine.core.vdsbroker.irsbroker.IrsBrokerCommand; import org.ovirt.engine.core.vdsbroker.irsbroker.IrsProperties; import org.ovirt.engine.core.vdsbroker.irsbroker.OneImageInfoReturnForXmlRpc; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -public class GetImageInfoVDSCommand<P extends GetVolumeInfoVDSCommandParameters> extends VdsBrokerCommand<P> { +public class GetImageInfoVDSCommand<P extends GetImageInfoVDSCommandParameters> extends VdsBrokerCommand<P> { protected OneImageInfoReturnForXmlRpc imageInfoReturn; -- To view, visit https://gerrit.ovirt.org/39210 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I85ddaf7abb736d6298be7f5e358d52cf2e5a48cb Gerrit-PatchSet: 2 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Liron Aravot <lara...@redhat.com> Gerrit-Reviewer: automat...@ovirt.org Gerrit-Reviewer: oVirt Jenkins CI Server _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches