| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package org.apache.hadoop.mapred; |
| |
| import java.io.DataInput; |
| import java.io.DataOutput; |
| import java.io.IOException; |
| |
| import org.apache.hadoop.mapred.TaskStatus; |
| import org.apache.hadoop.mapreduce.TaskID; |
| import org.apache.hadoop.mapreduce.TaskType; |
| import org.apache.hadoop.mapreduce.test.system.TaskInfo; |
| |
| /** |
| * Concrete class to expose out the task related information to the Clients from |
| * the JobTracker. Look at {@link TaskInfo} for further details. |
| */ |
| class TaskInfoImpl implements TaskInfo { |
| |
| private double progress; |
| private TaskID taskID; |
| private int killedAttempts; |
| private int failedAttempts; |
| private int runningAttempts; |
| private TaskStatus[] taskStatus; |
| private boolean setupOrCleanup; |
| private String[] taskTrackers; |
| |
| public TaskInfoImpl() { |
| taskID = new TaskID(); |
| } |
| |
| public TaskInfoImpl( |
| TaskID taskID, double progress, int runningAttempts, int killedAttempts, |
| int failedAttempts, TaskStatus[] taskStatus, boolean setupOrCleanup, |
| String[] taskTrackers) { |
| this.progress = progress; |
| this.taskID = taskID; |
| this.killedAttempts = killedAttempts; |
| this.failedAttempts = failedAttempts; |
| this.runningAttempts = runningAttempts; |
| if (taskStatus != null) { |
| this.taskStatus = taskStatus; |
| } else { |
| if (taskID.getTaskType() == TaskType.MAP) { |
| this.taskStatus = new MapTaskStatus[] {}; |
| } else { |
| this.taskStatus = new ReduceTaskStatus[] {}; |
| } |
| } |
| this.setupOrCleanup = setupOrCleanup; |
| this.taskTrackers = taskTrackers; |
| } |
| |
| @Override |
| public double getProgress() { |
| return progress; |
| } |
| |
| @Override |
| public TaskID getTaskID() { |
| return taskID; |
| } |
| |
| @Override |
| public int numKilledAttempts() { |
| return killedAttempts; |
| } |
| |
| @Override |
| public int numFailedAttempts() { |
| return failedAttempts; |
| } |
| |
| @Override |
| public int numRunningAttempts() { |
| return runningAttempts; |
| } |
| |
| @Override |
| public void readFields(DataInput in) throws IOException { |
| taskID.readFields(in); |
| progress = in.readDouble(); |
| runningAttempts = in.readInt(); |
| killedAttempts = in.readInt(); |
| failedAttempts = in.readInt(); |
| int size = in.readInt(); |
| if (taskID.getTaskType() == TaskType.MAP) { |
| taskStatus = new MapTaskStatus[size]; |
| } else { |
| taskStatus = new ReduceTaskStatus[size]; |
| } |
| for (int i = 0; i < size; i++) { |
| if (taskID.getTaskType() == TaskType.MAP) { |
| taskStatus[i] = new MapTaskStatus(); |
| } else { |
| taskStatus[i] = new ReduceTaskStatus(); |
| } |
| taskStatus[i].readFields(in); |
| taskStatus[i].setTaskTracker(in.readUTF()); |
| } |
| setupOrCleanup = in.readBoolean(); |
| size = in.readInt(); |
| taskTrackers = new String[size]; |
| for (int i = 0; i < size; i++) { |
| taskTrackers[i] = in.readUTF(); |
| } |
| } |
| |
| @Override |
| public void write(DataOutput out) throws IOException { |
| taskID.write(out); |
| out.writeDouble(progress); |
| out.writeInt(runningAttempts); |
| out.writeInt(killedAttempts); |
| out.writeInt(failedAttempts); |
| out.writeInt(taskStatus.length); |
| for (TaskStatus t : taskStatus) { |
| t.write(out); |
| out.writeUTF(t.getTaskTracker()); |
| } |
| out.writeBoolean(setupOrCleanup); |
| out.writeInt(taskTrackers.length); |
| for (String tt : taskTrackers) { |
| out.writeUTF(tt); |
| } |
| } |
| |
| @Override |
| public TaskStatus[] getTaskStatus() { |
| return taskStatus; |
| } |
| |
| @Override |
| public boolean isSetupOrCleanup() { |
| return setupOrCleanup; |
| } |
| |
| @Override |
| public String[] getTaskTrackers() { |
| return taskTrackers; |
| } |
| } |