class ZKDelegationTokenSecretManager extends AbstractDelegationTokenSecretManager<TokenIdent> {

  @Override
  public void stopThreads() {
    super.stopThreads();
    try {
      if (tokenCache != null) {
        tokenCache.close();
      }
    } catch (Exception e) {
      LOG.error("Could not stop Delegation Token Cache", e);
    }
    try {
      if (delTokSeqCounter != null) {
        delTokSeqCounter.close();
      }
    } catch (Exception e) {
      LOG.error("Could not stop Delegation Token Counter", e);
    }
    try {
      if (keyIdSeqCounter != null) {
        keyIdSeqCounter.close();
      }
    } catch (Exception e) {
      LOG.error("Could not stop Key Id Counter", e);
    }
    try {
      if (keyCache != null) {
        keyCache.close();
      }
    } catch (Exception e) {
      LOG.error("Could not stop KeyCache", e);
    }
    try {
      if (!isExternalClient && (zkClient != null)) {
        zkClient.close();
      }
    } catch (Exception e) {
      LOG.error("Could not stop Curator Framework", e);
    }
    if (listenerThreadPool != null) {
      listenerThreadPool.shutdown();
      try {
        // wait for existing tasks to terminate
        if (!listenerThreadPool.awaitTermination(shutdownTimeout,
            TimeUnit.MILLISECONDS)) {
          LOG.error("Forcing Listener threadPool to shutdown !!");
          listenerThreadPool.shutdownNow();
        }
      } catch (InterruptedException ie) {
        listenerThreadPool.shutdownNow();
        Thread.currentThread().interrupt();
      }
    }
  }

  public  ZKDelegationTokenSecretManager(Configuration conf);

}