mongo 2.12.4 → 2.13.0.beta1

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 (817) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/CONTRIBUTING.md +8 -36
  5. data/LICENSE +1 -1
  6. data/README.md +54 -54
  7. data/Rakefile +1 -1
  8. data/lib/mongo.rb +4 -1
  9. data/lib/mongo/active_support.rb +1 -1
  10. data/lib/mongo/address.rb +40 -13
  11. data/lib/mongo/address/ipv4.rb +32 -5
  12. data/lib/mongo/address/ipv6.rb +32 -5
  13. data/lib/mongo/address/unix.rb +3 -3
  14. data/lib/mongo/address/validator.rb +1 -1
  15. data/lib/mongo/auth.rb +36 -13
  16. data/lib/mongo/auth/aws.rb +37 -0
  17. data/lib/mongo/auth/aws/conversation.rb +128 -0
  18. data/lib/mongo/auth/aws/credentials_retriever.rb +219 -0
  19. data/lib/mongo/auth/aws/request.rb +257 -0
  20. data/lib/mongo/auth/base.rb +129 -0
  21. data/lib/mongo/auth/conversation_base.rb +52 -0
  22. data/lib/mongo/auth/cr.rb +9 -36
  23. data/lib/mongo/auth/cr/conversation.rb +24 -69
  24. data/lib/mongo/auth/credential_cache.rb +1 -1
  25. data/lib/mongo/auth/gssapi.rb +38 -0
  26. data/lib/mongo/auth/gssapi/conversation.rb +108 -0
  27. data/lib/mongo/auth/ldap.rb +9 -34
  28. data/lib/mongo/auth/ldap/conversation.rb +3 -43
  29. data/lib/mongo/auth/roles.rb +1 -1
  30. data/lib/mongo/auth/sasl_conversation_base.rb +111 -0
  31. data/lib/mongo/auth/scram.rb +39 -51
  32. data/lib/mongo/auth/scram/conversation.rb +12 -506
  33. data/lib/mongo/auth/scram256.rb +31 -0
  34. data/lib/mongo/auth/scram256/conversation.rb +63 -0
  35. data/lib/mongo/auth/scram_conversation_base.rb +402 -0
  36. data/lib/mongo/auth/stringprep.rb +5 -4
  37. data/lib/mongo/auth/stringprep/profiles/sasl.rb +2 -1
  38. data/lib/mongo/auth/stringprep/tables.rb +2 -1
  39. data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +1 -0
  40. data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +1 -0
  41. data/lib/mongo/auth/user.rb +2 -2
  42. data/lib/mongo/auth/user/view.rb +1 -1
  43. data/lib/mongo/auth/x509.rb +14 -32
  44. data/lib/mongo/auth/x509/conversation.rb +15 -42
  45. data/lib/mongo/background_thread.rb +11 -2
  46. data/lib/mongo/bson.rb +1 -1
  47. data/lib/mongo/bulk_write.rb +61 -26
  48. data/lib/mongo/bulk_write/combineable.rb +20 -8
  49. data/lib/mongo/bulk_write/ordered_combiner.rb +1 -1
  50. data/lib/mongo/bulk_write/result.rb +1 -1
  51. data/lib/mongo/bulk_write/result_combiner.rb +1 -1
  52. data/lib/mongo/bulk_write/transformable.rb +9 -10
  53. data/lib/mongo/bulk_write/unordered_combiner.rb +1 -1
  54. data/lib/mongo/bulk_write/validatable.rb +5 -1
  55. data/lib/mongo/client.rb +38 -23
  56. data/lib/mongo/client_encryption.rb +1 -1
  57. data/lib/mongo/cluster.rb +126 -54
  58. data/lib/mongo/cluster/periodic_executor.rb +1 -1
  59. data/lib/mongo/cluster/reapers/cursor_reaper.rb +1 -1
  60. data/lib/mongo/cluster/reapers/socket_reaper.rb +1 -1
  61. data/lib/mongo/cluster/sdam_flow.rb +23 -7
  62. data/lib/mongo/cluster/topology.rb +19 -2
  63. data/lib/mongo/cluster/topology/base.rb +1 -1
  64. data/lib/mongo/cluster/topology/no_replica_set_options.rb +1 -1
  65. data/lib/mongo/cluster/topology/replica_set_no_primary.rb +1 -1
  66. data/lib/mongo/cluster/topology/replica_set_with_primary.rb +1 -1
  67. data/lib/mongo/cluster/topology/sharded.rb +1 -1
  68. data/lib/mongo/cluster/topology/single.rb +1 -1
  69. data/lib/mongo/cluster/topology/unknown.rb +1 -1
  70. data/lib/mongo/cluster_time.rb +1 -1
  71. data/lib/mongo/collection.rb +24 -8
  72. data/lib/mongo/collection/view.rb +6 -2
  73. data/lib/mongo/collection/view/aggregation.rb +6 -3
  74. data/lib/mongo/collection/view/builder.rb +1 -1
  75. data/lib/mongo/collection/view/builder/aggregation.rb +1 -1
  76. data/lib/mongo/collection/view/builder/find_command.rb +9 -1
  77. data/lib/mongo/collection/view/builder/flags.rb +1 -1
  78. data/lib/mongo/collection/view/builder/map_reduce.rb +1 -1
  79. data/lib/mongo/collection/view/builder/modifiers.rb +1 -1
  80. data/lib/mongo/collection/view/builder/op_query.rb +1 -1
  81. data/lib/mongo/collection/view/change_stream.rb +3 -6
  82. data/lib/mongo/collection/view/change_stream/retryable.rb +1 -1
  83. data/lib/mongo/collection/view/explainable.rb +1 -1
  84. data/lib/mongo/collection/view/immutable.rb +1 -1
  85. data/lib/mongo/collection/view/iterable.rb +8 -2
  86. data/lib/mongo/collection/view/map_reduce.rb +7 -4
  87. data/lib/mongo/collection/view/readable.rb +11 -5
  88. data/lib/mongo/collection/view/writable.rb +52 -8
  89. data/lib/mongo/crypt.rb +1 -1
  90. data/lib/mongo/crypt/auto_decryption_context.rb +1 -1
  91. data/lib/mongo/crypt/auto_encrypter.rb +1 -1
  92. data/lib/mongo/crypt/auto_encryption_context.rb +1 -1
  93. data/lib/mongo/crypt/binary.rb +1 -1
  94. data/lib/mongo/crypt/binding.rb +1 -1
  95. data/lib/mongo/crypt/context.rb +1 -1
  96. data/lib/mongo/crypt/data_key_context.rb +1 -1
  97. data/lib/mongo/crypt/encryption_io.rb +41 -24
  98. data/lib/mongo/crypt/explicit_decryption_context.rb +1 -1
  99. data/lib/mongo/crypt/explicit_encrypter.rb +1 -1
  100. data/lib/mongo/crypt/explicit_encryption_context.rb +1 -1
  101. data/lib/mongo/crypt/handle.rb +1 -1
  102. data/lib/mongo/crypt/hooks.rb +1 -1
  103. data/lib/mongo/crypt/kms_context.rb +1 -1
  104. data/lib/mongo/crypt/status.rb +1 -1
  105. data/lib/mongo/cursor.rb +3 -3
  106. data/lib/mongo/cursor/builder.rb +1 -1
  107. data/lib/mongo/cursor/builder/get_more_command.rb +1 -1
  108. data/lib/mongo/cursor/builder/kill_cursors_command.rb +1 -1
  109. data/lib/mongo/cursor/builder/op_get_more.rb +1 -1
  110. data/lib/mongo/cursor/builder/op_kill_cursors.rb +1 -1
  111. data/lib/mongo/database.rb +4 -1
  112. data/lib/mongo/database/view.rb +2 -2
  113. data/lib/mongo/dbref.rb +1 -1
  114. data/lib/mongo/error.rb +25 -2
  115. data/lib/mongo/error/auth_error.rb +1 -1
  116. data/lib/mongo/error/bulk_write_error.rb +1 -1
  117. data/lib/mongo/error/change_stream_resumable.rb +1 -1
  118. data/lib/mongo/error/closed_stream.rb +1 -1
  119. data/lib/mongo/error/connection_check_out_timeout.rb +1 -1
  120. data/lib/mongo/error/connection_perished.rb +23 -0
  121. data/lib/mongo/error/credential_check_error.rb +26 -0
  122. data/lib/mongo/error/extra_file_chunk.rb +1 -1
  123. data/lib/mongo/error/file_not_found.rb +1 -1
  124. data/lib/mongo/error/handshake_error.rb +1 -1
  125. data/lib/mongo/error/insufficient_iteration_count.rb +1 -1
  126. data/lib/mongo/error/invalid_address.rb +1 -1
  127. data/lib/mongo/error/invalid_application_name.rb +1 -1
  128. data/lib/mongo/error/invalid_bulk_operation.rb +1 -1
  129. data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -1
  130. data/lib/mongo/error/invalid_collection_name.rb +1 -1
  131. data/lib/mongo/error/invalid_cursor_operation.rb +1 -1
  132. data/lib/mongo/error/invalid_database_name.rb +1 -1
  133. data/lib/mongo/error/invalid_document.rb +1 -1
  134. data/lib/mongo/error/invalid_file.rb +1 -1
  135. data/lib/mongo/error/invalid_file_revision.rb +1 -1
  136. data/lib/mongo/error/invalid_min_pool_size.rb +1 -1
  137. data/lib/mongo/error/invalid_nonce.rb +2 -2
  138. data/lib/mongo/error/invalid_read_option.rb +1 -1
  139. data/lib/mongo/error/invalid_replacement_document.rb +1 -1
  140. data/lib/mongo/error/invalid_server_auth_response.rb +23 -0
  141. data/lib/mongo/error/invalid_server_preference.rb +6 -1
  142. data/lib/mongo/error/invalid_session.rb +1 -1
  143. data/lib/mongo/error/invalid_signature.rb +1 -1
  144. data/lib/mongo/error/invalid_transaction_operation.rb +1 -1
  145. data/lib/mongo/error/invalid_txt_record.rb +1 -1
  146. data/lib/mongo/error/invalid_update_document.rb +1 -1
  147. data/lib/mongo/error/invalid_uri.rb +1 -1
  148. data/lib/mongo/error/invalid_write_concern.rb +1 -1
  149. data/lib/mongo/error/lint_error.rb +1 -1
  150. data/lib/mongo/error/max_bson_size.rb +1 -1
  151. data/lib/mongo/error/max_message_size.rb +1 -1
  152. data/lib/mongo/error/mismatched_domain.rb +1 -1
  153. data/lib/mongo/error/missing_file_chunk.rb +1 -1
  154. data/lib/mongo/error/missing_password.rb +1 -1
  155. data/lib/mongo/error/missing_resume_token.rb +1 -1
  156. data/lib/mongo/error/missing_scram_server_signature.rb +27 -0
  157. data/lib/mongo/error/multi_index_drop.rb +1 -1
  158. data/lib/mongo/error/need_primary_server.rb +1 -1
  159. data/lib/mongo/error/no_server_available.rb +1 -1
  160. data/lib/mongo/error/no_srv_records.rb +1 -1
  161. data/lib/mongo/error/notable.rb +18 -3
  162. data/lib/mongo/error/operation_failure.rb +62 -49
  163. data/lib/mongo/error/parser.rb +16 -5
  164. data/lib/mongo/error/pool_closed_error.rb +1 -1
  165. data/lib/mongo/error/raise_original_error.rb +29 -0
  166. data/lib/mongo/error/session_ended.rb +1 -1
  167. data/lib/mongo/error/socket_error.rb +1 -1
  168. data/lib/mongo/error/socket_timeout_error.rb +1 -1
  169. data/lib/mongo/error/unchangeable_collection_option.rb +1 -1
  170. data/lib/mongo/error/unexpected_chunk_length.rb +1 -1
  171. data/lib/mongo/error/unexpected_response.rb +1 -1
  172. data/lib/mongo/error/unknown_payload_type.rb +1 -1
  173. data/lib/mongo/error/unsupported_array_filters.rb +7 -2
  174. data/lib/mongo/error/unsupported_collation.rb +7 -2
  175. data/lib/mongo/error/unsupported_features.rb +1 -1
  176. data/lib/mongo/error/unsupported_message_type.rb +1 -1
  177. data/lib/mongo/error/unsupported_option.rb +99 -0
  178. data/lib/mongo/error/write_retryable.rb +1 -1
  179. data/lib/mongo/event.rb +1 -1
  180. data/lib/mongo/event/base.rb +1 -1
  181. data/lib/mongo/event/listeners.rb +1 -1
  182. data/lib/mongo/event/publisher.rb +1 -1
  183. data/lib/mongo/event/subscriber.rb +1 -1
  184. data/lib/mongo/grid.rb +1 -1
  185. data/lib/mongo/grid/file.rb +1 -6
  186. data/lib/mongo/grid/file/chunk.rb +1 -3
  187. data/lib/mongo/grid/file/info.rb +1 -1
  188. data/lib/mongo/grid/fs_bucket.rb +20 -17
  189. data/lib/mongo/grid/stream.rb +1 -1
  190. data/lib/mongo/grid/stream/read.rb +1 -1
  191. data/lib/mongo/grid/stream/write.rb +4 -10
  192. data/lib/mongo/id.rb +1 -1
  193. data/lib/mongo/index.rb +2 -1
  194. data/lib/mongo/index/view.rb +58 -11
  195. data/lib/mongo/lint.rb +10 -0
  196. data/lib/mongo/loggable.rb +1 -1
  197. data/lib/mongo/logger.rb +1 -1
  198. data/lib/mongo/monitoring.rb +1 -1
  199. data/lib/mongo/monitoring/cmap_log_subscriber.rb +1 -1
  200. data/lib/mongo/monitoring/command_log_subscriber.rb +12 -5
  201. data/lib/mongo/monitoring/event.rb +1 -1
  202. data/lib/mongo/monitoring/event/cmap.rb +1 -1
  203. data/lib/mongo/monitoring/event/cmap/base.rb +1 -1
  204. data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +1 -1
  205. data/lib/mongo/monitoring/event/cmap/connection_check_out_started.rb +1 -1
  206. data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +1 -1
  207. data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +1 -1
  208. data/lib/mongo/monitoring/event/cmap/connection_closed.rb +1 -1
  209. data/lib/mongo/monitoring/event/cmap/connection_created.rb +1 -1
  210. data/lib/mongo/monitoring/event/cmap/connection_ready.rb +1 -1
  211. data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +1 -1
  212. data/lib/mongo/monitoring/event/cmap/pool_closed.rb +1 -1
  213. data/lib/mongo/monitoring/event/cmap/pool_created.rb +1 -1
  214. data/lib/mongo/monitoring/event/command_failed.rb +1 -1
  215. data/lib/mongo/monitoring/event/command_started.rb +9 -3
  216. data/lib/mongo/monitoring/event/command_succeeded.rb +1 -1
  217. data/lib/mongo/monitoring/event/secure.rb +8 -2
  218. data/lib/mongo/monitoring/event/server_closed.rb +1 -1
  219. data/lib/mongo/monitoring/event/server_description_changed.rb +1 -1
  220. data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +1 -1
  221. data/lib/mongo/monitoring/event/server_heartbeat_started.rb +1 -1
  222. data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +1 -1
  223. data/lib/mongo/monitoring/event/server_opening.rb +1 -1
  224. data/lib/mongo/monitoring/event/topology_changed.rb +1 -1
  225. data/lib/mongo/monitoring/event/topology_closed.rb +1 -1
  226. data/lib/mongo/monitoring/event/topology_opening.rb +1 -1
  227. data/lib/mongo/monitoring/publishable.rb +5 -8
  228. data/lib/mongo/monitoring/sdam_log_subscriber.rb +1 -1
  229. data/lib/mongo/monitoring/server_closed_log_subscriber.rb +1 -1
  230. data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +1 -1
  231. data/lib/mongo/monitoring/server_opening_log_subscriber.rb +1 -1
  232. data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +1 -1
  233. data/lib/mongo/monitoring/topology_closed_log_subscriber.rb +1 -1
  234. data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +1 -1
  235. data/lib/mongo/monitoring/unified_sdam_log_subscriber.rb +1 -1
  236. data/lib/mongo/operation.rb +1 -0
  237. data/lib/mongo/operation/aggregate.rb +1 -1
  238. data/lib/mongo/operation/aggregate/command.rb +5 -5
  239. data/lib/mongo/operation/aggregate/op_msg.rb +1 -1
  240. data/lib/mongo/operation/aggregate/result.rb +1 -1
  241. data/lib/mongo/operation/collections_info.rb +3 -36
  242. data/lib/mongo/operation/collections_info/command.rb +40 -0
  243. data/lib/mongo/operation/collections_info/result.rb +1 -1
  244. data/lib/mongo/operation/command.rb +1 -1
  245. data/lib/mongo/operation/command/command.rb +3 -3
  246. data/lib/mongo/operation/command/op_msg.rb +1 -1
  247. data/lib/mongo/operation/count.rb +1 -1
  248. data/lib/mongo/operation/count/command.rb +3 -3
  249. data/lib/mongo/operation/count/op_msg.rb +1 -1
  250. data/lib/mongo/operation/create.rb +1 -1
  251. data/lib/mongo/operation/create/command.rb +3 -3
  252. data/lib/mongo/operation/create/op_msg.rb +1 -1
  253. data/lib/mongo/operation/create_index.rb +1 -1
  254. data/lib/mongo/operation/create_index/command.rb +4 -4
  255. data/lib/mongo/operation/create_index/op_msg.rb +6 -3
  256. data/lib/mongo/operation/create_user.rb +1 -1
  257. data/lib/mongo/operation/create_user/command.rb +4 -4
  258. data/lib/mongo/operation/create_user/op_msg.rb +2 -2
  259. data/lib/mongo/operation/delete.rb +1 -1
  260. data/lib/mongo/operation/delete/bulk_result.rb +1 -1
  261. data/lib/mongo/operation/delete/command.rb +4 -4
  262. data/lib/mongo/operation/delete/legacy.rb +2 -2
  263. data/lib/mongo/operation/delete/op_msg.rb +4 -4
  264. data/lib/mongo/operation/delete/result.rb +2 -2
  265. data/lib/mongo/operation/distinct.rb +1 -1
  266. data/lib/mongo/operation/distinct/command.rb +3 -3
  267. data/lib/mongo/operation/distinct/op_msg.rb +1 -1
  268. data/lib/mongo/operation/drop.rb +1 -1
  269. data/lib/mongo/operation/drop/command.rb +3 -3
  270. data/lib/mongo/operation/drop/op_msg.rb +1 -1
  271. data/lib/mongo/operation/drop_database.rb +1 -1
  272. data/lib/mongo/operation/drop_database/command.rb +3 -3
  273. data/lib/mongo/operation/drop_database/op_msg.rb +1 -1
  274. data/lib/mongo/operation/drop_index.rb +1 -1
  275. data/lib/mongo/operation/drop_index/command.rb +4 -4
  276. data/lib/mongo/operation/drop_index/op_msg.rb +2 -2
  277. data/lib/mongo/operation/explain.rb +1 -1
  278. data/lib/mongo/operation/explain/command.rb +3 -3
  279. data/lib/mongo/operation/explain/legacy.rb +3 -3
  280. data/lib/mongo/operation/explain/op_msg.rb +1 -1
  281. data/lib/mongo/operation/explain/result.rb +1 -1
  282. data/lib/mongo/operation/find.rb +1 -1
  283. data/lib/mongo/operation/find/command.rb +3 -3
  284. data/lib/mongo/operation/find/legacy.rb +3 -3
  285. data/lib/mongo/operation/find/legacy/result.rb +1 -1
  286. data/lib/mongo/operation/find/op_msg.rb +2 -12
  287. data/lib/mongo/operation/find/result.rb +1 -1
  288. data/lib/mongo/operation/get_more.rb +1 -1
  289. data/lib/mongo/operation/get_more/command.rb +3 -3
  290. data/lib/mongo/operation/get_more/legacy.rb +2 -2
  291. data/lib/mongo/operation/get_more/op_msg.rb +2 -12
  292. data/lib/mongo/operation/get_more/result.rb +1 -1
  293. data/lib/mongo/operation/indexes.rb +1 -1
  294. data/lib/mongo/operation/indexes/command.rb +3 -3
  295. data/lib/mongo/operation/indexes/legacy.rb +4 -4
  296. data/lib/mongo/operation/indexes/op_msg.rb +1 -1
  297. data/lib/mongo/operation/indexes/result.rb +1 -1
  298. data/lib/mongo/operation/insert.rb +3 -2
  299. data/lib/mongo/operation/insert/bulk_result.rb +6 -2
  300. data/lib/mongo/operation/insert/command.rb +7 -7
  301. data/lib/mongo/operation/insert/legacy.rb +9 -5
  302. data/lib/mongo/operation/insert/op_msg.rb +6 -6
  303. data/lib/mongo/operation/insert/result.rb +7 -4
  304. data/lib/mongo/operation/kill_cursors.rb +1 -1
  305. data/lib/mongo/operation/kill_cursors/command.rb +3 -3
  306. data/lib/mongo/operation/kill_cursors/legacy.rb +2 -2
  307. data/lib/mongo/operation/kill_cursors/op_msg.rb +1 -1
  308. data/lib/mongo/operation/list_collections.rb +1 -1
  309. data/lib/mongo/operation/list_collections/command.rb +4 -4
  310. data/lib/mongo/operation/list_collections/op_msg.rb +2 -2
  311. data/lib/mongo/operation/list_collections/result.rb +1 -1
  312. data/lib/mongo/operation/map_reduce.rb +1 -1
  313. data/lib/mongo/operation/map_reduce/command.rb +3 -3
  314. data/lib/mongo/operation/map_reduce/op_msg.rb +1 -1
  315. data/lib/mongo/operation/map_reduce/result.rb +1 -1
  316. data/lib/mongo/operation/op_msg_base.rb +3 -3
  317. data/lib/mongo/operation/parallel_scan.rb +1 -1
  318. data/lib/mongo/operation/parallel_scan/command.rb +5 -5
  319. data/lib/mongo/operation/parallel_scan/op_msg.rb +2 -2
  320. data/lib/mongo/operation/parallel_scan/result.rb +1 -1
  321. data/lib/mongo/operation/remove_user.rb +1 -1
  322. data/lib/mongo/operation/remove_user/command.rb +4 -4
  323. data/lib/mongo/operation/remove_user/op_msg.rb +2 -2
  324. data/lib/mongo/operation/result.rb +28 -4
  325. data/lib/mongo/operation/shared/bypass_document_validation.rb +10 -4
  326. data/lib/mongo/operation/shared/causal_consistency_supported.rb +3 -3
  327. data/lib/mongo/operation/shared/collections_info_or_list_collections.rb +56 -0
  328. data/lib/mongo/operation/shared/executable.rb +46 -28
  329. data/lib/mongo/operation/shared/executable_no_validate.rb +3 -3
  330. data/lib/mongo/operation/shared/executable_transaction_label.rb +1 -1
  331. data/lib/mongo/operation/shared/idable.rb +1 -1
  332. data/lib/mongo/operation/shared/limited.rb +10 -2
  333. data/lib/mongo/operation/shared/object_id_generator.rb +1 -1
  334. data/lib/mongo/operation/shared/op_msg_or_command.rb +7 -5
  335. data/lib/mongo/operation/shared/op_msg_or_find_command.rb +8 -6
  336. data/lib/mongo/operation/shared/op_msg_or_list_indexes_command.rb +8 -6
  337. data/lib/mongo/operation/shared/polymorphic_lookup.rb +1 -1
  338. data/lib/mongo/operation/shared/polymorphic_result.rb +1 -1
  339. data/lib/mongo/operation/shared/read_preference_supported.rb +19 -16
  340. data/lib/mongo/operation/shared/response_handling.rb +83 -8
  341. data/lib/mongo/operation/shared/result/aggregatable.rb +1 -1
  342. data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +1 -1
  343. data/lib/mongo/operation/shared/sessions_supported.rb +50 -27
  344. data/lib/mongo/operation/shared/specifiable.rb +32 -20
  345. data/lib/mongo/operation/shared/write.rb +25 -19
  346. data/lib/mongo/operation/shared/write_concern_supported.rb +6 -6
  347. data/lib/mongo/operation/update.rb +1 -1
  348. data/lib/mongo/operation/update/bulk_result.rb +1 -1
  349. data/lib/mongo/operation/update/command.rb +4 -4
  350. data/lib/mongo/operation/update/legacy.rb +2 -2
  351. data/lib/mongo/operation/update/legacy/result.rb +1 -1
  352. data/lib/mongo/operation/update/op_msg.rb +4 -4
  353. data/lib/mongo/operation/update/result.rb +2 -2
  354. data/lib/mongo/operation/update_user.rb +1 -1
  355. data/lib/mongo/operation/update_user/command.rb +4 -4
  356. data/lib/mongo/operation/update_user/op_msg.rb +2 -2
  357. data/lib/mongo/operation/users_info.rb +1 -1
  358. data/lib/mongo/operation/users_info/command.rb +4 -4
  359. data/lib/mongo/operation/users_info/op_msg.rb +2 -2
  360. data/lib/mongo/operation/users_info/result.rb +1 -1
  361. data/lib/mongo/options.rb +1 -1
  362. data/lib/mongo/options/mapper.rb +1 -1
  363. data/lib/mongo/options/redacted.rb +1 -1
  364. data/lib/mongo/protocol/bit_vector.rb +1 -1
  365. data/lib/mongo/protocol/compressed.rb +1 -1
  366. data/lib/mongo/protocol/delete.rb +1 -1
  367. data/lib/mongo/protocol/get_more.rb +1 -1
  368. data/lib/mongo/protocol/insert.rb +1 -1
  369. data/lib/mongo/protocol/kill_cursors.rb +1 -1
  370. data/lib/mongo/protocol/message.rb +5 -14
  371. data/lib/mongo/protocol/msg.rb +5 -24
  372. data/lib/mongo/protocol/query.rb +1 -37
  373. data/lib/mongo/protocol/registry.rb +1 -1
  374. data/lib/mongo/protocol/reply.rb +1 -1
  375. data/lib/mongo/protocol/serializers.rb +3 -6
  376. data/lib/mongo/protocol/update.rb +1 -1
  377. data/lib/mongo/retryable.rb +23 -10
  378. data/lib/mongo/semaphore.rb +1 -1
  379. data/lib/mongo/server.rb +32 -7
  380. data/lib/mongo/server/app_metadata.rb +17 -4
  381. data/lib/mongo/server/connection.rb +35 -131
  382. data/lib/mongo/server/connection_base.rb +31 -42
  383. data/lib/mongo/server/connection_common.rb +75 -1
  384. data/lib/mongo/server/connection_pool.rb +20 -1
  385. data/lib/mongo/server/connection_pool/populator.rb +1 -1
  386. data/lib/mongo/server/context.rb +1 -1
  387. data/lib/mongo/server/description.rb +44 -2
  388. data/lib/mongo/server/description/features.rb +12 -3
  389. data/lib/mongo/server/monitor.rb +116 -72
  390. data/lib/mongo/server/monitor/app_metadata.rb +1 -1
  391. data/lib/mongo/server/monitor/connection.rb +62 -80
  392. data/lib/mongo/server/pending_connection.rb +205 -3
  393. data/lib/mongo/server/round_trip_time_averager.rb +12 -3
  394. data/lib/mongo/server_selector.rb +2 -1
  395. data/lib/mongo/server_selector/base.rb +40 -0
  396. data/lib/mongo/server_selector/nearest.rb +25 -15
  397. data/lib/mongo/server_selector/primary.rb +23 -22
  398. data/lib/mongo/server_selector/primary_preferred.rb +25 -15
  399. data/lib/mongo/server_selector/secondary.rb +25 -15
  400. data/lib/mongo/server_selector/secondary_preferred.rb +28 -27
  401. data/lib/mongo/server_selector/selectable.rb +30 -15
  402. data/lib/mongo/session.rb +12 -1
  403. data/lib/mongo/session/server_session.rb +1 -1
  404. data/lib/mongo/session/session_pool.rb +1 -1
  405. data/lib/mongo/socket.rb +103 -35
  406. data/lib/mongo/socket/ssl.rb +97 -34
  407. data/lib/mongo/socket/tcp.rb +39 -31
  408. data/lib/mongo/socket/unix.rb +14 -6
  409. data/lib/mongo/srv.rb +1 -1
  410. data/lib/mongo/srv/monitor.rb +1 -1
  411. data/lib/mongo/srv/resolver.rb +1 -1
  412. data/lib/mongo/srv/result.rb +1 -1
  413. data/lib/mongo/timeout.rb +9 -9
  414. data/lib/mongo/topology_version.rb +80 -0
  415. data/lib/mongo/uri.rb +61 -47
  416. data/lib/mongo/uri/srv_protocol.rb +9 -1
  417. data/lib/mongo/version.rb +2 -2
  418. data/lib/mongo/write_concern.rb +1 -1
  419. data/lib/mongo/write_concern/acknowledged.rb +1 -1
  420. data/lib/mongo/write_concern/base.rb +1 -1
  421. data/lib/mongo/write_concern/unacknowledged.rb +1 -1
  422. data/mongo.gemspec +1 -1
  423. data/spec/NOTES.aws-auth.md +291 -0
  424. data/spec/README.aws-auth.md +318 -0
  425. data/spec/README.md +64 -17
  426. data/spec/integration/auth_spec.rb +29 -9
  427. data/spec/integration/aws_auth_request_spec.rb +74 -0
  428. data/spec/integration/aws_credentials_retriever_spec.rb +103 -0
  429. data/spec/integration/change_stream_spec.rb +123 -51
  430. data/spec/integration/client_authentication_options_spec.rb +0 -37
  431. data/spec/integration/client_construction_aws_auth_spec.rb +191 -0
  432. data/spec/integration/client_construction_spec.rb +1 -1
  433. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +5 -9
  434. data/spec/integration/collection_indexes_prose_spec.rb +55 -0
  435. data/spec/integration/command_monitoring_spec.rb +30 -6
  436. data/spec/integration/command_spec.rb +11 -9
  437. data/spec/integration/connect_single_rs_name_spec.rb +5 -3
  438. data/spec/integration/connection_spec.rb +1 -0
  439. data/spec/integration/crud_spec.rb +28 -0
  440. data/spec/integration/cursor_reaping_spec.rb +14 -10
  441. data/spec/integration/fork_reconnect_spec.rb +143 -0
  442. data/spec/integration/get_more_spec.rb +10 -3
  443. data/spec/integration/heartbeat_events_spec.rb +1 -1
  444. data/spec/integration/read_preference_spec.rb +41 -11
  445. data/spec/integration/reconnect_spec.rb +2 -3
  446. data/spec/integration/retryable_errors_spec.rb +33 -14
  447. data/spec/integration/{retryable_writes_spec.rb → retryable_writes/retryable_writes_36_and_older_spec.rb} +55 -51
  448. data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +401 -0
  449. data/spec/integration/retryable_writes/shared/adds_diagnostics.rb +15 -0
  450. data/spec/integration/retryable_writes/shared/does_not_support_retries.rb +24 -0
  451. data/spec/integration/retryable_writes/shared/only_supports_legacy_retries.rb +25 -0
  452. data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +215 -0
  453. data/spec/integration/retryable_writes/shared/performs_modern_retries.rb +232 -0
  454. data/spec/integration/retryable_writes/shared/performs_no_retries.rb +110 -0
  455. data/spec/integration/retryable_writes/shared/supports_legacy_retries.rb +19 -0
  456. data/spec/integration/retryable_writes/shared/supports_modern_retries.rb +25 -0
  457. data/spec/integration/retryable_writes/shared/supports_retries.rb +16 -0
  458. data/spec/integration/sdam_error_handling_spec.rb +116 -18
  459. data/spec/integration/sdam_events_spec.rb +1 -0
  460. data/spec/integration/server_spec.rb +42 -26
  461. data/spec/integration/size_limit_spec.rb +2 -20
  462. data/spec/integration/step_down_spec.rb +15 -15
  463. data/spec/integration/transactions_api_examples_spec.rb +59 -0
  464. data/spec/integration/transactions_examples_spec.rb +5 -2
  465. data/spec/integration/x509_auth_spec.rb +109 -0
  466. data/spec/kerberos/kerberos_spec.rb +10 -6
  467. data/spec/lite_spec_helper.rb +21 -19
  468. data/spec/mongo/address/ipv4_spec.rb +1 -1
  469. data/spec/mongo/address_spec.rb +2 -2
  470. data/spec/mongo/auth/cr_spec.rb +7 -7
  471. data/spec/mongo/auth/gssapi/conversation_spec.rb +121 -0
  472. data/spec/mongo/auth/invalid_mechanism_spec.rb +1 -1
  473. data/spec/mongo/auth/ldap/conversation_spec.rb +1 -1
  474. data/spec/mongo/auth/ldap_spec.rb +3 -3
  475. data/spec/mongo/auth/scram/conversation_spec.rb +119 -334
  476. data/spec/mongo/auth/scram256/conversation_spec.rb +171 -0
  477. data/spec/mongo/auth/{scram/negotiation_spec.rb → scram_negotiation_spec.rb} +13 -8
  478. data/spec/mongo/auth/scram_spec.rb +28 -68
  479. data/spec/mongo/auth/user_spec.rb +1 -1
  480. data/spec/mongo/auth/x509/conversation_spec.rb +1 -1
  481. data/spec/mongo/auth/x509_spec.rb +8 -8
  482. data/spec/mongo/auth_spec.rb +4 -4
  483. data/spec/mongo/bulk_write_spec.rb +206 -2
  484. data/spec/mongo/client_construction_spec.rb +290 -86
  485. data/spec/mongo/client_spec.rb +21 -2
  486. data/spec/mongo/cluster_spec.rb +4 -2
  487. data/spec/mongo/collection/view/aggregation_spec.rb +6 -2
  488. data/spec/mongo/collection/view/builder/find_command_spec.rb +17 -6
  489. data/spec/mongo/collection/view/change_stream_resume_spec.rb +392 -0
  490. data/spec/mongo/collection/view/change_stream_spec.rb +0 -318
  491. data/spec/mongo/collection/view/iterable_spec.rb +38 -0
  492. data/spec/mongo/collection/view/map_reduce_spec.rb +6 -2
  493. data/spec/mongo/collection/view/readable_spec.rb +15 -1
  494. data/spec/mongo/collection/view/writable_spec.rb +208 -1
  495. data/spec/mongo/collection_spec.rb +31 -67
  496. data/spec/mongo/cursor/builder/get_more_command_spec.rb +6 -1
  497. data/spec/mongo/cursor/builder/op_get_more_spec.rb +6 -1
  498. data/spec/mongo/cursor/builder/op_kill_cursors_spec.rb +6 -1
  499. data/spec/mongo/cursor_spec.rb +9 -1
  500. data/spec/mongo/database_spec.rb +6 -2
  501. data/spec/mongo/error/operation_failure_heavy_spec.rb +58 -0
  502. data/spec/mongo/error/operation_failure_spec.rb +130 -72
  503. data/spec/mongo/error/unsupported_option_spec.rb +54 -0
  504. data/spec/mongo/grid/fs_bucket_spec.rb +18 -0
  505. data/spec/mongo/grid/stream/write_spec.rb +32 -0
  506. data/spec/mongo/index/view_spec.rb +166 -0
  507. data/spec/mongo/operation/aggregate/result_spec.rb +6 -1
  508. data/spec/mongo/operation/delete/bulk_spec.rb +18 -6
  509. data/spec/mongo/operation/delete/op_msg_spec.rb +22 -14
  510. data/spec/mongo/operation/find/legacy_spec.rb +27 -7
  511. data/spec/mongo/operation/get_more_spec.rb +6 -1
  512. data/spec/mongo/operation/insert/bulk_spec.rb +21 -7
  513. data/spec/mongo/operation/insert/command_spec.rb +4 -0
  514. data/spec/mongo/operation/insert/op_msg_spec.rb +22 -14
  515. data/spec/mongo/operation/limited_spec.rb +5 -3
  516. data/spec/mongo/operation/read_preference_legacy_spec.rb +16 -4
  517. data/spec/mongo/operation/read_preference_op_msg_spec.rb +115 -5
  518. data/spec/mongo/operation/result_spec.rb +6 -1
  519. data/spec/mongo/operation/update/bulk_spec.rb +18 -6
  520. data/spec/mongo/operation/update/command_spec.rb +4 -0
  521. data/spec/mongo/operation/update/op_msg_spec.rb +22 -14
  522. data/spec/mongo/retryable_spec.rb +71 -70
  523. data/spec/mongo/server/app_metadata_shared.rb +56 -0
  524. data/spec/mongo/server/app_metadata_spec.rb +8 -1
  525. data/spec/mongo/server/connection_auth_spec.rb +31 -12
  526. data/spec/mongo/server/connection_pool_spec.rb +0 -31
  527. data/spec/mongo/server/connection_spec.rb +118 -71
  528. data/spec/mongo/server/monitor/app_metadata_spec.rb +8 -1
  529. data/spec/mongo/server/monitor/connection_spec.rb +1 -82
  530. data/spec/mongo/server/monitor_spec.rb +76 -17
  531. data/spec/mongo/server/round_trip_time_averager_spec.rb +5 -3
  532. data/spec/mongo/server_selector/nearest_spec.rb +1 -0
  533. data/spec/mongo/server_selector/primary_preferred_spec.rb +1 -0
  534. data/spec/mongo/server_selector/primary_spec.rb +18 -0
  535. data/spec/mongo/server_selector/secondary_preferred_spec.rb +18 -1
  536. data/spec/mongo/server_selector/secondary_spec.rb +1 -0
  537. data/spec/mongo/server_selector_spec.rb +0 -1
  538. data/spec/mongo/session/session_pool_spec.rb +7 -3
  539. data/spec/mongo/socket/ssl_spec.rb +2 -2
  540. data/spec/mongo/socket/tcp_spec.rb +2 -2
  541. data/spec/mongo/socket/unix_spec.rb +2 -2
  542. data/spec/mongo/socket_spec.rb +9 -9
  543. data/spec/mongo/timeout_spec.rb +22 -68
  544. data/spec/mongo/uri_spec.rb +21 -6
  545. data/spec/runners/auth.rb +5 -6
  546. data/spec/runners/change_streams/outcome.rb +42 -0
  547. data/spec/runners/change_streams/spec.rb +57 -0
  548. data/spec/runners/change_streams/test.rb +229 -0
  549. data/spec/runners/cmap/verifier.rb +1 -1
  550. data/spec/runners/command_monitoring.rb +1 -1
  551. data/spec/runners/connection_string.rb +3 -2
  552. data/spec/runners/crud.rb +2 -2
  553. data/spec/runners/crud/context.rb +1 -1
  554. data/spec/runners/crud/operation.rb +120 -30
  555. data/spec/runners/crud/outcome.rb +1 -1
  556. data/spec/runners/crud/spec.rb +1 -0
  557. data/spec/runners/crud/test.rb +8 -26
  558. data/spec/runners/crud/test_base.rb +47 -0
  559. data/spec/runners/crud/verifier.rb +21 -3
  560. data/spec/runners/gridfs.rb +1 -1
  561. data/spec/runners/{server_discovery_and_monitoring.rb → sdam.rb} +41 -22
  562. data/spec/runners/sdam/verifier.rb +26 -8
  563. data/spec/runners/sdam_monitoring.rb +1 -1
  564. data/spec/runners/transactions.rb +1 -2
  565. data/spec/runners/transactions/context.rb +1 -1
  566. data/spec/runners/transactions/operation.rb +5 -1
  567. data/spec/runners/transactions/spec.rb +1 -1
  568. data/spec/runners/transactions/test.rb +48 -54
  569. data/spec/spec_tests/auth_spec.rb +2 -0
  570. data/spec/spec_tests/change_streams_spec.rb +39 -4
  571. data/spec/spec_tests/client_side_encryption_spec.rb +3 -0
  572. data/spec/spec_tests/cmap_spec.rb +5 -0
  573. data/spec/spec_tests/command_monitoring_spec.rb +3 -0
  574. data/spec/spec_tests/connection_string_spec.rb +2 -0
  575. data/spec/spec_tests/crud_spec.rb +2 -0
  576. data/spec/spec_tests/data/auth/connection-string.yml +57 -1
  577. data/spec/spec_tests/data/change_streams/change-streams-errors.yml +30 -0
  578. data/spec/spec_tests/data/change_streams/change-streams-resume-errorLabels.yml +1105 -0
  579. data/spec/spec_tests/data/change_streams/change-streams-resume-whitelist.yml +1107 -0
  580. data/spec/spec_tests/data/change_streams/change-streams.yml +5 -4
  581. data/spec/spec_tests/data/crud_v2/aggregate-merge.yml +1 -1
  582. data/spec/spec_tests/data/crud_v2/bulkWrite-arrayFilters.yml +33 -11
  583. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-clientError.yml +63 -0
  584. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-serverError.yml +92 -0
  585. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint.yml +103 -0
  586. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-clientError.yml +90 -0
  587. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-serverError.yml +147 -0
  588. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint.yml +164 -0
  589. data/spec/spec_tests/data/crud_v2/deleteMany-hint-clientError.yml +43 -0
  590. data/spec/spec_tests/data/crud_v2/deleteMany-hint-serverError.yml +62 -0
  591. data/spec/spec_tests/data/crud_v2/deleteMany-hint.yml +58 -0
  592. data/spec/spec_tests/data/crud_v2/deleteOne-hint-clientError.yml +41 -0
  593. data/spec/spec_tests/data/crud_v2/deleteOne-hint-serverError.yml +60 -0
  594. data/spec/spec_tests/data/crud_v2/deleteOne-hint.yml +57 -0
  595. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-clientError.yml +28 -0
  596. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-serverError.yml +44 -0
  597. data/spec/spec_tests/data/crud_v2/find-allowdiskuse.yml +50 -0
  598. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-clientError.yml +45 -0
  599. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-serverError.yml +60 -0
  600. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint.yml +56 -0
  601. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-clientError.yml +40 -0
  602. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-serverError.yml +59 -0
  603. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint.yml +55 -0
  604. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-clientError.yml +40 -0
  605. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-serverError.yml +58 -0
  606. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint.yml +55 -0
  607. data/spec/spec_tests/data/crud_v2/replaceOne-hint.yml +61 -0
  608. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-delete-hint-clientError.yml +60 -0
  609. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-update-hint-clientError.yml +88 -0
  610. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteMany-hint-clientError.yml +40 -0
  611. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteOne-hint-clientError.yml +38 -0
  612. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndDelete-hint-clientError.yml +42 -0
  613. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndReplace-hint-clientError.yml +40 -0
  614. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndUpdate-hint-clientError.yml +40 -0
  615. data/spec/spec_tests/data/crud_v2/unacknowledged-replaceOne-hint-clientError.yml +40 -0
  616. data/spec/spec_tests/data/crud_v2/unacknowledged-updateMany-hint-clientError.yml +43 -0
  617. data/spec/spec_tests/data/crud_v2/unacknowledged-updateOne-hint-clientError.yml +40 -0
  618. data/spec/spec_tests/data/crud_v2/updateMany-hint-clientError.yml +45 -0
  619. data/spec/spec_tests/data/crud_v2/updateMany-hint-serverError.yml +66 -0
  620. data/spec/spec_tests/data/crud_v2/updateMany-hint.yml +65 -0
  621. data/spec/spec_tests/data/crud_v2/updateOne-hint-clientError.yml +43 -0
  622. data/spec/spec_tests/data/crud_v2/updateOne-hint-serverError.yml +62 -0
  623. data/spec/spec_tests/data/crud_v2/updateOne-hint.yml +61 -0
  624. data/spec/spec_tests/data/crud_v2/updateWithPipelines.yml +65 -0
  625. data/spec/spec_tests/data/dns_seedlist_discovery/direct-connection-false.yml +10 -0
  626. data/spec/spec_tests/data/dns_seedlist_discovery/direct-connection-true.yml +5 -0
  627. data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-2.6.yml +215 -0
  628. data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-3.2.yml +58 -0
  629. data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-3.4.yml +95 -0
  630. data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-4.2.yml +36 -0
  631. data/spec/spec_tests/data/retryable_writes/bulkWrite-errorLabels.yml +77 -0
  632. data/spec/spec_tests/data/retryable_writes/bulkWrite-serverErrors.yml +37 -0
  633. data/spec/spec_tests/data/retryable_writes/deleteOne-errorLabels.yml +48 -0
  634. data/spec/spec_tests/data/retryable_writes/deleteOne-serverErrors.yml +22 -0
  635. data/spec/spec_tests/data/retryable_writes/findOneAndDelete-errorLabels.yml +49 -0
  636. data/spec/spec_tests/data/retryable_writes/findOneAndDelete-serverErrors.yml +23 -0
  637. data/spec/spec_tests/data/retryable_writes/findOneAndReplace-errorLabels.yml +52 -0
  638. data/spec/spec_tests/data/retryable_writes/findOneAndReplace-serverErrors.yml +25 -0
  639. data/spec/spec_tests/data/retryable_writes/findOneAndUpdate-errorLabels.yml +52 -0
  640. data/spec/spec_tests/data/retryable_writes/findOneAndUpdate-serverErrors.yml +24 -0
  641. data/spec/spec_tests/data/retryable_writes/insertMany-errorLabels.yml +54 -0
  642. data/spec/spec_tests/data/retryable_writes/insertMany-serverErrors.yml +24 -0
  643. data/spec/spec_tests/data/retryable_writes/insertOne-errorLabels.yml +44 -0
  644. data/spec/spec_tests/data/retryable_writes/insertOne-serverErrors.yml +69 -0
  645. data/spec/spec_tests/data/retryable_writes/replaceOne-errorLabels.yml +53 -0
  646. data/spec/spec_tests/data/retryable_writes/replaceOne-serverErrors.yml +23 -0
  647. data/spec/spec_tests/data/retryable_writes/updateOne-errorLabels.yml +53 -0
  648. data/spec/spec_tests/data/retryable_writes/updateOne-serverErrors.yml +23 -0
  649. data/spec/spec_tests/data/sdam/errors/error_handling_handshake.yml +54 -0
  650. data/spec/spec_tests/data/sdam/errors/non-stale-network-error.yml +46 -0
  651. data/spec/spec_tests/data/sdam/errors/non-stale-network-timeout-error.yml +37 -0
  652. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-InterruptedAtShutdown.yml +60 -0
  653. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-InterruptedDueToReplStateChange.yml +60 -0
  654. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotMaster.yml +60 -0
  655. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotMasterNoSlaveOk.yml +60 -0
  656. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotMasterOrSecondary.yml +60 -0
  657. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-PrimarySteppedDown.yml +60 -0
  658. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-ShutdownInProgress.yml +60 -0
  659. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-InterruptedAtShutdown.yml +51 -0
  660. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-InterruptedDueToReplStateChange.yml +51 -0
  661. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotMaster.yml +51 -0
  662. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotMasterNoSlaveOk.yml +51 -0
  663. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotMasterOrSecondary.yml +51 -0
  664. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-PrimarySteppedDown.yml +51 -0
  665. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-ShutdownInProgress.yml +51 -0
  666. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-InterruptedAtShutdown.yml +60 -0
  667. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-InterruptedDueToReplStateChange.yml +60 -0
  668. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotMaster.yml +60 -0
  669. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotMasterNoSlaveOk.yml +60 -0
  670. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotMasterOrSecondary.yml +60 -0
  671. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-PrimarySteppedDown.yml +60 -0
  672. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-ShutdownInProgress.yml +60 -0
  673. data/spec/spec_tests/data/sdam/errors/post-42-InterruptedAtShutdown.yml +46 -0
  674. data/spec/spec_tests/data/sdam/errors/post-42-InterruptedDueToReplStateChange.yml +46 -0
  675. data/spec/spec_tests/data/sdam/errors/post-42-NotMaster.yml +46 -0
  676. data/spec/spec_tests/data/sdam/errors/post-42-NotMasterNoSlaveOk.yml +46 -0
  677. data/spec/spec_tests/data/sdam/errors/post-42-NotMasterOrSecondary.yml +46 -0
  678. data/spec/spec_tests/data/sdam/errors/post-42-PrimarySteppedDown.yml +46 -0
  679. data/spec/spec_tests/data/sdam/errors/post-42-ShutdownInProgress.yml +46 -0
  680. data/spec/spec_tests/data/sdam/errors/pre-42-InterruptedAtShutdown.yml +46 -0
  681. data/spec/spec_tests/data/sdam/errors/pre-42-InterruptedDueToReplStateChange.yml +46 -0
  682. data/spec/spec_tests/data/sdam/errors/pre-42-NotMaster.yml +46 -0
  683. data/spec/spec_tests/data/sdam/errors/pre-42-NotMasterNoSlaveOk.yml +46 -0
  684. data/spec/spec_tests/data/sdam/errors/pre-42-NotMasterOrSecondary.yml +46 -0
  685. data/spec/spec_tests/data/sdam/errors/pre-42-PrimarySteppedDown.yml +46 -0
  686. data/spec/spec_tests/data/sdam/errors/pre-42-ShutdownInProgress.yml +46 -0
  687. data/spec/spec_tests/data/sdam/errors/stale-generation-InterruptedAtShutdown.yml +89 -0
  688. data/spec/spec_tests/data/sdam/errors/stale-generation-InterruptedDueToReplStateChange.yml +89 -0
  689. data/spec/spec_tests/data/sdam/errors/stale-generation-NotMaster.yml +89 -0
  690. data/spec/spec_tests/data/sdam/errors/stale-generation-NotMasterNoSlaveOk.yml +89 -0
  691. data/spec/spec_tests/data/sdam/errors/stale-generation-NotMasterOrSecondary.yml +89 -0
  692. data/spec/spec_tests/data/sdam/errors/stale-generation-PrimarySteppedDown.yml +89 -0
  693. data/spec/spec_tests/data/sdam/errors/stale-generation-ShutdownInProgress.yml +89 -0
  694. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-InterruptedAtShutdown.yml +89 -0
  695. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-InterruptedDueToReplStateChange.yml +89 -0
  696. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotMaster.yml +89 -0
  697. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotMasterNoSlaveOk.yml +89 -0
  698. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotMasterOrSecondary.yml +89 -0
  699. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-PrimarySteppedDown.yml +89 -0
  700. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-ShutdownInProgress.yml +89 -0
  701. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-network.yml +80 -0
  702. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-timeout.yml +80 -0
  703. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-InterruptedAtShutdown.yml +89 -0
  704. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-InterruptedDueToReplStateChange.yml +89 -0
  705. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotMaster.yml +89 -0
  706. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotMasterNoSlaveOk.yml +89 -0
  707. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotMasterOrSecondary.yml +89 -0
  708. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-PrimarySteppedDown.yml +89 -0
  709. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-ShutdownInProgress.yml +89 -0
  710. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-network.yml +80 -0
  711. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-timeout.yml +80 -0
  712. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-InterruptedAtShutdown.yml +64 -0
  713. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-InterruptedDueToReplStateChange.yml +64 -0
  714. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotMaster.yml +64 -0
  715. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotMasterNoSlaveOk.yml +64 -0
  716. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotMasterOrSecondary.yml +64 -0
  717. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-PrimarySteppedDown.yml +64 -0
  718. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-ShutdownInProgress.yml +64 -0
  719. data/spec/spec_tests/data/sdam/rs/compatible.yml +2 -0
  720. data/spec/spec_tests/data/sdam/rs/compatible_unknown.yml +2 -0
  721. data/spec/spec_tests/data/sdam/rs/discover_arbiters.yml +2 -2
  722. data/spec/spec_tests/data/sdam/rs/discover_arbiters_replicaset.yml +43 -0
  723. data/spec/spec_tests/data/sdam/rs/discover_ghost.yml +35 -0
  724. data/spec/spec_tests/data/sdam/rs/{ghost_discovered.yml → discover_ghost_replicaset.yml} +1 -1
  725. data/spec/spec_tests/data/sdam/rs/discover_hidden.yml +50 -0
  726. data/spec/spec_tests/data/sdam/rs/discover_hidden_replicaset.yml +50 -0
  727. data/spec/spec_tests/data/sdam/rs/discover_passives.yml +2 -2
  728. data/spec/spec_tests/data/sdam/rs/discover_passives_replicaset.yml +81 -0
  729. data/spec/spec_tests/data/sdam/rs/discover_primary.yml +2 -2
  730. data/spec/spec_tests/data/sdam/rs/discover_primary_replicaset.yml +42 -0
  731. data/spec/spec_tests/data/sdam/rs/discover_rsother.yml +49 -0
  732. data/spec/spec_tests/data/sdam/rs/{rsother_discovered.yml → discover_rsother_replicaset.yml} +1 -1
  733. data/spec/spec_tests/data/sdam/rs/discover_secondary.yml +2 -2
  734. data/spec/spec_tests/data/sdam/rs/discover_secondary_replicaset.yml +43 -0
  735. data/spec/spec_tests/data/sdam/rs/incompatible_arbiter.yml +2 -0
  736. data/spec/spec_tests/data/sdam/rs/incompatible_ghost.yml +2 -0
  737. data/spec/spec_tests/data/sdam/rs/incompatible_other.yml +2 -0
  738. data/spec/spec_tests/data/sdam/rs/primary_mismatched_me.yml +23 -27
  739. data/spec/spec_tests/data/sdam/rs/primary_to_no_primary_mismatched_me.yml +79 -55
  740. data/spec/spec_tests/data/sdam/rs/replicaset_rsnp.yml +20 -0
  741. data/spec/spec_tests/data/sdam/rs/secondary_mismatched_me.yml +3 -2
  742. data/spec/spec_tests/data/sdam/rs/too_new.yml +2 -0
  743. data/spec/spec_tests/data/sdam/rs/topology_version_equal.yml +66 -0
  744. data/spec/spec_tests/data/sdam/rs/topology_version_greater.yml +189 -0
  745. data/spec/spec_tests/data/sdam/rs/topology_version_less.yml +62 -0
  746. data/spec/spec_tests/data/sdam/sharded/discover_single_mongos.yml +23 -0
  747. data/spec/spec_tests/data/sdam/single/direct_connection_external_ip.yml +1 -1
  748. data/spec/spec_tests/data/sdam/single/direct_connection_mongos.yml +2 -2
  749. data/spec/spec_tests/data/sdam/single/direct_connection_replicaset.yml +22 -0
  750. data/spec/spec_tests/data/sdam/single/direct_connection_rsarbiter.yml +2 -2
  751. data/spec/spec_tests/data/sdam/single/direct_connection_rsprimary.yml +2 -2
  752. data/spec/spec_tests/data/sdam/single/direct_connection_rssecondary.yml +2 -2
  753. data/spec/spec_tests/data/sdam/single/direct_connection_slave.yml +1 -1
  754. data/spec/spec_tests/data/sdam/single/direct_connection_standalone.yml +2 -2
  755. data/spec/spec_tests/data/sdam/single/{unavailable_seed.yml → direct_connection_unavailable_seed.yml} +2 -2
  756. data/spec/spec_tests/data/sdam/single/direct_connection_wrong_set_name.yml +38 -0
  757. data/spec/spec_tests/data/sdam/single/discover_standalone.yml +34 -0
  758. data/spec/spec_tests/data/sdam/single/discover_unavailable_seed.yml +28 -0
  759. data/spec/spec_tests/data/sdam/single/too_old_then_upgraded.yml +46 -0
  760. data/spec/spec_tests/data/transactions/create-collection.yml +131 -0
  761. data/spec/spec_tests/data/transactions/create-index.yml +152 -0
  762. data/spec/spec_tests/data/transactions/error-labels.yml +87 -21
  763. data/spec/spec_tests/data/transactions/mongos-recovery-token.yml +1 -0
  764. data/spec/spec_tests/data/transactions/retryable-abort-errorLabels.yml +124 -0
  765. data/spec/spec_tests/data/transactions/retryable-abort.yml +17 -2
  766. data/spec/spec_tests/data/transactions/retryable-commit-errorLabels.yml +132 -0
  767. data/spec/spec_tests/data/transactions/retryable-commit.yml +24 -9
  768. data/spec/spec_tests/data/uri_options/connection-options.yml +43 -0
  769. data/spec/spec_tests/data/uri_options/ruby-auth-options.yml +12 -0
  770. data/spec/spec_tests/data/uri_options/ruby-connection-options.yml +57 -0
  771. data/spec/spec_tests/dns_seedlist_discovery_spec.rb +3 -1
  772. data/spec/spec_tests/gridfs_spec.rb +2 -0
  773. data/spec/spec_tests/max_staleness_spec.rb +3 -1
  774. data/spec/spec_tests/read_write_concern_connection_string_spec.rb +2 -0
  775. data/spec/spec_tests/read_write_concern_operaton_spec.rb +10 -0
  776. data/spec/spec_tests/retryable_reads_spec.rb +2 -0
  777. data/spec/spec_tests/retryable_writes_spec.rb +8 -1
  778. data/spec/spec_tests/sdam_monitoring_spec.rb +3 -1
  779. data/spec/spec_tests/sdam_spec.rb +70 -1
  780. data/spec/spec_tests/server_selection_rtt_spec.rb +2 -0
  781. data/spec/spec_tests/server_selection_spec.rb +2 -0
  782. data/spec/spec_tests/transactions_api_spec.rb +5 -0
  783. data/spec/spec_tests/transactions_spec.rb +5 -0
  784. data/spec/spec_tests/uri_options_spec.rb +2 -0
  785. data/spec/stress/cleanup_spec.rb +43 -0
  786. data/spec/stress/connection_pool_stress_spec.rb +1 -5
  787. data/spec/stress/connection_pool_timing_spec.rb +3 -6
  788. data/spec/stress/fork_reconnect_stress_spec.rb +109 -0
  789. data/spec/support/authorization.rb +1 -11
  790. data/spec/support/aws_utils.rb +62 -0
  791. data/spec/support/aws_utils/base.rb +134 -0
  792. data/spec/support/aws_utils/inspector.rb +224 -0
  793. data/spec/support/aws_utils/orchestrator.rb +370 -0
  794. data/spec/support/aws_utils/provisioner.rb +360 -0
  795. data/spec/support/background_thread_registry.rb +6 -2
  796. data/spec/support/client_registry.rb +5 -24
  797. data/spec/support/cluster_config.rb +1 -0
  798. data/spec/support/common_shortcuts.rb +43 -0
  799. data/spec/support/constraints.rb +27 -7
  800. data/spec/support/crypt.rb +1 -1
  801. data/spec/support/event_subscriber.rb +94 -84
  802. data/spec/support/lite_constraints.rb +47 -0
  803. data/spec/support/shared/scram_conversation.rb +100 -0
  804. data/spec/support/shared/server_selector.rb +81 -1
  805. data/spec/support/shared/session.rb +29 -21
  806. data/spec/support/spec_config.rb +39 -9
  807. data/spec/support/spec_setup.rb +8 -4
  808. data/spec/support/utils.rb +115 -24
  809. metadata +1134 -744
  810. metadata.gz.sig +0 -0
  811. data/lib/mongo/server/connectable.rb +0 -107
  812. data/spec/integration/bulk_write_spec.rb +0 -19
  813. data/spec/integration/grid_fs_bucket_spec.rb +0 -48
  814. data/spec/integration/zlib_compression_spec.rb +0 -25
  815. data/spec/runners/change_streams.rb +0 -262
  816. data/spec/runners/change_streams/operation.rb +0 -89
  817. data/spec/spec_tests/data/sdam/sharded/ruby_discovered_single_mongos.yml +0 -27
