You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@twill.apache.org by ch...@apache.org on 2017/02/28 22:43:53 UTC

[09/12] twill git commit: Expose container instanceId instead of parsing it from runId

Expose container instanceId instead of parsing it from runId

Project: http://git-wip-us.apache.org/repos/asf/twill/repo
Commit: http://git-wip-us.apache.org/repos/asf/twill/commit/0561fdb0
Tree: http://git-wip-us.apache.org/repos/asf/twill/tree/0561fdb0
Diff: http://git-wip-us.apache.org/repos/asf/twill/diff/0561fdb0

Branch: refs/heads/feature/twill-186
Commit: 0561fdb058098aa286e8c4fefb933e34e25e8f31
Parents: 68257b6
Author: Terence Yim <ch...@apache.org>
Authored: Tue Feb 28 11:45:06 2017 -0800
Committer: Terence Yim <ch...@apache.org>
Committed: Tue Feb 28 13:29:46 2017 -0800

----------------------------------------------------------------------
 .../twill/internal/TwillContainerController.java       | 10 +++++++++-
 .../apache/twill/internal/TwillContainerLauncher.java  |  5 +++++
 .../twill/internal/appmaster/RunningContainers.java    | 13 +++----------
 3 files changed, 17 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/twill/blob/0561fdb0/twill-core/src/main/java/org/apache/twill/internal/TwillContainerController.java
----------------------------------------------------------------------
diff --git a/twill-core/src/main/java/org/apache/twill/internal/TwillContainerController.java b/twill-core/src/main/java/org/apache/twill/internal/TwillContainerController.java
index 692e6b2..15689f5 100644
--- a/twill-core/src/main/java/org/apache/twill/internal/TwillContainerController.java
+++ b/twill-core/src/main/java/org/apache/twill/internal/TwillContainerController.java
@@ -22,6 +22,8 @@ import com.google.common.util.concurrent.Service;
 import org.apache.twill.api.ServiceController;
 import org.apache.twill.internal.state.Message;
 
+import javax.annotation.Nullable;
+
 /**
  * A {@link ServiceController} that allows sending a message directly. Internal use only.
  */
@@ -36,7 +38,13 @@ public interface TwillContainerController extends ServiceController, Service {
   void completed(int exitStatus);
 
   /**
-   * @returns the container's live node data.
+   * @return the container's live node data.
    */
+  @Nullable
   ContainerLiveNodeData getLiveNodeData();
+
+  /**
+   * @return the instance ID of the runnable that running in the container controlled by this controller.
+   */
+  int getInstanceId();
 }

http://git-wip-us.apache.org/repos/asf/twill/blob/0561fdb0/twill-core/src/main/java/org/apache/twill/internal/TwillContainerLauncher.java
----------------------------------------------------------------------
diff --git a/twill-core/src/main/java/org/apache/twill/internal/TwillContainerLauncher.java b/twill-core/src/main/java/org/apache/twill/internal/TwillContainerLauncher.java
index 8dce91e..9b6384c 100644
--- a/twill-core/src/main/java/org/apache/twill/internal/TwillContainerLauncher.java
+++ b/twill-core/src/main/java/org/apache/twill/internal/TwillContainerLauncher.java
@@ -262,6 +262,11 @@ public final class TwillContainerLauncher {
       processController.cancel();
     }
 
+    @Override
+    public int getInstanceId() {
+      return instanceId;
+    }
+
     private void killAndWait(int maxWaitSecs) {
       Stopwatch watch = new Stopwatch();
       watch.start();

http://git-wip-us.apache.org/repos/asf/twill/blob/0561fdb0/twill-yarn/src/main/java/org/apache/twill/internal/appmaster/RunningContainers.java
----------------------------------------------------------------------
diff --git a/twill-yarn/src/main/java/org/apache/twill/internal/appmaster/RunningContainers.java b/twill-yarn/src/main/java/org/apache/twill/internal/appmaster/RunningContainers.java
index 563913b..a950c46 100644
--- a/twill-yarn/src/main/java/org/apache/twill/internal/appmaster/RunningContainers.java
+++ b/twill-yarn/src/main/java/org/apache/twill/internal/appmaster/RunningContainers.java
@@ -37,7 +37,6 @@ import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.Service;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
-
 import org.apache.hadoop.yarn.api.records.ContainerState;
 import org.apache.twill.api.ResourceReport;
 import org.apache.twill.api.RunId;
@@ -81,7 +80,6 @@ import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.locks.Condition;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
-
 import javax.annotation.Nullable;
 
 /**
@@ -238,7 +236,7 @@ final class RunningContainers {
     try {
       // Find the controller with particular instance id.
       for (Map.Entry<String, TwillContainerController> entry : containers.row(runnableName).entrySet()) {
-        if (getInstanceId(entry.getValue().getRunId()) == instanceId) {
+        if (entry.getValue().getInstanceId() == instanceId) {
           containerId = entry.getKey();
           controller = entry.getValue();
           break;
@@ -451,7 +449,7 @@ final class RunningContainers {
 
       for (Map.Entry<String, TwillContainerController> completedEntry : lookup.entrySet()) {
         TwillContainerController controller = completedEntry.getValue();
-        instanceId = getInstanceId(controller.getRunId());
+        instanceId = controller.getInstanceId();
 
         // TODO: Can there be multiple controllers for a single container?
         // TODO: What is the best way to determine whether to restart container when there are multiple controllers?
@@ -468,7 +466,7 @@ final class RunningContainers {
         }
         // TODO: should we remove the completed instance from instanceId and resource report even on failures?
         // TODO: won't they get added back when the container is re-requested?
-        removeInstanceId(runnableName, getInstanceId(controller.getRunId()));
+        removeInstanceId(runnableName, controller.getInstanceId());
         resourceReport.removeRunnableResources(runnableName, containerId);
       }
       
@@ -653,11 +651,6 @@ final class RunningContainers {
     return RunIds.fromString(baseId.getId() + '-' + instanceId);
   }
 
-  private int getInstanceId(RunId runId) {
-    String id = runId.getId();
-    return Integer.parseInt(id.substring(id.lastIndexOf('-') + 1));
-  }
-
   /**
    * Given the containerId, removes the corresponding containerInfo.
    * @param containerId Id for the container to be removed.