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 void updateKeepAliveApplications(List<ApplicationId> appIds) {
private void removeApplicationFromRenewal(ApplicationId applicationId) {
rmContext.getSystemCredentialsForApps().remove(applicationId);
Set<DelegationTokenToRenew> tokens = appTokens.get(applicationId);
Set<DelegationTokenToRenew> tokens = appTokens.remove(applicationId);
if (tokens != null && !tokens.isEmpty()) {
synchronized (tokens) {
@ -798,15 +798,10 @@ private void removeApplicationFromRenewal(ApplicationId applicationId) {
// cancel the token
cancelToken(dttr);
it.remove();
allTokens.remove(dttr.token);
}
}
}
if(tokens != null && tokens.isEmpty()) {
appTokens.remove(applicationId);
}
}
/**

View File

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