Search in sources :

Example 1 with VolumeClassification

use of org.ovirt.engine.core.common.businessentities.storage.VolumeClassification in project ovirt-engine by oVirt.

the class RemoveSnapshotSingleDiskCommandBase method handleBackwardMerge.

private void handleBackwardMerge(DiskImage topImage, DiskImage baseImage, DiskImage imageFromVdsm) {
    // For backwards merge, the prior base image now has the data associated with the newer
    // snapshot we want to keep.  Re-associate this older image with the newer snapshot.
    // The base snapshot is deleted if everything went well.  In case it's not deleted, we
    // hijack it to preserve a link to the broken image.  This makes the image discoverable
    // so that we can retry the deletion later, yet doesn't corrupt the VM image chain.
    List<DiskImage> children = diskImageDao.getAllSnapshotsForParent(topImage.getImageId());
    if (!children.isEmpty()) {
        DiskImage childImage = children.get(0);
        childImage.setParentId(baseImage.getImageId());
        imageDao.update(childImage.getImage());
    }
    Image oldTopImage = topImage.getImage();
    topImage.setImage(baseImage.getImage());
    baseImage.setImage(oldTopImage);
    Guid oldTopSnapshotId = topImage.getImage().getSnapshotId();
    topImage.getImage().setSnapshotId(baseImage.getImage().getSnapshotId());
    baseImage.getImage().setSnapshotId(oldTopSnapshotId);
    boolean oldTopIsActive = topImage.getImage().isActive();
    topImage.getImage().setActive(baseImage.getImage().isActive());
    VolumeClassification baseImageVolumeClassification = VolumeClassification.getVolumeClassificationByActiveFlag(baseImage.getImage().isActive());
    topImage.getImage().setVolumeClassification(baseImageVolumeClassification);
    baseImage.getImage().setActive(oldTopIsActive);
    VolumeClassification oldTopVolumeClassification = VolumeClassification.getVolumeClassificationByActiveFlag(oldTopIsActive);
    topImage.getImage().setVolumeClassification(oldTopVolumeClassification);
    topImage.setSize(baseImage.getSize());
    topImage.setActualSizeInBytes(imageFromVdsm.getActualSizeInBytes());
    topImage.setImageStatus(ImageStatus.OK);
    baseDiskDao.update(topImage);
    imageDao.update(topImage.getImage());
    updateDiskImageDynamic(imageFromVdsm, topImage);
    baseDiskDao.update(baseImage);
    imageDao.update(baseImage.getImage());
    updateVmConfigurationForImageChange(topImage.getImage().getSnapshotId(), baseImage.getImageId(), topImage);
    updateVmConfigurationForImageRemoval(baseImage.getImage().getSnapshotId(), topImage.getImageId());
}
Also used : VolumeClassification(org.ovirt.engine.core.common.businessentities.storage.VolumeClassification) Guid(org.ovirt.engine.core.compat.Guid) DiskImage(org.ovirt.engine.core.common.businessentities.storage.DiskImage) Image(org.ovirt.engine.core.common.businessentities.storage.Image) DiskImage(org.ovirt.engine.core.common.businessentities.storage.DiskImage)

Example 2 with VolumeClassification

use of org.ovirt.engine.core.common.businessentities.storage.VolumeClassification in project ovirt-engine by oVirt.

the class CinderBroker method isVolumeExistsByClassificationType.

public boolean isVolumeExistsByClassificationType(CinderDisk cinderDisk) {
    VolumeClassification cinderVolumeType = cinderDisk.getVolumeClassification();
    if (cinderVolumeType == VolumeClassification.Volume) {
        return isDiskExist(cinderDisk.getImageId());
    } else if (cinderVolumeType == VolumeClassification.Snapshot) {
        return isSnapshotExist(cinderDisk.getImageId());
    }
    log.error("No valid cinder volume type enum has been initialized in the Cinder disk business entity.");
    return true;
}
Also used : VolumeClassification(org.ovirt.engine.core.common.businessentities.storage.VolumeClassification)

Example 3 with VolumeClassification

use of org.ovirt.engine.core.common.businessentities.storage.VolumeClassification in project ovirt-engine by oVirt.

the class CinderBroker method getImageStatusByClassificationType.

public ImageStatus getImageStatusByClassificationType(CinderDisk cinderDisk) {
    VolumeClassification cinderVolumeType = cinderDisk.getVolumeClassification();
    if (cinderVolumeType == VolumeClassification.Volume) {
        return getDiskStatus(cinderDisk.getImageId());
    } else if (cinderVolumeType == VolumeClassification.Snapshot) {
        return getSnapshotStatus(cinderDisk.getImageId());
    }
    log.error("Error, could not determine Cinder entity {} with id {} from Cinder provider.", cinderDisk.getDiskAlias(), cinderDisk.getImageId());
    return ImageStatus.ILLEGAL;
}
Also used : VolumeClassification(org.ovirt.engine.core.common.businessentities.storage.VolumeClassification)

Aggregations

VolumeClassification (org.ovirt.engine.core.common.businessentities.storage.VolumeClassification)3 DiskImage (org.ovirt.engine.core.common.businessentities.storage.DiskImage)1 Image (org.ovirt.engine.core.common.businessentities.storage.Image)1 Guid (org.ovirt.engine.core.compat.Guid)1