From 99e27ba5943fd561242ae0f90e263e9a4098036e Mon Sep 17 00:00:00 2001 From: "A. Jesse Jiryu Davis" Date: Mon, 5 Oct 2020 15:45:57 -0400 Subject: SERVER-50375 Ensure mongos forwards API parameters to shards, try 3 --- src/mongo/db/kill_sessions.h | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) (limited to 'src/mongo/db/kill_sessions.h') diff --git a/src/mongo/db/kill_sessions.h b/src/mongo/db/kill_sessions.h index 29909fd49df..31ceeed9375 100644 --- a/src/mongo/db/kill_sessions.h +++ b/src/mongo/db/kill_sessions.h @@ -31,6 +31,7 @@ #include +#include "mongo/db/api_parameters.h" #include "mongo/db/auth/role_name.h" #include "mongo/db/auth/user_name.h" #include "mongo/db/kill_sessions_gen.h" @@ -41,8 +42,14 @@ namespace mongo { class OperationContext; class ServiceContext; -struct KillAllSessionsByPatternHash { - std::size_t operator()(const KillAllSessionsByPattern& pattern) const { +struct KillAllSessionsByPatternItem { + KillAllSessionsByPattern pattern; + APIParameters apiParameters; +}; + +struct KillAllSessionsByPatternItemHash { + std::size_t operator()(const KillAllSessionsByPatternItem& item) const { + auto& pattern = item.pattern; if (pattern.getLsid()) { return lsidHasher(*pattern.getLsid()); } else if (pattern.getUid()) { @@ -60,20 +67,22 @@ struct KillAllSessionsByPatternHash { /** * Patterns are specifically equal if they differ only by impersonate data. */ -inline bool operator==(const KillAllSessionsByPattern& lhs, const KillAllSessionsByPattern& rhs) { - auto makeEqualityLens = [](const auto& pattern) { - return std::tie(pattern.getLsid(), pattern.getUid()); +inline bool operator==(const KillAllSessionsByPatternItem& lhs, + const KillAllSessionsByPatternItem& rhs) { + auto makeEqualityLens = [](const auto& item) { + return std::tie(item.pattern.getLsid(), item.pattern.getUid(), item.apiParameters); }; return makeEqualityLens(lhs) == makeEqualityLens(rhs); } -inline bool operator!=(const KillAllSessionsByPattern& lhs, const KillAllSessionsByPattern& rhs) { +inline bool operator!=(const KillAllSessionsByPatternItem& lhs, + const KillAllSessionsByPatternItem& rhs) { return !(lhs == rhs); } using KillAllSessionsByPatternSet = - stdx::unordered_set; + stdx::unordered_set; std::tuple, std::vector> getKillAllSessionsByPatternImpersonateData( const KillAllSessionsByPattern& pattern); @@ -86,13 +95,13 @@ std::tuple, std::vector> getKillAllSessionsByPat /** * Constructs a kill sessions pattern which kills all sessions */ -KillAllSessionsByPattern makeKillAllSessionsByPattern(OperationContext* opCtx); +KillAllSessionsByPatternItem makeKillAllSessionsByPattern(OperationContext* opCtx); /** * Constructs a kill sessions pattern for a particular user */ -KillAllSessionsByPattern makeKillAllSessionsByPattern(OperationContext* opCtx, - const KillAllSessionsUser& user); +KillAllSessionsByPatternItem makeKillAllSessionsByPattern(OperationContext* opCtx, + const KillAllSessionsUser& user); /** * Constructs a KillAllSessionsByPatternSet, each element of which matches the UID of a user that is @@ -103,7 +112,7 @@ KillAllSessionsByPatternSet makeSessionFilterForAuthenticatedUsers(OperationCont /** * Constructs a kill sessions pattern for a particular logical session */ -KillAllSessionsByPattern makeKillAllSessionsByPattern(OperationContext* opCtx, - const LogicalSessionId& lsid); +KillAllSessionsByPatternItem makeKillAllSessionsByPattern(OperationContext* opCtx, + const LogicalSessionId& lsid); } // namespace mongo -- cgit v1.2.1