package com.alipay.bluewhale.core.task.common;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import com.alipay.bluewhale.core.daemon.NodePort;
import com.alipay.bluewhale.core.utils.StormUtils;
/**
* zk��/storm-zk-root/assignments/{topologyid}�´洢��������Ϣ
* nodeHost�� {supervisorid: hostname}
* taskStartTimeSecs: �洢taskid���������ʼʱ��
* masterCodeDir��code��·��
* taskToNodeport�� ÿ�����������ڵ�supervisor��port
*/
public class Assignment implements Serializable {
private static final long serialVersionUID = 1L;
private Map<String, String> nodeHost;
private Map<Integer, Integer> taskStartTimeSecs;
private String masterCodeDir;
private Map<Integer, NodePort> taskToNodeport;
@Override
public String toString() {
StringBuffer buff=new StringBuffer();
buff.append("{");
buff.append("nodeHost:"+StormUtils.to_json(nodeHost));
buff.append(",");
buff.append("taskToNodeport:"+StormUtils.to_json(taskToNodeport));
buff.append(",");
buff.append("taskStartTimeSecs:"+StormUtils.to_json(taskStartTimeSecs));
buff.append(",");
buff.append("masterCodeDir:\""+masterCodeDir+"\"");
buff.append("}");
return buff.toString();
}
public Assignment(String masterCodeDir,
Map<Integer, NodePort> taskToNodeport,
Map<String, String> nodeHost,
Map<Integer, Integer> taskStartTimeSecs) {
this.taskToNodeport = taskToNodeport;
this.nodeHost = nodeHost;
this.taskStartTimeSecs = taskStartTimeSecs;
this.masterCodeDir = masterCodeDir;
}
public Map<String, String> getNodeHost() {
return nodeHost;
}
public void setNodePorts(Map<String, String> nodeHost) {
this.nodeHost = nodeHost;
}
public Map<Integer, Integer> getTaskStartTimeSecs() {
return taskStartTimeSecs;
}
public void setTaskStartTimeSecs(Map<Integer, Integer> taskStartTimeSecs) {
this.taskStartTimeSecs = taskStartTimeSecs;
}
public String getMasterCodeDir() {
return masterCodeDir;
}
public void setMasterCodeDir(String masterCodeDir) {
this.masterCodeDir = masterCodeDir;
}
public Map<Integer, NodePort> getTaskToNodeport() {
return taskToNodeport;
}
public void setTaskToNodeport(Map<Integer, NodePort> taskToNodeport) {
this.taskToNodeport = taskToNodeport;
}
/**
* find taskToNodeport for every supervisorId (node)
*
* @param supervisorId
* @return Map<Integer, NodePort>
*/
public Map<Integer, NodePort> getTaskToPortbyNode(String supervisorId) {
Map<Integer, NodePort> taskToPortbyNode = new HashMap<Integer, NodePort>();
if (taskToNodeport == null) {
return null;
}
for (Entry<Integer, NodePort> entry : taskToNodeport.entrySet()) {
String node = entry.getValue().getNode();
if (node.equals(supervisorId)) {
taskToPortbyNode.put(entry.getKey(), entry.getValue());
}
}
return taskToPortbyNode;
}
@Override
public boolean equals(Object assignment) {
if (assignment instanceof Assignment
&& ((Assignment) assignment).getNodeHost().equals(nodeHost)
&& ((Assignment) assignment).getTaskStartTimeSecs().equals(
taskStartTimeSecs)
&& ((Assignment) assignment).getMasterCodeDir().equals(
masterCodeDir)
&& ((Assignment) assignment).getTaskToNodeport().equals(
taskToNodeport)) {
return true;
}
return false;
}
@Override
public int hashCode() {
return this.nodeHost.hashCode() + this.taskStartTimeSecs.hashCode()
+ this.masterCodeDir.hashCode()
+ this.taskToNodeport.hashCode();
}
}