diff options
author | David Storch <david.storch@mongodb.com> | 2021-10-19 14:30:46 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-10-19 15:32:21 +0000 |
commit | b901d772a793a3aa73acb55c30242e1d000ad0d7 (patch) | |
tree | d466e07e9c158ea76f82df11a600717f0024b11e /src/mongo/db | |
parent | 13d81879027e51742205433d4b3573a0c9dbeaec (diff) | |
download | mongo-b901d772a793a3aa73acb55c30242e1d000ad0d7.tar.gz |
SERVER-15301 Remove query options bit vector from CanonicalQuery/ClientCursor
Diffstat (limited to 'src/mongo/db')
-rw-r--r-- | src/mongo/db/clientcursor.cpp | 3 | ||||
-rw-r--r-- | src/mongo/db/clientcursor.h | 55 | ||||
-rw-r--r-- | src/mongo/db/commands/run_aggregate.cpp | 7 | ||||
-rw-r--r-- | src/mongo/db/query/canonical_query.cpp | 17 | ||||
-rw-r--r-- | src/mongo/db/query/canonical_query.h | 5 |
5 files changed, 30 insertions, 57 deletions
diff --git a/src/mongo/db/clientcursor.cpp b/src/mongo/db/clientcursor.cpp index e8e81759a5e..ba62a860c9b 100644 --- a/src/mongo/db/clientcursor.cpp +++ b/src/mongo/db/clientcursor.cpp @@ -96,7 +96,8 @@ ClientCursor::ClientCursor(ClientCursorParams params, _readPreferenceSetting(std::move(params.readPreferenceSetting)), _originatingCommand(params.originatingCommandObj), _originatingPrivileges(std::move(params.originatingPrivileges)), - _queryOptions(params.queryOptions), + _tailableMode(params.tailableMode), + _isNoTimeout(params.isNoTimeout), _exec(std::move(params.exec)), _operationUsingCursor(operationUsingCursor), _lastUseDate(now), diff --git a/src/mongo/db/clientcursor.h b/src/mongo/db/clientcursor.h index 7f73040c9d0..f6f79301ea2 100644 --- a/src/mongo/db/clientcursor.h +++ b/src/mongo/db/clientcursor.h @@ -71,7 +71,15 @@ struct ClientCursorParams { writeConcernOptions(std::move(writeConcernOptions)), readConcernArgs(std::move(readConcernArgs)), readPreferenceSetting(std::move(readPreferenceSetting)), - queryOptions(exec->getCanonicalQuery() ? exec->getCanonicalQuery()->getOptions() : 0), + isNoTimeout( + exec->getCanonicalQuery() + ? static_cast<bool>( + exec->getCanonicalQuery()->getFindCommandRequest().getNoCursorTimeout()) + : false), + tailableMode(exec->getCanonicalQuery() + ? query_request_helper::getTailableMode( + exec->getCanonicalQuery()->getFindCommandRequest()) + : TailableModeEnum::kNormal), originatingCommandObj(originatingCommandObj.getOwned()), originatingPrivileges(std::move(originatingPrivileges)) { while (authenticatedUsersIter.more()) { @@ -79,18 +87,8 @@ struct ClientCursorParams { } } - void setTailable(bool tailable) { - if (tailable) - queryOptions |= QueryOption_CursorTailable; - else - queryOptions &= ~QueryOption_CursorTailable; - } - - void setAwaitData(bool awaitData) { - if (awaitData) - queryOptions |= QueryOption_AwaitData; - else - queryOptions &= ~QueryOption_AwaitData; + void setTailableMode(TailableModeEnum newMode) { + tailableMode = newMode; } std::unique_ptr<PlanExecutor, PlanExecutor::Deleter> exec; @@ -100,7 +98,8 @@ struct ClientCursorParams { const WriteConcernOptions writeConcernOptions; const repl::ReadConcernArgs readConcernArgs; const ReadPreferenceSetting readPreferenceSetting; - int queryOptions = 0; + const bool isNoTimeout; + TailableModeEnum tailableMode; BSONObj originatingCommandObj; PrivilegeVector originatingPrivileges; }; @@ -170,21 +169,20 @@ public: return _exec.get(); } - /** - * Returns the query options bitmask. If you'd like to know if the cursor is tailable or - * awaitData, prefer using the specific methods isTailable() and isAwaitData() over using this - * method. - */ - int queryOptions() const { - return _queryOptions; - } - bool isTailable() const { - return _queryOptions & QueryOption_CursorTailable; + switch (_tailableMode) { + case TailableModeEnum::kNormal: + return false; + case TailableModeEnum::kTailable: + case TailableModeEnum::kTailableAndAwaitData: + return true; + } + + MONGO_UNREACHABLE; } bool isAwaitData() const { - return _queryOptions & QueryOption_AwaitData; + return _tailableMode == TailableModeEnum::kTailableAndAwaitData; } /** @@ -349,7 +347,7 @@ private: void dispose(OperationContext* opCtx); bool isNoTimeout() const { - return (_queryOptions & QueryOption_NoCursorTimeout); + return _isNoTimeout; } // The ID of the ClientCursor. A value of 0 is used to mean that no cursor id has been assigned. @@ -392,8 +390,9 @@ private: // The privileges required for the _originatingCommand. const PrivilegeVector _originatingPrivileges; - // See the QueryOptions enum in dbclientinterface.h. - const int _queryOptions = 0; + const TailableModeEnum _tailableMode; + + const bool _isNoTimeout; // Unused maxTime budget for this cursor. Microseconds _leftoverMaxTimeMicros = Microseconds::max(); diff --git a/src/mongo/db/commands/run_aggregate.cpp b/src/mongo/db/commands/run_aggregate.cpp index 2167b3234d9..eba958157e3 100644 --- a/src/mongo/db/commands/run_aggregate.cpp +++ b/src/mongo/db/commands/run_aggregate.cpp @@ -855,12 +855,7 @@ Status runAggregate(OperationContext* opCtx, ReadPreferenceSetting::get(opCtx), cmdObj, privileges); - if (expCtx->tailableMode == TailableModeEnum::kTailable) { - cursorParams.setTailable(true); - } else if (expCtx->tailableMode == TailableModeEnum::kTailableAndAwaitData) { - cursorParams.setTailable(true); - cursorParams.setAwaitData(true); - } + cursorParams.setTailableMode(expCtx->tailableMode); auto pin = CursorManager::get(opCtx)->registerCursor(opCtx, std::move(cursorParams)); diff --git a/src/mongo/db/query/canonical_query.cpp b/src/mongo/db/query/canonical_query.cpp index cafabb0de38..32ea6e269cd 100644 --- a/src/mongo/db/query/canonical_query.cpp +++ b/src/mongo/db/query/canonical_query.cpp @@ -475,23 +475,6 @@ Status CanonicalQuery::isValidNormalized(const MatchExpression* root) { return Status::OK(); } -int CanonicalQuery::getOptions() const { - int options = 0; - if (_findCommand->getTailable()) { - options |= QueryOption_CursorTailable; - } - if (_findCommand->getAwaitData()) { - options |= QueryOption_AwaitData; - } - if (_findCommand->getNoCursorTimeout()) { - options |= QueryOption_NoCursorTimeout; - } - if (_findCommand->getAllowPartialResults()) { - options |= QueryOption_PartialResults; - } - return options; -} - std::string CanonicalQuery::toString() const { str::stream ss; ss << "ns=" << _findCommand->getNamespaceOrUUID().nss().value_or(NamespaceString()).ns(); diff --git a/src/mongo/db/query/canonical_query.h b/src/mongo/db/query/canonical_query.h index 6541d65bf55..37f93e1704f 100644 --- a/src/mongo/db/query/canonical_query.h +++ b/src/mongo/db/query/canonical_query.h @@ -205,11 +205,6 @@ public: return _canHaveNoopMatchNodes; } - /** - * Return options as a bit vector. - */ - int getOptions() const; - bool getExplain() const { return _explain; } |