delegation java_Java DelegationTokenToRenew类代码示例

这篇博客主要探讨了在 Hadoop YARN 的测试环境中,如何模拟多个应用程序提交并使用相同的 DelegationToken 的场景。通过创建 MockRM 和 MockNM 对象,测试了在应用程序完成和运行过程中,DelegationTokenRenewer 如何管理这些令牌的续订和取消。当应用程序完成时,检查了令牌是否被正确地从缓存中移除,验证了令牌管理的正确性。

import org.apache.hadoop.yarn.server.resourcemanager.security.DelegationTokenRenewer.DelegationTokenToRenew; //导入依赖的package包/类

@Test (timeout = 30000)

public void testCancelWithMultipleAppSubmissions() throws Exception{

MockRM rm = new TestSecurityMockRM(conf, null);

rm.start();

final MockNM nm1 =

new MockNM("127.0.0.1:1234", 15120, rm.getResourceTrackerService());

nm1.registerNode();

//MyFS fs = (MyFS)FileSystem.get(conf);

//MyToken token1 = fs.getDelegationToken("user123");

// create Token1:

Text userText1 = new Text("user");

DelegationTokenIdentifier dtId1 =

new DelegationTokenIdentifier(userText1, new Text("renewer1"),

userText1);

final Token token1 =

new Token(dtId1.getBytes(),

"password1".getBytes(), dtId1.getKind(), new Text("service1"));

Credentials credentials = new Credentials();

credentials.addToken(token1.getService(), token1);

DelegationTokenRenewer renewer =

rm.getRMContext().getDelegationTokenRenewer();

Assert.assertTrue(renewer.getAllTokens().isEmpty());

Assert.assertFalse(Renewer.cancelled);

Resource resource = Records.newRecord(Resource.class);

resource.setMemory(200);

RMApp app1 =

rm.submitApp(resource, "name", "user", null, false, null, 2, credentials,

null, true, false, false, null, 0, null, true, null);

MockAM am1 = MockRM.launchAndRegisterAM(app1, rm, nm1);

rm.waitForState(app1.getApplicationId(), RMAppState.RUNNING);

DelegationTokenToRenew dttr = renewer.getAllTokens().get(token1);

Assert.assertNotNull(dttr);

Assert.assertTrue(dttr.referringAppIds.contains(app1.getApplicationId()));

RMApp app2 = rm.submitApp(resource, "name", "user", null, false, null, 2,

credentials, null, true, false, false, null, 0, null, true, null);

MockAM am2 = MockRM.launchAndRegisterAM(app2, rm, nm1);

rm.waitForState(app2.getApplicationId(), RMAppState.RUNNING);

Assert.assertTrue(renewer.getAllTokens().containsKey(token1));

Assert.assertTrue(dttr.referringAppIds.contains(app2.getApplicationId()));

Assert.assertTrue(dttr.referringAppIds.contains(app2.getApplicationId()));

Assert.assertFalse(Renewer.cancelled);

MockRM.finishAMAndVerifyAppState(app2, rm, nm1, am2);

// app2 completes, app1 is still running, check the token is not cancelled

Assert.assertTrue(renewer.getAllTokens().containsKey(token1));

Assert.assertTrue(dttr.referringAppIds.contains(app1.getApplicationId()));

Assert.assertFalse(dttr.referringAppIds.contains(app2.getApplicationId()));

Assert.assertFalse(dttr.isTimerCancelled());

Assert.assertFalse(Renewer.cancelled);

RMApp app3 = rm.submitApp(resource, "name", "user", null, false, null, 2,

credentials, null, true, false, false, null, 0, null, true, null);

MockAM am3 = MockRM.launchAndRegisterAM(app3, rm, nm1);

rm.waitForState(app3.getApplicationId(), RMAppState.RUNNING);

Assert.assertTrue(renewer.getAllTokens().containsKey(token1));

Assert.assertTrue(dttr.referringAppIds.contains(app1.getApplicationId()));

Assert.assertTrue(dttr.referringAppIds.contains(app3.getApplicationId()));

Assert.assertFalse(dttr.isTimerCancelled());

Assert.assertFalse(Renewer.cancelled);

MockRM.finishAMAndVerifyAppState(app1, rm, nm1, am1);

Assert.assertTrue(renewer.getAllTokens().containsKey(token1));

Assert.assertFalse(dttr.referringAppIds.contains(app1.getApplicationId()));

Assert.assertTrue(dttr.referringAppIds.contains(app3.getApplicationId()));

Assert.assertFalse(dttr.isTimerCancelled());

Assert.assertFalse(Renewer.cancelled);

MockRM.finishAMAndVerifyAppState(app3, rm, nm1, am3);

Assert.assertFalse(renewer.getAllTokens().containsKey(token1));

Assert.assertTrue(dttr.referringAppIds.isEmpty());

Assert.assertTrue(dttr.isTimerCancelled());

Assert.assertTrue(Renewer.cancelled);

}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值