mongo 2.5.3 → 2.6.0

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 (394) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/LICENSE +1 -1
  5. data/README.md +3 -2
  6. data/lib/mongo.rb +2 -2
  7. data/lib/mongo/address.rb +10 -2
  8. data/lib/mongo/address/ipv4.rb +1 -1
  9. data/lib/mongo/address/ipv6.rb +26 -5
  10. data/lib/mongo/address/unix.rb +1 -1
  11. data/lib/mongo/auth.rb +10 -3
  12. data/lib/mongo/auth/cr.rb +4 -1
  13. data/lib/mongo/auth/cr/conversation.rb +4 -1
  14. data/lib/mongo/auth/ldap.rb +1 -1
  15. data/lib/mongo/auth/ldap/conversation.rb +1 -1
  16. data/lib/mongo/auth/roles.rb +1 -1
  17. data/lib/mongo/auth/scram.rb +24 -7
  18. data/lib/mongo/auth/scram/conversation.rb +52 -19
  19. data/lib/mongo/auth/stringprep.rb +114 -0
  20. data/lib/mongo/auth/stringprep/profiles/sasl.rb +73 -0
  21. data/lib/mongo/auth/stringprep/tables.rb +3232 -0
  22. data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +174 -0
  23. data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +1170 -0
  24. data/lib/mongo/auth/user.rb +14 -3
  25. data/lib/mongo/auth/user/view.rb +1 -1
  26. data/lib/mongo/auth/x509.rb +1 -1
  27. data/lib/mongo/auth/x509/conversation.rb +1 -1
  28. data/lib/mongo/bson.rb +1 -1
  29. data/lib/mongo/bulk_write.rb +8 -8
  30. data/lib/mongo/bulk_write/combineable.rb +1 -1
  31. data/lib/mongo/bulk_write/ordered_combiner.rb +1 -1
  32. data/lib/mongo/bulk_write/result.rb +1 -1
  33. data/lib/mongo/bulk_write/result_combiner.rb +4 -4
  34. data/lib/mongo/bulk_write/transformable.rb +1 -1
  35. data/lib/mongo/bulk_write/unordered_combiner.rb +1 -1
  36. data/lib/mongo/bulk_write/validatable.rb +1 -1
  37. data/lib/mongo/client.rb +115 -24
  38. data/lib/mongo/cluster.rb +17 -10
  39. data/lib/mongo/cluster/app_metadata.rb +7 -1
  40. data/lib/mongo/cluster/periodic_executor.rb +1 -1
  41. data/lib/mongo/cluster/reapers/socket_reaper.rb +1 -1
  42. data/lib/mongo/cluster/topology.rb +12 -2
  43. data/lib/mongo/cluster/topology/replica_set.rb +9 -1
  44. data/lib/mongo/cluster/topology/sharded.rb +1 -1
  45. data/lib/mongo/cluster/topology/single.rb +1 -1
  46. data/lib/mongo/cluster/topology/unknown.rb +1 -1
  47. data/lib/mongo/collection.rb +75 -19
  48. data/lib/mongo/collection/view.rb +1 -1
  49. data/lib/mongo/collection/view/aggregation.rb +1 -1
  50. data/lib/mongo/collection/view/builder.rb +1 -1
  51. data/lib/mongo/collection/view/builder/aggregation.rb +3 -3
  52. data/lib/mongo/collection/view/builder/find_command.rb +1 -1
  53. data/lib/mongo/collection/view/builder/flags.rb +1 -1
  54. data/lib/mongo/collection/view/builder/map_reduce.rb +1 -1
  55. data/lib/mongo/collection/view/builder/modifiers.rb +1 -1
  56. data/lib/mongo/collection/view/builder/op_query.rb +1 -1
  57. data/lib/mongo/collection/view/change_stream.rb +193 -17
  58. data/lib/mongo/collection/view/change_stream/retryable.rb +3 -20
  59. data/lib/mongo/collection/view/explainable.rb +1 -1
  60. data/lib/mongo/collection/view/immutable.rb +1 -1
  61. data/lib/mongo/collection/view/iterable.rb +2 -2
  62. data/lib/mongo/collection/view/map_reduce.rb +1 -1
  63. data/lib/mongo/collection/view/readable.rb +108 -29
  64. data/lib/mongo/collection/view/writable.rb +3 -3
  65. data/lib/mongo/cursor.rb +44 -4
  66. data/lib/mongo/cursor/builder.rb +1 -1
  67. data/lib/mongo/cursor/builder/get_more_command.rb +1 -1
  68. data/lib/mongo/cursor/builder/kill_cursors_command.rb +1 -1
  69. data/lib/mongo/cursor/builder/op_get_more.rb +1 -1
  70. data/lib/mongo/cursor/builder/op_kill_cursors.rb +1 -1
  71. data/lib/mongo/database.rb +46 -3
  72. data/lib/mongo/database/view.rb +11 -11
  73. data/lib/mongo/dbref.rb +1 -1
  74. data/lib/mongo/error.rb +57 -1
  75. data/lib/mongo/error/bulk_write_error.rb +2 -2
  76. data/lib/mongo/error/change_stream_resumable.rb +37 -0
  77. data/lib/mongo/error/closed_stream.rb +1 -1
  78. data/lib/mongo/error/extra_file_chunk.rb +1 -1
  79. data/lib/mongo/error/failed_stringprep_validation.rb +38 -0
  80. data/lib/mongo/error/file_not_found.rb +1 -1
  81. data/lib/mongo/error/insufficient_iteration_count.rb +38 -0
  82. data/lib/mongo/error/invalid_application_name.rb +1 -1
  83. data/lib/mongo/error/invalid_bulk_operation.rb +1 -1
  84. data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -1
  85. data/lib/mongo/error/invalid_collection_name.rb +1 -1
  86. data/lib/mongo/error/invalid_database_name.rb +1 -1
  87. data/lib/mongo/error/invalid_document.rb +1 -1
  88. data/lib/mongo/error/invalid_file.rb +1 -1
  89. data/lib/mongo/error/invalid_file_revision.rb +1 -1
  90. data/lib/mongo/error/invalid_min_pool_size.rb +1 -1
  91. data/lib/mongo/error/invalid_nonce.rb +1 -1
  92. data/lib/mongo/error/invalid_read_option.rb +35 -0
  93. data/lib/mongo/error/invalid_replacement_document.rb +1 -1
  94. data/lib/mongo/error/invalid_server_preference.rb +1 -1
  95. data/lib/mongo/error/invalid_session.rb +1 -1
  96. data/lib/mongo/error/invalid_signature.rb +1 -1
  97. data/lib/mongo/error/invalid_transaction_operation.rb +82 -0
  98. data/lib/mongo/error/invalid_txt_record.rb +1 -1
  99. data/lib/mongo/error/invalid_update_document.rb +1 -1
  100. data/lib/mongo/error/invalid_uri.rb +1 -1
  101. data/lib/mongo/error/invalid_write_concern.rb +1 -1
  102. data/lib/mongo/error/max_bson_size.rb +1 -1
  103. data/lib/mongo/error/max_message_size.rb +1 -1
  104. data/lib/mongo/error/mismatched_domain.rb +1 -1
  105. data/lib/mongo/error/missing_file_chunk.rb +1 -1
  106. data/lib/mongo/error/missing_resume_token.rb +1 -1
  107. data/lib/mongo/error/multi_index_drop.rb +1 -1
  108. data/lib/mongo/error/need_primary_server.rb +1 -1
  109. data/lib/mongo/error/no_server_available.rb +1 -1
  110. data/lib/mongo/error/no_srv_records.rb +1 -1
  111. data/lib/mongo/error/operation_failure.rb +108 -14
  112. data/lib/mongo/error/parser.rb +50 -1
  113. data/lib/mongo/error/socket_error.rb +5 -2
  114. data/lib/mongo/error/socket_timeout_error.rb +5 -2
  115. data/lib/mongo/error/unchangeable_collection_option.rb +1 -1
  116. data/lib/mongo/error/unexpected_chunk_length.rb +1 -1
  117. data/lib/mongo/error/unexpected_response.rb +1 -1
  118. data/lib/mongo/error/unknown_payload_type.rb +1 -1
  119. data/lib/mongo/error/unsupported_array_filters.rb +1 -1
  120. data/lib/mongo/error/unsupported_collation.rb +1 -1
  121. data/lib/mongo/error/unsupported_features.rb +1 -1
  122. data/lib/mongo/error/unsupported_message_type.rb +1 -1
  123. data/lib/mongo/error/write_retryable.rb +27 -0
  124. data/lib/mongo/event.rb +10 -9
  125. data/lib/mongo/event/base.rb +33 -0
  126. data/lib/mongo/event/description_changed.rb +2 -2
  127. data/lib/mongo/event/listeners.rb +1 -1
  128. data/lib/mongo/event/member_discovered.rb +4 -2
  129. data/lib/mongo/event/primary_elected.rb +2 -2
  130. data/lib/mongo/event/publisher.rb +1 -1
  131. data/lib/mongo/event/standalone_discovered.rb +2 -2
  132. data/lib/mongo/event/subscriber.rb +1 -1
  133. data/lib/mongo/grid.rb +1 -1
  134. data/lib/mongo/grid/file.rb +1 -1
  135. data/lib/mongo/grid/file/chunk.rb +3 -3
  136. data/lib/mongo/grid/file/info.rb +26 -3
  137. data/lib/mongo/grid/fs_bucket.rb +1 -1
  138. data/lib/mongo/grid/stream.rb +1 -1
  139. data/lib/mongo/grid/stream/read.rb +1 -1
  140. data/lib/mongo/grid/stream/write.rb +1 -1
  141. data/lib/mongo/index.rb +1 -1
  142. data/lib/mongo/index/view.rb +1 -1
  143. data/lib/mongo/loggable.rb +1 -1
  144. data/lib/mongo/logger.rb +1 -1
  145. data/lib/mongo/monitoring.rb +99 -62
  146. data/lib/mongo/monitoring/command_log_subscriber.rb +2 -2
  147. data/lib/mongo/monitoring/event.rb +2 -1
  148. data/lib/mongo/monitoring/event/command_failed.rb +19 -6
  149. data/lib/mongo/monitoring/event/command_started.rb +14 -3
  150. data/lib/mongo/monitoring/event/command_succeeded.rb +5 -3
  151. data/lib/mongo/monitoring/event/secure.rb +1 -1
  152. data/lib/mongo/monitoring/event/server_closed.rb +2 -2
  153. data/lib/mongo/monitoring/event/server_description_changed.rb +2 -2
  154. data/lib/mongo/monitoring/event/server_opening.rb +11 -2
  155. data/lib/mongo/monitoring/event/topology_changed.rb +13 -2
  156. data/lib/mongo/monitoring/event/topology_closed.rb +2 -2
  157. data/lib/mongo/monitoring/event/topology_opening.rb +11 -2
  158. data/lib/mongo/monitoring/publishable.rb +10 -6
  159. data/lib/mongo/monitoring/sdam_log_subscriber.rb +1 -1
  160. data/lib/mongo/monitoring/server_closed_log_subscriber.rb +1 -1
  161. data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +1 -1
  162. data/lib/mongo/monitoring/server_opening_log_subscriber.rb +1 -1
  163. data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +1 -1
  164. data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +1 -1
  165. data/lib/mongo/operation/aggregate/op_msg.rb +3 -0
  166. data/lib/mongo/operation/create/op_msg.rb +9 -0
  167. data/lib/mongo/operation/create_index/op_msg.rb +9 -0
  168. data/lib/mongo/operation/create_user/command.rb +1 -1
  169. data/lib/mongo/operation/create_user/op_msg.rb +10 -1
  170. data/lib/mongo/operation/delete/op_msg.rb +3 -0
  171. data/lib/mongo/operation/distinct/op_msg.rb +9 -0
  172. data/lib/mongo/operation/drop/op_msg.rb +9 -0
  173. data/lib/mongo/operation/drop_database/op_msg.rb +9 -0
  174. data/lib/mongo/operation/drop_index/op_msg.rb +9 -0
  175. data/lib/mongo/operation/explain/op_msg.rb +3 -0
  176. data/lib/mongo/operation/find/op_msg.rb +3 -0
  177. data/lib/mongo/operation/get_more.rb +1 -1
  178. data/lib/mongo/operation/get_more/command.rb +1 -1
  179. data/lib/mongo/operation/get_more/legacy.rb +1 -1
  180. data/lib/mongo/operation/get_more/op_msg.rb +3 -0
  181. data/lib/mongo/operation/indexes/op_msg.rb +3 -0
  182. data/lib/mongo/operation/indexes/result.rb +1 -1
  183. data/lib/mongo/operation/insert/bulk_result.rb +32 -2
  184. data/lib/mongo/operation/insert/op_msg.rb +3 -0
  185. data/lib/mongo/operation/insert/result.rb +1 -1
  186. data/lib/mongo/operation/kill_cursors/op_msg.rb +9 -0
  187. data/lib/mongo/operation/list_collections/op_msg.rb +3 -0
  188. data/lib/mongo/operation/list_collections/result.rb +5 -1
  189. data/lib/mongo/operation/map_reduce/op_msg.rb +3 -0
  190. data/lib/mongo/operation/map_reduce/result.rb +1 -1
  191. data/lib/mongo/operation/parallel_scan/op_msg.rb +3 -0
  192. data/lib/mongo/operation/remove_user/op_msg.rb +9 -0
  193. data/lib/mongo/operation/result.rb +27 -14
  194. data/lib/mongo/operation/shared/executable.rb +1 -0
  195. data/lib/mongo/operation/shared/sessions_supported.rb +78 -7
  196. data/lib/mongo/operation/shared/specifiable.rb +18 -2
  197. data/lib/mongo/operation/shared/write_concern_supported.rb +1 -1
  198. data/lib/mongo/operation/update/op_msg.rb +3 -0
  199. data/lib/mongo/operation/update_user/command.rb +1 -1
  200. data/lib/mongo/operation/update_user/op_msg.rb +10 -1
  201. data/lib/mongo/operation/users_info/op_msg.rb +3 -0
  202. data/lib/mongo/options.rb +1 -1
  203. data/lib/mongo/options/mapper.rb +1 -1
  204. data/lib/mongo/options/redacted.rb +1 -1
  205. data/lib/mongo/protocol/bit_vector.rb +1 -1
  206. data/lib/mongo/protocol/compressed.rb +1 -1
  207. data/lib/mongo/protocol/delete.rb +1 -1
  208. data/lib/mongo/protocol/get_more.rb +7 -7
  209. data/lib/mongo/protocol/insert.rb +1 -1
  210. data/lib/mongo/protocol/kill_cursors.rb +1 -1
  211. data/lib/mongo/protocol/message.rb +5 -5
  212. data/lib/mongo/protocol/msg.rb +9 -7
  213. data/lib/mongo/protocol/query.rb +1 -1
  214. data/lib/mongo/protocol/registry.rb +1 -1
  215. data/lib/mongo/protocol/reply.rb +10 -10
  216. data/lib/mongo/protocol/serializers.rb +1 -1
  217. data/lib/mongo/protocol/update.rb +1 -1
  218. data/lib/mongo/retryable.rb +22 -14
  219. data/lib/mongo/server.rb +1 -1
  220. data/lib/mongo/server/connectable.rb +1 -1
  221. data/lib/mongo/server/connection.rb +16 -4
  222. data/lib/mongo/server/connection_pool.rb +1 -1
  223. data/lib/mongo/server/connection_pool/queue.rb +1 -1
  224. data/lib/mongo/server/context.rb +1 -1
  225. data/lib/mongo/server/description.rb +14 -2
  226. data/lib/mongo/server/description/features.rb +10 -9
  227. data/lib/mongo/server/description/inspector.rb +1 -1
  228. data/lib/mongo/server/description/inspector/description_changed.rb +1 -1
  229. data/lib/mongo/server/description/inspector/member_discovered.rb +1 -1
  230. data/lib/mongo/server/description/inspector/primary_elected.rb +1 -1
  231. data/lib/mongo/server/description/inspector/standalone_discovered.rb +1 -1
  232. data/lib/mongo/server/monitor.rb +15 -3
  233. data/lib/mongo/server/monitor/connection.rb +1 -1
  234. data/lib/mongo/server_selector.rb +1 -1
  235. data/lib/mongo/server_selector/nearest.rb +1 -1
  236. data/lib/mongo/server_selector/primary.rb +1 -1
  237. data/lib/mongo/server_selector/primary_preferred.rb +1 -1
  238. data/lib/mongo/server_selector/secondary.rb +1 -1
  239. data/lib/mongo/server_selector/secondary_preferred.rb +1 -1
  240. data/lib/mongo/server_selector/selectable.rb +7 -2
  241. data/lib/mongo/session.rb +389 -12
  242. data/lib/mongo/session/server_session.rb +7 -2
  243. data/lib/mongo/session/session_pool.rb +1 -1
  244. data/lib/mongo/socket.rb +1 -1
  245. data/lib/mongo/socket/ssl.rb +1 -1
  246. data/lib/mongo/socket/tcp.rb +1 -1
  247. data/lib/mongo/socket/unix.rb +1 -1
  248. data/lib/mongo/uri.rb +6 -4
  249. data/lib/mongo/uri/srv_protocol.rb +1 -1
  250. data/lib/mongo/version.rb +2 -2
  251. data/lib/mongo/write_concern.rb +1 -1
  252. data/lib/mongo/write_concern/acknowledged.rb +1 -1
  253. data/lib/mongo/write_concern/normalizable.rb +1 -1
  254. data/lib/mongo/write_concern/unacknowledged.rb +1 -1
  255. data/mongo.gemspec +4 -1
  256. data/spec/atlas/atlas_connectivity_spec.rb +54 -0
  257. data/spec/integration/bulk_insert_spec.rb +78 -0
  258. data/spec/integration/change_stream_spec.rb +365 -0
  259. data/spec/integration/command_monitoring_spec.rb +92 -0
  260. data/spec/lite_spec_helper.rb +63 -0
  261. data/spec/mongo/address/ipv6_spec.rb +29 -1
  262. data/spec/mongo/address_spec.rb +34 -0
  263. data/spec/mongo/auth/scram/conversation_spec.rb +326 -120
  264. data/spec/mongo/auth/scram/negotiation_spec.rb +574 -0
  265. data/spec/mongo/auth/scram_spec.rb +107 -38
  266. data/spec/mongo/auth/stringprep/profiles/sasl_spec.rb +113 -0
  267. data/spec/mongo/auth/stringprep_spec.rb +188 -0
  268. data/spec/mongo/auth/user/view_spec.rb +5 -2
  269. data/spec/mongo/auth/user_spec.rb +1 -1
  270. data/spec/mongo/bulk_write/result_spec.rb +120 -0
  271. data/spec/mongo/bulk_write_spec.rb +42 -2
  272. data/spec/mongo/client_spec.rb +121 -9
  273. data/spec/mongo/cluster/app_metadata_spec.rb +14 -1
  274. data/spec/mongo/cluster/topology_spec.rb +1 -23
  275. data/spec/mongo/collection/view/change_stream_spec.rb +62 -180
  276. data/spec/mongo/collection_spec.rb +45 -12
  277. data/spec/mongo/cursor/builder/get_more_command_spec.rb +7 -7
  278. data/spec/mongo/cursor_spec.rb +2 -2
  279. data/spec/mongo/database_spec.rb +3 -3
  280. data/spec/mongo/docs_examples_spec.rb +194 -0
  281. data/spec/mongo/error/operation_failure_spec.rb +152 -0
  282. data/spec/mongo/error/parser_spec.rb +127 -0
  283. data/spec/mongo/grid/fs_bucket_spec.rb +32 -0
  284. data/spec/mongo/grid/stream/write_spec.rb +40 -1
  285. data/spec/mongo/monitoring/event/command_failed_spec.rb +30 -0
  286. data/spec/mongo/monitoring/event/command_started_spec.rb +26 -4
  287. data/spec/mongo/monitoring/event/command_succeeded_spec.rb +29 -7
  288. data/spec/mongo/monitoring_spec.rb +28 -3
  289. data/spec/mongo/protocol/get_more_spec.rb +2 -2
  290. data/spec/mongo/retryable_spec.rb +252 -34
  291. data/spec/mongo/retryable_writes_spec.rb +468 -544
  292. data/spec/mongo/server/connection_spec.rb +5 -5
  293. data/spec/mongo/server/description_spec.rb +23 -6
  294. data/spec/mongo/session/server_session_spec.rb +2 -2
  295. data/spec/mongo/session/session_pool_spec.rb +2 -2
  296. data/spec/mongo/transactions_examples_spec.rb +227 -0
  297. data/spec/mongo/transactions_spec.rb +44 -0
  298. data/spec/spec_helper.rb +135 -49
  299. data/spec/spec_tests/change_streams_spec.rb +42 -0
  300. data/spec/{mongo → spec_tests}/command_monitoring_spec.rb +8 -2
  301. data/spec/{mongo → spec_tests}/connection_string_spec.rb +1 -1
  302. data/spec/{mongo → spec_tests}/crud_spec.rb +5 -7
  303. data/spec/{mongo → spec_tests}/dns_seedlist_discovery_spec.rb +1 -1
  304. data/spec/{mongo → spec_tests}/gridfs_spec.rb +0 -0
  305. data/spec/{mongo → spec_tests}/max_staleness_spec.rb +0 -0
  306. data/spec/spec_tests/retryable_writes_spec.rb +78 -0
  307. data/spec/{mongo → spec_tests}/sdam_monitoring_spec.rb +4 -3
  308. data/spec/{mongo → spec_tests}/sdam_spec.rb +7 -7
  309. data/spec/{mongo → spec_tests}/server_selection_rtt_spec.rb +0 -0
  310. data/spec/{mongo → spec_tests}/server_selection_spec.rb +0 -0
  311. data/spec/support/authorization.rb +18 -6
  312. data/spec/support/change_streams.rb +265 -0
  313. data/spec/support/change_streams/operation.rb +62 -0
  314. data/spec/support/change_streams_tests/change-streams-errors.yml +53 -0
  315. data/spec/support/change_streams_tests/change-streams.yml +299 -0
  316. data/spec/support/command_monitoring.rb +1 -1
  317. data/spec/support/command_monitoring/bulkWrite.yml +4 -28
  318. data/spec/support/command_monitoring/command.yml +19 -0
  319. data/spec/support/command_monitoring/find.yml +17 -19
  320. data/spec/support/command_monitoring/insertMany.yml +2 -8
  321. data/spec/support/command_monitoring/unacknowledgedBulkWrite.yml +34 -0
  322. data/spec/support/connection_string.rb +1 -1
  323. data/spec/support/constraints.rb +56 -0
  324. data/spec/support/crud.rb +9 -4
  325. data/spec/support/crud/read.rb +24 -3
  326. data/spec/support/crud/write.rb +7 -2
  327. data/spec/support/crud_tests/read/count-collation.yml +12 -2
  328. data/spec/support/crud_tests/read/count.yml +43 -5
  329. data/spec/support/gridfs.rb +1 -1
  330. data/spec/support/primary_socket.rb +21 -0
  331. data/spec/support/retryable_writes_tests/bulkWrite-serverErrors.yml +90 -0
  332. data/spec/support/retryable_writes_tests/bulkWrite.yml +99 -1
  333. data/spec/support/retryable_writes_tests/deleteOne-serverErrors.yml +50 -0
  334. data/spec/support/retryable_writes_tests/deleteOne.yml +10 -1
  335. data/spec/support/retryable_writes_tests/findOneAndDelete-serverErrors.yml +50 -0
  336. data/spec/support/retryable_writes_tests/findOneAndDelete.yml +39 -30
  337. data/spec/support/retryable_writes_tests/findOneAndReplace-serverErrors.yml +54 -0
  338. data/spec/support/retryable_writes_tests/findOneAndReplace.yml +9 -0
  339. data/spec/support/retryable_writes_tests/findOneAndUpdate-serverErrors.yml +54 -0
  340. data/spec/support/retryable_writes_tests/findOneAndUpdate.yml +9 -0
  341. data/spec/support/retryable_writes_tests/insertMany-serverErrors.yml +59 -0
  342. data/spec/support/retryable_writes_tests/insertMany.yml +11 -6
  343. data/spec/support/retryable_writes_tests/insertOne-serverErrors.yml +471 -0
  344. data/spec/support/retryable_writes_tests/insertOne.yml +9 -0
  345. data/spec/support/retryable_writes_tests/replaceOne-serverErrors.yml +58 -0
  346. data/spec/support/retryable_writes_tests/replaceOne.yml +9 -0
  347. data/spec/support/retryable_writes_tests/updateOne-serverErrors.yml +58 -0
  348. data/spec/support/retryable_writes_tests/updateOne.yml +71 -53
  349. data/spec/support/sdam/rs/normalize_case_me.yml +100 -0
  350. data/spec/support/sdam/sharded/compatible.yml +38 -0
  351. data/spec/support/sdam/sharded/mongos_disconnect.yml +9 -3
  352. data/spec/support/sdam/sharded/multiple_mongoses.yml +6 -2
  353. data/spec/support/sdam/sharded/non_mongos_removed.yml +6 -2
  354. data/spec/support/sdam/sharded/too_new.yml +36 -0
  355. data/spec/support/sdam/sharded/too_old.yml +36 -0
  356. data/spec/support/sdam/single/compatible.yml +26 -0
  357. data/spec/support/sdam/single/direct_connection_external_ip.yml +3 -1
  358. data/spec/support/sdam/single/direct_connection_mongos.yml +3 -1
  359. data/spec/support/sdam/single/direct_connection_rsarbiter.yml +3 -1
  360. data/spec/support/sdam/single/direct_connection_rsprimary.yml +3 -1
  361. data/spec/support/sdam/single/direct_connection_rssecondary.yml +3 -1
  362. data/spec/support/sdam/single/direct_connection_slave.yml +3 -1
  363. data/spec/support/sdam/single/direct_connection_standalone.yml +3 -1
  364. data/spec/support/sdam/single/not_ok_response.yml +6 -2
  365. data/spec/support/sdam/single/standalone_removed.yml +3 -1
  366. data/spec/support/sdam/single/too_new.yml +26 -0
  367. data/spec/support/sdam/single/too_old.yml +24 -0
  368. data/spec/support/shared/session.rb +107 -0
  369. data/spec/support/transactions.rb +391 -0
  370. data/spec/support/transactions/operation.rb +373 -0
  371. data/spec/support/transactions_tests/abort.yml +403 -0
  372. data/spec/support/transactions_tests/bulk.yml +267 -0
  373. data/spec/support/transactions_tests/causal-consistency.yml +173 -0
  374. data/spec/support/transactions_tests/commit.yml +593 -0
  375. data/spec/support/transactions_tests/delete.yml +184 -0
  376. data/spec/support/transactions_tests/error-labels.yml +948 -0
  377. data/spec/support/transactions_tests/errors.yml +125 -0
  378. data/spec/support/transactions_tests/findOneAndDelete.yml +126 -0
  379. data/spec/support/transactions_tests/findOneAndReplace.yml +140 -0
  380. data/spec/support/transactions_tests/findOneAndUpdate.yml +228 -0
  381. data/spec/support/transactions_tests/insert.yml +264 -0
  382. data/spec/support/transactions_tests/isolation.yml +125 -0
  383. data/spec/support/transactions_tests/read-pref.yml +340 -0
  384. data/spec/support/transactions_tests/reads.yml +298 -0
  385. data/spec/support/transactions_tests/retryable-abort.yml +1292 -0
  386. data/spec/support/transactions_tests/retryable-commit.yml +1332 -0
  387. data/spec/support/transactions_tests/retryable-writes.yml +208 -0
  388. data/spec/support/transactions_tests/run-command.yml +189 -0
  389. data/spec/support/transactions_tests/transaction-options.yml +877 -0
  390. data/spec/support/transactions_tests/update.yml +246 -0
  391. data/spec/support/transactions_tests/write-concern.yml +236 -0
  392. metadata +494 -359
  393. metadata.gz.sig +0 -0
  394. data/lib/csasl/csasl.bundle +0 -0
