Avoid copying of launch task messages in the master. Prior to this patch, the launch task message was copied into an Accept or Decline call. This updates the handler to perform moves instead.
Review: https://reviews.apache.org/r/65965 Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/b281f56e Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/b281f56e Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/b281f56e Branch: refs/heads/master Commit: b281f56e80a772a0832dbc423f19a5c41c9bc84e Parents: 0bbeac0 Author: Benjamin Mahler <[email protected]> Authored: Wed Mar 7 19:32:08 2018 -0800 Committer: Benjamin Mahler <[email protected]> Committed: Fri Mar 9 12:36:13 2018 -0800 ---------------------------------------------------------------------- src/master/master.cpp | 48 +++++++++++++++++++++------------------------- src/master/master.hpp | 5 +---- 2 files changed, 23 insertions(+), 30 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/b281f56e/src/master/master.cpp ---------------------------------------------------------------------- diff --git a/src/master/master.cpp b/src/master/master.cpp index c89179c..12e314e 100644 --- a/src/master/master.cpp +++ b/src/master/master.cpp @@ -818,11 +818,7 @@ void Master::initialize() &ResourceRequestMessage::requests); install<LaunchTasksMessage>( - &Master::launchTasks, - &LaunchTasksMessage::framework_id, - &LaunchTasksMessage::tasks, - &LaunchTasksMessage::filters, - &LaunchTasksMessage::offer_ids); + &Master::launchTasks); install<ReviveOffersMessage>( &Master::reviveOffers, @@ -3420,17 +3416,15 @@ bool Master::isWhitelistedRole(const string& name) const void Master::launchTasks( const UPID& from, - const FrameworkID& frameworkId, - const vector<TaskInfo>& tasks, - const Filters& filters, - const vector<OfferID>& offerIds) + LaunchTasksMessage&& launchTasksMessage) { - Framework* framework = getFramework(frameworkId); + Framework* framework = getFramework(launchTasksMessage.framework_id()); if (framework == nullptr) { LOG(WARNING) - << "Ignoring launch tasks message for offers " << stringify(offerIds) - << " of framework " << frameworkId + << "Ignoring launch tasks message for offers " + << stringify(launchTasksMessage.offer_ids()) + << " of framework " << launchTasksMessage.framework_id() << " because the framework cannot be found"; return; @@ -3438,7 +3432,8 @@ void Master::launchTasks( if (framework->pid != from) { LOG(WARNING) - << "Ignoring launch tasks message for offers " << stringify(offerIds) + << "Ignoring launch tasks message for offers " + << stringify(launchTasksMessage.offer_ids()) << " from '" << from << "' because it is not from the" << " registered framework " << *framework; @@ -3447,29 +3442,30 @@ void Master::launchTasks( // Currently when no tasks are specified in the launchTasks message // it is implicitly considered a decline of the offers. - if (!tasks.empty()) { + if (!launchTasksMessage.tasks().empty()) { scheduler::Call::Accept message; - message.mutable_filters()->CopyFrom(filters); + + *message.mutable_filters() = + std::move(*launchTasksMessage.mutable_filters()); + + *message.mutable_offer_ids() = + std::move(*launchTasksMessage.mutable_offer_ids()); Offer::Operation* operation = message.add_operations(); operation->set_type(Offer::Operation::LAUNCH); - foreach (const TaskInfo& task, tasks) { - operation->mutable_launch()->add_task_infos()->CopyFrom(task); - } - - foreach (const OfferID& offerId, offerIds) { - message.add_offer_ids()->CopyFrom(offerId); - } + *operation->mutable_launch()->mutable_task_infos() = + std::move(*launchTasksMessage.mutable_tasks()); accept(framework, message); } else { scheduler::Call::Decline message; - message.mutable_filters()->CopyFrom(filters); - foreach (const OfferID& offerId, offerIds) { - message.add_offer_ids()->CopyFrom(offerId); - } + *message.mutable_filters() = + std::move(*launchTasksMessage.mutable_filters()); + + *message.mutable_offer_ids() = + std::move(*launchTasksMessage.mutable_offer_ids()); decline(framework, message); } http://git-wip-us.apache.org/repos/asf/mesos/blob/b281f56e/src/master/master.hpp ---------------------------------------------------------------------- diff --git a/src/master/master.hpp b/src/master/master.hpp index df021ea..0667daf 100644 --- a/src/master/master.hpp +++ b/src/master/master.hpp @@ -433,10 +433,7 @@ public: void launchTasks( const process::UPID& from, - const FrameworkID& frameworkId, - const std::vector<TaskInfo>& tasks, - const Filters& filters, - const std::vector<OfferID>& offerIds); + LaunchTasksMessage&& launchTasksMessage); void reviveOffers( const process::UPID& from,
