summaryrefslogtreecommitdiff
path: root/src/mongo/db
diff options
context:
space:
mode:
authorDavid Storch <david.storch@mongodb.com>2021-10-19 14:30:46 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-10-19 15:32:21 +0000
commitb901d772a793a3aa73acb55c30242e1d000ad0d7 (patch)
treed466e07e9c158ea76f82df11a600717f0024b11e /src/mongo/db
parent13d81879027e51742205433d4b3573a0c9dbeaec (diff)
downloadmongo-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.cpp3
-rw-r--r--src/mongo/db/clientcursor.h55
-rw-r--r--src/mongo/db/commands/run_aggregate.cpp7
-rw-r--r--src/mongo/db/query/canonical_query.cpp17
-rw-r--r--src/mongo/db/query/canonical_query.h5
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;
}