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: