You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by ji...@apache.org on 2018/02/02 17:32:18 UTC

mesos git commit: Added metrics for showing number of subscribed resource providers.

Repository: mesos
Updated Branches:
  refs/heads/master 1600ebc69 -> 25feb869e


Added metrics for showing number of subscribed resource providers.

Review: https://reviews.apache.org/r/65470


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/25feb869
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/25feb869
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/25feb869

Branch: refs/heads/master
Commit: 25feb869e797b600cc6159d951fe70d4db685445
Parents: 1600ebc
Author: Jie Yu <yu...@gmail.com>
Authored: Thu Feb 1 15:37:35 2018 -0800
Committer: Jie Yu <yu...@gmail.com>
Committed: Fri Feb 2 09:32:14 2018 -0800

----------------------------------------------------------------------
 src/resource_provider/manager.cpp             | 43 ++++++++++++++++--
 src/tests/resource_provider_manager_tests.cpp | 53 ++++++++++++++++++++++
 2 files changed, 93 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/25feb869/src/resource_provider/manager.cpp
----------------------------------------------------------------------
diff --git a/src/resource_provider/manager.cpp b/src/resource_provider/manager.cpp
index 5d064bf..cc195a3 100644
--- a/src/resource_provider/manager.cpp
+++ b/src/resource_provider/manager.cpp
@@ -32,6 +32,9 @@
 #include <process/id.hpp>
 #include <process/process.hpp>
 
+#include <process/metrics/gauge.hpp>
+#include <process/metrics/metrics.hpp>
+
 #include <stout/hashmap.hpp>
 #include <stout/protobuf.hpp>
 #include <stout/uuid.hpp>
@@ -80,6 +83,7 @@ using process::http::UnsupportedMediaType;
 
 using process::http::authentication::Principal;
 
+using process::metrics::Gauge;
 
 namespace mesos {
 namespace internal {
@@ -188,17 +192,28 @@ private:
 
   ResourceProviderID newResourceProviderId();
 
+  double gaugeSubscribed();
+
   struct ResourceProviders
   {
     hashmap<ResourceProviderID, Owned<ResourceProvider>> subscribed;
   } resourceProviders;
+
+  struct Metrics
+  {
+    explicit Metrics(const ResourceProviderManagerProcess& manager);
+    ~Metrics();
+
+    Gauge subscribed;
+  };
+
+  Metrics metrics;
 };
 
 
 ResourceProviderManagerProcess::ResourceProviderManagerProcess()
-  : ProcessBase(process::ID::generate("resource-provider-manager"))
-{
-}
+  : ProcessBase(process::ID::generate("resource-provider-manager")),
+    metrics(*this) {}
 
 
 Future<http::Response> ResourceProviderManagerProcess::api(
@@ -742,6 +757,28 @@ ResourceProviderID ResourceProviderManagerProcess::newResourceProviderId()
 }
 
 
+double ResourceProviderManagerProcess::gaugeSubscribed()
+{
+  return static_cast<double>(resourceProviders.subscribed.size());
+}
+
+
+ResourceProviderManagerProcess::Metrics::Metrics(
+    const ResourceProviderManagerProcess& manager)
+  : subscribed(
+      "resource_provider_manager/subscribed",
+      defer(manager, &ResourceProviderManagerProcess::gaugeSubscribed))
+{
+  process::metrics::add(subscribed);
+}
+
+
+ResourceProviderManagerProcess::Metrics::~Metrics()
+{
+  process::metrics::remove(subscribed);
+}
+
+
 ResourceProviderManager::ResourceProviderManager()
   : process(new ResourceProviderManagerProcess())
 {

http://git-wip-us.apache.org/repos/asf/mesos/blob/25feb869/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 2944b06..c8997ec 100644
--- a/src/tests/resource_provider_manager_tests.cpp
+++ b/src/tests/resource_provider_manager_tests.cpp
@@ -56,6 +56,7 @@
 #include "slave/slave.hpp"
 
 #include "tests/mesos.hpp"
+#include "tests/utils.hpp"
 
 namespace http = process::http;
 
@@ -1312,6 +1313,58 @@ TEST_F(ResourceProviderManagerHttpApiTest, ResourceProviderSubscribeDisconnect)
   AWAIT_READY(subscribed2);
 }
 
+
+TEST_F(ResourceProviderManagerHttpApiTest, Metrics)
+{
+  Clock::pause();
+
+  // Start master and agent.
+  master::Flags masterFlags = CreateMasterFlags();
+  Try<Owned<cluster::Master>> master = StartMaster(masterFlags);
+  ASSERT_SOME(master);
+
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
+
+  slave::Flags slaveFlags = CreateSlaveFlags();
+
+  Try<Owned<cluster::Slave>> agent = StartSlave(detector.get(), slaveFlags);
+  ASSERT_SOME(agent);
+
+  Clock::advance(slaveFlags.registration_backoff_factor);
+  Clock::settle();
+
+  AWAIT_READY(updateSlaveMessage);
+
+  mesos::v1::ResourceProviderInfo resourceProviderInfo;
+  resourceProviderInfo.set_type("org.apache.mesos.rp.test");
+  resourceProviderInfo.set_name("test");
+
+  Owned<v1::MockResourceProvider> resourceProvider(
+      new v1::MockResourceProvider(resourceProviderInfo));
+
+  // Start and register a resource provider.
+  Owned<EndpointDetector> endpointDetector(
+      resource_provider::createEndpointDetector(agent.get()->pid));
+
+  Future<Event::Subscribed> subscribed;
+  EXPECT_CALL(*resourceProvider, subscribed(_))
+    .WillOnce(FutureArg<0>(&subscribed));
+
+  resourceProvider->start(
+      endpointDetector,
+      ContentType::PROTOBUF,
+      v1::DEFAULT_CREDENTIAL);
+
+  AWAIT_READY(subscribed);
+
+  const JSON::Object snapshot = Metrics();
+
+  EXPECT_EQ(1, snapshot.values.at("resource_provider_manager/subscribed"));
+}
+
 } // namespace tests {
 } // namespace internal {
 } // namespace mesos {