/// <exception cref="System.Exception"/> private void VerifyOwnerAccess() { AccessControlList viewACL = new AccessControlList(string.Empty); viewACL.AddGroup(FriendlyGroup); AccessControlList modifyACL = new AccessControlList(string.Empty); modifyACL.AddUser(Friend); ApplicationId applicationId = SubmitAppAndGetAppId(viewACL, modifyACL); GetApplicationReportRequest appReportRequest = recordFactory.NewRecordInstance <GetApplicationReportRequest >(); appReportRequest.SetApplicationId(applicationId); KillApplicationRequest finishAppRequest = recordFactory.NewRecordInstance <KillApplicationRequest >(); finishAppRequest.SetApplicationId(applicationId); // View as owner rmClient.GetApplicationReport(appReportRequest); // List apps as owner NUnit.Framework.Assert.AreEqual("App view by owner should list the apps!!", 1, rmClient .GetApplications(recordFactory.NewRecordInstance <GetApplicationsRequest>()).GetApplicationList ().Count); // Kill app as owner rmClient.ForceKillApplication(finishAppRequest); resourceManager.WaitForState(applicationId, RMAppState.Killed); }
/// <exception cref="System.Exception"/> public virtual KillApplicationResponse KillApp(ApplicationId appId) { ApplicationClientProtocol client = GetClientRMService(); KillApplicationRequest req = KillApplicationRequest.NewInstance(appId); return(client.ForceKillApplication(req)); }
/// <exception cref="System.Exception"/> private void VerifyAdministerQueueUserAccess() { isQueueUser = true; AccessControlList viewACL = new AccessControlList(string.Empty); viewACL.AddGroup(FriendlyGroup); AccessControlList modifyACL = new AccessControlList(string.Empty); modifyACL.AddUser(Friend); ApplicationId applicationId = SubmitAppAndGetAppId(viewACL, modifyACL); GetApplicationReportRequest appReportRequest = recordFactory.NewRecordInstance <GetApplicationReportRequest >(); appReportRequest.SetApplicationId(applicationId); KillApplicationRequest finishAppRequest = recordFactory.NewRecordInstance <KillApplicationRequest >(); finishAppRequest.SetApplicationId(applicationId); ApplicationClientProtocol administerQueueUserRmClient = GetRMClientForUser(QueueAdminUser ); // View as the administerQueueUserRmClient administerQueueUserRmClient.GetApplicationReport(appReportRequest); // List apps as administerQueueUserRmClient NUnit.Framework.Assert.AreEqual("App view by queue-admin-user should list the apps!!" , 5, administerQueueUserRmClient.GetApplications(recordFactory.NewRecordInstance <GetApplicationsRequest>()).GetApplicationList().Count); // Kill app as the administerQueueUserRmClient administerQueueUserRmClient.ForceKillApplication(finishAppRequest); resourceManager.WaitForState(applicationId, RMAppState.Killed); }
/// <exception cref="System.Exception"/> private void VerifyKillAppSuccess(string submitter, string killer, string queueName , bool setupACLs) { ApplicationId applicationId = SubmitAppAndGetAppId(submitter, queueName, setupACLs ); KillApplicationRequest finishAppRequest = KillApplicationRequest.NewInstance(applicationId ); ApplicationClientProtocol ownerClient = GetRMClientForUser(killer); // Kill app as killer ownerClient.ForceKillApplication(finishAppRequest); resourceManager.WaitForState(applicationId, RMAppState.Killed); }
/// <exception cref="System.Exception"/> private void VerifyEnemyAccess() { AccessControlList viewACL = new AccessControlList(string.Empty); viewACL.AddGroup(FriendlyGroup); AccessControlList modifyACL = new AccessControlList(string.Empty); modifyACL.AddUser(Friend); ApplicationId applicationId = SubmitAppAndGetAppId(viewACL, modifyACL); GetApplicationReportRequest appReportRequest = recordFactory.NewRecordInstance <GetApplicationReportRequest >(); appReportRequest.SetApplicationId(applicationId); KillApplicationRequest finishAppRequest = recordFactory.NewRecordInstance <KillApplicationRequest >(); finishAppRequest.SetApplicationId(applicationId); ApplicationClientProtocol enemyRmClient = GetRMClientForUser(Enemy); // View as the enemy ApplicationReport appReport = enemyRmClient.GetApplicationReport(appReportRequest ).GetApplicationReport(); VerifyEnemyAppReport(appReport); // List apps as enemy IList <ApplicationReport> appReports = enemyRmClient.GetApplications(recordFactory .NewRecordInstance <GetApplicationsRequest>()).GetApplicationList(); NUnit.Framework.Assert.AreEqual("App view by enemy should list the apps!!", 4, appReports .Count); foreach (ApplicationReport report in appReports) { VerifyEnemyAppReport(report); } // Kill app as the enemy try { enemyRmClient.ForceKillApplication(finishAppRequest); NUnit.Framework.Assert.Fail("App killing by the enemy should fail!!"); } catch (YarnException e) { Log.Info("Got exception while killing app as the enemy", e); NUnit.Framework.Assert.IsTrue(e.Message.Contains("User enemy cannot perform operation MODIFY_APP on " + applicationId)); } rmClient.ForceKillApplication(finishAppRequest); }
/// <exception cref="Com.Google.Protobuf.ServiceException"/> public virtual YarnServiceProtos.KillApplicationResponseProto ForceKillApplication (RpcController arg0, YarnServiceProtos.KillApplicationRequestProto proto) { KillApplicationRequestPBImpl request = new KillApplicationRequestPBImpl(proto); try { KillApplicationResponse response = real.ForceKillApplication(request); return(((KillApplicationResponsePBImpl)response).GetProto()); } catch (YarnException e) { throw new ServiceException(e); } catch (IOException e) { throw new ServiceException(e); } }
/// <exception cref="System.Exception"/> private void VerifyKillAppFailure(string submitter, string killer, string queueName , bool setupACLs) { ApplicationId applicationId = SubmitAppAndGetAppId(submitter, queueName, setupACLs ); KillApplicationRequest finishAppRequest = KillApplicationRequest.NewInstance(applicationId ); ApplicationClientProtocol killerClient = GetRMClientForUser(killer); // Kill app as the killer try { killerClient.ForceKillApplication(finishAppRequest); NUnit.Framework.Assert.Fail("App killing by the enemy should fail!!"); } catch (YarnException e) { Log.Info("Got exception while killing app as the enemy", e); NUnit.Framework.Assert.IsTrue(e.Message.Contains("User " + killer + " cannot perform operation MODIFY_APP on " + applicationId)); } GetRMClientForUser(submitter).ForceKillApplication(finishAppRequest); }
/// <exception cref="Org.Apache.Hadoop.Yarn.Exceptions.YarnException"/> /// <exception cref="System.IO.IOException"/> public override void KillApplication(ApplicationId applicationId) { KillApplicationRequest request = Org.Apache.Hadoop.Yarn.Util.Records.NewRecord <KillApplicationRequest >(); request.SetApplicationId(applicationId); try { int pollCount = 0; long startTime = Runtime.CurrentTimeMillis(); while (true) { KillApplicationResponse response = rmClient.ForceKillApplication(request); if (response.GetIsKillCompleted()) { Log.Info("Killed application " + applicationId); break; } long elapsedMillis = Runtime.CurrentTimeMillis() - startTime; if (EnforceAsyncAPITimeout() && elapsedMillis >= this.asyncApiPollTimeoutMillis) { throw new YarnException("Timed out while waiting for application " + applicationId + " to be killed."); } if (++pollCount % 10 == 0) { Log.Info("Waiting for application " + applicationId + " to be killed."); } Sharpen.Thread.Sleep(asyncApiPollIntervalMillis); } } catch (Exception) { Log.Error("Interrupted while waiting for application " + applicationId + " to be killed." ); } }
/// <exception cref="System.Exception"/> public virtual void TestResourceMgrDelegate() { /* we not want a mock of resource mgr delegate */ ApplicationClientProtocol clientRMProtocol = Org.Mockito.Mockito.Mock <ApplicationClientProtocol >(); ResourceMgrDelegate delegate_ = new _ResourceMgrDelegate_256(clientRMProtocol, conf ); /* make sure kill calls finish application master */ Org.Mockito.Mockito.When(clientRMProtocol.ForceKillApplication(Matchers.Any <KillApplicationRequest >())).ThenReturn(KillApplicationResponse.NewInstance(true)); delegate_.KillApplication(appId); Org.Mockito.Mockito.Verify(clientRMProtocol).ForceKillApplication(Matchers.Any <KillApplicationRequest >()); /* make sure getalljobs calls get all applications */ Org.Mockito.Mockito.When(clientRMProtocol.GetApplications(Matchers.Any <GetApplicationsRequest >())).ThenReturn(recordFactory.NewRecordInstance <GetApplicationsResponse>()); delegate_.GetAllJobs(); Org.Mockito.Mockito.Verify(clientRMProtocol).GetApplications(Matchers.Any <GetApplicationsRequest >()); /* make sure getapplication report is called */ Org.Mockito.Mockito.When(clientRMProtocol.GetApplicationReport(Matchers.Any <GetApplicationReportRequest >())).ThenReturn(recordFactory.NewRecordInstance <GetApplicationReportResponse>() ); delegate_.GetApplicationReport(appId); Org.Mockito.Mockito.Verify(clientRMProtocol).GetApplicationReport(Matchers.Any <GetApplicationReportRequest >()); /* make sure metrics is called */ GetClusterMetricsResponse clusterMetricsResponse = recordFactory.NewRecordInstance <GetClusterMetricsResponse>(); clusterMetricsResponse.SetClusterMetrics(recordFactory.NewRecordInstance <YarnClusterMetrics >()); Org.Mockito.Mockito.When(clientRMProtocol.GetClusterMetrics(Matchers.Any <GetClusterMetricsRequest >())).ThenReturn(clusterMetricsResponse); delegate_.GetClusterMetrics(); Org.Mockito.Mockito.Verify(clientRMProtocol).GetClusterMetrics(Matchers.Any <GetClusterMetricsRequest >()); Org.Mockito.Mockito.When(clientRMProtocol.GetClusterNodes(Matchers.Any <GetClusterNodesRequest >())).ThenReturn(recordFactory.NewRecordInstance <GetClusterNodesResponse>()); delegate_.GetActiveTrackers(); Org.Mockito.Mockito.Verify(clientRMProtocol).GetClusterNodes(Matchers.Any <GetClusterNodesRequest >()); GetNewApplicationResponse newAppResponse = recordFactory.NewRecordInstance <GetNewApplicationResponse >(); newAppResponse.SetApplicationId(appId); Org.Mockito.Mockito.When(clientRMProtocol.GetNewApplication(Matchers.Any <GetNewApplicationRequest >())).ThenReturn(newAppResponse); delegate_.GetNewJobID(); Org.Mockito.Mockito.Verify(clientRMProtocol).GetNewApplication(Matchers.Any <GetNewApplicationRequest >()); GetQueueInfoResponse queueInfoResponse = recordFactory.NewRecordInstance <GetQueueInfoResponse >(); queueInfoResponse.SetQueueInfo(recordFactory.NewRecordInstance <QueueInfo>()); Org.Mockito.Mockito.When(clientRMProtocol.GetQueueInfo(Matchers.Any <GetQueueInfoRequest >())).ThenReturn(queueInfoResponse); delegate_.GetQueues(); Org.Mockito.Mockito.Verify(clientRMProtocol).GetQueueInfo(Matchers.Any <GetQueueInfoRequest >()); GetQueueUserAclsInfoResponse aclResponse = recordFactory.NewRecordInstance <GetQueueUserAclsInfoResponse >(); Org.Mockito.Mockito.When(clientRMProtocol.GetQueueUserAcls(Matchers.Any <GetQueueUserAclsInfoRequest >())).ThenReturn(aclResponse); delegate_.GetQueueAclsForCurrentUser(); Org.Mockito.Mockito.Verify(clientRMProtocol).GetQueueUserAcls(Matchers.Any <GetQueueUserAclsInfoRequest >()); }