mongo 2.14.1 → 2.15.0.alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +4 -1
  4. data/Rakefile +8 -15
  5. data/lib/mongo/auth/aws/conversation.rb +1 -4
  6. data/lib/mongo/auth/base.rb +13 -7
  7. data/lib/mongo/auth/conversation_base.rb +32 -0
  8. data/lib/mongo/auth/cr/conversation.rb +6 -29
  9. data/lib/mongo/auth/gssapi/conversation.rb +4 -15
  10. data/lib/mongo/auth/ldap/conversation.rb +3 -14
  11. data/lib/mongo/auth/sasl_conversation_base.rb +1 -13
  12. data/lib/mongo/auth/scram_conversation_base.rb +7 -34
  13. data/lib/mongo/auth/user/view.rb +16 -9
  14. data/lib/mongo/auth/x509/conversation.rb +4 -25
  15. data/lib/mongo/bulk_write.rb +21 -18
  16. data/lib/mongo/client.rb +82 -6
  17. data/lib/mongo/cluster/reapers/cursor_reaper.rb +6 -2
  18. data/lib/mongo/cluster.rb +19 -2
  19. data/lib/mongo/collection/view/aggregation.rb +1 -1
  20. data/lib/mongo/collection/view/change_stream.rb +1 -1
  21. data/lib/mongo/collection/view/iterable.rb +7 -17
  22. data/lib/mongo/collection/view/map_reduce.rb +2 -2
  23. data/lib/mongo/collection/view/readable.rb +42 -20
  24. data/lib/mongo/collection/view/writable.rb +14 -14
  25. data/lib/mongo/collection.rb +6 -6
  26. data/lib/mongo/cursor.rb +2 -12
  27. data/lib/mongo/database/view.rb +1 -1
  28. data/lib/mongo/database.rb +8 -3
  29. data/lib/mongo/error/bulk_write_error.rb +17 -3
  30. data/lib/mongo/error/internal_driver_error.rb +22 -0
  31. data/lib/mongo/error/operation_failure.rb +21 -2
  32. data/lib/mongo/error/parser.rb +65 -12
  33. data/lib/mongo/error/server_api_conflict.rb +23 -0
  34. data/lib/mongo/error/server_api_not_supported.rb +24 -0
  35. data/lib/mongo/error/unmet_dependency.rb +21 -0
  36. data/lib/mongo/error.rb +9 -1
  37. data/lib/mongo/index/view.rb +21 -11
  38. data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +27 -16
  39. data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +26 -15
  40. data/lib/mongo/monitoring.rb +13 -4
  41. data/lib/mongo/operation/collections_info/command.rb +2 -2
  42. data/lib/mongo/operation/collections_info.rb +18 -1
  43. data/lib/mongo/operation/context.rb +99 -0
  44. data/lib/mongo/operation/indexes.rb +15 -1
  45. data/lib/mongo/operation/insert/command.rb +2 -2
  46. data/lib/mongo/operation/insert/legacy.rb +2 -2
  47. data/lib/mongo/operation/insert/op_msg.rb +2 -2
  48. data/lib/mongo/operation/list_collections/result.rb +4 -1
  49. data/lib/mongo/operation/parallel_scan/command.rb +2 -1
  50. data/lib/mongo/operation/result.rb +2 -0
  51. data/lib/mongo/operation/shared/executable.rb +24 -14
  52. data/lib/mongo/operation/shared/executable_no_validate.rb +2 -2
  53. data/lib/mongo/operation/shared/op_msg_or_command.rb +1 -7
  54. data/lib/mongo/operation/shared/op_msg_or_find_command.rb +1 -7
  55. data/lib/mongo/operation/shared/polymorphic_operation.rb +39 -0
  56. data/lib/mongo/operation/shared/read_preference_supported.rb +36 -38
  57. data/lib/mongo/operation/shared/response_handling.rb +23 -23
  58. data/lib/mongo/operation/shared/sessions_supported.rb +15 -5
  59. data/lib/mongo/operation/shared/write.rb +8 -18
  60. data/lib/mongo/operation.rb +2 -2
  61. data/lib/mongo/protocol/compressed.rb +51 -5
  62. data/lib/mongo/protocol/message.rb +20 -2
  63. data/lib/mongo/protocol/msg.rb +38 -13
  64. data/lib/mongo/protocol/query.rb +11 -11
  65. data/lib/mongo/query_cache.rb +30 -0
  66. data/lib/mongo/retryable.rb +1 -1
  67. data/lib/mongo/server/app_metadata.rb +52 -18
  68. data/lib/mongo/server/connection.rb +5 -0
  69. data/lib/mongo/server/connection_base.rb +13 -10
  70. data/lib/mongo/server/connection_pool.rb +6 -2
  71. data/lib/mongo/server/description/features.rb +9 -8
  72. data/lib/mongo/server/description.rb +4 -0
  73. data/lib/mongo/server/monitor/app_metadata.rb +1 -1
  74. data/lib/mongo/server/monitor/connection.rb +9 -10
  75. data/lib/mongo/server/monitor.rb +20 -1
  76. data/lib/mongo/server/pending_connection.rb +24 -6
  77. data/lib/mongo/server/push_monitor.rb +11 -1
  78. data/lib/mongo/server.rb +7 -1
  79. data/lib/mongo/server_selector/secondary_preferred.rb +7 -2
  80. data/lib/mongo/session/session_pool.rb +4 -2
  81. data/lib/mongo/session.rb +2 -2
  82. data/lib/mongo/socket/ssl.rb +8 -0
  83. data/lib/mongo/socket.rb +29 -4
  84. data/lib/mongo/uri/options_mapper.rb +38 -0
  85. data/lib/mongo/utils.rb +15 -0
  86. data/lib/mongo/version.rb +1 -1
  87. data/lib/mongo.rb +23 -0
  88. data/spec/README.md +24 -1
  89. data/spec/integration/auth_spec.rb +25 -15
  90. data/spec/integration/bulk_write_error_message_spec.rb +41 -0
  91. data/spec/integration/change_stream_spec.rb +4 -4
  92. data/spec/integration/command_monitoring_spec.rb +2 -2
  93. data/spec/integration/connection_spec.rb +2 -0
  94. data/spec/integration/docs_examples_spec.rb +8 -1
  95. data/spec/integration/fork_reconnect_spec.rb +4 -1
  96. data/spec/integration/ocsp_verifier_spec.rb +13 -7
  97. data/spec/integration/operation_failure_code_spec.rb +1 -1
  98. data/spec/integration/operation_failure_message_spec.rb +90 -0
  99. data/spec/integration/query_cache_spec.rb +0 -45
  100. data/spec/integration/reconnect_spec.rb +1 -1
  101. data/spec/integration/snappy_compression_spec.rb +25 -0
  102. data/spec/integration/srv_monitoring_spec.rb +1 -1
  103. data/spec/integration/transactions_examples_spec.rb +6 -0
  104. data/spec/integration/zlib_compression_spec.rb +1 -1
  105. data/spec/integration/zstd_compression_spec.rb +26 -0
  106. data/spec/lite_spec_helper.rb +7 -1
  107. data/spec/mongo/address_spec.rb +15 -11
  108. data/spec/mongo/auth/ldap/conversation_spec.rb +1 -1
  109. data/spec/mongo/auth/ldap_spec.rb +5 -1
  110. data/spec/mongo/auth/scram_negotiation_spec.rb +1 -1
  111. data/spec/mongo/auth/scram_spec.rb +1 -1
  112. data/spec/mongo/auth/x509/conversation_spec.rb +3 -3
  113. data/spec/mongo/client_construction_spec.rb +207 -33
  114. data/spec/mongo/client_spec.rb +17 -0
  115. data/spec/mongo/cluster_spec.rb +1 -0
  116. data/spec/mongo/collection/view/explainable_spec.rb +1 -1
  117. data/spec/mongo/collection/view/readable_spec.rb +33 -19
  118. data/spec/mongo/collection_crud_spec.rb +4357 -0
  119. data/spec/mongo/collection_ddl_spec.rb +534 -0
  120. data/spec/mongo/collection_spec.rb +5 -4859
  121. data/spec/mongo/database_spec.rb +66 -4
  122. data/spec/mongo/error/bulk_write_error_spec.rb +3 -3
  123. data/spec/mongo/error/parser_spec.rb +37 -6
  124. data/spec/mongo/index/view_spec.rb +4 -0
  125. data/spec/mongo/monitoring/event/server_heartbeat_failed_spec.rb +1 -1
  126. data/spec/mongo/monitoring/event/server_heartbeat_succeeded_spec.rb +1 -1
  127. data/spec/mongo/operation/aggregate_spec.rb +2 -1
  128. data/spec/mongo/operation/collections_info_spec.rb +4 -1
  129. data/spec/mongo/operation/command_spec.rb +6 -3
  130. data/spec/mongo/operation/create_index_spec.rb +6 -3
  131. data/spec/mongo/operation/create_user_spec.rb +6 -3
  132. data/spec/mongo/operation/delete/bulk_spec.rb +9 -6
  133. data/spec/mongo/operation/delete_spec.rb +11 -7
  134. data/spec/mongo/operation/drop_index_spec.rb +6 -2
  135. data/spec/mongo/operation/find/legacy_spec.rb +3 -1
  136. data/spec/mongo/operation/get_more_spec.rb +3 -1
  137. data/spec/mongo/operation/indexes_spec.rb +5 -1
  138. data/spec/mongo/operation/insert/bulk_spec.rb +10 -7
  139. data/spec/mongo/operation/insert_spec.rb +15 -12
  140. data/spec/mongo/operation/map_reduce_spec.rb +5 -2
  141. data/spec/mongo/operation/read_preference_legacy_spec.rb +19 -9
  142. data/spec/mongo/operation/read_preference_op_msg_spec.rb +3 -3
  143. data/spec/mongo/operation/remove_user_spec.rb +6 -3
  144. data/spec/mongo/operation/result_spec.rb +1 -1
  145. data/spec/mongo/operation/update/bulk_spec.rb +9 -6
  146. data/spec/mongo/operation/update_spec.rb +10 -7
  147. data/spec/mongo/operation/update_user_spec.rb +4 -1
  148. data/spec/mongo/protocol/compressed_spec.rb +26 -12
  149. data/spec/mongo/query_cache_middleware_spec.rb +55 -0
  150. data/spec/mongo/retryable_spec.rb +3 -2
  151. data/spec/mongo/server/app_metadata_shared.rb +7 -33
  152. data/spec/mongo/server/app_metadata_spec.rb +2 -0
  153. data/spec/mongo/server/connection_pool/populator_spec.rb +3 -1
  154. data/spec/mongo/server/connection_pool_spec.rb +1 -1
  155. data/spec/mongo/server/connection_spec.rb +24 -17
  156. data/spec/mongo/server/monitor/connection_spec.rb +17 -7
  157. data/spec/mongo/server/monitor_spec.rb +9 -1
  158. data/spec/mongo/server_selector/secondary_preferred_spec.rb +6 -6
  159. data/spec/mongo/server_spec.rb +15 -2
  160. data/spec/mongo/socket/ssl_spec.rb +40 -0
  161. data/spec/mongo/socket_spec.rb +2 -2
  162. data/spec/mongo/tls_context_hooks_spec.rb +37 -0
  163. data/spec/runners/connection_string.rb +0 -4
  164. data/spec/runners/crud/requirement.rb +40 -3
  165. data/spec/runners/crud/verifier.rb +8 -0
  166. data/spec/runners/transactions/operation.rb +1 -1
  167. data/spec/runners/transactions/test.rb +1 -0
  168. data/spec/runners/unified/assertions.rb +249 -0
  169. data/spec/runners/unified/change_stream_operations.rb +26 -0
  170. data/spec/runners/unified/crud_operations.rb +199 -0
  171. data/spec/runners/unified/ddl_operations.rb +96 -0
  172. data/spec/runners/unified/entity_map.rb +39 -0
  173. data/spec/runners/unified/error.rb +25 -0
  174. data/spec/runners/unified/event_subscriber.rb +91 -0
  175. data/spec/runners/unified/exceptions.rb +21 -0
  176. data/spec/runners/unified/grid_fs_operations.rb +55 -0
  177. data/spec/runners/unified/support_operations.rb +250 -0
  178. data/spec/runners/unified/test.rb +393 -0
  179. data/spec/runners/unified/test_group.rb +28 -0
  180. data/spec/runners/unified/using_hash.rb +31 -0
  181. data/spec/runners/unified.rb +96 -0
  182. data/spec/shared/lib/mrss/cluster_config.rb +0 -3
  183. data/spec/shared/lib/mrss/docker_runner.rb +0 -3
  184. data/spec/shared/lib/mrss/lite_constraints.rb +0 -16
  185. data/spec/shared/lib/mrss/server_version_registry.rb +0 -3
  186. data/spec/shared/lib/mrss/spec_organizer.rb +0 -3
  187. data/spec/shared/shlib/server.sh +1 -1
  188. data/spec/spec_helper.rb +4 -1
  189. data/spec/spec_tests/crud_unified_spec.rb +10 -0
  190. data/spec/spec_tests/data/change_streams/change-streams.yml +0 -1
  191. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +267 -0
  192. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-4.9.yml +60 -0
  193. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount.yml → estimatedDocumentCount-pre4.9.yml} +2 -0
  194. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors-4.9.yml +146 -0
  195. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-serverErrors.yml → estimatedDocumentCount-serverErrors-pre4.9.yml} +2 -0
  196. data/spec/spec_tests/data/retryable_reads/listIndexNames.yml +1 -1
  197. data/spec/spec_tests/data/unified/valid-fail/operation-failure.yml +31 -0
  198. data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +220 -0
  199. data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +102 -0
  200. data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +184 -0
  201. data/spec/spec_tests/data/unified/valid-pass/poc-gridfs.yml +155 -0
  202. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-reads.yml +193 -0
  203. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +210 -0
  204. data/spec/spec_tests/data/unified/valid-pass/poc-sessions.yml +215 -0
  205. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-convenient-api.yml +235 -0
  206. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-mongos-pin-auto.yml +169 -0
  207. data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +170 -0
  208. data/spec/spec_tests/data/uri_options/compression-options.yml +1 -1
  209. data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +416 -0
  210. data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +409 -0
  211. data/spec/spec_tests/data/versioned_api/runcommand-helper-no-api-version-declared.yml +67 -0
  212. data/spec/spec_tests/data/versioned_api/test-commands-deprecation-errors.yml +47 -0
  213. data/spec/spec_tests/data/versioned_api/test-commands-strict-mode.yml +44 -0
  214. data/spec/spec_tests/data/versioned_api/transaction-handling.yml +180 -0
  215. data/spec/spec_tests/unified_spec.rb +15 -0
  216. data/spec/spec_tests/uri_options_spec.rb +16 -0
  217. data/spec/spec_tests/versioned_api_spec.rb +10 -0
  218. data/spec/support/client_registry.rb +4 -8
  219. data/spec/support/client_registry_macros.rb +4 -4
  220. data/spec/support/common_shortcuts.rb +15 -1
  221. data/spec/support/shared/session.rb +2 -2
  222. data/spec/support/spec_config.rb +42 -11
  223. data/spec/support/utils.rb +64 -3
  224. data.tar.gz.sig +0 -0
  225. metadata +1005 -915
  226. metadata.gz.sig +0 -0
  227. data/lib/mongo/operation/shared/collections_info_or_list_collections.rb +0 -58
  228. data/lib/mongo/operation/shared/op_msg_or_list_indexes_command.rb +0 -47
  229. data/spec/integration/secondary_reads_spec.rb +0 -102
  230. data/spec/support/cluster_config.rb +0 -207
