description: "ReadConcernMajorityNotAvailableYet is a retryable read"

schemaVersion: "1.3"

runOnRequirements:
  - minServerVersion: "4.0"
    topologies: [single, replicaset]
  - minServerVersion: "4.1.7"
    topologies: [sharded, load-balanced]

createEntities:
  - client:
      id: &client0 client0
      # Ensure the `configureFailpoint` and `find` commands are run on the same mongos
      useMultipleMongoses: false
      observeEvents: [ commandStartedEvent ]
  - database:
      id: &database0 database0
      client: *client0
      databaseName: &database0Name "retryable-reads-tests"
  - collection:
      id: &collection0 collection0
      database: *database0
      collectionName: &collection0Name "readconcernmajoritynotavailableyet_test"

initialData:
  - collectionName: *collection0Name
    databaseName: *database0Name
    documents:
      - { _id: 1, x: 11 }
      - { _id: 2, x: 22 }
      - { _id: 3, x: 33 }

tests:
  - description: "Find succeeds on second attempt after ReadConcernMajorityNotAvailableYet"
    operations:
      - name: failPoint
        object: testRunner
        arguments:
          client: *client0
          failPoint:
            configureFailPoint: failCommand
            mode: { times: 1 }
            data:
              failCommands: [ "find" ]
              errorCode: 134 # ReadConcernMajorityNotAvailableYet
      - name: find
        arguments:
          filter: { _id: { $gt: 1 } }
        object: *collection0
        expectResult:
          - { _id: 2, x: 22 }
          - { _id: 3, x: 33 }
    expectEvents:
      - client: *client0
        events:
          - commandStartedEvent:
              command:
                find: *collection0Name
                filter: { _id: { $gt: 1 } }
              commandName: find
              databaseName: *database0Name
          - commandStartedEvent:
              command:
                find: *collection0Name
                filter: { _id: { $gt: 1 } }
              commandName: find
              databaseName: *database0Name
