@Override
  public void run() {
    try {
      logger.trace("Starting hard delete runnable for {}", dataDir);
      while (enabled.get()) {
        hardDeleteLock.lock();
        try {
          while (enabled.get() && isPaused()) {
            logger.info("Hard delete entering pause state for {}", dataDir);
            pauseCondition.await();
          }
          if (enabled.get()) {
            if (!hardDelete()) {
              isCaughtUp = true;
              logger.trace("Waiting for {} ms after caught up for {}", HARD_DELETE_SLEEP_TIME_ON_CAUGHT_UP_MS, dataDir);
              awaitingAfterCaughtUp = true;
              time.await(pauseCondition, HARD_DELETE_SLEEP_TIME_ON_CAUGHT_UP_MS);
              awaitingAfterCaughtUp = false;
            } else if (isCaughtUp) {
              isCaughtUp = false;
              logger.info("Resumed hard deletes for {} after having caught up", dataDir);
            }
          }
        } catch (StoreException e) {
          if (e.getErrorCode() != StoreErrorCodes.StoreShuttingDown) {
            logger.error("Caught store exception: ", e);
          } else {
            logger.trace("Caught exception during hard deletes", e);
          }
        } catch (InterruptedException e) {
          logger.trace("Caught exception during hard deletes", e);
        } finally {
          hardDeleteLock.unlock();
        }
      }
    } finally {
      close();
    }
  }
Class that provides functionality to perform hard deletes.
ambry-store/src/main/java/com/github/ambry/store/HardDeleter.java