summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Benvenuto <mark.benvenuto@mongodb.com>2018-05-01 13:37:31 -0400
committerMark Benvenuto <mark.benvenuto@mongodb.com>2018-05-01 13:37:31 -0400
commit404b3532261866aec6a05a8e4fb7e35c212986d5 (patch)
tree83f8c3076e7a5078f8807bde20dd44ed5e6aba82
parent720d7a3db3bfd95a2b425092e656c53f3d089117 (diff)
downloadmongo-404b3532261866aec6a05a8e4fb7e35c212986d5.tar.gz
SERVER-34228 Make Free Monitoring a proper string vector
-rw-r--r--jstests/free_mon/free_mon_register.js2
-rw-r--r--src/mongo/db/free_mon/free_mon_controller.cpp5
-rw-r--r--src/mongo/db/free_mon/free_mon_controller.h2
-rw-r--r--src/mongo/db/free_mon/free_mon_controller_test.cpp41
-rw-r--r--src/mongo/db/free_mon/free_mon_mongod.cpp2
-rw-r--r--src/mongo/db/free_mon/free_mon_options.cpp16
-rw-r--r--src/mongo/db/free_mon/free_mon_options.h3
-rw-r--r--src/mongo/db/free_mon/free_mon_processor.cpp2
-rw-r--r--src/mongo/db/free_mon/free_mon_protocol.idl4
9 files changed, 44 insertions, 33 deletions
diff --git a/jstests/free_mon/free_mon_register.js b/jstests/free_mon/free_mon_register.js
index 5524691a698..d2619d117df 100644
--- a/jstests/free_mon/free_mon_register.js
+++ b/jstests/free_mon/free_mon_register.js
@@ -12,6 +12,7 @@ load("jstests/free_mon/libs/free_mon.js");
let options = {
setParameter: "cloudFreeMonitoringEndpointURL=" + mock_web.getURL(),
enableFreeMonitoring: "on",
+ freeMonitoringTag: "foo",
verbose: 1,
};
@@ -33,6 +34,7 @@ load("jstests/free_mon/libs/free_mon.js");
assert.eq(last_register.payload.buildInfo.ok, 1);
assert.eq(last_register.payload.storageEngine.readOnly, false);
assert.eq(last_register.payload.isMaster.ok, 1);
+ assert.eq(last_register.tags, ["foo"]);
mock_web.waitMetrics(2);
diff --git a/src/mongo/db/free_mon/free_mon_controller.cpp b/src/mongo/db/free_mon/free_mon_controller.cpp
index 3c50d193d07..30e31e5cf99 100644
--- a/src/mongo/db/free_mon/free_mon_controller.cpp
+++ b/src/mongo/db/free_mon/free_mon_controller.cpp
@@ -98,7 +98,7 @@ void FreeMonController::_enqueue(std::shared_ptr<FreeMonMessage> msg) {
_processor->enqueue(std::move(msg));
}
-void FreeMonController::start(RegistrationType registrationType) {
+void FreeMonController::start(RegistrationType registrationType, std::vector<std::string>& tags) {
{
stdx::lock_guard<stdx::mutex> lock(_mutex);
@@ -119,8 +119,7 @@ void FreeMonController::start(RegistrationType registrationType) {
}
if (registrationType != RegistrationType::DoNotRegister) {
- std::vector<std::string> vec;
- registerServerStartup(registrationType, vec);
+ registerServerStartup(registrationType, tags);
}
}
diff --git a/src/mongo/db/free_mon/free_mon_controller.h b/src/mongo/db/free_mon/free_mon_controller.h
index 0e3aece0694..b2eac2cdda8 100644
--- a/src/mongo/db/free_mon/free_mon_controller.h
+++ b/src/mongo/db/free_mon/free_mon_controller.h
@@ -58,7 +58,7 @@ public:
* Initializes free monitoring.
* Start free monitoring thread in the background.
*/
- void start(RegistrationType registrationType);
+ void start(RegistrationType registrationType, std::vector<std::string>& tags);
/**
* Stops free monitoring thread.
diff --git a/src/mongo/db/free_mon/free_mon_controller_test.cpp b/src/mongo/db/free_mon/free_mon_controller_test.cpp
index 28ac5506f92..9fd66fbf517 100644
--- a/src/mongo/db/free_mon/free_mon_controller_test.cpp
+++ b/src/mongo/db/free_mon/free_mon_controller_test.cpp
@@ -831,6 +831,12 @@ struct ControllerHolder {
controller->stop();
}
+ void start(RegistrationType registrationType) {
+ std::vector<std::string> tags;
+ controller->start(registrationType, tags);
+ }
+
+
FreeMonController* operator->() {
return controller.get();
}
@@ -842,11 +848,12 @@ struct ControllerHolder {
std::unique_ptr<FreeMonController> controller;
};
+
// Positive: Test Register works
TEST_F(FreeMonControllerTest, TestRegister) {
ControllerHolder controller(_mockThreadPool.get(), FreeMonNetworkInterfaceMock::Options());
- controller->start(RegistrationType::DoNotRegister);
+ controller.start(RegistrationType::DoNotRegister);
ASSERT_OK(controller->registerServerCommand(Milliseconds::min()));
@@ -866,7 +873,7 @@ TEST_F(FreeMonControllerTest, TestRegisterTimeout) {
ControllerHolder controller(_mockThreadPool.get(), opts);
- controller->start(RegistrationType::DoNotRegister);
+ controller.start(RegistrationType::DoNotRegister);
ASSERT_OK(controller->registerServerCommand(Milliseconds::min()));
controller->turnCrankForTest(Turner().registerCommand(2));
@@ -883,7 +890,7 @@ TEST_F(FreeMonControllerTest, TestRegisterFail) {
opts.invalidRegister = true;
ControllerHolder controller(_mockThreadPool.get(), opts, false);
- controller->start(RegistrationType::DoNotRegister);
+ controller.start(RegistrationType::DoNotRegister);
ASSERT_NOT_OK(controller->registerServerCommand(duration_cast<Milliseconds>(Seconds(15))));
@@ -900,7 +907,7 @@ TEST_F(FreeMonControllerTest, TestRegisterHalts) {
opts.haltRegister = true;
ControllerHolder controller(_mockThreadPool.get(), opts);
- controller->start(RegistrationType::DoNotRegister);
+ controller.start(RegistrationType::DoNotRegister);
ASSERT_OK(controller->registerServerCommand(Milliseconds::min()));
controller->turnCrankForTest(Turner().registerCommand());
@@ -915,7 +922,7 @@ TEST_F(FreeMonControllerTest, TestRegisterHalts) {
TEST_F(FreeMonControllerTest, TestMetrics) {
ControllerHolder controller(_mockThreadPool.get(), FreeMonNetworkInterfaceMock::Options());
- controller->start(RegistrationType::RegisterOnStart);
+ controller.start(RegistrationType::RegisterOnStart);
controller->turnCrankForTest(
Turner().registerServer().registerCommand().collect(2).metricsSend());
@@ -934,7 +941,7 @@ TEST_F(FreeMonControllerTest, TestMetrics) {
TEST_F(FreeMonControllerTest, TestMetricsWithEmptyStorage) {
ControllerHolder controller(_mockThreadPool.get(), FreeMonNetworkInterfaceMock::Options());
- controller->start(RegistrationType::RegisterAfterOnTransitionToPrimary);
+ controller.start(RegistrationType::RegisterAfterOnTransitionToPrimary);
controller->turnCrankForTest(Turner().registerServer().collect(4));
ASSERT_GTE(controller.network->getRegistersCalls(), 0);
@@ -962,7 +969,7 @@ TEST_F(FreeMonControllerTest, TestMetricsWithEnabledStorage) {
FreeMonStorage::replace(_opCtx.get(), initStorage(StorageStateEnum::enabled));
- controller->start(RegistrationType::RegisterAfterOnTransitionToPrimary);
+ controller.start(RegistrationType::RegisterAfterOnTransitionToPrimary);
controller->turnCrankForTest(
Turner().registerServer().registerCommand().collect(2).metricsSend());
@@ -981,7 +988,7 @@ TEST_F(FreeMonControllerTest, TestMetricsWithDisabledStorage) {
FreeMonStorage::replace(_opCtx.get(), initStorage(StorageStateEnum::disabled));
- controller->start(RegistrationType::RegisterAfterOnTransitionToPrimary);
+ controller.start(RegistrationType::RegisterAfterOnTransitionToPrimary);
controller->turnCrankForTest(Turner().registerServer().collect(4));
ASSERT_GTE(controller.network->getRegistersCalls(), 0);
@@ -999,7 +1006,7 @@ TEST_F(FreeMonControllerTest, TestMetricsWithDisabledStorageThenRegister) {
FreeMonStorage::replace(_opCtx.get(), initStorage(StorageStateEnum::disabled));
- controller->start(RegistrationType::RegisterAfterOnTransitionToPrimary);
+ controller.start(RegistrationType::RegisterAfterOnTransitionToPrimary);
controller->turnCrankForTest(Turner().registerServer().collect(4));
ASSERT_OK(controller->registerServerCommand(Milliseconds::min()));
@@ -1020,7 +1027,7 @@ TEST_F(FreeMonControllerTest, TestMetricsWithDisabledStorageThenRegisterAndRereg
FreeMonStorage::replace(_opCtx.get(), initStorage(StorageStateEnum::disabled));
- controller->start(RegistrationType::RegisterAfterOnTransitionToPrimary);
+ controller.start(RegistrationType::RegisterAfterOnTransitionToPrimary);
controller->turnCrankForTest(Turner().registerServer().collect(4));
ASSERT_OK(controller->registerServerCommand(Milliseconds::min()));
@@ -1054,7 +1061,7 @@ TEST_F(FreeMonControllerTest, TestMetricsUnregisterCancelsRegister) {
opts.failRegisterHttp = true;
ControllerHolder controller(_mockThreadPool.get(), opts);
- controller->start(RegistrationType::DoNotRegister);
+ controller.start(RegistrationType::DoNotRegister);
ASSERT_OK(controller->registerServerCommand(Milliseconds::min()));
controller->turnCrankForTest(Turner().registerCommand(2));
@@ -1080,7 +1087,7 @@ TEST_F(FreeMonControllerTest, TestMetricsHalt) {
opts.haltMetrics = true;
ControllerHolder controller(_mockThreadPool.get(), opts);
- controller->start(RegistrationType::RegisterOnStart);
+ controller.start(RegistrationType::RegisterOnStart);
controller->turnCrankForTest(
Turner().registerServer().registerCommand().collect(4).metricsSend());
@@ -1102,7 +1109,7 @@ TEST_F(FreeMonControllerTest, TestMetricsPermanentlyDelete) {
opts.permanentlyDeleteAfter3 = true;
ControllerHolder controller(_mockThreadPool.get(), opts);
- controller->start(RegistrationType::RegisterOnStart);
+ controller.start(RegistrationType::RegisterOnStart);
controller->turnCrankForTest(
Turner().registerServer().registerCommand().collect(5).metricsSend(4));
@@ -1122,7 +1129,7 @@ TEST_F(FreeMonControllerTest, TestRegistrationIdRotatesAfterRegistration) {
FreeMonStorage::replace(_opCtx.get(), initStorage(StorageStateEnum::enabled));
- controller->start(RegistrationType::RegisterAfterOnTransitionToPrimary);
+ controller.start(RegistrationType::RegisterAfterOnTransitionToPrimary);
controller->turnCrankForTest(Turner().registerServer().registerCommand().collect(2));
// Ensure registration rotated the id
@@ -1145,7 +1152,7 @@ TEST_F(FreeMonControllerTest, TestRegistrationIdRotatesAfterRegistration) {
TEST_F(FreeMonControllerTest, TestPreRegistrationMetricBatching) {
ControllerHolder controller(_mockThreadPool.get(), FreeMonNetworkInterfaceMock::Options());
- controller->start(RegistrationType::RegisterAfterOnTransitionToPrimary);
+ controller.start(RegistrationType::RegisterAfterOnTransitionToPrimary);
controller->turnCrankForTest(Turner().registerServer().collect(3));
@@ -1170,7 +1177,7 @@ TEST_F(FreeMonControllerTest, TestMetricBatchingOnError) {
opts.fail2MetricsUploads = true;
ControllerHolder controller(_mockThreadPool.get(), opts);
- controller->start(RegistrationType::RegisterOnStart);
+ controller.start(RegistrationType::RegisterOnStart);
controller->turnCrankForTest(Turner().registerServer().registerCommand().collect(2));
@@ -1194,7 +1201,7 @@ TEST_F(FreeMonControllerTest, TestMetricBatchingOnErrorRealtime) {
opts.fail2MetricsUploads = true;
ControllerHolder controller(_mockThreadPool.get(), opts, false);
- controller->start(RegistrationType::RegisterOnStart);
+ controller.start(RegistrationType::RegisterOnStart);
// Ensure the first upload sends 2 samples
ASSERT_TRUE(controller.network->waitMetricsCalls(1, Seconds(5)).is_initialized());
diff --git a/src/mongo/db/free_mon/free_mon_mongod.cpp b/src/mongo/db/free_mon/free_mon_mongod.cpp
index 6d8f2042604..186b8d934da 100644
--- a/src/mongo/db/free_mon/free_mon_mongod.cpp
+++ b/src/mongo/db/free_mon/free_mon_mongod.cpp
@@ -335,7 +335,7 @@ void startFreeMonitoring(ServiceContext* serviceContext) {
}
}
- staticFreeMon->start(registrationType);
+ controllerPtr->start(registrationType, globalFreeMonParams.freeMonitoringTags);
}
void stopFreeMonitoring() {
diff --git a/src/mongo/db/free_mon/free_mon_options.cpp b/src/mongo/db/free_mon/free_mon_options.cpp
index c99a899ccd9..e0c3c92b0d4 100644
--- a/src/mongo/db/free_mon/free_mon_options.cpp
+++ b/src/mongo/db/free_mon/free_mon_options.cpp
@@ -83,10 +83,12 @@ Status addFreeMonitoringOptions(moe::OptionSection* options) {
moe::String,
"Enable Cloud Free Monitoring (on|runtime|off)");
- // Command Line: --enableFreeMonitoringTag=string
- // YAML Name: cloud.monitoring.free.tag=string
- freeMonitoringOptions.addOptionChaining(
- "cloud.monitoring.free.tag", "freeMonitoringTag", moe::String, "Cloud Free Monitoring Tag");
+ // Command Line: --enableFreeMonitoringTag=array<string>
+ // YAML Name: cloud.monitoring.free.tag=array<string>
+ freeMonitoringOptions.addOptionChaining("cloud.monitoring.free.tags",
+ "freeMonitoringTag",
+ moe::StringVector,
+ "Cloud Free Monitoring Tags");
Status ret = options->addSection(freeMonitoringOptions);
if (!ret.isOK()) {
@@ -108,9 +110,9 @@ Status storeFreeMonitoringOptions(const moe::Environment& params) {
globalFreeMonParams.freeMonitoringState = swState.getValue();
}
- if (params.count("cloud.monitoring.free.tag")) {
- globalFreeMonParams.freeMonitoringTag =
- params["cloud.monitoring.free.tag"].as<std::string>();
+ if (params.count("cloud.monitoring.free.tags")) {
+ globalFreeMonParams.freeMonitoringTags =
+ params["cloud.monitoring.free.tags"].as<std::vector<std::string>>();
}
return Status::OK();
diff --git a/src/mongo/db/free_mon/free_mon_options.h b/src/mongo/db/free_mon/free_mon_options.h
index 05d4ae2a91a..b543c0e3fdd 100644
--- a/src/mongo/db/free_mon/free_mon_options.h
+++ b/src/mongo/db/free_mon/free_mon_options.h
@@ -29,6 +29,7 @@
#pragma once
#include <string>
+#include <vector>
namespace mongo {
@@ -45,7 +46,7 @@ enum class EnableCloudStateEnum : std::int32_t {
* Free Monitoring configuration options
*/
struct FreeMonParams {
- std::string freeMonitoringTag;
+ std::vector<std::string> freeMonitoringTags;
EnableCloudStateEnum freeMonitoringState = EnableCloudStateEnum::kRuntime;
};
diff --git a/src/mongo/db/free_mon/free_mon_processor.cpp b/src/mongo/db/free_mon/free_mon_processor.cpp
index 53e60ed316d..e5db7630cb8 100644
--- a/src/mongo/db/free_mon/free_mon_processor.cpp
+++ b/src/mongo/db/free_mon/free_mon_processor.cpp
@@ -392,7 +392,7 @@ void FreeMonProcessor::doCommandRegister(Client* client,
}
if (!_tags.empty()) {
- req.setTag(transformVector(msg->getPayload()));
+ req.setTags(transformVector(msg->getPayload()));
}
// Collect the data
diff --git a/src/mongo/db/free_mon/free_mon_protocol.idl b/src/mongo/db/free_mon/free_mon_protocol.idl
index 0ebac53c4b8..ccc857163da 100644
--- a/src/mongo/db/free_mon/free_mon_protocol.idl
+++ b/src/mongo/db/free_mon/free_mon_protocol.idl
@@ -41,8 +41,8 @@ structs:
description: "Existing Registration Id"
type: string
optional: true
- tag:
- description: "Tag"
+ tags:
+ description: "Tags"
type: array<string>
optional: true