Return-Path: Delivered-To: apmail-hadoop-core-commits-archive@www.apache.org Received: (qmail 23202 invoked from network); 8 Aug 2008 23:40:34 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 8 Aug 2008 23:40:34 -0000 Received: (qmail 70698 invoked by uid 500); 8 Aug 2008 23:40:33 -0000 Delivered-To: apmail-hadoop-core-commits-archive@hadoop.apache.org Received: (qmail 70663 invoked by uid 500); 8 Aug 2008 23:40:33 -0000 Mailing-List: contact core-commits-help@hadoop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: core-dev@hadoop.apache.org Delivered-To: mailing list core-commits@hadoop.apache.org Received: (qmail 70654 invoked by uid 99); 8 Aug 2008 23:40:33 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 08 Aug 2008 16:40:33 -0700 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 08 Aug 2008 23:39:37 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 281552388988; Fri, 8 Aug 2008 16:39:34 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r684143 - in /hadoop/core/trunk: CHANGES.txt src/mapred/org/apache/hadoop/mapred/JobInProgress.java src/mapred/org/apache/hadoop/mapred/JobTracker.java Date: Fri, 08 Aug 2008 23:39:33 -0000 To: core-commits@hadoop.apache.org From: omalley@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20080808233934.281552388988@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: omalley Date: Fri Aug 8 16:39:33 2008 New Revision: 684143 URL: http://svn.apache.org/viewvc?rev=684143&view=rev Log: HADOOP-3864. Prevent the JobTracker from locking up when a job is being initialized. (acmurthy via omalley) Modified: hadoop/core/trunk/CHANGES.txt hadoop/core/trunk/src/mapred/org/apache/hadoop/mapred/JobInProgress.java hadoop/core/trunk/src/mapred/org/apache/hadoop/mapred/JobTracker.java Modified: hadoop/core/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/core/trunk/CHANGES.txt?rev=684143&r1=684142&r2=684143&view=diff ============================================================================== --- hadoop/core/trunk/CHANGES.txt (original) +++ hadoop/core/trunk/CHANGES.txt Fri Aug 8 16:39:33 2008 @@ -165,6 +165,9 @@ HADOOP-3863. Use a thread-local string encoder rather than a static one that is protected by a lock. (acmurthy via omalley) + HADOOP-3864. Prevent the JobTracker from locking up when a job is being + initialized. (acmurthy via omalley) + BUG FIXES HADOOP-3563. Refactor the distributed upgrade code so that it is Modified: hadoop/core/trunk/src/mapred/org/apache/hadoop/mapred/JobInProgress.java URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/mapred/org/apache/hadoop/mapred/JobInProgress.java?rev=684143&r1=684142&r2=684143&view=diff ============================================================================== --- hadoop/core/trunk/src/mapred/org/apache/hadoop/mapred/JobInProgress.java (original) +++ hadoop/core/trunk/src/mapred/org/apache/hadoop/mapred/JobInProgress.java Fri Aug 8 16:39:33 2008 @@ -30,6 +30,7 @@ import java.util.Set; import java.util.TreeMap; import java.util.Vector; +import java.util.concurrent.atomic.AtomicBoolean; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -122,7 +123,7 @@ long finishTime; private JobConf conf; - boolean tasksInited = false; + AtomicBoolean tasksInited = new AtomicBoolean(false); private LocalFileSystem localFs; private JobID jobId; @@ -297,12 +298,22 @@ } return cache; } + + /** + * Check if the job has been initialized. + * @return true if the job has been initialized, + * false otherwise + */ + public boolean inited() { + return tasksInited.get(); + } + /** * Construct the splits, etc. This is invoked from an async * thread so that split-computation doesn't block anyone. */ public synchronized void initTasks() throws IOException { - if (tasksInited) { + if (tasksInited.get()) { return; } @@ -341,7 +352,7 @@ status.setMapProgress(1.0f); status.setReduceProgress(1.0f); status.setRunState(JobStatus.SUCCEEDED); - tasksInited = true; + tasksInited.set(true); JobHistory.JobInfo.logStarted(profile.getJobID(), System.currentTimeMillis(), 0, 0); JobHistory.JobInfo.logFinished(profile.getJobID(), @@ -375,7 +386,7 @@ } this.status = new JobStatus(status.getJobID(), 0.0f, 0.0f, JobStatus.RUNNING); - tasksInited = true; + tasksInited.set(true); JobHistory.JobInfo.logStarted(profile.getJobID(), System.currentTimeMillis(), numMapTasks, numReduceTasks); } @@ -663,7 +674,7 @@ int clusterSize, int numUniqueHosts ) throws IOException { - if (!tasksInited) { + if (!tasksInited.get()) { LOG.info("Cannot create task split for " + profile.getJobID()); return null; } @@ -698,7 +709,7 @@ int clusterSize, int numUniqueHosts ) throws IOException { - if (!tasksInited) { + if (!tasksInited.get()) { LOG.info("Cannot create task split for " + profile.getJobID()); return null; } Modified: hadoop/core/trunk/src/mapred/org/apache/hadoop/mapred/JobTracker.java URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/mapred/org/apache/hadoop/mapred/JobTracker.java?rev=684143&r1=684142&r2=684143&view=diff ============================================================================== --- hadoop/core/trunk/src/mapred/org/apache/hadoop/mapred/JobTracker.java (original) +++ hadoop/core/trunk/src/mapred/org/apache/hadoop/mapred/JobTracker.java Fri Aug 8 16:39:33 2008 @@ -1584,7 +1584,9 @@ public synchronized void killJob(JobID jobid) { JobInProgress job = jobs.get(jobid); - job.kill(); + if (job.inited()) { + job.kill(); + } } public synchronized JobProfile getJobProfile(JobID jobid) { @@ -1653,6 +1655,8 @@ } } + TaskCompletionEvent[] EMPTY_EVENTS = new TaskCompletionEvent[0]; + /* * Returns a list of TaskCompletionEvent for the given job, * starting from fromEventId. @@ -1660,11 +1664,13 @@ */ public synchronized TaskCompletionEvent[] getTaskCompletionEvents( JobID jobid, int fromEventId, int maxEvents) throws IOException{ - TaskCompletionEvent[] events; + TaskCompletionEvent[] events = EMPTY_EVENTS; JobInProgress job = this.jobs.get(jobid); if (null != job) { - events = job.getTaskCompletionEvents(fromEventId, maxEvents); + if (job.inited()) { + events = job.getTaskCompletionEvents(fromEventId, maxEvents); + } } else { events = completedJobStatusStore.readJobTaskCompletionEvents(jobid, fromEventId, maxEvents);