Uploaded image for project: 'Core Server'
  1. Core Server
  2. SERVER-57772

Failpoints on mongos rewrite state change error codes in writeConcernError

    XMLWordPrintable

Details

    • Bug
    • Status: Closed
    • Major - P3
    • Resolution: Fixed
    • None
    • 5.0.6, 5.1.0-rc0
    • None
    • None
    • Fully Compatible
    • ALL
    • v5.0, v4.4, v4.2, v4.0
    • Hide

      Start a sharded cluster version 5.0.0-alpha0-856-gf4e7955.

      Using the shell, configure a failpoint on the "insert" command using an error code that represents a server state change.

      var code = 91; // ShutdownInProgress
      var cmd = {
          configureFailPoint: "failCommand",
          mode: {times: 1},
          data: {
              failCommands: ["insert"],
              writeConcernError: {code: code, errmsg: "Replication is being shut down"}
          }
      };
      db.adminCommand(cmd);
      db.runCommand({insert: "coldb.runCommand({insert: "coll", documents: [{x:1}]});
      

      Results in:

      {
              "n" : 1,
              "writeConcernError" : {
                      "code" : 6,
                      "errmsg" : "Replication is being shut down"
              },
              "ok" : 1,
              "$clusterTime" : {
                      "clusterTime" : Timestamp(1623887155, 1),
                      "signature" : {
                              "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                              "keyId" : NumberLong(0)
                      }
              },
              "operationTime" : Timestamp(1623887155, 1)
      }
      

      The error code 91 was rewritten to 6 (HostUnreachable).

      Show
      Start a sharded cluster version 5.0.0-alpha0-856-gf4e7955. Using the shell, configure a failpoint on the "insert" command using an error code that represents a server state change. var code = 91; // ShutdownInProgress var cmd = { configureFailPoint: "failCommand", mode: {times: 1}, data: { failCommands: ["insert"], writeConcernError: {code: code, errmsg: "Replication is being shut down"} } }; db.adminCommand(cmd); db.runCommand({insert: "coldb.runCommand({insert: "coll", documents: [{x:1}]}); Results in: { "n" : 1, "writeConcernError" : { "code" : 6, "errmsg" : "Replication is being shut down" }, "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1623887155, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } }, "operationTime" : Timestamp(1623887155, 1) } The error code 91 was rewritten to 6 (HostUnreachable).
    • Service Arch 2021-06-28, Service Arch 2021-07-12

    Description

      Setting a failpoint on mongos to return a writeConcernError containing a state change error code is rewritten to HostUnreachable (6). I think this is caused by the changes of SERVER-50549.

      State change errors indicate the server has changed state (e.g. 91 = ShutdownInProgress or 10107=NotWritablePrimary). Drivers document the state change errors they check for in the Server Discovery and Monitoring specification.

      Drivers expect failpoints on mongos to return the errors exactly as they are configured. This enables the test scenario of a mongos returning a state change error itself (instead of rewriting one from a backing mongod).

      The writeConcernError in particular only affects one test in the C driver, and is easy to work around. This is not blocking driver tests currently.

      Attachments

        Issue Links

          Activity

            People

              billy.donahue@mongodb.com Billy Donahue
              kevin.albertson@mongodb.com Kevin Albertson
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: