Added helper to model Labels message for state.json. Also updated Task modelling to show labels only if Task.has_labels() is true. This way, the "labels" field won't shown if there are no labels. This makes it consistent with the modelling of rest of the "optional" fields.
Review: https://reviews.apache.org/r/38366 Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/fd0a431c Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/fd0a431c Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/fd0a431c Branch: refs/heads/master Commit: fd0a431c340d66f96f71715ace0d10d9c1b17b49 Parents: 6923bb3 Author: Kapil Arya <[email protected]> Authored: Wed Sep 16 17:01:54 2015 -0700 Committer: Niklas Q. Nielsen <[email protected]> Committed: Wed Sep 16 17:01:55 2015 -0700 ---------------------------------------------------------------------- src/common/http.cpp | 42 ++++++++++++++---------------------- src/common/http.hpp | 1 + src/common/protobuf_utils.cpp | 4 +++- src/master/master.cpp | 4 +++- src/tests/common/http_tests.cpp | 1 - 5 files changed, 23 insertions(+), 29 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/fd0a431c/src/common/http.cpp ---------------------------------------------------------------------- diff --git a/src/common/http.cpp b/src/common/http.cpp index 9c0d31e..85fb932 100644 --- a/src/common/http.cpp +++ b/src/common/http.cpp @@ -139,6 +139,17 @@ JSON::Object model(const Attributes& attributes) } +JSON::Array model(const Labels& labels) +{ + JSON::Array array; + array.values.reserve(labels.labels().size()); // MESOS-2353. + foreach (const Label& label, labels.labels()) { + array.values.push_back(JSON::Protobuf(label)); + } + return array; +} + + // Returns a JSON object modeled on a TaskStatus. JSON::Object model(const TaskStatus& status) { @@ -147,13 +158,8 @@ JSON::Object model(const TaskStatus& status) object.values["timestamp"] = status.timestamp(); if (status.has_labels()) { - JSON::Array array; - array.values.reserve(status.labels().labels().size()); // MESOS-2353. + object.values["labels"] = std::move(model(status.labels())); - foreach (const Label& label, status.labels().labels()) { - array.values.push_back(JSON::Protobuf(label)); - } - object.values["labels"] = std::move(array); } return object; @@ -188,16 +194,8 @@ JSON::Object model(const Task& task) object.values["statuses"] = std::move(array); } - { - JSON::Array array; - if (task.has_labels()) { - array.values.reserve(task.labels().labels().size()); // MESOS-2353. - - foreach (const Label& label, task.labels().labels()) { - array.values.push_back(JSON::Protobuf(label)); - } - } - object.values["labels"] = std::move(array); + if (task.has_labels()) { + object.values["labels"] = std::move(model(task.labels())); } if (task.has_discovery()) { @@ -299,16 +297,8 @@ JSON::Object model( object.values["statuses"] = std::move(array); } - { - JSON::Array array; - if (task.has_labels()) { - array.values.reserve(task.labels().labels().size()); // MESOS-2353. - - foreach (const Label& label, task.labels().labels()) { - array.values.push_back(JSON::Protobuf(label)); - } - } - object.values["labels"] = std::move(array); + if (task.has_labels()) { + object.values["labels"] = std::move(model(task.labels())); } if (task.has_discovery()) { http://git-wip-us.apache.org/repos/asf/mesos/blob/fd0a431c/src/common/http.hpp ---------------------------------------------------------------------- diff --git a/src/common/http.hpp b/src/common/http.hpp index 61ad531..1e61888 100644 --- a/src/common/http.hpp +++ b/src/common/http.hpp @@ -79,6 +79,7 @@ JSON::Object model(const hashmap<std::string, Resources>& roleResources); JSON::Object model(const Attributes& attributes); JSON::Object model(const CommandInfo& command); JSON::Object model(const ExecutorInfo& executorInfo); +JSON::Array model(const Labels& labels); // These are the two identical ways to model a task, depending on // whether you have a 'Task' or a 'TaskInfo' available. http://git-wip-us.apache.org/repos/asf/mesos/blob/fd0a431c/src/common/protobuf_utils.cpp ---------------------------------------------------------------------- diff --git a/src/common/protobuf_utils.cpp b/src/common/protobuf_utils.cpp index 0861270..c8e6211 100644 --- a/src/common/protobuf_utils.cpp +++ b/src/common/protobuf_utils.cpp @@ -137,7 +137,9 @@ Task createTask( t.mutable_executor_id()->CopyFrom(task.executor().executor_id()); } - t.mutable_labels()->MergeFrom(task.labels()); + if (task.has_labels()) { + t.mutable_labels()->CopyFrom(task.labels()); + } if (task.has_discovery()) { t.mutable_discovery()->MergeFrom(task.discovery()); http://git-wip-us.apache.org/repos/asf/mesos/blob/fd0a431c/src/master/master.cpp ---------------------------------------------------------------------- diff --git a/src/master/master.cpp b/src/master/master.cpp index f26271c..1c4e7af 100644 --- a/src/master/master.cpp +++ b/src/master/master.cpp @@ -2743,7 +2743,9 @@ Resources Master::addTask( t->mutable_executor_id()->MergeFrom(executorId.get()); } - t->mutable_labels()->MergeFrom(task.labels()); + if (task.has_labels()) { + t->mutable_labels()->MergeFrom(task.labels()); + } if (task.has_discovery()) { t->mutable_discovery()->MergeFrom(task.discovery()); } http://git-wip-us.apache.org/repos/asf/mesos/blob/fd0a431c/src/tests/common/http_tests.cpp ---------------------------------------------------------------------- diff --git a/src/tests/common/http_tests.cpp b/src/tests/common/http_tests.cpp index bf8712b..8a01ffc 100644 --- a/src/tests/common/http_tests.cpp +++ b/src/tests/common/http_tests.cpp @@ -88,7 +88,6 @@ TEST(HTTPTest, ModelTask) " \"executor_id\":\"\"," " \"framework_id\":\"f\"," " \"id\":\"t\"," - " \"labels\": []," " \"name\":\"task\"," " \"resources\":" " {"
