Author: mahadev
Date: Tue May 10 21:25:15 2011
New Revision: 1101651

URL: http://svn.apache.org/viewvc?rev=1101651&view=rev
Log:
Propagate error back to client in case of a job submission failure (mahadev)

Modified:
    hadoop/mapreduce/branches/MR-279/CHANGES.txt
    
hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/AMTracker.java
    
hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/ApplicationMasterInfo.java
    
hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/ApplicationsManagerImpl.java
    
hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java
    
hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fifo/FifoScheduler.java
    
hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestApplicationMasterExpiry.java

Modified: hadoop/mapreduce/branches/MR-279/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/CHANGES.txt?rev=1101651&r1=1101650&r2=1101651&view=diff
==============================================================================
--- hadoop/mapreduce/branches/MR-279/CHANGES.txt (original)
+++ hadoop/mapreduce/branches/MR-279/CHANGES.txt Tue May 10 21:25:15 2011
@@ -4,6 +4,8 @@ Trunk (unreleased changes)
 
   MAPREDUCE-279
     
+    Propagate error back to client in case of a job submission failure 
(mahadev)
+    
     MAPREDUCE-2480: MR App should not depend on hard coded version of shuffle 
(luke lu via mahadev)
 
     Fix NM to use multiple disks for local files and the userlogs. (vinodkv)

Modified: 
hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/AMTracker.java
URL: 
http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/AMTracker.java?rev=1101651&r1=1101650&r2=1101651&view=diff
==============================================================================
--- 
hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/AMTracker.java
 (original)
+++ 
hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/AMTracker.java
 Tue May 10 21:25:15 2011
@@ -223,10 +223,27 @@ public class AMTracker extends AbstractS
     synchronized(applications) {
       applications.put(applicationMaster.getApplicationID(), 
applicationMaster);
     }
+    
+  }
+  
+  public void runApplication(ApplicationId applicationId) {
+    ApplicationMasterInfo masterInfo = null;
+    synchronized (applications) {
+      masterInfo = applications.get(applicationId);
+    }
     rmContext.getDispatcher().getSyncHandler().handle(new 
ASMEvent<ApplicationEventType>(
-        ApplicationEventType.ALLOCATE, applicationMaster));
-   
+        ApplicationEventType.ALLOCATE, masterInfo));
+    
   }
+  
+  public void finishNonRunnableApplication(ApplicationId applicationId) {
+    ApplicationMasterInfo masterInfo = null;
+    synchronized (applications) {
+      masterInfo = applications.get(applicationId);
+    }
+    rmContext.getDispatcher().getSyncHandler().handle(new 
ASMEvent<ApplicationEventType>(
+        ApplicationEventType.FAILED, masterInfo));
+   }
 
   public void finish(ApplicationId application) {
     ApplicationMasterInfo masterInfo = null;

Modified: 
hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/ApplicationMasterInfo.java
URL: 
http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/ApplicationMasterInfo.java?rev=1101651&r1=1101650&r2=1101651&view=diff
==============================================================================
--- 
hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/ApplicationMasterInfo.java
 (original)
+++ 
hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/ApplicationMasterInfo.java
 Tue May 10 21:25:15 2011
@@ -94,6 +94,9 @@ public class ApplicationMasterInfo imple
   .addTransition(ApplicationState.PENDING, ApplicationState.ALLOCATING,
   ApplicationEventType.ALLOCATE, allocateTransition)
   
+  .addTransition(ApplicationState.PENDING, ApplicationState.FAILED,
+  ApplicationEventType.FAILED)
+  
   .addTransition(ApplicationState.PENDING, ApplicationState.ALLOCATING, 
       ApplicationEventType.RECOVER, allocateTransition)
   

Modified: 
hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/ApplicationsManagerImpl.java
URL: 
http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/ApplicationsManagerImpl.java?rev=1101651&r1=1101650&r2=1101651&view=diff
==============================================================================
--- 
hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/ApplicationsManagerImpl.java
 (original)
+++ 
hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/ApplicationsManagerImpl.java
 Tue May 10 21:25:15 2011
@@ -177,8 +177,21 @@ public class ApplicationsManagerImpl ext
 
     context.setQueue(context.getQueue() == null ? "default" : 
context.getQueue());
     context.setApplicationName(context.getApplicationName() == null ? "N/A" : 
context.getApplicationName());
-
     amTracker.addMaster(user, context, clientTokenStr);
+    ApplicationMasterInfo masterInfo = amTracker.get(applicationId);
+    /** this can throw so we need to call it synchronously to let the client
+     * know as soon as it submits. For backwards compatibility we cannot make 
+     * it asynchronous
+     */
+    try {
+      scheduler.addApplication(applicationId, masterInfo.getMaster(), user, 
masterInfo.getQueue(),
+          context.getPriority(), masterInfo.getStore());
+    } catch(IOException io) {
+      LOG.info("Failed to submit application " + applicationId, io);
+      amTracker.finishNonRunnableApplication(applicationId);
+      throw io;
+    }
+    amTracker.runApplication(applicationId);
     // TODO this should happen via dispatcher. should move it out to scheudler
     // negotiator.
     LOG.info("Application with id " + applicationId.getId() + " submitted by 
user " + 

Modified: 
hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java
URL: 
http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java?rev=1101651&r1=1101650&r2=1101651&view=diff
==============================================================================
--- 
hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java
 (original)
+++ 
hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java
 Tue May 10 21:25:15 2011
@@ -283,9 +283,9 @@ implements ResourceScheduler, CapacitySc
       // Inform all NodeManagers about completion of application
       finishedApplication(applicationId, 
           application.getAllNodesForApplication());
+      // Remove from our data-structure
+      applications.remove(applicationId);
     }
-    // Remove from our data-structure
-    applications.remove(applicationId);
   }
 
   @Override
