package com.alimama.mdrill.topology.assignment; import java.util.HashMap; import java.util.HashSet; import java.util.Set; import com.alimama.mdrill.topology.MdrillTaskAssignment; import com.alipay.bluewhale.core.task.common.TaskInfo; import com.alipay.bluewhale.core.utils.StormUtils; public class TaskNeedAssign { public HashSet<Integer> msTask = new HashSet<Integer>(); public HashMap<Integer,HashSet<Integer>> shardTask = new HashMap<Integer,HashSet<Integer>>(); public HashMap<Integer,HashSet<Integer>> realtimeTask = new HashMap<Integer,HashSet<Integer>>(); public HashSet<Integer> otherTask = new HashSet<Integer>(); public void setSpecialTask(Set<Integer> reassignIds,MdrillTaskAssignment assen) { for(int i=0;i<assen.replication;i++) { shardTask.put(i, new HashSet<Integer>()); realtimeTask.put(i, new HashSet<Integer>()); } for (Integer tid : reassignIds) { TaskInfo info = assen.zkCluster.task_info(assen.topologyId, tid); if (info == null) { this.otherTask.add(tid); } String commnetId=info.getComponentId(); Integer group=0; String[] cols=commnetId.split("@"); if(cols.length>=2) { group=StormUtils.parseInt(cols[1]); } if (commnetId.indexOf(assen.shard_name) >= 0) { this.shardTask.get(group).add(tid); } else if (commnetId.indexOf(assen.ms_name) >= 0) { this.msTask.add(tid); } else if (commnetId.indexOf(assen.realtime_name) >= 0) { this.realtimeTask.get(group).add(tid); } else { this.otherTask.add(tid); } } } }