@@ -1,5 +1,8 @@
1
1
  require 'spec_helper'
2
2
 
3
+ require 'runners/crud'
4
+ require 'runners/transactions'
5
+
3
6
  describe 'Client-Side Encryption' do
4
7
  require_libmongocrypt
5
8
  require_enterprise
@@ -1,5 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
+ require 'runners/cmap'
4
+
3
5
  # Temporary scopes in all of the tests are needed to exclude endSessions
4
6
  # commands being sent during cleanup from interfering with assertions.
5
7
 
@@ -62,6 +64,9 @@ describe 'Cmap' do
62
64
  let!(:result) do
63
65
  socket = double('fake socket')
64
66
  allow(socket).to receive(:close)
67
+ # When linting, connection pool ensures the connection returned
68
+ # is connected.
69
+ allow(socket).to receive(:alive?).and_return(true)
65
70
 
66
71
  allow_any_instance_of(Mongo::Server::Connection).to receive(:do_connect).and_return(socket)
67
72
  spec.run
@@ -1,5 +1,8 @@
1
1
  require 'spec_helper'
2
2
 
3
+ require 'runners/crud'
4
+ require 'runners/command_monitoring'
5
+
3
6
  describe 'Command Monitoring Events' do
4
7
 
5
8
  COMMAND_MONITORING_TESTS.each do |file|
