summaryrefslogtreecommitdiff
path: root/src/mongo/s/query/store_possible_cursor.cpp
diff options
context:
space:
mode:
authorBernard Gorman <bernard.gorman@gmail.com>2018-04-23 23:20:31 +0100
committerBernard Gorman <bernard.gorman@gmail.com>2018-04-29 16:16:16 +0100
commit793e59f11b558db3d833a12ec23bbacc359011a1 (patch)
tree14f832460035d1f604341677fc2790986177e0ff /src/mongo/s/query/store_possible_cursor.cpp
parent4ddf18bcf4d517c3dc0f005f9222ffaab9a86ffa (diff)
downloadmongo-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.cpp35
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,