package org.ovirt.engine.core.bll.storage.disk.cinder; import java.util.List; import javax.inject.Inject; import org.ovirt.engine.core.bll.CommandBase; import org.ovirt.engine.core.bll.ConcurrentChildCommandsExecutionCallback; import org.ovirt.engine.core.common.action.CreateCinderSnapshotParameters; import org.ovirt.engine.core.common.businessentities.Snapshot; import org.ovirt.engine.core.common.businessentities.storage.DiskImage; import org.ovirt.engine.core.common.businessentities.storage.ImageStatus; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.compat.backendcompat.CommandExecutionStatus; import org.ovirt.engine.core.dao.DiskImageDao; public class CreateCinderSnapshotCommandCallback extends ConcurrentChildCommandsExecutionCallback { @Inject private DiskImageDao diskImageDao; @Override protected void childCommandsExecutionEnded(CommandBase<?> command, boolean anyFailed, List<Guid> childCmdIds, CommandExecutionStatus status, int completedChildren) { CreateCinderSnapshotCommand<CreateCinderSnapshotParameters> createCinderSnapshotCommand = (CreateCinderSnapshotCommand<CreateCinderSnapshotParameters>) command; CreateCinderSnapshotParameters parameters = createCinderSnapshotCommand.getParameters(); Guid diskId = parameters.getDestinationImageId(); ImageStatus imageStatus; if (parameters.getSnapshotType().equals(Snapshot.SnapshotType.STATELESS)) { imageStatus = createCinderSnapshotCommand.getCinderBroker().getDiskStatus(diskId); } else { imageStatus = createCinderSnapshotCommand.getCinderBroker().getSnapshotStatus(diskId); } DiskImage disk = diskImageDao.getSnapshotById(diskId); if (imageStatus != null && imageStatus != disk.getImageStatus()) { switch (imageStatus) { case OK: setCommandEndStatus(command, false, status, childCmdIds); break; case ILLEGAL: setCommandEndStatus(command, true, status, childCmdIds); break; } } } }