Provided resource provider infos in 'UpdateState' message. To support sending 'ResourceProviderInfo's of all known resource providers to the master as part of 'UpdateSlaveMessage', these information has been added to the 'UpdateState' message that is sent from resource provider to agents. Also, an agent now keeps track of all 'ResourceProviderInfo's.
Review: https://reviews.apache.org/r/64370/ Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/12695ec0 Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/12695ec0 Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/12695ec0 Branch: refs/heads/master Commit: 12695ec010e842d54cdb15ea7add73aef6092bb0 Parents: 0bbdbce Author: Jan Schlicht <[email protected]> Authored: Fri Dec 8 11:26:18 2017 +0100 Committer: Benjamin Bannier <[email protected]> Committed: Fri Dec 8 11:26:18 2017 +0100 ---------------------------------------------------------------------- src/resource_provider/manager.cpp | 2 +- src/resource_provider/message.hpp | 4 ++-- src/slave/slave.cpp | 13 ++++++++++++- src/slave/slave.hpp | 2 ++ src/tests/resource_provider_manager_tests.cpp | 5 ++++- 5 files changed, 21 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/12695ec0/src/resource_provider/manager.cpp ---------------------------------------------------------------------- diff --git a/src/resource_provider/manager.cpp b/src/resource_provider/manager.cpp index 879caba..f98611c 100644 --- a/src/resource_provider/manager.cpp +++ b/src/resource_provider/manager.cpp @@ -654,7 +654,7 @@ void ResourceProviderManagerProcess::updateState( << resourceProvider->info.id() << ": " << resourceVersionUuid.error(); ResourceProviderMessage::UpdateState updateState{ - resourceProvider->info.id(), + resourceProvider->info, resourceVersionUuid.get(), update.resources(), {update.operations().begin(), update.operations().end()}}; http://git-wip-us.apache.org/repos/asf/mesos/blob/12695ec0/src/resource_provider/message.hpp ---------------------------------------------------------------------- diff --git a/src/resource_provider/message.hpp b/src/resource_provider/message.hpp index c94e9c7..bbf6bb2 100644 --- a/src/resource_provider/message.hpp +++ b/src/resource_provider/message.hpp @@ -45,7 +45,7 @@ struct ResourceProviderMessage struct UpdateState { - ResourceProviderID id; + ResourceProviderInfo info; UUID resourceVersionUuid; Resources total; std::vector<OfferOperation> operations; @@ -76,7 +76,7 @@ inline std::ostream& operator<<( return stream << "UPDATE_STATE: " - << updateState->id << " " + << updateState->info.id() << " " << updateState->total; } http://git-wip-us.apache.org/repos/asf/mesos/blob/12695ec0/src/slave/slave.cpp ---------------------------------------------------------------------- diff --git a/src/slave/slave.cpp b/src/slave/slave.cpp index 7a4a4ac..54d8bcc 100644 --- a/src/slave/slave.cpp +++ b/src/slave/slave.cpp @@ -7083,7 +7083,18 @@ void Slave::handleResourceProviderMessage( const Resources& newTotal = message->updateState->total; - const ResourceProviderID& resourceProviderId = message->updateState->id; + CHECK(message->updateState->info.has_id()); + + const ResourceProviderID& resourceProviderId = + message->updateState->info.id(); + + if (resourceProviderInfos.contains(resourceProviderId)) { + resourceProviderInfos[resourceProviderId] = message->updateState->info; + } else { + resourceProviderInfos.put( + resourceProviderId, + message->updateState->info); + } const Resources oldTotal = totalResources.filter([&resourceProviderId](const Resource& resource) { http://git-wip-us.apache.org/repos/asf/mesos/blob/12695ec0/src/slave/slave.hpp ---------------------------------------------------------------------- diff --git a/src/slave/slave.hpp b/src/slave/slave.hpp index 297d672..5cb0d55 100644 --- a/src/slave/slave.hpp +++ b/src/slave/slave.hpp @@ -725,6 +725,8 @@ private: process::Owned<LocalResourceProviderDaemon> localResourceProviderDaemon; hashmap<Option<ResourceProviderID>, UUID> resourceVersions; + hashmap<ResourceProviderID, ResourceProviderInfo> resourceProviderInfos; + // Pending operations or terminal operations that have // unacknowledged status updates. hashmap<UUID, OfferOperation*> offerOperations; http://git-wip-us.apache.org/repos/asf/mesos/blob/12695ec0/src/tests/resource_provider_manager_tests.cpp ---------------------------------------------------------------------- diff --git a/src/tests/resource_provider_manager_tests.cpp b/src/tests/resource_provider_manager_tests.cpp index 7c34b66..a6eb4c9 100644 --- a/src/tests/resource_provider_manager_tests.cpp +++ b/src/tests/resource_provider_manager_tests.cpp @@ -339,7 +339,10 @@ TEST_P(ResourceProviderManagerHttpApiTest, UpdateState) AWAIT_READY(message); EXPECT_EQ(ResourceProviderMessage::Type::UPDATE_STATE, message->type); - EXPECT_EQ(devolve(resourceProviderId.get()), message->updateState->id); + ASSERT_TRUE(message->updateState->info.has_id()); + EXPECT_EQ( + devolve(resourceProviderId.get()), + message->updateState->info.id()); EXPECT_EQ(devolve(resources), message->updateState->total); } }
