diff options
author | Ben Caimano <ben.caimano@10gen.com> | 2020-06-18 23:28:53 +0000 |
---|---|---|
committer | Ben Caimano <ben.caimano@10gen.com> | 2020-06-29 18:19:50 +0000 |
commit | da34c52b41b69ce9c0a92531c51e66c4f847aab8 (patch) | |
tree | ab55345dce3f53d8321634c3a7fda4dc293d98e7 | |
parent | fc6a12cad9b1aacb89edb1a25d81ce6005ed1077 (diff) | |
download | mongo-da34c52b41b69ce9c0a92531c51e66c4f847aab8.tar.gz |
SERVER-48985 Add logging for failCommand
-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 4e12a2eb0d0..e28df3df014 100644 --- a/src/mongo/db/commands.cpp +++ b/src/mongo/db/commands.cpp @@ -560,37 +560,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; } } |