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