@@ -466,16 +466,9 @@ implements ResourceScheduler, CapacitySc
   public synchronized void handle(ASMEvent<ApplicationTrackerEventType> event) 
{
     switch(event.getType()) {
     case ADD:
-      try {
-        addApplication(event.getAppContext().getApplicationID(), 
event.getAppContext().getMaster(),
-            event.getAppContext().getUser(), event.getAppContext().getQueue(),
-            event.getAppContext().getSubmissionContext().getPriority(),
-            event.getAppContext().getStore());
-      } catch(IOException ie) {
-        LOG.error("Error in adding an application to the scheduler", ie);
-        //TODO do proper error handling to shutdown the Resource Manager is we 
-        // are not able to handle this.
-      }
+      /** ignore add since its called sychronously from the applications 
manager 
+       * 
+       */
       break;
     case REMOVE:
       try {
@@ -488,6 +481,9 @@ implements ResourceScheduler, CapacitySc
       break;
     case EXPIRE:
       try {
+        /** do not remove the application. Just do everything else exception 
+         * removing the application
+         */
         removeApplication(event.getAppContext().getApplicationID(), false);
       } catch(IOException ie) {
         LOG.error("Error in removing application", ie);

Modified: 
hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fifo/FifoScheduler.java
URL: 
http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fifo/FifoScheduler.java?rev=1101651&r1=1101650&r2=1101651&view=diff
==============================================================================
--- 
hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fifo/FifoScheduler.java
 (original)
+++ 
hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fifo/FifoScheduler.java
 Tue May 10 21:25:15 2011
@@ -258,9 +258,9 @@ public class FifoScheduler implements Re
       // Let the cluster know that the applications are done
       finishedApplication(applicationId, 
           application.getAllNodesForApplication());
+      // Remove the application
+      applications.remove(applicationId);
     }
-    // Remove the application
-    applications.remove(applicationId);
   }
 
   /**
@@ -519,16 +519,9 @@ public class FifoScheduler implements Re
   public synchronized void handle(ASMEvent<ApplicationTrackerEventType> event) 
{
     switch(event.getType()) {
     case ADD:
-      try {
-        addApplication(event.getAppContext().getApplicationID(), 
event.getAppContext().getMaster(), 
-            event.getAppContext().getUser(),
-            event.getAppContext().getQueue(), 
event.getAppContext().getSubmissionContext().getPriority()
-            , event.getAppContext().getStore());
-      } catch(IOException ie) {
-        LOG.error("Unable to add application " + 
event.getAppContext().getApplicationID(), ie);
-        /** this is fatal we are not able to add applications for scheduling 
**/
-        //TODO handle it later.
-      }
+      /**
+       * ignore add since its called syncronously from applications manager.
+       */
       break;
     case REMOVE:
       try {

Modified: 
hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestApplicationMasterExpiry.java
URL: 
http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestApplicationMasterExpiry.java?rev=1101651&r1=1101650&r2=1101651&view=diff
==============================================================================
--- 
hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestApplicationMasterExpiry.java
 (original)
+++ 
hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestApplicationMasterExpiry.java
 Tue May 10 21:25:15 2011
@@ -144,6 +144,7 @@ public class TestApplicationMasterExpiry
         "dummy", 
         context, "dummytoken");
     ApplicationMasterInfo masterInfo = tracker.get(context.getApplicationId());
+    tracker.runApplication(context.getApplicationId());
     this.context.getDispatcher().getEventHandler().handle(
         new ASMEvent<ApplicationEventType>(ApplicationEventType.ALLOCATED, 
masterInfo));
     waitForState(masterInfo, ApplicationState.LAUNCHING);


Reply via email to