diff options
author | Bernard Gorman <bernard.gorman@gmail.com> | 2018-04-23 23:20:31 +0100 |
---|---|---|
committer | Bernard Gorman <bernard.gorman@gmail.com> | 2018-04-29 16:16:16 +0100 |
commit | 793e59f11b558db3d833a12ec23bbacc359011a1 (patch) | |
tree | 14f832460035d1f604341677fc2790986177e0ff /src/mongo/s/query/store_possible_cursor.cpp | |
parent | 4ddf18bcf4d517c3dc0f005f9222ffaab9a86ffa (diff) | |
download | mongo-793e59f11b558db3d833a12ec23bbacc359011a1.tar.gz |
SERVER-34138 Allow change stream to be opened against non-existent DB and collection in sharded cluster
Diffstat (limited to 'src/mongo/s/query/store_possible_cursor.cpp')
-rw-r--r-- | src/mongo/s/query/store_possible_cursor.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/mongo/s/query/store_possible_cursor.cpp b/src/mongo/s/query/store_possible_cursor.cpp index fa67241d1cd..28db3452a29 100644 --- a/src/mongo/s/query/store_possible_cursor.cpp +++ b/src/mongo/s/query/store_possible_cursor.cpp @@ -35,6 +35,8 @@ #include "mongo/db/auth/authorization_session.h" #include "mongo/db/curop.h" #include "mongo/db/query/cursor_response.h" +#include "mongo/executor/task_executor_pool.h" +#include "mongo/s/grid.h" #include "mongo/s/query/cluster_client_cursor_impl.h" #include "mongo/s/query/cluster_client_cursor_params.h" #include "mongo/s/query/cluster_cursor_manager.h" @@ -43,6 +45,39 @@ namespace mongo { StatusWith<BSONObj> storePossibleCursor(OperationContext* opCtx, + const NamespaceString& requestedNss, + const RemoteCursor& remoteCursor, + TailableModeEnum tailableMode) { + auto executorPool = Grid::get(opCtx)->getExecutorPool(); + return storePossibleCursor( + opCtx, + remoteCursor.getShardId().toString(), + remoteCursor.getHostAndPort(), + remoteCursor.getCursorResponse().toBSON(CursorResponse::ResponseType::InitialResponse), + requestedNss, + executorPool->getArbitraryExecutor(), + Grid::get(opCtx)->getCursorManager(), + tailableMode); +} + +StatusWith<BSONObj> storePossibleCursor(OperationContext* opCtx, + const NamespaceString& requestedNss, + const ShardId& shardId, + const Shard::CommandResponse& commandResponse, + TailableModeEnum tailableMode) { + invariant(commandResponse.hostAndPort); + auto executorPool = Grid::get(opCtx)->getExecutorPool(); + return storePossibleCursor(opCtx, + shardId, + *commandResponse.hostAndPort, + commandResponse.response, + requestedNss, + executorPool->getArbitraryExecutor(), + Grid::get(opCtx)->getCursorManager(), + tailableMode); +} + +StatusWith<BSONObj> storePossibleCursor(OperationContext* opCtx, const ShardId& shardId, const HostAndPort& server, const BSONObj& cmdResult, |