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

Don't allow changing placementConflictTime on the TransactionRouter

    • Type: Icon: Bug Bug
    • Resolution: Unresolved
    • Priority: Icon: Major - P3 Major - P3
    • None
    • Affects Version/s: None
    • Component/s: None
    • Labels:
    • Cluster Scalability
    • ALL
    • v8.0
    • 148
    • 5

      Currently, we allow changing the placementConflictTime on the TransactionRouter if the stmtId that the time was chosen is the same as the currentStmtId. This is because generally, we expect that we'd only retry on some retryable error on the first statement that caused us to reset the TransactionRouter state (including clearing any participants). However, if an individual statement that was the first statement in the transaction is retried without clearing the participants, we will currently still allow changing the placementConflictTime (because latestStatementId will not have been bumped), but any tracked participants would have the original value for placementConflictTime - if mongos's logical clock has been bumped between the original attempt and retry, the values will differ. We shouldn't allow changing the placementConflictTime at all, and instead should only reset the placementConflictTime on allowable retryable errors, so upon a retry we can reset the value. If a retry is ever attempted without having hit one of the allowable retryable errors, we should just use the original placementConflictTime value.

            Unassigned Unassigned
            janna.golden@mongodb.com Janna Golden
            0 Vote for this issue
            4 Start watching this issue