@Override
  public <T extends BlockObject> T ingestBlockObjects(
      IngestionRequestContext requestContext, Class<T> clazz) throws IngestionException {

    UnManagedVolume unManagedVolume = requestContext.getCurrentUnmanagedVolume();

    String volumeNativeGuid =
        unManagedVolume
            .getNativeGuid()
            .replace(VolumeIngestionUtil.UNMANAGEDVOLUME, VolumeIngestionUtil.VOLUME);
    BlockObject blockObject =
        VolumeIngestionUtil.checkIfVolumeExistsInDB(volumeNativeGuid, _dbClient);

    // validate srdf blockObjects.
    validateUnManagedVolumeProperties(
        unManagedVolume,
        requestContext.getVarray(unManagedVolume),
        requestContext.getVpool(unManagedVolume),
        requestContext.getProject());
    // Check if ingested volume has exportmasks pending for ingestion.
    if (isExportIngestionPending(
        blockObject,
        unManagedVolume.getId(),
        requestContext.getVolumeContext().isVolumeExported())) {
      return clazz.cast(blockObject);
    }

    if (null == blockObject) {
      blockObject = super.ingestBlockObjects(requestContext, clazz);

      if (null == blockObject) {
        _logger.warn(
            "SRDF Volume ingestion failed for unmanagedVolume {}", unManagedVolume.getNativeGuid());
        throw IngestionException.exceptions.unmanagedVolumeMasksNotIngested(
            unManagedVolume.getNativeGuid(), "none.");
      }
    } else {
      // blockObject already ingested, now just update internalflags &
      // srdf relationships. Run this logic always when volume NO_PUBLIC_ACCESS
      if (markUnManagedVolumeInactive(requestContext, blockObject)) {
        _logger.info(
            "All the related replicas and parent of unManagedVolume {} has been ingested ",
            unManagedVolume.getNativeGuid());
        unManagedVolume.setInactive(true);
        requestContext.getUnManagedVolumesToBeDeleted().add(unManagedVolume);
      } else {
        _logger.info(
            "Not all the parent/replicas of unManagedVolume {} have been ingested , hence marking as internal",
            unManagedVolume.getNativeGuid());
        blockObject.addInternalFlags(INTERNAL_VOLUME_FLAGS);
      }
    }
    // Decorate blockobjects with SRDF Properties.
    decorateBlockObjectWithSRDFProperties(blockObject, unManagedVolume);

    return clazz.cast(blockObject);
  }