// cancel a token
 private void cancelToken(DelegationTokenToRenew t) {
   if (t.shouldCancelAtEnd) {
     dtCancelThread.cancelToken(t.token, t.conf);
   } else {
     LOG.info("Did not cancel " + t);
   }
 }
 @Override
 protected void serviceStop() {
   if (renewalTimer != null) {
     renewalTimer.cancel();
   }
   appTokens.clear();
   this.renewerService.shutdown();
   dtCancelThread.interrupt();
   try {
     dtCancelThread.join(1000);
   } catch (InterruptedException e) {
     e.printStackTrace();
   }
   if (tokenKeepAliveEnabled && delayedRemovalThread != null) {
     delayedRemovalThread.interrupt();
     try {
       delayedRemovalThread.join(1000);
     } catch (InterruptedException e) {
       LOG.info("Interrupted while joining on delayed removal thread.", e);
     }
   }
 }
  @Override
  protected void serviceStart() throws Exception {
    dtCancelThread.start();
    if (tokenKeepAliveEnabled) {
      delayedRemovalThread =
          new Thread(new DelayedTokenRemovalRunnable(getConfig()), "DelayedTokenCanceller");
      delayedRemovalThread.start();
    }

    setLocalSecretManagerAndServiceAddr();
    serviceStateLock.writeLock().lock();
    isServiceStarted = true;
    serviceStateLock.writeLock().unlock();
    while (!pendingEventQueue.isEmpty()) {
      processDelegationTokenRenewerEvent(pendingEventQueue.take());
    }
    super.serviceStart();
  }