package org.apache.hadoop.mapred;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.Writable;
/**
* Holds information about task tracker obtained from TaskTrackerStatus, that
* are used in CoronaJobInProgress together with TaskStatus.
* This class holds a proper subset of information stored in TaskTrackerStatus,
* the idea is that this class stores data from TaskTrackerStatus that refer
* to TaskTracker and is used in CoronaJobTracker and is not connected with
* Tasks running on this TaskTracker.
* Things that are stored in TaskTrackerStatus and are NOT present here are:
* - TaskStatus updates for tasks running on TaskTracker
* - TaskTrackerHealthStatus information
* - ResourceStatus information
* - statistic information about number of tasks (maps, reduces, released tasks)
*/
public class TaskTrackerInfo implements Writable {
/** Name of task tracker */
private String trackerName;
/** Host */
private String host;
/** Http port */
private int httpPort;
public String getTrackerName() {
return trackerName;
}
public String getHost() {
return host;
}
public int getHttpPort() {
return httpPort;
}
/**
* Writable c'tor
*/
public TaskTrackerInfo() {
}
/**
* Extracts info from TaskTrackerStatus
* @param status task tracker status
*/
private TaskTrackerInfo(TaskTrackerStatus status) {
trackerName = status.getTrackerName();
host = status.getHost();
httpPort = status.getHttpPort();
}
/**
* Builds {@link TaskTrackerInfo} from {@link TaskTrackerStatus}, if provided
* status is null, then returns null
* @param status task tracker status
* @return task tracker info
*/
public static TaskTrackerInfo fromStatus(TaskTrackerStatus status) {
if (status == null) {
return null;
} else {
return new TaskTrackerInfo(status);
}
}
@Override
public boolean equals(Object o) {
if (o == null || !(o instanceof TaskTrackerInfo))
return false;
TaskTrackerInfo info = (TaskTrackerInfo) o;
return (trackerName.equals(info.trackerName) && host.equals(info.host)
&& httpPort == info.httpPort);
}
@Override
public void write(DataOutput out) throws IOException {
Text.writeString(out, trackerName);
Text.writeString(out, host);
out.writeInt(httpPort);
}
@Override
public void readFields(DataInput in) throws IOException {
this.trackerName = Text.readString(in);
this.host = Text.readString(in);
this.httpPort = in.readInt();
}
@Override
public String toString() {
return trackerName + " http at: " + host + ":" + httpPort;
}
}