Package com.alimama.mdrill.topology.assignment

Source Code of com.alimama.mdrill.topology.assignment.HostFreePorts

package com.alimama.mdrill.topology.assignment;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Set;


import com.alipay.bluewhale.core.daemon.NodePort;
import com.alipay.bluewhale.core.daemon.supervisor.SupervisorInfo;
import com.alimama.mdrill.topology.MdrillTaskAssignment;
import com.alimama.mdrill.topology.assignment.Utils.*;

public class HostFreePorts {
  HostSlots[] ms;
  HostSlots[] shard;
  HostSlots[] realtime;
  private MdrillTaskAssignment params;

 
  public HostFreePorts(MdrillTaskAssignment params) {
    super();
    this.params = params;
  }
 
  public void parse(FreeResources freeResource)
  {
    Set<NodePort> allSlots = Utils.AllSlots(params.supInfos, params.zkCluster);

    this.shard=this.getHostSlots(freeResource.shard, allSlots, PortTypeEnum.shard);
    this.ms=this.getHostSlots(freeResource.ms, allSlots, PortTypeEnum.mergerserver);
    this.realtime=this.getHostSlots(freeResource.realtime, allSlots, PortTypeEnum.realtime);
  }


  private HostSlots[] getHostSlots(Set<NodePort> shard,Set<NodePort> allSlots,PortTypeEnum type) {

    HashMap<String, List<NodePort>> allshard = new HashMap<String, List<NodePort>>();
    for (NodePort p : allSlots) {
      if (params.porttype.isType(type, p.getPort())) {
        SupervisorInfo sinfo = params.supInfos.get(p.getNode());
        List<NodePort> ports = allshard.get(sinfo.getHostName());
        if (ports == null) {
          ports = new ArrayList<NodePort>();
          allshard.put(sinfo.getHostName(), ports);
        }
        if (shard.contains(p)) {
          ports.add(p);
        }
      }
    }

   
    List<String> shardHosts = new ArrayList<String>();
    shardHosts.addAll(allshard.keySet());
    String[] shardsHostArr = new String[shardHosts.size()];
    shardHosts.toArray(shardsHostArr);
    Arrays.sort(shardsHostArr);

    HostSlots[] allList = new HostSlots[shardsHostArr.length];

    for (int i = 0; i < shardsHostArr.length; i++) {
      String host = shardsHostArr[i];
      allList[i] = new HostSlots(host, allshard.get(host));
    }

    return allList;
  }
}
TOP

Related Classes of com.alimama.mdrill.topology.assignment.HostFreePorts

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.