You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by vi...@apache.org on 2013/08/14 20:07:36 UTC

[13/18] git commit: Fixed slave to use LinkedHashMap to store tasks.

Fixed slave to use LinkedHashMap to store tasks.

Review: https://reviews.apache.org/r/13485


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/010fa314
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/010fa314
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/010fa314

Branch: refs/heads/master
Commit: 010fa31495cbede6528f2a576497e9b890fcebfb
Parents: a2ebf17
Author: Vinod Kone <vi...@twitter.com>
Authored: Sun Aug 11 17:09:17 2013 -0700
Committer: Vinod Kone <vi...@twitter.com>
Committed: Wed Aug 14 10:56:36 2013 -0700

----------------------------------------------------------------------
 src/slave/http.cpp  | 18 +++++++++++++-----
 src/slave/slave.cpp | 40 ++++++++++++++++++++++++++++++----------
 src/slave/slave.hpp |  7 ++++---
 3 files changed, 47 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/010fa314/src/slave/http.cpp
----------------------------------------------------------------------
diff --git a/src/slave/http.cpp b/src/slave/http.cpp
index c45dfb4..073d092 100644
--- a/src/slave/http.cpp
+++ b/src/slave/http.cpp
@@ -204,22 +204,30 @@ JSON::Object model(const Executor& executor)
   object.values["resources"] = model(executor.resources);
 
   JSON::Array tasks;