@@ -1,5 +1,7 @@
1
1
  require 'lite_spec_helper'
2
2
 
3
+ require 'runners/connection_string'
4
+
3
5
  describe 'Connection String' do
4
6
  define_connection_string_spec_tests(CONNECTION_STRING_TESTS)
5
7
  end
@@ -1,5 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
+ require 'runners/crud'
4
+
3
5
  describe 'CRUD v1 spec tests' do
4
6
  define_crud_spec_tests(CRUD_TESTS) do |spec, req, test|
5
7
  let(:client) { authorized_client }
@@ -175,6 +175,16 @@ tests:
175
175
  source: "$external"
176
176
  mechanism: "MONGODB-X509"
177
177
  mechanism_properties: ~
178
+ -
179
+ description: "should recognize the mechanism with no username when auth source is explicitly specified (MONGODB-X509)"
180
+ uri: "mongodb://localhost/?authMechanism=MONGODB-X509&authSource=$external"
181
+ valid: true
182
+ credential:
183
+ username: ~
184
+ password: ~
185
+ source: "$external"
186
+ mechanism: "MONGODB-X509"
187
+ mechanism_properties: ~
178
188
  -
179
189
  description: "should throw an exception if supplied a password (MONGODB-X509)"
180
190
  uri: "mongodb://user:password@localhost/?authMechanism=MONGODB-X509"
