summaryrefslogtreecommitdiff
path: root/src/mongo/db/free_mon
diff options
context:
space:
mode:
authorMark Benvenuto <mark.benvenuto@mongodb.com>2020-05-29 15:04:19 -0400
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-05-29 19:33:41 +0000
commit4ec400290afe55c470cb14fbafb79e9f649d7cb1 (patch)
tree4f027a45b11eebdcc72b026283d86993ec1e1431 /src/mongo/db/free_mon
parent43b1a634e8988254a3e57a492b202c71f87ffdee (diff)
downloadmongo-4ec400290afe55c470cb14fbafb79e9f649d7cb1.tar.gz
SERVER-48276 ReplSet Free Monitoring URLs inconsistent
Diffstat (limited to 'src/mongo/db/free_mon')
-rw-r--r--src/mongo/db/free_mon/free_mon_controller.cpp2
-rw-r--r--src/mongo/db/free_mon/free_mon_message.h2
-rw-r--r--src/mongo/db/free_mon/free_mon_processor.cpp34
3 files changed, 23 insertions, 15 deletions
diff --git a/src/mongo/db/free_mon/free_mon_controller.cpp b/src/mongo/db/free_mon/free_mon_controller.cpp
index 3c3de8236cb..f5b4b912637 100644
--- a/src/mongo/db/free_mon/free_mon_controller.cpp
+++ b/src/mongo/db/free_mon/free_mon_controller.cpp
@@ -84,7 +84,7 @@ void FreeMonController::registerServerStartup(RegistrationType registrationType,
}
boost::optional<Status> FreeMonController::registerServerCommand(Milliseconds timeout) {
- auto msg = FreeMonRegisterCommandMessage::createNow(std::vector<std::string>());
+ auto msg = FreeMonRegisterCommandMessage::createNow({std::vector<std::string>(), boost::none});
_enqueue(msg);
if (timeout > Milliseconds::min()) {
diff --git a/src/mongo/db/free_mon/free_mon_message.h b/src/mongo/db/free_mon/free_mon_message.h
index 9b7fc83a05b..2f8bab042c6 100644
--- a/src/mongo/db/free_mon/free_mon_message.h
+++ b/src/mongo/db/free_mon/free_mon_message.h
@@ -342,7 +342,7 @@ struct FreeMonWaitablePayloadForMessage {
template <>
struct FreeMonWaitablePayloadForMessage<FreeMonMessageType::RegisterCommand> {
- using payload_type = std::vector<std::string>;
+ using payload_type = std::pair<std::vector<std::string>, boost::optional<std::string>>;
};
template <>
diff --git a/src/mongo/db/free_mon/free_mon_processor.cpp b/src/mongo/db/free_mon/free_mon_processor.cpp
index 28c64dbd818..ddf5110b27c 100644
--- a/src/mongo/db/free_mon/free_mon_processor.cpp
+++ b/src/mongo/db/free_mon/free_mon_processor.cpp
@@ -330,7 +330,7 @@ void FreeMonProcessor::doServerRegister(
// If we are asked to register now, then kick off a registration request
const auto regType = msg->getPayload().first;
if (regType == RegistrationType::RegisterOnStart) {
- enqueue(FreeMonRegisterCommandMessage::createNow(msg->getPayload().second));
+ enqueue(FreeMonRegisterCommandMessage::createNow({msg->getPayload().second, boost::none}));
} else {
invariant((regType == RegistrationType::RegisterAfterOnTransitionToPrimary) ||
(regType == RegistrationType::RegisterAfterOnTransitionToPrimaryIfEnabled));
@@ -355,7 +355,8 @@ void FreeMonProcessor::doServerRegister(
// We are standalone or secondary, if we have a registration id, then send a
// registration notification, else wait for the user to register us.
if (state.get().getState() == StorageStateEnum::enabled) {
- enqueue(FreeMonRegisterCommandMessage::createNow(msg->getPayload().second));
+ enqueue(FreeMonRegisterCommandMessage::createNow(
+ {msg->getPayload().second, boost::none}));
}
}
@@ -418,22 +419,26 @@ void FreeMonProcessor::doCommandRegister(Client* client,
FreeMonRegistrationRequest req;
- auto regid = _state->getRegistrationId();
- if (!regid.empty()) {
- req.setId(regid);
+ if (msg->getPayload().second) {
+ req.setId(StringData(msg->getPayload().second.get()));
+ } else {
+ auto regid = _state->getRegistrationId();
+ if (!regid.empty()) {
+ req.setId(regid);
+ }
}
req.setVersion(kMaxProtocolVersion);
req.setLocalTime(client->getServiceContext()->getPreciseClockSource()->now());
- if (!msg->getPayload().empty()) {
+ if (!msg->getPayload().first.empty()) {
// Cache the tags for subsequent retries
- _tags = msg->getPayload();
+ _tags = msg->getPayload().first;
}
if (!_tags.empty()) {
- req.setTags(transformVector(msg->getPayload()));
+ req.setTags(transformVector(msg->getPayload().first));
}
// Collect the data
@@ -687,7 +692,7 @@ void FreeMonProcessor::doAsyncRegisterFail(
// Enqueue a register retry
enqueue(FreeMonRegisterCommandMessage::createWithDeadline(
- _tags, _registrationRetry->getNextDeadline(client)));
+ {_tags, boost::none}, _registrationRetry->getNextDeadline(client)));
}
void FreeMonProcessor::doCommandUnregister(
@@ -851,7 +856,7 @@ void FreeMonProcessor::doAsyncMetricsComplete(
_metricsRetry->reset();
if (resp.getResendRegistration().is_initialized() && resp.getResendRegistration()) {
- enqueue(FreeMonRegisterCommandMessage::createNow(_tags));
+ enqueue(FreeMonRegisterCommandMessage::createNow({_tags, boost::none}));
} else {
// Enqueue next metrics upload
enqueue(FreeMonMessage::createWithDeadline(FreeMonMessageType::MetricsSend,
@@ -912,13 +917,15 @@ void FreeMonProcessor::getStatus(OperationContext* opCtx,
void FreeMonProcessor::doOnTransitionToPrimary(Client* client) {
if (_registerOnTransitionToPrimary == RegistrationType::RegisterAfterOnTransitionToPrimary) {
- enqueue(FreeMonRegisterCommandMessage::createNow(std::vector<std::string>()));
+ enqueue(
+ FreeMonRegisterCommandMessage::createNow({std::vector<std::string>(), boost::none}));
} else if (_registerOnTransitionToPrimary ==
RegistrationType::RegisterAfterOnTransitionToPrimaryIfEnabled) {
readState(client);
if (_state->getState() == StorageStateEnum::enabled) {
- enqueue(FreeMonRegisterCommandMessage::createNow(std::vector<std::string>()));
+ enqueue(FreeMonRegisterCommandMessage::createNow(
+ {std::vector<std::string>(), boost::none}));
}
}
@@ -934,7 +941,8 @@ void FreeMonProcessor::processInMemoryStateChange(const FreeMonStorageState& ori
newState.getState() == StorageStateEnum::enabled) {
// Secondary needs to start registration
- enqueue(FreeMonRegisterCommandMessage::createNow(std::vector<std::string>()));
+ enqueue(FreeMonRegisterCommandMessage::createNow(
+ {std::vector<std::string>(), newState.getRegistrationId().toString()}));
}
}
}