Пример #1
0
  private WorkerSlot getBestWorker(
      ExecutorDetails exec,
      TopologyDetails td,
      String clusterId,
      Map<WorkerSlot, Collection<ExecutorDetails>> scheduleAssignmentMap) {
    double taskMem = td.getTotalMemReqTask(exec);
    double taskCPU = td.getTotalCpuReqTask(exec);
    List<RAS_Node> nodes;
    if (clusterId != null) {
      nodes = this.getAvailableNodesFromCluster(clusterId);

    } else {
      nodes = this.getAvailableNodes();
    }
    // First sort nodes by distance
    TreeMap<Double, RAS_Node> nodeRankMap = new TreeMap<Double, RAS_Node>();
    for (RAS_Node n : nodes) {
      if (n.getFreeSlots().size() > 0) {
        if (n.getAvailableMemoryResources() >= taskMem && n.getAvailableCpuResources() >= taskCPU) {
          double a =
              Math.pow(
                  ((taskCPU - n.getAvailableCpuResources()) / (n.getAvailableCpuResources() + 1))
                      * this.CPU_WEIGHT,
                  2);
          double b =
              Math.pow(
                  ((taskMem - n.getAvailableMemoryResources())
                          / (n.getAvailableMemoryResources() + 1))
                      * this.MEM_WEIGHT,
                  2);
          double c = 0.0;
          if (this.refNode != null) {
            c = Math.pow(this.distToNode(this.refNode, n) * this.NETWORK_WEIGHT, 2);
          }
          double distance = Math.sqrt(a + b + c);
          nodeRankMap.put(distance, n);
        }
      }
    }
    // Then, pick worker from closest node that satisfy constraints
    for (Map.Entry<Double, RAS_Node> entry : nodeRankMap.entrySet()) {
      RAS_Node n = entry.getValue();
      for (WorkerSlot ws : n.getFreeSlots()) {
        if (checkWorkerConstraints(exec, ws, td, scheduleAssignmentMap)) {
          return ws;
        }
      }
    }
    return null;
  }
Пример #2
0
 private List<WorkerSlot> getAvailableWorkersFromCluster(String clusterId) {
   List<RAS_Node> nodes = this.getAvailableNodesFromCluster(clusterId);
   List<WorkerSlot> workers = new LinkedList<WorkerSlot>();
   for (RAS_Node node : nodes) {
     workers.addAll(node.getFreeSlots());
   }
   return workers;
 }