@Override public List<WorkerSlot> getAssignableSlots() { List<WorkerSlot> slots = new ArrayList<>(); for (SupervisorDetails supervisor : this.supervisors.values()) { slots.addAll(this.getAssignableSlots(supervisor)); } return slots; }
private LinkedList<HostAssignableSlots> hostAssignableSlots(Cluster cluster) { List<WorkerSlot> assignableSlots = cluster.getAssignableSlots(); Map<String, List<WorkerSlot>> hostAssignableSlots = new HashMap<String, List<WorkerSlot>>(); for (WorkerSlot slot : assignableSlots) { String host = cluster.getHost(slot.getNodeId()); List<WorkerSlot> slots = hostAssignableSlots.get(host); if (slots == null) { slots = new ArrayList<WorkerSlot>(); hostAssignableSlots.put(host, slots); } slots.add(slot); } List<HostAssignableSlots> sortHostAssignSlots = new ArrayList<HostAssignableSlots>(); for (Map.Entry<String, List<WorkerSlot>> entry : hostAssignableSlots.entrySet()) { sortHostAssignSlots.add(new HostAssignableSlots(entry.getKey(), entry.getValue())); } Collections.sort(sortHostAssignSlots, new Comparator<HostAssignableSlots>() { @Override public int compare(HostAssignableSlots o1, HostAssignableSlots o2) { return o2.getWorkerSlots().size() - o1.getWorkerSlots().size(); } }); Collections.shuffle(sortHostAssignSlots); return new LinkedList<HostAssignableSlots>(sortHostAssignSlots); }
@Override public void schedule(Topologies topologies, Cluster cluster) { LOG.debug("running Black List scheduler"); LOG.debug("AssignableSlots: {}", cluster.getAssignableSlots()); LOG.debug("AvailableSlots: {}", cluster.getAvailableSlots()); LOG.debug("UsedSlots: {}", cluster.getUsedSlots()); Map<String, SupervisorDetails> supervisors = cluster.getSupervisors(); blacklistStrategy.resumeFromBlacklist(); badSupervisors(supervisors); Set<String> blacklistHosts = getBlacklistHosts(cluster, topologies); this.blacklistHost = blacklistHosts; cluster.setBlacklistedHosts(blacklistHosts); removeLongTimeDisappearFromCache(); underlyingScheduler.schedule(topologies, cluster); }
public List<WorkerSlot> getAssignableSlots() { List<WorkerSlot> slots = new ArrayList<WorkerSlot>(); for (SupervisorDetails supervisor : this.supervisors.values()) { slots.addAll(this.getAssignableSlots(supervisor)); } return slots; }