use of org.ovirt.engine.core.common.errors.EngineException in project ovirt-engine by oVirt.
the class RemoveImageCommand method executeCommand.
@Override
protected void executeCommand() {
if (getDiskImage() != null) {
try {
Guid taskId = persistAsyncTaskPlaceHolder(getParameters().getParentCommand());
VDSReturnValue vdsReturnValue = performDeleteImageVdsmOperation();
getTaskIdList().add(createTask(taskId, vdsReturnValue.getCreationInfo(), getParameters().getParentCommand(), VdcObjectType.Storage, getStorageDomainId()));
} catch (EngineException e) {
if (e.getErrorCode() == EngineError.ImageDoesNotExistInDomainError) {
log.info("Disk '{}' doesn't exist on storage domain '{}', rolling forward", getDiskImage().getId(), getStorageDomainId());
} else // In this case, Engine has to check whether image still exists on the storage or not.
if (e.getErrorCode() == EngineError.ImageDeleteError && isImageRemovedFromStorage()) {
log.info("Disk '{}' was deleted from storage domain '{}'", getDiskImage().getId(), getStorageDomainId());
} else {
throw e;
}
}
if (getParameters().getParentCommand() != ActionType.RemoveVmFromImportExport && getParameters().getParentCommand() != ActionType.RemoveVmTemplateFromImportExport) {
performImageDbOperations();
}
} else {
log.warn("DiskImage is null, nothing to remove");
}
setSucceeded(true);
}
use of org.ovirt.engine.core.common.errors.EngineException in project ovirt-engine by oVirt.
the class TransferDiskImageCommand method tearDownImage.
@Override
protected void tearDownImage(Guid vdsId) {
try {
VDSReturnValue vdsRetVal = runVdsCommand(VDSCommandType.TeardownImage, getImageActionsParameters(vdsId));
if (!vdsRetVal.getSucceeded()) {
EngineException engineException = new EngineException();
engineException.setVdsError(vdsRetVal.getVdsError());
throw engineException;
}
} catch (EngineException e) {
DiskImage image = getDiskImage();
log.warn("Failed to tear down image '{}' for image transfer session: {}", image, e.getVdsError());
// Invoke log method directly rather than relying on infra, because teardown
// failure may occur during command execution, e.g. if the upload is paused.
addCustomValue("DiskAlias", image != null ? image.getDiskAlias() : "(unknown)");
auditLogDirector.log(this, AuditLogType.TRANSFER_IMAGE_TEARDOWN_FAILED);
}
}
use of org.ovirt.engine.core.common.errors.EngineException in project ovirt-engine by oVirt.
the class TransferImageCommand method pollTransferStatus.
private void pollTransferStatus(final StateContext context) {
if (context.entity.getVdsId() == null || context.entity.getImagedTicketId() == null || !FeatureSupported.getImageTicketSupported(vdsDao.get(context.entity.getVdsId()).getClusterCompatibilityVersion())) {
// Old engines update the transfer status in UploadImageHandler::updateBytesSent.
return;
}
ImageTicketInformation ticketInfo;
try {
ticketInfo = (ImageTicketInformation) runVdsCommand(VDSCommandType.GetImageTicket, new GetImageTicketVDSCommandParameters(context.entity.getVdsId(), context.entity.getImagedTicketId())).getReturnValue();
} catch (EngineException e) {
log.error("Could not get image ticket '{}' from vdsm", context.entity.getImagedTicketId(), e);
updateEntityPhaseToPausedBySystem(AuditLogType.TRANSFER_IMAGE_PAUSED_BY_SYSTEM_MISSING_TICKET);
return;
}
ImageTransfer upToDateImageTransfer = updateTransferStatusWithTicketInformation(context.entity, ticketInfo);
if (getParameters().getTransferType() == TransferType.Download) {
finalizeDownloadIfNecessary(context, upToDateImageTransfer);
}
}
use of org.ovirt.engine.core.common.errors.EngineException in project ovirt-engine by oVirt.
the class AttachStorageDomainToPoolCommand method executeCommand.
@Override
protected void executeCommand() {
if (isCinderStorageDomain()) {
handleCinderDomain();
return;
}
if (getStoragePool().getStatus() == StoragePoolStatus.Uninitialized) {
StoragePoolWithStoragesParameter parameters = new StoragePoolWithStoragesParameter(getStoragePool(), Collections.singletonList(getStorageDomain().getId()), getParameters().getSessionId());
parameters.setIsInternal(true);
parameters.setTransactionScopeOption(TransactionScopeOption.Suppress);
ActionReturnValue returnValue = runInternalAction(ActionType.AddStoragePoolWithStorages, parameters, getContext().clone().withoutCompensationContext());
setSucceeded(returnValue.getSucceeded());
if (!returnValue.getSucceeded()) {
getReturnValue().setFault(returnValue.getFault());
}
} else {
map = storagePoolIsoMapDao.get(new StoragePoolIsoMapId(getStorageDomain().getId(), getParameters().getStoragePoolId()));
if (map == null) {
executeInNewTransaction(() -> {
map = new StoragePoolIsoMap(getStorageDomain().getId(), getParameters().getStoragePoolId(), StorageDomainStatus.Locked);
storagePoolIsoMapDao.save(map);
getCompensationContext().snapshotNewEntity(map);
getCompensationContext().stateChanged();
return null;
});
List<Pair<Guid, Boolean>> hostsConnectionResults = connectHostsInUpToDomainStorageServer();
if (isAllHostConnectionFailed(hostsConnectionResults)) {
log.error("Cannot connect storage connection server, aborting attach storage domain operation.");
setSucceeded(false);
return;
}
// Forcibly detach only data storage domains.
if (getStorageDomain().getStorageDomainType() == StorageDomainType.Data) {
@SuppressWarnings("unchecked") Pair<StorageDomainStatic, Guid> domainFromIrs = (Pair<StorageDomainStatic, Guid>) runVdsCommand(VDSCommandType.HSMGetStorageDomainInfo, new HSMGetStorageDomainInfoVDSCommandParameters(getVdsId(), getParameters().getStorageDomainId())).getReturnValue();
// If the storage domain is already related to another Storage Pool, detach it by force.
Guid storagePoolId = domainFromIrs.getSecond();
if (storagePoolId != null) {
// Master domain version is not relevant since force remove at
// DetachStorageDomainVdsCommand does not use it.
// Storage pool id can be empty
DetachStorageDomainVDSCommandParameters detachParams = new DetachStorageDomainVDSCommandParameters(getStoragePoolIdFromVds(), getParameters().getStorageDomainId(), Guid.Empty, 0);
detachParams.setForce(true);
detachParams.setDetachFromOldStoragePool(true);
try {
runVdsCommand(VDSCommandType.DetachStorageDomain, detachParams);
} catch (EngineException e) {
log.warn("Detaching Storage Domain '{}' from it's previous storage pool '{}'" + " has failed. The meta data of the Storage Domain might still" + " indicate that it is attached to a different Storage Pool.", getParameters().getStorageDomainId(), Guid.Empty, 0);
throw e;
}
}
if (diskProfileDao.getAllForStorageDomain(getStorageDomain().getId()).isEmpty()) {
createDefaultDiskProfile();
}
}
runVdsCommand(VDSCommandType.AttachStorageDomain, new AttachStorageDomainVDSCommandParameters(getParameters().getStoragePoolId(), getParameters().getStorageDomainId()));
final List<OvfEntityData> unregisteredEntitiesFromOvfDisk = new ArrayList<>();
if (getStorageDomain().getStorageDomainType().isDataDomain()) {
List<OvfEntityData> returnValueFromStorageOvfDisk = getEntitiesFromStorageOvfDisk(getParameters().getStorageDomainId(), getStoragePoolIdFromVds());
unregisteredEntitiesFromOvfDisk.addAll(returnValueFromStorageOvfDisk);
}
List<DiskImage> ovfStoreDiskImages = getAllOVFDisks(getParameters().getStorageDomainId(), getStoragePoolIdFromVds());
executeInNewTransaction(() -> {
final StorageDomainType sdType = getStorageDomain().getStorageDomainType();
map.setStatus(StorageDomainStatus.Maintenance);
storagePoolIsoMapDao.updateStatus(map.getId(), map.getStatus());
if (sdType == StorageDomainType.Master) {
calcStoragePoolStatusByDomainsStatus();
}
if (getStorageDomain().getStorageDomainType().isDataDomain()) {
registerAllOvfDisks(ovfStoreDiskImages, getParameters().getStorageDomainId());
// Update unregistered entities
for (OvfEntityData ovf : unregisteredEntitiesFromOvfDisk) {
unregisteredOVFDataDao.removeEntity(ovf.getEntityId(), getParameters().getStorageDomainId());
unregisteredOVFDataDao.saveOVFData(ovf);
log.info("Adding OVF data of entity id '{}' and entity name '{}'", ovf.getEntityId(), ovf.getEntityName());
}
initUnregisteredDisksToDB(getParameters().getStorageDomainId());
}
// upgrade the domain format to the storage pool format
updateStorageDomainFormatIfNeeded(getStorageDomain());
return null;
});
if (getParameters().getActivate()) {
attemptToActivateDomain();
}
setSucceeded(true);
}
}
}
use of org.ovirt.engine.core.common.errors.EngineException in project ovirt-engine by oVirt.
the class BaseImagesCommand method endSuccessfully.
@Override
protected void endSuccessfully() {
if (getDestinationDiskImage() != null) {
Guid storagePoolId = getDestinationDiskImage().getStoragePoolId() != null ? getDestinationDiskImage().getStoragePoolId() : Guid.Empty;
setStoragePoolId(storagePoolId);
Guid newImageGroupId = getDestinationDiskImage().getId() != null ? getDestinationDiskImage().getId() : Guid.Empty;
Guid newImageId = getDestinationDiskImage().getImageId();
Guid newStorageDomainID = getDestinationDiskImage().getStorageIds().get(0);
// complete IRS data to DB disk image:
try {
DiskImage newImageIRS = getVolumeInfo(storagePoolId, newStorageDomainID, newImageGroupId, newImageId);
if (newImageIRS != null) {
completeImageData(newImageIRS);
// Set volume type/format before updating DB in the 'finally' branch
getDestinationDiskImage().getImage().setVolumeType(newImageIRS.getVolumeType());
getDestinationDiskImage().getImage().setVolumeFormat(newImageIRS.getVolumeFormat());
if (newImageIRS.getVolumeFormat().equals(VolumeFormat.COW)) {
setQcowCompatByQemuImageInfo(storagePoolId, newImageGroupId, newImageId, newStorageDomainID, getDestinationDiskImage());
}
}
} catch (EngineException e) {
// Logging only
log.error("Unable to update the image info for image '{}' (image group: '{}') on domain '{}'", newImageId, newImageGroupId, newStorageDomainID);
} finally {
if (!getParameters().isLeaveLocked()) {
getDestinationDiskImage().setImageStatus(ImageStatus.OK);
}
imageDao.update(getDestinationDiskImage().getImage());
}
}
if (!getParameters().isLeaveLocked()) {
unLockImage();
}
setSucceeded(true);
}
Aggregations