diff options
Diffstat (limited to 'src/mongo/db/service_entry_point_common.cpp')
-rw-r--r-- | src/mongo/db/service_entry_point_common.cpp | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/mongo/db/service_entry_point_common.cpp b/src/mongo/db/service_entry_point_common.cpp index 0c7b8d10f26..84d99a67405 100644 --- a/src/mongo/db/service_entry_point_common.cpp +++ b/src/mongo/db/service_entry_point_common.cpp @@ -1551,8 +1551,6 @@ void ExecCommandDatabase::_initiateCommand() { // Once API params and txn state are set on opCtx, enforce the "requireApiVersion" setting. enforceRequireAPIVersion(opCtx, command); - auto& oss = OperationShardingState::get(opCtx); - if (!opCtx->getClient()->isInDirectClient() && readConcernArgs.getLevel() != repl::ReadConcernLevel::kAvailableReadConcern && (iAmPrimary || (readConcernArgs.hasLevel() || readConcernArgs.getArgsAfterClusterTime()))) { @@ -1567,7 +1565,18 @@ void ExecCommandDatabase::_initiateCommand() { ? bucketNss : _invocation->ns(); - oss.initializeClientRoutingVersionsFromCommand(namespaceForSharding, request.body); + boost::optional<ChunkVersion> shardVersion; + if (auto shardVersionElem = request.body[ChunkVersion::kShardVersionField]) { + shardVersion = ChunkVersion::fromBSONPositionalOrNewerFormat(shardVersionElem); + } + + boost::optional<DatabaseVersion> databaseVersion; + if (auto databaseVersionElem = request.body[DatabaseVersion::kDatabaseVersionField]) { + databaseVersion = DatabaseVersion(databaseVersionElem.Obj()); + } + + OperationShardingState::get(opCtx).initializeClientRoutingVersions( + namespaceForSharding, shardVersion, databaseVersion); } _scoped = _execContext->behaviors->scopedOperationCompletionShardingActions(opCtx); |