Return-Path: Delivered-To: apmail-hadoop-mapreduce-commits-archive@minotaur.apache.org Received: (qmail 82090 invoked from network); 30 Jan 2010 02:57:26 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 30 Jan 2010 02:57:26 -0000 Received: (qmail 67865 invoked by uid 500); 30 Jan 2010 02:57:26 -0000 Delivered-To: apmail-hadoop-mapreduce-commits-archive@hadoop.apache.org Received: (qmail 67799 invoked by uid 500); 30 Jan 2010 02:57:26 -0000 Mailing-List: contact mapreduce-commits-help@hadoop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: mapreduce-dev@hadoop.apache.org Delivered-To: mailing list mapreduce-commits@hadoop.apache.org Received: (qmail 67789 invoked by uid 99); 30 Jan 2010 02:57:25 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 30 Jan 2010 02:57:25 +0000 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; Sat, 30 Jan 2010 02:57:23 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id C309C23888D1; Sat, 30 Jan 2010 02:57:01 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r904717 - in /hadoop/mapreduce/trunk: CHANGES.txt src/test/mapred/org/apache/hadoop/mapred/TestTaskTrackerBlacklisting.java Date: Sat, 30 Jan 2010 02:57:01 -0000 To: mapreduce-commits@hadoop.apache.org From: cdouglas@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20100130025701.C309C23888D1@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: cdouglas Date: Sat Jan 30 02:57:01 2010 New Revision: 904717 URL: http://svn.apache.org/viewvc?rev=904717&view=rev Log: MAPREDUCE-1412. Fix timer granularity issue causing failures in TestTaskTrackerBlacklisting. Modified: hadoop/mapreduce/trunk/CHANGES.txt hadoop/mapreduce/trunk/src/test/mapred/org/apache/hadoop/mapred/TestTaskTrackerBlacklisting.java Modified: hadoop/mapreduce/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/mapreduce/trunk/CHANGES.txt?rev=904717&r1=904716&r2=904717&view=diff ============================================================================== --- hadoop/mapreduce/trunk/CHANGES.txt (original) +++ hadoop/mapreduce/trunk/CHANGES.txt Sat Jan 30 02:57:01 2010 @@ -1198,3 +1198,6 @@ MAPREDUCE-1369. JUnit tests should never depend on anything in conf (Anatoli Fomenko via cos) + + MAPREDUCE-1412. Fix timer granularity issue causing failures in + TestTaskTrackerBlacklisting. (cdouglas) Modified: hadoop/mapreduce/trunk/src/test/mapred/org/apache/hadoop/mapred/TestTaskTrackerBlacklisting.java URL: http://svn.apache.org/viewvc/hadoop/mapreduce/trunk/src/test/mapred/org/apache/hadoop/mapred/TestTaskTrackerBlacklisting.java?rev=904717&r1=904716&r2=904717&view=diff ============================================================================== --- hadoop/mapreduce/trunk/src/test/mapred/org/apache/hadoop/mapred/TestTaskTrackerBlacklisting.java (original) +++ hadoop/mapreduce/trunk/src/test/mapred/org/apache/hadoop/mapred/TestTaskTrackerBlacklisting.java Sat Jan 30 02:57:01 2010 @@ -20,8 +20,8 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collection; +import java.util.EnumSet; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.Map.Entry; @@ -53,22 +53,19 @@ private static short responseId; - private static HashSet nodeUnHealthyReasonSet = - new HashSet(); + private static final Set nodeUnHealthyReasonSet = + EnumSet.of(ReasonForBlackListing.NODE_UNHEALTHY); - private static HashSet exceedsFailuresReasonSet = - new HashSet(); + private static final Set exceedsFailuresReasonSet = + EnumSet.of(ReasonForBlackListing.EXCEEDING_FAILURES); - private static HashSet unhealthyAndExceedsFailure = - new HashSet(); + private static final Set + unhealthyAndExceedsFailure = EnumSet.of( + ReasonForBlackListing.NODE_UNHEALTHY, + ReasonForBlackListing.EXCEEDING_FAILURES); - static { - nodeUnHealthyReasonSet.add(ReasonForBlackListing.NODE_UNHEALTHY); - exceedsFailuresReasonSet.add(ReasonForBlackListing.EXCEEDING_FAILURES); - unhealthyAndExceedsFailure.add(ReasonForBlackListing.NODE_UNHEALTHY); - unhealthyAndExceedsFailure.add(ReasonForBlackListing.EXCEEDING_FAILURES); - } - private static final long aDay = 24 * 60 * 60 * 1000; + // Add extra millisecond where timer granularity is too coarse + private static final long aDay = 24 * 60 * 60 * 1000 + 1; private static class FakeJobTrackerClock extends Clock { boolean jumpADay = false; @@ -186,8 +183,8 @@ checkReasonForBlackListing(hosts[0], exceedsFailuresReasonSet); clock.jumpADay = true; sendHeartBeat(null, false); - assertEquals("Tracker 1 still blacklisted after a day", jobTracker - .getBlacklistedTrackerCount(), 0); + assertEquals("Tracker 1 still blacklisted after a day", 0, jobTracker + .getBlacklistedTrackerCount()); //Cleanup the blacklisted trackers. //Tracker is black listed due to failure count, so clock has to be //forwarded by a day. @@ -207,8 +204,8 @@ //white list tracker so the further test cases can be //using trackers. sendHeartBeat(status, false); - assertEquals("Trackers still blacklisted after healthy report", jobTracker - .getBlacklistedTrackerCount(), 0); + assertEquals("Trackers still blacklisted after healthy report", 0, + jobTracker.getBlacklistedTrackerCount()); } @@ -265,15 +262,15 @@ public void testBlackListingWithFailuresAndHealthStatus() throws Exception { runBlackListingJob(jobTracker, trackers); - assertEquals("Tracker 1 not blacklisted", jobTracker - .getBlacklistedTrackerCount(), 1); + assertEquals("Tracker 1 not blacklisted", 1, + jobTracker.getBlacklistedTrackerCount()); checkReasonForBlackListing(hosts[0], exceedsFailuresReasonSet); TaskTrackerHealthStatus status = getUnhealthyNodeStatus("ERROR"); sendHeartBeat(status, false); - assertEquals("All trackers not blacklisted", - jobTracker.getBlacklistedTrackerCount(), 3); + assertEquals("All trackers not blacklisted", 3, + jobTracker.getBlacklistedTrackerCount()); checkReasonForBlackListing(hosts[0], unhealthyAndExceedsFailure); checkReasonForBlackListing(hosts[1], nodeUnHealthyReasonSet); checkReasonForBlackListing(hosts[2], nodeUnHealthyReasonSet); @@ -281,8 +278,8 @@ clock.jumpADay = true; sendHeartBeat(status, false); - assertEquals("All trackers not blacklisted", - jobTracker.getBlacklistedTrackerCount(), 3); + assertEquals("All trackers not blacklisted", 3, + jobTracker.getBlacklistedTrackerCount()); for (String host : hosts) { checkReasonForBlackListing(host, nodeUnHealthyReasonSet); @@ -290,8 +287,8 @@ //clear blacklisted trackers due to node health reasons. sendHeartBeat(null, false); - assertEquals("All trackers not white listed", - jobTracker.getBlacklistedTrackerCount(), 0); + assertEquals("All trackers not white listed", 0, + jobTracker.getBlacklistedTrackerCount()); //Clear the blacklisted trackers due to failures. clock.jumpADay = false; } @@ -302,8 +299,8 @@ TaskTrackerHealthStatus status = getUnhealthyNodeStatus(error); sendHeartBeat(status, false); - assertEquals("All trackers not blacklisted", jobTracker - .getBlacklistedTrackerCount(), 3); + assertEquals("All trackers not blacklisted", 3, + jobTracker.getBlacklistedTrackerCount()); checkReasonForBlackListing(hosts[0], nodeUnHealthyReasonSet); checkReasonForBlackListing(hosts[1], nodeUnHealthyReasonSet); @@ -312,8 +309,8 @@ //Replace new line as we are adding new line //in getFaultReport assertEquals("Blacklisting reason string not correct for host " + i, - jobTracker.getFaultReport(hosts[i]).replace("\n", ""), - error); + error, + jobTracker.getFaultReport(hosts[i]).replace("\n", "")); } status.setNodeHealthy(false); status.setLastReported(System.currentTimeMillis()); @@ -326,8 +323,8 @@ //Replace new line as we are adding new line //in getFaultReport assertEquals("Blacklisting reason string not correct for host " + i, - jobTracker.getFaultReport(hosts[i]).replace("\n", ""), - error1); + error1, + jobTracker.getFaultReport(hosts[i]).replace("\n", "")); } //clear the blacklisted trackers with node health reasons. sendHeartBeat(null, false); @@ -361,14 +358,14 @@ .getNumReservedTaskTrackersForMaps()); assertEquals("Tracker 1 not unreserved for the job 1", 1, job .getNumReservedTaskTrackersForReduces()); - assertEquals("Tracker 1 not blacklisted", jobTracker - .getBlacklistedTrackerCount(), 1); + assertEquals("Tracker 1 not blacklisted", 1, jobTracker + .getBlacklistedTrackerCount()); checkReasonForBlackListing(hosts[0], exceedsFailuresReasonSet); TaskTrackerHealthStatus status = getUnhealthyNodeStatus("ERROR"); sendHeartBeat(status, false); - assertEquals("All trackers not blacklisted", jobTracker - .getBlacklistedTrackerCount(), 3); + assertEquals("All trackers not blacklisted", 3, + jobTracker.getBlacklistedTrackerCount()); checkReasonForBlackListing(hosts[0], unhealthyAndExceedsFailure); checkReasonForBlackListing(hosts[1], nodeUnHealthyReasonSet); @@ -403,8 +400,8 @@ TaskTrackerHealthStatus status = getUnhealthyNodeStatus(errorWithNewLines); // make all tracker unhealthy sendHeartBeat(status, false); - assertEquals("All trackers not blacklisted", jobTracker - .getBlacklistedTrackerCount(), 3); + assertEquals("All trackers not blacklisted", 3, jobTracker + .getBlacklistedTrackerCount()); // Verify the new method .getBlackListedTracker() which is // used by the ClusterStatus to set the list of blacklisted // tracker.