Remove invalid invariants from processResponseFromRemote()

XMLWordPrintableJSON

    • Type: Bug
    • Resolution: Fixed
    • Priority: Major - P3
    • 8.1.0-rc0, 8.0.4, 7.0.16
    • Affects Version/s: 8.1.0-rc0
    • Component/s: None
    • None
    • Query Execution
    • Fully Compatible
    • ALL
    • v8.0, v7.0
    • 200
    • None
    • 3
    • None
    • None
    • None
    • None
    • None
    • None

      batch_write_exec.cpp processResponseFromRemote() contains two invalid invariant calls:

          if (!staleConfigErrors.empty()) {
      1:      invariant(staleDbErrors.empty());
              ...
          }
      
          if (!staleDbErrors.empty()) {
      2:       invariant(staleConfigErrors.empty());
                ...
          }
      

      These insist that ErrorCodes::StaleConfig and ErrorCodes::StaleDbVersion cannot both occur on a single call to batchOp.noteBatchResponse(), however that method calls batch_write_op.cpp trackErrors() which has a vector of errors, and it just adds all of them that are marked for tracking to its response.

      The invariants() are thus enforcing a constraint that is not guaranteed to be true. Even if it was true at one time, changes to the error tracking on the receiving end of the call can easily be envisioned that would make it possible to occur, and the invariant calls thus change a rare but harmless event into a server crash. This kind of check introduces too tight a coupling between the caller and the internal details of the callee's implementation and thus should be removed.

            Assignee:
            Kevin Cherkauer (Inactive)
            Reporter:
            Kevin Cherkauer (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: