This is an automated email from the ASF dual-hosted git repository.

chhsiao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mesos.git

commit 120fab6af265fa65dcfaf0c6ca37a276b9b6714f
Author: Chun-Hung Hsiao <[email protected]>
AuthorDate: Fri Mar 1 12:08:01 2019 -0800

    Converted `UUID` proto messages to `id::UUID` in the RP manager.
    
    Since the RP manager might interact with an arbitrary resource provider,
    it should convert a `UUID` proto message received in a
    `UPDATE_PUBLISH_RESOURCES_STATUS` call into a `id::UUID`, and ignore the
    call if its `UUID` is not valid.
    
    Review: https://reviews.apache.org/r/70082
---
 src/resource_provider/manager.cpp | 36 +++++++++++++++++++++++-------------
 1 file changed, 23 insertions(+), 13 deletions(-)

diff --git a/src/resource_provider/manager.cpp 
b/src/resource_provider/manager.cpp
index 876a8b2..7d3338e 100644
--- a/src/resource_provider/manager.cpp
+++ b/src/resource_provider/manager.cpp
@@ -173,7 +173,7 @@ struct ResourceProvider
 
   ResourceProviderInfo info;
   HttpConnection http;
-  hashmap<UUID, Owned<Promise<Nothing>>> publishes;
+  hashmap<id::UUID, Owned<Promise<Nothing>>> publishes;
 };
 
 
@@ -702,12 +702,13 @@ Future<Nothing> 
ResourceProviderManagerProcess::publishResources(
   foreachpair (const ResourceProviderID& resourceProviderId,
                const Resources& resources,
                providedResources) {
-    UUID uuid = protobuf::createUUID();
+    id::UUID uuid = id::UUID::random();
 
     Event event;
     event.set_type(Event::PUBLISH_RESOURCES);
-    event.mutable_publish_resources()->mutable_uuid()->CopyFrom(uuid);
-    
event.mutable_publish_resources()->mutable_resources()->CopyFrom(resources);
+    *event.mutable_publish_resources()->mutable_uuid() =
+      protobuf::createUUID(uuid);
+    *event.mutable_publish_resources()->mutable_resources() = resources;
 
     ResourceProvider* resourceProvider =
       resourceProviders.subscribed.at(resourceProviderId).get();
@@ -960,30 +961,39 @@ void 
ResourceProviderManagerProcess::updatePublishResourcesStatus(
     ResourceProvider* resourceProvider,
     const Call::UpdatePublishResourcesStatus& update)
 {
-  const UUID& uuid = update.uuid();
+  Try<id::UUID> uuid = id::UUID::fromBytes(update.uuid().value());
+
+  if (uuid.isError()) {
+    LOG(ERROR)
+      << "Ignoring UpdatePublishResourcesStatus from resource provider "
+      << resourceProvider->info.id() << ": " << uuid.error();
+
+    return;
+  }
+
+  if (!resourceProvider->publishes.contains(uuid.get())) {
+    LOG(ERROR)
+      << "Ignoring UpdatePublishResourcesStatus from resource provider "
+      << resourceProvider->info.id() << ": Unknown UUID " << uuid.get();
 
-  if (!resourceProvider->publishes.contains(uuid)) {
-    LOG(ERROR) << "Ignoring UpdatePublishResourcesStatus from resource"
-               << " provider " << resourceProvider->info.id()
-               << " because UUID " << uuid << " is unknown";
     return;
   }
 
   LOG(INFO)
     << "Received UPDATE_PUBLISH_RESOURCES_STATUS call for PUBLISH_RESOURCES"
-    << " event " << uuid << " with " << update.status()
+    << " event " << uuid.get() << " with " << update.status()
     << " status from resource provider " << resourceProvider->info.id();
 
   if (update.status() == Call::UpdatePublishResourcesStatus::OK) {
-    resourceProvider->publishes.at(uuid)->set(Nothing());
+    resourceProvider->publishes.at(uuid.get())->set(Nothing());
   } else {
     // TODO(jieyu): Consider to include an error message in
     // 'UpdatePublishResourcesStatus' and surface that to the caller.
-    resourceProvider->publishes.at(uuid)->fail(
+    resourceProvider->publishes.at(uuid.get())->fail(
         "Received " + stringify(update.status()) + " status");
   }
 
-  resourceProvider->publishes.erase(uuid);
+  resourceProvider->publishes.erase(uuid.get());
 }
 
 

Reply via email to