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 {