void shutdown() throws InterruptedException {
    long startTimeInMs = time.milliseconds();
    try {
      if (enabled.get()) {
        logger.info("Hard delete shutdown initiated for store {} ", dataDir);
        enabled.set(false);
        hardDeleteLock.lock();
        if (awaitingAfterCaughtUp) {
          logger.info("HardDelete is awaiting after caught up for store {} ", dataDir);
        } else {
          logger.info("HardDelete in progress for store {} ", dataDir);
        }
        try {
          pauseCondition.signal();
        } finally {
          hardDeleteLock.unlock();
        }
        shutdownLatch.await();
        logger.info("Hard delete shutdown complete for store {} ", dataDir);
      }
    } finally {
      metrics.hardDeleteShutdownTimeInMs.update(time.milliseconds() - startTimeInMs);
    }
  }
Returns true if the hard delete thread has caught up, that is if the token did not advance in the last iteration
@return true if caught up, false otherwise.
ambry-store/src/main/java/com/github/ambry/store/HardDeleter.java