public static void updateAllDiskImagesSnapshotsStatusInTransactionWithCompensation( final Collection<Guid> diskIds, final ImageStatus status, ImageStatus statusForCompensation, final CompensationContext compensationContext) { if (compensationContext != null) { for (Guid diskId : diskIds) { List<DiskImage> diskSnapshots = DbFacade.getInstance().getDiskImageDao().getAllSnapshotsForImageGroup(diskId); for (DiskImage diskSnapshot : diskSnapshots) { diskSnapshot.setImageStatus(statusForCompensation); compensationContext.snapshotEntityStatus(diskSnapshot.getImage()); } } TransactionSupport.executeInScope( TransactionScopeOption.Required, () -> { for (Guid diskId : diskIds) { DbFacade.getInstance() .getImageDao() .updateStatusOfImagesByImageGroupId(diskId, status); } compensationContext.stateChanged(); return null; }); } else { TransactionSupport.executeInScope( TransactionScopeOption.Required, () -> { for (Guid diskId : diskIds) { updateAllDiskImageSnapshotsStatus(diskId, status); } return null; }); } }