Repository: helix Updated Branches: refs/heads/master 21a0922ab -> 442cd096d
[HELIX-718] implement TaskAssignResult Project: http://git-wip-us.apache.org/repos/asf/helix/repo Commit: http://git-wip-us.apache.org/repos/asf/helix/commit/442cd096 Tree: http://git-wip-us.apache.org/repos/asf/helix/tree/442cd096 Diff: http://git-wip-us.apache.org/repos/asf/helix/diff/442cd096 Branch: refs/heads/master Commit: 442cd096dd82ae0b2ee72232025b1972aced7cd9 Parents: 21a0922 Author: Harry Zhang <[email protected]> Authored: Mon Jul 9 14:22:20 2018 -0700 Committer: Harry Zhang <[email protected]> Committed: Mon Jul 9 15:23:16 2018 -0700 ---------------------------------------------------------------------- .../helix/task/assigner/TaskAssignResult.java | 85 +++++++++++++++++--- 1 file changed, 75 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/helix/blob/442cd096/helix-core/src/main/java/org/apache/helix/task/assigner/TaskAssignResult.java ---------------------------------------------------------------------- diff --git a/helix-core/src/main/java/org/apache/helix/task/assigner/TaskAssignResult.java b/helix-core/src/main/java/org/apache/helix/task/assigner/TaskAssignResult.java index 3515cbb..6d7b4e8 100644 --- a/helix-core/src/main/java/org/apache/helix/task/assigner/TaskAssignResult.java +++ b/helix-core/src/main/java/org/apache/helix/task/assigner/TaskAssignResult.java @@ -24,29 +24,49 @@ import org.apache.helix.task.TaskConfig; /** * TaskAssignResult represents assignment metadata for a task and is created by TaskAssigner. */ -public class TaskAssignResult { +public class TaskAssignResult implements Comparable<TaskAssignResult> { public enum FailureReason { // Instance does not have sufficient resource quota - INSUFFICIENT_QUOTA + INSUFFICIENT_QUOTA, + + // Instance does not have the required resource type + NO_SUCH_RESOURCE_TYPE, + + // Required quota type is not configured + NO_SUCH_QUOTA_TYPE } - private boolean isAssignmentSuccessful; + private final boolean _isAssignmentSuccessful; + private final int _fitnessScore; + private final FailureReason _reason; + private final AssignableInstance _node; + private final TaskConfig _taskConfig; + private final String _description; + + public TaskAssignResult(TaskConfig taskConfig, AssignableInstance node, boolean isSuccessful, + int fitness, FailureReason reason, String description) { + _isAssignmentSuccessful = isSuccessful; + _fitnessScore = fitness; + _reason = reason; + _taskConfig = taskConfig; + _node = node; + _description = description; + } /** * Returns if the task is successfully assigned or not. * @return true if assignment was successful. False otherwise */ public boolean isSuccessful() { - return isAssignmentSuccessful; + return _isAssignmentSuccessful; } /** * Returns TaskConfig of this TaskAssignResult. */ public TaskConfig getTaskConfig() { - // TODO: implement - return new TaskConfig(null, null); + return _taskConfig; } /** @@ -54,8 +74,15 @@ public class TaskAssignResult { * @return instance name. Null if assignment was not successful */ public String getInstanceName() { - // TODO: implement - return null; + return _node.getInstanceName(); + } + + /** + * Return the reference of the AssignableInstance of this assignment. + * @return AssignableInstance object, null if assignment was not successful + */ + public AssignableInstance getAssignableInstance() { + return _node; } /** @@ -63,7 +90,45 @@ public class TaskAssignResult { * @return a FailureReason instance. Null if assignment was successful */ public FailureReason getFailureReason() { - // TODO: implement - return null; + return _reason; + } + + /** + * Returns a one sentence description that carries detail information about + * assignment failure for debug purpose + * + * @return description + */ + public String getFailureDescription() { + return _description; + } + + /** + * Returns the fitness score of this assignment. isSuccessful() must return true for + * this return value to be meaningful. + * @return an integer describing fitness score + */ + public int getFitnessScore() { + return _fitnessScore; + } + + @Override + public int compareTo(TaskAssignResult other) { + // Sorted by descending order + return other.getFitnessScore() - _fitnessScore; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("TaskAssignResult{"); + sb.append(String.format("_taskConfig=%s, ", _taskConfig)); + sb.append(String.format("_isAssignmentSuccessful=%s, ", _isAssignmentSuccessful)); + sb.append(String.format("_fitnessScore=%s, ", _fitnessScore)); + sb.append(String.format("_reason='%s', ", _reason == null ? "null" : _reason.name())); + sb.append(String.format("_node='%s', ", _node == null ? "null" : _node.getInstanceName())); + sb.append(String.format("_description='%s'", _description)); + sb.append("}"); + return sb.toString(); } }
