diff options
author | Ben Caimano <ben.caimano@10gen.com> | 2020-06-18 23:28:53 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-06-25 20:22:37 +0000 |
commit | 56f5500860e0933863ba32d8969a58c848b1b8fa (patch) | |
tree | 7a03901f6cfd40d24eb78bec47083bb19d8dda33 /src/mongo/db/commands.cpp | |
parent | 47dcbeba765b04a829be9c27289e152e24e1a855 (diff) | |
download | mongo-56f5500860e0933863ba32d8969a58c848b1b8fa.tar.gz |
SERVER-48985 Add logging for failCommand
Diffstat (limited to 'src/mongo/db/commands.cpp')
-rw-r--r-- | src/mongo/db/commands.cpp | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/src/mongo/db/commands.cpp b/src/mongo/db/commands.cpp index dd7088e9568..7ed29dd83de 100644 --- a/src/mongo/db/commands.cpp +++ b/src/mongo/db/commands.cpp @@ -542,37 +542,45 @@ bool CommandHelpers::shouldActivateFailCommandFailPoint(const BSONObj& data, if (cmd->getName() == "configureFailPoint"_sd) // Banned even if in failCommands. return false; - if (data.hasField("threadName") && - (client->desc() != - data.getStringField( - "threadName"))) { // only activate failpoint on thread from certain client + if (!client->session()) { return false; } - if (data.hasField("appName")) { - const auto& clientMetadata = ClientMetadataIsMasterState::get(client).getClientMetadata(); - if (clientMetadata && - clientMetadata.get().getApplicationName() != data.getStringField("appName")) { - return false; // only activate failpoint on connection with a certain appName - } + auto threadName = client->desc(); + auto appName = StringData(); + if (const auto& clientMetadata = ClientMetadataIsMasterState::get(client).getClientMetadata()) { + appName = clientMetadata.get().getApplicationName(); } + auto isInternalClient = client->session()->getTags() & transport::Session::kInternalClient; - if (client->session() && (client->session()->getTags() & transport::Session::kInternalClient)) { - if (!data.hasField("failInternalCommands") || !data.getBoolField("failInternalCommands")) { - return false; - } + if (data.hasField("threadName") && (threadName != data.getStringField("threadName"))) { + return false; // only activate failpoint on thread from certain client } - if (!client->session()) { + if (data.hasField("appName") && (appName != data.getStringField("appName"))) { + return false; // only activate failpoint on connection with a certain appName + } + + if (data.hasField("namespace") && (nss != NamespaceString(data.getStringField("namespace")))) { return false; } - if (data.hasField("namespace") && nss != NamespaceString(data.getStringField("namespace"))) { + if (!(data.hasField("failInternalCommands") && data.getBoolField("failInternalCommands")) && + isInternalClient) { return false; } for (auto&& failCommand : data.getObjectField("failCommands")) { if (failCommand.type() == String && cmd->hasAlias(failCommand.valueStringData())) { + LOGV2(4898500, + "Should activate 'failCommand' failpoint", + "data"_attr = data, + "threadName"_attr = threadName, + "appName"_attr = appName, + "namespace"_attr = nss, + "isInternalClient"_attr = isInternalClient, + "command"_attr = cmd->getName()); + return true; } } |