File: insert-shutdown-error.yml

package info (click to toggle)
ruby-mongo 2.23.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 15,020 kB
  • sloc: ruby: 110,810; makefile: 5
file content (162 lines) | stat: -rw-r--r-- 4,644 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
---
description: insert-shutdown-error

schemaVersion: "1.10"

runOnRequirements:
    # failCommand appName requirements
  - minServerVersion: "4.4"
    serverless: forbid
    topologies: [ single, replicaset, sharded ]

createEntities:
  - client:
      id: &setupClient setupClient
      useMultipleMongoses: false

initialData: &initialData
  - collectionName: &collectionName insert-shutdown-error
    databaseName: &databaseName sdam-tests
    documents: []

tests:
  - description: Concurrent shutdown error on insert
    operations:
      - name: createEntities
        object: testRunner
        arguments:
          entities:
            - client:
                id: &client client
                useMultipleMongoses: false
                uriOptions:
                  retryWrites: false
                  heartbeatFrequencyMS: 500
                  appname: shutdownErrorInsertTest
                observeEvents:
                  - serverDescriptionChangedEvent
                  - poolClearedEvent
            - database:
                id: &database database
                client: *client
                databaseName: *databaseName
            - collection:
                id: &collection collection
                database: *database
                collectionName: *collectionName
      # Perform an operation to ensure the node is discovered.
      - name: insertOne
        object: *collection
        arguments:
          document:
            _id: 1
      # Configure the next two inserts to fail with a non-timeout shutdown
      # errors. Block the connection for 500ms to ensure both operations check
      # out connections from the same pool generation.
      - name: failPoint
        object: testRunner
        arguments:
          failPoint:
            configureFailPoint: failCommand
            mode:
              times: 2
            data:
              failCommands:
                - insert
              appName: shutdownErrorInsertTest
              errorCode: 91
              blockConnection: true
              blockTimeMS: 500
          client: *setupClient
      # Start threads.
      - name: createEntities
        object: testRunner
        arguments:
          entities:
            - thread:
                id: &thread0 thread0
            - thread:
                id: &thread1 thread1
      # Perform concurrent insert operations. Both fail with shutdown errors.
      - name: runOnThread
        object: testRunner
        arguments:
          thread: *thread0
          operation:
            name: insertOne
            object: *collection
            arguments:
              document:
                _id: 2
            expectError:
              isError: true
      - name: runOnThread
        object: testRunner
        arguments:
          thread: *thread1
          operation:
            name: insertOne
            object: *collection
            arguments:
              document:
                _id: 3
            expectError:
              isError: true
      # Stop threads.
      - name: waitForThread
        object: testRunner
        arguments:
          thread: *thread0
      - name: waitForThread
        object: testRunner
        arguments:
          thread: *thread1
      # The first shutdown error should mark the server Unknown and then clear
      # the pool.
      - name: waitForEvent
        object: testRunner
        arguments:
          client: *client
          event:
            serverDescriptionChangedEvent:
              newDescription:
                type: Unknown
          count: 1
      - name: waitForEvent
        object: testRunner
        arguments:
          client: *client
          event:
            poolClearedEvent: {}
          count: 1
      # Perform an operation to ensure the node is rediscovered.
      - name: insertOne
        object: *collection
        arguments:
          document:
            _id: 4
      # Assert the server was marked Unknown and pool was cleared exactly once.
      - name: assertEventCount
        object: testRunner
        arguments:
          client: *client
          event:
            serverDescriptionChangedEvent:
              newDescription:
                type: Unknown
          count: 1
      - name: assertEventCount
        object: testRunner
        arguments:
          client: *client
          event:
            poolClearedEvent: {}
          count: 1

    # Order of operations is non-deterministic so we cannot check events.
    outcome:
      - collectionName: *collectionName
        databaseName: *databaseName
        documents:
          - _id: 1
          - _id: 4