JHSDelegationTokenSecretManager extends AbstractDelegationTokenSecretManager<MRDelegationTokenIdentifier> { public void recover(HistoryServerState state) throws IOException { LOG.info("Recovering " + getClass().getSimpleName()); for (DelegationKey key : state.tokenMasterKeyState) { addKey(key); } for (Entry<MRDelegationTokenIdentifier, Long> entry : state.tokenState.entrySet()) { addPersistedDelegationToken(entry.getKey(), entry.getValue()); } } JHSDelegationTokenSecretManager(long delegationKeyUpdateInterval,
                                      long delegationTokenMaxLifetime, 
                                      long delegationTokenRenewInterval,
                                      long delegationTokenRemoverScanInterval,
                                      HistoryServerStateStoreService store); @Override MRDelegationTokenIdentifier createIdentifier(); void recover(HistoryServerState state);  }
@Test public void testRecovery() throws IOException { Configuration conf = new Configuration(); HistoryServerStateStoreService store = new HistoryServerMemStateStoreService(); store.init(conf); store.start(); JHSDelegationTokenSecretManagerForTest mgr = new JHSDelegationTokenSecretManagerForTest(store); mgr.startThreads(); MRDelegationTokenIdentifier tokenId1 = new MRDelegationTokenIdentifier( new Text("tokenOwner"), new Text("tokenRenewer"), new Text("tokenUser")); Token<MRDelegationTokenIdentifier> token1 = new Token<MRDelegationTokenIdentifier>(tokenId1, mgr); MRDelegationTokenIdentifier tokenId2 = new MRDelegationTokenIdentifier( new Text("tokenOwner"), new Text("tokenRenewer"), new Text("tokenUser")); Token<MRDelegationTokenIdentifier> token2 = new Token<MRDelegationTokenIdentifier>(tokenId2, mgr); DelegationKey[] keys = mgr.getAllKeys(); long tokenRenewDate1 = mgr.getAllTokens().get(tokenId1).getRenewDate(); long tokenRenewDate2 = mgr.getAllTokens().get(tokenId2).getRenewDate(); mgr.stopThreads(); mgr = new JHSDelegationTokenSecretManagerForTest(store); mgr.recover(store.loadState()); List<DelegationKey> recoveredKeys = Arrays.asList(mgr.getAllKeys()); for (DelegationKey key : keys) { assertTrue("key missing after recovery", recoveredKeys.contains(key)); } assertTrue("token1 missing", mgr.getAllTokens().containsKey(tokenId1)); assertEquals("token1 renew date", tokenRenewDate1, mgr.getAllTokens().get(tokenId1).getRenewDate()); assertTrue("token2 missing", mgr.getAllTokens().containsKey(tokenId2)); assertEquals("token2 renew date", tokenRenewDate2, mgr.getAllTokens().get(tokenId2).getRenewDate()); mgr.startThreads(); mgr.verifyToken(tokenId1, token1.getPassword()); mgr.verifyToken(tokenId2, token2.getPassword()); MRDelegationTokenIdentifier tokenId3 = new MRDelegationTokenIdentifier( new Text("tokenOwner"), new Text("tokenRenewer"), new Text("tokenUser")); Token<MRDelegationTokenIdentifier> token3 = new Token<MRDelegationTokenIdentifier>(tokenId3, mgr); assertEquals("sequence number restore", tokenId2.getSequenceNumber() + 1, tokenId3.getSequenceNumber()); mgr.cancelToken(token1, "tokenOwner"); long tokenRenewDate3 = mgr.getAllTokens().get(tokenId3).getRenewDate(); mgr.stopThreads(); mgr = new JHSDelegationTokenSecretManagerForTest(store); mgr.recover(store.loadState()); assertFalse("token1 should be missing", mgr.getAllTokens().containsKey(tokenId1)); assertTrue("token2 missing", mgr.getAllTokens().containsKey(tokenId2)); assertEquals("token2 renew date", tokenRenewDate2, mgr.getAllTokens().get(tokenId2).getRenewDate()); assertTrue("token3 missing", mgr.getAllTokens().containsKey(tokenId3)); assertEquals("token3 renew date", tokenRenewDate3, mgr.getAllTokens().get(tokenId3).getRenewDate()); mgr.startThreads(); mgr.verifyToken(tokenId2, token2.getPassword()); mgr.verifyToken(tokenId3, token3.getPassword()); mgr.stopThreads(); }