@@ -296,7 +306,7 @@ tests:
296
306
  valid: true
297
307
  credential: ~
298
308
  -
299
- description: "authSource without username doesn't create credential"
309
+ description: "authSource without username doesn't create credential (default mechanism)"
300
310
  uri: "mongodb://localhost/?authSource=foo"
301
311
  valid: true
302
312
  credential: ~
@@ -308,3 +318,49 @@ tests:
308
318
  description: "should throw an exception if no username/password provided (userinfo implies default mechanism)"
309
319
  uri: "mongodb://:@localhost.com/"
310
320
  valid: false
321
+ -
322
+ description: "should recognise the mechanism (MONGODB-AWS)"
323
+ uri: "mongodb://localhost/?authMechanism=MONGODB-AWS"
324
+ valid: true
325
+ credential:
326
+ username: ~
327
+ password: ~
328
+ source: "$external"
329
+ mechanism: "MONGODB-AWS"
330
+ mechanism_properties: ~
331
+ -
332
+ description: "should recognise the mechanism when auth source is explicitly specified (MONGODB-AWS)"
333
+ uri: "mongodb://localhost/?authMechanism=MONGODB-AWS&authSource=$external"
334
+ valid: true
335
+ credential:
336
+ username: ~
337
+ password: ~
338
+ source: "$external"
339
+ mechanism: "MONGODB-AWS"
340
+ mechanism_properties: ~
341
+ -
342
+ description: "should throw an exception if username and no password (MONGODB-AWS)"
343
+ uri: "mongodb://user@localhost/?authMechanism=MONGODB-AWS"
344
+ valid: false
345
+ credential: ~
346
+ -
347
+ description: "should use username and password if specified (MONGODB-AWS)"
348
+ uri: "mongodb://user%21%40%23%24%25%5E%26%2A%28%29_%2B:pass%21%40%23%24%25%5E%26%2A%28%29_%2B@localhost/?authMechanism=MONGODB-AWS"
349
+ valid: true
350
+ credential:
351
+ username: "user!@#$%^&*()_+"
352
+ password: "pass!@#$%^&*()_+"
353
+ source: "$external"
354
+ mechanism: "MONGODB-AWS"
355
+ mechanism_properties: ~
356
+ -
357
+ description: "should use username, password and session token if specified (MONGODB-AWS)"
358
+ uri: "mongodb://user:password@localhost/?authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:token%21%40%23%24%25%5E%26%2A%28%29_%2B"
359
+ valid: true
360
+ credential:
361
+ username: "user"
362
+ password: "password"
363
+ source: "$external"
364
+ mechanism: "MONGODB-AWS"
365
+ mechanism_properties:
366
+ AWS_SESSION_TOKEN: "token!@#$%^&*()_+"
@@ -74,3 +74,33 @@ tests:
74
74
  error:
