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);
   }
 }

Reply via email to