Uploaded image for project: 'Compass '
  1. Compass
  2. COMPASS-7133

Investigate changes in SERVER-78311: mongos does not report writeConcernError in presence of writeErrors for insert command

    • Type: Icon: Investigation Investigation
    • Resolution: Done
    • Priority: Icon: Minor - P4 Minor - P4
    • No version
    • Affects Version/s: None
    • Component/s: None
    • Labels:
      None
    • Not Needed

      Original Downstream Change Summary

      Previously, mongos would not return the writeConcernError field for insert/update/delete operations if there was also a writeError and the writes were ordered (unordered writes would return both the writeError and writeConcernError as long as at least one write succeeded).

      Now, writeConcernErrors are always returned (alongside any writeErrors), regardless of how many writes succeeded and their being ordered or unordered.

      Description of Linked Ticket

      mongos does not report writeConcernError in presence of writeErrors.

      This behavior is unexpected because it is different from the behavior of mongod which report both writeConcernError and writeErrors:

      shard01 [direct: primary] test> db.runCommand({"insert": "coll", "documents": [{_id: 3}], writeConcern: { w: "majority", j: true, wtimeout: 1000 }})
      Uncaught:
      MongoWriteConcernError: waiting for replication timed out
      Additional information: {
        wtimeout: true,
        writeConcern: {
          w: 'majority',
          j: true,
          wtimeout: 1000,
          provenance: 'clientSupplied'
        }
      }
      Result: {
        n: 0,
        electionId: ObjectId("7fffffff0000000000000001"),
        opTime: { ts: Timestamp({ t: 1687374618, i: 1 }), t: Long("1") },
        writeErrors: [
          {
            index: 0,
            code: 11000,
            errmsg: 'E11000 duplicate key error collection: test.coll index: _id_ dup key: { _id: 3 }',
            keyPattern: { _id: 1 },
            keyValue: { _id: 3 }
          }
        ],
        writeConcernError: {
          code: 64,
          codeName: 'WriteConcernFailed',
          errmsg: 'waiting for replication timed out',
          errInfo: {
            wtimeout: true,
            writeConcern: {
              w: 'majority',
              j: true,
              wtimeout: 1000,
              provenance: 'clientSupplied'
            }
          }
        },
        ok: 1,
        lastCommittedOpTime: Timestamp({ t: 1687371016, i: 1 }),
        '$clusterTime': {
          clusterTime: Timestamp({ t: 1687374623, i: 1 }),
          signature: {
            hash: Binary(Buffer.from("0000000000000000000000000000000000000000", "hex"), 0),
            keyId: Long("0")
          }
        },
        operationTime: Timestamp({ t: 1687374618, i: 1 })
      }
      

            Assignee:
            Unassigned Unassigned
            Reporter:
            backlog-server-pm Backlog - Core Eng Program Management Team
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: