package org.ovirt.engine.core.bll; import java.util.List; import org.ovirt.engine.core.common.action.MoveMultipleImageGroupsParameters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.asynctasks.AsyncTaskCreationInfo; import org.ovirt.engine.core.common.asynctasks.AsyncTaskParameters; import org.ovirt.engine.core.common.asynctasks.AsyncTaskType; import org.ovirt.engine.core.common.businessentities.AsyncTaskResultEnum; import org.ovirt.engine.core.common.businessentities.AsyncTaskStatusEnum; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.ImageStatus; import org.ovirt.engine.core.common.businessentities.async_tasks; import org.ovirt.engine.core.common.vdscommands.MoveMultipleImageGroupsVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.VDSCommandType; import org.ovirt.engine.core.common.vdscommands.VDSReturnValue; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.DbFacade; public class MoveMultipleImageGroupsCommand<T extends MoveMultipleImageGroupsParameters> extends BaseImagesCommand<T> { public MoveMultipleImageGroupsCommand(T parameters) { super(parameters); } @Override protected Guid getImageContainerId() { return getParameters() != null ? getParameters().getContainerId() : super.getImageContainerId(); } @Override protected void executeCommand() { // lock images for (DiskImage disk : getParameters().getImagesList()) { SetImageStatus(disk, ImageStatus.LOCKED); } VDSReturnValue vdsReturnValue = Backend .getInstance() .getResourceManager() .RunVdsCommand( VDSCommandType.MoveMultipleImageGroups, new MoveMultipleImageGroupsVDSCommandParameters(getParameters().getImagesList().get(0) .getstorage_pool_id().getValue(), getParameters().getImagesList().get(0) .getstorage_id().getValue(), getParameters().getImagesList(), getParameters() .getStorageDomainId(), getParameters().getContainerId())); if (vdsReturnValue.getSucceeded()) { AsyncTaskCreationInfo taskCreationInfo = vdsReturnValue.getCreationInfo(); getReturnValue().getInternalTaskIdList().add( CreateTask(taskCreationInfo, getParameters().getParentCommand())); setSucceeded(true); } } @Override protected Guid ConcreteCreateTask(AsyncTaskCreationInfo asyncTaskCreationInfo, VdcActionType parentCommand) { AsyncTaskParameters p = new AsyncTaskParameters(asyncTaskCreationInfo, new async_tasks(parentCommand, AsyncTaskResultEnum.success, AsyncTaskStatusEnum.running, asyncTaskCreationInfo.getTaskID(), getParameters())); p.setEntityId(getParameters().getEntityId()); Guid ret = AsyncTaskManager.getInstance().CreateTask(AsyncTaskType.moveImage, p, false); return ret; } @Override protected void EndWithFailure() { // unlock images for (DiskImage disk : getParameters().getImagesList()) { SetImageStatus(disk, ImageStatus.OK); } setSucceeded(true); } @Override protected void EndSuccessfully() { List<DiskImage> snapshots = null; for (DiskImage disk : getParameters().getImagesList()) { snapshots = DbFacade .getInstance() .getDiskImageDAO() .getAllSnapshotsForImageGroup( disk.getimage_group_id().getValue()); // unlock and change to new domain for (DiskImage snapshot : snapshots) { snapshot.setstorage_id(getParameters().getStorageDomainId()); SetImageStatus(snapshot, ImageStatus.OK); } } setSucceeded(true); } }