/** * Converts the task->containerId map to an ordered list of {@link TaskGroup} instances. * * @param taskToContainerId a map from each task name to the containerId to which it is assigned. * @return a list of TaskGroups ordered ascending by containerId. */ private List<TaskGroup> getOrderedContainers(Map<String, String> taskToContainerId) { log.debug("Got task to container map: {}", taskToContainerId); // Group tasks by container Id HashMap<String, List<String>> containerIdToTaskNames = new HashMap<>(); for (Map.Entry<String, String> entry : taskToContainerId.entrySet()) { String taskName = entry.getKey(); String containerId = entry.getValue(); List<String> taskNames = containerIdToTaskNames.get(containerId); if (taskNames == null) { taskNames = new ArrayList<>(); containerIdToTaskNames.put(containerId, taskNames); } taskNames.add(taskName); } // Build container tasks List<TaskGroup> containerTasks = new ArrayList<>(containerIdToTaskNames.size()); for (int i = 0; i < containerIdToTaskNames.size(); i++) { if (containerIdToTaskNames.get(String.valueOf(i)) == null) throw new IllegalStateException("Task mapping is missing container: " + i); containerTasks.add(new TaskGroup(String.valueOf(i), containerIdToTaskNames.get(String.valueOf(i)))); } return containerTasks; }
for (int i = 0; i < prevContainerCount; i++) { TaskGroup taskGroup = containers.get(i); while (taskGroup.size() > expectedTaskCountPerContainer[i]) { taskNamesToReassign.add(taskGroup.removeTask());
for (int i = 0; i < prevContainerCount; i++) { TaskGroup taskGroup = containers.get(i); while (taskGroup.size() > expectedTaskCountPerContainer[i]) { taskNamesToReassign.add(taskGroup.removeTask());
for (int i = 0; i < prevContainerCount; i++) { TaskGroup taskGroup = containers.get(i); while (taskGroup.size() > expectedTaskCountPerContainer[i]) { taskNamesToReassign.add(taskGroup.removeTask());
for (int i = 0; i < prevContainerCount; i++) { TaskGroup taskGroup = containers.get(i); while (taskGroup.size() > expectedTaskCountPerContainer[i]) { taskNamesToReassign.add(taskGroup.removeTask());
/** * Converts the task->containerId map to an ordered list of {@link TaskGroup} instances. * * @param taskToContainerId a map from each task name to the containerId to which it is assigned. * @return a list of TaskGroups ordered ascending by containerId. */ private List<TaskGroup> getOrderedContainers(Map<String, String> taskToContainerId) { log.debug("Got task to container map: {}", taskToContainerId); // Group tasks by container Id HashMap<String, List<String>> containerIdToTaskNames = new HashMap<>(); for (Map.Entry<String, String> entry : taskToContainerId.entrySet()) { String taskName = entry.getKey(); String containerId = entry.getValue(); List<String> taskNames = containerIdToTaskNames.get(containerId); if (taskNames == null) { taskNames = new ArrayList<>(); containerIdToTaskNames.put(containerId, taskNames); } taskNames.add(taskName); } // Build container tasks List<TaskGroup> containerTasks = new ArrayList<>(containerIdToTaskNames.size()); for (int i = 0; i < containerIdToTaskNames.size(); i++) { if (containerIdToTaskNames.get(String.valueOf(i)) == null) throw new IllegalStateException("Task mapping is missing container: " + i); containerTasks.add(new TaskGroup(String.valueOf(i), containerIdToTaskNames.get(String.valueOf(i)))); } return containerTasks; }
/** * Converts the task->containerId map to an ordered list of {@link TaskGroup} instances. * * @param taskToContainerId a map from each task name to the containerId to which it is assigned. * @return a list of TaskGroups ordered ascending by containerId. */ private List<TaskGroup> getOrderedContainers(Map<String, String> taskToContainerId) { log.debug("Got task to container map: {}", taskToContainerId); // Group tasks by container Id HashMap<String, List<String>> containerIdToTaskNames = new HashMap<>(); for (Map.Entry<String, String> entry : taskToContainerId.entrySet()) { String taskName = entry.getKey(); String containerId = entry.getValue(); List<String> taskNames = containerIdToTaskNames.get(containerId); if (taskNames == null) { taskNames = new ArrayList<>(); containerIdToTaskNames.put(containerId, taskNames); } taskNames.add(taskName); } // Build container tasks List<TaskGroup> containerTasks = new ArrayList<>(containerIdToTaskNames.size()); for (int i = 0; i < containerIdToTaskNames.size(); i++) { if (containerIdToTaskNames.get(String.valueOf(i)) == null) throw new IllegalStateException("Task mapping is missing container: " + i); containerTasks.add(new TaskGroup(String.valueOf(i), containerIdToTaskNames.get(String.valueOf(i)))); } return containerTasks; }
/** * Converts the task->containerId map to an ordered list of {@link TaskGroup} instances. * * @param taskToContainerId a map from each task name to the containerId to which it is assigned. * @return a list of TaskGroups ordered ascending by containerId. */ private List<TaskGroup> getOrderedContainers(Map<String, String> taskToContainerId) { log.debug("Got task to container map: {}", taskToContainerId); // Group tasks by container Id HashMap<String, List<String>> containerIdToTaskNames = new HashMap<>(); for (Map.Entry<String, String> entry : taskToContainerId.entrySet()) { String taskName = entry.getKey(); String containerId = entry.getValue(); List<String> taskNames = containerIdToTaskNames.get(containerId); if (taskNames == null) { taskNames = new ArrayList<>(); containerIdToTaskNames.put(containerId, taskNames); } taskNames.add(taskName); } // Build container tasks List<TaskGroup> containerTasks = new ArrayList<>(containerIdToTaskNames.size()); for (int i = 0; i < containerIdToTaskNames.size(); i++) { if (containerIdToTaskNames.get(String.valueOf(i)) == null) throw new IllegalStateException("Task mapping is missing container: " + i); containerTasks.add(new TaskGroup(String.valueOf(i), containerIdToTaskNames.get(String.valueOf(i)))); } return containerTasks; }
/** * Assigns tasks from the specified list to containers that have fewer containers than indicated * in taskCountPerContainer. * * @param taskCountPerContainer the expected number of tasks for each container. * @param taskNamesToAssign the list of tasks to assign to the containers. * @param containers the containers (as {@link TaskGroup}) to which the tasks will be assigned. */ // TODO: Change logic from using int arrays to a Map<String, Integer> (id -> taskCount) private void assignTasksToContainers(int[] taskCountPerContainer, List<String> taskNamesToAssign, List<TaskGroup> containers) { for (TaskGroup taskGroup : containers) { for (int j = taskGroup.size(); j < taskCountPerContainer[Integer.valueOf(taskGroup.getContainerId())]; j++) { String taskName = taskNamesToAssign.remove(0); taskGroup.addTaskName(taskName); log.info("Assigned task {} to container {}", taskName, taskGroup.getContainerId()); } } }
/** * Creates a list of empty {@link TaskGroup} instances for a range of container id's * from the start(inclusive) to end(exclusive) container id. * * @param startContainerId the first container id for which a TaskGroup is needed. * @param endContainerId the first container id AFTER the last TaskGroup that is needed. * @return a set of empty TaskGroup instances corresponding to the range * [startContainerId, endContainerId) */ private List<TaskGroup> createContainers(int startContainerId, int endContainerId) { List<TaskGroup> containers = new ArrayList<>(endContainerId - startContainerId); for (int i = startContainerId; i < endContainerId; i++) { TaskGroup taskGroup = new TaskGroup(String.valueOf(i), new ArrayList<String>()); containers.add(taskGroup); } return containers; }
/** * Creates a list of empty {@link TaskGroup} instances for a range of container id's * from the start(inclusive) to end(exclusive) container id. * * @param startContainerId the first container id for which a TaskGroup is needed. * @param endContainerId the first container id AFTER the last TaskGroup that is needed. * @return a set of empty TaskGroup instances corresponding to the range * [startContainerId, endContainerId) */ private List<TaskGroup> createContainers(int startContainerId, int endContainerId) { List<TaskGroup> containers = new ArrayList<>(endContainerId - startContainerId); for (int i = startContainerId; i < endContainerId; i++) { TaskGroup taskGroup = new TaskGroup(String.valueOf(i), new ArrayList<String>()); containers.add(taskGroup); } return containers; }
/** * Assigns tasks from the specified list to containers that have fewer containers than indicated * in taskCountPerContainer. * * @param taskCountPerContainer the expected number of tasks for each container. * @param taskNamesToAssign the list of tasks to assign to the containers. * @param containers the containers (as {@link TaskGroup}) to which the tasks will be assigned. */ // TODO: Change logic from using int arrays to a Map<String, Integer> (id -> taskCount) private void assignTasksToContainers(int[] taskCountPerContainer, List<String> taskNamesToAssign, List<TaskGroup> containers) { for (TaskGroup taskGroup : containers) { for (int j = taskGroup.size(); j < taskCountPerContainer[Integer.valueOf(taskGroup.getContainerId())]; j++) { String taskName = taskNamesToAssign.remove(0); taskGroup.addTaskName(taskName); log.info("Assigned task {} to container {}", taskName, taskGroup.getContainerId()); } } }
/** * Assigns tasks from the specified list to containers that have fewer containers than indicated * in taskCountPerContainer. * * @param taskCountPerContainer the expected number of tasks for each container. * @param taskNamesToAssign the list of tasks to assign to the containers. * @param containers the containers (as {@link TaskGroup}) to which the tasks will be assigned. */ // TODO: Change logic from using int arrays to a Map<String, Integer> (id -> taskCount) private void assignTasksToContainers(int[] taskCountPerContainer, List<String> taskNamesToAssign, List<TaskGroup> containers) { for (TaskGroup taskGroup : containers) { for (int j = taskGroup.size(); j < taskCountPerContainer[Integer.valueOf(taskGroup.getContainerId())]; j++) { String taskName = taskNamesToAssign.remove(0); taskGroup.addTaskName(taskName); log.info("Assigned task {} to container {}", taskName, taskGroup.getContainerId()); } } }
/** * Creates a list of empty {@link TaskGroup} instances for a range of container id's * from the start(inclusive) to end(exclusive) container id. * * @param startContainerId the first container id for which a TaskGroup is needed. * @param endContainerId the first container id AFTER the last TaskGroup that is needed. * @return a set of empty TaskGroup instances corresponding to the range * [startContainerId, endContainerId) */ private List<TaskGroup> createContainers(int startContainerId, int endContainerId) { List<TaskGroup> containers = new ArrayList<>(endContainerId - startContainerId); for (int i = startContainerId; i < endContainerId; i++) { TaskGroup taskGroup = new TaskGroup(String.valueOf(i), new ArrayList<String>()); containers.add(taskGroup); } return containers; }
/** * Creates a list of empty {@link TaskGroup} instances for a range of container id's * from the start(inclusive) to end(exclusive) container id. * * @param startContainerId the first container id for which a TaskGroup is needed. * @param endContainerId the first container id AFTER the last TaskGroup that is needed. * @return a set of empty TaskGroup instances corresponding to the range * [startContainerId, endContainerId) */ private List<TaskGroup> createContainers(int startContainerId, int endContainerId) { List<TaskGroup> containers = new ArrayList<>(endContainerId - startContainerId); for (int i = startContainerId; i < endContainerId; i++) { TaskGroup taskGroup = new TaskGroup(String.valueOf(i), new ArrayList<String>()); containers.add(taskGroup); } return containers; }
/** * Assigns tasks from the specified list to containers that have fewer containers than indicated * in taskCountPerContainer. * * @param taskCountPerContainer the expected number of tasks for each container. * @param taskNamesToAssign the list of tasks to assign to the containers. * @param containers the containers (as {@link TaskGroup}) to which the tasks will be assigned. */ // TODO: Change logic from using int arrays to a Map<String, Integer> (id -> taskCount) private void assignTasksToContainers(int[] taskCountPerContainer, List<String> taskNamesToAssign, List<TaskGroup> containers) { for (TaskGroup taskGroup : containers) { for (int j = taskGroup.size(); j < taskCountPerContainer[Integer.valueOf(taskGroup.getContainerId())]; j++) { String taskName = taskNamesToAssign.remove(0); taskGroup.addTaskName(taskName); log.info("Assigned task {} to container {}", taskName, taskGroup.getContainerId()); } } }