@@ -0,0 +1,235 @@
1
+ description: "poc-transactions-convenient-api"
2
+
3
+ schemaVersion: "1.0"
4
+
5
+ runOnRequirements:
6
+ - minServerVersion: "4.0"
7
+ topologies: [ replicaset ]
8
+ - minServerVersion: "4.1.8"
9
+ topologies: [ sharded-replicaset ]
10
+
11
+ createEntities:
12
+ - client:
13
+ id: &client0 client0
14
+ useMultipleMongoses: true
15
+ observeEvents: [ commandStartedEvent ]
16
+ - client:
17
+ id: &client1 client1
18
+ uriOptions:
19
+ readConcernLevel: local
20
+ w: 1
21
+ useMultipleMongoses: true
22
+ observeEvents: [ commandStartedEvent ]
23
+ - database:
24
+ id: &database0 database0
25
+ client: *client0
26
+ databaseName: &databaseName transaction-tests
27
+ - database:
28
+ id: &database1 database1
29
+ client: *client1
30
+ databaseName: *databaseName
31
+ - collection:
32
+ id: &collection0 collection0
33
+ database: *database0
34
+ collectionName: &collectionName test
35
+ - collection:
36
+ id: &collection1 collection1
37
+ database: *database1
38
+ collectionName: *collectionName
39
+ - session:
40
+ id: &session0 session0
41
+ client: *client0
42
+ - session:
43
+ id: &session1 session1
44
+ client: *client1
45
+ - session:
46
+ id: &session2 session2
47
+ client: *client0
48
+ sessionOptions:
49
+ defaultTransactionOptions:
50
+ readConcern: { level: majority }
51
+ writeConcern: { w: 1 }
52
+
53
+ initialData:
54
+ - collectionName: *collectionName
55
+ databaseName: *databaseName
56
+ documents: []
57
+
58
+ tests:
59
+ - description: "withTransaction and no transaction options set"
60
+ operations:
61
+ - name: withTransaction
62
+ object: *session0
63
+ arguments:
64
+ callback:
65
+ - name: insertOne
66
+ object: *collection0
67
+ arguments:
68
+ session: *session0
69
+ document: { _id: 1 }
70
+ expectResult: { $$unsetOrMatches: { insertedId: { $$unsetOrMatches: 1 } } }
71
+ expectEvents:
72
+ - client: *client0
73
+ events:
74
+ - commandStartedEvent:
75
+ command:
76
+ insert: *collectionName
77
+ documents: [ { _id: 1 } ]
78
+ ordered: true
79
+ lsid: { $$sessionLsid: *session0 }
80
+ txnNumber: 1
81
+ startTransaction: true
82
+ autocommit: false
83
+ # omitted fields
84
+ readConcern: { $$exists: false }
85
+ writeConcern: { $$exists: false }
86
+ commandName: insert
87
+ databaseName: *databaseName
88
+ - commandStartedEvent:
89
+ command:
90
+ commitTransaction: 1
91
+ lsid: { $$sessionLsid: *session0 }
92
+ txnNumber: 1
93
+ autocommit: false
94
+ # omitted fields
95
+ readConcern: { $$exists: false }
96
+ startTransaction: { $$exists: false }
97
+ writeConcern: { $$exists: false }
98
+ commandName: commitTransaction
99
+ databaseName: admin
100
+ outcome: &outcome
101
+ - collectionName: *collectionName
102
+ databaseName: *databaseName
103
+ documents:
104
+ - { _id: 1 }
105
+
106
+ - description: "withTransaction inherits transaction options from client"
107
+ operations:
108
+ - name: withTransaction
109
+ object: *session1
110
+ arguments:
111
+ callback:
112
+ - name: insertOne
113
+ object: *collection1
114
+ arguments:
115
+ session: *session1
116
+ document: { _id: 1 }
117
+ expectResult: { $$unsetOrMatches: { insertedId: { $$unsetOrMatches: 1 } } }
118
+ expectEvents:
119
+ - client: *client1
120
+ events:
121
+ - commandStartedEvent:
122
+ command:
123
+ insert: *collectionName
124
+ documents: [ { _id: 1 } ]
125
+ ordered: true
126
+ lsid: { $$sessionLsid: *session1 }
127
+ txnNumber: 1
128
+ startTransaction: true
129
+ autocommit: false
130
+ readConcern: { level: local }
131
+ # omitted fields
132
+ writeConcern: { $$exists: false }
133
+ commandName: insert
134
+ databaseName: *databaseName
135
+ - commandStartedEvent:
136
+ command:
137
+ commitTransaction: 1
138
+ lsid: { $$sessionLsid: *session1 }
139
+ txnNumber: 1
140
+ autocommit: false
141
+ writeConcern: { w: 1 }
142
+ # omitted fields
143
+ readConcern: { $$exists: false }
144
+ startTransaction: { $$exists: false }
145
+ commandName: commitTransaction
146
+ databaseName: admin
147
+ outcome: *outcome
148
+
149
+ - description: "withTransaction inherits transaction options from defaultTransactionOptions"
150
+ operations:
151
+ - name: withTransaction
152
+ object: *session2
153
+ arguments:
154
+ callback:
155
+ - name: insertOne
156
+ object: *collection0
157
+ arguments:
158
+ session: *session2
159
+ document: { _id: 1 }
160
+ expectResult: { $$unsetOrMatches: { insertedId: { $$unsetOrMatches: 1 } } }
161
+ expectEvents:
162
+ - client: *client0
163
+ events:
164
+ - commandStartedEvent:
165
+ command:
166
+ insert: *collectionName
167
+ documents: [ { _id: 1 } ]
168
+ ordered: true
169
+ lsid: { $$sessionLsid: *session2 }
170
+ txnNumber: 1
171
+ startTransaction: true
172
+ autocommit: false
173
+ readConcern: { level: majority }
174
+ # omitted fields
175
+ writeConcern: { $$exists: false }
176
+ commandName: insert
177
+ databaseName: *databaseName
178
+ - commandStartedEvent:
179
+ command:
180
+ commitTransaction: 1
181
+ lsid: { $$sessionLsid: *session2 }
182
+ txnNumber: 1
183
+ autocommit: false
184
+ writeConcern: { w: 1 }
185
+ # omitted fields
186
+ readConcern: { $$exists: false }
187
+ startTransaction: { $$exists: false }
188
+ commandName: commitTransaction
189
+ databaseName: admin
190
+ outcome: *outcome
191
+
192
+ - description: "withTransaction explicit transaction options"
193
+ operations:
194
+ - name: withTransaction
195
+ object: *session0
196
+ arguments:
197
+ callback:
198
+ - name: insertOne
199
+ object: *collection0
200
+ arguments:
201
+ session: *session0
202
+ document: { _id: 1 }
203
+ expectResult: { $$unsetOrMatches: { insertedId: { $$unsetOrMatches: 1 } } }
204
+ readConcern: { level: majority }
205
+ writeConcern: { w: 1 }
206
+ expectEvents:
207
+ - client: *client0
208
+ events:
209
+ - commandStartedEvent:
210
+ command:
211
+ insert: *collectionName
212
+ documents: [ { _id: 1 } ]
213
+ ordered: true
214
+ lsid: { $$sessionLsid: *session0 }
215
+ txnNumber: 1
216
+ startTransaction: true
217
+ autocommit: false
218
+ readConcern: { level: majority }
219
+ # omitted fields
220
+ writeConcern: { $$exists: false }
221
+ commandName: insert
222
+ databaseName: *databaseName
223
+ - commandStartedEvent:
224
+ command:
225
+ commitTransaction: 1
226
+ lsid: { $$sessionLsid: *session0 }
227
+ txnNumber: 1
228
+ autocommit: false
229
+ writeConcern: { w: 1 }
230
+ # omitted fields
231
+ readConcern: { $$exists: false }
232
+ startTransaction: { $$exists: false }
233
+ commandName: commitTransaction
234
+ databaseName: admin
235
+ outcome: *outcome
@@ -0,0 +1,169 @@
1
+ description: "poc-transactions-mongos-pin-auto"
2
+
3
+ schemaVersion: "1.0"
4
+
5
+ runOnRequirements:
6
+ - minServerVersion: "4.1.8"
7
+ topologies: [ sharded-replicaset ]
8
+
9
+ createEntities:
10
+ - client:
11
+ id: &client0 client0
12
+ useMultipleMongoses: true
13
+ observeEvents: [ commandStartedEvent ]
14
+ - database:
15
+ id: &database0 database0
16
+ client: *client0
17
+ databaseName: &database0Name transaction-tests
18
+ - collection:
19
+ id: &collection0 collection0
20
+ database: *database0
21
+ collectionName: &collection0Name test
22
+ - session:
23
+ id: &session0 session0
24
+ client: *client0
25
+
26
+ initialData:
27
+ - collectionName: *collection0Name
28
+ databaseName: *database0Name
29
+ documents:
30
+ - { _id: 1 }
31
+ - { _id: 2 }
32
+
33
+ tests:
34
+ - description: "remain pinned after non-transient Interrupted error on insertOne"
35
+ operations:
36
+ - &startTransaction
37
+ name: startTransaction
38
+ object: *session0
39
+ - &firstInsert
40
+ name: insertOne
41
+ object: *collection0
42
+ arguments:
43
+ session: *session0
44
+ document: { _id: 3 }
45
+ expectResult: { $$unsetOrMatches: { insertedId: { $$unsetOrMatches: 3 } } }
46
+ - name: targetedFailPoint
47
+ object: testRunner
48
+ arguments:
49
+ session: *session0
50
+ failPoint:
51
+ configureFailPoint: failCommand
52
+ mode: { times: 1 }
53
+ data:
54
+ failCommands: [ insert ]
55
+ errorCode: 11601 # Interrupted
56
+ - name: insertOne
57
+ object: *collection0
58
+ arguments:
59
+ session: *session0
60
+ document: { _id: 4 }
61
+ expectError:
62
+ errorLabelsOmit: [ TransientTransactionError, UnknownTransactionCommitResult ]
63
+ errorCodeName: Interrupted
64
+ - name: assertSessionPinned
65
+ object: testRunner
66
+ arguments:
67
+ session: *session0
68
+ - name: commitTransaction
69
+ object: *session0
70
+ expectEvents:
71
+ - client: *client0
72
+ events:
73
+ - commandStartedEvent: &firstInsertEvent
74
+ command:
75
+ insert: *collection0Name
76
+ documents: [ { _id: 3 } ]
77
+ ordered: true
78
+ readConcern: { $$exists: false }
79
+ lsid: { $$sessionLsid: *session0 }
80
+ txnNumber: 1
81
+ startTransaction: true
82
+ autocommit: false
83
+ writeConcern: { $$exists: false }
84
+ commandName: insert
85
+ databaseName: *database0Name
86
+ - commandStartedEvent: &secondInsertEvent
87
+ command:
88
+ insert: *collection0Name
89
+ documents: [ { _id: 4 } ]
90
+ ordered: true
91
+ readConcern: { $$exists: false }
92
+ lsid: { $$sessionLsid: *session0 }
93
+ txnNumber: 1
94
+ startTransaction: { $$exists: false }
95
+ autocommit: false
96
+ writeConcern: { $$exists: false }
97
+ commandName: insert
98
+ databaseName: *database0Name
99
+ - commandStartedEvent:
100
+ command:
101
+ commitTransaction: 1
102
+ lsid: { $$sessionLsid: *session0 }
103
+ txnNumber: 1
104
+ startTransaction: { $$exists: false }
105
+ autocommit: false
106
+ writeConcern: { $$exists: false }
107
+ # Original test expected any value, but we can assert an object
108
+ recoveryToken: { $$type: object }
109
+ commandName: commitTransaction
110
+ databaseName: admin
111
+ outcome:
112
+ - collectionName: *collection0Name
113
+ databaseName: *database0Name
114
+ documents:
115
+ - { _id: 1 }
116
+ - { _id: 2 }
117
+ - { _id: 3 }
118
+
119
+ - description: "unpin after transient error within a transaction"
120
+ operations:
121
+ - *startTransaction
122
+ - *firstInsert
123
+ - name: targetedFailPoint
124
+ object: testRunner
125
+ arguments:
126
+ session: *session0
127
+ failPoint:
128
+ configureFailPoint: failCommand
129
+ mode: { times: 1 }
130
+ data:
131
+ failCommands: [ insert ]
132
+ closeConnection: true
133
+ - name: insertOne
134
+ object: *collection0
135
+ arguments:
136
+ session: *session0
137
+ document: { _id: 4 }
138
+ expectError:
139
+ errorLabelsContain: [ TransientTransactionError ]
140
+ errorLabelsOmit: [ UnknownTransactionCommitResult ]
141
+ - name: assertSessionUnpinned
142
+ object: testRunner
143
+ arguments:
144
+ session: *session0
145
+ - name: abortTransaction
146
+ object: *session0
147
+ expectEvents:
148
+ - client: *client0
149
+ events:
150
+ - commandStartedEvent: *firstInsertEvent
151
+ - commandStartedEvent: *secondInsertEvent
152
+ - commandStartedEvent:
153
+ command:
154
+ abortTransaction: 1
155
+ lsid: { $$sessionLsid: *session0 }
156
+ txnNumber: 1
157
+ startTransaction: { $$exists: false }
158
+ autocommit: false
159
+ writeConcern: { $$exists: false }
160
+ # Original test expected any value, but we can assert an object
161
+ recoveryToken: { $$type: object }
162
+ commandName: abortTransaction
163
+ databaseName: admin
164
+ outcome:
165
+ - collectionName: *collection0Name
166
+ databaseName: *database0Name
167
+ documents:
168
+ - { _id: 1 }
169
+ - { _id: 2 }
@@ -0,0 +1,170 @@
1
+ description: "poc-transactions"
2
+
3
+ schemaVersion: "1.0"
4
+
5
+ runOnRequirements:
6
+ - minServerVersion: "4.0"
7
+ topologies: [ replicaset ]
8
+ - minServerVersion: "4.1.8"
9
+ topologies: [ sharded-replicaset ]
10
+
11
+ createEntities:
12
+ - client:
13
+ id: &client0 client0
14
+ observeEvents: [ commandStartedEvent ]
15
+ - database:
16
+ id: &database0 database0
17
+ client: *client0
18
+ databaseName: &database0Name transaction-tests
19
+ - collection:
20
+ id: &collection0 collection0
21
+ database: *database0
22
+ collectionName: &collection0Name test
23
+ - session:
24
+ id: &session0 session0
25
+ client: *client0
26
+
27
+ initialData:
28
+ - collectionName: *collection0Name
29
+ databaseName: *database0Name
30
+ documents: []
31
+
32
+ tests:
33
+ - description: "Client side error in command starting transaction"
34
+ operations:
35
+ - name: startTransaction
36
+ object: *session0
37
+ - name: insertOne
38
+ object: *collection0
39
+ arguments:
40
+ session: *session0
41
+ document: { _id: { .: . } }
42
+ # Original test only asserted a generic error
43
+ expectError: { isClientError: true }
44
+ - name: assertSessionTransactionState
45
+ object: testRunner
46
+ arguments:
47
+ session: *session0
48
+ state: starting
49
+
50
+ - description: "explicitly create collection using create command"
51
+ runOnRequirements:
52
+ - minServerVersion: "4.3.4"
53
+ topologies: [ replicaset, sharded-replicaset ]
54
+ operations:
55
+ - name: dropCollection
56
+ object: *database0
57
+ arguments:
58
+ collection: *collection0Name
59
+ - name: startTransaction
60
+ object: *session0
61
+ - name: createCollection
62
+ object: *database0
63
+ arguments:
64
+ session: *session0
65
+ collection: *collection0Name
66
+ - name: assertCollectionNotExists
67
+ object: testRunner
68
+ arguments:
69
+ databaseName: *database0Name
70
+ collectionName: *collection0Name
71
+ - name: commitTransaction
72
+ object: *session0
73
+ - name: assertCollectionExists
74
+ object: testRunner
75
+ arguments:
76
+ databaseName: *database0Name
77
+ collectionName: *collection0Name
78
+ expectEvents:
79
+ - client: *client0
80
+ events:
81
+ - commandStartedEvent:
82
+ command:
83
+ drop: *collection0Name
84
+ writeConcern: { $$exists: false }
85
+ commandName: drop
86
+ databaseName: *database0Name
87
+ - commandStartedEvent:
88
+ command:
89
+ create: *collection0Name
90
+ lsid: { $$sessionLsid: *session0 }
91
+ txnNumber: 1
92
+ startTransaction: true
93
+ autocommit: false
94
+ writeConcern: { $$exists: false }
95
+ commandName: create
96
+ databaseName: *database0Name
97
+ - commandStartedEvent:
98
+ command:
99
+ commitTransaction: 1
100
+ lsid: { $$sessionLsid: *session0 }
101
+ txnNumber: 1
102
+ startTransaction: { $$exists: false }
103
+ autocommit: false
104
+ writeConcern: { $$exists: false }
105
+ commandName: commitTransaction
106
+ databaseName: admin
107
+
108
+ - description: "create index on a non-existing collection"
109
+ runOnRequirements:
110
+ - minServerVersion: "4.3.4"
111
+ topologies: [ replicaset, sharded-replicaset ]
112
+ operations:
113
+ - name: dropCollection
114
+ object: *database0
115
+ arguments:
116
+ collection: *collection0Name
117
+ - name: startTransaction
118
+ object: *session0
119
+ - name: createIndex
120
+ object: *collection0
121
+ arguments:
122
+ session: *session0
123
+ name: &indexName "x_1"
124
+ keys: { x: 1 }
125
+ - name: assertIndexNotExists
126
+ object: testRunner
127
+ arguments:
128
+ databaseName: *database0Name
129
+ collectionName: *collection0Name
130
+ indexName: *indexName
131
+ - name: commitTransaction
132
+ object: *session0
133
+ - name: assertIndexExists
134
+ object: testRunner
135
+ arguments:
136
+ databaseName: *database0Name
137
+ collectionName: *collection0Name
138
+ indexName: *indexName
139
+ expectEvents:
140
+ - client: *client0
141
+ events:
142
+ - commandStartedEvent:
143
+ command:
144
+ drop: *collection0Name
145
+ writeConcern: { $$exists: false }
146
+ commandName: drop
147
+ databaseName: *database0Name
148
+ - commandStartedEvent:
149
+ command:
150
+ createIndexes: *collection0Name
151
+ indexes:
152
+ - name: *indexName
153
+ key: { x: 1 }
154
+ lsid: { $$sessionLsid: *session0 }
155
+ txnNumber: 1
156
+ startTransaction: true
157
+ autocommit: false
158
+ writeConcern: { $$exists: false }
159
+ commandName: createIndexes
160
+ databaseName: *database0Name
161
+ - commandStartedEvent:
162
+ command:
163
+ commitTransaction: 1
164
+ lsid: { $$sessionLsid: *session0 }
165
+ txnNumber: 1
166
+ startTransaction: { $$exists: false }
167
+ autocommit: false
168
+ writeConcern: { $$exists: false }
169
+ commandName: commitTransaction
170
+ databaseName: admin
@@ -14,7 +14,7 @@ tests:
14
14
  description: "Multiple compressors are parsed correctly"
15
15
  uri: "mongodb://example.com/?compressors=snappy,zlib"
16
16
  valid: true
17
- warning: true
17
+ warning: false
18
18
  hosts: ~
19
19
  auth: ~
20
20
  options: