Avoid a copy of the scheduler->executor message in the master. This avoids a copy in both the v1 http and v0 message code paths.
Review: https://reviews.apache.org/r/65971 Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/53f253f9 Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/53f253f9 Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/53f253f9 Branch: refs/heads/master Commit: 53f253f96b7fd6e59f3cfaf5964d95c155718bab Parents: ff85aeb Author: Benjamin Mahler <[email protected]> Authored: Wed Mar 7 20:08:57 2018 -0800 Committer: Benjamin Mahler <[email protected]> Committed: Fri Mar 9 12:36:14 2018 -0800 ---------------------------------------------------------------------- src/master/http.cpp | 2 +- src/master/master.cpp | 15 ++++++++------- src/master/master.hpp | 2 +- 3 files changed, 10 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/53f253f9/src/master/http.cpp ---------------------------------------------------------------------- diff --git a/src/master/http.cpp b/src/master/http.cpp index 0bca8bd..cf03d8b 100644 --- a/src/master/http.cpp +++ b/src/master/http.cpp @@ -1144,7 +1144,7 @@ Future<Response> Master::Http::scheduler( return Forbidden("Operation reconciliation is not yet implemented"); case scheduler::Call::MESSAGE: - master->message(framework, call.message()); + master->message(framework, std::move(*call.mutable_message())); return Accepted(); case scheduler::Call::REQUEST: http://git-wip-us.apache.org/repos/asf/mesos/blob/53f253f9/src/master/master.cpp ---------------------------------------------------------------------- diff --git a/src/master/master.cpp b/src/master/master.cpp index 221c215..fd64c88 100644 --- a/src/master/master.cpp +++ b/src/master/master.cpp @@ -2425,7 +2425,7 @@ void Master::receive( break; case scheduler::Call::MESSAGE: - message(framework, call.message()); + message(framework, std::move(*call.mutable_message())); break; case scheduler::Call::REQUEST: @@ -5904,7 +5904,7 @@ void Master::schedulerMessage( message_.mutable_executor_id()->CopyFrom(executorId); message_.set_data(data); - message(framework, message_); + message(framework, std::move(message_)); } @@ -5969,7 +5969,7 @@ void Master::executorMessage( void Master::message( Framework* framework, - const scheduler::Call::Message& message) + scheduler::Call::Message&& message) { CHECK_NOTNULL(framework); @@ -5997,10 +5997,11 @@ void Master::message( << *framework << " to agent " << *slave; FrameworkToExecutorMessage message_; - message_.mutable_slave_id()->MergeFrom(message.slave_id()); - message_.mutable_framework_id()->MergeFrom(framework->id()); - message_.mutable_executor_id()->MergeFrom(message.executor_id()); - message_.set_data(message.data()); + *message_.mutable_slave_id() = std::move(*message.mutable_slave_id()); + *message_.mutable_framework_id() = framework->id(); + *message_.mutable_executor_id() = std::move(*message.mutable_executor_id()); + *message_.mutable_data() = std::move(*message.mutable_data()); + send(slave->pid, message_); metrics->valid_framework_to_executor_messages++; http://git-wip-us.apache.org/repos/asf/mesos/blob/53f253f9/src/master/master.hpp ---------------------------------------------------------------------- diff --git a/src/master/master.hpp b/src/master/master.hpp index ba06266..65a1404 100644 --- a/src/master/master.hpp +++ b/src/master/master.hpp @@ -1061,7 +1061,7 @@ private: void message( Framework* framework, - const scheduler::Call::Message& message); + scheduler::Call::Message&& message); void request( Framework* framework,
