MAPREDUCE-2141. Add an "extra data" field to Task for use by Mesos.



git-svn-id: https://svn.apache.org/repos/asf/hadoop/mapreduce/trunk@1033804 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/CHANGES.txt b/CHANGES.txt
index 54fa676..c743438 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -23,6 +23,8 @@
 
   IMPROVEMENTS
 
+    MAPREDUCE-2141. Add an "extra data" field to Task for use by Mesos. (matei)
+
     MAPREDUCE-2140. Regenerate fair scheduler design doc PDF. (matei)
 
     MAPREDUCE-1546. Redirect all job pages to corresponding history page
diff --git a/src/java/org/apache/hadoop/mapred/Task.java b/src/java/org/apache/hadoop/mapred/Task.java
index 18367a7..cea47dc 100644
--- a/src/java/org/apache/hadoop/mapred/Task.java
+++ b/src/java/org/apache/hadoop/mapred/Task.java
@@ -44,6 +44,7 @@
 import org.apache.hadoop.fs.LocalDirAllocator;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.fs.FileSystem.Statistics;
+import org.apache.hadoop.io.BytesWritable;
 import org.apache.hadoop.io.DataInputBuffer;
 import org.apache.hadoop.io.RawComparator;
 import org.apache.hadoop.io.Text;
@@ -124,6 +125,11 @@
   protected boolean jobCleanup = false;
   protected boolean jobSetup = false;
   protected boolean taskCleanup = false;
+ 
+  // An opaque data field used to attach extra data to each task. This is used
+  // by the Hadoop scheduler for Mesos to associate a Mesos task ID with each
+  // task and recover these IDs on the TaskTracker.
+  protected BytesWritable extraData = new BytesWritable(); 
   
   //skip ranges based on failed ranges from previous attempts
   private SortedRanges skipRanges = new SortedRanges();
@@ -409,6 +415,7 @@
     out.writeBoolean(writeSkipRecs);
     out.writeBoolean(taskCleanup);
     Text.writeString(out, user);
+    extraData.write(out);
   }
   
   public void readFields(DataInput in) throws IOException {
@@ -433,6 +440,7 @@
       setPhase(TaskStatus.Phase.CLEANUP);
     }
     user = Text.readString(in);
+    extraData.readFields(in);
   }
 
   @Override
@@ -1472,4 +1480,12 @@
       reducer.run(reducerContext);
     } 
   }
+
+  BytesWritable getExtraData() {
+    return extraData;
+  }
+
+  void setExtraData(BytesWritable extraData) {
+    this.extraData = extraData;
+  }
 }