@@ -0,0 +1,298 @@
1
+ database_name: &database_name "ruby-driver"
2
+ collection_name: &collection_name "transactions-tests"
3
+
4
+ data: &data
5
+ - {_id: 1}
6
+ - {_id: 2}
7
+ - {_id: 3}
8
+ - {_id: 4}
9
+
10
+ tests:
11
+ - description: collection readConcern without transaction
12
+
13
+ operations:
14
+ - name: find
15
+ object: collection
16
+ collectionOptions:
17
+ readConcern:
18
+ level: majority
19
+ arguments:
20
+ session: session0
21
+ result: *data
22
+
23
+ expectations:
24
+ - command_started_event:
25
+ command:
26
+ find: *collection_name
27
+ readConcern:
28
+ level: majority
29
+ lsid: session0
30
+ txnNumber:
31
+ startTransaction:
32
+ autocommit:
33
+ command_name: find
34
+ database_name: *database_name
35
+
36
+ outcome: &outcome
37
+ collection:
38
+ data:
39
+ *data
40
+
41
+ - description: count
42
+
43
+ operations:
44
+ - &startTransaction
45
+ name: startTransaction
46
+ object: session0
47
+ - name: count
48
+ object: collection
49
+ arguments:
50
+ session: session0
51
+ filter:
52
+ _id: 1
53
+ result:
54
+ errorContains: "Cannot run 'count' in a multi-document transaction"
55
+ errorLabelsOmit: ["TransientTransactionError", "UnknownTransactionCommitResult"]
56
+ - name: abortTransaction
57
+ object: session0
58
+
59
+ expectations:
60
+ - command_started_event:
61
+ command:
62
+ count: *collection_name
63
+ query:
64
+ _id: 1
65
+ readConcern:
66
+ lsid: session0
67
+ txnNumber:
68
+ $numberLong: "1"
69
+ startTransaction: true
70
+ autocommit: false
71
+ writeConcern:
72
+ command_name: count
73
+ database_name: *database_name
74
+ - command_started_event:
75
+ command:
76
+ abortTransaction: 1
77
+ lsid: session0
78
+ txnNumber:
79
+ $numberLong: "1"
80
+ startTransaction:
81
+ autocommit: false
82
+ writeConcern:
83
+ command_name: abortTransaction
84
+ database_name: admin
85
+
86
+ outcome: *outcome
87
+
88
+ - description: find
89
+
90
+ operations:
91
+ - *startTransaction
92
+ - &find
93
+ name: find
94
+ object: collection
95
+ arguments:
96
+ session: session0
97
+ batchSize: 3
98
+ result: *data
99
+ - *find
100
+ - &commitTransaction
101
+ name: commitTransaction
102
+ object: session0
103
+
104
+ expectations:
105
+ - command_started_event:
106
+ command:
107
+ find: *collection_name
108
+ batchSize: 3
109
+ readConcern:
110
+ lsid: session0
111
+ txnNumber:
112
+ $numberLong: "1"
113
+ startTransaction: true
114
+ autocommit: false
115
+ command_name: find
116
+ database_name: *database_name
117
+ - command_started_event:
118
+ command:
119
+ getMore:
120
+ # 42 is a fake placeholder value for the cursorId.
121
+ $numberLong: '42'
122
+ collection: *collection_name
123
+ batchSize: 3
124
+ lsid: session0
125
+ txnNumber:
126
+ $numberLong: "1"
127
+ startTransaction:
128
+ autocommit: false
129
+ command_name: getMore
130
+ database_name: *database_name
131
+ - command_started_event:
132
+ command:
133
+ find: *collection_name
134
+ batchSize: 3
135
+ lsid: session0
136
+ txnNumber:
137
+ $numberLong: "1"
138
+ startTransaction:
139
+ autocommit: false
140
+ command_name: find
141
+ database_name: *database_name
142
+ - command_started_event:
143
+ command:
144
+ getMore:
145
+ $numberLong: '42'
146
+ collection: *collection_name
147
+ batchSize: 3
148
+ lsid: session0
149
+ txnNumber:
150
+ $numberLong: "1"
151
+ startTransaction:
152
+ autocommit: false
153
+ command_name: getMore
154
+ database_name: *database_name
155
+ - command_started_event:
156
+ command:
157
+ commitTransaction: 1
158
+ lsid: session0
159
+ txnNumber:
160
+ $numberLong: "1"
161
+ startTransaction:
162
+ autocommit: false
163
+ writeConcern:
164
+ command_name: commitTransaction
165
+ database_name: admin
166
+
167
+ outcome: *outcome
168
+
169
+ - description: aggregate
170
+
171
+ operations:
172
+ - *startTransaction
173
+ - &aggregate
174
+ name: aggregate
175
+ object: collection
176
+ arguments:
177
+ pipeline:
178
+ - $project:
179
+ _id: 1
180
+ batchSize: 3
181
+ session: session0
182
+ result: *data
183
+ - *aggregate
184
+ - *commitTransaction
185
+
186
+ expectations:
187
+ - command_started_event:
188
+ command:
189
+ aggregate: *collection_name
190
+ pipeline:
191
+ - $project:
192
+ _id: 1
193
+ cursor:
194
+ batchSize: 3
195
+ readConcern:
196
+ lsid: session0
197
+ txnNumber:
198
+ $numberLong: "1"
199
+ startTransaction: true
200
+ autocommit: false
201
+ command_name: aggregate
202
+ database_name: *database_name
203
+ - command_started_event:
204
+ command:
205
+ getMore:
206
+ # 42 is a fake placeholder value for the cursorId.
207
+ $numberLong: '42'
208
+ collection: *collection_name
209
+ batchSize: 3
210
+ lsid: session0
211
+ txnNumber:
212
+ $numberLong: "1"
213
+ startTransaction:
214
+ autocommit: false
215
+ command_name: getMore
216
+ database_name: *database_name
217
+ - command_started_event:
218
+ command:
219
+ aggregate: *collection_name
220
+ pipeline:
221
+ - $project:
222
+ _id: 1
223
+ cursor:
224
+ batchSize: 3
225
+ lsid: session0
226
+ txnNumber:
227
+ $numberLong: "1"
228
+ startTransaction:
229
+ autocommit: false
230
+ command_name: aggregate
231
+ database_name: *database_name
232
+ - command_started_event:
233
+ command:
234
+ getMore:
235
+ $numberLong: '42'
236
+ collection: *collection_name
237
+ batchSize: 3
238
+ lsid: session0
239
+ txnNumber:
240
+ $numberLong: "1"
241
+ startTransaction:
242
+ autocommit: false
243
+ command_name: getMore
244
+ database_name: *database_name
245
+ - command_started_event:
246
+ command:
247
+ commitTransaction: 1
248
+ lsid: session0
249
+ txnNumber:
250
+ $numberLong: "1"
251
+ startTransaction:
252
+ autocommit: false
253
+ writeConcern:
254
+ command_name: commitTransaction
255
+ database_name: admin
256
+
257
+ outcome: *outcome
258
+
259
+ - description: distinct
260
+
261
+ operations:
262
+ - *startTransaction
263
+ - name: distinct
264
+ object: collection
265
+ arguments:
266
+ session: session0
267
+ fieldName: _id
268
+ result: [1, 2, 3, 4]
269
+ - *commitTransaction
270
+
271
+ expectations:
272
+ - command_started_event:
273
+ command:
274
+ distinct: *collection_name
275
+ key: _id
276
+ lsid: session0
277
+ readConcern:
278
+ txnNumber:
279
+ $numberLong: "1"
280
+ startTransaction: true
281
+ autocommit: false
282
+ writeConcern:
283
+ command_name: distinct
284
+ database_name: *database_name
285
+ - command_started_event:
286
+ command:
287
+ commitTransaction: 1
288
+ lsid: session0
289
+ readConcern:
290
+ txnNumber:
291
+ $numberLong: "1"
292
+ startTransaction:
293
+ autocommit: false
294
+ writeConcern:
295
+ command_name: commitTransaction
296
+ database_name: admin
297
+
298
+ outcome: *outcome
@@ -0,0 +1,1292 @@
1
+ database_name: &database_name "ruby-driver"
2
+ collection_name: &collection_name "transactions-tests"
3
+
4
+ data: []
5
+
6
+ tests:
7
+ - description: abortTransaction only performs a single retry
8
+
9
+ clientOptions:
10
+ retryWrites: false
11
+
12
+ failPoint:
13
+ configureFailPoint: failCommand
14
+ mode: { times: 2 }
15
+ data:
16
+ failCommands: ["abortTransaction"]
17
+ closeConnection: true
18
+
19
+ operations:
20
+ - name: startTransaction
21
+ object: session0
22
+ - name: insertOne
23
+ object: collection
24
+ arguments:
25
+ session: session0
26
+ document:
27
+ _id: 1
28
+ result:
29
+ insertedId: 1
30
+ # Call to abort returns no error even when the retry attempt fails.
31
+ - name: abortTransaction
32
+ object: session0
33
+
34
+ expectations:
35
+ - command_started_event:
36
+ command:
37
+ insert: *collection_name
38
+ documents:
39
+ - _id: 1
40
+ ordered: true
41
+ readConcern:
42
+ lsid: session0
43
+ txnNumber:
44
+ $numberLong: "1"
45
+ startTransaction: true
46
+ autocommit: false
47
+ writeConcern:
48
+ command_name: insert
49
+ database_name: *database_name
50
+ - command_started_event:
51
+ command:
52
+ abortTransaction: 1
53
+ lsid: session0
54
+ txnNumber:
55
+ $numberLong: "1"
56
+ startTransaction:
57
+ autocommit: false
58
+ writeConcern:
59
+ command_name: abortTransaction
60
+ database_name: admin
61
+ - command_started_event:
62
+ command:
63
+ abortTransaction: 1
64
+ lsid: session0
65
+ txnNumber:
66
+ $numberLong: "1"
67
+ startTransaction:
68
+ autocommit: false
69
+ writeConcern:
70
+ command_name: abortTransaction
71
+ database_name: admin
72
+
73
+ outcome:
74
+ collection:
75
+ data: []
76
+
77
+ - description: abortTransaction does not retry after Interrupted
78
+
79
+ failPoint:
80
+ configureFailPoint: failCommand
81
+ mode: { times: 1 }
82
+ data:
83
+ failCommands: ["abortTransaction"]
84
+ errorCode: 11601
85
+ closeConnection: false
86
+
87
+ operations:
88
+ - name: startTransaction
89
+ object: session0
90
+ - name: insertOne
91
+ object: collection
92
+ arguments:
93
+ session: session0
94
+ document:
95
+ _id: 1
96
+ result:
97
+ insertedId: 1
98
+ - name: abortTransaction
99
+ object: session0
100
+
101
+ expectations:
102
+ - command_started_event:
103
+ command:
104
+ insert: *collection_name
105
+ documents:
106
+ - _id: 1
107
+ ordered: true
108
+ readConcern:
109
+ lsid: session0
110
+ txnNumber:
111
+ $numberLong: "1"
112
+ startTransaction: true
113
+ autocommit: false
114
+ writeConcern:
115
+ command_name: insert
116
+ database_name: *database_name
117
+ - command_started_event:
118
+ command:
119
+ abortTransaction: 1
120
+ lsid: session0
121
+ txnNumber:
122
+ $numberLong: "1"
123
+ startTransaction:
124
+ autocommit: false
125
+ writeConcern:
126
+ command_name: abortTransaction
127
+ database_name: admin
128
+
129
+ outcome:
130
+ collection:
131
+ data: []
132
+
133
+ - description: abortTransaction does not retry after WriteConcernError Interrupted
134
+
135
+ failPoint:
136
+ configureFailPoint: failCommand
137
+ mode: { times: 1 }
138
+ data:
139
+ failCommands: ["abortTransaction"]
140
+ writeConcernError:
141
+ code: 11601
142
+ errmsg: operation was interrupted
143
+
144
+ operations:
145
+ - name: startTransaction
146
+ object: session0
147
+ arguments:
148
+ options:
149
+ writeConcern:
150
+ w: majority
151
+ - name: insertOne
152
+ object: collection
153
+ arguments:
154
+ session: session0
155
+ document:
156
+ _id: 1
157
+ result:
158
+ insertedId: 1
159
+ - name: abortTransaction
160
+ object: session0
161
+
162
+ expectations:
163
+ - command_started_event:
164
+ command:
165
+ insert: *collection_name
166
+ documents:
167
+ - _id: 1
168
+ ordered: true
169
+ readConcern:
170
+ lsid: session0
171
+ txnNumber:
172
+ $numberLong: "1"
173
+ startTransaction: true
174
+ autocommit: false
175
+ writeConcern:
176
+ command_name: insert
177
+ database_name: *database_name
178
+ - command_started_event:
179
+ command:
180
+ abortTransaction: 1
181
+ lsid: session0
182
+ txnNumber:
183
+ $numberLong: "1"
184
+ startTransaction:
185
+ autocommit: false
186
+ writeConcern:
187
+ w: majority
188
+ command_name: abortTransaction
189
+ database_name: admin
190
+
191
+ outcome:
192
+ collection:
193
+ data: []
194
+
195
+ - description: abortTransaction succeeds after connection error
196
+
197
+ failPoint:
198
+ configureFailPoint: failCommand
199
+ mode: { times: 1 }
200
+ data:
201
+ failCommands: ["abortTransaction"]
202
+ closeConnection: true
203
+
204
+ operations:
205
+ - name: startTransaction
206
+ object: session0
207
+ - name: insertOne
208
+ object: collection
209
+ arguments:
210
+ session: session0
211
+ document:
212
+ _id: 1
213
+ result:
214
+ insertedId: 1
215
+ - name: abortTransaction
216
+ object: session0
217
+
218
+ expectations:
219
+ - command_started_event:
220
+ command:
221
+ insert: *collection_name
222
+ documents:
223
+ - _id: 1
224
+ ordered: true
225
+ readConcern:
226
+ lsid: session0
227
+ txnNumber:
228
+ $numberLong: "1"
229
+ startTransaction: true
230
+ autocommit: false
231
+ writeConcern:
232
+ command_name: insert
233
+ database_name: *database_name
234
+ - command_started_event:
235
+ command:
236
+ abortTransaction: 1
237
+ lsid: session0
238
+ txnNumber:
239
+ $numberLong: "1"
240
+ startTransaction:
241
+ autocommit: false
242
+ writeConcern:
243
+ command_name: abortTransaction
244
+ database_name: admin
245
+ - command_started_event:
246
+ command:
247
+ abortTransaction: 1
248
+ lsid: session0
249
+ txnNumber:
250
+ $numberLong: "1"
251
+ startTransaction:
252
+ autocommit: false
253
+ writeConcern:
254
+ command_name: abortTransaction
255
+ database_name: admin
256
+
257
+ outcome:
258
+ collection:
259
+ data: []
260
+
261
+ - description: abortTransaction succeeds after NotMaster
262
+
263
+ failPoint:
264
+ configureFailPoint: failCommand
265
+ mode: { times: 1 }
266
+ data:
267
+ failCommands: ["abortTransaction"]
268
+ errorCode: 10107
269
+ closeConnection: false
270
+
271
+ operations:
272
+ - name: startTransaction
273
+ object: session0
274
+ - name: insertOne
275
+ object: collection
276
+ arguments:
277
+ session: session0
278
+ document:
279
+ _id: 1
280
+ result:
281
+ insertedId: 1
282
+ - name: abortTransaction
283
+ object: session0
284
+
285
+ expectations:
286
+ - command_started_event:
287
+ command:
288
+ insert: *collection_name
289
+ documents:
290
+ - _id: 1
291
+ ordered: true
292
+ readConcern:
293
+ lsid: session0
294
+ txnNumber:
295
+ $numberLong: "1"
296
+ startTransaction: true
297
+ autocommit: false
298
+ writeConcern:
299
+ command_name: insert
300
+ database_name: *database_name
301
+ - command_started_event:
302
+ command:
303
+ abortTransaction: 1
304
+ lsid: session0
305
+ txnNumber:
306
+ $numberLong: "1"
307
+ startTransaction:
308
+ autocommit: false
309
+ writeConcern:
310
+ command_name: abortTransaction
311
+ database_name: admin
312
+ - command_started_event:
313
+ command:
314
+ abortTransaction: 1
315
+ lsid: session0
316
+ txnNumber:
317
+ $numberLong: "1"
318
+ startTransaction:
319
+ autocommit: false
320
+ writeConcern:
321
+ command_name: abortTransaction
322
+ database_name: admin
323
+
324
+ outcome:
325
+ collection:
326
+ data: []
327
+
328
+ - description: abortTransaction succeeds after NotMasterOrSecondary
329
+
330
+ failPoint:
331
+ configureFailPoint: failCommand
332
+ mode: { times: 1 }
333
+ data:
334
+ failCommands: ["abortTransaction"]
335
+ errorCode: 13436
336
+ closeConnection: false
337
+
338
+ operations:
339
+ - name: startTransaction
340
+ object: session0
341
+ - name: insertOne
342
+ object: collection
343
+ arguments:
344
+ session: session0
345
+ document:
346
+ _id: 1
347
+ result:
348
+ insertedId: 1
349
+ - name: abortTransaction
350
+ object: session0
351
+
352
+ expectations:
353
+ - command_started_event:
354
+ command:
355
+ insert: *collection_name
356
+ documents:
357
+ - _id: 1
358
+ ordered: true
359
+ readConcern:
360
+ lsid: session0
361
+ txnNumber:
362
+ $numberLong: "1"
363
+ startTransaction: true
364
+ autocommit: false
365
+ writeConcern:
366
+ command_name: insert
367
+ database_name: *database_name
368
+ - command_started_event:
369
+ command:
370
+ abortTransaction: 1
371
+ lsid: session0
372
+ txnNumber:
373
+ $numberLong: "1"
374
+ startTransaction:
375
+ autocommit: false
376
+ writeConcern:
377
+ command_name: abortTransaction
378
+ database_name: admin
379
+ - command_started_event:
380
+ command:
381
+ abortTransaction: 1
382
+ lsid: session0
383
+ txnNumber:
384
+ $numberLong: "1"
385
+ startTransaction:
386
+ autocommit: false
387
+ writeConcern:
388
+ command_name: abortTransaction
389
+ database_name: admin
390
+
391
+ outcome:
392
+ collection:
393
+ data: []
394
+
395
+ - description: abortTransaction succeeds after NotMasterNoSlaveOk
396
+
397
+ failPoint:
398
+ configureFailPoint: failCommand
399
+ mode: { times: 1 }
400
+ data:
401
+ failCommands: ["abortTransaction"]
402
+ errorCode: 13435
403
+ closeConnection: false
404
+
405
+ operations:
406
+ - name: startTransaction
407
+ object: session0
408
+ - name: insertOne
409
+ object: collection
410
+ arguments:
411
+ session: session0
412
+ document:
413
+ _id: 1
414
+ result:
415
+ insertedId: 1
416
+ - name: abortTransaction
417
+ object: session0
418
+
419
+ expectations:
420
+ - command_started_event:
421
+ command:
422
+ insert: *collection_name
423
+ documents:
424
+ - _id: 1
425
+ ordered: true
426
+ readConcern:
427
+ lsid: session0
428
+ txnNumber:
429
+ $numberLong: "1"
430
+ startTransaction: true
431
+ autocommit: false
432
+ writeConcern:
433
+ command_name: insert
434
+ database_name: *database_name
435
+ - command_started_event:
436
+ command:
437
+ abortTransaction: 1
438
+ lsid: session0
439
+ txnNumber:
440
+ $numberLong: "1"
441
+ startTransaction:
442
+ autocommit: false
443
+ writeConcern:
444
+ command_name: abortTransaction
445
+ database_name: admin
446
+ - command_started_event:
447
+ command:
448
+ abortTransaction: 1
449
+ lsid: session0
450
+ txnNumber:
451
+ $numberLong: "1"
452
+ startTransaction:
453
+ autocommit: false
454
+ writeConcern:
455
+ command_name: abortTransaction
456
+ database_name: admin
457
+
458
+ outcome:
459
+ collection:
460
+ data: []
461
+
462
+ - description: abortTransaction succeeds after InterruptedDueToReplStateChange
463
+
464
+ failPoint:
465
+ configureFailPoint: failCommand
466
+ mode: { times: 1 }
467
+ data:
468
+ failCommands: ["abortTransaction"]
469
+ errorCode: 11602
470
+ closeConnection: false
471
+
472
+ operations:
473
+ - name: startTransaction
474
+ object: session0
475
+ - name: insertOne
476
+ object: collection
477
+ arguments:
478
+ session: session0
479
+ document:
480
+ _id: 1
481
+ result:
482
+ insertedId: 1
483
+ - name: abortTransaction
484
+ object: session0
485
+
486
+ expectations:
487
+ - command_started_event:
488
+ command:
489
+ insert: *collection_name
490
+ documents:
491
+ - _id: 1
492
+ ordered: true
493
+ readConcern:
494
+ lsid: session0
495
+ txnNumber:
496
+ $numberLong: "1"
497
+ startTransaction: true
498
+ autocommit: false
499
+ writeConcern:
500
+ command_name: insert
501
+ database_name: *database_name
502
+ - command_started_event:
503
+ command:
504
+ abortTransaction: 1
505
+ lsid: session0
506
+ txnNumber:
507
+ $numberLong: "1"
508
+ startTransaction:
509
+ autocommit: false
510
+ writeConcern:
511
+ command_name: abortTransaction
512
+ database_name: admin
513
+ - command_started_event:
514
+ command:
515
+ abortTransaction: 1
516
+ lsid: session0
517
+ txnNumber:
518
+ $numberLong: "1"
519
+ startTransaction:
520
+ autocommit: false
521
+ writeConcern:
522
+ command_name: abortTransaction
523
+ database_name: admin
524
+
525
+ outcome:
526
+ collection:
527
+ data: []
528
+
529
+ - description: abortTransaction succeeds after InterruptedAtShutdown
530
+
531
+ failPoint:
532
+ configureFailPoint: failCommand
533
+ mode: { times: 1 }
534
+ data:
535
+ failCommands: ["abortTransaction"]
536
+ errorCode: 11600
537
+ closeConnection: false
538
+
539
+ operations:
540
+ - name: startTransaction
541
+ object: session0
542
+ - name: insertOne
543
+ object: collection
544
+ arguments:
545
+ session: session0
546
+ document:
547
+ _id: 1
548
+ result:
549
+ insertedId: 1
550
+ - name: abortTransaction
551
+ object: session0
552
+
553
+ expectations:
554
+ - command_started_event:
555
+ command:
556
+ insert: *collection_name
557
+ documents:
558
+ - _id: 1
559
+ ordered: true
560
+ readConcern:
561
+ lsid: session0
562
+ txnNumber:
563
+ $numberLong: "1"
564
+ startTransaction: true
565
+ autocommit: false
566
+ writeConcern:
567
+ command_name: insert
568
+ database_name: *database_name
569
+ - command_started_event:
570
+ command:
571
+ abortTransaction: 1
572
+ lsid: session0
573
+ txnNumber:
574
+ $numberLong: "1"
575
+ startTransaction:
576
+ autocommit: false
577
+ writeConcern:
578
+ command_name: abortTransaction
579
+ database_name: admin
580
+ - command_started_event:
581
+ command:
582
+ abortTransaction: 1
583
+ lsid: session0
584
+ txnNumber:
585
+ $numberLong: "1"
586
+ startTransaction:
587
+ autocommit: false
588
+ writeConcern:
589
+ command_name: abortTransaction
590
+ database_name: admin
591
+
592
+ outcome:
593
+ collection:
594
+ data: []
595
+
596
+ - description: abortTransaction succeeds after PrimarySteppedDown
597
+
598
+ failPoint:
599
+ configureFailPoint: failCommand
600
+ mode: { times: 1 }
601
+ data:
602
+ failCommands: ["abortTransaction"]
603
+ errorCode: 189
604
+ closeConnection: false
605
+
606
+ operations:
607
+ - name: startTransaction
608
+ object: session0
609
+ - name: insertOne
610
+ object: collection
611
+ arguments:
612
+ session: session0
613
+ document:
614
+ _id: 1
615
+ result:
616
+ insertedId: 1
617
+ - name: abortTransaction
618
+ object: session0
619
+
620
+ expectations:
621
+ - command_started_event:
622
+ command:
623
+ insert: *collection_name
624
+ documents:
625
+ - _id: 1
626
+ ordered: true
627
+ readConcern:
628
+ lsid: session0
629
+ txnNumber:
630
+ $numberLong: "1"
631
+ startTransaction: true
632
+ autocommit: false
633
+ writeConcern:
634
+ command_name: insert
635
+ database_name: *database_name
636
+ - command_started_event:
637
+ command:
638
+ abortTransaction: 1
639
+ lsid: session0
640
+ txnNumber:
641
+ $numberLong: "1"
642
+ startTransaction:
643
+ autocommit: false
644
+ writeConcern:
645
+ command_name: abortTransaction
646
+ database_name: admin
647
+ - command_started_event:
648
+ command:
649
+ abortTransaction: 1
650
+ lsid: session0
651
+ txnNumber:
652
+ $numberLong: "1"
653
+ startTransaction:
654
+ autocommit: false
655
+ writeConcern:
656
+ command_name: abortTransaction
657
+ database_name: admin
658
+
659
+ outcome:
660
+ collection:
661
+ data: []
662
+
663
+ - description: abortTransaction succeeds after ShutdownInProgress
664
+
665
+ failPoint:
666
+ configureFailPoint: failCommand
667
+ mode: { times: 1 }
668
+ data:
669
+ failCommands: ["abortTransaction"]
670
+ errorCode: 91
671
+ closeConnection: false
672
+
673
+ operations:
674
+ - name: startTransaction
675
+ object: session0
676
+ - name: insertOne
677
+ object: collection
678
+ arguments:
679
+ session: session0
680
+ document:
681
+ _id: 1
682
+ result:
683
+ insertedId: 1
684
+ - name: abortTransaction
685
+ object: session0
686
+
687
+ expectations:
688
+ - command_started_event:
689
+ command:
690
+ insert: *collection_name
691
+ documents:
692
+ - _id: 1
693
+ ordered: true
694
+ readConcern:
695
+ lsid: session0
696
+ txnNumber:
697
+ $numberLong: "1"
698
+ startTransaction: true
699
+ autocommit: false
700
+ writeConcern:
701
+ command_name: insert
702
+ database_name: *database_name
703
+ - command_started_event:
704
+ command:
705
+ abortTransaction: 1
706
+ lsid: session0
707
+ txnNumber:
708
+ $numberLong: "1"
709
+ startTransaction:
710
+ autocommit: false
711
+ writeConcern:
712
+ command_name: abortTransaction
713
+ database_name: admin
714
+ - command_started_event:
715
+ command:
716
+ abortTransaction: 1
717
+ lsid: session0
718
+ txnNumber:
719
+ $numberLong: "1"
720
+ startTransaction:
721
+ autocommit: false
722
+ writeConcern:
723
+ command_name: abortTransaction
724
+ database_name: admin
725
+
726
+ outcome:
727
+ collection:
728
+ data: []
729
+
730
+ - description: abortTransaction succeeds after HostNotFound
731
+
732
+ failPoint:
733
+ configureFailPoint: failCommand
734
+ mode: { times: 1 }
735
+ data:
736
+ failCommands: ["abortTransaction"]
737
+ errorCode: 7
738
+ closeConnection: false
739
+
740
+ operations:
741
+ - name: startTransaction
742
+ object: session0
743
+ - name: insertOne
744
+ object: collection
745
+ arguments:
746
+ session: session0
747
+ document:
748
+ _id: 1
749
+ result:
750
+ insertedId: 1
751
+ - name: abortTransaction
752
+ object: session0
753
+
754
+ expectations:
755
+ - command_started_event:
756
+ command:
757
+ insert: *collection_name
758
+ documents:
759
+ - _id: 1
760
+ ordered: true
761
+ readConcern:
762
+ lsid: session0
763
+ txnNumber:
764
+ $numberLong: "1"
765
+ startTransaction: true
766
+ autocommit: false
767
+ writeConcern:
768
+ command_name: insert
769
+ database_name: *database_name
770
+ - command_started_event:
771
+ command:
772
+ abortTransaction: 1
773
+ lsid: session0
774
+ txnNumber:
775
+ $numberLong: "1"
776
+ startTransaction:
777
+ autocommit: false
778
+ writeConcern:
779
+ command_name: abortTransaction
780
+ database_name: admin
781
+ - command_started_event:
782
+ command:
783
+ abortTransaction: 1
784
+ lsid: session0
785
+ txnNumber:
786
+ $numberLong: "1"
787
+ startTransaction:
788
+ autocommit: false
789
+ writeConcern:
790
+ command_name: abortTransaction
791
+ database_name: admin
792
+
793
+ outcome:
794
+ collection:
795
+ data: []
796
+
797
+ - description: abortTransaction succeeds after HostUnreachable
798
+
799
+ failPoint:
800
+ configureFailPoint: failCommand
801
+ mode: { times: 1 }
802
+ data:
803
+ failCommands: ["abortTransaction"]
804
+ errorCode: 6
805
+ closeConnection: false
806
+
807
+ operations:
808
+ - name: startTransaction
809
+ object: session0
810
+ - name: insertOne
811
+ object: collection
812
+ arguments:
813
+ session: session0
814
+ document:
815
+ _id: 1
816
+ result:
817
+ insertedId: 1
818
+ - name: abortTransaction
819
+ object: session0
820
+
821
+ expectations:
822
+ - command_started_event:
823
+ command:
824
+ insert: *collection_name
825
+ documents:
826
+ - _id: 1
827
+ ordered: true
828
+ readConcern:
829
+ lsid: session0
830
+ txnNumber:
831
+ $numberLong: "1"
832
+ startTransaction: true
833
+ autocommit: false
834
+ writeConcern:
835
+ command_name: insert
836
+ database_name: *database_name
837
+ - command_started_event:
838
+ command:
839
+ abortTransaction: 1
840
+ lsid: session0
841
+ txnNumber:
842
+ $numberLong: "1"
843
+ startTransaction:
844
+ autocommit: false
845
+ writeConcern:
846
+ command_name: abortTransaction
847
+ database_name: admin
848
+ - command_started_event:
849
+ command:
850
+ abortTransaction: 1
851
+ lsid: session0
852
+ txnNumber:
853
+ $numberLong: "1"
854
+ startTransaction:
855
+ autocommit: false
856
+ writeConcern:
857
+ command_name: abortTransaction
858
+ database_name: admin
859
+
860
+ outcome:
861
+ collection:
862
+ data: []
863
+
864
+ - description: abortTransaction succeeds after SocketException
865
+
866
+ failPoint:
867
+ configureFailPoint: failCommand
868
+ mode: { times: 1 }
869
+ data:
870
+ failCommands: ["abortTransaction"]
871
+ errorCode: 9001
872
+ closeConnection: false
873
+
874
+ operations:
875
+ - name: startTransaction
876
+ object: session0
877
+ - name: insertOne
878
+ object: collection
879
+ arguments:
880
+ session: session0
881
+ document:
882
+ _id: 1
883
+ result:
884
+ insertedId: 1
885
+ - name: abortTransaction
886
+ object: session0
887
+
888
+ expectations:
889
+ - command_started_event:
890
+ command:
891
+ insert: *collection_name
892
+ documents:
893
+ - _id: 1
894
+ ordered: true
895
+ readConcern:
896
+ lsid: session0
897
+ txnNumber:
898
+ $numberLong: "1"
899
+ startTransaction: true
900
+ autocommit: false
901
+ writeConcern:
902
+ command_name: insert
903
+ database_name: *database_name
904
+ - command_started_event:
905
+ command:
906
+ abortTransaction: 1
907
+ lsid: session0
908
+ txnNumber:
909
+ $numberLong: "1"
910
+ startTransaction:
911
+ autocommit: false
912
+ writeConcern:
913
+ command_name: abortTransaction
914
+ database_name: admin
915
+ - command_started_event:
916
+ command:
917
+ abortTransaction: 1
918
+ lsid: session0
919
+ txnNumber:
920
+ $numberLong: "1"
921
+ startTransaction:
922
+ autocommit: false
923
+ writeConcern:
924
+ command_name: abortTransaction
925
+ database_name: admin
926
+
927
+ outcome:
928
+ collection:
929
+ data: []
930
+
931
+ - description: abortTransaction succeeds after NetworkTimeout
932
+
933
+ failPoint:
934
+ configureFailPoint: failCommand
935
+ mode: { times: 1 }
936
+ data:
937
+ failCommands: ["abortTransaction"]
938
+ errorCode: 89
939
+ closeConnection: false
940
+
941
+ operations:
942
+ - name: startTransaction
943
+ object: session0
944
+ - name: insertOne
945
+ object: collection
946
+ arguments:
947
+ session: session0
948
+ document:
949
+ _id: 1
950
+ result:
951
+ insertedId: 1
952
+ - name: abortTransaction
953
+ object: session0
954
+
955
+ expectations:
956
+ - command_started_event:
957
+ command:
958
+ insert: *collection_name
959
+ documents:
960
+ - _id: 1
961
+ ordered: true
962
+ readConcern:
963
+ lsid: session0
964
+ txnNumber:
965
+ $numberLong: "1"
966
+ startTransaction: true
967
+ autocommit: false
968
+ writeConcern:
969
+ command_name: insert
970
+ database_name: *database_name
971
+ - command_started_event:
972
+ command:
973
+ abortTransaction: 1
974
+ lsid: session0
975
+ txnNumber:
976
+ $numberLong: "1"
977
+ startTransaction:
978
+ autocommit: false
979
+ writeConcern:
980
+ command_name: abortTransaction
981
+ database_name: admin
982
+ - command_started_event:
983
+ command:
984
+ abortTransaction: 1
985
+ lsid: session0
986
+ txnNumber:
987
+ $numberLong: "1"
988
+ startTransaction:
989
+ autocommit: false
990
+ writeConcern:
991
+ command_name: abortTransaction
992
+ database_name: admin
993
+
994
+ outcome:
995
+ collection:
996
+ data: []
997
+
998
+ - description: abortTransaction succeeds after WriteConcernError InterruptedAtShutdown
999
+
1000
+ failPoint:
1001
+ configureFailPoint: failCommand
1002
+ mode: { times: 1 }
1003
+ data:
1004
+ failCommands: ["abortTransaction"]
1005
+ writeConcernError:
1006
+ code: 11600
1007
+ errmsg: Replication is being shut down
1008
+
1009
+ operations:
1010
+ - name: startTransaction
1011
+ object: session0
1012
+ arguments:
1013
+ options:
1014
+ writeConcern:
1015
+ w: majority
1016
+ - name: insertOne
1017
+ object: collection
1018
+ arguments:
1019
+ session: session0
1020
+ document:
1021
+ _id: 1
1022
+ result:
1023
+ insertedId: 1
1024
+ - name: abortTransaction
1025
+ object: session0
1026
+
1027
+ expectations:
1028
+ - command_started_event:
1029
+ command:
1030
+ insert: *collection_name
1031
+ documents:
1032
+ - _id: 1
1033
+ ordered: true
1034
+ readConcern:
1035
+ lsid: session0
1036
+ txnNumber:
1037
+ $numberLong: "1"
1038
+ startTransaction: true
1039
+ autocommit: false
1040
+ writeConcern:
1041
+ command_name: insert
1042
+ database_name: *database_name
1043
+ - command_started_event:
1044
+ command:
1045
+ abortTransaction: 1
1046
+ lsid: session0
1047
+ txnNumber:
1048
+ $numberLong: "1"
1049
+ startTransaction:
1050
+ autocommit: false
1051
+ writeConcern:
1052
+ w: majority
1053
+ command_name: abortTransaction
1054
+ database_name: admin
1055
+ - command_started_event:
1056
+ command:
1057
+ abortTransaction: 1
1058
+ lsid: session0
1059
+ txnNumber:
1060
+ $numberLong: "1"
1061
+ startTransaction:
1062
+ autocommit: false
1063
+ writeConcern:
1064
+ w: majority
1065
+ command_name: abortTransaction
1066
+ database_name: admin
1067
+
1068
+ outcome:
1069
+ collection:
1070
+ data: []
1071
+
1072
+ - description: abortTransaction succeeds after WriteConcernError InterruptedDueToReplStateChange
1073
+
1074
+ failPoint:
1075
+ configureFailPoint: failCommand
1076
+ mode: { times: 1 }
1077
+ data:
1078
+ failCommands: ["abortTransaction"]
1079
+ writeConcernError:
1080
+ code: 11602
1081
+ errmsg: Replication is being shut down
1082
+
1083
+ operations:
1084
+ - name: startTransaction
1085
+ object: session0
1086
+ arguments:
1087
+ options:
1088
+ writeConcern:
1089
+ w: majority
1090
+ - name: insertOne
1091
+ object: collection
1092
+ arguments:
1093
+ session: session0
1094
+ document:
1095
+ _id: 1
1096
+ result:
1097
+ insertedId: 1
1098
+ - name: abortTransaction
1099
+ object: session0
1100
+
1101
+ expectations:
1102
+ - command_started_event:
1103
+ command:
1104
+ insert: *collection_name
1105
+ documents:
1106
+ - _id: 1
1107
+ ordered: true
1108
+ readConcern:
1109
+ lsid: session0
1110
+ txnNumber:
1111
+ $numberLong: "1"
1112
+ startTransaction: true
1113
+ autocommit: false
1114
+ writeConcern:
1115
+ command_name: insert
1116
+ database_name: *database_name
1117
+ - command_started_event:
1118
+ command:
1119
+ abortTransaction: 1
1120
+ lsid: session0
1121
+ txnNumber:
1122
+ $numberLong: "1"
1123
+ startTransaction:
1124
+ autocommit: false
1125
+ writeConcern:
1126
+ w: majority
1127
+ command_name: abortTransaction
1128
+ database_name: admin
1129
+ - command_started_event:
1130
+ command:
1131
+ abortTransaction: 1
1132
+ lsid: session0
1133
+ txnNumber:
1134
+ $numberLong: "1"
1135
+ startTransaction:
1136
+ autocommit: false
1137
+ writeConcern:
1138
+ w: majority
1139
+ command_name: abortTransaction
1140
+ database_name: admin
1141
+
1142
+ outcome:
1143
+ collection:
1144
+ data: []
1145
+
1146
+ - description: abortTransaction succeeds after WriteConcernError PrimarySteppedDown
1147
+
1148
+ failPoint:
1149
+ configureFailPoint: failCommand
1150
+ mode: { times: 1 }
1151
+ data:
1152
+ failCommands: ["abortTransaction"]
1153
+ writeConcernError:
1154
+ code: 189
1155
+ errmsg: Replication is being shut down
1156
+
1157
+ operations:
1158
+ - name: startTransaction
1159
+ object: session0
1160
+ arguments:
1161
+ options:
1162
+ writeConcern:
1163
+ w: majority
1164
+ - name: insertOne
1165
+ object: collection
1166
+ arguments:
1167
+ session: session0
1168
+ document:
1169
+ _id: 1
1170
+ result:
1171
+ insertedId: 1
1172
+ - name: abortTransaction
1173
+ object: session0
1174
+
1175
+ expectations:
1176
+ - command_started_event:
1177
+ command:
1178
+ insert: *collection_name
1179
+ documents:
1180
+ - _id: 1
1181
+ ordered: true
1182
+ readConcern:
1183
+ lsid: session0
1184
+ txnNumber:
1185
+ $numberLong: "1"
1186
+ startTransaction: true
1187
+ autocommit: false
1188
+ writeConcern:
1189
+ command_name: insert
1190
+ database_name: *database_name
1191
+ - command_started_event:
1192
+ command:
1193
+ abortTransaction: 1
1194
+ lsid: session0
1195
+ txnNumber:
1196
+ $numberLong: "1"
1197
+ startTransaction:
1198
+ autocommit: false
1199
+ writeConcern:
1200
+ w: majority
1201
+ command_name: abortTransaction
1202
+ database_name: admin
1203
+ - command_started_event:
1204
+ command:
1205
+ abortTransaction: 1
1206
+ lsid: session0
1207
+ txnNumber:
1208
+ $numberLong: "1"
1209
+ startTransaction:
1210
+ autocommit: false
1211
+ writeConcern:
1212
+ w: majority
1213
+ command_name: abortTransaction
1214
+ database_name: admin
1215
+
1216
+ outcome:
1217
+ collection:
1218
+ data: []
1219
+
1220
+ - description: abortTransaction succeeds after WriteConcernError ShutdownInProgress
1221
+
1222
+ failPoint:
1223
+ configureFailPoint: failCommand
1224
+ mode: { times: 1 }
1225
+ data:
1226
+ failCommands: ["abortTransaction"]
1227
+ writeConcernError:
1228
+ code: 91
1229
+ errmsg: Replication is being shut down
1230
+
1231
+ operations:
1232
+ - name: startTransaction
1233
+ object: session0
1234
+ arguments:
1235
+ options:
1236
+ writeConcern:
1237
+ w: majority
1238
+ - name: insertOne
1239
+ object: collection
1240
+ arguments:
1241
+ session: session0
1242
+ document:
1243
+ _id: 1
1244
+ result:
1245
+ insertedId: 1
1246
+ - name: abortTransaction
1247
+ object: session0
1248
+
1249
+ expectations:
1250
+ - command_started_event:
1251
+ command:
1252
+ insert: *collection_name
1253
+ documents:
1254
+ - _id: 1
1255
+ ordered: true
1256
+ readConcern:
1257
+ lsid: session0
1258
+ txnNumber:
1259
+ $numberLong: "1"
1260
+ startTransaction: true
1261
+ autocommit: false
1262
+ writeConcern:
1263
+ command_name: insert
1264
+ database_name: *database_name
1265
+ - command_started_event:
1266
+ command:
1267
+ abortTransaction: 1
1268
+ lsid: session0
1269
+ txnNumber:
1270
+ $numberLong: "1"
1271
+ startTransaction:
1272
+ autocommit: false
1273
+ writeConcern:
1274
+ w: majority
1275
+ command_name: abortTransaction
1276
+ database_name: admin
1277
+ - command_started_event:
1278
+ command:
1279
+ abortTransaction: 1
1280
+ lsid: session0
1281
+ txnNumber:
1282
+ $numberLong: "1"
1283
+ startTransaction:
1284
+ autocommit: false
1285
+ writeConcern:
1286
+ w: majority
1287
+ command_name: abortTransaction
1288
+ database_name: admin
1289
+
1290
+ outcome:
1291
+ collection:
1292
+ data: []