diff options
Diffstat (limited to 'src/mongo/db')
38 files changed, 235 insertions, 228 deletions
diff --git a/src/mongo/db/auth/authz_manager_external_state_d.cpp b/src/mongo/db/auth/authz_manager_external_state_d.cpp index e8dc4cdda7a..2f0618a200b 100644 --- a/src/mongo/db/auth/authz_manager_external_state_d.cpp +++ b/src/mongo/db/auth/authz_manager_external_state_d.cpp @@ -65,7 +65,10 @@ Status AuthzManagerExternalStateMongod::query( const std::function<void(const BSONObj&)>& resultProcessor) { try { DBDirectClient client(opCtx); - client.query(resultProcessor, collectionName, filter, Query(), &projection); + FindCommandRequest findRequest{collectionName}; + findRequest.setFilter(filter); + findRequest.setProjection(projection); + client.find(std::move(findRequest), ReadPreferenceSetting{}, resultProcessor); return Status::OK(); } catch (const DBException& e) { return e.toStatus(); diff --git a/src/mongo/db/cloner.cpp b/src/mongo/db/cloner.cpp index 47a52d59dcd..0f3aabee49a 100644 --- a/src/mongo/db/cloner.cpp +++ b/src/mongo/db/cloner.cpp @@ -250,14 +250,14 @@ void Cloner::_copy(OperationContext* opCtx, int options = QueryOption_NoCursorTimeout | QueryOption_Exhaust; - conn->query(std::function<void(DBClientCursorBatchIterator&)>(f), - nss, - BSONObj{} /* filter */, - Query() /* querySettings */, - nullptr, - options, - 0 /* batchSize */, - repl::ReadConcernArgs::kImplicitDefault); + conn->query_DEPRECATED(std::function<void(DBClientCursorBatchIterator&)>(f), + nss, + BSONObj{} /* filter */, + Query() /* querySettings */, + nullptr, + options, + 0 /* batchSize */, + repl::ReadConcernArgs::kImplicitDefault); } void Cloner::_copyIndexes(OperationContext* opCtx, diff --git a/src/mongo/db/commands/dbcommands_d.cpp b/src/mongo/db/commands/dbcommands_d.cpp index c2ae35541ea..4bcc4350455 100644 --- a/src/mongo/db/commands/dbcommands_d.cpp +++ b/src/mongo/db/commands/dbcommands_d.cpp @@ -411,8 +411,10 @@ public: const BSONObj& query, const BSONObj& sort) { DBDirectClient client(opCtx); - std::unique_ptr<DBClientCursor> c = - client.query(NamespaceString(ns), query, Query().sort(sort)); + FindCommandRequest findRequest{NamespaceString{ns}}; + findRequest.setFilter(query); + findRequest.setSort(sort); + std::unique_ptr<DBClientCursor> c = client.find(std::move(findRequest)); while (c->more()) { LOGV2(20454, "Chunk: {chunk}", "Dumping chunks", "chunk"_attr = c->nextSafe()); } diff --git a/src/mongo/db/commands/set_feature_compatibility_version_command.cpp b/src/mongo/db/commands/set_feature_compatibility_version_command.cpp index 0afc4dd5348..828d1857c8a 100644 --- a/src/mongo/db/commands/set_feature_compatibility_version_command.cpp +++ b/src/mongo/db/commands/set_feature_compatibility_version_command.cpp @@ -780,13 +780,10 @@ private: DBDirectClient client(opCtx); LogicalSessionIdMap<TxnNumber> parentLsidToTxnNum; - auto projection = BSON("_id" << 1 << "parentLsid" << 1); - auto cursor = client.query(NamespaceString::kSessionTransactionsTableNamespace, - BSON("parentLsid" << BSON("$exists" << true)), - {}, - 0, - 0, - &projection); + FindCommandRequest findRequest{NamespaceString::kSessionTransactionsTableNamespace}; + findRequest.setFilter(BSON("parentLsid" << BSON("$exists" << true))); + findRequest.setProjection(BSON("_id" << 1 << "parentLsid" << 1)); + auto cursor = client.find(std::move(findRequest)); while (cursor->more()) { auto doc = cursor->next(); @@ -823,8 +820,9 @@ private: for (const auto& [lsid, txnNumber] : parentLsidToTxnNum) { SessionTxnRecord modifiedDoc; bool parentSessionExists = false; - auto cursor = client.query(NamespaceString::kSessionTransactionsTableNamespace, - BSON("_id" << lsid.toBSON())); + FindCommandRequest findRequest{NamespaceString::kSessionTransactionsTableNamespace}; + findRequest.setFilter(BSON("_id" << lsid.toBSON())); + auto cursor = client.find(std::move(findRequest)); if ((parentSessionExists = cursor->more())) { modifiedDoc = SessionTxnRecord::parse( IDLParserErrorContext("parse transaction document to modify"), cursor->next()); diff --git a/src/mongo/db/commands/user_management_commands.cpp b/src/mongo/db/commands/user_management_commands.cpp index 178bd5c27f5..2a5f37ae267 100644 --- a/src/mongo/db/commands/user_management_commands.cpp +++ b/src/mongo/db/commands/user_management_commands.cpp @@ -229,7 +229,10 @@ Status queryAuthzDocument(OperationContext* opCtx, const std::function<void(const BSONObj&)>& resultProcessor) { try { DBDirectClient client(opCtx); - client.query(resultProcessor, collectionName, query, Query(), &projection); + FindCommandRequest findRequest{collectionName}; + findRequest.setFilter(query); + findRequest.setProjection(projection); + client.find(std::move(findRequest), ReadPreferenceSetting{}, resultProcessor); return Status::OK(); } catch (const DBException& e) { return e.toStatus(); diff --git a/src/mongo/db/dbdirectclient.cpp b/src/mongo/db/dbdirectclient.cpp index 580104f1c48..479557afc7e 100644 --- a/src/mongo/db/dbdirectclient.cpp +++ b/src/mongo/db/dbdirectclient.cpp @@ -145,18 +145,11 @@ void DBDirectClient::say(Message& toSend, bool isRetry, string* actualServer) { invariant(dbResponse.response.empty()); } -unique_ptr<DBClientCursor> DBDirectClient::query(const NamespaceStringOrUUID& nsOrUuid, - const BSONObj& filter, - const Query& querySettings, - int limit, - int nToSkip, - const BSONObj* fieldsToReturn, - int queryOptions, - int batchSize, - boost::optional<BSONObj> readConcernObj) { - invariant(!readConcernObj, "passing readConcern to DBDirectClient functions is not supported"); - return DBClientBase::query( - nsOrUuid, filter, querySettings, limit, nToSkip, fieldsToReturn, queryOptions, batchSize); +std::unique_ptr<DBClientCursor> DBDirectClient::find(FindCommandRequest findRequest, + const ReadPreferenceSetting& readPref) { + invariant(!findRequest.getReadConcern(), + "passing readConcern to DBDirectClient::find() is not supported"); + return DBClientBase::find(std::move(findRequest), readPref); } write_ops::FindAndModifyCommandReply DBDirectClient::findAndModify( diff --git a/src/mongo/db/dbdirectclient.h b/src/mongo/db/dbdirectclient.h index b0f8a74f09f..7c8e89d0bc2 100644 --- a/src/mongo/db/dbdirectclient.h +++ b/src/mongo/db/dbdirectclient.h @@ -52,21 +52,13 @@ class DBDirectClient : public DBClientBase { public: DBDirectClient(OperationContext* opCtx); + using DBClientBase::find; using DBClientBase::insert; - using DBClientBase::query; using DBClientBase::remove; using DBClientBase::update; - std::unique_ptr<DBClientCursor> query( - const NamespaceStringOrUUID& nsOrUuid, - const BSONObj& filter, - const Query& querySettings = Query(), - int limit = 0, - int nToSkip = 0, - const BSONObj* fieldsToReturn = nullptr, - int queryOptions = 0, - int batchSize = 0, - boost::optional<BSONObj> readConcernObj = boost::none) override; + std::unique_ptr<DBClientCursor> find(FindCommandRequest findRequest, + const ReadPreferenceSetting& readPref) override; write_ops::FindAndModifyCommandReply findAndModify( const write_ops::FindAndModifyCommandRequest& findAndModify); diff --git a/src/mongo/db/dbdirectclient_test.cpp b/src/mongo/db/dbdirectclient_test.cpp index 9b94c094aa2..f46097d4004 100644 --- a/src/mongo/db/dbdirectclient_test.cpp +++ b/src/mongo/db/dbdirectclient_test.cpp @@ -172,7 +172,7 @@ TEST_F(DBDirectClientTest, ExhaustQuery) { // The query should work even though exhaust mode is requested. int batchSize = 2; - auto cursor = client.query( + auto cursor = client.query_DEPRECATED( kNs, BSONObj{}, Query{}, 0 /*limit*/, 0 /*skip*/, nullptr, QueryOption_Exhaust, batchSize); ASSERT_EQ(cursor->itcount(), numDocs); } diff --git a/src/mongo/db/exhaust_cursor_currentop_integration_test.cpp b/src/mongo/db/exhaust_cursor_currentop_integration_test.cpp index 897cdc62e2b..168107cb11d 100644 --- a/src/mongo/db/exhaust_cursor_currentop_integration_test.cpp +++ b/src/mongo/db/exhaust_cursor_currentop_integration_test.cpp @@ -153,7 +153,7 @@ auto startExhaustQuery( // Issue the initial 'find' with a batchSize of 2 and the exhaust flag set. // We then iterate through the first batch and confirm that the results are // as expected. - queryCursor = queryConnection->query( + queryCursor = queryConnection->query_DEPRECATED( testNSS, BSONObj{}, Query(), 0, 0, &projSpec, queryOptions, 2); for (int i = 0; i < 2; ++i) { ASSERT_BSONOBJ_EQ(queryCursor->nextSafe(), BSON("a" << i)); diff --git a/src/mongo/db/op_observer_impl_test.cpp b/src/mongo/db/op_observer_impl_test.cpp index 5e6f0231db5..fabf4919dbb 100644 --- a/src/mongo/db/op_observer_impl_test.cpp +++ b/src/mongo/db/op_observer_impl_test.cpp @@ -906,8 +906,9 @@ protected: repl::OpTime opTime, boost::optional<DurableTxnStateEnum> txnState) { DBDirectClient client(opCtx()); - auto cursor = client.query(NamespaceString::kSessionTransactionsTableNamespace, - BSON("_id" << session()->getSessionId().toBSON())); + FindCommandRequest findRequest{NamespaceString::kSessionTransactionsTableNamespace}; + findRequest.setFilter(BSON("_id" << session()->getSessionId().toBSON())); + auto cursor = client.find(std::move(findRequest)); ASSERT(cursor); ASSERT(cursor->more()); @@ -932,16 +933,18 @@ protected: void assertNoTxnRecord() { DBDirectClient client(opCtx()); - auto cursor = client.query(NamespaceString::kSessionTransactionsTableNamespace, - BSON("_id" << session()->getSessionId().toBSON())); + FindCommandRequest findRequest{NamespaceString::kSessionTransactionsTableNamespace}; + findRequest.setFilter(BSON("_id" << session()->getSessionId().toBSON())); + auto cursor = client.find(std::move(findRequest)); ASSERT(cursor); ASSERT(!cursor->more()); } void assertTxnRecordStartOpTime(boost::optional<repl::OpTime> startOpTime) { DBDirectClient client(opCtx()); - auto cursor = client.query(NamespaceString::kSessionTransactionsTableNamespace, - BSON("_id" << session()->getSessionId().toBSON())); + FindCommandRequest findRequest{NamespaceString::kSessionTransactionsTableNamespace}; + findRequest.setFilter(BSON("_id" << session()->getSessionId().toBSON())); + auto cursor = client.find(std::move(findRequest)); ASSERT(cursor); ASSERT(cursor->more()); diff --git a/src/mongo/db/persistent_task_store.h b/src/mongo/db/persistent_task_store.h index 34ae3164004..9db4a12186b 100644 --- a/src/mongo/db/persistent_task_store.h +++ b/src/mongo/db/persistent_task_store.h @@ -141,7 +141,9 @@ public: std::function<bool(const T&)> handler) { DBDirectClient dbClient(opCtx); - auto cursor = dbClient.query(_storageNss, filter); + FindCommandRequest findRequest{_storageNss}; + findRequest.setFilter(filter); + auto cursor = dbClient.find(std::move(findRequest)); while (cursor->more()) { auto bson = cursor->next(); @@ -159,8 +161,10 @@ public: size_t count(OperationContext* opCtx, const BSONObj& filter = BSONObj{}) { DBDirectClient client(opCtx); - auto projection = BSON("_id" << 1); - auto cursor = client.query(_storageNss, filter, Query(), 0, 0, &projection); + FindCommandRequest findRequest{_storageNss}; + findRequest.setFilter(filter); + findRequest.setProjection(BSON("_id" << 1)); + auto cursor = client.find(std::move(findRequest)); return cursor->itcount(); } diff --git a/src/mongo/db/repl/apply_ops.cpp b/src/mongo/db/repl/apply_ops.cpp index 50d012ab6c8..65b533ba218 100644 --- a/src/mongo/db/repl/apply_ops.cpp +++ b/src/mongo/db/repl/apply_ops.cpp @@ -291,7 +291,8 @@ Status _checkPrecondition(OperationContext* opCtx, // legacy API from 'DBDirectClient' in order to parse this format and convert it into the // corresponding find command. auto preconditionQuery = Query::fromBSONDeprecated(preCondition["q"].Obj()); - auto cursor = db.query(nss, preconditionQuery.getFilter(), preconditionQuery, 1 /*limit*/); + auto cursor = + db.query_DEPRECATED(nss, preconditionQuery.getFilter(), preconditionQuery, 1 /*limit*/); BSONObj realres = cursor->more() ? cursor->nextSafe() : BSONObj{}; // Get collection default collation. diff --git a/src/mongo/db/repl/collection_cloner.cpp b/src/mongo/db/repl/collection_cloner.cpp index 00c817a5b32..08701e697f6 100644 --- a/src/mongo/db/repl/collection_cloner.cpp +++ b/src/mongo/db/repl/collection_cloner.cpp @@ -339,15 +339,16 @@ void CollectionCloner::runQuery() { _firstBatchOfQueryRound = true; try { - getClient()->query([this](DBClientCursorBatchIterator& iter) { handleNextBatch(iter); }, - _sourceDbAndUuid, - BSONObj{}, - query, - nullptr /* fieldsToReturn */, - QueryOption_NoCursorTimeout | QueryOption_SecondaryOk | - (collectionClonerUsesExhaust ? QueryOption_Exhaust : 0), - _collectionClonerBatchSize, - ReadConcernArgs::kImplicitDefault); + getClient()->query_DEPRECATED( + [this](DBClientCursorBatchIterator& iter) { handleNextBatch(iter); }, + _sourceDbAndUuid, + BSONObj{}, + query, + nullptr /* fieldsToReturn */, + QueryOption_NoCursorTimeout | QueryOption_SecondaryOk | + (collectionClonerUsesExhaust ? QueryOption_Exhaust : 0), + _collectionClonerBatchSize, + ReadConcernArgs::kImplicitDefault); } catch (...) { auto status = exceptionToStatus(); diff --git a/src/mongo/db/repl/oplog_interface_remote.cpp b/src/mongo/db/repl/oplog_interface_remote.cpp index 1a9e3e6a180..45e9e3df190 100644 --- a/src/mongo/db/repl/oplog_interface_remote.cpp +++ b/src/mongo/db/repl/oplog_interface_remote.cpp @@ -81,18 +81,13 @@ std::string OplogInterfaceRemote::toString() const { } std::unique_ptr<OplogInterface::Iterator> OplogInterfaceRemote::makeIterator() const { - const Query query = Query().sort(BSON("$natural" << -1)); - const BSONObj fields = BSON("ts" << 1 << "t" << 1LL); + FindCommandRequest findRequest{NamespaceString{_collectionName}}; + findRequest.setProjection(BSON("ts" << 1 << "t" << 1LL)); + findRequest.setSort(BSON("$natural" << -1)); + findRequest.setBatchSize(_batchSize); + findRequest.setReadConcern(ReadConcernArgs::kImplicitDefault); return std::unique_ptr<OplogInterface::Iterator>( - new OplogIteratorRemote(_getConnection()->query(NamespaceString(_collectionName), - BSONObj{}, - query, - 0, - 0, - &fields, - 0, - _batchSize, - ReadConcernArgs::kImplicitDefault))); + new OplogIteratorRemote(_getConnection()->find(std::move(findRequest)))); } std::unique_ptr<TransactionHistoryIteratorBase> diff --git a/src/mongo/db/repl/primary_only_service.cpp b/src/mongo/db/repl/primary_only_service.cpp index 55b6490470f..485f08028d1 100644 --- a/src/mongo/db/repl/primary_only_service.cpp +++ b/src/mongo/db/repl/primary_only_service.cpp @@ -667,7 +667,8 @@ void PrimaryOnlyService::_rebuildInstances(long long term) noexcept { Status(ErrorCodes::InternalError, "Querying state documents failed")); } - auto cursor = client.query(ns, BSONObj{}); + FindCommandRequest findRequest{ns}; + auto cursor = client.find(std::move(findRequest)); while (cursor->more()) { stateDocuments.push_back(cursor->nextSafe().getOwned()); } diff --git a/src/mongo/db/repl/replication_recovery.cpp b/src/mongo/db/repl/replication_recovery.cpp index 84323838172..afecf8da4f5 100644 --- a/src/mongo/db/repl/replication_recovery.cpp +++ b/src/mongo/db/repl/replication_recovery.cpp @@ -144,14 +144,9 @@ public: BSONObj predicate = _oplogApplicationEndPoint ? BSON("$gte" << _oplogApplicationStartPoint << "$lte" << *_oplogApplicationEndPoint) : BSON("$gte" << _oplogApplicationStartPoint); - _cursor = _client->query(NamespaceString::kRsOplogNamespace, - BSON("ts" << predicate), - /*querySettings*/ Query(), - /*limit*/ 0, - /*skip*/ 0, - /*projection*/ nullptr, - /*options*/ 0, - /*batchSize*/ 0); + FindCommandRequest findRequest{NamespaceString::kRsOplogNamespace}; + findRequest.setFilter(BSON("ts" << predicate)); + _cursor = _client->find(std::move(findRequest)); // Check that the first document matches our appliedThrough point then skip it since it's // already been applied. diff --git a/src/mongo/db/repl/roll_back_local_operations_test.cpp b/src/mongo/db/repl/roll_back_local_operations_test.cpp index 6a4b3ea84c9..16e0ccdd678 100644 --- a/src/mongo/db/repl/roll_back_local_operations_test.cpp +++ b/src/mongo/db/repl/roll_back_local_operations_test.cpp @@ -318,28 +318,18 @@ class DBClientConnectionForTest : public DBClientConnection { public: DBClientConnectionForTest(int numInitFailures) : _initFailuresLeft(numInitFailures) {} - using DBClientConnection::query; - - std::unique_ptr<DBClientCursor> query(const NamespaceStringOrUUID& nsOrUuid, - const BSONObj& filter, - const Query& querySettings, - int limit, - int nToSkip, - const BSONObj* fieldsToReturn, - int queryOptions, - int batchSize, - boost::optional<BSONObj> readConcernObj) override { + std::unique_ptr<DBClientCursor> find(FindCommandRequest findRequest, + const ReadPreferenceSetting& readPref) override { if (_initFailuresLeft > 0) { _initFailuresLeft--; LOGV2(21657, - "Throwing DBException on DBClientCursorForTest::query(). Failures left: " - "{initFailuresLeft}", + "Throwing DBException on DBClientCursorForTest::find()", "initFailuresLeft"_attr = _initFailuresLeft); uasserted(50852, "Simulated network error"); MONGO_UNREACHABLE; } - LOGV2(21658, "Returning success on DBClientCursorForTest::query()"); + LOGV2(21658, "Returning success on DBClientCursorForTest::find()"); BSONArrayBuilder builder; builder.append(makeOp(1)); diff --git a/src/mongo/db/repl/rollback_impl.cpp b/src/mongo/db/repl/rollback_impl.cpp index a03e6793ea0..70d2bb88940 100644 --- a/src/mongo/db/repl/rollback_impl.cpp +++ b/src/mongo/db/repl/rollback_impl.cpp @@ -475,12 +475,13 @@ void RollbackImpl::_restoreTxnsTableEntryFromRetryableWrites(OperationContext* o const auto filterFromMigration = BSON("op" << "n" << "fromMigrate" << true); - auto cursor = client->query( - NamespaceString::kRsOplogNamespace, - BSON("ts" << BSON("$gt" << stableTimestamp) << "txnNumber" << BSON("$exists" << true) - << "stmtId" << BSON("$exists" << true) << "prevOpTime.ts" - << BSON("$gte" << Timestamp(1, 0) << "$lte" << stableTimestamp) << "$or" - << BSON_ARRAY(filter << filterFromMigration))); + FindCommandRequest findRequest{NamespaceString::kRsOplogNamespace}; + findRequest.setFilter(BSON("ts" << BSON("$gt" << stableTimestamp) << "txnNumber" + << BSON("$exists" << true) << "stmtId" + << BSON("$exists" << true) << "prevOpTime.ts" + << BSON("$gte" << Timestamp(1, 0) << "$lte" << stableTimestamp) + << "$or" << BSON_ARRAY(filter << filterFromMigration))); + auto cursor = client->find(std::move(findRequest)); while (cursor->more()) { auto doc = cursor->next(); auto swEntry = OplogEntry::parse(doc); diff --git a/src/mongo/db/repl/rollback_source_impl.cpp b/src/mongo/db/repl/rollback_source_impl.cpp index f174d3c718c..4b7c7e2fff1 100644 --- a/src/mongo/db/repl/rollback_source_impl.cpp +++ b/src/mongo/db/repl/rollback_source_impl.cpp @@ -85,7 +85,19 @@ BSONObj RollbackSourceImpl::findOne(const NamespaceString& nss, const BSONObj& f std::pair<BSONObj, NamespaceString> RollbackSourceImpl::findOneByUUID(const std::string& db, UUID uuid, const BSONObj& filter) const { - return _getConnection()->findOneByUUID(db, uuid, filter, ReadConcernArgs::kImplicitDefault); + FindCommandRequest findRequest{NamespaceStringOrUUID{db, uuid}}; + findRequest.setFilter(filter); + findRequest.setReadConcern(ReadConcernArgs::kImplicitDefault); + findRequest.setLimit(1); + findRequest.setSingleBatch(true); + + auto cursor = + std::make_unique<DBClientCursor>(_getConnection(), + std::move(findRequest), + ReadPreferenceSetting{ReadPreference::SecondaryPreferred}); + BSONObj result = cursor->more() ? cursor->nextSafe() : BSONObj{}; + NamespaceString nss = cursor->getNamespaceString(); + return {std::move(result), std::move(nss)}; } StatusWith<BSONObj> RollbackSourceImpl::getCollectionInfoByUUID(const std::string& db, diff --git a/src/mongo/db/repl/tenant_collection_cloner.cpp b/src/mongo/db/repl/tenant_collection_cloner.cpp index c468a466db5..4e391644b5a 100644 --- a/src/mongo/db/repl/tenant_collection_cloner.cpp +++ b/src/mongo/db/repl/tenant_collection_cloner.cpp @@ -210,17 +210,13 @@ BaseCloner::AfterStageBehavior TenantCollectionCloner::countStage() { // Note we cannot simply use the count() above, because that checks metadata which may not be 100% // accurate. BaseCloner::AfterStageBehavior TenantCollectionCloner::checkIfDonorCollectionIsEmptyStage() { - auto fieldsToReturn = BSON("_id" << 1); - auto cursor = - getClient()->query(_sourceDbAndUuid, - BSONObj{} /* filter */, - Query() /* querySettings */, - 1 /* limit */, - 0 /* skip */, - &fieldsToReturn, - QueryOption_SecondaryOk, - 0 /* batchSize */, - ReadConcernArgs(ReadConcernLevel::kMajorityReadConcern).toBSONInner()); + FindCommandRequest findRequest{_sourceDbAndUuid}; + findRequest.setProjection(BSON("_id" << 1)); + findRequest.setLimit(1); + findRequest.setReadConcern( + ReadConcernArgs(ReadConcernLevel::kMajorityReadConcern).toBSONInner()); + auto cursor = getClient()->find(std::move(findRequest), + ReadPreferenceSetting{ReadPreference::SecondaryPreferred}); _donorCollectionWasEmptyBeforeListIndexes = !cursor->more(); LOGV2_DEBUG(5368500, 1, @@ -480,15 +476,16 @@ void TenantCollectionCloner::runQuery() { // Any errors that are thrown here (including NamespaceNotFound) will be handled on the stage // level. - getClient()->query([this](DBClientCursorBatchIterator& iter) { handleNextBatch(iter); }, - _sourceDbAndUuid, - filter, - query, - nullptr /* fieldsToReturn */, - QueryOption_NoCursorTimeout | QueryOption_SecondaryOk | - (collectionClonerUsesExhaust ? QueryOption_Exhaust : 0), - _collectionClonerBatchSize, - ReadConcernArgs(ReadConcernLevel::kMajorityReadConcern).toBSONInner()); + getClient()->query_DEPRECATED( + [this](DBClientCursorBatchIterator& iter) { handleNextBatch(iter); }, + _sourceDbAndUuid, + filter, + query, + nullptr /* fieldsToReturn */, + QueryOption_NoCursorTimeout | QueryOption_SecondaryOk | + (collectionClonerUsesExhaust ? QueryOption_Exhaust : 0), + _collectionClonerBatchSize, + ReadConcernArgs(ReadConcernLevel::kMajorityReadConcern).toBSONInner()); } void TenantCollectionCloner::handleNextBatch(DBClientCursorBatchIterator& iter) { diff --git a/src/mongo/db/repl/tenant_migration_recipient_service.cpp b/src/mongo/db/repl/tenant_migration_recipient_service.cpp index 700f33d6972..6911f5509ba 100644 --- a/src/mongo/db/repl/tenant_migration_recipient_service.cpp +++ b/src/mongo/db/repl/tenant_migration_recipient_service.cpp @@ -2229,10 +2229,8 @@ SemiFuture<void> TenantMigrationRecipientService::Instance::_updateStateDocForMa void TenantMigrationRecipientService::Instance::_fetchAndStoreDonorClusterTimeKeyDocs( const CancellationToken& token) { std::vector<ExternalKeysCollectionDocument> keyDocs; - auto cursor = - _client->query(NamespaceString::kKeysCollectionNamespace, - BSONObj{}, - Query().readPref(_readPreference.pref, _readPreference.tags.getTagBSON())); + FindCommandRequest findRequest{NamespaceString::kKeysCollectionNamespace}; + auto cursor = _client->find(std::move(findRequest), _readPreference); while (cursor->more()) { const auto doc = cursor->nextSafe().getOwned(); keyDocs.push_back( diff --git a/src/mongo/db/repl/transaction_oplog_application.cpp b/src/mongo/db/repl/transaction_oplog_application.cpp index a838e8566f6..a44f8380f1c 100644 --- a/src/mongo/db/repl/transaction_oplog_application.cpp +++ b/src/mongo/db/repl/transaction_oplog_application.cpp @@ -574,9 +574,10 @@ void reconstructPreparedTransactions(OperationContext* opCtx, repl::OplogApplica opCtx->recoveryUnit()->getTimestampReadSource()); DBDirectClient client(opCtx); - const auto cursor = client.query(NamespaceString::kSessionTransactionsTableNamespace, - BSON("state" - << "prepared")); + FindCommandRequest findRequest{NamespaceString::kSessionTransactionsTableNamespace}; + findRequest.setFilter(BSON("state" + << "prepared")); + const auto cursor = client.find(std::move(findRequest)); // Iterate over each entry in the transactions table that has a prepared transaction. while (cursor->more()) { diff --git a/src/mongo/db/rs_local_client.cpp b/src/mongo/db/rs_local_client.cpp index 6fdc49907f3..65cf9a284fa 100644 --- a/src/mongo/db/rs_local_client.cpp +++ b/src/mongo/db/rs_local_client.cpp @@ -139,18 +139,20 @@ StatusWith<Shard::QueryResponse> RSLocalClient::queryOnce( } DBDirectClient client(opCtx); - Query querySettings; + FindCommandRequest findRequest{nss}; + findRequest.setFilter(query); if (!sort.isEmpty()) { - querySettings.sort(sort); + findRequest.setSort(sort); } if (hint) { - querySettings.hint(*hint); + findRequest.setHint(*hint); + } + if (limit) { + findRequest.setLimit(*limit); } - querySettings.readPref(readPref.pref, BSONArray()); try { - std::unique_ptr<DBClientCursor> cursor = - client.query(nss, query, querySettings, limit.get_value_or(0)); + std::unique_ptr<DBClientCursor> cursor = client.find(std::move(findRequest), readPref); if (!cursor) { return {ErrorCodes::OperationFailed, diff --git a/src/mongo/db/s/balancer/balancer_commands_scheduler_impl.cpp b/src/mongo/db/s/balancer/balancer_commands_scheduler_impl.cpp index 3d98bcb8499..41e4269e295 100644 --- a/src/mongo/db/s/balancer/balancer_commands_scheduler_impl.cpp +++ b/src/mongo/db/s/balancer/balancer_commands_scheduler_impl.cpp @@ -121,7 +121,8 @@ std::vector<RequestData> rebuildRequestsFromRecoveryInfo( }; DBDirectClient dbClient(opCtx); try { - dbClient.query(documentProcessor, MigrationType::ConfigNS, BSONObj()); + FindCommandRequest findRequest{MigrationType::ConfigNS}; + dbClient.find(std::move(findRequest), ReadPreferenceSetting{}, documentProcessor); } catch (const DBException& e) { LOGV2_ERROR(5847215, "Failed to load requests to recover", "error"_attr = redact(e)); } diff --git a/src/mongo/db/s/balancer/balancer_defragmentation_policy_test.cpp b/src/mongo/db/s/balancer/balancer_defragmentation_policy_test.cpp index 2446042021c..206f40f870a 100644 --- a/src/mongo/db/s/balancer/balancer_defragmentation_policy_test.cpp +++ b/src/mongo/db/s/balancer/balancer_defragmentation_policy_test.cpp @@ -100,9 +100,9 @@ protected: BSONObj getConfigCollectionEntry() { DBDirectClient client(operationContext()); - auto cursor = client.query(NamespaceStringOrUUID(CollectionType::ConfigNS), - BSON(CollectionType::kUuidFieldName << kUuid), - {}); + FindCommandRequest findRequest{NamespaceStringOrUUID{CollectionType::ConfigNS}}; + findRequest.setFilter(BSON(CollectionType::kUuidFieldName << kUuid)); + auto cursor = client.find(std::move(findRequest)); if (!cursor || !cursor->more()) return BSONObj(); else diff --git a/src/mongo/db/s/persistent_task_queue.h b/src/mongo/db/s/persistent_task_queue.h index 25736e6d6ba..0c7e873786d 100644 --- a/src/mongo/db/s/persistent_task_queue.h +++ b/src/mongo/db/s/persistent_task_queue.h @@ -109,8 +109,9 @@ PersistentTaskQueue<T>::PersistentTaskQueue(OperationContext* opCtx, NamespaceSt DBDirectClient client(opCtx); - auto projection = BSON("_id" << 1); - auto cursor = client.query(_storageNss, BSONObj{}, Query(), 0, 0, &projection); + FindCommandRequest findRequest{_storageNss}; + findRequest.setProjection(BSON("_id" << 1)); + auto cursor = client.find(std::move(findRequest)); _count = cursor->itcount(); if (_count > 0) diff --git a/src/mongo/db/s/recoverable_critical_section_service.cpp b/src/mongo/db/s/recoverable_critical_section_service.cpp index 9864779bf31..dbfcd529035 100644 --- a/src/mongo/db/s/recoverable_critical_section_service.cpp +++ b/src/mongo/db/s/recoverable_critical_section_service.cpp @@ -85,9 +85,10 @@ void RecoverableCriticalSectionService::acquireRecoverableCriticalSectionBlockWr AutoGetCollection cCollLock(opCtx, nss, MODE_S); DBDirectClient dbClient(opCtx); - auto cursor = dbClient.query( - NamespaceString::kCollectionCriticalSectionsNamespace, + FindCommandRequest findRequest{NamespaceString::kCollectionCriticalSectionsNamespace}; + findRequest.setFilter( BSON(CollectionCriticalSectionDocument::kNssFieldName << nss.toString())); + auto cursor = dbClient.find(std::move(findRequest)); // if there is a doc with the same nss -> in order to not fail it must have the same reason if (cursor->more()) { @@ -170,9 +171,10 @@ void RecoverableCriticalSectionService::promoteRecoverableCriticalSectionToBlock AutoGetCollection cCollLock(opCtx, nss, MODE_X); DBDirectClient dbClient(opCtx); - auto cursor = dbClient.query( - NamespaceString::kCollectionCriticalSectionsNamespace, + FindCommandRequest findRequest{NamespaceString::kCollectionCriticalSectionsNamespace}; + findRequest.setFilter( BSON(CollectionCriticalSectionDocument::kNssFieldName << nss.toString())); + auto cursor = dbClient.find(std::move(findRequest)); invariant( cursor->more(), @@ -272,8 +274,9 @@ void RecoverableCriticalSectionService::releaseRecoverableCriticalSection( const auto queryNss = BSON(CollectionCriticalSectionDocument::kNssFieldName << nss.toString()); - auto cursor = - dbClient.query(NamespaceString::kCollectionCriticalSectionsNamespace, queryNss); + FindCommandRequest findRequest{NamespaceString::kCollectionCriticalSectionsNamespace}; + findRequest.setFilter(queryNss); + auto cursor = dbClient.find(std::move(findRequest)); // if there is no document with the same nss -> do nothing! if (!cursor->more()) { diff --git a/src/mongo/db/s/resharding/resharding_coordinator_service_test.cpp b/src/mongo/db/s/resharding/resharding_coordinator_service_test.cpp index 06231a28ae2..5d1ff6ef471 100644 --- a/src/mongo/db/s/resharding/resharding_coordinator_service_test.cpp +++ b/src/mongo/db/s/resharding/resharding_coordinator_service_test.cpp @@ -862,9 +862,10 @@ TEST_F(ReshardingCoordinatorServiceTest, StepDownStepUpEachTransition) { DBDirectClient client(opCtx); // config.chunks should have been moved to the new UUID + FindCommandRequest findRequest{ChunkType::ConfigNS}; + findRequest.setFilter(BSON(ChunkType::collectionUUID() << doc.getReshardingUUID())); + auto chunkCursor = client.find(std::move(findRequest)); std::vector<ChunkType> foundChunks; - auto chunkCursor = client.query( - ChunkType::ConfigNS, BSON(ChunkType::collectionUUID() << doc.getReshardingUUID())); while (chunkCursor->more()) { auto d = uassertStatusOK(ChunkType::fromConfigBSON( chunkCursor->nextSafe().getOwned(), _originalEpoch, _originalTimestamp)); diff --git a/src/mongo/db/s/resharding/resharding_coordinator_test.cpp b/src/mongo/db/s/resharding/resharding_coordinator_test.cpp index 9116e731841..a1ef35222f3 100644 --- a/src/mongo/db/s/resharding/resharding_coordinator_test.cpp +++ b/src/mongo/db/s/resharding/resharding_coordinator_test.cpp @@ -422,8 +422,11 @@ protected: const OID& collEpoch, const Timestamp& collTimestamp) { DBDirectClient client(opCtx); + FindCommandRequest findRequest{ChunkType::ConfigNS}; + findRequest.setFilter(BSON("uuid" << uuid)); + auto cursor = client.find(std::move(findRequest)); + std::vector<ChunkType> foundChunks; - auto cursor = client.query(ChunkType::ConfigNS, BSON("uuid" << uuid)); while (cursor->more()) { auto d = uassertStatusOK( ChunkType::fromConfigBSON(cursor->nextSafe().getOwned(), collEpoch, collTimestamp)); @@ -448,8 +451,11 @@ protected: auto nss = expectedZones[0].getNS(); DBDirectClient client(opCtx); + FindCommandRequest findRequest{TagsType::ConfigNS}; + findRequest.setFilter(BSON("ns" << nss.ns())); + auto cursor = client.find(std::move(findRequest)); + std::vector<TagsType> foundZones; - auto cursor = client.query(TagsType::ConfigNS, BSON("ns" << nss.ns())); while (cursor->more()) { foundZones.push_back( uassertStatusOK(TagsType::fromBSON(cursor->nextSafe().getOwned()))); diff --git a/src/mongo/db/s/resharding/resharding_donor_service_test.cpp b/src/mongo/db/s/resharding/resharding_donor_service_test.cpp index 47e35c202e7..2359d85009a 100644 --- a/src/mongo/db/s/resharding/resharding_donor_service_test.cpp +++ b/src/mongo/db/s/resharding/resharding_donor_service_test.cpp @@ -269,8 +269,9 @@ TEST_F(ReshardingDonorServiceTest, WritesNoOpOplogEntryOnReshardingBegin) { DBDirectClient client(opCtx.get()); NamespaceString sourceNss("sourcedb", "sourcecollection"); - auto cursor = client.query(NamespaceString(NamespaceString::kRsOplogNamespace.ns()), - BSON("ns" << sourceNss.toString())); + FindCommandRequest findRequest{NamespaceString::kRsOplogNamespace}; + findRequest.setFilter(BSON("ns" << sourceNss.toString())); + auto cursor = client.find(std::move(findRequest)); ASSERT_TRUE(cursor->more()) << "Found no oplog entries for source collection"; repl::OplogEntry op(cursor->next()); @@ -308,9 +309,9 @@ TEST_F(ReshardingDonorServiceTest, WritesNoOpOplogEntryToGenerateMinFetchTimesta ErrorCodes::InterruptedDueToReplStateChange); DBDirectClient client(opCtx.get()); - auto cursor = - client.query(NamespaceString(NamespaceString::kRsOplogNamespace.ns()), - BSON("ns" << NamespaceString::kForceOplogBatchBoundaryNamespace.ns())); + FindCommandRequest findRequest{NamespaceString::kRsOplogNamespace}; + findRequest.setFilter(BSON("ns" << NamespaceString::kForceOplogBatchBoundaryNamespace.ns())); + auto cursor = client.find(std::move(findRequest)); ASSERT_TRUE(cursor->more()) << "Found no oplog entries for source collection"; repl::OplogEntry op(cursor->next()); @@ -345,8 +346,9 @@ TEST_F(ReshardingDonorServiceTest, WritesFinalReshardOpOplogEntriesWhileWritesBl ErrorCodes::InterruptedDueToReplStateChange); DBDirectClient client(opCtx.get()); - auto cursor = client.query(NamespaceString(NamespaceString::kRsOplogNamespace.ns()), - BSON("o2.type" << kReshardFinalOpLogType)); + FindCommandRequest findRequest{NamespaceString::kRsOplogNamespace}; + findRequest.setFilter(BSON("o2.type" << kReshardFinalOpLogType)); + auto cursor = client.find(std::move(findRequest)); ASSERT_TRUE(cursor->more()) << "Found no oplog entries for source collection"; diff --git a/src/mongo/db/s/resharding/resharding_recipient_service_test.cpp b/src/mongo/db/s/resharding/resharding_recipient_service_test.cpp index 22a9840a450..43ccab32bec 100644 --- a/src/mongo/db/s/resharding/resharding_recipient_service_test.cpp +++ b/src/mongo/db/s/resharding/resharding_recipient_service_test.cpp @@ -621,8 +621,9 @@ TEST_F(ReshardingRecipientServiceTest, WritesNoopOplogEntryOnReshardDoneCatchUp) DBDirectClient client(opCtx.get()); NamespaceString sourceNss = constructTemporaryReshardingNss("sourcedb", doc.getSourceUUID()); - auto cursor = client.query(NamespaceString(NamespaceString::kRsOplogNamespace.ns()), - BSON("ns" << sourceNss.toString())); + FindCommandRequest findRequest{NamespaceString::kRsOplogNamespace}; + findRequest.setFilter(BSON("ns" << sourceNss.toString())); + auto cursor = client.find(std::move(findRequest)); ASSERT_TRUE(cursor->more()) << "Found no oplog entries for source collection"; repl::OplogEntry op(cursor->next()); diff --git a/src/mongo/db/s/session_catalog_migration_source.cpp b/src/mongo/db/s/session_catalog_migration_source.cpp index 31f006da764..746fa785d77 100644 --- a/src/mongo/db/s/session_catalog_migration_source.cpp +++ b/src/mongo/db/s/session_catalog_migration_source.cpp @@ -193,9 +193,9 @@ SessionCatalogMigrationSource::SessionCatalogMigrationSource(OperationContext* o // Sort is not needed for correctness. This is just for making it easier to write deterministic // tests. DBDirectClient client(opCtx); - auto cursor = client.query(NamespaceString::kSessionTransactionsTableNamespace, - BSONObj{}, - Query().sort(BSON("_id" << 1))); + FindCommandRequest findRequest{NamespaceString::kSessionTransactionsTableNamespace}; + findRequest.setSort(BSON("_id" << 1)); + auto cursor = client.find(std::move(findRequest)); while (cursor->more()) { auto nextSession = SessionTxnRecord::parse( diff --git a/src/mongo/db/s/shard_metadata_util.cpp b/src/mongo/db/s/shard_metadata_util.cpp index fe9e22f715b..fa829fe2270 100644 --- a/src/mongo/db/s/shard_metadata_util.cpp +++ b/src/mongo/db/s/shard_metadata_util.cpp @@ -162,11 +162,10 @@ StatusWith<ShardCollectionType> readShardCollectionsEntry(OperationContext* opCt try { DBDirectClient client(opCtx); - std::unique_ptr<DBClientCursor> cursor = - client.query(NamespaceString::kShardConfigCollectionsNamespace, - BSON(ShardCollectionType::kNssFieldName << nss.ns()), - Query(), - 1); + FindCommandRequest findRequest{NamespaceString::kShardConfigCollectionsNamespace}; + findRequest.setFilter(BSON(ShardCollectionType::kNssFieldName << nss.ns())); + findRequest.setLimit(1); + std::unique_ptr<DBClientCursor> cursor = client.find(std::move(findRequest)); if (!cursor) { return Status(ErrorCodes::OperationFailed, str::stream() << "Failed to establish a cursor for reading " @@ -191,11 +190,10 @@ StatusWith<ShardCollectionType> readShardCollectionsEntry(OperationContext* opCt StatusWith<ShardDatabaseType> readShardDatabasesEntry(OperationContext* opCtx, StringData dbName) { try { DBDirectClient client(opCtx); - std::unique_ptr<DBClientCursor> cursor = - client.query(NamespaceString::kShardConfigDatabasesNamespace, - BSON(ShardDatabaseType::name() << dbName.toString()), - Query(), - 1); + FindCommandRequest findRequest{NamespaceString::kShardConfigDatabasesNamespace}; + findRequest.setFilter(BSON(ShardDatabaseType::name() << dbName.toString())); + findRequest.setLimit(1); + std::unique_ptr<DBClientCursor> cursor = client.find(std::move(findRequest)); if (!cursor) { return Status(ErrorCodes::OperationFailed, str::stream() << "Failed to establish a cursor for reading " @@ -313,8 +311,13 @@ StatusWith<std::vector<ChunkType>> readShardChunks(OperationContext* opCtx, try { DBDirectClient client(opCtx); - std::unique_ptr<DBClientCursor> cursor = - client.query(chunksNss, query, Query().sort(sort), limit.get_value_or(0)); + FindCommandRequest findRequest{chunksNss}; + findRequest.setFilter(query); + findRequest.setSort(sort); + if (limit) { + findRequest.setLimit(*limit); + } + std::unique_ptr<DBClientCursor> cursor = client.find(std::move(findRequest)); uassert(ErrorCodes::OperationFailed, str::stream() << "Failed to establish a cursor for reading " << chunksNss.ns() << " from local storage", diff --git a/src/mongo/db/s/shard_metadata_util_test.cpp b/src/mongo/db/s/shard_metadata_util_test.cpp index bfd1b812f27..7effa87f13c 100644 --- a/src/mongo/db/s/shard_metadata_util_test.cpp +++ b/src/mongo/db/s/shard_metadata_util_test.cpp @@ -141,12 +141,13 @@ struct ShardMetadataUtilTest : public ShardServerTestFixture { DBDirectClient client(operationContext()); for (auto& chunk : chunks) { NamespaceString chunkMetadataNss{ChunkType::ShardNSPrefix + uuid.toString()}; - std::unique_ptr<DBClientCursor> cursor = - client.query(chunkMetadataNss, - BSON(ChunkType::minShardID() - << chunk.getMin() << ChunkType::max() << chunk.getMax()), - Query().readPref(ReadPreference::Nearest, BSONArray()), - 1); + FindCommandRequest findRequest{chunkMetadataNss}; + findRequest.setFilter(BSON(ChunkType::minShardID() + << chunk.getMin() << ChunkType::max() + << chunk.getMax())); + findRequest.setLimit(1); + std::unique_ptr<DBClientCursor> cursor = client.find( + std::move(findRequest), ReadPreferenceSetting{ReadPreference::Nearest}); ASSERT(cursor); ASSERT(cursor->more()); diff --git a/src/mongo/db/s/sharding_ddl_util_test.cpp b/src/mongo/db/s/sharding_ddl_util_test.cpp index 052f683fbec..eacd1372f5f 100644 --- a/src/mongo/db/s/sharding_ddl_util_test.cpp +++ b/src/mongo/db/s/sharding_ddl_util_test.cpp @@ -82,21 +82,12 @@ const NamespaceString kToNss("test.to"); // Query 'limit' objects from the database into an array. void findN(DBClientBase& client, - const std::string& ns, - const BSONObj& filter, - const Query& querySettings, + FindCommandRequest findRequest, int limit, std::vector<BSONObj>& out) { out.reserve(limit); - std::unique_ptr<DBClientCursor> c = client.query(NamespaceString(ns), - filter, - querySettings, - limit, - 0 /*nToSkip*/, - nullptr /*fieldsToReturn*/, - 0 /*queryOptions*/, - 0 /* batchSize */, - boost::none); + findRequest.setLimit(limit); + std::unique_ptr<DBClientCursor> c = client.find(std::move(findRequest)); ASSERT(c.get()); while (c->more()) { @@ -158,13 +149,13 @@ TEST_F(ShardingDDLUtilTest, ShardedRenameMetadata) { // Get FROM collection document and chunks auto fromDoc = client.findOne(CollectionType::ConfigNS, fromCollQuery); CollectionType fromCollection(fromDoc); + + FindCommandRequest fromChunksRequest{ChunkType::ConfigNS}; + fromChunksRequest.setFilter(BSON(ChunkType::collectionUUID << collUUID)); + fromChunksRequest.setSort(BSON("_id" << 1)); + std::vector<BSONObj> fromChunks; - findN(client, - ChunkType::ConfigNS.ns(), - BSON(ChunkType::collectionUUID << collUUID) /*filter*/, - Query().sort(BSON("_id" << 1)), - nChunks, - fromChunks); + findN(client, std::move(fromChunksRequest), nChunks, fromChunks); auto fromCollType = Grid::get(opCtx)->catalogClient()->getCollection(opCtx, fromNss); // Perform the metadata rename @@ -177,13 +168,13 @@ TEST_F(ShardingDDLUtilTest, ShardedRenameMetadata) { // Get TO collection document and chunks auto toDoc = client.findOne(CollectionType::ConfigNS, toCollQuery); CollectionType toCollection(toDoc); + + FindCommandRequest toChunksRequest{ChunkType::ConfigNS}; + toChunksRequest.setFilter(BSON(ChunkType::collectionUUID << collUUID)); + toChunksRequest.setSort(BSON("_id" << 1)); + std::vector<BSONObj> toChunks; - findN(client, - ChunkType::ConfigNS.ns(), - BSON(ChunkType::collectionUUID << collUUID) /*filter*/, - Query().sort(BSON("_id" << 1)), - nChunks, - toChunks); + findN(client, std::move(toChunksRequest), nChunks, toChunks); // Check that original epoch/timestamp are changed in config.collections entry ASSERT(fromCollection.getEpoch() != toCollection.getEpoch()); diff --git a/src/mongo/db/s/transaction_coordinator_util.cpp b/src/mongo/db/s/transaction_coordinator_util.cpp index cce0095f044..7132b090f24 100644 --- a/src/mongo/db/s/transaction_coordinator_util.cpp +++ b/src/mongo/db/s/transaction_coordinator_util.cpp @@ -650,8 +650,8 @@ std::vector<TransactionCoordinatorDocument> readAllCoordinatorDocs(OperationCont std::vector<TransactionCoordinatorDocument> allCoordinatorDocs; DBDirectClient client(opCtx); - auto coordinatorDocsCursor = - client.query(NamespaceString::kTransactionCoordinatorsNamespace, BSONObj{}); + FindCommandRequest findRequest{NamespaceString::kTransactionCoordinatorsNamespace}; + auto coordinatorDocsCursor = client.find(std::move(findRequest)); while (coordinatorDocsCursor->more()) { // TODO (SERVER-38307): Try/catch around parsing the document and skip the document if it diff --git a/src/mongo/db/session_catalog_mongod.cpp b/src/mongo/db/session_catalog_mongod.cpp index 1d9f6bdb586..937596991b3 100644 --- a/src/mongo/db/session_catalog_mongod.cpp +++ b/src/mongo/db/session_catalog_mongod.cpp @@ -260,9 +260,11 @@ void createRetryableFindAndModifyTable(OperationContext* opCtx) { void abortInProgressTransactions(OperationContext* opCtx) { DBDirectClient client(opCtx); - auto cursor = client.query(NamespaceString::kSessionTransactionsTableNamespace, - BSON(SessionTxnRecord::kStateFieldName << DurableTxnState_serializer( - DurableTxnStateEnum::kInProgress))); + FindCommandRequest findRequest{NamespaceString::kSessionTransactionsTableNamespace}; + findRequest.setFilter(BSON(SessionTxnRecord::kStateFieldName + << DurableTxnState_serializer(DurableTxnStateEnum::kInProgress))); + auto cursor = client.find(std::move(findRequest)); + if (cursor->more()) { LOGV2_DEBUG(21977, 3, "Aborting in-progress transactions on stepup."); } @@ -450,12 +452,11 @@ int MongoDSessionCatalog::reapSessionsOlderThan(OperationContext* opCtx, // Scan for records older than the minimum lifetime and uses a sort to walk the '_id' index DBDirectClient client(opCtx); - auto cursor = client.query(NamespaceString::kSessionTransactionsTableNamespace, - BSON(kLastWriteDateFieldName << LT << possiblyExpired), - Query().sort(kSortById), - 0, - 0, - &kIdProjection); + FindCommandRequest findRequest{NamespaceString::kSessionTransactionsTableNamespace}; + findRequest.setFilter(BSON(kLastWriteDateFieldName << LT << possiblyExpired)); + findRequest.setSort(kSortById); + findRequest.setProjection(kIdProjection); + auto cursor = client.find(std::move(findRequest)); // The max batch size is chosen so that a single batch won't exceed the 16MB BSON object size // limit diff --git a/src/mongo/db/transaction_participant_retryable_writes_test.cpp b/src/mongo/db/transaction_participant_retryable_writes_test.cpp index 508f1033814..d0349dbf092 100644 --- a/src/mongo/db/transaction_participant_retryable_writes_test.cpp +++ b/src/mongo/db/transaction_participant_retryable_writes_test.cpp @@ -259,8 +259,9 @@ protected: const auto session = OperationContextSession::get(opCtx()); DBDirectClient client(opCtx()); - auto cursor = client.query(NamespaceString::kSessionTransactionsTableNamespace, - BSON("_id" << session->getSessionId().toBSON())); + FindCommandRequest findRequest{NamespaceString::kSessionTransactionsTableNamespace}; + findRequest.setFilter(BSON("_id" << session->getSessionId().toBSON())); + auto cursor = client.find(std::move(findRequest)); ASSERT(cursor); ASSERT(cursor->more()); @@ -298,8 +299,9 @@ TEST_F(TransactionParticipantRetryableWritesTest, SessionEntryNotWrittenOnBegin) ASSERT(txnParticipant.getLastWriteOpTime().isNull()); DBDirectClient client(opCtx()); - auto cursor = client.query(NamespaceString::kSessionTransactionsTableNamespace, - BSON("_id" << sessionId.toBSON())); + FindCommandRequest findRequest{NamespaceString::kSessionTransactionsTableNamespace}; + findRequest.setFilter(BSON("_id" << sessionId.toBSON())); + auto cursor = client.find(std::move(findRequest)); ASSERT(cursor); ASSERT(!cursor->more()); } @@ -316,8 +318,9 @@ TEST_F(TransactionParticipantRetryableWritesTest, SessionEntryWrittenAtFirstWrit const auto opTime = writeTxnRecord(txnNum, {0}, {}, boost::none); DBDirectClient client(opCtx()); - auto cursor = client.query(NamespaceString::kSessionTransactionsTableNamespace, - BSON("_id" << sessionId.toBSON())); + FindCommandRequest findRequest{NamespaceString::kSessionTransactionsTableNamespace}; + findRequest.setFilter(BSON("_id" << sessionId.toBSON())); + auto cursor = client.find(std::move(findRequest)); ASSERT(cursor); ASSERT(cursor->more()); @@ -342,8 +345,9 @@ TEST_F(TransactionParticipantRetryableWritesTest, const auto secondOpTime = writeTxnRecord(200, {1}, firstOpTime, boost::none); DBDirectClient client(opCtx()); - auto cursor = client.query(NamespaceString::kSessionTransactionsTableNamespace, - BSON("_id" << sessionId.toBSON())); + FindCommandRequest findRequest{NamespaceString::kSessionTransactionsTableNamespace}; + findRequest.setFilter(BSON("_id" << sessionId.toBSON())); + auto cursor = client.find(std::move(findRequest)); ASSERT(cursor); ASSERT(cursor->more()); |