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());
}
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;
}
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;
}
Aggregations