YARN-7962. Race Condition When Stopping DelegationTokenRenewer causes RM crash during failover. (BELUGA BEHR via wangda)
Change-Id: I617e2645f60a57080058ad5f06af860fb3f682c8
This commit is contained in:
parent
3a6bd77550
commit
931f78718f
|
@ -209,7 +209,15 @@ public class DelegationTokenRenewer extends AbstractService {
|
|||
}
|
||||
appTokens.clear();
|
||||
allTokens.clear();
|
||||
|
||||
serviceStateLock.writeLock().lock();
|
||||
try {
|
||||
isServiceStarted = false;
|
||||
this.renewerService.shutdown();
|
||||
} finally {
|
||||
serviceStateLock.writeLock().unlock();
|
||||
}
|
||||
|
||||
dtCancelThread.interrupt();
|
||||
try {
|
||||
dtCancelThread.join(1000);
|
||||
|
|
|
@ -1420,4 +1420,28 @@ public class TestDelegationTokenRenewer {
|
|||
delegationTokenRenewer.setTimerForTokenRenewal(mockDttr);
|
||||
assertNull(mockDttr.timerTask);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that the DelegationTokenRenewer class can gracefully handle
|
||||
* interactions that occur when it has been stopped.
|
||||
*/
|
||||
@Test
|
||||
public void testShutDown() {
|
||||
DelegationTokenRenewer dtr = createNewDelegationTokenRenewer(conf, counter);
|
||||
RMContext mockContext = mock(RMContext.class);
|
||||
when(mockContext.getSystemCredentialsForApps()).thenReturn(
|
||||
new ConcurrentHashMap<ApplicationId, ByteBuffer>());
|
||||
ClientRMService mockClientRMService = mock(ClientRMService.class);
|
||||
when(mockContext.getClientRMService()).thenReturn(mockClientRMService);
|
||||
InetSocketAddress sockAddr =
|
||||
InetSocketAddress.createUnresolved("localhost", 1234);
|
||||
when(mockClientRMService.getBindAddress()).thenReturn(sockAddr);
|
||||
dtr.setRMContext(mockContext);
|
||||
when(mockContext.getDelegationTokenRenewer()).thenReturn(dtr);
|
||||
dtr.init(conf);
|
||||
dtr.start();
|
||||
delegationTokenRenewer.stop();
|
||||
delegationTokenRenewer.applicationFinished(
|
||||
BuilderUtils.newApplicationId(0, 1));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue