/// <exception cref="System.Exception"/> public virtual void UnregisterAppAttempt(bool waitForStateRunning) { FinishApplicationMasterRequest req = FinishApplicationMasterRequest.NewInstance(FinalApplicationStatus .Succeeded, string.Empty, string.Empty); UnregisterAppAttempt(req, waitForStateRunning); }
/// <exception cref="Org.Apache.Hadoop.Yarn.Exceptions.YarnException"/> /// <exception cref="System.IO.IOException"/> public override void UnregisterApplicationMaster(FinalApplicationStatus appStatus , string appMessage, string appTrackingUrl) { Preconditions.CheckArgument(appStatus != null, "AppStatus should not be null."); FinishApplicationMasterRequest request = FinishApplicationMasterRequest.NewInstance (appStatus, appMessage, appTrackingUrl); try { while (true) { FinishApplicationMasterResponse response = rmClient.FinishApplicationMaster(request ); if (response.GetIsUnregistered()) { break; } Log.Info("Waiting for application to be successfully unregistered."); Sharpen.Thread.Sleep(100); } } catch (Exception) { Log.Info("Interrupted while waiting for application" + " to be removed from RMStateStore" ); } catch (ApplicationMasterNotRegisteredException) { Log.Warn("ApplicationMaster is out of sync with ResourceManager," + " hence resyncing." ); // re register with RM RegisterApplicationMaster(); UnregisterApplicationMaster(appStatus, appMessage, appTrackingUrl); } }
/// <exception cref="Org.Apache.Hadoop.Yarn.Exceptions.YarnException"/> /// <exception cref="System.IO.IOException"/> public virtual void TestFinishApplicationMasterOnHA() { FinishApplicationMasterRequest request = FinishApplicationMasterRequest.NewInstance (FinalApplicationStatus.Succeeded, string.Empty, string.Empty); FinishApplicationMasterResponse response = amClient.FinishApplicationMaster(request ); NUnit.Framework.Assert.AreEqual(response, this.cluster.CreateFakeFinishApplicationMasterResponse ()); }
// Disable webapp /// <exception cref="System.Exception"/> public static void FinishAMAndVerifyAppState(RMApp rmApp, Org.Apache.Hadoop.Yarn.Server.Resourcemanager.MockRM rm, MockNM nm, MockAM am) { FinishApplicationMasterRequest req = FinishApplicationMasterRequest.NewInstance(FinalApplicationStatus .Succeeded, string.Empty, string.Empty); am.UnregisterAppAttempt(req, true); am.WaitForState(RMAppAttemptState.Finishing); nm.NodeHeartbeat(am.GetApplicationAttemptId(), 1, ContainerState.Complete); am.WaitForState(RMAppAttemptState.Finished); rm.WaitForState(rmApp.GetApplicationId(), RMAppState.Finished); }
/// <exception cref="System.Exception"/> public virtual void TestFinishApplicationMasterBeforeRegistering() { MockRM rm = new MockRM(conf); try { rm.Start(); // Register node1 MockNM nm1 = rm.RegisterNode("127.0.0.1:1234", 6 * Gb); // Submit an application RMApp app1 = rm.SubmitApp(2048); MockAM am1 = MockRM.LaunchAM(app1, rm, nm1); FinishApplicationMasterRequest req = FinishApplicationMasterRequest.NewInstance(FinalApplicationStatus .Failed, string.Empty, string.Empty); try { am1.UnregisterAppAttempt(req, false); NUnit.Framework.Assert.Fail("ApplicationMasterNotRegisteredException should be thrown" ); } catch (ApplicationMasterNotRegisteredException e) { NUnit.Framework.Assert.IsNotNull(e); NUnit.Framework.Assert.IsNotNull(e.Message); NUnit.Framework.Assert.IsTrue(e.Message.Contains("Application Master is trying to unregister before registering for:" )); } catch (Exception) { NUnit.Framework.Assert.Fail("ApplicationMasterNotRegisteredException should be thrown" ); } am1.RegisterAppAttempt(); am1.UnregisterAppAttempt(req, false); am1.WaitForState(RMAppAttemptState.Finishing); } finally { if (rm != null) { rm.Stop(); } } }
// Test Kill an app while the app is finishing in the meanwhile. /// <exception cref="System.Exception"/> public virtual void TestKillFinishingApp() { // this dispatcher ignores RMAppAttemptEventType.KILL event Dispatcher dispatcher = new _AsyncDispatcher_654(); MockRM rm1 = new _MockRM_677(dispatcher, conf); rm1.Start(); MockNM nm1 = new MockNM("127.0.0.1:1234", 8192, rm1.GetResourceTrackerService()); nm1.RegisterNode(); RMApp app1 = rm1.SubmitApp(200); MockAM am1 = MockRM.LaunchAndRegisterAM(app1, rm1, nm1); rm1.KillApp(app1.GetApplicationId()); FinishApplicationMasterRequest req = FinishApplicationMasterRequest.NewInstance(FinalApplicationStatus .Succeeded, string.Empty, string.Empty); am1.UnregisterAppAttempt(req, true); rm1.WaitForState(am1.GetApplicationAttemptId(), RMAppAttemptState.Finishing); nm1.NodeHeartbeat(am1.GetApplicationAttemptId(), 1, ContainerState.Complete); rm1.WaitForState(am1.GetApplicationAttemptId(), RMAppAttemptState.Finished); rm1.WaitForState(app1.GetApplicationId(), RMAppState.Finished); }
// Expected // provide main method so this class can act as AM /// <exception cref="System.Exception"/> public static void Main(string[] args) { if (args[0].Equals("success")) { ApplicationMasterProtocol client = ClientRMProxy.CreateRMProxy <ApplicationMasterProtocol >(conf); client.RegisterApplicationMaster(RegisterApplicationMasterRequest.NewInstance(NetUtils .GetHostname(), -1, string.Empty)); Sharpen.Thread.Sleep(1000); FinishApplicationMasterResponse resp = client.FinishApplicationMaster(FinishApplicationMasterRequest .NewInstance(FinalApplicationStatus.Succeeded, "success", null)); NUnit.Framework.Assert.IsTrue(resp.GetIsUnregistered()); System.Environment.Exit(0); } else { System.Environment.Exit(1); } }
protected internal virtual void DoUnregistration() { FinalApplicationStatus finishState = FinalApplicationStatus.Undefined; JobImpl jobImpl = (JobImpl)job; if (jobImpl.GetInternalState() == JobStateInternal.Succeeded) { finishState = FinalApplicationStatus.Succeeded; } else { if (jobImpl.GetInternalState() == JobStateInternal.Killed || (jobImpl.GetInternalState () == JobStateInternal.Running && isSignalled)) { finishState = FinalApplicationStatus.Killed; } else { if (jobImpl.GetInternalState() == JobStateInternal.Failed || jobImpl.GetInternalState () == JobStateInternal.Error) { finishState = FinalApplicationStatus.Failed; } } } StringBuilder sb = new StringBuilder(); foreach (string s in job.GetDiagnostics()) { sb.Append(s).Append("\n"); } Log.Info("Setting job diagnostics to " + sb.ToString()); string historyUrl = MRWebAppUtil.GetApplicationWebURLOnJHSWithScheme(GetConfig(), context.GetApplicationID()); Log.Info("History url is " + historyUrl); FinishApplicationMasterRequest request = FinishApplicationMasterRequest.NewInstance (finishState, sb.ToString(), historyUrl); try { while (true) { FinishApplicationMasterResponse response = scheduler.FinishApplicationMaster(request ); if (response.GetIsUnregistered()) { // When excepting ClientService, other services are already stopped, // it is safe to let clients know the final states. ClientService // should wait for some time so clients have enough time to know the // final states. MRAppMaster.RunningAppContext raContext = (MRAppMaster.RunningAppContext)context; raContext.MarkSuccessfulUnregistration(); break; } Log.Info("Waiting for application to be successfully unregistered."); Sharpen.Thread.Sleep(rmPollInterval); } } catch (ApplicationMasterNotRegisteredException) { // RM might have restarted or failed over and so lost the fact that AM had // registered before. Register(); DoUnregistration(); } }