@Override public String toString() { String ret = null; if (isSuccess()) { ret = "Status: " + this.getStatus() + " message: " + this.getMessage(); } else { ret = "Status: " + this.getStatus() + " error message: " + this.getErrorMessage(); } return ret; } }
public static SchedulingResult success(String message) { return new SchedulingResult(SchedulingStatus.SUCCESS, message, null); }
public SchedulingResult asSchedulingResult() { if (success) { return SchedulingResult.success("Fully Scheduled by ConstraintSolverStrategy (" + statesSearched + " states traversed in " + timeTakenMillis + "ms, backtracked " + backtracked + " times)"); } return SchedulingResult.failure(SchedulingStatus.FAIL_NOT_ENOUGH_RESOURCES, "Cannot find scheduling that satisfies all constraints (" + statesSearched + " states traversed in " + timeTakenMillis + "ms, backtracked " + backtracked + " times)"); } }
public boolean isValid() { if (this.isSuccess() && this.getSchedulingResultMap() == null) { LOG.warn("SchedulingResult not Valid! Status is success but SchedulingResultMap is null"); return false; } if (this.isFailure() && this.getSchedulingResultMap() != null) { LOG.warn("SchedulingResult not Valid! Status is Failure but SchedulingResultMap is NOT null"); return false; } return true; }
public void basicFailureTest(String confKey, Object confValue, ConstraintSolverStrategy cs) { Map<String, Object> config = makeTestTopoConf(); config.put(confKey, confValue); cs.prepare(config); TopologyDetails topo = makeTopology(config, NORMAL_BOLT_PARALLEL); Cluster cluster = makeCluster(topo); LOG.info("Scheduling..."); SchedulingResult result = cs.schedule(cluster, topo); LOG.info("Done scheduling {}...", result); Assert.assertTrue("Assert scheduling topology success " + result, !result.isSuccess()); }
public SchedulingResult schedule(TopologyDetails td) { if (_nodes.getNodes().size() <= 0) { LOG.warn("No available nodes to schedule tasks on!"); return SchedulingResult.failure(SchedulingStatus.FAIL_NOT_ENOUGH_RESOURCES, "No available nodes to schedule tasks on!"); return SchedulingResult.failure(SchedulingStatus.FAIL_INVALID_TOPOLOGY, "Cannot find a Spout!"); executorsNotScheduled); schedulerAssignmentMap = null; result = SchedulingResult.failure(SchedulingStatus.FAIL_NOT_ENOUGH_RESOURCES, (td.getExecutors().size() - unassignedExecutors.size()) + "/" + td.getExecutors().size() + " executors scheduled"); } else { LOG.debug("All resources successfully scheduled!"); result = SchedulingResult.successWithMsg(schedulerAssignmentMap, "Fully Scheduled by DefaultResourceAwareStrategy");
protected SchedulingResult mkNotEnoughResources(TopologyDetails td) { return SchedulingResult.failure( SchedulingStatus.FAIL_NOT_ENOUGH_RESOURCES, td.getExecutors().size() + " executors not scheduled"); }
LOG.info("Done scheduling {}...", result); Assert.assertTrue("Assert scheduling topology success " + result, result.isSuccess()); Assert.assertEquals("topo all executors scheduled? " + cluster.getUnassignedExecutors(topo), 0, cluster.getUnassignedExecutors(topo).size()); LOG.info("Done scheduling {}...", result); Assert.assertTrue("Assert scheduling topology success " + result, result.isSuccess()); Assert.assertEquals("topo all executors scheduled?", 0, cluster.getUnassignedExecutors(topo).size()); Assert.assertTrue("Valid Scheduling?", ConstraintSolverStrategy.validateSolution(cluster, topo));
return SchedulingResult.failure(SchedulingStatus.FAIL_OTHER, "Scheduling not feasible!");
return; } else { if (result.isSuccess()) { cluster.updateFrom(toSchedule); cluster.setStatus(td.getId(), "Running - " + result.getMessage()); } else if (result.getStatus() == SchedulingStatus.FAIL_NOT_ENOUGH_RESOURCES) { LOG.debug("Not enough resources to schedule {}", td.getName()); List<TopologyDetails> reversedList = ImmutableList.copyOf(orderedTopologies).reverse(); message.append(result.getErrorMessage()); markFailedTopology(topologySubmitter, cluster, td, message.toString()); return;
assert(schedulingResult.isSuccess()); SchedulerAssignment assignment = cluster.getAssignmentById(topo1.getId()); for (WorkerSlot ws : assignment.getSlotToExecutors().keySet()) { assert(schedulingResult.isSuccess()); assignment = cluster.getAssignmentById(topo2.getId()); for (WorkerSlot ws : assignment.getSlotToExecutors().keySet()) {
if (nodes.getNodes().size() <= 0) { LOG.warn("No available nodes to schedule tasks on!"); return SchedulingResult.failure( SchedulingStatus.FAIL_NOT_ENOUGH_RESOURCES, "No available nodes to schedule tasks on!"); return SchedulingResult.failure( SchedulingStatus.FAIL_INVALID_TOPOLOGY, "Cannot find a Spout!"); LOG.error("Not all executors successfully scheduled: {}", executorsNotScheduled); result = SchedulingResult.failure( SchedulingStatus.FAIL_NOT_ENOUGH_RESOURCES, (td.getExecutors().size() - unassignedExecutors.size()) } else { LOG.debug("All resources successfully scheduled!"); result = SchedulingResult.success("Fully Scheduled by " + this.getClass().getSimpleName());
public static SchedulingResult failure(SchedulingStatus status, String errorMessage) { return new SchedulingResult(status, null, errorMessage); }
@Override public String toString() { String ret = null; if(this.isSuccess()) { ret = "Status: " + this.getStatus() + " message: " + this.getMessage() + " scheduling: " + this.getSchedulingResultMap(); } else { ret = "Status: " + this.getStatus() + " error message: " + this.getErrorMessage(); } return ret; } }
assert(schedulingResult.isSuccess()); SchedulerAssignment assignment = cluster.getAssignmentById(topo1.getId()); for (WorkerSlot ws : assignment.getSlotToExecutors().keySet()) { assert(schedulingResult.isSuccess()); assignment = cluster.getAssignmentById(topo2.getId()); for (WorkerSlot ws : assignment.getSlotToExecutors().keySet()) {
if (nodes.getNodes().size() <= 0) { LOG.warn("No available nodes to schedule tasks on!"); return SchedulingResult.failure( SchedulingStatus.FAIL_NOT_ENOUGH_RESOURCES, "No available nodes to schedule tasks on!"); return SchedulingResult.failure( SchedulingStatus.FAIL_INVALID_TOPOLOGY, "Cannot find a Spout!"); LOG.error("Not all executors successfully scheduled: {}", executorsNotScheduled); result = SchedulingResult.failure( SchedulingStatus.FAIL_NOT_ENOUGH_RESOURCES, (td.getExecutors().size() - unassignedExecutors.size()) } else { LOG.debug("All resources successfully scheduled!"); result = SchedulingResult.success("Fully Scheduled by " + this.getClass().getSimpleName());
public static SchedulingResult failure(SchedulingStatus status, String errorMessage) { return new SchedulingResult(status, null, null, errorMessage); }
if (result != null && result.isValid()) { if (result.isSuccess()) { try { if (mkAssignment(td, result.getSchedulingResultMap())) { topologySubmitter.moveTopoFromPendingToRunning(td); this.schedulingState.cluster.setStatus(td.getId(), "Running - " + result.getMessage()); } else { topologySubmitter = this.cleanup(schedulingState, td); if (result.getStatus() == SchedulingStatus.FAIL_NOT_ENOUGH_RESOURCES) { if (evictionStrategy == null) { try { topologySubmitter = cleanup(schedulingState, td); topologySubmitter.moveTopoFromPendingToAttempted(td); this.schedulingState.cluster.setStatus(td.getId(), "Not enough resources to schedule - " + result.getErrorMessage()); break; } else if (result.getStatus() == SchedulingStatus.FAIL_INVALID_TOPOLOGY) { topologySubmitter = cleanup(schedulingState, td); topologySubmitter.moveTopoFromPendingToInvalid(td, this.schedulingState.cluster);
public static SchedulingResult successWithMsg(Map<WorkerSlot, Collection<ExecutorDetails>> schedulingResultMap, String message) { if (schedulingResultMap == null) { throw new IllegalStateException("Cannot declare scheduling success without providing a non null scheduling map!"); } return new SchedulingResult(SchedulingStatus.SUCCESS, schedulingResultMap, message, null); }