public List<SingularityTaskId> rebalanceRacks(SingularityRequest request, List<SingularityTaskId> remainingActiveTasks, Optional<String> user) { List<SingularityTaskId> extraCleanedTasks = new ArrayList<>(); int numActiveRacks = rackManager.getNumActive(); double perRack = request.getInstancesSafe() / (double) numActiveRacks; Multiset<String> countPerRack = HashMultiset.create(); for (SingularityTaskId taskId : remainingActiveTasks) { countPerRack.add(taskId.getRackId()); LOG.info("{} - {} - {} - {}", countPerRack, perRack, extraCleanedTasks.size(), taskId); if (countPerRack.count(taskId.getRackId()) > perRack && extraCleanedTasks.size() < numActiveRacks / 2) { extraCleanedTasks.add(taskId); LOG.info("Cleaning up task {} to evenly distribute tasks among racks", taskId); taskManager.createTaskCleanup(new SingularityTaskCleanup(user, TaskCleanupType.REBALANCE_RACKS, System.currentTimeMillis(), taskId, Optional.absent(), Optional.absent(), Optional.absent())); } } return extraCleanedTasks; }
public List<SingularityTaskId> rebalanceRacks(SingularityRequest request, List<SingularityTaskId> remainingActiveTasks, Optional<String> user) { List<SingularityTaskId> extraCleanedTasks = new ArrayList<>(); int numActiveRacks = rackManager.getNumActive(); double perRack = request.getInstancesSafe() / (double) numActiveRacks; Multiset<String> countPerRack = HashMultiset.create(); for (SingularityTaskId taskId : remainingActiveTasks) { countPerRack.add(taskId.getRackId()); LOG.info("{} - {} - {} - {}", countPerRack, perRack, extraCleanedTasks.size(), taskId); if (countPerRack.count(taskId.getRackId()) > perRack && extraCleanedTasks.size() < numActiveRacks / 2) { extraCleanedTasks.add(taskId); LOG.info("Cleaning up task {} to evenly distribute tasks among racks", taskId); taskManager.createTaskCleanup(new SingularityTaskCleanup(user, TaskCleanupType.REBALANCE_RACKS, System.currentTimeMillis(), taskId, Optional.absent(), Optional.absent(), Optional.absent())); } } return extraCleanedTasks; }