@Override protected RowMapper<Image> createEntityRowMapper() { return (rs, rowNum) -> { Image entity = new Image(); entity.setId(getGuidDefaultEmpty(rs, "image_guid")); entity.setCreationDate(DbFacadeUtils.fromDate(rs.getTimestamp("creation_date"))); entity.setTemplateImageId(getGuidDefaultEmpty(rs, "it_guid")); entity.setSize(rs.getLong("size")); entity.setParentId(getGuidDefaultEmpty(rs, "ParentId")); entity.setStatus(ImageStatus.forValue(rs.getInt("imageStatus"))); entity.setLastModified(DbFacadeUtils.fromDate(rs.getTimestamp("lastModified"))); entity.setSnapshotId(getGuidDefaultEmpty(rs, "vm_snapshot_id")); entity.setVolumeType(VolumeType.forValue(rs.getInt("volume_type"))); entity.setVolumeFormat(VolumeFormat.forValue(rs.getInt("volume_format"))); if (entity.getVolumeFormat().equals(VolumeFormat.COW)) { entity.setQcowCompat(QcowCompat.forValue(rs.getInt("qcow_compat"))); } entity.setDiskId(getGuidDefaultEmpty(rs, "image_group_id")); entity.setActive((Boolean) rs.getObject("active")); entity.setVolumeClassification(VolumeClassification.forValue(rs.getInt("volume_classification"))); return entity; }; }
@Override protected MapSqlParameterSource createFullParametersMapper(Image entity) { return createIdParameterMapper(entity.getId()) .addValue("creation_date", entity.getCreationDate()) .addValue("it_guid", entity.getTemplateImageId()) .addValue("size", entity.getSize()) .addValue("ParentId", entity.getParentId()) .addValue("imageStatus", entity.getStatus()) .addValue("lastModified", entity.getLastModified()) .addValue("vm_snapshot_id", entity.getSnapshotId()) .addValue("volume_type", entity.getVolumeType()) .addValue("volume_format", entity.getVolumeFormat()) .addValue("qcow_compat", entity.getQcowCompat()) .addValue("image_group_id", entity.getDiskId()) .addValue("active", entity.isActive()) .addValue("volume_classification", entity.getVolumeClassification().getValue()); }
public DiskImageBase() { image = new Image(); getImage().setSize(0); getImage().setVolumeType(VolumeType.Sparse); }
@BeforeEach @Override public void setUp() throws Exception { super.setUp(); newImage = new Image(); newImage.setActive(true); newImage.setVolumeClassification(VolumeClassification.Volume); newImage.setTemplateImageId(EXISTING_IMAGE_DISK_TEMPLATE_ID); newImage.setSnapshotId(EXISTING_SNAPSHOT_ID); newImage.setId(Guid.newGuid()); newImage.setVolumeFormat(VolumeFormat.COW); newImage.setQcowCompat(QcowCompat.QCOW2_V3); newImage.setVolumeType(VolumeType.Sparse); newImage.setDiskId(Guid.newGuid()); }
public VolumeType getVolumeType() { return getImage().getVolumeType(); }
public Guid getVmSnapshotId() { return getImage().getSnapshotId(); }
public ImageStatus getImageStatus() { return getImage().getStatus(); }
public void setActive(boolean active) { getImage().setActive(active); }
public void setVmSnapshotId(Guid snapshotId) { getImage().setSnapshotId(snapshotId); }
public void setImageId(Guid id) { getImage().setId(id); }
public void setImageTemplateId(Guid guid) { getImage().setTemplateImageId(guid); }
public void setQcowCompat(QcowCompat qcowCompat) { getImage().setQcowCompat(qcowCompat); }
@Override public void setId(Guid id) { super.setId(id); getImage().setDiskId(id); } }
private boolean isImageDiskPreallocated(Disk disk) { return disk.getDiskStorageType() == DiskStorageType.IMAGE && ((DiskImage) disk).getImage().getVolumeType() == VolumeType.Preallocated; }
@Test public void testUpdateImageVmSnapshotId() { Guid guid = Guid.newGuid(); dao.updateImageVmSnapshotId(EXISTING_IMAGE_ID, guid); Image imageFromDb = dao.get(EXISTING_IMAGE_ID); assertNotNull(imageFromDb); assertEquals(guid, imageFromDb.getSnapshotId(), "Image snapshot id wasn't updated properly"); }
@Test public void testUpdateStatus() { dao.updateStatus(EXISTING_IMAGE_ID, ImageStatus.LOCKED); Image imageFromDb = dao.get(EXISTING_IMAGE_ID); assertNotNull(imageFromDb); assertEquals(ImageStatus.LOCKED, imageFromDb.getStatus()); }
public VolumeType getVolumeType(VolumeFormat volumeFormat, StorageType storageType, VM vm, Image diskImage) { switch (volumeFormat) { case COW: return VolumeType.Sparse; case RAW: default: boolean copyPreallocatedFileBasedDiskSupported = vm != null ? isCopyPreallocatedFileBasedDiskSupported(vm.getCompatibilityVersion()) : false; // if diskImage provided it means that we want to use the source image volume type, // otherwise we set the volume type as sparse by default for file-based storage domain VolumeType fileBasedVolumeType; if (copyPreallocatedFileBasedDiskSupported) { fileBasedVolumeType = diskImage != null ? diskImage.getVolumeType() : VolumeType.Sparse; } else { fileBasedVolumeType = VolumeType.Sparse; } return storageType.isFileDomain() ? fileBasedVolumeType : VolumeType.Preallocated; } }