MAPREDUCE-2727. Fix divide-by-zero error in SleepJob for sleepCount equals 0. Contributed by Jeffrey Naisbitt.


git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/MR-279@1157423 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/mapreduce/CHANGES.txt b/mapreduce/CHANGES.txt
index 06afe07..dc3191c 100644
--- a/mapreduce/CHANGES.txt
+++ b/mapreduce/CHANGES.txt
@@ -4,6 +4,9 @@
 
   MAPREDUCE-279
 
+    MAPREDUCE-2727. Fix divide-by-zero error in SleepJob for sleepCount equals
+    0. (Jeffrey Naisbitt via acmurthy)
+
     MAPREDUCE-2839. Fixed TokenCache to get delegation tokens using both new
     and old apis. (Siddharth Seth via acmurthy)
 
diff --git a/mapreduce/mr-client/hadoop-mapreduce-client-jobclient/src/test/java/org/apache/hadoop/SleepJob.java b/mapreduce/mr-client/hadoop-mapreduce-client-jobclient/src/test/java/org/apache/hadoop/SleepJob.java
index 2d9e637..b9f4a67 100644
--- a/mapreduce/mr-client/hadoop-mapreduce-client-jobclient/src/test/java/org/apache/hadoop/SleepJob.java
+++ b/mapreduce/mr-client/hadoop-mapreduce-client-jobclient/src/test/java/org/apache/hadoop/SleepJob.java
@@ -108,6 +108,9 @@
 
         public boolean nextKeyValue()
             throws IOException {
+          if (count == 0) {
+            return false;
+          }
           key = new IntWritable();
           key.set(emitCount);
           int emit = emitPerMapTask / count;
@@ -123,7 +126,7 @@
         public IntWritable getCurrentValue() { return value; }
         public void close() throws IOException { }
         public float getProgress() throws IOException {
-          return records / ((float)count);
+          return count == 0 ? 100 : records / ((float)count);
         }
       };
     }
@@ -140,7 +143,7 @@
       Configuration conf = context.getConfiguration();
       this.mapSleepCount =
         conf.getInt(MAP_SLEEP_COUNT, mapSleepCount);
-      this.mapSleepDuration =
+      this.mapSleepDuration = mapSleepCount == 0 ? 0 :
         conf.getLong(MAP_SLEEP_TIME , 100) / mapSleepCount;
     }
 
@@ -177,7 +180,7 @@
       Configuration conf = context.getConfiguration();
       this.reduceSleepCount =
         conf.getInt(REDUCE_SLEEP_COUNT, reduceSleepCount);
-      this.reduceSleepDuration =
+      this.reduceSleepDuration = reduceSleepCount == 0 ? 0 : 
         conf.getLong(REDUCE_SLEEP_TIME , 100) / reduceSleepCount;
     }
 
@@ -239,7 +242,7 @@
       ToolRunner.printGenericCommandUsage(System.err);
       return 2;
     }
-    
+
     int numMapper = 1, numReducer = 1;
     long mapSleepTime = 100, reduceSleepTime = 100, recSleepTime = 100;
     int mapSleepCount = 1, reduceSleepCount = 1;
diff --git a/mapreduce/src/test/mapred/org/apache/hadoop/mapreduce/SleepJob.java b/mapreduce/src/test/mapred/org/apache/hadoop/mapreduce/SleepJob.java
index f6ce1cc..92add20 100644
--- a/mapreduce/src/test/mapred/org/apache/hadoop/mapreduce/SleepJob.java
+++ b/mapreduce/src/test/mapred/org/apache/hadoop/mapreduce/SleepJob.java
@@ -97,6 +97,9 @@
 
         public boolean nextKeyValue()
             throws IOException {
+          if (count == 0) {
+            return false;
+          }
           key = new IntWritable();
           key.set(emitCount);
           int emit = emitPerMapTask / count;
@@ -112,7 +115,7 @@
         public IntWritable getCurrentValue() { return value; }
         public void close() throws IOException { }
         public float getProgress() throws IOException {
-          return records / ((float)count);
+          return count == 0 ? 100 : records / ((float)count);
         }
       };
     }
@@ -129,7 +132,7 @@
       Configuration conf = context.getConfiguration();
       this.mapSleepCount =
         conf.getInt(MAP_SLEEP_COUNT, mapSleepCount);
-      this.mapSleepDuration =
+      this.mapSleepDuration = mapSleepCount == 0 ? 0 :
         conf.getLong(MAP_SLEEP_TIME , 100) / mapSleepCount;
     }
 
@@ -166,7 +169,7 @@
       Configuration conf = context.getConfiguration();
       this.reduceSleepCount =
         conf.getInt(REDUCE_SLEEP_COUNT, reduceSleepCount);
-      this.reduceSleepDuration =
+      this.reduceSleepDuration = reduceSleepCount == 0 ? 0 : 
         conf.getLong(REDUCE_SLEEP_TIME , 100) / reduceSleepCount;
     }