HADOOP-11722. Some Instances of Services using ZKDelegationTokenSecretManager go down when old token cannot be deleted. Contributed by Arun Suresh. (cherry picked from commit fc90bf7b27cc20486f2806670a14fd7d654b0a31)
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/85473cd6 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/85473cd6 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/85473cd6 Branch: refs/heads/branch-2 Commit: 85473cd61a37a9b7614805bd83507cabe85eaeb0 Parents: ab34e69 Author: Aaron T. Myers <a...@apache.org> Authored: Tue Mar 17 19:41:36 2015 -0700 Committer: Aaron T. Myers <a...@apache.org> Committed: Tue Mar 17 19:42:31 2015 -0700 ---------------------------------------------------------------------- hadoop-common-project/hadoop-common/CHANGES.txt | 4 ++++ .../ZKDelegationTokenSecretManager.java | 21 ++++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/85473cd6/hadoop-common-project/hadoop-common/CHANGES.txt ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt index 7f47197..0d1ffce 100644 --- a/hadoop-common-project/hadoop-common/CHANGES.txt +++ b/hadoop-common-project/hadoop-common/CHANGES.txt @@ -700,6 +700,10 @@ Release 2.7.0 - UNRELEASED HADOOP-11720. [JDK8] Fix javadoc errors caused by incorrect or illegal tags in hadoop-tools. (Akira AJISAKA via ozawa) + HADOOP-11722. Some Instances of Services using + ZKDelegationTokenSecretManager go down when old token cannot be deleted. + (Arun Suresh via atm) + Release 2.6.1 - UNRELEASED INCOMPATIBLE CHANGES http://git-wip-us.apache.org/repos/asf/hadoop/blob/85473cd6/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/token/delegation/ZKDelegationTokenSecretManager.java ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/token/delegation/ZKDelegationTokenSecretManager.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/token/delegation/ZKDelegationTokenSecretManager.java index ec522dcf..73c3ab8 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/token/delegation/ZKDelegationTokenSecretManager.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/token/delegation/ZKDelegationTokenSecretManager.java @@ -55,6 +55,7 @@ import org.apache.hadoop.security.token.Token; import org.apache.hadoop.security.token.delegation.web.DelegationTokenManager; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.KeeperException; +import org.apache.zookeeper.KeeperException.NoNodeException; import org.apache.zookeeper.ZooDefs.Perms; import org.apache.zookeeper.client.ZooKeeperSaslClient; import org.apache.zookeeper.data.ACL; @@ -709,7 +710,15 @@ public abstract class ZKDelegationTokenSecretManager<TokenIdent extends Abstract try { if (zkClient.checkExists().forPath(nodeRemovePath) != null) { while(zkClient.checkExists().forPath(nodeRemovePath) != null){ - zkClient.delete().guaranteed().forPath(nodeRemovePath); + try { + zkClient.delete().guaranteed().forPath(nodeRemovePath); + } catch (NoNodeException nne) { + // It is possible that the node might be deleted between the + // check and the actual delete.. which might lead to an + // exception that can bring down the daemon running this + // SecretManager + LOG.debug("Node already deleted by peer " + nodeRemovePath); + } } } else { LOG.debug("Attempted to delete a non-existing znode " + nodeRemovePath); @@ -761,7 +770,15 @@ public abstract class ZKDelegationTokenSecretManager<TokenIdent extends Abstract try { if (zkClient.checkExists().forPath(nodeRemovePath) != null) { while(zkClient.checkExists().forPath(nodeRemovePath) != null){ - zkClient.delete().guaranteed().forPath(nodeRemovePath); + try { + zkClient.delete().guaranteed().forPath(nodeRemovePath); + } catch (NoNodeException nne) { + // It is possible that the node might be deleted between the + // check and the actual delete.. which might lead to an + // exception that can bring down the daemon running this + // SecretManager + LOG.debug("Node already deleted by peer " + nodeRemovePath); + } } } else { LOG.debug("Attempted to remove a non-existing znode " + nodeRemovePath);