Allon Mureinik has uploaded a new change for review. Change subject: core: simpler syntax for snapshotEntityStatus ......................................................................
core: simpler syntax for snapshotEntityStatus Added the CompensationContext#snapshotEntityStatus(BusinessEntityWithStatus) method and used it wherever possible. Rationale and benefits: 1. Most of the time (i.e., all the calls except one), when taking a snapshot of an entity's status, you use the status property of the entity, which makes for an annoying call: getCompensationContext().snapshotEntutyStatus(e, e.getStatus()); The proposed syntax is more straight-forward and simpler to understand: getCompensationContext().snapshotEntutyStatus(e); 2. There is no type safety in the original syntax, whereas the new syntax offers some minimal sanity validation (e.g., when taking a snapshot of a VM's status, you know the status is represented by the VMStatus enum). Change-Id: Ib074a96e93f1c68637306b670b70983f26042514 Signed-off-by: Allon Mureinik <amure...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromSnapshotCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/BaseImagesCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDiskAlignmentCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/StopVmCommandBase.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmTemplateHandler.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/context/CompensationContext.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/context/DefaultCompensationContext.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/context/NoOpCompensationContext.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageDomainCommandBase.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStorageServerConnectionCommand.java 16 files changed, 40 insertions(+), 21 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/59/18859/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromSnapshotCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromSnapshotCommand.java index eba6f10..64a9992 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromSnapshotCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromSnapshotCommand.java @@ -359,7 +359,7 @@ public Void runInTransaction() { // Assumption - a snapshot can be locked only if in status OK, so if canDoAction passed // this is the status of the snapshot. In addition the newly added VM is in down status - getCompensationContext().snapshotEntityStatus(getSnapshot(), getSnapshot().getStatus()); + getCompensationContext().snapshotEntityStatus(getSnapshot()); getSnapshotDao().updateStatus(sourceSnapshotId, SnapshotStatus.LOCKED); lockVmWithCompensationIfNeeded(); getCompensationContext().stateChanged(); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/BaseImagesCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/BaseImagesCommand.java index 24ba417..ad3c1f8 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/BaseImagesCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/BaseImagesCommand.java @@ -297,7 +297,7 @@ TransactionSupport.executeInNewTransaction(new TransactionMethod<Void>() { @Override public Void runInTransaction() { - getCompensationContext().snapshotEntityStatus(diskImage.getImage(), diskImage.getImageStatus()); + getCompensationContext().snapshotEntityStatus(diskImage.getImage()); getCompensationContext().stateChanged(); setImageStatus(ImageStatus.LOCKED); return null; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDiskAlignmentCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDiskAlignmentCommand.java index ed2f709..560c467 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDiskAlignmentCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDiskAlignmentCommand.java @@ -189,12 +189,11 @@ protected void acquireExclusiveDiskDbLocks() { if (isImageExclusiveLockNeeded()) { final DiskImage diskImage = (DiskImage) getDisk(); - final ImageStatus imgStatus = diskImage.getImageStatus(); TransactionSupport.executeInNewTransaction(new TransactionMethod<Void>() { @Override public Void runInTransaction() { - getCompensationContext().snapshotEntityStatus(diskImage.getImage(), imgStatus); + getCompensationContext().snapshotEntityStatus(diskImage.getImage()); getCompensationContext().stateChanged(); diskImage.setImageStatus(ImageStatus.LOCKED); ImagesHandler.updateImageStatus(diskImage.getImageId(), ImageStatus.LOCKED); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java index 2b9447d..1d6d62e 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java @@ -100,7 +100,7 @@ new TransactionMethod<Object>() { @Override public Object runInTransaction() { - getCompensationContext().snapshotEntityStatus(getVm().getDynamicData(), getVm().getStatus()); + getCompensationContext().snapshotEntityStatus(getVm().getDynamicData()); // Set the VM to SavingState to lock the VM,to avoid situation of multi VM hibernation. getVm().setStatus(VMStatus.PreparingForHibernate); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommand.java index 7e3992e..87a5fd5 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommand.java @@ -153,7 +153,7 @@ @Override public Void runInTransaction() { - getCompensationContext().snapshotEntityStatus(snapshot, snapshot.getStatus()); + getCompensationContext().snapshotEntityStatus(snapshot); getSnapshotDao().updateStatus( getParameters().getSnapshotId(), SnapshotStatus.LOCKED); getCompensationContext().stateChanged(); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/StopVmCommandBase.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/StopVmCommandBase.java index f1e48ee..f0a0eb4 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/StopVmCommandBase.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/StopVmCommandBase.java @@ -161,7 +161,7 @@ TransactionSupport.executeInNewTransaction(new TransactionMethod<Void>() { @Override public Void runInTransaction() { - getCompensationContext().snapshotEntityStatus(getVm().getDynamicData(),getVm().getStatus()); + getCompensationContext().snapshotEntityStatus(getVm().getDynamicData()); updateVmData(getVm().getDynamicData()); getCompensationContext().stateChanged(); return null; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsCommand.java index fa8ed65..d9cf697 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsCommand.java @@ -169,7 +169,7 @@ // add old vds dynamic data to compensation context. This // way the status will revert back to what it was before // starting installation process - getCompensationContext().snapshotEntityStatus(_oldVds.getDynamicData(), _oldVds.getDynamicData().getStatus()); + getCompensationContext().snapshotEntityStatus(_oldVds.getDynamicData()); getCompensationContext().stateChanged(); return; } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java index de95898..eea19b2 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java @@ -526,12 +526,11 @@ private void lockImageInDb() { final DiskImage diskImage = (DiskImage) getOldDisk(); - final ImageStatus imgStatus = diskImage.getImageStatus(); TransactionSupport.executeInNewTransaction(new TransactionMethod<Void>() { @Override public Void runInTransaction() { - getCompensationContext().snapshotEntityStatus(diskImage.getImage(), imgStatus); + getCompensationContext().snapshotEntityStatus(diskImage.getImage()); getCompensationContext().stateChanged(); diskImage.setImageStatus(ImageStatus.LOCKED); ImagesHandler.updateImageStatus(diskImage.getImageId(), ImageStatus.LOCKED); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java index 2adbd1d..dd4f716 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java @@ -152,7 +152,7 @@ @Override public Void runInTransaction() { - compensationContext.snapshotEntityStatus(vm, vm.getStatus()); + compensationContext.snapshotEntityStatus(vm); LockVm(vm.getId()); compensationContext.stateChanged(); return null; @@ -219,7 +219,7 @@ @Override public Void runInTransaction() { - compensationContext.snapshotEntityStatus(vm.getDynamicData(), vm.getStatus()); + compensationContext.snapshotEntityStatus(vm.getDynamicData()); UnLockVm(vm); compensationContext.stateChanged(); return null; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmTemplateHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmTemplateHandler.java index 0182766..b5a7053 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmTemplateHandler.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmTemplateHandler.java @@ -104,7 +104,7 @@ VmTemplate vmTemplate = DbFacade.getInstance().getVmTemplateDao().get(vmTemplateGuid); if (vmTemplate != null) { if (compensationContext != null) { - compensationContext.snapshotEntityStatus(vmTemplate, vmTemplate.getStatus()); + compensationContext.snapshotEntityStatus(vmTemplate); } vmTemplate.setStatus(status); DbFacade.getInstance().getVmTemplateDao().update(vmTemplate); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/context/CompensationContext.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/context/CompensationContext.java index f490daf..2e70d39 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/context/CompensationContext.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/context/CompensationContext.java @@ -3,6 +3,7 @@ import java.util.Collection; import org.ovirt.engine.core.common.businessentities.BusinessEntity; +import org.ovirt.engine.core.common.businessentities.BusinessEntityWithStatus; /** * The compensation context contains information needed for compensating failed command executions. @@ -54,7 +55,16 @@ * @param status * The status to snapshot. */ - public void snapshotEntityStatus(BusinessEntity<?> entity, Enum<?> status); + public <T extends Enum<?>> void snapshotEntityStatus(BusinessEntityWithStatus<?, T> entity, T status); + + /** + * Snapshot the entity status only, so that in case of compensation for the entity, the status will be updated to + * it's original value. + * + * @param entity + * The entity for which to save the status snapshot. + */ + public <T extends Enum<?>> void snapshotEntityStatus(BusinessEntityWithStatus<?, T> entity); /** * Signify that the command state had changed and the transaction is about to end, so that the snapshots can diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/context/DefaultCompensationContext.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/context/DefaultCompensationContext.java index 2e3da7f..f27e6b8 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/context/DefaultCompensationContext.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/context/DefaultCompensationContext.java @@ -11,6 +11,7 @@ import org.ovirt.engine.core.common.businessentities.BusinessEntitySnapshot; import org.ovirt.engine.core.common.businessentities.BusinessEntitySnapshot.EntityStatusSnapshot; import org.ovirt.engine.core.common.businessentities.BusinessEntitySnapshot.SnapshotType; +import org.ovirt.engine.core.common.businessentities.BusinessEntityWithStatus; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.DbFacade; import org.ovirt.engine.core.dao.BusinessEntitySnapshotDAO; @@ -96,13 +97,18 @@ } @Override - public void snapshotEntityStatus(BusinessEntity<?> entity, Enum<?> status) { + public <T extends Enum<?>> void snapshotEntityStatus(BusinessEntityWithStatus<?, T> entity, T status) { EntityStatusSnapshot snapshot = new EntityStatusSnapshot(); snapshot.setId(entity.getId()); snapshot.setStatus(status); snapshotEntityInMemory(entity, snapshot, SnapshotType.CHANGED_STATUS_ONLY); } + @Override + public <T extends Enum<?>> void snapshotEntityStatus(BusinessEntityWithStatus<?, T> entity) { + snapshotEntityStatus(entity, entity.getStatus()); + } + /** * Save a snapshot of the entity but only if it is new to this context. * diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/context/NoOpCompensationContext.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/context/NoOpCompensationContext.java index b5de37e..1f33a3e 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/context/NoOpCompensationContext.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/context/NoOpCompensationContext.java @@ -3,6 +3,7 @@ import java.util.Collection; import org.ovirt.engine.core.common.businessentities.BusinessEntity; +import org.ovirt.engine.core.common.businessentities.BusinessEntityWithStatus; /** * An implementation of COmpensation Context that does nothing - will be used by commands that do not implement @@ -24,7 +25,11 @@ } @Override - public void snapshotEntityStatus(BusinessEntity<?> entity, Enum<?> status) { + public <T extends Enum<?>> void snapshotEntityStatus(BusinessEntityWithStatus<?, T> entity, T status) { + } + + @Override + public <T extends Enum<?>> void snapshotEntityStatus(BusinessEntityWithStatus<?, T> entity) { } @Override diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommand.java index 28d6fbd..ad9e112 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommand.java @@ -174,7 +174,7 @@ executeInNewTransaction(new TransactionMethod<Object>() { @Override public Object runInTransaction() { - getCompensationContext().snapshotEntityStatus(getStoragePool(), getStoragePool().getStatus()); + getCompensationContext().snapshotEntityStatus(getStoragePool()); getStoragePool().setStatus(StoragePoolStatus.Maintenance); getStoragePoolDAO().updateStatus(getStoragePool().getId(), getStoragePool().getStatus()); getCompensationContext().stateChanged(); @@ -281,7 +281,7 @@ _newMasterStorageDomainId = newMaster.getId(); if (!duringReconstruct) { newMasterMap.setStatus(StorageDomainStatus.Unknown); - getCompensationContext().snapshotEntityStatus(newMasterMap, newMasterMap.getStatus()); + getCompensationContext().snapshotEntityStatus(newMasterMap); newMaster.setStatus(StorageDomainStatus.Locked); getStoragePoolIsoMapDAO().updateStatus(newMasterMap.getId(), newMasterMap.getStatus()); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageDomainCommandBase.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageDomainCommandBase.java index 6052e60..957bc1f 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageDomainCommandBase.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageDomainCommandBase.java @@ -208,7 +208,7 @@ if (getStorageDomain() != null && getStorageDomain().getStoragePoolId() != null) { StoragePoolIsoMap map = getStorageDomain().getStoragePoolIsoMapData(); if(context != null) { - context.snapshotEntityStatus(map, map.getStatus()); + context.snapshotEntityStatus(map); } getStorageDomain().setStatus(status); getStoragePoolIsoMapDAO().updateStatus(map.getId(), status); @@ -315,7 +315,7 @@ @Override public StoragePoolIsoMap runInTransaction() { CompensationContext context = getCompensationContext(); - context.snapshotEntityStatus(map, map.getStatus()); + context.snapshotEntityStatus(map); map.setStatus(status); getStoragePoolIsoMapDAO().updateStatus(map.getId(), map.getStatus()); getCompensationContext().stateChanged(); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStorageServerConnectionCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStorageServerConnectionCommand.java index 9e743d0..698e752 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStorageServerConnectionCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStorageServerConnectionCommand.java @@ -260,7 +260,7 @@ CompensationContext context = getCompensationContext(); for (StorageDomain domain : domains) { for (StoragePoolIsoMap map : getStoragePoolIsoMap(domain)) { - context.snapshotEntityStatus(map, map.getStatus()); + context.snapshotEntityStatus(map); updateStatus(map, status); } } -- To view, visit http://gerrit.ovirt.org/18859 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ib074a96e93f1c68637306b670b70983f26042514 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Allon Mureinik <amure...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches