diff options
Diffstat (limited to 'src/mongo/db/repl/replication_info.cpp')
-rw-r--r-- | src/mongo/db/repl/replication_info.cpp | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/src/mongo/db/repl/replication_info.cpp b/src/mongo/db/repl/replication_info.cpp index 0b32d093332..855356c8c9e 100644 --- a/src/mongo/db/repl/replication_info.cpp +++ b/src/mongo/db/repl/replication_info.cpp @@ -68,12 +68,13 @@ using std::string; using std::stringstream; namespace repl { - +namespace { void appendReplicationInfo(OperationContext* opCtx, BSONObjBuilder& result, int level) { ReplicationCoordinator* replCoord = ReplicationCoordinator::get(opCtx); if (replCoord->getSettings().usingReplSets()) { + const auto& horizonParams = SplitHorizon::getParameters(opCtx->getClient()); IsMasterResponse isMasterResponse; - replCoord->fillIsMasterForReplSet(&isMasterResponse); + replCoord->fillIsMasterForReplSet(&isMasterResponse, horizonParams); result.appendElements(isMasterResponse.toBSON()); if (level) { replCoord->appendSlaveInfoData(&result); @@ -148,8 +149,6 @@ void appendReplicationInfo(OperationContext* opCtx, BSONObjBuilder& result, int } } -namespace { - class ReplicationInfoServerStatus : public ServerStatusSection { public: ReplicationInfoServerStatus() : ServerStatusSection("repl") {} @@ -255,6 +254,7 @@ public: auto& clientMetadataIsMasterState = ClientMetadataIsMasterState::get(opCtx->getClient()); bool seenIsMaster = clientMetadataIsMasterState.hasSeenIsMaster(); + if (!seenIsMaster) { clientMetadataIsMasterState.setSeenIsMaster(); } @@ -266,16 +266,19 @@ public: "The client metadata document may only be sent in the first isMaster"); } - auto swParseClientMetadata = ClientMetadata::parse(element); + auto parsedClientMetadata = uassertStatusOK(ClientMetadata::parse(element)); - uassertStatusOK(swParseClientMetadata.getStatus()); + invariant(parsedClientMetadata); - invariant(swParseClientMetadata.getValue()); + parsedClientMetadata->logClientMetadata(opCtx->getClient()); - swParseClientMetadata.getValue().get().logClientMetadata(opCtx->getClient()); + clientMetadataIsMasterState.setClientMetadata(opCtx->getClient(), + std::move(parsedClientMetadata)); + } - clientMetadataIsMasterState.setClientMetadata( - opCtx->getClient(), std::move(swParseClientMetadata.getValue())); + if (!seenIsMaster) { + auto sniName = opCtx->getClient()->getSniNameForSession(); + SplitHorizon::setParameters(opCtx->getClient(), std::move(sniName)); } // Parse the optional 'internalClient' field. This is provided by incoming connections from |