diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/security/DelegationTokenRenewer.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/security/DelegationTokenRenewer.java index abb8d59..087d390 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/security/DelegationTokenRenewer.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/security/DelegationTokenRenewer.java @@ -179,12 +179,17 @@ protected void serviceStart() throws Exception { } setLocalSecretManagerAndServiceAddr(); + serviceStateLock.writeLock().lock(); - isServiceStarted = true; - serviceStateLock.writeLock().unlock(); - while(!pendingEventQueue.isEmpty()) { - processDelegationTokenRenewerEvent(pendingEventQueue.take()); + try { + isServiceStarted = true; + while (!pendingEventQueue.isEmpty()) { + processDelegationTokenRenewerEvent(pendingEventQueue.take()); + } + } finally { + serviceStateLock.writeLock().unlock(); } + super.serviceStart(); } @@ -209,7 +214,15 @@ protected void serviceStop() { } appTokens.clear(); allTokens.clear(); - this.renewerService.shutdown(); + + serviceStateLock.writeLock().lock(); + try { + isServiceStarted = false; + this.renewerService.shutdown(); + } finally { + serviceStateLock.writeLock().unlock(); + } + dtCancelThread.interrupt(); try { dtCancelThread.join(1000);