75
75
  code: 280
76
76
  errorLabels: [ "NonResumableChangeStreamError" ]
77
+
78
+ -
79
+ description: change stream errors on MaxTimeMSExpired
80
+ minServerVersion: "4.2"
81
+ failPoint:
82
+ configureFailPoint: failCommand
83
+ mode: { times: 1 }
84
+ data:
85
+ failCommands: ["getMore"]
86
+ errorCode: 50 # An error code that's not on the old blacklist or whitelist
87
+ closeConnection: false
88
+ target: collection
89
+ topology:
90
+ - replicaset
91
+ - sharded
92
+ changeStreamPipeline:
93
+ -
94
+ $project: { _id: 0 }
95
+ changeStreamOptions: {}
96
+ operations:
97
+ -
98
+ database: *database_name
99
+ collection: *collection_name
100
+ name: insertOne
101
+ arguments:
102
+ document:
103
+ z: 3
104
+ result:
105
+ error:
106
+ code: 50
@@ -0,0 +1,1105 @@
1
+ # Tests for resume behavior on server versions that support the ResumableChangeStreamError label
2
+ collection_name: &collection_name "test"
3
+ database_name: &database_name "change-stream-tests"
4
+ tests:
5
+ -
6
+ description: "change stream resumes after HostUnreachable"
7
+ minServerVersion: "4.3.1"
8
+ failPoint:
9
+ configureFailPoint: failGetMoreAfterCursorCheckout # SERVER-46091 explains why a new failpoint was needed
10
+ mode: { times: 1 }
11
+ data:
12
+ errorCode: 6
13
+ closeConnection: false
14
+ target: collection
15
+ topology:
16
+ - replicaset
17
+ - sharded
18
+ changeStreamPipeline: []
19
+ changeStreamOptions: {}
20
+ operations:
21
+ -
22
+ database: *database_name
23
+ collection: *collection_name
24
+ name: insertOne
25
+ arguments:
26
+ document:
27
+ x: 1
28
+ expectations:
29
+ -
30
+ command_started_event:
31
+ command:
32
+ aggregate: *collection_name
33
+ cursor: {}
34
+ pipeline:
35
+ -
36
+ $changeStream: {}
37
+ command_name: aggregate
38
+ database_name: *database_name
39
+ -
40
+ command_started_event:
41
+ command:
42
+ getMore: 42
43
+ collection: *collection_name
44
+ command_name: getMore
45
+ database_name: *database_name
46
+ -
47
+ command_started_event:
48
+ command:
49
+ aggregate: *collection_name
50
+ cursor: {}
51
+ pipeline:
52
+ -
53
+ $changeStream: {}
54
+ command_name: aggregate
55
+ database_name: *database_name
56
+ result:
57
+ success:
58
+ -
59
+ _id: "42"
60
+ documentKey: "42"
61
+ operationType: insert
62
+ ns:
63
+ db: *database_name
64
+ coll: *collection_name
65
+ fullDocument:
66
+ x:
67
+ $numberInt: "1"
68
+ -
69
+ description: "change stream resumes after HostNotFound"
70
+ minServerVersion: "4.3.1"
71
+ failPoint:
72
+ configureFailPoint: failGetMoreAfterCursorCheckout
73
+ mode: { times: 1 }
74
+ data:
75
+ errorCode: 7
76
+ closeConnection: false
77
+ target: collection
78
+ topology:
79
+ - replicaset
80
+ - sharded
81
+ changeStreamPipeline: []
82
+ changeStreamOptions: {}
83
+ operations:
84
+ -
85
+ database: *database_name
86
+ collection: *collection_name
87
+ name: insertOne
88
+ arguments:
89
+ document:
90
+ x: 1
91
+ expectations:
92
+ -
93
+ command_started_event:
94
+ command:
95
+ aggregate: *collection_name
96
+ cursor: {}
97
+ pipeline:
98
+ -
99
+ $changeStream: {}
100
+ command_name: aggregate
101
+ database_name: *database_name
102
+ -
103
+ command_started_event:
104
+ command:
105
+ getMore: 42
106
+ collection: *collection_name
107
+ command_name: getMore
108
+ database_name: *database_name
109
+ -
110
+ command_started_event:
111
+ command:
112
+ aggregate: *collection_name
113
+ cursor: {}
114
+ pipeline:
115
+ -
116
+ $changeStream: {}
117
+ command_name: aggregate
118
+ database_name: *database_name
119
+ result:
120
+ success:
121
+ -
122
+ _id: "42"
123
+ documentKey: "42"
124
+ operationType: insert
125
+ ns:
126
+ db: *database_name
127
+ coll: *collection_name
128
+ fullDocument:
129
+ x:
130
+ $numberInt: "1"
131
+ -
132
+ description: "change stream resumes after NetworkTimeout"
133
+ minServerVersion: "4.3.1"
134
+ failPoint:
135
+ configureFailPoint: failGetMoreAfterCursorCheckout
136
+ mode: { times: 1 }
137
+ data:
138
+ errorCode: 89
139
+ closeConnection: false
140
+ target: collection
141
+ topology:
142
+ - replicaset
143
+ - sharded
144
+ changeStreamPipeline: []
145
+ changeStreamOptions: {}
146
+ operations:
147
+ -
148
+ database: *database_name
149
+ collection: *collection_name
150
+ name: insertOne
151
+ arguments:
152
+ document:
153
+ x: 1
154
+ expectations:
155
+ -
156
+ command_started_event:
157
+ command:
158
+ aggregate: *collection_name
159
+ cursor: {}
160
+ pipeline:
161
+ -
162
+ $changeStream: {}
163
+ command_name: aggregate
164
+ database_name: *database_name
165
+ -
166
+ command_started_event:
167
+ command:
168
+ getMore: 42
169
+ collection: *collection_name
170
+ command_name: getMore
171
+ database_name: *database_name
172
+ -
173
+ command_started_event:
174
+ command:
175
+ aggregate: *collection_name
176
+ cursor: {}
177
+ pipeline:
178
+ -
179
+ $changeStream: {}
180
+ command_name: aggregate
181
+ database_name: *database_name
182
+ result:
183
+ success:
184
+ -
185
+ _id: "42"
186
+ documentKey: "42"
187
+ operationType: insert
188
+ ns:
189
+ db: *database_name
190
+ coll: *collection_name
191
+ fullDocument:
192
+ x:
193
+ $numberInt: "1"
194
+ -
195
+ description: "change stream resumes after ShutdownInProgress"
196
+ minServerVersion: "4.3.1"
197
+ failPoint:
198
+ configureFailPoint: failGetMoreAfterCursorCheckout
199
+ mode: { times: 1 }
200
+ data:
201
+ errorCode: 91
202
+ closeConnection: false
203
+ target: collection
204
+ topology:
205
+ - replicaset
206
+ - sharded
207
+ changeStreamPipeline: []
208
+ changeStreamOptions: {}
209
+ operations:
210
+ -
211
+ database: *database_name
212
+ collection: *collection_name
213
+ name: insertOne
214
+ arguments:
215
+ document:
216
+ x: 1
217
+ expectations:
218
+ -
219
+ command_started_event:
220
+ command:
221
+ aggregate: *collection_name
222
+ cursor: {}
223
+ pipeline:
224
+ -
225
+ $changeStream: {}
226
+ command_name: aggregate
227
+ database_name: *database_name
228
+ -
229
+ command_started_event:
230
+ command:
231
+ getMore: 42
232
+ collection: *collection_name
233
+ command_name: getMore
234
+ database_name: *database_name
235
+ -
236
+ command_started_event:
237
+ command:
238
+ aggregate: *collection_name
239
+ cursor: {}
240
+ pipeline:
241
+ -
242
+ $changeStream: {}
243
+ command_name: aggregate
244
+ database_name: *database_name
245
+ result:
246
+ success:
247
+ -
248
+ _id: "42"
249
+ documentKey: "42"
250
+ operationType: insert
251
+ ns:
252
+ db: *database_name
253
+ coll: *collection_name
254
+ fullDocument:
255
+ x:
256
+ $numberInt: "1"
257
+ -
258
+ description: "change stream resumes after PrimarySteppedDown"
259
+ minServerVersion: "4.3.1"
260
+ failPoint:
261
+ configureFailPoint: failGetMoreAfterCursorCheckout
262
+ mode: { times: 1 }
263
+ data:
264
+ errorCode: 189
265
+ closeConnection: false
266
+ target: collection
267
+ topology:
268
+ - replicaset
269
+ - sharded
270
+ changeStreamPipeline: []
271
+ changeStreamOptions: {}
272
+ operations:
273
+ -
274
+ database: *database_name
275
+ collection: *collection_name
276
+ name: insertOne
277
+ arguments:
278
+ document:
279
+ x: 1
280
+ expectations:
281
+ -
282
+ command_started_event:
283
+ command:
284
+ aggregate: *collection_name
285
+ cursor: {}
286
+ pipeline:
287
+ -
288
+ $changeStream: {}
289
+ command_name: aggregate
290
+ database_name: *database_name
291
+ -
292
+ command_started_event:
293
+ command:
294
+ getMore: 42
295
+ collection: *collection_name
296
+ command_name: getMore
297
+ database_name: *database_name
298
+ -
299
+ command_started_event:
300
+ command:
301
+ aggregate: *collection_name
302
+ cursor: {}
303
+ pipeline:
304
+ -
305
+ $changeStream: {}
306
+ command_name: aggregate
307
+ database_name: *database_name
308
+ result:
309
+ success:
310
+ -
311
+ _id: "42"
312
+ documentKey: "42"
313
+ operationType: insert
314
+ ns:
315
+ db: *database_name
316
+ coll: *collection_name
317
+ fullDocument:
318
+ x:
319
+ $numberInt: "1"
320
+ -
321
+ description: "change stream resumes after ExceededTimeLimit"
322
+ minServerVersion: "4.3.1"
323
+ failPoint:
324
+ configureFailPoint: failGetMoreAfterCursorCheckout
325
+ mode: { times: 1 }
326
+ data:
327
+ errorCode: 262
328
+ closeConnection: false
329
+ target: collection
330
+ topology:
331
+ - replicaset
332
+ - sharded
333
+ changeStreamPipeline: []
334
+ changeStreamOptions: {}
335
+ operations:
336
+ -
337
+ database: *database_name
338
+ collection: *collection_name
339
+ name: insertOne
340
+ arguments:
341
+ document:
342
+ x: 1
343
+ expectations:
344
+ -
345
+ command_started_event:
346
+ command:
347
+ aggregate: *collection_name
348
+ cursor: {}
349
+ pipeline:
350
+ -
351
+ $changeStream: {}
352
+ command_name: aggregate
353
+ database_name: *database_name
354
+ -
355
+ command_started_event:
356
+ command:
357
+ getMore: 42
358
+ collection: *collection_name
359
+ command_name: getMore
360
+ database_name: *database_name
361
+ -
362
+ command_started_event:
363
+ command:
364
+ aggregate: *collection_name
365
+ cursor: {}
366
+ pipeline:
367
+ -
368
+ $changeStream: {}
369
+ command_name: aggregate
370
+ database_name: *database_name
371
+ result:
372
+ success:
373
+ -
374
+ _id: "42"
375
+ documentKey: "42"
376
+ operationType: insert
377
+ ns:
378
+ db: *database_name
379
+ coll: *collection_name
380
+ fullDocument:
381
+ x:
382
+ $numberInt: "1"
383
+ -
384
+ description: "change stream resumes after SocketException"
385
+ minServerVersion: "4.3.1"
386
+ failPoint:
387
+ configureFailPoint: failGetMoreAfterCursorCheckout
388
+ mode: { times: 1 }
389
+ data:
390
+ errorCode: 9001
391
+ closeConnection: false
392
+ target: collection
393
+ topology:
394
+ - replicaset
395
+ - sharded
396
+ changeStreamPipeline: []
397
+ changeStreamOptions: {}
398
+ operations:
399
+ -
400
+ database: *database_name
401
+ collection: *collection_name
402
+ name: insertOne
403
+ arguments:
404
+ document:
405
+ x: 1
406
+ expectations:
407
+ -
408
+ command_started_event:
409
+ command:
410
+ aggregate: *collection_name
411
+ cursor: {}
412
+ pipeline:
413
+ -
414
+ $changeStream: {}
415
+ command_name: aggregate
416
+ database_name: *database_name
417
+ -
418
+ command_started_event:
419
+ command:
420
+ getMore: 42
421
+ collection: *collection_name
422
+ command_name: getMore
423
+ database_name: *database_name
424
+ -
425
+ command_started_event:
426
+ command:
427
+ aggregate: *collection_name
428
+ cursor: {}
429
+ pipeline:
430
+ -
431
+ $changeStream: {}
432
+ command_name: aggregate
433
+ database_name: *database_name
434
+ result:
435
+ success:
436
+ -
437
+ _id: "42"
438
+ documentKey: "42"
439
+ operationType: insert
440
+ ns:
441
+ db: *database_name
442
+ coll: *collection_name
443
+ fullDocument:
444
+ x:
445
+ $numberInt: "1"
446
+ -
447
+ description: "change stream resumes after NotMaster"
448
+ minServerVersion: "4.3.1"
449
+ failPoint:
450
+ configureFailPoint: failGetMoreAfterCursorCheckout
451
+ mode: { times: 1 }
452
+ data:
453
+ errorCode: 10107
454
+ closeConnection: false
455
+ target: collection
456
+ topology:
457
+ - replicaset
458
+ - sharded
459
+ changeStreamPipeline: []
460
+ changeStreamOptions: {}
461
+ operations:
462
+ -
463
+ database: *database_name
464
+ collection: *collection_name
465
+ name: insertOne
466
+ arguments:
467
+ document:
468
+ x: 1
469
+ expectations:
470
+ -
471
+ command_started_event:
472
+ command:
473
+ aggregate: *collection_name
474
+ cursor: {}
475
+ pipeline:
476
+ -
477
+ $changeStream: {}
478
+ command_name: aggregate
479
+ database_name: *database_name
480
+ -
481
+ command_started_event:
482
+ command:
483
+ getMore: 42
484
+ collection: *collection_name
485
+ command_name: getMore
486
+ database_name: *database_name
487
+ -
488
+ command_started_event:
489
+ command:
490
+ aggregate: *collection_name
491
+ cursor: {}
492
+ pipeline:
493
+ -
494
+ $changeStream: {}
495
+ command_name: aggregate
496
+ database_name: *database_name
497
+ result:
498
+ success:
499
+ -
500
+ _id: "42"
501
+ documentKey: "42"
502
+ operationType: insert
503
+ ns:
504
+ db: *database_name
505
+ coll: *collection_name
506
+ fullDocument:
507
+ x:
508
+ $numberInt: "1"
509
+ -
510
+ description: "change stream resumes after InterruptedAtShutdown"
511
+ minServerVersion: "4.3.1"
512
+ failPoint:
513
+ configureFailPoint: failGetMoreAfterCursorCheckout
514
+ mode: { times: 1 }
515
+ data:
516
+ errorCode: 11600
517
+ closeConnection: false
518
+ target: collection
519
+ topology:
520
+ - replicaset
521
+ - sharded
522
+ changeStreamPipeline: []
523
+ changeStreamOptions: {}
524
+ operations:
525
+ -
526
+ database: *database_name
527
+ collection: *collection_name
528
+ name: insertOne
529
+ arguments:
530
+ document:
531
+ x: 1
532
+ expectations:
533
+ -
534
+ command_started_event:
535
+ command:
536
+ aggregate: *collection_name
537
+ cursor: {}
538
+ pipeline:
539
+ -
540
+ $changeStream: {}
541
+ command_name: aggregate
542
+ database_name: *database_name
543
+ -
544
+ command_started_event:
545
+ command:
546
+ getMore: 42
547
+ collection: *collection_name
548
+ command_name: getMore
549
+ database_name: *database_name
550
+ -
551
+ command_started_event:
552
+ command:
553
+ aggregate: *collection_name
554
+ cursor: {}
555
+ pipeline:
556
+ -
557
+ $changeStream: {}
558
+ command_name: aggregate
559
+ database_name: *database_name
560
+ result:
561
+ success:
562
+ -
563
+ _id: "42"
564
+ documentKey: "42"
565
+ operationType: insert
566
+ ns:
567
+ db: *database_name
568
+ coll: *collection_name
569
+ fullDocument:
570
+ x:
571
+ $numberInt: "1"
572
+ -
573
+ description: "change stream resumes after InterruptedDueToReplStateChange"
574
+ minServerVersion: "4.3.1"
575
+ failPoint:
576
+ configureFailPoint: failGetMoreAfterCursorCheckout
577
+ mode: { times: 1 }
578
+ data:
579
+ errorCode: 11602
580
+ closeConnection: false
581
+ target: collection
582
+ topology:
583
+ - replicaset
584
+ - sharded
585
+ changeStreamPipeline: []
586
+ changeStreamOptions: {}
587
+ operations:
588
+ -
589
+ database: *database_name
590
+ collection: *collection_name
591
+ name: insertOne
592
+ arguments:
593
+ document:
594
+ x: 1
595
+ expectations:
596
+ -
597
+ command_started_event:
598
+ command:
599
+ aggregate: *collection_name
600
+ cursor: {}
601
+ pipeline:
602
+ -
603
+ $changeStream: {}
604
+ command_name: aggregate
605
+ database_name: *database_name
606
+ -
607
+ command_started_event:
608
+ command:
609
+ getMore: 42
610
+ collection: *collection_name
611
+ command_name: getMore
612
+ database_name: *database_name
613
+ -
614
+ command_started_event:
615
+ command:
616
+ aggregate: *collection_name
617
+ cursor: {}
618
+ pipeline:
619
+ -
620
+ $changeStream: {}
621
+ command_name: aggregate
622
+ database_name: *database_name
623
+ result:
624
+ success:
625
+ -
626
+ _id: "42"
627
+ documentKey: "42"
628
+ operationType: insert
629
+ ns:
630
+ db: *database_name
631
+ coll: *collection_name
632
+ fullDocument:
633
+ x:
634
+ $numberInt: "1"
635
+ -
636
+ description: "change stream resumes after NotMasterNoSlaveOk"
637
+ minServerVersion: "4.3.1"
638
+ failPoint:
639
+ configureFailPoint: failGetMoreAfterCursorCheckout
640
+ mode: { times: 1 }
641
+ data:
642
+ errorCode: 13435
643
+ closeConnection: false
644
+ target: collection
645
+ topology:
646
+ - replicaset
647
+ - sharded
648
+ changeStreamPipeline: []
649
+ changeStreamOptions: {}
650
+ operations:
651
+ -
652
+ database: *database_name
653
+ collection: *collection_name
654
+ name: insertOne
655
+ arguments:
656
+ document:
657
+ x: 1
658
+ expectations:
659
+ -
660
+ command_started_event:
661
+ command:
662
+ aggregate: *collection_name
663
+ cursor: {}
664
+ pipeline:
665
+ -
666
+ $changeStream: {}
667
+ command_name: aggregate
668
+ database_name: *database_name
669
+ -
670
+ command_started_event:
671
+ command:
672
+ getMore: 42
673
+ collection: *collection_name
674
+ command_name: getMore
675
+ database_name: *database_name
676
+ -
677
+ command_started_event:
678
+ command:
679
+ aggregate: *collection_name
680
+ cursor: {}
681
+ pipeline:
682
+ -
683
+ $changeStream: {}
684
+ command_name: aggregate
685
+ database_name: *database_name
686
+ result:
687
+ success:
688
+ -
689
+ _id: "42"
690
+ documentKey: "42"
691
+ operationType: insert
692
+ ns:
693
+ db: *database_name
694
+ coll: *collection_name
695
+ fullDocument:
696
+ x:
697
+ $numberInt: "1"
698
+ -
699
+ description: "change stream resumes after NotMasterOrSecondary"
700
+ minServerVersion: "4.3.1"
701
+ failPoint:
702
+ configureFailPoint: failGetMoreAfterCursorCheckout
703
+ mode: { times: 1 }
704
+ data:
705
+ errorCode: 13436
706
+ closeConnection: false
707
+ target: collection
708
+ topology:
709
+ - replicaset
710
+ - sharded
711
+ changeStreamPipeline: []
712
+ changeStreamOptions: {}
713
+ operations:
714
+ -
715
+ database: *database_name
716
+ collection: *collection_name
717
+ name: insertOne
718
+ arguments:
719
+ document:
720
+ x: 1
721
+ expectations:
722
+ -
723
+ command_started_event:
724
+ command:
725
+ aggregate: *collection_name
726
+ cursor: {}
727
+ pipeline:
728
+ -
729
+ $changeStream: {}
730
+ command_name: aggregate
731
+ database_name: *database_name
732
+ -
733
+ command_started_event:
734
+ command:
735
+ getMore: 42
736
+ collection: *collection_name
737
+ command_name: getMore
738
+ database_name: *database_name
739
+ -
740
+ command_started_event:
741
+ command:
742
+ aggregate: *collection_name
743
+ cursor: {}
744
+ pipeline:
745
+ -
746
+ $changeStream: {}
747
+ command_name: aggregate
748
+ database_name: *database_name
749
+ result:
750
+ success:
751
+ -
752
+ _id: "42"
753
+ documentKey: "42"
754
+ operationType: insert
755
+ ns:
756
+ db: *database_name
757
+ coll: *collection_name
758
+ fullDocument:
759
+ x:
760
+ $numberInt: "1"
761
+ -
762
+ description: "change stream resumes after StaleShardVersion"
763
+ minServerVersion: "4.3.1"
764
+ failPoint:
765
+ configureFailPoint: failGetMoreAfterCursorCheckout
766
+ mode: { times: 1 }
767
+ data:
768
+ errorCode: 63
769
+ closeConnection: false
770
+ target: collection
771
+ topology:
772
+ - replicaset
773
+ - sharded
774
+ changeStreamPipeline: []
775
+ changeStreamOptions: {}
776
+ operations:
777
+ -
778
+ database: *database_name
779
+ collection: *collection_name
780
+ name: insertOne
781
+ arguments:
782
+ document:
783
+ x: 1
784
+ expectations:
785
+ -
786
+ command_started_event:
787
+ command:
788
+ aggregate: *collection_name
789
+ cursor: {}
790
+ pipeline:
791
+ -
792
+ $changeStream: {}
793
+ command_name: aggregate
794
+ database_name: *database_name
795
+ -
796
+ command_started_event:
797
+ command:
798
+ getMore: 42
799
+ collection: *collection_name
800
+ command_name: getMore
801
+ database_name: *database_name
802
+ -
803
+ command_started_event:
804
+ command:
805
+ aggregate: *collection_name
806
+ cursor: {}
807
+ pipeline:
808
+ -
809
+ $changeStream: {}
810
+ command_name: aggregate
811
+ database_name: *database_name
812
+ result:
813
+ success:
814
+ -
815
+ _id: "42"
816
+ documentKey: "42"
817
+ operationType: insert
818
+ ns:
819
+ db: *database_name
820
+ coll: *collection_name
821
+ fullDocument:
822
+ x:
823
+ $numberInt: "1"
824
+ -
825
+ description: "change stream resumes after StaleEpoch"
826
+ minServerVersion: "4.3.1"
827
+ failPoint:
828
+ configureFailPoint: failGetMoreAfterCursorCheckout
829
+ mode: { times: 1 }
830
+ data:
831
+ errorCode: 150
832
+ closeConnection: false
833
+ target: collection
834
+ topology:
835
+ - replicaset
836
+ - sharded
837
+ changeStreamPipeline: []
838
+ changeStreamOptions: {}
839
+ operations:
840
+ -
841
+ database: *database_name
842
+ collection: *collection_name
843
+ name: insertOne
844
+ arguments:
845
+ document:
846
+ x: 1
847
+ expectations:
848
+ -
849
+ command_started_event:
850
+ command:
851
+ aggregate: *collection_name
852
+ cursor: {}
853
+ pipeline:
854
+ -
855
+ $changeStream: {}
856
+ command_name: aggregate
857
+ database_name: *database_name
858
+ -
859
+ command_started_event:
860
+ command:
861
+ getMore: 42
862
+ collection: *collection_name
863
+ command_name: getMore
864
+ database_name: *database_name
865
+ -
866
+ command_started_event:
867
+ command:
868
+ aggregate: *collection_name
869
+ cursor: {}
870
+ pipeline:
871
+ -
872
+ $changeStream: {}
873
+ command_name: aggregate
874
+ database_name: *database_name
875
+ result:
876
+ success:
877
+ -
878
+ _id: "42"
879
+ documentKey: "42"
880
+ operationType: insert
881
+ ns:
882
+ db: *database_name
883
+ coll: *collection_name
884
+ fullDocument:
885
+ x:
886
+ $numberInt: "1"
887
+ -
888
+ description: "change stream resumes after RetryChangeStream"
889
+ minServerVersion: "4.3.1"
890
+ failPoint:
891
+ configureFailPoint: failGetMoreAfterCursorCheckout
892
+ mode: { times: 1 }
893
+ data:
894
+ errorCode: 234
895
+ closeConnection: false
896
+ target: collection
897
+ topology:
898
+ - replicaset
899
+ - sharded
900
+ changeStreamPipeline: []
901
+ changeStreamOptions: {}
902
+ operations:
903
+ -
904
+ database: *database_name
905
+ collection: *collection_name
906
+ name: insertOne
907
+ arguments:
908
+ document:
909
+ x: 1
910
+ expectations:
911
+ -
912
+ command_started_event:
913
+ command:
914
+ aggregate: *collection_name
915
+ cursor: {}
916
+ pipeline:
917
+ -
918
+ $changeStream: {}
919
+ command_name: aggregate
920
+ database_name: *database_name
921
+ -
922
+ command_started_event:
923
+ command:
924
+ getMore: 42
925
+ collection: *collection_name
926
+ command_name: getMore
927
+ database_name: *database_name
928
+ -
929
+ command_started_event:
930
+ command:
931
+ aggregate: *collection_name
932
+ cursor: {}
933
+ pipeline:
934
+ -
935
+ $changeStream: {}
936
+ command_name: aggregate
937
+ database_name: *database_name
938
+ result:
939
+ success:
940
+ -
941
+ _id: "42"
942
+ documentKey: "42"
943
+ operationType: insert
944
+ ns:
945
+ db: *database_name
946
+ coll: *collection_name
947
+ fullDocument:
948
+ x:
949
+ $numberInt: "1"
950
+ -
951
+ description: "change stream resumes after FailedToSatisfyReadPreference"
952
+ minServerVersion: "4.3.1"
953
+ failPoint:
954
+ configureFailPoint: failGetMoreAfterCursorCheckout
955
+ mode: { times: 1 }
956
+ data:
957
+ errorCode: 133
958
+ closeConnection: false
959
+ target: collection
960
+ topology:
961
+ - replicaset
962
+ - sharded
963
+ changeStreamPipeline: []
964
+ changeStreamOptions: {}
965
+ operations:
966
+ -
967
+ database: *database_name
968
+ collection: *collection_name
969
+ name: insertOne
970
+ arguments:
971
+ document:
972
+ x: 1
973
+ expectations:
974
+ -
975
+ command_started_event:
976
+ command:
977
+ aggregate: *collection_name
978
+ cursor: {}
979
+ pipeline:
980
+ -
981
+ $changeStream: {}
982
+ command_name: aggregate
983
+ database_name: *database_name
984
+ -
985
+ command_started_event:
986
+ command:
987
+ getMore: 42
988
+ collection: *collection_name
989
+ command_name: getMore
990
+ database_name: *database_name
991
+ -
992
+ command_started_event:
993
+ command:
994
+ aggregate: *collection_name
995
+ cursor: {}
996
+ pipeline:
997
+ -
998
+ $changeStream: {}
999
+ command_name: aggregate
1000
+ database_name: *database_name
1001
+ result:
1002
+ success:
1003
+ -
1004
+ _id: "42"
1005
+ documentKey: "42"
1006
+ operationType: insert
1007
+ ns:
1008
+ db: *database_name
1009
+ coll: *collection_name
1010
+ fullDocument:
1011
+ x:
1012
+ $numberInt: "1"
1013
+ # The next two tests ensure that the driver only uses the error label, not the whitelist.
1014
+ -
1015
+ description: "change stream resumes if error contains ResumableChangeStreamError"
1016
+ minServerVersion: "4.3.1"
1017
+ failPoint:
1018
+ configureFailPoint: failCommand
1019
+ mode: { times: 1 }
1020
+ data:
1021
+ failCommands: ["getMore"]
1022
+ errorCode: 50 # Use an error code that does not have the whitelist label by default
1023
+ closeConnection: false
1024
+ errorLabels: ["ResumableChangeStreamError"]
1025
+ target: collection
1026
+ topology:
1027
+ - replicaset
1028
+ - sharded
1029
+ changeStreamPipeline: []
1030
+ changeStreamOptions: {}
1031
+ operations:
1032
+ -
1033
+ database: *database_name
1034
+ collection: *collection_name
1035
+ name: insertOne
1036
+ arguments:
1037
+ document:
1038
+ x: 1
1039
+ expectations:
1040
+ -
1041
+ command_started_event:
1042
+ command:
1043
+ aggregate: *collection_name
1044
+ cursor: {}
1045
+ pipeline:
1046
+ -
1047
+ $changeStream: {}
1048
+ command_name: aggregate
1049
+ database_name: *database_name
1050
+ -
1051
+ command_started_event:
1052
+ command:
1053
+ getMore: 42
1054
+ collection: *collection_name
1055
+ command_name: getMore
1056
+ database_name: *database_name
1057
+ -
1058
+ command_started_event:
1059
+ command:
1060
+ aggregate: *collection_name
1061
+ cursor: {}
1062
+ pipeline:
1063
+ -
1064
+ $changeStream: {}
1065
+ command_name: aggregate
1066
+ database_name: *database_name
1067
+ result:
1068
+ success:
1069
+ -
1070
+ _id: "42"
1071
+ documentKey: "42"
1072
+ operationType: insert
1073
+ ns:
1074
+ db: *database_name
1075
+ coll: *collection_name
1076
+ fullDocument:
1077
+ x:
1078
+ $numberInt: "1"
1079
+ -
1080
+ description: "change stream does not resume if error does not contain ResumableChangeStreamError"
1081
+ minServerVersion: "4.3.1"
1082
+ failPoint:
1083
+ configureFailPoint: failCommand # failCommand will not add the whitelist error label
1084
+ mode: { times: 1 }
1085
+ data:
1086
+ failCommands: ["getMore"]
1087
+ errorCode: 6 # Use an error code that is on the whitelist
1088
+ closeConnection: false
1089
+ target: collection
1090
+ topology:
1091
+ - replicaset
1092
+ - sharded
1093
+ changeStreamPipeline: []
1094
+ changeStreamOptions: {}
1095
+ operations:
1096
+ -
1097
+ database: *database_name
1098
+ collection: *collection_name
1099
+ name: insertOne
1100
+ arguments:
1101
+ document:
1102
+ x: 1
1103
+ result:
1104
+ error:
1105
+ code: 6