diff options
author | Irina Yatsenko <irina.yatsenko@mongodb.com> | 2021-06-28 18:53:31 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-07-08 21:55:02 +0000 |
commit | c0217c62b43b30159bc60601c3af833cb7a8f82e (patch) | |
tree | ac69490471400dfa30a25a26addd7a9e3d977bf4 /src/mongo/s/commands | |
parent | e19d6e4d9ce4405fa71542d2e34eb261e86de4a5 (diff) | |
download | mongo-c0217c62b43b30159bc60601c3af833cb7a8f82e.tar.gz |
SERVER-57457 Close connection on receiving of OP_DELETE, OP_INSERT, OP_UPDATE and OP_KILL_CURSORS
Diffstat (limited to 'src/mongo/s/commands')
-rw-r--r-- | src/mongo/s/commands/strategy.cpp | 97 |
1 files changed, 0 insertions, 97 deletions
diff --git a/src/mongo/s/commands/strategy.cpp b/src/mongo/s/commands/strategy.cpp index dee7de3a6c1..d3115645937 100644 --- a/src/mongo/s/commands/strategy.cpp +++ b/src/mongo/s/commands/strategy.cpp @@ -1438,103 +1438,6 @@ DbResponse Strategy::getMore(OperationContext* opCtx, const NamespaceString& nss cursorResponse.getValue().getCursorId()); } -void Strategy::killCursors(OperationContext* opCtx, DbMessage* dbm) { - const int numCursors = dbm->pullInt(); - massert(34425, - str::stream() << "Invalid killCursors message. numCursors: " << numCursors - << ", message size: " << dbm->msg().dataSize() << ".", - dbm->msg().dataSize() == 8 + (8 * numCursors)); - uassert(28794, - str::stream() << "numCursors must be between 1 and 29999. numCursors: " << numCursors - << ".", - numCursors >= 1 && numCursors < 30000); - - globalOpCounters.gotKillCursorsDeprecated(); - - ConstDataCursor cursors(dbm->getArray(numCursors)); - - Client* const client = opCtx->getClient(); - ClusterCursorManager* const manager = Grid::get(opCtx)->getCursorManager(); - - for (int i = 0; i < numCursors; ++i) { - const CursorId cursorId = cursors.readAndAdvance<LittleEndian<int64_t>>(); - - boost::optional<NamespaceString> nss = manager->getNamespaceForCursorId(cursorId); - if (!nss) { - LOGV2_DEBUG(22773, - 3, - "Can't find cursor to kill, no namespace found. Cursor id: {cursorId}", - "Can't find cursor to kill, no namespace found", - "cursorId"_attr = cursorId); - continue; - } - - auto authzSession = AuthorizationSession::get(client); - auto authChecker = [&authzSession, &nss](UserNameIterator userNames) -> Status { - return auth::checkAuthForKillCursors(authzSession, *nss, userNames); - }; - auto authzStatus = manager->checkAuthForKillCursors(opCtx, *nss, cursorId, authChecker); - audit::logKillCursorsAuthzCheck(client, *nss, cursorId, authzStatus.code()); - if (!authzStatus.isOK()) { - LOGV2_DEBUG( - 22774, - 3, - "Not authorized to kill cursor. Namespace: '{namespace}', cursor id: {cursorId}", - "Not authorized to kill cursor", - "namespace"_attr = *nss, - "cursorId"_attr = cursorId); - continue; - } - - Status killCursorStatus = manager->killCursor(opCtx, *nss, cursorId); - if (!killCursorStatus.isOK()) { - LOGV2_DEBUG( - 22775, - 3, - "Can't find cursor to kill. Namespace: '{namespace}', cursor id: {cursorId}", - "Can't find cursor to kill", - "namespace"_attr = *nss, - "cursorId"_attr = cursorId); - continue; - } - - LOGV2_DEBUG(22776, - 3, - "Killed cursor. Namespace: '{namespace}', cursor id: {cursorId}", - "Killed cursor", - "namespace"_attr = *nss, - "cursorId"_attr = cursorId); - } -} - -void Strategy::writeOp(std::shared_ptr<RequestExecutionContext> rec) { - rec->setRequest([msg = rec->getMessage()]() { - switch (msg.operation()) { - case dbInsert: { - auto op = InsertOp::parseLegacy(msg); - globalOpCounters.gotInsertsDeprecated(op.getDocuments().size()); - return op.serialize({}); - } - case dbUpdate: { - globalOpCounters.gotUpdateDeprecated(); - return UpdateOp::parseLegacy(msg).serialize({}); - } - case dbDelete: { - globalOpCounters.gotDeleteDeprecated(); - return DeleteOp::parseLegacy(msg).serialize({}); - } - default: - MONGO_UNREACHABLE; - } - }()); - - rec->setReplyBuilder(std::make_unique<rpc::OpMsgReplyBuilder>()); - auto bob = std::make_shared<BSONObjBuilder>(); // built objects are ignorned. - future_util::makeState<ParseAndRunCommand>(std::move(rec), std::move(bob)) - .thenWithState([](auto* runner) { return runner->run(); }) - .get(); -} - void Strategy::explainFind(OperationContext* opCtx, const BSONObj& findCommandObj, const FindCommandRequest& findCommand, |