summaryrefslogtreecommitdiff
path: root/src/mongo/db/pipeline/document_source_current_op.cpp
diff options
context:
space:
mode:
authorLucas de Castro Borges <lucas@gnuabordo.com.br>2025-02-18 17:02:53 -0300
committerLucas de Castro Borges <lucas@gnuabordo.com.br>2025-02-18 17:02:53 -0300
commit959575a5ca598bf5f37fb5cebe7ed1d80d3d71f7 (patch)
treeacc8d60aedb12b70048e676e8a7349deb0010db8 /src/mongo/db/pipeline/document_source_current_op.cpp
parent76588293975fc059cf076779e4283e6ffaf8afff (diff)
New upstream version 6.0.20upstream
Diffstat (limited to 'src/mongo/db/pipeline/document_source_current_op.cpp')
-rw-r--r--src/mongo/db/pipeline/document_source_current_op.cpp93
1 files changed, 55 insertions, 38 deletions
diff --git a/src/mongo/db/pipeline/document_source_current_op.cpp b/src/mongo/db/pipeline/document_source_current_op.cpp
index 6ef6e2c762e..fc5c8b32a1f 100644
--- a/src/mongo/db/pipeline/document_source_current_op.cpp
+++ b/src/mongo/db/pipeline/document_source_current_op.cpp
@@ -70,8 +70,8 @@ std::unique_ptr<DocumentSourceCurrentOp::LiteParsed> DocumentSourceCurrentOp::Li
<< typeName(spec.type()));
}
- auto allUsers = UserMode::kExcludeOthers;
- auto localOps = LocalOpsMode::kRemoteShardOps;
+ auto allUsers = kDefaultUserMode;
+ auto localOps = kDefaultLocalOpsMode;
// Check the spec for all fields named 'allUsers'. If any of them are 'true', we require
// the 'inprog' privilege. This avoids the possibility that a spec with multiple
@@ -113,13 +113,14 @@ const char* DocumentSourceCurrentOp::getSourceName() const {
DocumentSource::GetNextResult DocumentSourceCurrentOp::doGetNext() {
if (_ops.empty()) {
- _ops = pExpCtx->mongoProcessInterface->getCurrentOps(pExpCtx,
- _includeIdleConnections,
- _includeIdleSessions,
- _includeOpsFromAllUsers,
- _truncateOps,
- _idleCursors,
- _backtrace);
+ _ops = pExpCtx->mongoProcessInterface->getCurrentOps(
+ pExpCtx,
+ _includeIdleConnections.value_or(kDefaultConnMode),
+ _includeIdleSessions.value_or(kDefaultSessionMode),
+ _includeOpsFromAllUsers.value_or(kDefaultUserMode),
+ _truncateOps.value_or(kDefaultTruncationMode),
+ _idleCursors.value_or(kDefaultCursorMode),
+ _backtrace.value_or(kDefaultBacktraceMode));
_opsIter = _ops.begin();
@@ -191,13 +192,13 @@ intrusive_ptr<DocumentSource> DocumentSourceCurrentOp::createFromBson(
"$currentOp must be run against the 'admin' database with {aggregate: 1}",
nss.db() == NamespaceString::kAdminDb && nss.isCollectionlessAggregateNS());
- ConnMode includeIdleConnections = ConnMode::kExcludeIdle;
- SessionMode includeIdleSessions = SessionMode::kIncludeIdle;
- UserMode includeOpsFromAllUsers = UserMode::kExcludeOthers;
- LocalOpsMode showLocalOpsOnMongoS = LocalOpsMode::kRemoteShardOps;
- TruncationMode truncateOps = TruncationMode::kNoTruncation;
- CursorMode idleCursors = CursorMode::kExcludeCursors;
- BacktraceMode backtrace = BacktraceMode::kExcludeBacktrace;
+ boost::optional<ConnMode> includeIdleConnections;
+ boost::optional<SessionMode> includeIdleSessions;
+ boost::optional<UserMode> includeOpsFromAllUsers;
+ boost::optional<LocalOpsMode> showLocalOpsOnMongoS;
+ boost::optional<TruncationMode> truncateOps;
+ boost::optional<CursorMode> idleCursors;
+ boost::optional<BacktraceMode> backtrace;
for (auto&& elem : spec.embeddedObject()) {
const auto fieldName = elem.fieldNameStringData();
@@ -278,13 +279,13 @@ intrusive_ptr<DocumentSource> DocumentSourceCurrentOp::createFromBson(
intrusive_ptr<DocumentSourceCurrentOp> DocumentSourceCurrentOp::create(
const boost::intrusive_ptr<ExpressionContext>& pExpCtx,
- ConnMode includeIdleConnections,
- SessionMode includeIdleSessions,
- UserMode includeOpsFromAllUsers,
- LocalOpsMode showLocalOpsOnMongoS,
- TruncationMode truncateOps,
- CursorMode idleCursors,
- BacktraceMode backtrace) {
+ boost::optional<ConnMode> includeIdleConnections,
+ boost::optional<SessionMode> includeIdleSessions,
+ boost::optional<UserMode> includeOpsFromAllUsers,
+ boost::optional<LocalOpsMode> showLocalOpsOnMongoS,
+ boost::optional<TruncationMode> truncateOps,
+ boost::optional<CursorMode> idleCursors,
+ boost::optional<BacktraceMode> backtrace) {
return new DocumentSourceCurrentOp(pExpCtx,
includeIdleConnections,
includeIdleSessions,
@@ -295,22 +296,38 @@ intrusive_ptr<DocumentSourceCurrentOp> DocumentSourceCurrentOp::create(
backtrace);
}
-Value DocumentSourceCurrentOp::serialize(boost::optional<ExplainOptions::Verbosity> explain) const {
+Value DocumentSourceCurrentOp::serialize(const SerializationOptions& opts) const {
return Value(Document{
{getSourceName(),
- Document{{kIdleConnectionsFieldName,
- _includeIdleConnections == ConnMode::kIncludeIdle ? Value(true) : Value()},
- {kIdleSessionsFieldName,
- _includeIdleSessions == SessionMode::kExcludeIdle ? Value(false) : Value()},
- {kAllUsersFieldName,
- _includeOpsFromAllUsers == UserMode::kIncludeAll ? Value(true) : Value()},
- {kLocalOpsFieldName,
- _showLocalOpsOnMongoS == LocalOpsMode::kLocalMongosOps ? Value(true) : Value()},
- {kTruncateOpsFieldName,
- _truncateOps == TruncationMode::kTruncateOps ? Value(true) : Value()},
- {kIdleCursorsFieldName,
- _idleCursors == CursorMode::kIncludeCursors ? Value(true) : Value()},
- {kBacktraceFieldName,
- _backtrace == BacktraceMode::kIncludeBacktrace ? Value(true) : Value()}}}});
+ Document{
+ {kIdleConnectionsFieldName,
+ _includeIdleConnections.has_value()
+ ? opts.serializeLiteral(_includeIdleConnections.value() == ConnMode::kIncludeIdle)
+ : Value()},
+ {kIdleSessionsFieldName,
+ _includeIdleSessions.has_value()
+ ? opts.serializeLiteral(_includeIdleSessions.value() == SessionMode::kIncludeIdle)
+ : Value()},
+ {kAllUsersFieldName,
+ _includeOpsFromAllUsers.has_value()
+ ? opts.serializeLiteral(_includeOpsFromAllUsers.value() == UserMode::kIncludeAll)
+ : Value()},
+ {kLocalOpsFieldName,
+ _showLocalOpsOnMongoS.has_value()
+ ? opts.serializeLiteral(_showLocalOpsOnMongoS.value() ==
+ LocalOpsMode::kLocalMongosOps)
+ : Value()},
+ {kTruncateOpsFieldName,
+ _truncateOps.has_value()
+ ? opts.serializeLiteral(_truncateOps.value() == TruncationMode::kTruncateOps)
+ : Value()},
+ {kIdleCursorsFieldName,
+ _idleCursors.has_value()
+ ? opts.serializeLiteral(_idleCursors.value() == CursorMode::kIncludeCursors)
+ : Value()},
+ {kBacktraceFieldName,
+ _backtrace.has_value()
+ ? opts.serializeLiteral(_backtrace.value() == BacktraceMode::kIncludeBacktrace)
+ : Value()}}}});
}
} // namespace mongo