From ca139a3f87a0e247a3fd4708650d364629137f0c Mon Sep 17 00:00:00 2001 From: Varun Saxena Date: Sat, 13 Aug 2016 00:27:17 +0530 Subject: [PATCH] YARN-5476. Non existent application reported as ACCEPTED by YarnClientImpl (Junping Du via Varun Saxena) --- .../resourcemanager/rmapp/RMAppImpl.java | 16 +++++++------- .../rmapp/TestRMAppTransitions.java | 21 ++++++++++++------- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java index 34672dbe133..6b148479128 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java @@ -843,8 +843,9 @@ public void recover(RMState state) { this.startTime = appState.getStartTime(); this.callerContext = appState.getCallerContext(); - // send the ATS create Event - sendATSCreateEvent(this, this.startTime); + // send the ATS create Event during RM recovery. + // NOTE: it could be duplicated with events sent before RM get restarted. + sendATSCreateEvent(); for(int i=0; i NEW_SAVING event RMAppEventType.START RMAppEvent event = new RMAppEvent(application.getApplicationId(), RMAppEventType.START); application.handle(event); assertStartTimeSet(application); assertAppState(RMAppState.NEW_SAVING, application); + // verify sendATSCreateEvent() is not get called during + // RMAppNewlySavingTransition. + verify(publisher, times(0)).appCreated(eq(application), anyLong()); return application; } protected RMApp testCreateAppSubmittedNoRecovery( ApplicationSubmissionContext submissionContext) throws IOException { - RMApp application = testCreateAppNewSaving(submissionContext); - // NEW_SAVING => SUBMITTED event RMAppEventType.APP_SAVED + RMApp application = testCreateAppNewSaving(submissionContext); + // NEW_SAVING => SUBMITTED event RMAppEventType.APP_NEW_SAVED RMAppEvent event = - new RMAppEvent(application.getApplicationId(), RMAppEventType.APP_NEW_SAVED); + new RMAppEvent(application.getApplicationId(), + RMAppEventType.APP_NEW_SAVED); application.handle(event); assertStartTimeSet(application); assertAppState(RMAppState.SUBMITTED, application); + // verify sendATSCreateEvent() is get called during + // AddApplicationToSchedulerTransition. + verify(publisher).appCreated(eq(application), anyLong()); return application; } @@ -403,7 +411,6 @@ protected RMApp testCreateAppSubmittedRecovery( RMAppEvent event = new RMAppRecoverEvent(application.getApplicationId(), state); - application.handle(event); assertStartTimeSet(application); assertAppState(RMAppState.SUBMITTED, application); @@ -413,7 +420,7 @@ protected RMApp testCreateAppSubmittedRecovery( protected RMApp testCreateAppAccepted( ApplicationSubmissionContext submissionContext) throws IOException { RMApp application = testCreateAppSubmittedNoRecovery(submissionContext); - // SUBMITTED => ACCEPTED event RMAppEventType.APP_ACCEPTED + // SUBMITTED => ACCEPTED event RMAppEventType.APP_ACCEPTED RMAppEvent event = new RMAppEvent(application.getApplicationId(), RMAppEventType.APP_ACCEPTED); @@ -425,7 +432,7 @@ protected RMApp testCreateAppAccepted( protected RMApp testCreateAppRunning( ApplicationSubmissionContext submissionContext) throws IOException { - RMApp application = testCreateAppAccepted(submissionContext); + RMApp application = testCreateAppAccepted(submissionContext); // ACCEPTED => RUNNING event RMAppEventType.ATTEMPT_REGISTERED RMAppEvent event = new RMAppEvent(application.getApplicationId(),