YARN-5353. ResourceManager can leak delegation tokens when they are shared across apps. (Jason Lowe via Varun Saxena).

This commit is contained in:
Varun Saxena 2016-07-13 07:55:34 +05:30
parent a290a98b6a
commit 06c56ff79b
2 changed files with 4 additions and 6 deletions

View File

@ -773,7 +773,7 @@ public class DelegationTokenRenewer extends AbstractService {
private void removeApplicationFromRenewal(ApplicationId applicationId) { private void removeApplicationFromRenewal(ApplicationId applicationId) {
rmContext.getSystemCredentialsForApps().remove(applicationId); rmContext.getSystemCredentialsForApps().remove(applicationId);
Set<DelegationTokenToRenew> tokens = appTokens.get(applicationId); Set<DelegationTokenToRenew> tokens = appTokens.remove(applicationId);
if (tokens != null && !tokens.isEmpty()) { if (tokens != null && !tokens.isEmpty()) {
synchronized (tokens) { synchronized (tokens) {
@ -798,15 +798,10 @@ public class DelegationTokenRenewer extends AbstractService {
// cancel the token // cancel the token
cancelToken(dttr); cancelToken(dttr);
it.remove();
allTokens.remove(dttr.token); allTokens.remove(dttr.token);
} }
} }
} }
if(tokens != null && tokens.isEmpty()) {
appTokens.remove(applicationId);
}
} }
/** /**

View File

@ -1254,6 +1254,9 @@ public class TestDelegationTokenRenewer {
Assert.assertTrue(dttr.referringAppIds.isEmpty()); Assert.assertTrue(dttr.referringAppIds.isEmpty());
Assert.assertTrue(dttr.isTimerCancelled()); Assert.assertTrue(dttr.isTimerCancelled());
Assert.assertTrue(Renewer.cancelled); Assert.assertTrue(Renewer.cancelled);
// make sure the token also has been removed from appTokens
Assert.assertFalse(renewer.getDelegationTokens().contains(token1));
} }
} }