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();
   }
 }