You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by cu...@apache.org on 2007/03/07 23:36:18 UTC
svn commit: r515815 - in /lucene/hadoop/trunk: CHANGES.txt
src/java/org/apache/hadoop/mapred/JobClient.java
src/java/org/apache/hadoop/mapred/JobInProgress.java
Author: cutting
Date: Wed Mar 7 14:36:17 2007
New Revision: 515815
URL: http://svn.apache.org/viewvc?view=rev&rev=515815
Log:
HADOOP-1060. Fix an IndexOutOfBoundsException in the JobTracker that could cause jobs to hang. Contributed by Arun.
Modified:
lucene/hadoop/trunk/CHANGES.txt
lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/JobClient.java
lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/JobInProgress.java
Modified: lucene/hadoop/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/CHANGES.txt?view=diff&rev=515815&r1=515814&r2=515815
==============================================================================
--- lucene/hadoop/trunk/CHANGES.txt (original)
+++ lucene/hadoop/trunk/CHANGES.txt Wed Mar 7 14:36:17 2007
@@ -15,6 +15,10 @@
directory. Also remove dependency on a particular Checkstyle
version number. (tomwhite)
+ 4. HADOOP-1060. Fix an IndexOutOfBoundsException in the JobTracker
+ that could cause jobs to hang. (Arun C Murthy via cutting)
+
+
Release 0.12.0 - 2007-03-02
1. HADOOP-975. Separate stdout and stderr from tasks.
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/JobClient.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/JobClient.java?view=diff&rev=515815&r1=515814&r2=515815
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/JobClient.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/JobClient.java Wed Mar 7 14:36:17 2007
@@ -617,11 +617,14 @@
private static void displayTaskLogs(String taskId, String baseUrl)
throws IOException {
- // Copy tasks's stdout of the JobClient
- getTaskLogs(taskId, new URL(baseUrl+"&filter=stdout"), System.out);
-
- // Copy task's stderr to stderr of the JobClient
- getTaskLogs(taskId, new URL(baseUrl+"&filter=stderr"), System.err);
+ // The tasktracker for a 'failed/killed' job might not be around...
+ if (baseUrl != null) {
+ // Copy tasks's stdout of the JobClient
+ getTaskLogs(taskId, new URL(baseUrl+"&filter=stdout"), System.out);
+
+ // Copy task's stderr to stderr of the JobClient
+ getTaskLogs(taskId, new URL(baseUrl+"&filter=stderr"), System.err);
+ }
}
private static void getTaskLogs(String taskId, URL taskLogUrl,
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/JobInProgress.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/JobInProgress.java?view=diff&rev=515815&r1=515814&r2=515815
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/JobInProgress.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/JobInProgress.java Wed Mar 7 14:36:17 2007
@@ -315,26 +315,29 @@
ttStatus.getHttpPort() + "/tasklog.jsp?plaintext=true&taskid=" +
status.getTaskId() + "&all=true";
}
-
+
+ TaskCompletionEvent taskEvent = null;
if (state == TaskStatus.State.SUCCEEDED) {
- this.taskCompletionEvents.add( new TaskCompletionEvent(
- taskCompletionEventTracker,
- status.getTaskId(),
- tip.idWithinJob(),
- status.getIsMap(),
- TaskCompletionEvent.Status.SUCCEEDED,
- httpTaskLogLocation ));
+ taskEvent = new TaskCompletionEvent(
+ taskCompletionEventTracker,
+ status.getTaskId(),
+ tip.idWithinJob(),
+ status.getIsMap(),
+ TaskCompletionEvent.Status.SUCCEEDED,
+ httpTaskLogLocation
+ );
tip.setSuccessEventNumber(taskCompletionEventTracker);
completedTask(tip, status, metrics);
} else if (state == TaskStatus.State.FAILED ||
state == TaskStatus.State.KILLED) {
- this.taskCompletionEvents.add( new TaskCompletionEvent(
- taskCompletionEventTracker,
- status.getTaskId(),
- tip.idWithinJob(),
- status.getIsMap(),
- TaskCompletionEvent.Status.FAILED,
- httpTaskLogLocation ));
+ taskEvent = new TaskCompletionEvent(
+ taskCompletionEventTracker,
+ status.getTaskId(),
+ tip.idWithinJob(),
+ status.getIsMap(),
+ TaskCompletionEvent.Status.FAILED,
+ httpTaskLogLocation
+ );
// Get the event number for the (possibly) previously successful
// task. If there exists one, then set that status to OBSOLETE
int eventNumber;
@@ -348,9 +351,13 @@
failedTask(tip, status.getTaskId(), status, status.getTaskTracker(),
wasRunning, wasComplete);
}
- }
- taskCompletionEventTracker++;
+ // Add the 'complete' task i.e. successful/failed
+ if (taskEvent != null) {
+ this.taskCompletionEvents.add(taskEvent);
+ taskCompletionEventTracker++;
+ }
+ }
//
// Update JobInProgress status
@@ -936,8 +943,8 @@
return null;
}
- public TaskCompletionEvent[] getTaskCompletionEvents(int fromEventId,
- int maxEvents) {
+ synchronized public TaskCompletionEvent[] getTaskCompletionEvents(
+ int fromEventId, int maxEvents) {
TaskCompletionEvent[] events = TaskCompletionEvent.EMPTY_ARRAY;
if( taskCompletionEvents.size() > fromEventId) {
int actualMax = Math.min(maxEvents,