/**
* CopyRight by Chinamobile
*
* WorkerManagerStatus.java
*/
package com.chinamobile.bcbsp.workermanager;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.io.WritableFactories;
import org.apache.hadoop.io.WritableFactory;
import com.chinamobile.bcbsp.fault.storage.Fault;
import com.chinamobile.bcbsp.util.StaffStatus;
/**
* WorkerManagerStatus
*
* @author
* @version
*/
public class WorkerManagerStatus implements Writable {
public static final Log LOG = LogFactory.getLog(WorkerManagerStatus.class);
static {
WritableFactories.setFactory(WorkerManagerStatus.class,
new WritableFactory() {
public Writable newInstance() {
return new WorkerManagerStatus();
}
});
}
private List<Fault> workerFaultList;
private String workerManagerName;
private String rpc;
private List<StaffStatus> staffReports;
private int maxStaffsCount;
private int runningStaffsCount;
private int finishedStaffsCount;
private int failedStaffsCount;
volatile long lastSeen;
volatile long pauseTime;
public WorkerManagerStatus() {
this.staffReports = new CopyOnWriteArrayList<StaffStatus>();
this.workerFaultList = new ArrayList<Fault>();
}
public WorkerManagerStatus(String workerManagerName,
List<StaffStatus> staffReports, int maxStaffsCount, int runningStaffsCount,
int finishedStaffsCount, int failedStaffsCount, String rpc) {
this(workerManagerName, staffReports, maxStaffsCount, runningStaffsCount,
finishedStaffsCount, failedStaffsCount, rpc,new ArrayList<Fault>());
}
public WorkerManagerStatus(String workerManagerName,
List<StaffStatus> staffReports, int maxStaffsCount,
int runningStaffsCount, int finishedStaffsCount,
int failedStaffsCount) {
this(workerManagerName, staffReports,
maxStaffsCount, runningStaffsCount, finishedStaffsCount,
failedStaffsCount, "");
}
public WorkerManagerStatus(String workerManagerName,
List<StaffStatus> staffReports, int maxStaffsCount, int runningStaffsCount,
int finishedStaffsCount, int failedStaffsCount, String rpc,List<Fault> workerFaultList) {
this.workerManagerName = workerManagerName;
this.rpc = rpc;
this.staffReports = new ArrayList<StaffStatus>(staffReports);
this.maxStaffsCount = maxStaffsCount;
this.runningStaffsCount = runningStaffsCount;
this.finishedStaffsCount = finishedStaffsCount;
this.failedStaffsCount = failedStaffsCount;
this.workerFaultList = new ArrayList<Fault>(workerFaultList);
}
public String getWorkerManagerName() {
return this.workerManagerName;
}
public String getRpcServer() {
return this.rpc;
}
public List<StaffStatus> getStaffReports() {
return this.staffReports;
}
public int getMaxStaffsCount() {
return this.maxStaffsCount;
}
public void setRunningStaffsCount(int runningStaffsCount) {
this.runningStaffsCount = runningStaffsCount;
}
public int getRunningStaffsCount() {
return this.runningStaffsCount;
}
public int getFinishedStaffsCount() {
return this.finishedStaffsCount;
}
public void setFailedStaffsCount(int failedStaffsCount) {
this.failedStaffsCount = failedStaffsCount;
}
public int getFailedStaffsCount() {
return this.failedStaffsCount;
}
public void setLastSeen(long lastSeen) {
this.lastSeen = lastSeen;
}
public long getLastSeen() {
return lastSeen;
}
public void setPauseTime(long pauseTime) {
this.pauseTime = pauseTime;
}
public long getPauseTime() {
return this.pauseTime;
}
public List<Fault> getWorkerFaultList() {
return workerFaultList;
}
/**
* For BSPController to distinguish between different WorkerManagers,
* because BSPController stores using WorkerManagerStatus as key.
*/
@Override
public int hashCode() {
int result = 17;
result = 37 * result + workerManagerName.hashCode();
return result;
}
@Override
public boolean equals(Object o) {
WorkerManagerStatus s = ( WorkerManagerStatus ) o;
if (s.getWorkerManagerName().equals(this.workerManagerName)) {
return true;
} else {
return false;
}
}
/*
* (non-Javadoc)
*
* @see org.apache.hadoop.io.Writable#readFields(java.io.DataInput)
*/
@Override
public void readFields(DataInput in) throws IOException {
this.workerManagerName = Text.readString(in);
this.rpc = Text.readString(in);
int staffCount = in.readInt();
StaffStatus status;
this.staffReports.clear();
for (int i = 0; i < staffCount; i++) {
status = new StaffStatus();
status.readFields(in);
this.staffReports.add(status);
}
int workerFaultCount = in.readInt();
Fault fault;
this.workerFaultList.clear();
for (int i = 0; i < workerFaultCount; i++) {
fault = new Fault();
fault.readFields(in);
this.workerFaultList.add(fault);
}
this.maxStaffsCount = in.readInt();
this.runningStaffsCount = in.readInt();
this.finishedStaffsCount = in.readInt();
this.failedStaffsCount = in.readInt();
}
/*
* (non-Javadoc)
*
* @see org.apache.hadoop.io.Writable#write(java.io.DataOutput)
*/
@Override
public void write(DataOutput out) throws IOException {
Text.writeString(out, this.workerManagerName);
Text.writeString(out, this.rpc);
out.writeInt(this.staffReports.size());
for (StaffStatus staffStatus : this.staffReports) {
staffStatus.write(out);
}
out.writeInt(this.workerFaultList.size());
for (Fault fault : this.workerFaultList) {
fault.write(out);
}
out.writeInt(this.maxStaffsCount);
out.writeInt(this.runningStaffsCount);
out.writeInt(this.finishedStaffsCount);
out.writeInt(this.failedStaffsCount);
}
}