-  foreachvalue (Task* task, executor.launchedTasks) {
+  foreach (Task* task, executor.launchedTasks.values()) {
     tasks.values.push_back(model(*task));
   }
   object.values["tasks"] = tasks;
 
   JSON::Array queued;
-  foreachvalue (const TaskInfo& task, executor.queuedTasks) {
+  foreach (const TaskInfo& task, executor.queuedTasks.values()) {
     queued.values.push_back(model(task));
   }
   object.values["queued_tasks"] = queued;
 
-  JSON::Array completedTasks;
+  JSON::Array completed;
   foreach (const Task& task, executor.completedTasks) {
-    completedTasks.values.push_back(model(task));
+    completed.values.push_back(model(task));
   }
-  object.values["completed_tasks"] = completedTasks;
+
+  // NOTE: We add 'terminatedTasks' to 'completed_tasks' for
+  // simplicity.
+  // TODO(vinod): Use foreachvalue instead once LinkedHashmap
+  // supports it.
+  foreach (Task* task, executor.terminatedTasks.values()) {
+    completed.values.push_back(model(*task));
+  }
+  object.values["completed_tasks"] = completed;
 
   return object;
 }

http://git-wip-us.apache.org/repos/asf/mesos/blob/010fa314/src/slave/slave.cpp
----------------------------------------------------------------------
diff --git a/src/slave/slave.cpp b/src/slave/slave.cpp
index 83c250a..11e4826 100644
--- a/src/slave/slave.cpp
+++ b/src/slave/slave.cpp
@@ -714,12 +714,16 @@ void Slave::doReliableRegistration()
         executorInfo->mutable_framework_id()->MergeFrom(framework->id);
 
         // Add launched tasks.
-        foreachvalue (Task* task, executor->launchedTasks) {
+        // TODO(vinod): Use foreachvalue instead once LinkedHashmap
+        // supports it.
+        foreach (Task* task, executor->launchedTasks.values()) {
           message.add_tasks()->CopyFrom(*task);
         }
 
         // Add queued tasks.
-        foreachvalue (const TaskInfo& task, executor->queuedTasks) {
+        // TODO(vinod): Use foreachvalue instead once LinkedHashmap
+        // supports it.
+        foreach (const TaskInfo& task, executor->queuedTasks.values()) {
           const Task& t = protobuf::createTask(
               task, TASK_STAGING, executor->id, framework->id);
 
@@ -727,7 +731,9 @@ void Slave::doReliableRegistration()
         }
 
         // Add terminated tasks.
-        foreachvalue (Task* task, executor->terminatedTasks) {
+        // TODO(vinod): Use foreachvalue instead once LinkedHashmap
+        // supports it.
+        foreach (Task* task, executor->terminatedTasks.values()) {
           message.add_tasks()->CopyFrom(*task);
         }
       }
@@ -1509,7 +1515,9 @@ void Slave::registerExecutor(
       }
 
       // First account for the tasks we're about to start.
-      foreachvalue (const TaskInfo& task, executor->queuedTasks) {
+      // TODO(vinod): Use foreachvalue instead once LinkedHashmap
+      // supports it.
+      foreach (const TaskInfo& task, executor->queuedTasks.values()) {
         // Add the task to the executor.
         executor->addTask(task);
       }
@@ -1534,7 +1542,9 @@ void Slave::registerExecutor(
       message.mutable_slave_info()->MergeFrom(info);
       send(executor->pid, message);
 
-      foreachvalue (const TaskInfo& task, executor->queuedTasks) {
+      // TODO(vinod): Use foreachvalue instead once LinkedHashmap
+      // supports it.
+      foreach (const TaskInfo& task, executor->queuedTasks.values()) {
         LOG(INFO) << "Flushing queued task " << task.task_id()
                   << " for executor '" << executor->id << "'"
                   << " of framework " << framework->id;
@@ -1641,7 +1651,9 @@ void Slave::reregisterExecutor(
         launched[task.task_id()] = task;
       }
 
-      foreachvalue (Task* task, executor->launchedTasks) {
+      // TODO(vinod): Use foreachvalue instead once LinkedHashmap
+      // supports it.
+      foreach (Task* task, executor->launchedTasks.values()) {
         if (task->state() == TASK_STAGING &&
             !launched.contains(task->task_id())) {
 
@@ -2138,7 +2150,9 @@ void Slave::executorTerminated(
         StatusUpdate update;
 
         // Transition all live launched tasks.
-        foreachvalue (Task* task, utils::copy(executor->launchedTasks)) {
+        // TODO(vinod): Use foreachvalue instead once LinkedHashmap
+        // supports it.
+        foreach (Task* task, executor->launchedTasks.values()) {
           if (!protobuf::isTerminalState(task->state())) {
             mesos::TaskState taskState;
             isCommandExecutor = !task->has_executor_id();
@@ -2158,8 +2172,9 @@ void Slave::executorTerminated(
         }
 
         // Transition all queued tasks.
-        foreachvalue (const TaskInfo& task,
-                      utils::copy(executor->queuedTasks)) {
+        // TODO(vinod): Use foreachvalue instead once LinkedHashmap
+        // supports it.
+        foreach (const TaskInfo& task, executor->queuedTasks.values()) {
           mesos::TaskState taskState;
           isCommandExecutor = task.has_command();
           if (destroyed || isCommandExecutor.get()) {
@@ -3006,7 +3021,12 @@ Executor::Executor(
 Executor::~Executor()
 {
   // Delete the tasks.
-  foreachvalue (Task* task, launchedTasks) {
+  // TODO(vinod): Use foreachvalue instead once LinkedHashmap
+  // supports it.
+  foreach (Task* task, launchedTasks.values()) {
+    delete task;
+  }
+  foreach (Task* task, terminatedTasks.values()) {
     delete task;
   }
 }

http://git-wip-us.apache.org/repos/asf/mesos/blob/010fa314/src/slave/slave.hpp
----------------------------------------------------------------------
diff --git a/src/slave/slave.hpp b/src/slave/slave.hpp
index 464d224..93fd32e 100644
--- a/src/slave/slave.hpp
+++ b/src/slave/slave.hpp
@@ -34,6 +34,7 @@
 #include <process/protobuf.hpp>
 
 #include <stout/bytes.hpp>
+#include <stout/linkedhashmap.hpp>
 #include <stout/hashmap.hpp>
 #include <stout/hashset.hpp>
 #include <stout/multihashmap.hpp>
@@ -378,9 +379,9 @@ struct Executor
 
   Resources resources; // Currently consumed resources.
 
-  hashmap<TaskID, TaskInfo> queuedTasks; // Not yet launched.
-  hashmap<TaskID, Task*> launchedTasks;  // Running.
-  hashmap<TaskID, Task*> terminatedTasks; // Terminated but pending updates.
+  LinkedHashMap<TaskID, TaskInfo> queuedTasks; // Not yet launched.
+  LinkedHashMap<TaskID, Task*> launchedTasks;  // Running.
+  LinkedHashMap<TaskID, Task*> terminatedTasks; // Terminated but pending updates.
   boost::circular_buffer<Task> completedTasks; // Terminated and updates acked.
 
 private: