summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Caimano <ben.caimano@10gen.com>2020-06-18 23:28:53 +0000
committerBen Caimano <ben.caimano@10gen.com>2020-06-29 18:19:50 +0000
commitda34c52b41b69ce9c0a92531c51e66c4f847aab8 (patch)
treeab55345dce3f53d8321634c3a7fda4dc293d98e7
parentfc6a12cad9b1aacb89edb1a25d81ce6005ed1077 (diff)
downloadmongo-da34c52b41b69ce9c0a92531c51e66c4f847aab8.tar.gz
SERVER-48985 Add logging for failCommand
-rw-r--r--src/mongo/db/commands.cpp40
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;
}
}