You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@helix.apache.org by jx...@apache.org on 2018/07/09 22:24:31 UTC
helix git commit: [HELIX-718] implement TaskAssignResult
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 <hr...@linkedin.com>
Authored: Mon Jul 9 14:22:20 2018 -0700
Committer: Harry Zhang <hr...@linkedin.com>
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();
}
}