mongo 2.17.4 → 2.21.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 (1580) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +70 -37
  3. data/Rakefile +87 -177
  4. data/bin/mongo_console +2 -0
  5. data/lib/mongo/active_support.rb +1 -1
  6. data/lib/mongo/address/ipv4.rb +1 -1
  7. data/lib/mongo/address/ipv6.rb +1 -1
  8. data/lib/mongo/address/unix.rb +1 -1
  9. data/lib/mongo/address/validator.rb +1 -1
  10. data/lib/mongo/address.rb +23 -4
  11. data/lib/mongo/auth/aws/conversation.rb +1 -5
  12. data/lib/mongo/{operation/drop_database/command.rb → auth/aws/credentials.rb} +15 -18
  13. data/lib/mongo/auth/aws/credentials_cache.rb +75 -0
  14. data/lib/mongo/auth/aws/credentials_retriever.rb +232 -44
  15. data/lib/mongo/auth/aws/request.rb +1 -2
  16. data/lib/mongo/auth/aws.rb +6 -6
  17. data/lib/mongo/auth/base.rb +9 -2
  18. data/lib/mongo/auth/conversation_base.rb +1 -1
  19. data/lib/mongo/auth/cr/conversation.rb +1 -1
  20. data/lib/mongo/auth/cr.rb +1 -1
  21. data/lib/mongo/auth/credential_cache.rb +1 -1
  22. data/lib/mongo/auth/gssapi/conversation.rb +1 -1
  23. data/lib/mongo/auth/gssapi.rb +1 -1
  24. data/lib/mongo/auth/ldap/conversation.rb +1 -1
  25. data/lib/mongo/auth/ldap.rb +1 -1
  26. data/lib/mongo/auth/roles.rb +17 -17
  27. data/lib/mongo/auth/sasl_conversation_base.rb +1 -1
  28. data/lib/mongo/auth/scram/conversation.rb +1 -1
  29. data/lib/mongo/auth/scram.rb +1 -1
  30. data/lib/mongo/auth/scram256/conversation.rb +1 -1
  31. data/lib/mongo/auth/scram256.rb +1 -1
  32. data/lib/mongo/auth/scram_conversation_base.rb +1 -1
  33. data/lib/mongo/auth/stringprep/profiles/sasl.rb +1 -1
  34. data/lib/mongo/auth/stringprep/tables.rb +1 -1
  35. data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +1 -1
  36. data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +2 -1
  37. data/lib/mongo/auth/stringprep.rb +1 -1
  38. data/lib/mongo/auth/user/view.rb +1 -1
  39. data/lib/mongo/auth/user.rb +1 -1
  40. data/lib/mongo/auth/x509/conversation.rb +1 -1
  41. data/lib/mongo/auth/x509.rb +1 -1
  42. data/lib/mongo/auth.rb +13 -2
  43. data/lib/mongo/background_thread.rb +1 -1
  44. data/lib/mongo/bson.rb +1 -1
  45. data/lib/mongo/bulk_write/combineable.rb +1 -1
  46. data/lib/mongo/bulk_write/ordered_combiner.rb +1 -1
  47. data/lib/mongo/bulk_write/result.rb +11 -2
  48. data/lib/mongo/bulk_write/result_combiner.rb +3 -5
  49. data/lib/mongo/bulk_write/transformable.rb +1 -1
  50. data/lib/mongo/bulk_write/unordered_combiner.rb +1 -1
  51. data/lib/mongo/bulk_write/validatable.rb +1 -1
  52. data/lib/mongo/bulk_write.rb +152 -31
  53. data/lib/mongo/caching_cursor.rb +1 -1
  54. data/lib/mongo/client.rb +223 -27
  55. data/lib/mongo/client_encryption.rb +218 -11
  56. data/lib/mongo/cluster/periodic_executor.rb +1 -1
  57. data/lib/mongo/cluster/reapers/cursor_reaper.rb +14 -3
  58. data/lib/mongo/cluster/reapers/socket_reaper.rb +2 -2
  59. data/lib/mongo/cluster/sdam_flow.rb +62 -22
  60. data/lib/mongo/cluster/topology/base.rb +17 -1
  61. data/lib/mongo/cluster/topology/load_balanced.rb +1 -1
  62. data/lib/mongo/cluster/topology/no_replica_set_options.rb +1 -1
  63. data/lib/mongo/cluster/topology/replica_set_no_primary.rb +1 -1
  64. data/lib/mongo/cluster/topology/replica_set_with_primary.rb +1 -1
  65. data/lib/mongo/cluster/topology/sharded.rb +1 -1
  66. data/lib/mongo/cluster/topology/single.rb +1 -1
  67. data/lib/mongo/cluster/topology/unknown.rb +1 -1
  68. data/lib/mongo/cluster/topology.rb +1 -1
  69. data/lib/mongo/cluster.rb +95 -44
  70. data/lib/mongo/cluster_time.rb +1 -1
  71. data/lib/mongo/collection/helpers.rb +43 -0
  72. data/lib/mongo/collection/queryable_encryption.rb +162 -0
  73. data/lib/mongo/collection/view/aggregation/behavior.rb +131 -0
  74. data/lib/mongo/collection/view/aggregation.rb +51 -111
  75. data/lib/mongo/collection/view/builder/aggregation.rb +2 -8
  76. data/lib/mongo/collection/view/builder/map_reduce.rb +1 -1
  77. data/lib/mongo/collection/view/builder.rb +1 -1
  78. data/lib/mongo/collection/view/change_stream/retryable.rb +1 -1
  79. data/lib/mongo/collection/view/change_stream.rb +143 -48
  80. data/lib/mongo/collection/view/explainable.rb +2 -2
  81. data/lib/mongo/collection/view/immutable.rb +1 -1
  82. data/lib/mongo/collection/view/iterable.rb +79 -62
  83. data/lib/mongo/collection/view/map_reduce.rb +41 -15
  84. data/lib/mongo/collection/view/readable.rb +114 -62
  85. data/lib/mongo/collection/view/writable.rb +222 -70
  86. data/lib/mongo/collection/view.rb +44 -4
  87. data/lib/mongo/collection.rb +463 -114
  88. data/lib/mongo/condition_variable.rb +58 -0
  89. data/lib/mongo/config/options.rb +63 -0
  90. data/lib/mongo/config/validators/option.rb +27 -0
  91. data/lib/mongo/config.rb +43 -0
  92. data/lib/mongo/crypt/auto_decryption_context.rb +1 -1
  93. data/lib/mongo/crypt/auto_encrypter.rb +142 -20
  94. data/lib/mongo/crypt/auto_encryption_context.rb +1 -1
  95. data/lib/mongo/crypt/binary.rb +1 -1
  96. data/lib/mongo/crypt/binding.rb +715 -152
  97. data/lib/mongo/crypt/context.rb +83 -11
  98. data/lib/mongo/crypt/data_key_context.rb +13 -105
  99. data/lib/mongo/crypt/encryption_io.rb +133 -69
  100. data/lib/mongo/crypt/explicit_decryption_context.rb +1 -1
  101. data/lib/mongo/crypt/explicit_encrypter.rb +266 -34
  102. data/lib/mongo/crypt/explicit_encryption_context.rb +82 -22
  103. data/lib/mongo/{operation/kill_cursors/legacy.rb → crypt/explicit_encryption_expression_context.rb} +9 -20
  104. data/lib/mongo/crypt/handle.rb +169 -87
  105. data/lib/mongo/crypt/hooks.rb +26 -3
  106. data/lib/mongo/crypt/kms/aws/credentials.rb +83 -0
  107. data/lib/mongo/crypt/kms/aws/master_document.rb +78 -0
  108. data/lib/mongo/crypt/kms/aws.rb +20 -0
  109. data/lib/mongo/crypt/kms/azure/access_token.rb +54 -0
  110. data/lib/mongo/crypt/kms/azure/credentials.rb +103 -0
  111. data/lib/mongo/crypt/kms/azure/credentials_retriever.rb +138 -0
  112. data/lib/mongo/crypt/kms/azure/master_document.rb +79 -0
  113. data/lib/mongo/crypt/kms/azure.rb +21 -0
  114. data/lib/mongo/crypt/kms/credentials.rb +96 -0
  115. data/lib/mongo/crypt/kms/gcp/credentials.rb +127 -0
  116. data/lib/mongo/crypt/kms/gcp/credentials_retriever.rb +83 -0
  117. data/lib/mongo/crypt/kms/gcp/master_document.rb +99 -0
  118. data/lib/mongo/crypt/kms/gcp.rb +21 -0
  119. data/lib/mongo/crypt/kms/kmip/credentials.rb +68 -0
  120. data/lib/mongo/crypt/kms/kmip/master_document.rb +74 -0
  121. data/lib/mongo/crypt/kms/kmip.rb +19 -0
  122. data/lib/mongo/crypt/kms/local/credentials.rb +65 -0
  123. data/lib/mongo/crypt/kms/local/master_document.rb +43 -0
  124. data/lib/mongo/crypt/kms/local.rb +19 -0
  125. data/lib/mongo/crypt/kms/master_key_document.rb +65 -0
  126. data/lib/mongo/crypt/kms.rb +122 -0
  127. data/lib/mongo/crypt/kms_context.rb +1 -1
  128. data/lib/mongo/crypt/rewrap_many_data_key_context.rb +46 -0
  129. data/lib/mongo/crypt/rewrap_many_data_key_result.rb +37 -0
  130. data/lib/mongo/crypt/status.rb +9 -3
  131. data/lib/mongo/crypt.rb +16 -1
  132. data/lib/mongo/csot_timeout_holder.rb +119 -0
  133. data/lib/mongo/cursor/kill_spec.rb +31 -7
  134. data/lib/mongo/cursor/nontailable.rb +27 -0
  135. data/lib/mongo/cursor.rb +141 -35
  136. data/lib/mongo/cursor_host.rb +82 -0
  137. data/lib/mongo/database/view.rb +123 -16
  138. data/lib/mongo/database.rb +149 -35
  139. data/lib/mongo/dbref.rb +2 -106
  140. data/lib/mongo/distinguishing_semaphore.rb +2 -2
  141. data/lib/mongo/error/auth_error.rb +1 -1
  142. data/lib/mongo/error/bad_load_balancer_target.rb +1 -1
  143. data/lib/mongo/error/bulk_write_error.rb +32 -5
  144. data/lib/mongo/error/change_stream_resumable.rb +1 -1
  145. data/lib/mongo/error/client_closed.rb +24 -0
  146. data/lib/mongo/error/closed_stream.rb +1 -1
  147. data/lib/mongo/error/connection_check_out_timeout.rb +1 -1
  148. data/lib/mongo/error/connection_perished.rb +3 -1
  149. data/lib/mongo/error/connection_unavailable.rb +27 -0
  150. data/lib/mongo/error/credential_check_error.rb +1 -1
  151. data/lib/mongo/error/crypt_error.rb +1 -1
  152. data/lib/mongo/error/extra_file_chunk.rb +1 -1
  153. data/lib/mongo/error/failed_string_prep_validation.rb +1 -1
  154. data/lib/mongo/error/file_not_found.rb +1 -1
  155. data/lib/mongo/error/handshake_error.rb +1 -1
  156. data/lib/mongo/error/insufficient_iteration_count.rb +1 -1
  157. data/lib/mongo/error/internal_driver_error.rb +1 -1
  158. data/lib/mongo/error/invalid_address.rb +1 -1
  159. data/lib/mongo/error/invalid_application_name.rb +1 -1
  160. data/lib/mongo/error/invalid_bulk_operation.rb +1 -1
  161. data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -1
  162. data/lib/mongo/error/invalid_collection_name.rb +1 -1
  163. data/lib/mongo/error/invalid_config_option.rb +21 -0
  164. data/lib/mongo/error/invalid_cursor_operation.rb +1 -1
  165. data/lib/mongo/error/invalid_database_name.rb +1 -1
  166. data/lib/mongo/error/invalid_document.rb +1 -1
  167. data/lib/mongo/error/invalid_file.rb +1 -1
  168. data/lib/mongo/error/invalid_file_revision.rb +1 -1
  169. data/lib/mongo/{operation/drop/command.rb → error/invalid_max_connecting.rb} +8 -21
  170. data/lib/mongo/error/invalid_min_pool_size.rb +1 -1
  171. data/lib/mongo/error/invalid_nonce.rb +1 -1
  172. data/lib/mongo/error/invalid_read_concern.rb +1 -1
  173. data/lib/mongo/error/invalid_read_option.rb +2 -2
  174. data/lib/mongo/error/invalid_replacement_document.rb +28 -10
  175. data/lib/mongo/error/invalid_server_auth_host.rb +1 -1
  176. data/lib/mongo/error/invalid_server_auth_response.rb +1 -1
  177. data/lib/mongo/error/invalid_server_preference.rb +1 -1
  178. data/lib/mongo/error/invalid_session.rb +1 -1
  179. data/lib/mongo/error/invalid_signature.rb +1 -1
  180. data/lib/mongo/error/invalid_transaction_operation.rb +1 -1
  181. data/lib/mongo/error/invalid_txt_record.rb +1 -1
  182. data/lib/mongo/error/invalid_update_document.rb +28 -8
  183. data/lib/mongo/error/invalid_uri.rb +1 -1
  184. data/lib/mongo/error/invalid_write_concern.rb +1 -1
  185. data/lib/mongo/error/kms_error.rb +1 -1
  186. data/lib/mongo/error/labelable.rb +72 -0
  187. data/lib/mongo/error/lint_error.rb +1 -1
  188. data/lib/mongo/error/max_bson_size.rb +1 -1
  189. data/lib/mongo/error/max_message_size.rb +1 -1
  190. data/lib/mongo/error/mismatched_domain.rb +1 -1
  191. data/lib/mongo/error/missing_connection.rb +27 -0
  192. data/lib/mongo/error/missing_file_chunk.rb +9 -3
  193. data/lib/mongo/error/missing_password.rb +1 -1
  194. data/lib/mongo/error/missing_resume_token.rb +1 -1
  195. data/lib/mongo/error/missing_scram_server_signature.rb +1 -1
  196. data/lib/mongo/error/missing_service_id.rb +1 -1
  197. data/lib/mongo/error/mongocryptd_spawn_error.rb +1 -1
  198. data/lib/mongo/error/multi_index_drop.rb +1 -1
  199. data/lib/mongo/error/need_primary_server.rb +1 -1
  200. data/lib/mongo/error/no_server_available.rb +1 -1
  201. data/lib/mongo/error/no_service_connection_available.rb +1 -1
  202. data/lib/mongo/error/no_srv_records.rb +1 -1
  203. data/lib/mongo/error/notable.rb +15 -1
  204. data/lib/mongo/error/operation_failure.rb +213 -260
  205. data/lib/mongo/error/parser.rb +1 -1
  206. data/lib/mongo/{operation/create_user/command.rb → error/pool_cleared_error.rb} +17 -23
  207. data/lib/mongo/error/pool_closed_error.rb +4 -17
  208. data/lib/mongo/{operation/update_user/command.rb → error/pool_error.rb} +21 -21
  209. data/lib/mongo/{operation/drop_index/command.rb → error/pool_paused_error.rb} +17 -22
  210. data/lib/mongo/error/raise_original_error.rb +1 -1
  211. data/lib/mongo/error/read_write_retryable.rb +108 -0
  212. data/lib/mongo/error/sdam_error_detection.rb +1 -1
  213. data/lib/mongo/error/server_api_conflict.rb +1 -1
  214. data/lib/mongo/error/server_api_not_supported.rb +1 -1
  215. data/lib/mongo/error/server_certificate_revoked.rb +1 -1
  216. data/lib/mongo/{operation/get_more/legacy.rb → error/server_not_usable.rb} +13 -16
  217. data/lib/mongo/error/server_timeout_error.rb +12 -0
  218. data/lib/mongo/error/session_ended.rb +1 -1
  219. data/lib/mongo/{operation/command/command.rb → error/session_not_materialized.rb} +8 -20
  220. data/lib/mongo/error/sessions_not_supported.rb +1 -1
  221. data/lib/mongo/error/snapshot_session_invalid_server_version.rb +1 -1
  222. data/lib/mongo/error/snapshot_session_transaction_prohibited.rb +1 -1
  223. data/lib/mongo/error/socket_error.rb +1 -1
  224. data/lib/mongo/error/socket_timeout_error.rb +4 -2
  225. data/lib/mongo/error/timeout_error.rb +23 -0
  226. data/lib/mongo/{operation/shared/op_msg_or_command.rb → error/transactions_not_supported.rb} +13 -20
  227. data/lib/mongo/error/unchangeable_collection_option.rb +1 -1
  228. data/lib/mongo/error/unexpected_chunk_length.rb +1 -1
  229. data/lib/mongo/error/unexpected_response.rb +1 -1
  230. data/lib/mongo/error/unknown_payload_type.rb +1 -1
  231. data/lib/mongo/error/unmet_dependency.rb +1 -1
  232. data/lib/mongo/error/unsupported_array_filters.rb +1 -1
  233. data/lib/mongo/error/unsupported_collation.rb +1 -1
  234. data/lib/mongo/error/unsupported_features.rb +1 -1
  235. data/lib/mongo/error/unsupported_message_type.rb +1 -1
  236. data/lib/mongo/error/unsupported_option.rb +1 -1
  237. data/lib/mongo/error/write_retryable.rb +1 -1
  238. data/lib/mongo/error.rb +16 -38
  239. data/lib/mongo/event/base.rb +1 -1
  240. data/lib/mongo/event/listeners.rb +1 -1
  241. data/lib/mongo/event/publisher.rb +1 -1
  242. data/lib/mongo/event/subscriber.rb +1 -1
  243. data/lib/mongo/event.rb +1 -1
  244. data/lib/mongo/grid/file/chunk.rb +3 -2
  245. data/lib/mongo/grid/file/info.rb +3 -2
  246. data/lib/mongo/grid/file.rb +1 -1
  247. data/lib/mongo/grid/fs_bucket.rb +49 -10
  248. data/lib/mongo/grid/stream/read.rb +22 -2
  249. data/lib/mongo/grid/stream/write.rb +22 -5
  250. data/lib/mongo/grid/stream.rb +1 -1
  251. data/lib/mongo/grid.rb +1 -1
  252. data/lib/mongo/id.rb +1 -1
  253. data/lib/mongo/index/view.rb +96 -19
  254. data/lib/mongo/index.rb +1 -1
  255. data/lib/mongo/lint.rb +1 -1
  256. data/lib/mongo/loggable.rb +3 -3
  257. data/lib/mongo/logger.rb +1 -1
  258. data/lib/mongo/monitoring/cmap_log_subscriber.rb +1 -1
  259. data/lib/mongo/monitoring/command_log_subscriber.rb +1 -1
  260. data/lib/mongo/monitoring/event/cmap/base.rb +1 -1
  261. data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +1 -1
  262. data/lib/mongo/monitoring/event/cmap/connection_check_out_started.rb +1 -1
  263. data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +1 -1
  264. data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +1 -1
  265. data/lib/mongo/monitoring/event/cmap/connection_closed.rb +1 -1
  266. data/lib/mongo/monitoring/event/cmap/connection_created.rb +1 -1
  267. data/lib/mongo/monitoring/event/cmap/connection_ready.rb +1 -1
  268. data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +9 -2
  269. data/lib/mongo/monitoring/event/cmap/pool_closed.rb +1 -1
  270. data/lib/mongo/monitoring/event/cmap/pool_created.rb +1 -1
  271. data/lib/mongo/monitoring/event/cmap/pool_ready.rb +67 -0
  272. data/lib/mongo/monitoring/event/cmap.rb +2 -1
  273. data/lib/mongo/monitoring/event/command_failed.rb +9 -3
  274. data/lib/mongo/monitoring/event/command_started.rb +2 -2
  275. data/lib/mongo/monitoring/event/command_succeeded.rb +10 -3
  276. data/lib/mongo/monitoring/event/secure.rb +2 -2
  277. data/lib/mongo/monitoring/event/server_closed.rb +1 -1
  278. data/lib/mongo/monitoring/event/server_description_changed.rb +1 -1
  279. data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +1 -1
  280. data/lib/mongo/monitoring/event/server_heartbeat_started.rb +1 -1
  281. data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +1 -1
  282. data/lib/mongo/monitoring/event/server_opening.rb +1 -1
  283. data/lib/mongo/monitoring/event/topology_changed.rb +1 -1
  284. data/lib/mongo/monitoring/event/topology_closed.rb +1 -1
  285. data/lib/mongo/monitoring/event/topology_opening.rb +1 -1
  286. data/lib/mongo/monitoring/event.rb +1 -1
  287. data/lib/mongo/monitoring/publishable.rb +10 -6
  288. data/lib/mongo/monitoring/sdam_log_subscriber.rb +1 -1
  289. data/lib/mongo/monitoring/server_closed_log_subscriber.rb +1 -1
  290. data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +1 -1
  291. data/lib/mongo/monitoring/server_opening_log_subscriber.rb +1 -1
  292. data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +1 -1
  293. data/lib/mongo/monitoring/topology_closed_log_subscriber.rb +1 -1
  294. data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +1 -1
  295. data/lib/mongo/monitoring/unified_sdam_log_subscriber.rb +1 -1
  296. data/lib/mongo/monitoring.rb +1 -1
  297. data/lib/mongo/operation/aggregate/op_msg.rb +1 -1
  298. data/lib/mongo/operation/aggregate/result.rb +1 -1
  299. data/lib/mongo/operation/aggregate.rb +2 -3
  300. data/lib/mongo/operation/collections_info/result.rb +6 -3
  301. data/lib/mongo/operation/collections_info.rb +4 -16
  302. data/lib/mongo/operation/command/op_msg.rb +7 -1
  303. data/lib/mongo/operation/command.rb +2 -3
  304. data/lib/mongo/operation/context.rb +64 -8
  305. data/lib/mongo/operation/count/op_msg.rb +5 -2
  306. data/lib/mongo/operation/count.rb +2 -3
  307. data/lib/mongo/operation/create/op_msg.rb +5 -2
  308. data/lib/mongo/operation/create.rb +2 -3
  309. data/lib/mongo/operation/create_index/op_msg.rb +3 -2
  310. data/lib/mongo/operation/create_index.rb +2 -3
  311. data/lib/mongo/operation/create_search_indexes/op_msg.rb +31 -0
  312. data/lib/mongo/operation/create_search_indexes.rb +15 -0
  313. data/lib/mongo/operation/create_user/op_msg.rb +1 -1
  314. data/lib/mongo/operation/create_user.rb +2 -3
  315. data/lib/mongo/operation/delete/bulk_result.rb +1 -1
  316. data/lib/mongo/operation/delete/op_msg.rb +4 -2
  317. data/lib/mongo/operation/delete/result.rb +1 -1
  318. data/lib/mongo/operation/delete.rb +1 -3
  319. data/lib/mongo/operation/distinct/op_msg.rb +5 -2
  320. data/lib/mongo/operation/distinct.rb +2 -3
  321. data/lib/mongo/operation/drop/op_msg.rb +1 -1
  322. data/lib/mongo/operation/drop.rb +2 -3
  323. data/lib/mongo/operation/drop_database/op_msg.rb +1 -1
  324. data/lib/mongo/operation/drop_database.rb +2 -3
  325. data/lib/mongo/operation/drop_index/op_msg.rb +6 -2
  326. data/lib/mongo/operation/drop_index.rb +2 -3
  327. data/lib/mongo/operation/drop_search_index/op_msg.rb +33 -0
  328. data/lib/mongo/operation/drop_search_index.rb +15 -0
  329. data/lib/mongo/operation/explain/op_msg.rb +1 -1
  330. data/lib/mongo/operation/explain/result.rb +1 -1
  331. data/lib/mongo/operation/explain.rb +2 -4
  332. data/lib/mongo/operation/find/builder/command.rb +1 -1
  333. data/lib/mongo/operation/find/builder/flags.rb +1 -1
  334. data/lib/mongo/operation/find/builder/modifiers.rb +1 -1
  335. data/lib/mongo/operation/find/builder.rb +1 -2
  336. data/lib/mongo/operation/find/op_msg.rb +46 -1
  337. data/lib/mongo/operation/find/result.rb +1 -1
  338. data/lib/mongo/operation/find.rb +2 -4
  339. data/lib/mongo/operation/get_more/command_builder.rb +6 -2
  340. data/lib/mongo/operation/get_more/op_msg.rb +34 -1
  341. data/lib/mongo/operation/get_more/result.rb +1 -1
  342. data/lib/mongo/operation/get_more.rb +2 -4
  343. data/lib/mongo/operation/indexes/op_msg.rb +1 -1
  344. data/lib/mongo/operation/indexes/result.rb +1 -1
  345. data/lib/mongo/operation/indexes.rb +2 -18
  346. data/lib/mongo/operation/insert/bulk_result.rb +6 -2
  347. data/lib/mongo/operation/insert/op_msg.rb +9 -5
  348. data/lib/mongo/operation/insert/result.rb +9 -4
  349. data/lib/mongo/operation/insert.rb +1 -3
  350. data/lib/mongo/operation/kill_cursors/command_builder.rb +1 -1
  351. data/lib/mongo/operation/kill_cursors/op_msg.rb +1 -1
  352. data/lib/mongo/operation/kill_cursors.rb +2 -4
  353. data/lib/mongo/operation/list_collections/op_msg.rb +5 -2
  354. data/lib/mongo/operation/list_collections/result.rb +2 -2
  355. data/lib/mongo/operation/list_collections.rb +2 -3
  356. data/lib/mongo/operation/map_reduce/op_msg.rb +1 -1
  357. data/lib/mongo/operation/map_reduce/result.rb +18 -2
  358. data/lib/mongo/operation/map_reduce.rb +2 -3
  359. data/lib/mongo/operation/op_msg_base.rb +4 -2
  360. data/lib/mongo/operation/parallel_scan/op_msg.rb +1 -1
  361. data/lib/mongo/operation/parallel_scan/result.rb +1 -1
  362. data/lib/mongo/operation/parallel_scan.rb +2 -3
  363. data/lib/mongo/operation/remove_user/op_msg.rb +1 -1
  364. data/lib/mongo/operation/remove_user.rb +2 -3
  365. data/lib/mongo/operation/result.rb +47 -10
  366. data/lib/mongo/operation/shared/bypass_document_validation.rb +1 -1
  367. data/lib/mongo/operation/shared/causal_consistency_supported.rb +1 -1
  368. data/lib/mongo/operation/shared/executable.rb +60 -18
  369. data/lib/mongo/operation/shared/executable_no_validate.rb +1 -1
  370. data/lib/mongo/operation/shared/executable_transaction_label.rb +1 -1
  371. data/lib/mongo/operation/shared/idable.rb +1 -1
  372. data/lib/mongo/operation/shared/limited.rb +1 -1
  373. data/lib/mongo/operation/shared/object_id_generator.rb +1 -1
  374. data/lib/mongo/operation/shared/{polymorphic_operation.rb → op_msg_executable.rb} +28 -8
  375. data/lib/mongo/operation/shared/polymorphic_lookup.rb +1 -1
  376. data/lib/mongo/operation/shared/polymorphic_result.rb +1 -1
  377. data/lib/mongo/operation/shared/read_preference_supported.rb +1 -1
  378. data/lib/mongo/operation/shared/response_handling.rb +32 -33
  379. data/lib/mongo/operation/shared/result/aggregatable.rb +1 -1
  380. data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +1 -1
  381. data/lib/mongo/operation/shared/sessions_supported.rb +2 -3
  382. data/lib/mongo/operation/shared/specifiable.rb +8 -1
  383. data/lib/mongo/operation/shared/timed.rb +52 -0
  384. data/lib/mongo/operation/shared/validatable.rb +1 -1
  385. data/lib/mongo/operation/shared/write.rb +22 -13
  386. data/lib/mongo/operation/shared/write_concern_supported.rb +1 -1
  387. data/lib/mongo/operation/update/bulk_result.rb +1 -1
  388. data/lib/mongo/operation/update/op_msg.rb +5 -3
  389. data/lib/mongo/operation/update/result.rb +1 -1
  390. data/lib/mongo/operation/update.rb +1 -3
  391. data/lib/mongo/operation/update_search_index/op_msg.rb +34 -0
  392. data/lib/mongo/operation/update_search_index.rb +15 -0
  393. data/lib/mongo/operation/update_user/op_msg.rb +1 -1
  394. data/lib/mongo/operation/update_user.rb +2 -3
  395. data/lib/mongo/operation/users_info/op_msg.rb +1 -1
  396. data/lib/mongo/operation/users_info/result.rb +1 -1
  397. data/lib/mongo/operation/users_info.rb +2 -3
  398. data/lib/mongo/operation/write_command/op_msg.rb +1 -1
  399. data/lib/mongo/operation/write_command.rb +2 -3
  400. data/lib/mongo/operation.rb +6 -4
  401. data/lib/mongo/options/mapper.rb +1 -1
  402. data/lib/mongo/options/redacted.rb +1 -1
  403. data/lib/mongo/options.rb +1 -1
  404. data/lib/mongo/protocol/bit_vector.rb +4 -2
  405. data/lib/mongo/protocol/caching_hash.rb +52 -0
  406. data/lib/mongo/protocol/compressed.rb +1 -1
  407. data/lib/mongo/protocol/get_more.rb +1 -1
  408. data/lib/mongo/protocol/kill_cursors.rb +1 -1
  409. data/lib/mongo/protocol/message.rb +6 -13
  410. data/lib/mongo/protocol/msg.rb +25 -4
  411. data/lib/mongo/protocol/query.rb +1 -1
  412. data/lib/mongo/protocol/registry.rb +1 -1
  413. data/lib/mongo/protocol/reply.rb +1 -1
  414. data/lib/mongo/protocol/serializers.rb +25 -18
  415. data/lib/mongo/protocol.rb +2 -4
  416. data/lib/mongo/query_cache.rb +36 -21
  417. data/lib/mongo/retryable/base_worker.rb +116 -0
  418. data/lib/mongo/retryable/read_worker.rb +338 -0
  419. data/lib/mongo/retryable/write_worker.rb +398 -0
  420. data/lib/mongo/retryable.rb +37 -454
  421. data/lib/mongo/search_index/view.rb +232 -0
  422. data/lib/mongo/semaphore.rb +2 -2
  423. data/lib/mongo/server/app_metadata/environment.rb +314 -0
  424. data/lib/mongo/server/app_metadata/platform.rb +114 -0
  425. data/lib/mongo/server/app_metadata/truncator.rb +142 -0
  426. data/lib/mongo/server/app_metadata.rb +76 -108
  427. data/lib/mongo/server/connection.rb +102 -22
  428. data/lib/mongo/server/connection_base.rb +25 -3
  429. data/lib/mongo/server/connection_common.rb +5 -2
  430. data/lib/mongo/server/connection_pool/generation_manager.rb +56 -12
  431. data/lib/mongo/server/connection_pool/populator.rb +33 -31
  432. data/lib/mongo/server/connection_pool.rb +758 -251
  433. data/lib/mongo/server/description/features.rb +5 -2
  434. data/lib/mongo/server/description/load_balancer.rb +1 -1
  435. data/lib/mongo/server/description.rb +32 -13
  436. data/lib/mongo/server/monitor/app_metadata.rb +1 -1
  437. data/lib/mongo/server/monitor/connection.rb +2 -1
  438. data/lib/mongo/server/monitor.rb +43 -24
  439. data/lib/mongo/server/pending_connection.rb +26 -9
  440. data/lib/mongo/server/push_monitor/connection.rb +1 -1
  441. data/lib/mongo/server/push_monitor.rb +14 -4
  442. data/lib/mongo/server/{round_trip_time_averager.rb → round_trip_time_calculator.rb} +26 -8
  443. data/lib/mongo/server.rb +114 -39
  444. data/lib/mongo/server_selector/base.rb +75 -12
  445. data/lib/mongo/server_selector/nearest.rb +1 -1
  446. data/lib/mongo/server_selector/primary.rb +1 -1
  447. data/lib/mongo/server_selector/primary_preferred.rb +1 -1
  448. data/lib/mongo/server_selector/secondary.rb +1 -1
  449. data/lib/mongo/server_selector/secondary_preferred.rb +1 -1
  450. data/lib/mongo/server_selector.rb +1 -1
  451. data/lib/mongo/session/server_session/dirtyable.rb +52 -0
  452. data/lib/mongo/session/server_session.rb +4 -1
  453. data/lib/mongo/session/session_pool.rb +21 -19
  454. data/lib/mongo/session.rb +221 -44
  455. data/lib/mongo/socket/ocsp_cache.rb +1 -1
  456. data/lib/mongo/socket/ocsp_verifier.rb +5 -6
  457. data/lib/mongo/socket/ssl.rb +132 -19
  458. data/lib/mongo/socket/tcp.rb +44 -7
  459. data/lib/mongo/socket/unix.rb +1 -1
  460. data/lib/mongo/socket.rb +183 -27
  461. data/lib/mongo/srv/monitor.rb +1 -3
  462. data/lib/mongo/srv/resolver.rb +25 -4
  463. data/lib/mongo/srv/result.rb +1 -1
  464. data/lib/mongo/srv.rb +1 -1
  465. data/lib/mongo/timeout.rb +2 -2
  466. data/lib/mongo/topology_version.rb +1 -1
  467. data/lib/mongo/uri/options_mapper.rb +325 -81
  468. data/lib/mongo/uri/srv_protocol.rb +2 -2
  469. data/lib/mongo/uri.rb +61 -17
  470. data/lib/mongo/utils.rb +1 -1
  471. data/lib/mongo/version.rb +1 -5
  472. data/lib/mongo/write_concern/acknowledged.rb +1 -1
  473. data/lib/mongo/write_concern/base.rb +1 -1
  474. data/lib/mongo/write_concern/unacknowledged.rb +1 -1
  475. data/lib/mongo/write_concern.rb +1 -1
  476. data/lib/mongo.rb +26 -1
  477. data/mongo.gemspec +14 -14
  478. data/spec/README.md +23 -5
  479. data/spec/atlas/atlas_connectivity_spec.rb +10 -10
  480. data/spec/atlas/operations_spec.rb +7 -12
  481. data/spec/faas/ruby-sam-app/Gemfile +9 -0
  482. data/spec/faas/ruby-sam-app/mongodb/Gemfile +4 -0
  483. data/spec/faas/ruby-sam-app/mongodb/app.rb +149 -0
  484. data/spec/faas/ruby-sam-app/template.yaml +48 -0
  485. data/spec/integration/auth_spec.rb +1 -1
  486. data/spec/integration/awaited_ismaster_spec.rb +1 -1
  487. data/spec/integration/aws_auth_credentials_cache_spec.rb +51 -0
  488. data/spec/integration/aws_auth_request_spec.rb +2 -2
  489. data/spec/integration/aws_credentials_retriever_spec.rb +32 -2
  490. data/spec/integration/aws_lambda_examples_spec.rb +68 -0
  491. data/spec/integration/bson_symbol_spec.rb +1 -1
  492. data/spec/integration/bulk_insert_spec.rb +1 -1
  493. data/spec/integration/bulk_write_error_message_spec.rb +33 -0
  494. data/spec/integration/bulk_write_spec.rb +1 -1
  495. data/spec/integration/change_stream_examples_spec.rb +1 -1
  496. data/spec/integration/change_stream_spec.rb +12 -6
  497. data/spec/integration/check_clean_slate_spec.rb +1 -1
  498. data/spec/integration/client_authentication_options_spec.rb +1 -1
  499. data/spec/integration/client_connectivity_spec.rb +1 -1
  500. data/spec/integration/client_construction_aws_auth_spec.rb +12 -3
  501. data/spec/integration/client_construction_spec.rb +97 -9
  502. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +10 -10
  503. data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +169 -169
  504. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +3 -3
  505. data/spec/integration/client_side_encryption/auto_encryption_old_wire_version_spec.rb +1 -1
  506. data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +41 -5
  507. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +537 -387
  508. data/spec/integration/client_side_encryption/automatic_data_encryption_keys_prose_spec.rb +153 -0
  509. data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +3 -3
  510. data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +3 -3
  511. data/spec/integration/client_side_encryption/client_close_spec.rb +2 -2
  512. data/spec/integration/client_side_encryption/corpus_spec.rb +75 -38
  513. data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +40 -43
  514. data/spec/integration/client_side_encryption/data_key_spec.rb +98 -8
  515. data/spec/integration/client_side_encryption/decryption_events_prose_spec.rb +159 -0
  516. data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +60 -1
  517. data/spec/integration/client_side_encryption/explicit_queryable_encryption_spec.rb +150 -0
  518. data/spec/integration/client_side_encryption/external_key_vault_spec.rb +7 -7
  519. data/spec/integration/client_side_encryption/kms_tls_options_spec.rb +436 -0
  520. data/spec/integration/client_side_encryption/kms_tls_spec.rb +92 -0
  521. data/spec/integration/client_side_encryption/mongocryptd_prose_spec.rb +105 -0
  522. data/spec/integration/client_side_encryption/on_demand_aws_credentials_spec.rb +49 -0
  523. data/spec/integration/client_side_encryption/on_demand_azure_credentials_spec.rb +46 -0
  524. data/spec/integration/client_side_encryption/on_demand_gcp_credentials_spec.rb +47 -0
  525. data/spec/integration/client_side_encryption/queryable_encryption_examples_spec.rb +114 -0
  526. data/spec/integration/client_side_encryption/range_explicit_encryption_prose_spec.rb +583 -0
  527. data/spec/integration/client_side_encryption/rewrap_prose_spec.rb +114 -0
  528. data/spec/integration/client_side_encryption/unique_index_on_key_alt_names_prose_spec.rb +89 -0
  529. data/spec/integration/client_side_encryption/views_spec.rb +2 -2
  530. data/spec/integration/client_side_operations_timeout/encryption_prose_spec.rb +131 -0
  531. data/spec/integration/client_spec.rb +8 -3
  532. data/spec/integration/client_update_spec.rb +7 -3
  533. data/spec/integration/collection_indexes_prose_spec.rb +1 -1
  534. data/spec/integration/command_monitoring_spec.rb +1 -1
  535. data/spec/integration/command_spec.rb +2 -24
  536. data/spec/integration/connect_single_rs_name_spec.rb +1 -1
  537. data/spec/integration/connection/faas_env_spec.rb +62 -0
  538. data/spec/integration/connection_pool_populator_spec.rb +29 -7
  539. data/spec/integration/connection_spec.rb +1 -1
  540. data/spec/integration/crud_spec.rb +13 -1
  541. data/spec/integration/cursor_pinning_spec.rb +21 -62
  542. data/spec/integration/cursor_reaping_spec.rb +2 -2
  543. data/spec/integration/docs_examples_spec.rb +3 -3
  544. data/spec/integration/error_detection_spec.rb +1 -1
  545. data/spec/integration/fork_reconnect_spec.rb +17 -10
  546. data/spec/integration/get_more_spec.rb +1 -1
  547. data/spec/integration/grid_fs_bucket_spec.rb +4 -4
  548. data/spec/integration/heartbeat_events_spec.rb +1 -1
  549. data/spec/integration/map_reduce_spec.rb +5 -1
  550. data/spec/integration/mmapv1_spec.rb +1 -1
  551. data/spec/integration/mongos_pinning_spec.rb +1 -1
  552. data/spec/integration/ocsp_connectivity_spec.rb +1 -1
  553. data/spec/integration/ocsp_verifier_cache_spec.rb +1 -1
  554. data/spec/integration/ocsp_verifier_spec.rb +5 -2
  555. data/spec/integration/operation_failure_code_spec.rb +2 -2
  556. data/spec/integration/operation_failure_message_spec.rb +4 -3
  557. data/spec/integration/query_cache_spec.rb +124 -33
  558. data/spec/integration/query_cache_transactions_spec.rb +1 -1
  559. data/spec/integration/read_concern_spec.rb +1 -1
  560. data/spec/integration/read_preference_spec.rb +1 -1
  561. data/spec/integration/reconnect_spec.rb +6 -1
  562. data/spec/integration/retryable_errors_spec.rb +3 -3
  563. data/spec/integration/retryable_reads_errors_spec.rb +275 -0
  564. data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +2 -2
  565. data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +1 -1
  566. data/spec/integration/retryable_writes/shared/adds_diagnostics.rb +1 -1
  567. data/spec/integration/retryable_writes/shared/does_not_support_retries.rb +1 -1
  568. data/spec/integration/retryable_writes/shared/only_supports_legacy_retries.rb +1 -1
  569. data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +1 -1
  570. data/spec/integration/retryable_writes/shared/performs_modern_retries.rb +1 -1
  571. data/spec/integration/retryable_writes/shared/performs_no_retries.rb +1 -1
  572. data/spec/integration/retryable_writes/shared/supports_legacy_retries.rb +1 -1
  573. data/spec/integration/retryable_writes/shared/supports_modern_retries.rb +1 -1
  574. data/spec/integration/retryable_writes/shared/supports_retries.rb +1 -1
  575. data/spec/integration/retryable_writes_errors_spec.rb +316 -2
  576. data/spec/integration/sdam_error_handling_spec.rb +69 -5
  577. data/spec/integration/sdam_events_spec.rb +1 -1
  578. data/spec/integration/sdam_prose_spec.rb +3 -3
  579. data/spec/integration/search_indexes_prose_spec.rb +172 -0
  580. data/spec/integration/secondary_reads_spec.rb +1 -0
  581. data/spec/integration/server_description_spec.rb +1 -1
  582. data/spec/integration/server_monitor_spec.rb +3 -2
  583. data/spec/integration/server_selection_spec.rb +1 -1
  584. data/spec/integration/server_selector_spec.rb +5 -3
  585. data/spec/integration/server_spec.rb +26 -28
  586. data/spec/integration/shell_examples_spec.rb +1 -1
  587. data/spec/integration/size_limit_spec.rb +5 -2
  588. data/spec/integration/snappy_compression_spec.rb +1 -1
  589. data/spec/integration/snapshot_query_examples_spec.rb +129 -0
  590. data/spec/integration/srv_monitoring_spec.rb +40 -1
  591. data/spec/integration/srv_spec.rb +4 -3
  592. data/spec/integration/ssl_uri_options_spec.rb +1 -1
  593. data/spec/integration/step_down_spec.rb +25 -7
  594. data/spec/integration/time_zone_querying_spec.rb +1 -1
  595. data/spec/integration/transaction_pinning_spec.rb +20 -6
  596. data/spec/integration/transactions_api_examples_spec.rb +3 -1
  597. data/spec/integration/transactions_examples_spec.rb +1 -1
  598. data/spec/integration/truncated_utf8_spec.rb +1 -1
  599. data/spec/integration/versioned_api_examples_spec.rb +38 -32
  600. data/spec/integration/x509_auth_spec.rb +1 -1
  601. data/spec/integration/zlib_compression_spec.rb +1 -1
  602. data/spec/integration/zstd_compression_spec.rb +1 -1
  603. data/spec/kerberos/kerberos_spec.rb +5 -1
  604. data/spec/lite_spec_helper.rb +63 -26
  605. data/spec/mongo/address/ipv4_spec.rb +1 -1
  606. data/spec/mongo/address/ipv6_spec.rb +8 -1
  607. data/spec/mongo/address/unix_spec.rb +1 -1
  608. data/spec/mongo/address/validator_spec.rb +1 -1
  609. data/spec/mongo/address_spec.rb +15 -2
  610. data/spec/mongo/auth/aws/credential_cache_spec.rb +63 -0
  611. data/spec/mongo/auth/aws/credentials_retriever_spec.rb +90 -0
  612. data/spec/mongo/auth/aws/credentials_spec.rb +46 -0
  613. data/spec/mongo/auth/aws/request_region_spec.rb +1 -1
  614. data/spec/mongo/auth/aws/request_spec.rb +1 -1
  615. data/spec/mongo/auth/cr_spec.rb +2 -22
  616. data/spec/mongo/auth/gssapi/conversation_spec.rb +1 -1
  617. data/spec/mongo/auth/invalid_mechanism_spec.rb +1 -1
  618. data/spec/mongo/auth/ldap/conversation_spec.rb +1 -1
  619. data/spec/mongo/auth/ldap_spec.rb +1 -1
  620. data/spec/mongo/auth/scram/conversation_spec.rb +24 -24
  621. data/spec/mongo/auth/scram256/conversation_spec.rb +21 -21
  622. data/spec/mongo/auth/scram_negotiation_spec.rb +2 -1
  623. data/spec/mongo/auth/scram_spec.rb +1 -1
  624. data/spec/mongo/auth/stringprep/profiles/sasl_spec.rb +1 -1
  625. data/spec/mongo/auth/stringprep_spec.rb +1 -1
  626. data/spec/mongo/auth/user/view_spec.rb +96 -1
  627. data/spec/mongo/auth/user_spec.rb +1 -1
  628. data/spec/mongo/auth/x509/conversation_spec.rb +1 -1
  629. data/spec/mongo/auth/x509_spec.rb +1 -1
  630. data/spec/mongo/auth_spec.rb +1 -1
  631. data/spec/mongo/bson_spec.rb +1 -1
  632. data/spec/mongo/bulk_write/ordered_combiner_spec.rb +1 -1
  633. data/spec/mongo/bulk_write/result_spec.rb +16 -2
  634. data/spec/mongo/bulk_write/unordered_combiner_spec.rb +1 -1
  635. data/spec/mongo/bulk_write_spec.rb +142 -21
  636. data/spec/mongo/caching_cursor_spec.rb +2 -2
  637. data/spec/mongo/client_construction_spec.rb +734 -631
  638. data/spec/mongo/client_encryption_spec.rb +12 -23
  639. data/spec/mongo/client_spec.rb +547 -156
  640. data/spec/mongo/cluster/cursor_reaper_spec.rb +22 -4
  641. data/spec/mongo/cluster/periodic_executor_spec.rb +1 -1
  642. data/spec/mongo/cluster/socket_reaper_spec.rb +1 -1
  643. data/spec/mongo/cluster/topology/replica_set_spec.rb +1 -1
  644. data/spec/mongo/cluster/topology/sharded_spec.rb +1 -1
  645. data/spec/mongo/cluster/topology/single_spec.rb +1 -1
  646. data/spec/mongo/cluster/topology/unknown_spec.rb +1 -1
  647. data/spec/mongo/cluster/topology_spec.rb +1 -1
  648. data/spec/mongo/cluster_spec.rb +193 -199
  649. data/spec/mongo/cluster_time_spec.rb +1 -1
  650. data/spec/mongo/collection/view/aggregation_spec.rb +142 -43
  651. data/spec/mongo/collection/view/builder/find_command_spec.rb +1 -1
  652. data/spec/mongo/collection/view/builder/op_query_spec.rb +1 -1
  653. data/spec/mongo/collection/view/change_stream_resume_spec.rb +1 -1
  654. data/spec/mongo/collection/view/change_stream_spec.rb +6 -6
  655. data/spec/mongo/collection/view/explainable_spec.rb +3 -1
  656. data/spec/mongo/collection/view/immutable_spec.rb +1 -1
  657. data/spec/mongo/collection/view/iterable_spec.rb +1 -1
  658. data/spec/mongo/collection/view/map_reduce_spec.rb +11 -1
  659. data/spec/mongo/collection/view/readable_spec.rb +744 -2
  660. data/spec/mongo/collection/view/writable_spec.rb +145 -33
  661. data/spec/mongo/collection/view_spec.rb +1 -1
  662. data/spec/mongo/collection_crud_spec.rb +122 -15
  663. data/spec/mongo/collection_ddl_spec.rb +116 -66
  664. data/spec/mongo/collection_spec.rb +47 -2
  665. data/spec/mongo/condition_variable_spec.rb +104 -0
  666. data/spec/mongo/config/options_spec.rb +76 -0
  667. data/spec/mongo/config_spec.rb +74 -0
  668. data/spec/mongo/crypt/auto_decryption_context_spec.rb +18 -2
  669. data/spec/mongo/crypt/auto_encrypter_spec.rb +272 -12
  670. data/spec/mongo/crypt/auto_encryption_context_spec.rb +18 -2
  671. data/spec/mongo/crypt/binary_spec.rb +1 -1
  672. data/spec/mongo/crypt/binding/binary_spec.rb +1 -1
  673. data/spec/mongo/crypt/binding/context_spec.rb +68 -18
  674. data/spec/mongo/crypt/binding/helpers_spec.rb +1 -1
  675. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +18 -47
  676. data/spec/mongo/crypt/binding/status_spec.rb +1 -1
  677. data/spec/mongo/crypt/binding/version_spec.rb +48 -1
  678. data/spec/mongo/crypt/binding_unloaded_spec.rb +15 -1
  679. data/spec/mongo/crypt/data_key_context_spec.rb +46 -116
  680. data/spec/mongo/crypt/encryption_io_spec.rb +3 -1
  681. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +33 -2
  682. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +95 -2
  683. data/spec/mongo/crypt/handle_spec.rb +187 -156
  684. data/spec/mongo/crypt/helpers/mongo_crypt_spec_helper.rb +1 -1
  685. data/spec/mongo/crypt/hooks_spec.rb +30 -0
  686. data/spec/mongo/crypt/kms/azure/credentials_retriever_spec.rb +86 -0
  687. data/spec/mongo/crypt/kms/credentials_spec.rb +373 -0
  688. data/spec/mongo/crypt/kms_spec.rb +62 -0
  689. data/spec/mongo/crypt/status_spec.rb +1 -1
  690. data/spec/mongo/crypt_spec.rb +21 -0
  691. data/spec/mongo/cursor/builder/get_more_command_spec.rb +1 -1
  692. data/spec/mongo/cursor/builder/op_get_more_spec.rb +1 -1
  693. data/spec/mongo/cursor_spec.rb +119 -19
  694. data/spec/mongo/database_spec.rb +67 -2
  695. data/spec/mongo/distinguishing_semaphore_spec.rb +7 -7
  696. data/spec/mongo/error/bulk_write_error_spec.rb +1 -1
  697. data/spec/mongo/error/crypt_error_spec.rb +1 -1
  698. data/spec/mongo/error/max_bson_size_spec.rb +1 -1
  699. data/spec/mongo/error/no_server_available_spec.rb +1 -1
  700. data/spec/mongo/error/notable_spec.rb +1 -1
  701. data/spec/mongo/error/operation_failure_heavy_spec.rb +51 -2
  702. data/spec/mongo/error/operation_failure_spec.rb +1 -1
  703. data/spec/mongo/error/parser_spec.rb +1 -1
  704. data/spec/mongo/error/unsupported_option_spec.rb +1 -1
  705. data/spec/mongo/event/publisher_spec.rb +1 -1
  706. data/spec/mongo/event/subscriber_spec.rb +1 -1
  707. data/spec/mongo/grid/file/chunk_spec.rb +1 -1
  708. data/spec/mongo/grid/file/info_spec.rb +1 -1
  709. data/spec/mongo/grid/file_spec.rb +1 -1
  710. data/spec/mongo/grid/fs_bucket_spec.rb +1 -1
  711. data/spec/mongo/grid/stream/read_spec.rb +1 -1
  712. data/spec/mongo/grid/stream/write_spec.rb +1 -1
  713. data/spec/mongo/grid/stream_spec.rb +1 -1
  714. data/spec/mongo/id_spec.rb +2 -2
  715. data/spec/mongo/index/view_spec.rb +126 -1
  716. data/spec/mongo/lint_spec.rb +2 -2
  717. data/spec/mongo/logger_spec.rb +1 -1
  718. data/spec/mongo/monitoring/command_log_subscriber_spec.rb +1 -1
  719. data/spec/mongo/monitoring/event/cmap/connection_check_out_failed_spec.rb +2 -2
  720. data/spec/mongo/monitoring/event/cmap/connection_check_out_started_spec.rb +2 -2
  721. data/spec/mongo/monitoring/event/cmap/connection_checked_in_spec.rb +2 -2
  722. data/spec/mongo/monitoring/event/cmap/connection_checked_out_spec.rb +2 -2
  723. data/spec/mongo/monitoring/event/cmap/connection_closed_spec.rb +2 -2
  724. data/spec/mongo/monitoring/event/cmap/connection_created_spec.rb +2 -2
  725. data/spec/mongo/monitoring/event/cmap/connection_ready_spec.rb +2 -2
  726. data/spec/mongo/monitoring/event/cmap/pool_cleared_spec.rb +2 -2
  727. data/spec/mongo/monitoring/event/cmap/pool_closed_spec.rb +2 -2
  728. data/spec/mongo/monitoring/event/cmap/pool_created_spec.rb +2 -2
  729. data/spec/mongo/monitoring/event/command_failed_spec.rb +1 -1
  730. data/spec/mongo/monitoring/event/command_started_spec.rb +1 -1
  731. data/spec/mongo/monitoring/event/command_succeeded_spec.rb +1 -1
  732. data/spec/mongo/monitoring/event/secure_spec.rb +1 -1
  733. data/spec/mongo/monitoring/event/server_closed_spec.rb +1 -1
  734. data/spec/mongo/monitoring/event/server_description_changed_spec.rb +1 -1
  735. data/spec/mongo/monitoring/event/server_heartbeat_failed_spec.rb +1 -1
  736. data/spec/mongo/monitoring/event/server_heartbeat_started_spec.rb +1 -1
  737. data/spec/mongo/monitoring/event/server_heartbeat_succeeded_spec.rb +1 -1
  738. data/spec/mongo/monitoring/event/server_opening_spec.rb +1 -1
  739. data/spec/mongo/monitoring/event/topology_changed_spec.rb +1 -1
  740. data/spec/mongo/monitoring/event/topology_closed_spec.rb +1 -1
  741. data/spec/mongo/monitoring/event/topology_opening_spec.rb +1 -1
  742. data/spec/mongo/monitoring_spec.rb +1 -1
  743. data/spec/mongo/operation/aggregate/result_spec.rb +1 -1
  744. data/spec/mongo/operation/aggregate_spec.rb +1 -1
  745. data/spec/mongo/operation/collections_info_spec.rb +1 -1
  746. data/spec/mongo/operation/command_spec.rb +1 -1
  747. data/spec/mongo/operation/context_spec.rb +79 -0
  748. data/spec/mongo/operation/create/op_msg_spec.rb +240 -0
  749. data/spec/mongo/operation/create_index_spec.rb +1 -1
  750. data/spec/mongo/operation/create_user_spec.rb +1 -1
  751. data/spec/mongo/operation/delete/bulk_spec.rb +1 -1
  752. data/spec/mongo/operation/delete/op_msg_spec.rb +20 -10
  753. data/spec/mongo/operation/delete_spec.rb +1 -31
  754. data/spec/mongo/operation/drop_index_spec.rb +1 -1
  755. data/spec/mongo/operation/find/builder/flags_spec.rb +1 -1
  756. data/spec/mongo/operation/find/builder/modifiers_spec.rb +1 -1
  757. data/spec/mongo/operation/find/op_msg_spec.rb +66 -0
  758. data/spec/mongo/operation/get_more/op_msg_spec.rb +65 -0
  759. data/spec/mongo/operation/indexes_spec.rb +1 -1
  760. data/spec/mongo/operation/insert/bulk_spec.rb +1 -1
  761. data/spec/mongo/operation/insert/op_msg_spec.rb +131 -126
  762. data/spec/mongo/operation/insert_spec.rb +2 -34
  763. data/spec/mongo/operation/limited_spec.rb +1 -1
  764. data/spec/mongo/operation/map_reduce_spec.rb +1 -1
  765. data/spec/mongo/operation/read_preference_legacy_spec.rb +1 -1
  766. data/spec/mongo/operation/read_preference_op_msg_spec.rb +1 -1
  767. data/spec/mongo/operation/remove_user_spec.rb +1 -1
  768. data/spec/mongo/operation/result_spec.rb +21 -1
  769. data/spec/mongo/operation/shared/csot/examples.rb +113 -0
  770. data/spec/mongo/operation/specifiable_spec.rb +1 -1
  771. data/spec/mongo/operation/update/bulk_spec.rb +1 -1
  772. data/spec/mongo/operation/update/op_msg_spec.rb +14 -5
  773. data/spec/mongo/operation/update_spec.rb +1 -30
  774. data/spec/mongo/operation/update_user_spec.rb +1 -1
  775. data/spec/mongo/options/redacted_spec.rb +2 -2
  776. data/spec/mongo/protocol/caching_hash_spec.rb +37 -0
  777. data/spec/mongo/protocol/compressed_spec.rb +1 -1
  778. data/spec/mongo/protocol/get_more_spec.rb +1 -1
  779. data/spec/mongo/protocol/kill_cursors_spec.rb +1 -1
  780. data/spec/mongo/protocol/msg_spec.rb +45 -66
  781. data/spec/mongo/protocol/query_spec.rb +1 -1
  782. data/spec/mongo/protocol/registry_spec.rb +1 -1
  783. data/spec/mongo/protocol/reply_spec.rb +1 -1
  784. data/spec/mongo/query_cache_middleware_spec.rb +1 -1
  785. data/spec/mongo/query_cache_spec.rb +245 -226
  786. data/spec/mongo/retryable/write_worker_spec.rb +39 -0
  787. data/spec/mongo/retryable_spec.rb +38 -6
  788. data/spec/mongo/semaphore_spec.rb +7 -7
  789. data/spec/mongo/server/app_metadata/environment_spec.rb +344 -0
  790. data/spec/mongo/server/app_metadata/truncator_spec.rb +158 -0
  791. data/spec/mongo/server/app_metadata_spec.rb +53 -65
  792. data/spec/mongo/server/connection_auth_spec.rb +4 -2
  793. data/spec/mongo/server/connection_common_spec.rb +14 -2
  794. data/spec/mongo/server/connection_pool/populator_spec.rb +17 -3
  795. data/spec/mongo/server/connection_pool_spec.rb +567 -63
  796. data/spec/mongo/server/connection_spec.rb +93 -163
  797. data/spec/mongo/server/description/features_spec.rb +25 -1
  798. data/spec/mongo/server/description_query_methods_spec.rb +1 -1
  799. data/spec/mongo/server/description_spec.rb +1 -1
  800. data/spec/mongo/server/monitor/app_metadata_spec.rb +1 -1
  801. data/spec/mongo/server/monitor/connection_spec.rb +3 -3
  802. data/spec/mongo/server/monitor_spec.rb +6 -5
  803. data/spec/mongo/server/push_monitor_spec.rb +3 -9
  804. data/spec/mongo/server/round_trip_time_calculator_spec.rb +120 -0
  805. data/spec/mongo/server_selector/nearest_spec.rb +1 -1
  806. data/spec/mongo/server_selector/primary_preferred_spec.rb +1 -1
  807. data/spec/mongo/server_selector/primary_spec.rb +1 -1
  808. data/spec/mongo/server_selector/secondary_preferred_spec.rb +1 -1
  809. data/spec/mongo/server_selector/secondary_spec.rb +1 -1
  810. data/spec/mongo/server_selector_spec.rb +1 -1
  811. data/spec/mongo/server_spec.rb +32 -5
  812. data/spec/mongo/session/server_session_spec.rb +1 -1
  813. data/spec/mongo/session/session_pool_spec.rb +2 -17
  814. data/spec/mongo/session_spec.rb +27 -7
  815. data/spec/mongo/session_transaction_spec.rb +19 -3
  816. data/spec/mongo/socket/ssl_spec.rb +21 -26
  817. data/spec/mongo/socket/tcp_spec.rb +1 -1
  818. data/spec/mongo/socket/unix_spec.rb +1 -1
  819. data/spec/mongo/socket_spec.rb +1 -1
  820. data/spec/mongo/srv/monitor_spec.rb +1 -1
  821. data/spec/mongo/srv/result_spec.rb +1 -1
  822. data/spec/mongo/timeout_spec.rb +1 -1
  823. data/spec/mongo/tls_context_hooks_spec.rb +1 -1
  824. data/spec/mongo/uri/options_mapper_spec.rb +1605 -0
  825. data/spec/mongo/uri/srv_protocol_spec.rb +263 -4
  826. data/spec/mongo/uri_option_parsing_spec.rb +1 -1
  827. data/spec/mongo/uri_spec.rb +168 -11
  828. data/spec/mongo/utils_spec.rb +1 -1
  829. data/spec/mongo/write_concern/acknowledged_spec.rb +1 -1
  830. data/spec/mongo/write_concern/unacknowledged_spec.rb +1 -1
  831. data/spec/mongo/write_concern_spec.rb +1 -1
  832. data/spec/runners/auth.rb +1 -1
  833. data/spec/runners/change_streams/outcome.rb +1 -1
  834. data/spec/runners/change_streams/spec.rb +1 -1
  835. data/spec/runners/change_streams/test.rb +3 -3
  836. data/spec/runners/cmap/verifier.rb +2 -2
  837. data/spec/runners/cmap.rb +188 -45
  838. data/spec/runners/command_monitoring.rb +1 -1
  839. data/spec/runners/connection_string.rb +9 -1
  840. data/spec/runners/crud/context.rb +1 -1
  841. data/spec/runners/crud/operation.rb +15 -6
  842. data/spec/runners/crud/outcome.rb +1 -1
  843. data/spec/runners/crud/requirement.rb +12 -7
  844. data/spec/runners/crud/spec.rb +6 -1
  845. data/spec/runners/crud/test.rb +2 -10
  846. data/spec/runners/crud/test_base.rb +2 -2
  847. data/spec/runners/crud/verifier.rb +12 -4
  848. data/spec/runners/crud.rb +2 -2
  849. data/spec/runners/gridfs.rb +1 -1
  850. data/spec/runners/read_write_concern_document.rb +1 -1
  851. data/spec/runners/sdam/verifier.rb +1 -1
  852. data/spec/runners/sdam.rb +1 -1
  853. data/spec/runners/server_selection.rb +1 -1
  854. data/spec/runners/server_selection_rtt.rb +1 -1
  855. data/spec/runners/transactions/operation.rb +19 -15
  856. data/spec/runners/transactions/spec.rb +3 -3
  857. data/spec/runners/transactions/test.rb +75 -22
  858. data/spec/runners/transactions.rb +12 -9
  859. data/spec/runners/unified/ambiguous_operations.rb +13 -0
  860. data/spec/runners/unified/assertions.rb +163 -50
  861. data/spec/runners/unified/change_stream_operations.rb +22 -9
  862. data/spec/runners/unified/client_side_encryption_operations.rb +83 -0
  863. data/spec/runners/unified/crud_operations.rb +129 -22
  864. data/spec/runners/unified/ddl_operations.rb +160 -8
  865. data/spec/runners/unified/entity_map.rb +1 -1
  866. data/spec/runners/unified/error.rb +3 -2
  867. data/spec/runners/unified/event_subscriber.rb +9 -3
  868. data/spec/runners/unified/exceptions.rb +1 -1
  869. data/spec/runners/unified/grid_fs_operations.rb +59 -3
  870. data/spec/runners/unified/search_index_operations.rb +63 -0
  871. data/spec/runners/unified/support_operations.rb +115 -11
  872. data/spec/runners/unified/test.rb +204 -36
  873. data/spec/runners/unified/test_group.rb +1 -1
  874. data/spec/runners/unified/thread_operations.rb +73 -0
  875. data/spec/runners/unified.rb +15 -5
  876. data/spec/solo/clean_exit_spec.rb +7 -7
  877. data/spec/spec_helper.rb +2 -3
  878. data/spec/spec_tests/auth_spec.rb +1 -1
  879. data/spec/spec_tests/change_streams_unified_spec.rb +2 -1
  880. data/spec/spec_tests/client_side_encryption_spec.rb +25 -2
  881. data/spec/spec_tests/client_side_encryption_unified_spec.rb +26 -0
  882. data/spec/spec_tests/client_side_operations_timeout_spec.rb +15 -0
  883. data/spec/spec_tests/cmap_spec.rb +29 -15
  884. data/spec/spec_tests/collection_management_spec.rb +1 -1
  885. data/spec/spec_tests/command_monitoring_unified_spec.rb +1 -1
  886. data/spec/spec_tests/connection_string_spec.rb +1 -1
  887. data/spec/spec_tests/crud_spec.rb +1 -11
  888. data/spec/spec_tests/crud_unified_spec.rb +1 -1
  889. data/spec/spec_tests/data/change_streams_unified/change-streams-clusterTime.yml +43 -0
  890. data/spec/spec_tests/data/change_streams_unified/change-streams-disambiguatedPaths.yml +105 -0
  891. data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +122 -0
  892. data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +351 -0
  893. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1169 -0
  894. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1069 -0
  895. data/spec/spec_tests/data/change_streams_unified/change-streams-showExpandedEvents.yml +307 -0
  896. data/spec/spec_tests/data/change_streams_unified/change-streams.yml +859 -4
  897. data/spec/spec_tests/data/client_side_encryption/aggregate.yml +3 -17
  898. data/spec/spec_tests/data/client_side_encryption/awsTemporary.yml +57 -0
  899. data/spec/spec_tests/data/client_side_encryption/azureKMS.yml +46 -0
  900. data/spec/spec_tests/data/client_side_encryption/badQueries.yml +14 -3
  901. data/spec/spec_tests/data/client_side_encryption/basic.yml +3 -17
  902. data/spec/spec_tests/data/client_side_encryption/bulk.yml +1 -8
  903. data/spec/spec_tests/data/client_side_encryption/bypassAutoEncryption.yml +2 -2
  904. data/spec/spec_tests/data/client_side_encryption/bypassedCommand.yml +5 -4
  905. data/spec/spec_tests/data/client_side_encryption/count.yml +1 -8
  906. data/spec/spec_tests/data/client_side_encryption/countDocuments.yml +1 -8
  907. data/spec/spec_tests/data/client_side_encryption/create-and-createIndexes.yml +58 -0
  908. data/spec/spec_tests/data/client_side_encryption/delete.yml +2 -16
  909. data/spec/spec_tests/data/client_side_encryption/distinct.yml +1 -8
  910. data/spec/spec_tests/data/client_side_encryption/explain.yml +3 -10
  911. data/spec/spec_tests/data/client_side_encryption/find.yml +2 -16
  912. data/spec/spec_tests/data/client_side_encryption/findOneAndDelete.yml +1 -8
  913. data/spec/spec_tests/data/client_side_encryption/findOneAndReplace.yml +1 -8
  914. data/spec/spec_tests/data/client_side_encryption/findOneAndUpdate.yml +1 -8
  915. data/spec/spec_tests/data/client_side_encryption/fle2v2-BypassQueryAnalysis.yml +90 -0
  916. data/spec/spec_tests/data/client_side_encryption/fle2v2-Compact.yml +83 -0
  917. data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection-OldServer.yml +61 -0
  918. data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection.yml +938 -0
  919. data/spec/spec_tests/data/client_side_encryption/fle2v2-DecryptExistingData.yml +67 -0
  920. data/spec/spec_tests/data/client_side_encryption/fle2v2-Delete.yml +101 -0
  921. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-EncryptedFieldsMap.yml +80 -0
  922. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-jsonSchema.yml +103 -0
  923. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFieldsMap-defaults.yml +59 -0
  924. data/spec/spec_tests/data/client_side_encryption/fle2v2-FindOneAndUpdate.yml +201 -0
  925. data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Indexed.yml +97 -0
  926. data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Unindexed.yml +90 -0
  927. data/spec/spec_tests/data/client_side_encryption/fle2v2-MissingKey.yml +44 -0
  928. data/spec/spec_tests/data/client_side_encryption/fle2v2-NoEncryption.yml +45 -0
  929. data/spec/spec_tests/data/client_side_encryption/fle2v2-Update.yml +211 -0
  930. data/spec/spec_tests/data/client_side_encryption/fle2v2-validatorAndPartialFieldExpression.yml +170 -0
  931. data/spec/spec_tests/data/client_side_encryption/gcpKMS.yml +46 -0
  932. data/spec/spec_tests/data/client_side_encryption/getMore.yml +1 -8
  933. data/spec/spec_tests/data/client_side_encryption/insert.yml +2 -16
  934. data/spec/spec_tests/data/client_side_encryption/keyAltName.yml +1 -8
  935. data/spec/spec_tests/data/client_side_encryption/localKMS.yml +1 -8
  936. data/spec/spec_tests/data/client_side_encryption/localSchema.yml +1 -8
  937. data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +3 -1
  938. data/spec/spec_tests/data/client_side_encryption/missingKey.yml +2 -9
  939. data/spec/spec_tests/data/client_side_encryption/noSchema.yml +39 -0
  940. data/spec/spec_tests/data/client_side_encryption/replaceOne.yml +1 -8
  941. data/spec/spec_tests/data/client_side_encryption/timeoutMS.yml +67 -0
  942. data/spec/spec_tests/data/client_side_encryption/types.yml +44 -70
  943. data/spec/spec_tests/data/client_side_encryption/unified/addKeyAltName.yml +194 -0
  944. data/spec/spec_tests/data/client_side_encryption/unified/createDataKey-kms_providers-invalid.yml +67 -0
  945. data/spec/spec_tests/data/client_side_encryption/unified/createDataKey.yml +309 -0
  946. data/spec/spec_tests/data/client_side_encryption/unified/deleteKey.yml +159 -0
  947. data/spec/spec_tests/data/client_side_encryption/unified/getKey.yml +105 -0
  948. data/spec/spec_tests/data/client_side_encryption/unified/getKeyByAltName.yml +104 -0
  949. data/spec/spec_tests/data/client_side_encryption/unified/getKeys.yml +122 -0
  950. data/spec/spec_tests/data/client_side_encryption/unified/removeKeyAltName.yml +157 -0
  951. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-decrypt_failure.yml +69 -0
  952. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-encrypt_failure.yml +122 -0
  953. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey.yml +432 -0
  954. data/spec/spec_tests/data/client_side_encryption/updateMany.yml +1 -8
  955. data/spec/spec_tests/data/client_side_encryption/updateOne.yml +1 -8
  956. data/spec/spec_tests/data/client_side_encryption/validatorAndPartialFieldExpression.yml +166 -0
  957. data/spec/spec_tests/data/client_side_operations_timeout/bulkWrite.yml +87 -0
  958. data/spec/spec_tests/data/client_side_operations_timeout/change-streams.yml +358 -0
  959. data/spec/spec_tests/data/client_side_operations_timeout/close-cursors.yml +129 -0
  960. data/spec/spec_tests/data/client_side_operations_timeout/command-execution.yml +250 -0
  961. data/spec/spec_tests/data/client_side_operations_timeout/convenient-transactions.yml +113 -0
  962. data/spec/spec_tests/data/client_side_operations_timeout/cursors.yml +70 -0
  963. data/spec/spec_tests/data/client_side_operations_timeout/deprecated-options.yml +3982 -0
  964. data/spec/spec_tests/data/client_side_operations_timeout/error-transformations.yml +96 -0
  965. data/spec/spec_tests/data/client_side_operations_timeout/global-timeoutMS.yml +3236 -0
  966. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-advanced.yml +207 -0
  967. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-delete.yml +152 -0
  968. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-download.yml +182 -0
  969. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-find.yml +100 -0
  970. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-upload.yml +249 -0
  971. data/spec/spec_tests/data/client_side_operations_timeout/legacy-timeouts.yml +204 -0
  972. data/spec/spec_tests/data/client_side_operations_timeout/non-tailable-cursors.yml +307 -0
  973. data/spec/spec_tests/data/client_side_operations_timeout/override-collection-timeoutMS.yml +1877 -0
  974. data/spec/spec_tests/data/client_side_operations_timeout/override-operation-timeoutMS.yml +1918 -0
  975. data/spec/spec_tests/data/client_side_operations_timeout/retryability-legacy-timeouts.yml +1676 -0
  976. data/spec/spec_tests/data/client_side_operations_timeout/retryability-timeoutMS.yml +2824 -0
  977. data/spec/spec_tests/data/client_side_operations_timeout/sessions-inherit-timeoutMS.yml +168 -0
  978. data/spec/spec_tests/data/client_side_operations_timeout/sessions-override-operation-timeoutMS.yml +171 -0
  979. data/spec/spec_tests/data/client_side_operations_timeout/sessions-override-timeoutMS.yml +168 -0
  980. data/spec/spec_tests/data/client_side_operations_timeout/tailable-awaitData.yml +247 -0
  981. data/spec/spec_tests/data/client_side_operations_timeout/tailable-non-awaitData.yml +181 -0
  982. data/spec/spec_tests/data/cmap/connection-must-have-id.yml +2 -0
  983. data/spec/spec_tests/data/cmap/connection-must-order-ids.yml +2 -0
  984. data/spec/spec_tests/data/cmap/pool-checkin-destroy-closed.yml +2 -0
  985. data/spec/spec_tests/data/cmap/pool-checkin-destroy-stale.yml +2 -0
  986. data/spec/spec_tests/data/cmap/pool-checkin-make-available.yml +3 -1
  987. data/spec/spec_tests/data/cmap/pool-checkin.yml +5 -0
  988. data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +2 -0
  989. data/spec/spec_tests/data/cmap/pool-checkout-custom-maxConnecting-is-enforced.yml +50 -0
  990. data/spec/spec_tests/data/cmap/pool-checkout-error-closed.yml +2 -0
  991. data/spec/spec_tests/data/cmap/pool-checkout-maxConnecting-is-enforced.yml +81 -0
  992. data/spec/spec_tests/data/cmap/pool-checkout-maxConnecting-timeout.yml +71 -0
  993. data/spec/spec_tests/data/cmap/pool-checkout-minPoolSize-connection-maxConnecting.yml +64 -0
  994. data/spec/spec_tests/data/cmap/pool-checkout-multiple.yml +2 -0
  995. data/spec/spec_tests/data/cmap/pool-checkout-no-idle.yml +6 -0
  996. data/spec/spec_tests/data/cmap/pool-checkout-no-stale.yml +8 -0
  997. data/spec/spec_tests/data/cmap/pool-checkout-returned-connection-maxConnecting.yml +88 -0
  998. data/spec/spec_tests/data/cmap/pool-clear-interrupting-pending-connections.yml +43 -0
  999. data/spec/spec_tests/data/cmap/pool-clear-min-size.yml +41 -0
  1000. data/spec/spec_tests/data/cmap/pool-clear-paused.yml +18 -0
  1001. data/spec/spec_tests/data/cmap/pool-clear-ready.yml +39 -0
  1002. data/spec/spec_tests/data/cmap/pool-clear-schedule-run-interruptInUseConnections-false.yml +48 -0
  1003. data/spec/spec_tests/data/cmap/pool-close-destroy-conns.yml +2 -0
  1004. data/spec/spec_tests/data/cmap/pool-create-max-size.yml +2 -0
  1005. data/spec/spec_tests/data/cmap/pool-create-min-size-error.yml +43 -0
  1006. data/spec/spec_tests/data/cmap/pool-create-min-size.yml +9 -0
  1007. data/spec/spec_tests/data/cmap/pool-ready-ready.yml +22 -0
  1008. data/spec/spec_tests/data/cmap/pool-ready.yml +30 -0
  1009. data/spec/spec_tests/data/cmap/wait-queue-fairness.yml +2 -0
  1010. data/spec/spec_tests/data/cmap/wait-queue-timeout.yml +6 -1
  1011. data/spec/spec_tests/data/collection_management/clustered-indexes.yml +135 -0
  1012. data/spec/spec_tests/data/collection_management/createCollection-pre_and_post_images.yml +50 -0
  1013. data/spec/spec_tests/data/collection_management/modifyCollection-errorResponse.yml +59 -0
  1014. data/spec/spec_tests/data/collection_management/modifyCollection-pre_and_post_images.yml +58 -0
  1015. data/spec/spec_tests/data/collection_management/timeseries-collection.yml +35 -0
  1016. data/spec/spec_tests/data/command_monitoring_unified/bulkWrite.yml +68 -0
  1017. data/spec/spec_tests/data/command_monitoring_unified/command.yml +50 -0
  1018. data/spec/spec_tests/data/command_monitoring_unified/deleteMany.yml +79 -0
  1019. data/spec/spec_tests/data/command_monitoring_unified/deleteOne.yml +79 -0
  1020. data/spec/spec_tests/data/command_monitoring_unified/find.yml +254 -0
  1021. data/spec/spec_tests/data/command_monitoring_unified/insertMany.yml +79 -0
  1022. data/spec/spec_tests/data/command_monitoring_unified/insertOne.yml +77 -0
  1023. data/spec/spec_tests/data/command_monitoring_unified/pre-42-server-connection-id.yml +56 -0
  1024. data/spec/spec_tests/data/command_monitoring_unified/redacted-commands.yml +8 -0
  1025. data/spec/spec_tests/data/command_monitoring_unified/server-connection-id.yml +56 -0
  1026. data/spec/spec_tests/data/command_monitoring_unified/unacknowledgedBulkWrite.yml +55 -0
  1027. data/spec/spec_tests/data/command_monitoring_unified/updateMany.yml +87 -0
  1028. data/spec/spec_tests/data/command_monitoring_unified/updateOne.yml +118 -0
  1029. data/spec/spec_tests/data/command_monitoring_unified/writeConcernError.yml +80 -0
  1030. data/spec/spec_tests/data/connection_string/invalid-uris.yml +0 -10
  1031. data/spec/spec_tests/data/connection_string/valid-options.yml +13 -0
  1032. data/spec/spec_tests/data/crud/read/aggregate-collation.yml +1 -1
  1033. data/spec/spec_tests/data/crud/read/count-collation.yml +1 -1
  1034. data/spec/spec_tests/data/crud/read/distinct-collation.yml +1 -1
  1035. data/spec/spec_tests/data/crud/read/find-collation.yml +1 -1
  1036. data/spec/spec_tests/data/crud/write/bulkWrite-collation.yml +1 -1
  1037. data/spec/spec_tests/data/crud/write/deleteMany-collation.yml +1 -1
  1038. data/spec/spec_tests/data/crud/write/deleteOne-collation.yml +1 -1
  1039. data/spec/spec_tests/data/crud/write/findOneAndDelete-collation.yml +1 -1
  1040. data/spec/spec_tests/data/crud/write/findOneAndReplace-collation.yml +1 -1
  1041. data/spec/spec_tests/data/crud/write/findOneAndUpdate-collation.yml +1 -1
  1042. data/spec/spec_tests/data/crud/write/replaceOne-collation.yml +1 -1
  1043. data/spec/spec_tests/data/crud/write/updateMany-collation.yml +1 -1
  1044. data/spec/spec_tests/data/crud/write/updateOne-collation.yml +1 -1
  1045. data/spec/spec_tests/data/crud_unified/aggregate-allowdiskuse.yml +75 -0
  1046. data/spec/spec_tests/data/crud_unified/aggregate-merge-errorResponse.yml +42 -0
  1047. data/spec/spec_tests/data/crud_unified/aggregate-merge.yml +185 -0
  1048. data/spec/spec_tests/data/crud_unified/aggregate-out-readConcern.yml +171 -0
  1049. data/spec/spec_tests/data/crud_unified/aggregate-write-readPreference.yml +6 -0
  1050. data/spec/spec_tests/data/crud_unified/aggregate.yml +215 -0
  1051. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters-clientError.yml +98 -0
  1052. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters.yml +174 -0
  1053. data/spec/spec_tests/data/crud_unified/bulkWrite-comment.yml +189 -0
  1054. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-clientError.yml +113 -0
  1055. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-serverError.yml +142 -0
  1056. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint.yml +154 -0
  1057. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-hint-unacknowledged.yml +98 -0
  1058. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-let.yml +86 -0
  1059. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-hint-unacknowledged.yml +97 -0
  1060. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-let.yml +86 -0
  1061. data/spec/spec_tests/data/crud_unified/bulkWrite-errorResponse.yml +50 -0
  1062. data/spec/spec_tests/data/crud_unified/bulkWrite-insertOne-dots_and_dollars.yml +138 -0
  1063. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-dots_and_dollars.yml +165 -0
  1064. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-hint-unacknowledged.yml +103 -0
  1065. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-let.yml +93 -0
  1066. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-clientError.yml +148 -0
  1067. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-serverError.yml +239 -0
  1068. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint.yml +256 -0
  1069. data/spec/spec_tests/data/crud_unified/bulkWrite-update-validation.yml +73 -0
  1070. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-dots_and_dollars.yml +150 -0
  1071. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-hint-unacknowledged.yml +104 -0
  1072. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-let.yml +96 -0
  1073. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-dots_and_dollars.yml +150 -0
  1074. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-hint-unacknowledged.yml +103 -0
  1075. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-let.yml +95 -0
  1076. data/spec/spec_tests/data/crud_unified/countDocuments-comment.yml +92 -0
  1077. data/spec/spec_tests/data/crud_unified/db-aggregate-write-readPreference.yml +6 -0
  1078. data/spec/spec_tests/data/crud_unified/db-aggregate.yml +73 -0
  1079. data/spec/spec_tests/data/crud_unified/deleteMany-comment.yml +97 -0
  1080. data/spec/spec_tests/data/crud_unified/deleteMany-hint-clientError.yml +87 -0
  1081. data/spec/spec_tests/data/crud_unified/deleteMany-hint-serverError.yml +107 -0
  1082. data/spec/spec_tests/data/crud_unified/deleteMany-hint-unacknowledged.yml +90 -0
  1083. data/spec/spec_tests/data/crud_unified/deleteMany-hint.yml +99 -0
  1084. data/spec/spec_tests/data/crud_unified/deleteMany-let.yml +2 -0
  1085. data/spec/spec_tests/data/crud_unified/deleteOne-comment.yml +98 -0
  1086. data/spec/spec_tests/data/crud_unified/deleteOne-errorResponse.yml +46 -0
  1087. data/spec/spec_tests/data/crud_unified/deleteOne-hint-clientError.yml +80 -0
  1088. data/spec/spec_tests/data/crud_unified/deleteOne-hint-serverError.yml +100 -0
  1089. data/spec/spec_tests/data/crud_unified/deleteOne-hint-unacknowledged.yml +89 -0
  1090. data/spec/spec_tests/data/crud_unified/deleteOne-hint.yml +95 -0
  1091. data/spec/spec_tests/data/crud_unified/deleteOne-let.yml +2 -0
  1092. data/spec/spec_tests/data/crud_unified/distinct-comment.yml +98 -0
  1093. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount-comment.yml +95 -0
  1094. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +49 -135
  1095. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-clientError.yml +55 -0
  1096. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-serverError.yml +68 -0
  1097. data/spec/spec_tests/data/crud_unified/find-allowdiskuse.yml +79 -0
  1098. data/spec/spec_tests/data/crud_unified/find-comment.yml +166 -0
  1099. data/spec/spec_tests/data/crud_unified/find-test-all-options.yml +377 -0
  1100. data/spec/spec_tests/data/crud_unified/find.yml +68 -0
  1101. data/spec/spec_tests/data/crud_unified/findOneAndDelete-comment.yml +96 -0
  1102. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-clientError.yml +91 -0
  1103. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-serverError.yml +107 -0
  1104. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-unacknowledged.yml +88 -0
  1105. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint.yml +102 -0
  1106. data/spec/spec_tests/data/crud_unified/findOneAndDelete-let.yml +2 -4
  1107. data/spec/spec_tests/data/crud_unified/findOneAndReplace-comment.yml +101 -0
  1108. data/spec/spec_tests/data/crud_unified/findOneAndReplace-dots_and_dollars.yml +140 -0
  1109. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-clientError.yml +83 -0
  1110. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-serverError.yml +99 -0
  1111. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-unacknowledged.yml +96 -0
  1112. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint.yml +98 -0
  1113. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-comment.yml +95 -0
  1114. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-dots_and_dollars.yml +127 -0
  1115. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-errorResponse.yml +69 -0
  1116. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-clientError.yml +84 -0
  1117. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-serverError.yml +100 -0
  1118. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-unacknowledged.yml +92 -0
  1119. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint.yml +99 -0
  1120. data/spec/spec_tests/data/crud_unified/insertMany-comment.yml +93 -0
  1121. data/spec/spec_tests/data/crud_unified/insertMany-dots_and_dollars.yml +128 -0
  1122. data/spec/spec_tests/data/crud_unified/insertOne-comment.yml +91 -0
  1123. data/spec/spec_tests/data/crud_unified/insertOne-dots_and_dollars.yml +238 -0
  1124. data/spec/spec_tests/data/crud_unified/insertOne-errorResponse.yml +46 -0
  1125. data/spec/spec_tests/data/crud_unified/replaceOne-comment.yml +105 -0
  1126. data/spec/spec_tests/data/crud_unified/replaceOne-dots_and_dollars.yml +180 -0
  1127. data/spec/spec_tests/data/crud_unified/replaceOne-hint-unacknowledged.yml +95 -0
  1128. data/spec/spec_tests/data/crud_unified/replaceOne-hint.yml +108 -0
  1129. data/spec/spec_tests/data/crud_unified/replaceOne-let.yml +98 -0
  1130. data/spec/spec_tests/data/crud_unified/replaceOne-validation.yml +37 -0
  1131. data/spec/spec_tests/data/crud_unified/updateMany-comment.yml +104 -0
  1132. data/spec/spec_tests/data/crud_unified/updateMany-dots_and_dollars.yml +138 -0
  1133. data/spec/spec_tests/data/crud_unified/updateMany-hint-clientError.yml +91 -0
  1134. data/spec/spec_tests/data/crud_unified/updateMany-hint-serverError.yml +115 -0
  1135. data/spec/spec_tests/data/crud_unified/updateMany-hint-unacknowledged.yml +96 -0
  1136. data/spec/spec_tests/data/crud_unified/updateMany-hint.yml +115 -0
  1137. data/spec/spec_tests/data/crud_unified/updateMany-let.yml +5 -1
  1138. data/spec/spec_tests/data/crud_unified/updateMany-validation.yml +39 -0
  1139. data/spec/spec_tests/data/crud_unified/updateOne-comment.yml +104 -0
  1140. data/spec/spec_tests/data/crud_unified/updateOne-dots_and_dollars.yml +138 -0
  1141. data/spec/spec_tests/data/crud_unified/updateOne-errorResponse.yml +47 -0
  1142. data/spec/spec_tests/data/crud_unified/updateOne-hint-clientError.yml +85 -0
  1143. data/spec/spec_tests/data/crud_unified/updateOne-hint-serverError.yml +109 -0
  1144. data/spec/spec_tests/data/crud_unified/updateOne-hint-unacknowledged.yml +95 -0
  1145. data/spec/spec_tests/data/crud_unified/updateOne-hint.yml +109 -0
  1146. data/spec/spec_tests/data/crud_unified/updateOne-let.yml +5 -1
  1147. data/spec/spec_tests/data/crud_unified/updateOne-validation.yml +37 -0
  1148. data/spec/spec_tests/data/crud_unified/updateWithPipelines.yml +8 -14
  1149. data/spec/spec_tests/data/gridfs_unified/delete.yml +198 -0
  1150. data/spec/spec_tests/data/gridfs_unified/download.yml +241 -0
  1151. data/spec/spec_tests/data/gridfs_unified/downloadByName.yml +159 -0
  1152. data/spec/spec_tests/data/gridfs_unified/upload-disableMD5.yml +92 -0
  1153. data/spec/spec_tests/data/gridfs_unified/upload.yml +288 -0
  1154. data/spec/spec_tests/data/index_management/createSearchIndex.yml +64 -0
  1155. data/spec/spec_tests/data/index_management/createSearchIndexes.yml +86 -0
  1156. data/spec/spec_tests/data/index_management/dropSearchIndex.yml +43 -0
  1157. data/spec/spec_tests/data/index_management/listSearchIndexes.yml +91 -0
  1158. data/spec/spec_tests/data/index_management/updateSearchIndex.yml +46 -0
  1159. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-serverErrors-pre4.9.yml → legacy/estimatedDocumentCount-serverErrors.yml} +0 -2
  1160. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-pre4.9.yml → legacy/estimatedDocumentCount.yml} +0 -2
  1161. data/spec/spec_tests/data/retryable_reads/unified/handshakeError.yml +1342 -0
  1162. data/spec/spec_tests/data/retryable_writes/{bulkWrite-serverErrors.yml → legacy/bulkWrite-serverErrors.yml} +1 -1
  1163. data/spec/spec_tests/data/retryable_writes/{deleteOne-serverErrors.yml → legacy/deleteOne-serverErrors.yml} +1 -1
  1164. data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-serverErrors.yml → legacy/findOneAndDelete-serverErrors.yml} +1 -1
  1165. data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-serverErrors.yml → legacy/findOneAndReplace-serverErrors.yml} +1 -1
  1166. data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-serverErrors.yml → legacy/findOneAndUpdate-serverErrors.yml} +1 -1
  1167. data/spec/spec_tests/data/retryable_writes/{insertMany-serverErrors.yml → legacy/insertMany-serverErrors.yml} +1 -1
  1168. data/spec/spec_tests/data/retryable_writes/{insertOne-serverErrors.yml → legacy/insertOne-serverErrors.yml} +5 -5
  1169. data/spec/spec_tests/data/retryable_writes/{replaceOne-serverErrors.yml → legacy/replaceOne-serverErrors.yml} +1 -1
  1170. data/spec/spec_tests/data/retryable_writes/{updateOne-serverErrors.yml → legacy/updateOne-serverErrors.yml} +1 -1
  1171. data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +93 -0
  1172. data/spec/spec_tests/data/retryable_writes/unified/handshakeError.yml +785 -0
  1173. data/spec/spec_tests/data/retryable_writes/unified/insertOne-noWritesPerformedError.yml +54 -0
  1174. data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +75 -0
  1175. data/spec/spec_tests/data/run_command_unified/runCommand.yml +319 -0
  1176. data/spec/spec_tests/data/sdam/errors/prefer-error-code.yml +2 -2
  1177. data/spec/spec_tests/data/sdam/rs/electionId_precedence_setVersion.yml +62 -0
  1178. data/spec/spec_tests/data/sdam/rs/null_election_id-pre-6.0.yml +175 -0
  1179. data/spec/spec_tests/data/sdam/rs/null_election_id.yml +20 -18
  1180. data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0-pre-6.0.yml +87 -0
  1181. data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0.yml +1 -1
  1182. data/spec/spec_tests/data/sdam/rs/set_version_can_rollback.yml +101 -0
  1183. data/spec/spec_tests/data/sdam/rs/setversion_equal_max_without_electionid.yml +78 -0
  1184. data/spec/spec_tests/data/sdam/rs/setversion_greaterthan_max_without_electionid.yml +79 -0
  1185. data/spec/spec_tests/data/sdam/rs/setversion_without_electionid-pre-6.0.yml +79 -0
  1186. data/spec/spec_tests/data/sdam/rs/setversion_without_electionid.yml +9 -10
  1187. data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid-pre-6.0.yml +117 -0
  1188. data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid.yml +23 -21
  1189. data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +1 -1
  1190. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_no_primary.yml +38 -39
  1191. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_primary.yml +38 -39
  1192. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_removal.yml +1 -1
  1193. data/spec/spec_tests/data/sdam_monitoring/required_replica_set.yml +1 -1
  1194. data/spec/spec_tests/data/sdam_monitoring/standalone.yml +1 -1
  1195. data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +2 -2
  1196. data/spec/spec_tests/data/sdam_unified/auth-error.yml +130 -0
  1197. data/spec/spec_tests/data/sdam_unified/auth-misc-command-error.yml +132 -0
  1198. data/spec/spec_tests/data/sdam_unified/auth-network-error.yml +132 -0
  1199. data/spec/spec_tests/data/sdam_unified/auth-network-timeout-error.yml +138 -0
  1200. data/spec/spec_tests/data/sdam_unified/auth-shutdown-error.yml +133 -0
  1201. data/spec/spec_tests/data/sdam_unified/cancel-server-check.yml +143 -0
  1202. data/spec/spec_tests/data/sdam_unified/connectTimeoutMS.yml +130 -0
  1203. data/spec/spec_tests/data/sdam_unified/find-network-error.yml +135 -0
  1204. data/spec/spec_tests/data/sdam_unified/find-network-timeout-error.yml +119 -0
  1205. data/spec/spec_tests/data/sdam_unified/find-shutdown-error.yml +163 -0
  1206. data/spec/spec_tests/data/sdam_unified/hello-command-error.yml +233 -0
  1207. data/spec/spec_tests/data/sdam_unified/hello-network-error.yml +228 -0
  1208. data/spec/spec_tests/data/sdam_unified/hello-timeout.yml +318 -0
  1209. data/spec/spec_tests/data/sdam_unified/insert-network-error.yml +137 -0
  1210. data/spec/spec_tests/data/sdam_unified/insert-shutdown-error.yml +162 -0
  1211. data/spec/spec_tests/data/sdam_unified/interruptInUse-pool-clear.yml +340 -0
  1212. data/spec/spec_tests/data/sdam_unified/minPoolSize-error.yml +125 -0
  1213. data/spec/spec_tests/data/sdam_unified/pool-cleared-error.yml +239 -0
  1214. data/spec/spec_tests/data/sdam_unified/rediscover-quickly-after-step-down.yml +144 -0
  1215. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-directConnection.yml +6 -5
  1216. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-no-results.yml +5 -0
  1217. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-replicaSet-errors.yml +2 -2
  1218. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-txt.yml +5 -4
  1219. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true-txt.yml +5 -0
  1220. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true.yml +5 -0
  1221. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero-txt.yml +11 -0
  1222. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero.yml +11 -0
  1223. data/spec/spec_tests/data/seed_list_discovery/replica-set/srv-service-name.yml +11 -0
  1224. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet-txt.yml +5 -0
  1225. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet.yml +5 -0
  1226. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-equal_to_srv_records.yml +16 -0
  1227. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-greater_than_srv_records.yml +15 -0
  1228. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-less_than_srv_records.yml +15 -0
  1229. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero-txt.yml +15 -0
  1230. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero.yml +15 -0
  1231. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-equal_to_srv_records.yml +13 -0
  1232. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-greater_than_srv_records.yml +12 -0
  1233. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-less_than_srv_records.yml +10 -0
  1234. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-zero.yml +11 -0
  1235. data/spec/spec_tests/data/server_selection/Unknown/read/ghost.yml +11 -0
  1236. data/spec/spec_tests/data/server_selection/Unknown/write/ghost.yml +11 -0
  1237. data/spec/spec_tests/data/sessions_unified/driver-sessions-dirty-session-errors.yml +351 -0
  1238. data/spec/spec_tests/data/sessions_unified/driver-sessions-server-support.yml +123 -0
  1239. data/spec/spec_tests/data/sessions_unified/implicit-sessions-default-causal-consistency.yml +119 -0
  1240. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-client-error.yml +9 -3
  1241. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-unsupported-ops.yml +1 -1
  1242. data/spec/spec_tests/data/sessions_unified/snapshot-sessions.yml +1 -1
  1243. data/spec/spec_tests/data/transactions/error-labels.yml +1 -1
  1244. data/spec/spec_tests/data/transactions/errors-client.yml +8 -9
  1245. data/spec/spec_tests/data/transactions/mongos-recovery-token.yml +1 -1
  1246. data/spec/spec_tests/data/transactions/retryable-abort-errorLabels.yml +0 -2
  1247. data/spec/spec_tests/data/transactions/retryable-abort.yml +7 -9
  1248. data/spec/spec_tests/data/transactions/retryable-commit-errorLabels.yml +0 -2
  1249. data/spec/spec_tests/data/transactions/retryable-commit.yml +7 -9
  1250. data/spec/spec_tests/data/transactions/retryable-writes.yml +0 -2
  1251. data/spec/spec_tests/data/transactions_unified/do-not-retry-read-in-transaction.yml +64 -0
  1252. data/spec/spec_tests/data/transactions_unified/mongos-unpin.yml +1 -1
  1253. data/spec/spec_tests/data/transactions_unified/retryable-abort-handshake.yml +118 -0
  1254. data/spec/spec_tests/data/transactions_unified/retryable-commit-handshake.yml +118 -0
  1255. data/spec/spec_tests/data/unified/valid-fail/entity-findCursor-malformed.yml +31 -0
  1256. data/spec/spec_tests/data/unified/valid-fail/entity-findCursor.yml +31 -0
  1257. data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError-malformed.yml +34 -0
  1258. data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError.yml +35 -0
  1259. data/spec/spec_tests/data/unified/valid-fail/operation-unsupported.yml +13 -0
  1260. data/spec/spec_tests/data/unified/valid-pass/assertNumberConnectionsCheckedOut.yml +17 -0
  1261. data/spec/spec_tests/data/unified/valid-pass/collectionData-createOptions.yml +37 -0
  1262. data/spec/spec_tests/data/unified/valid-pass/entity-client-cmap-events.yml +40 -0
  1263. data/spec/spec_tests/data/unified/valid-pass/entity-client-storeEventsAsEntities.yml +37 -0
  1264. data/spec/spec_tests/data/unified/valid-pass/expectedError-errorResponse.yml +39 -0
  1265. data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-eventType.yml +66 -0
  1266. data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-ignoreExtraEvents.yml +78 -0
  1267. data/spec/spec_tests/data/unified/valid-pass/ignoreResultAndError.yml +34 -0
  1268. data/spec/spec_tests/data/unified/valid-pass/observeSensitiveCommands.yml +255 -0
  1269. data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +22 -1
  1270. data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +3 -3
  1271. data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +19 -13
  1272. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-reads.yml +3 -3
  1273. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +9 -9
  1274. data/spec/spec_tests/data/unified/valid-pass/poc-sessions.yml +3 -4
  1275. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-convenient-api.yml +1 -1
  1276. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-mongos-pin-auto.yml +1 -1
  1277. data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +6 -5
  1278. data/spec/spec_tests/data/uri_options/srv-options.yml +96 -0
  1279. data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +6 -4
  1280. data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +7 -5
  1281. data/spec/spec_tests/data/versioned_api/transaction-handling.yml +4 -4
  1282. data/spec/spec_tests/gridfs_spec.rb +1 -1
  1283. data/spec/spec_tests/gridfs_unified_spec.rb +13 -0
  1284. data/spec/spec_tests/index_management_unified_spec.rb +13 -0
  1285. data/spec/spec_tests/load_balancers_spec.rb +1 -1
  1286. data/spec/spec_tests/max_staleness_spec.rb +1 -1
  1287. data/spec/spec_tests/read_write_concern_connection_string_spec.rb +1 -1
  1288. data/spec/spec_tests/read_write_concern_document_spec.rb +1 -1
  1289. data/spec/spec_tests/read_write_concern_operaton_spec.rb +1 -1
  1290. data/spec/spec_tests/retryable_reads_spec.rb +7 -2
  1291. data/spec/spec_tests/retryable_reads_unified_spec.rb +22 -0
  1292. data/spec/spec_tests/retryable_writes_spec.rb +5 -2
  1293. data/spec/spec_tests/retryable_writes_unified_spec.rb +21 -0
  1294. data/spec/spec_tests/run_command_unified_spec.rb +13 -0
  1295. data/spec/spec_tests/sdam_monitoring_spec.rb +1 -1
  1296. data/spec/spec_tests/sdam_spec.rb +5 -1
  1297. data/spec/spec_tests/sdam_unified_spec.rb +15 -0
  1298. data/spec/spec_tests/seed_list_discovery_spec.rb +11 -2
  1299. data/spec/spec_tests/server_selection_rtt_spec.rb +7 -7
  1300. data/spec/spec_tests/server_selection_spec.rb +1 -1
  1301. data/spec/spec_tests/sessions_unified_spec.rb +1 -1
  1302. data/spec/spec_tests/transactions_api_spec.rb +1 -1
  1303. data/spec/spec_tests/transactions_spec.rb +1 -1
  1304. data/spec/spec_tests/transactions_unified_spec.rb +3 -2
  1305. data/spec/spec_tests/unified_spec.rb +2 -2
  1306. data/spec/spec_tests/uri_options_spec.rb +1 -1
  1307. data/spec/spec_tests/versioned_api_spec.rb +1 -1
  1308. data/spec/stress/cleanup_spec.rb +1 -1
  1309. data/spec/stress/connection_pool_stress_spec.rb +1 -62
  1310. data/spec/stress/connection_pool_timing_spec.rb +12 -36
  1311. data/spec/stress/fork_reconnect_stress_spec.rb +10 -10
  1312. data/spec/stress/push_monitor_close_spec.rb +1 -1
  1313. data/spec/support/authorization.rb +2 -2
  1314. data/spec/support/aws_utils/base.rb +1 -1
  1315. data/spec/support/aws_utils/inspector.rb +1 -1
  1316. data/spec/support/aws_utils/orchestrator.rb +20 -8
  1317. data/spec/support/aws_utils/provisioner.rb +1 -1
  1318. data/spec/support/aws_utils.rb +4 -3
  1319. data/spec/support/background_thread_registry.rb +4 -14
  1320. data/spec/support/certificates/atlas-ocsp-ca.crt +89 -79
  1321. data/spec/support/certificates/atlas-ocsp.crt +117 -122
  1322. data/spec/support/certificates/retrieve-atlas-cert +40 -0
  1323. data/spec/support/client_registry.rb +6 -2
  1324. data/spec/support/client_registry_macros.rb +1 -1
  1325. data/spec/support/cluster_tools.rb +17 -12
  1326. data/spec/support/common_shortcuts.rb +53 -6
  1327. data/spec/support/constraints.rb +21 -1
  1328. data/spec/support/crypt/corpus/corpus-encrypted.json +9515 -0
  1329. data/spec/support/crypt/corpus/corpus-key-aws.json +32 -32
  1330. data/spec/support/crypt/corpus/corpus-key-azure.json +33 -0
  1331. data/spec/support/crypt/corpus/corpus-key-gcp.json +35 -0
  1332. data/spec/support/crypt/corpus/corpus-key-kmip.json +32 -0
  1333. data/spec/support/crypt/corpus/corpus-key-local.json +30 -30
  1334. data/spec/support/crypt/corpus/corpus-schema.json +4399 -121
  1335. data/spec/support/crypt/corpus/corpus.json +4999 -37
  1336. data/spec/support/crypt/data_keys/key_document_azure.json +33 -0
  1337. data/spec/support/crypt/data_keys/key_document_gcp.json +37 -0
  1338. data/spec/support/crypt/data_keys/key_document_kmip.json +32 -0
  1339. data/spec/support/crypt/encrypted_fields/encryptedFields.json +32 -0
  1340. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Date.json +30 -0
  1341. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalNoPrecision.json +21 -0
  1342. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalPrecision.json +29 -0
  1343. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoubleNoPrecision.json +21 -0
  1344. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoublePrecision.json +30 -0
  1345. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Int.json +27 -0
  1346. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Long.json +27 -0
  1347. data/spec/support/crypt/keys/key1-document.json +30 -0
  1348. data/spec/support/crypt/schema_maps/schema_map_azure.json +17 -0
  1349. data/spec/support/crypt/schema_maps/schema_map_azure_key_alt_names.json +12 -0
  1350. data/spec/support/crypt/schema_maps/schema_map_gcp.json +17 -0
  1351. data/spec/support/crypt/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
  1352. data/spec/support/crypt/schema_maps/schema_map_kmip.json +17 -0
  1353. data/spec/support/crypt/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
  1354. data/spec/support/crypt.rb +269 -14
  1355. data/spec/support/dns.rb +1 -1
  1356. data/spec/support/json_ext_formatter.rb +1 -1
  1357. data/spec/support/keyword_struct.rb +1 -1
  1358. data/spec/support/local_resource_registry.rb +1 -1
  1359. data/spec/support/macros.rb +29 -0
  1360. data/spec/support/matchers.rb +5 -5
  1361. data/spec/support/mongos_macros.rb +24 -0
  1362. data/spec/support/monitoring_ext.rb +1 -1
  1363. data/spec/support/ocsp +1 -1
  1364. data/spec/support/primary_socket.rb +1 -1
  1365. data/spec/support/recording_logger.rb +27 -0
  1366. data/spec/support/sdam_formatter_integration.rb +1 -1
  1367. data/spec/support/shared/app_metadata.rb +15 -3
  1368. data/spec/support/shared/auth_context.rb +1 -0
  1369. data/spec/support/shared/protocol.rb +1 -1
  1370. data/spec/support/shared/scram_conversation.rb +3 -2
  1371. data/spec/support/shared/server_selector.rb +1 -1
  1372. data/spec/support/shared/session.rb +16 -10
  1373. data/spec/support/spec_config.rb +133 -2
  1374. data/spec/support/spec_setup.rb +3 -3
  1375. data/spec/support/using_hash.rb +11 -2
  1376. data/spec/support/utils.rb +280 -229
  1377. metadata +1790 -1289
  1378. checksums.yaml.gz.sig +0 -0
  1379. data/lib/mongo/operation/aggregate/command.rb +0 -55
  1380. data/lib/mongo/operation/collections_info/command.rb +0 -48
  1381. data/lib/mongo/operation/count/command.rb +0 -47
  1382. data/lib/mongo/operation/create/command.rb +0 -47
  1383. data/lib/mongo/operation/create_index/command.rb +0 -61
  1384. data/lib/mongo/operation/delete/command.rb +0 -52
  1385. data/lib/mongo/operation/delete/legacy.rb +0 -64
  1386. data/lib/mongo/operation/distinct/command.rb +0 -47
  1387. data/lib/mongo/operation/explain/command.rb +0 -58
  1388. data/lib/mongo/operation/explain/legacy.rb +0 -52
  1389. data/lib/mongo/operation/find/builder/legacy.rb +0 -123
  1390. data/lib/mongo/operation/find/command.rb +0 -51
  1391. data/lib/mongo/operation/find/legacy/result.rb +0 -46
  1392. data/lib/mongo/operation/find/legacy.rb +0 -52
  1393. data/lib/mongo/operation/get_more/command.rb +0 -43
  1394. data/lib/mongo/operation/indexes/command.rb +0 -42
  1395. data/lib/mongo/operation/indexes/legacy.rb +0 -48
  1396. data/lib/mongo/operation/insert/command.rb +0 -59
  1397. data/lib/mongo/operation/insert/legacy.rb +0 -68
  1398. data/lib/mongo/operation/kill_cursors/command.rb +0 -48
  1399. data/lib/mongo/operation/list_collections/command.rb +0 -46
  1400. data/lib/mongo/operation/map_reduce/command.rb +0 -51
  1401. data/lib/mongo/operation/parallel_scan/command.rb +0 -57
  1402. data/lib/mongo/operation/remove_user/command.rb +0 -46
  1403. data/lib/mongo/operation/shared/op_msg_or_find_command.rb +0 -44
  1404. data/lib/mongo/operation/update/command.rb +0 -53
  1405. data/lib/mongo/operation/update/legacy/result.rb +0 -112
  1406. data/lib/mongo/operation/update/legacy.rb +0 -76
  1407. data/lib/mongo/operation/users_info/command.rb +0 -46
  1408. data/lib/mongo/operation/write_command/command.rb +0 -51
  1409. data/lib/mongo/protocol/delete.rb +0 -172
  1410. data/lib/mongo/protocol/insert.rb +0 -181
  1411. data/lib/mongo/protocol/update.rb +0 -214
  1412. data/spec/mongo/dbref_spec.rb +0 -152
  1413. data/spec/mongo/operation/delete/command_spec.rb +0 -115
  1414. data/spec/mongo/operation/find/legacy_spec.rb +0 -131
  1415. data/spec/mongo/operation/get_more_spec.rb +0 -63
  1416. data/spec/mongo/operation/insert/command_spec.rb +0 -118
  1417. data/spec/mongo/operation/kill_cursors_spec.rb +0 -47
  1418. data/spec/mongo/operation/update/command_spec.rb +0 -122
  1419. data/spec/mongo/protocol/delete_spec.rb +0 -185
  1420. data/spec/mongo/protocol/insert_spec.rb +0 -179
  1421. data/spec/mongo/protocol/update_spec.rb +0 -204
  1422. data/spec/mongo/server/round_trip_time_averager_spec.rb +0 -48
  1423. data/spec/shared/LICENSE +0 -20
  1424. data/spec/shared/bin/get-mongodb-download-url +0 -17
  1425. data/spec/shared/bin/s3-copy +0 -45
  1426. data/spec/shared/bin/s3-upload +0 -69
  1427. data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
  1428. data/spec/shared/lib/mrss/cluster_config.rb +0 -231
  1429. data/spec/shared/lib/mrss/constraints.rb +0 -385
  1430. data/spec/shared/lib/mrss/docker_runner.rb +0 -271
  1431. data/spec/shared/lib/mrss/event_subscriber.rb +0 -200
  1432. data/spec/shared/lib/mrss/lite_constraints.rb +0 -191
  1433. data/spec/shared/lib/mrss/server_version_registry.rb +0 -120
  1434. data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
  1435. data/spec/shared/lib/mrss/utils.rb +0 -15
  1436. data/spec/shared/share/Dockerfile.erb +0 -323
  1437. data/spec/shared/share/haproxy-1.conf +0 -16
  1438. data/spec/shared/share/haproxy-2.conf +0 -17
  1439. data/spec/shared/shlib/distro.sh +0 -73
  1440. data/spec/shared/shlib/server.sh +0 -367
  1441. data/spec/shared/shlib/set_env.sh +0 -131
  1442. data/spec/spec_tests/change_streams_spec.rb +0 -93
  1443. data/spec/spec_tests/command_monitoring_spec.rb +0 -71
  1444. data/spec/spec_tests/data/change_streams/change-streams-errors.yml +0 -101
  1445. data/spec/spec_tests/data/change_streams/change-streams-resume-allowlist.yml +0 -1173
  1446. data/spec/spec_tests/data/change_streams/change-streams-resume-errorLabels.yml +0 -1105
  1447. data/spec/spec_tests/data/change_streams/change-streams.yml +0 -535
  1448. data/spec/spec_tests/data/command_monitoring/bulkWrite.yml +0 -49
  1449. data/spec/spec_tests/data/command_monitoring/command.yml +0 -61
  1450. data/spec/spec_tests/data/command_monitoring/deleteMany.yml +0 -55
  1451. data/spec/spec_tests/data/command_monitoring/deleteOne.yml +0 -55
  1452. data/spec/spec_tests/data/command_monitoring/find.yml +0 -266
  1453. data/spec/spec_tests/data/command_monitoring/insertMany.yml +0 -75
  1454. data/spec/spec_tests/data/command_monitoring/insertOne.yml +0 -51
  1455. data/spec/spec_tests/data/command_monitoring/unacknowledgedBulkWrite.yml +0 -34
  1456. data/spec/spec_tests/data/command_monitoring/updateMany.yml +0 -65
  1457. data/spec/spec_tests/data/command_monitoring/updateOne.yml +0 -90
  1458. data/spec/spec_tests/data/crud_v2/aggregate-merge.yml +0 -103
  1459. data/spec/spec_tests/data/crud_v2/aggregate-out-readConcern.yml +0 -111
  1460. data/spec/spec_tests/data/crud_v2/bulkWrite-arrayFilters.yml +0 -103
  1461. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-clientError.yml +0 -63
  1462. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-serverError.yml +0 -92
  1463. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint.yml +0 -103
  1464. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-clientError.yml +0 -90
  1465. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-serverError.yml +0 -147
  1466. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint.yml +0 -164
  1467. data/spec/spec_tests/data/crud_v2/db-aggregate.yml +0 -39
  1468. data/spec/spec_tests/data/crud_v2/deleteMany-hint-clientError.yml +0 -43
  1469. data/spec/spec_tests/data/crud_v2/deleteMany-hint-serverError.yml +0 -62
  1470. data/spec/spec_tests/data/crud_v2/deleteMany-hint.yml +0 -58
  1471. data/spec/spec_tests/data/crud_v2/deleteOne-hint-clientError.yml +0 -41
  1472. data/spec/spec_tests/data/crud_v2/deleteOne-hint-serverError.yml +0 -60
  1473. data/spec/spec_tests/data/crud_v2/deleteOne-hint.yml +0 -57
  1474. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-clientError.yml +0 -28
  1475. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-serverError.yml +0 -44
  1476. data/spec/spec_tests/data/crud_v2/find-allowdiskuse.yml +0 -50
  1477. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-clientError.yml +0 -45
  1478. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-serverError.yml +0 -60
  1479. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint.yml +0 -56
  1480. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-clientError.yml +0 -40
  1481. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-serverError.yml +0 -59
  1482. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint.yml +0 -55
  1483. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-clientError.yml +0 -40
  1484. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-serverError.yml +0 -58
  1485. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint.yml +0 -55
  1486. data/spec/spec_tests/data/crud_v2/replaceOne-hint.yml +0 -61
  1487. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-delete-hint-clientError.yml +0 -60
  1488. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-update-hint-clientError.yml +0 -88
  1489. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteMany-hint-clientError.yml +0 -40
  1490. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteOne-hint-clientError.yml +0 -38
  1491. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndDelete-hint-clientError.yml +0 -42
  1492. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndReplace-hint-clientError.yml +0 -40
  1493. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndUpdate-hint-clientError.yml +0 -40
  1494. data/spec/spec_tests/data/crud_v2/unacknowledged-replaceOne-hint-clientError.yml +0 -40
  1495. data/spec/spec_tests/data/crud_v2/unacknowledged-updateMany-hint-clientError.yml +0 -43
  1496. data/spec/spec_tests/data/crud_v2/unacknowledged-updateOne-hint-clientError.yml +0 -40
  1497. data/spec/spec_tests/data/crud_v2/updateMany-hint-clientError.yml +0 -45
  1498. data/spec/spec_tests/data/crud_v2/updateMany-hint-serverError.yml +0 -66
  1499. data/spec/spec_tests/data/crud_v2/updateMany-hint.yml +0 -65
  1500. data/spec/spec_tests/data/crud_v2/updateOne-hint-clientError.yml +0 -43
  1501. data/spec/spec_tests/data/crud_v2/updateOne-hint-serverError.yml +0 -62
  1502. data/spec/spec_tests/data/crud_v2/updateOne-hint.yml +0 -61
  1503. data/spec/spec_tests/data/crud_v2/updateWithPipelines.yml +0 -157
  1504. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-4.9.yml +0 -60
  1505. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors-4.9.yml +0 -146
  1506. data/spec/spec_tests/data/sdam_integration/cancel-server-check.yml +0 -96
  1507. data/spec/spec_tests/data/sdam_integration/connectTimeoutMS.yml +0 -88
  1508. data/spec/spec_tests/data/sdam_integration/find-network-error.yml +0 -85
  1509. data/spec/spec_tests/data/sdam_integration/find-shutdown-error.yml +0 -118
  1510. data/spec/spec_tests/data/sdam_integration/hello-command-error.yml +0 -160
  1511. data/spec/spec_tests/data/sdam_integration/hello-network-error.yml +0 -158
  1512. data/spec/spec_tests/data/sdam_integration/hello-timeout.yml +0 -225
  1513. data/spec/spec_tests/data/sdam_integration/insert-network-error.yml +0 -88
  1514. data/spec/spec_tests/data/sdam_integration/insert-shutdown-error.yml +0 -117
  1515. data/spec/spec_tests/data/sdam_integration/rediscover-quickly-after-step-down.yml +0 -98
  1516. data/spec/spec_tests/sdam_integration_spec.rb +0 -16
  1517. data/spec/support/crypt/corpus/corpus_encrypted.json +0 -4152
  1518. data/spec/support/session_registry.rb +0 -55
  1519. data.tar.gz.sig +0 -0
  1520. metadata.gz.sig +0 -0
  1521. /data/spec/spec_tests/data/retryable_reads/{aggregate-merge.yml → legacy/aggregate-merge.yml} +0 -0
  1522. /data/spec/spec_tests/data/retryable_reads/{aggregate-serverErrors.yml → legacy/aggregate-serverErrors.yml} +0 -0
  1523. /data/spec/spec_tests/data/retryable_reads/{aggregate.yml → legacy/aggregate.yml} +0 -0
  1524. /data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch-serverErrors.yml → legacy/changeStreams-client.watch-serverErrors.yml} +0 -0
  1525. /data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch.yml → legacy/changeStreams-client.watch.yml} +0 -0
  1526. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch-serverErrors.yml → legacy/changeStreams-db.coll.watch-serverErrors.yml} +0 -0
  1527. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch.yml → legacy/changeStreams-db.coll.watch.yml} +0 -0
  1528. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch-serverErrors.yml → legacy/changeStreams-db.watch-serverErrors.yml} +0 -0
  1529. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch.yml → legacy/changeStreams-db.watch.yml} +0 -0
  1530. /data/spec/spec_tests/data/retryable_reads/{count-serverErrors.yml → legacy/count-serverErrors.yml} +0 -0
  1531. /data/spec/spec_tests/data/retryable_reads/{count.yml → legacy/count.yml} +0 -0
  1532. /data/spec/spec_tests/data/retryable_reads/{countDocuments-serverErrors.yml → legacy/countDocuments-serverErrors.yml} +0 -0
  1533. /data/spec/spec_tests/data/retryable_reads/{countDocuments.yml → legacy/countDocuments.yml} +0 -0
  1534. /data/spec/spec_tests/data/retryable_reads/{distinct-serverErrors.yml → legacy/distinct-serverErrors.yml} +0 -0
  1535. /data/spec/spec_tests/data/retryable_reads/{distinct.yml → legacy/distinct.yml} +0 -0
  1536. /data/spec/spec_tests/data/retryable_reads/{find-serverErrors.yml → legacy/find-serverErrors.yml} +0 -0
  1537. /data/spec/spec_tests/data/retryable_reads/{find.yml → legacy/find.yml} +0 -0
  1538. /data/spec/spec_tests/data/retryable_reads/{findOne-serverErrors.yml → legacy/findOne-serverErrors.yml} +0 -0
  1539. /data/spec/spec_tests/data/retryable_reads/{findOne.yml → legacy/findOne.yml} +0 -0
  1540. /data/spec/spec_tests/data/retryable_reads/{gridfs-download-serverErrors.yml → legacy/gridfs-download-serverErrors.yml} +0 -0
  1541. /data/spec/spec_tests/data/retryable_reads/{gridfs-download.yml → legacy/gridfs-download.yml} +0 -0
  1542. /data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName-serverErrors.yml → legacy/gridfs-downloadByName-serverErrors.yml} +0 -0
  1543. /data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName.yml → legacy/gridfs-downloadByName.yml} +0 -0
  1544. /data/spec/spec_tests/data/retryable_reads/{listCollectionNames-serverErrors.yml → legacy/listCollectionNames-serverErrors.yml} +0 -0
  1545. /data/spec/spec_tests/data/retryable_reads/{listCollectionNames.yml → legacy/listCollectionNames.yml} +0 -0
  1546. /data/spec/spec_tests/data/retryable_reads/{listCollectionObjects-serverErrors.yml → legacy/listCollectionObjects-serverErrors.yml} +0 -0
  1547. /data/spec/spec_tests/data/retryable_reads/{listCollectionObjects.yml → legacy/listCollectionObjects.yml} +0 -0
  1548. /data/spec/spec_tests/data/retryable_reads/{listCollections-serverErrors.yml → legacy/listCollections-serverErrors.yml} +0 -0
  1549. /data/spec/spec_tests/data/retryable_reads/{listCollections.yml → legacy/listCollections.yml} +0 -0
  1550. /data/spec/spec_tests/data/retryable_reads/{listDatabaseNames-serverErrors.yml → legacy/listDatabaseNames-serverErrors.yml} +0 -0
  1551. /data/spec/spec_tests/data/retryable_reads/{listDatabaseNames.yml → legacy/listDatabaseNames.yml} +0 -0
  1552. /data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects-serverErrors.yml → legacy/listDatabaseObjects-serverErrors.yml} +0 -0
  1553. /data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects.yml → legacy/listDatabaseObjects.yml} +0 -0
  1554. /data/spec/spec_tests/data/retryable_reads/{listDatabases-serverErrors.yml → legacy/listDatabases-serverErrors.yml} +0 -0
  1555. /data/spec/spec_tests/data/retryable_reads/{listDatabases.yml → legacy/listDatabases.yml} +0 -0
  1556. /data/spec/spec_tests/data/retryable_reads/{listIndexNames-serverErrors.yml → legacy/listIndexNames-serverErrors.yml} +0 -0
  1557. /data/spec/spec_tests/data/retryable_reads/{listIndexNames.yml → legacy/listIndexNames.yml} +0 -0
  1558. /data/spec/spec_tests/data/retryable_reads/{listIndexes-serverErrors.yml → legacy/listIndexes-serverErrors.yml} +0 -0
  1559. /data/spec/spec_tests/data/retryable_reads/{listIndexes.yml → legacy/listIndexes.yml} +0 -0
  1560. /data/spec/spec_tests/data/retryable_reads/{mapReduce.yml → legacy/mapReduce.yml} +0 -0
  1561. /data/spec/spec_tests/data/retryable_writes/{bulkWrite-errorLabels.yml → legacy/bulkWrite-errorLabels.yml} +0 -0
  1562. /data/spec/spec_tests/data/retryable_writes/{bulkWrite.yml → legacy/bulkWrite.yml} +0 -0
  1563. /data/spec/spec_tests/data/retryable_writes/{deleteMany.yml → legacy/deleteMany.yml} +0 -0
  1564. /data/spec/spec_tests/data/retryable_writes/{deleteOne-errorLabels.yml → legacy/deleteOne-errorLabels.yml} +0 -0
  1565. /data/spec/spec_tests/data/retryable_writes/{deleteOne.yml → legacy/deleteOne.yml} +0 -0
  1566. /data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-errorLabels.yml → legacy/findOneAndDelete-errorLabels.yml} +0 -0
  1567. /data/spec/spec_tests/data/retryable_writes/{findOneAndDelete.yml → legacy/findOneAndDelete.yml} +0 -0
  1568. /data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-errorLabels.yml → legacy/findOneAndReplace-errorLabels.yml} +0 -0
  1569. /data/spec/spec_tests/data/retryable_writes/{findOneAndReplace.yml → legacy/findOneAndReplace.yml} +0 -0
  1570. /data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-errorLabels.yml → legacy/findOneAndUpdate-errorLabels.yml} +0 -0
  1571. /data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate.yml → legacy/findOneAndUpdate.yml} +0 -0
  1572. /data/spec/spec_tests/data/retryable_writes/{insertMany-errorLabels.yml → legacy/insertMany-errorLabels.yml} +0 -0
  1573. /data/spec/spec_tests/data/retryable_writes/{insertMany.yml → legacy/insertMany.yml} +0 -0
  1574. /data/spec/spec_tests/data/retryable_writes/{insertOne-errorLabels.yml → legacy/insertOne-errorLabels.yml} +0 -0
  1575. /data/spec/spec_tests/data/retryable_writes/{insertOne.yml → legacy/insertOne.yml} +0 -0
  1576. /data/spec/spec_tests/data/retryable_writes/{replaceOne-errorLabels.yml → legacy/replaceOne-errorLabels.yml} +0 -0
  1577. /data/spec/spec_tests/data/retryable_writes/{replaceOne.yml → legacy/replaceOne.yml} +0 -0
  1578. /data/spec/spec_tests/data/retryable_writes/{updateMany.yml → legacy/updateMany.yml} +0 -0
  1579. /data/spec/spec_tests/data/retryable_writes/{updateOne-errorLabels.yml → legacy/updateOne-errorLabels.yml} +0 -0
  1580. /data/spec/spec_tests/data/retryable_writes/{updateOne.yml → legacy/updateOne.yml} +0 -0
@@ -0,0 +1,2824 @@
1
+ # Tests in this file are generated from retryability-timeoutMS.yml.template.
2
+
3
+ description: "timeoutMS behaves correctly for retryable operations"
4
+
5
+ schemaVersion: "1.9"
6
+
7
+ # failCommand is available on 4.0+ replica sets and 4.2+ sharded clusters.
8
+ runOnRequirements:
9
+ - minServerVersion: "4.0"
10
+ topologies: ["replicaset"]
11
+ - minServerVersion: "4.2"
12
+ topologies: ["sharded"]
13
+
14
+ createEntities:
15
+ - client:
16
+ id: &failPointClient failPointClient
17
+ useMultipleMongoses: false
18
+ - client:
19
+ id: &client client
20
+ uriOptions:
21
+ timeoutMS: 100
22
+ useMultipleMongoses: false
23
+ observeEvents:
24
+ - commandStartedEvent
25
+ ignoreCommandMonitoringEvents:
26
+ - killCursors
27
+ - database:
28
+ id: &database database
29
+ client: *client
30
+ databaseName: &databaseName test
31
+ - collection:
32
+ id: &collection collection
33
+ database: *database
34
+ collectionName: &collectionName coll
35
+
36
+ initialData:
37
+ - collectionName: *collectionName
38
+ databaseName: *databaseName
39
+ documents: []
40
+
41
+ tests:
42
+ # For each retryable operation, run three tests:
43
+ #
44
+ # 1. timeoutMS applies to the whole operation, not to individual attempts - Client timeoutMS=100 and the operation is
45
+ # fails with a retryable error after being blocked server-side for 60ms. The operation should fail with a timeout error
46
+ # because the second attempt should take it over the 100ms limit. This test only runs on 4.4+ because it uses the
47
+ # blockConnection option in failCommand.
48
+ #
49
+ # 2. operation is retried multiple times if timeoutMS is set to a non-zero value - Client timeoutMS=100 and the
50
+ # operation fails with a retryable error twice. Drivers should send the original operation and two retries, the
51
+ # second of which should succeed.
52
+ #
53
+ # 3. operation is retried multiple times if timeoutMS is set to a zero - Override timeoutMS to zero for the operation
54
+ # and set a fail point to force a retryable error twice. Drivers should send the original operation and two retries,
55
+ # the second of which should succeed.
56
+ #
57
+ # The fail points in these tests use error code 7 (HostNotFound) because it is a retryable error but does not trigger
58
+ # an SDAM state change so we don't lose any time to server rediscovery. The tests also explicitly specify an
59
+ # errorLabels array in the fail point to avoid behavioral differences among server types and ensure that the error
60
+ # will be considered retryable.
61
+
62
+ - description: "timeoutMS applies to whole operation, not individual attempts - insertOne on collection"
63
+ runOnRequirements:
64
+ - minServerVersion: "4.4"
65
+ operations:
66
+ - name: failPoint
67
+ object: testRunner
68
+ arguments:
69
+ client: *failPointClient
70
+ failPoint:
71
+ configureFailPoint: failCommand
72
+ mode: { times: 4 }
73
+ data:
74
+ failCommands: ["insert"]
75
+ blockConnection: true
76
+ blockTimeMS: 60
77
+ errorCode: 7
78
+ errorLabels: ["RetryableWriteError"]
79
+ - name: insertOne
80
+ object: *collection
81
+ arguments:
82
+ document: { x: 1 }
83
+
84
+ expectError:
85
+ isTimeoutError: true
86
+ - description: "operation is retried multiple times for non-zero timeoutMS - insertOne on collection"
87
+ runOnRequirements:
88
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
89
+ operations:
90
+ - name: failPoint
91
+ object: testRunner
92
+ arguments:
93
+ client: *failPointClient
94
+ failPoint:
95
+ configureFailPoint: failCommand
96
+ mode: { times: 2 }
97
+ data:
98
+ failCommands: ["insert"]
99
+ errorCode: 7
100
+ closeConnection: false
101
+ errorLabels: ["RetryableWriteError"]
102
+ - name: insertOne
103
+ object: *collection
104
+ arguments:
105
+ timeoutMS: 1000
106
+ document: { x: 1 }
107
+
108
+ expectEvents:
109
+ - client: *client
110
+ events:
111
+ - commandStartedEvent:
112
+ commandName: insert
113
+ databaseName: *databaseName
114
+ command:
115
+ insert: *collectionName
116
+ maxTimeMS: { $$type: ["int", "long"] }
117
+ - commandStartedEvent:
118
+ commandName: insert
119
+ databaseName: *databaseName
120
+ command:
121
+ insert: *collectionName
122
+ maxTimeMS: { $$type: ["int", "long"] }
123
+ - commandStartedEvent:
124
+ commandName: insert
125
+ databaseName: *databaseName
126
+ command:
127
+ insert: *collectionName
128
+ maxTimeMS: { $$type: ["int", "long"] }
129
+ - description: "operation is retried multiple times if timeoutMS is zero - insertOne on collection"
130
+ runOnRequirements:
131
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
132
+ operations:
133
+ - name: failPoint
134
+ object: testRunner
135
+ arguments:
136
+ client: *failPointClient
137
+ failPoint:
138
+ configureFailPoint: failCommand
139
+ mode: { times: 2 }
140
+ data:
141
+ failCommands: ["insert"]
142
+ errorCode: 7
143
+ closeConnection: false
144
+ errorLabels: ["RetryableWriteError"]
145
+ - name: insertOne
146
+ object: *collection
147
+ arguments:
148
+ timeoutMS: 0
149
+ document: { x: 1 }
150
+
151
+ expectEvents:
152
+ - client: *client
153
+ events:
154
+ - commandStartedEvent:
155
+ commandName: insert
156
+ databaseName: *databaseName
157
+ command:
158
+ insert: *collectionName
159
+ maxTimeMS: { $$exists: false }
160
+ - commandStartedEvent:
161
+ commandName: insert
162
+ databaseName: *databaseName
163
+ command:
164
+ insert: *collectionName
165
+ maxTimeMS: { $$exists: false }
166
+ - commandStartedEvent:
167
+ commandName: insert
168
+ databaseName: *databaseName
169
+ command:
170
+ insert: *collectionName
171
+ maxTimeMS: { $$exists: false }
172
+ - description: "timeoutMS applies to whole operation, not individual attempts - insertMany on collection"
173
+ runOnRequirements:
174
+ - minServerVersion: "4.4"
175
+ operations:
176
+ - name: failPoint
177
+ object: testRunner
178
+ arguments:
179
+ client: *failPointClient
180
+ failPoint:
181
+ configureFailPoint: failCommand
182
+ mode: { times: 4 }
183
+ data:
184
+ failCommands: ["insert"]
185
+ blockConnection: true
186
+ blockTimeMS: 60
187
+ errorCode: 7
188
+ errorLabels: ["RetryableWriteError"]
189
+ - name: insertMany
190
+ object: *collection
191
+ arguments:
192
+ documents:
193
+ - { x: 1 }
194
+
195
+ expectError:
196
+ isTimeoutError: true
197
+ - description: "operation is retried multiple times for non-zero timeoutMS - insertMany on collection"
198
+ runOnRequirements:
199
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
200
+ operations:
201
+ - name: failPoint
202
+ object: testRunner
203
+ arguments:
204
+ client: *failPointClient
205
+ failPoint:
206
+ configureFailPoint: failCommand
207
+ mode: { times: 2 }
208
+ data:
209
+ failCommands: ["insert"]
210
+ errorCode: 7
211
+ closeConnection: false
212
+ errorLabels: ["RetryableWriteError"]
213
+ - name: insertMany
214
+ object: *collection
215
+ arguments:
216
+ timeoutMS: 1000
217
+ documents:
218
+ - { x: 1 }
219
+
220
+ expectEvents:
221
+ - client: *client
222
+ events:
223
+ - commandStartedEvent:
224
+ commandName: insert
225
+ databaseName: *databaseName
226
+ command:
227
+ insert: *collectionName
228
+ maxTimeMS: { $$type: ["int", "long"] }
229
+ - commandStartedEvent:
230
+ commandName: insert
231
+ databaseName: *databaseName
232
+ command:
233
+ insert: *collectionName
234
+ maxTimeMS: { $$type: ["int", "long"] }
235
+ - commandStartedEvent:
236
+ commandName: insert
237
+ databaseName: *databaseName
238
+ command:
239
+ insert: *collectionName
240
+ maxTimeMS: { $$type: ["int", "long"] }
241
+ - description: "operation is retried multiple times if timeoutMS is zero - insertMany on collection"
242
+ runOnRequirements:
243
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
244
+ operations:
245
+ - name: failPoint
246
+ object: testRunner
247
+ arguments:
248
+ client: *failPointClient
249
+ failPoint:
250
+ configureFailPoint: failCommand
251
+ mode: { times: 2 }
252
+ data:
253
+ failCommands: ["insert"]
254
+ errorCode: 7
255
+ closeConnection: false
256
+ errorLabels: ["RetryableWriteError"]
257
+ - name: insertMany
258
+ object: *collection
259
+ arguments:
260
+ timeoutMS: 0
261
+ documents:
262
+ - { x: 1 }
263
+
264
+ expectEvents:
265
+ - client: *client
266
+ events:
267
+ - commandStartedEvent:
268
+ commandName: insert
269
+ databaseName: *databaseName
270
+ command:
271
+ insert: *collectionName
272
+ maxTimeMS: { $$exists: false }
273
+ - commandStartedEvent:
274
+ commandName: insert
275
+ databaseName: *databaseName
276
+ command:
277
+ insert: *collectionName
278
+ maxTimeMS: { $$exists: false }
279
+ - commandStartedEvent:
280
+ commandName: insert
281
+ databaseName: *databaseName
282
+ command:
283
+ insert: *collectionName
284
+ maxTimeMS: { $$exists: false }
285
+ - description: "timeoutMS applies to whole operation, not individual attempts - deleteOne on collection"
286
+ runOnRequirements:
287
+ - minServerVersion: "4.4"
288
+ operations:
289
+ - name: failPoint
290
+ object: testRunner
291
+ arguments:
292
+ client: *failPointClient
293
+ failPoint:
294
+ configureFailPoint: failCommand
295
+ mode: { times: 4 }
296
+ data:
297
+ failCommands: ["delete"]
298
+ blockConnection: true
299
+ blockTimeMS: 60
300
+ errorCode: 7
301
+ errorLabels: ["RetryableWriteError"]
302
+ - name: deleteOne
303
+ object: *collection
304
+ arguments:
305
+ filter: {}
306
+
307
+ expectError:
308
+ isTimeoutError: true
309
+ - description: "operation is retried multiple times for non-zero timeoutMS - deleteOne on collection"
310
+ runOnRequirements:
311
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
312
+ operations:
313
+ - name: failPoint
314
+ object: testRunner
315
+ arguments:
316
+ client: *failPointClient
317
+ failPoint:
318
+ configureFailPoint: failCommand
319
+ mode: { times: 2 }
320
+ data:
321
+ failCommands: ["delete"]
322
+ errorCode: 7
323
+ closeConnection: false
324
+ errorLabels: ["RetryableWriteError"]
325
+ - name: deleteOne
326
+ object: *collection
327
+ arguments:
328
+ timeoutMS: 1000
329
+ filter: {}
330
+
331
+ expectEvents:
332
+ - client: *client
333
+ events:
334
+ - commandStartedEvent:
335
+ commandName: delete
336
+ databaseName: *databaseName
337
+ command:
338
+ delete: *collectionName
339
+ maxTimeMS: { $$type: ["int", "long"] }
340
+ - commandStartedEvent:
341
+ commandName: delete
342
+ databaseName: *databaseName
343
+ command:
344
+ delete: *collectionName
345
+ maxTimeMS: { $$type: ["int", "long"] }
346
+ - commandStartedEvent:
347
+ commandName: delete
348
+ databaseName: *databaseName
349
+ command:
350
+ delete: *collectionName
351
+ maxTimeMS: { $$type: ["int", "long"] }
352
+ - description: "operation is retried multiple times if timeoutMS is zero - deleteOne on collection"
353
+ runOnRequirements:
354
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
355
+ operations:
356
+ - name: failPoint
357
+ object: testRunner
358
+ arguments:
359
+ client: *failPointClient
360
+ failPoint:
361
+ configureFailPoint: failCommand
362
+ mode: { times: 2 }
363
+ data:
364
+ failCommands: ["delete"]
365
+ errorCode: 7
366
+ closeConnection: false
367
+ errorLabels: ["RetryableWriteError"]
368
+ - name: deleteOne
369
+ object: *collection
370
+ arguments:
371
+ timeoutMS: 0
372
+ filter: {}
373
+
374
+ expectEvents:
375
+ - client: *client
376
+ events:
377
+ - commandStartedEvent:
378
+ commandName: delete
379
+ databaseName: *databaseName
380
+ command:
381
+ delete: *collectionName
382
+ maxTimeMS: { $$exists: false }
383
+ - commandStartedEvent:
384
+ commandName: delete
385
+ databaseName: *databaseName
386
+ command:
387
+ delete: *collectionName
388
+ maxTimeMS: { $$exists: false }
389
+ - commandStartedEvent:
390
+ commandName: delete
391
+ databaseName: *databaseName
392
+ command:
393
+ delete: *collectionName
394
+ maxTimeMS: { $$exists: false }
395
+ - description: "timeoutMS applies to whole operation, not individual attempts - replaceOne on collection"
396
+ runOnRequirements:
397
+ - minServerVersion: "4.4"
398
+ operations:
399
+ - name: failPoint
400
+ object: testRunner
401
+ arguments:
402
+ client: *failPointClient
403
+ failPoint:
404
+ configureFailPoint: failCommand
405
+ mode: { times: 4 }
406
+ data:
407
+ failCommands: ["update"]
408
+ blockConnection: true
409
+ blockTimeMS: 60
410
+ errorCode: 7
411
+ errorLabels: ["RetryableWriteError"]
412
+ - name: replaceOne
413
+ object: *collection
414
+ arguments:
415
+ filter: {}
416
+ replacement: { x: 1 }
417
+
418
+ expectError:
419
+ isTimeoutError: true
420
+ - description: "operation is retried multiple times for non-zero timeoutMS - replaceOne on collection"
421
+ runOnRequirements:
422
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
423
+ operations:
424
+ - name: failPoint
425
+ object: testRunner
426
+ arguments:
427
+ client: *failPointClient
428
+ failPoint:
429
+ configureFailPoint: failCommand
430
+ mode: { times: 2 }
431
+ data:
432
+ failCommands: ["update"]
433
+ errorCode: 7
434
+ closeConnection: false
435
+ errorLabels: ["RetryableWriteError"]
436
+ - name: replaceOne
437
+ object: *collection
438
+ arguments:
439
+ timeoutMS: 1000
440
+ filter: {}
441
+ replacement: { x: 1 }
442
+
443
+ expectEvents:
444
+ - client: *client
445
+ events:
446
+ - commandStartedEvent:
447
+ commandName: update
448
+ databaseName: *databaseName
449
+ command:
450
+ update: *collectionName
451
+ maxTimeMS: { $$type: ["int", "long"] }
452
+ - commandStartedEvent:
453
+ commandName: update
454
+ databaseName: *databaseName
455
+ command:
456
+ update: *collectionName
457
+ maxTimeMS: { $$type: ["int", "long"] }
458
+ - commandStartedEvent:
459
+ commandName: update
460
+ databaseName: *databaseName
461
+ command:
462
+ update: *collectionName
463
+ maxTimeMS: { $$type: ["int", "long"] }
464
+ - description: "operation is retried multiple times if timeoutMS is zero - replaceOne on collection"
465
+ runOnRequirements:
466
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
467
+ operations:
468
+ - name: failPoint
469
+ object: testRunner
470
+ arguments:
471
+ client: *failPointClient
472
+ failPoint:
473
+ configureFailPoint: failCommand
474
+ mode: { times: 2 }
475
+ data:
476
+ failCommands: ["update"]
477
+ errorCode: 7
478
+ closeConnection: false
479
+ errorLabels: ["RetryableWriteError"]
480
+ - name: replaceOne
481
+ object: *collection
482
+ arguments:
483
+ timeoutMS: 0
484
+ filter: {}
485
+ replacement: { x: 1 }
486
+
487
+ expectEvents:
488
+ - client: *client
489
+ events:
490
+ - commandStartedEvent:
491
+ commandName: update
492
+ databaseName: *databaseName
493
+ command:
494
+ update: *collectionName
495
+ maxTimeMS: { $$exists: false }
496
+ - commandStartedEvent:
497
+ commandName: update
498
+ databaseName: *databaseName
499
+ command:
500
+ update: *collectionName
501
+ maxTimeMS: { $$exists: false }
502
+ - commandStartedEvent:
503
+ commandName: update
504
+ databaseName: *databaseName
505
+ command:
506
+ update: *collectionName
507
+ maxTimeMS: { $$exists: false }
508
+ - description: "timeoutMS applies to whole operation, not individual attempts - updateOne on collection"
509
+ runOnRequirements:
510
+ - minServerVersion: "4.4"
511
+ operations:
512
+ - name: failPoint
513
+ object: testRunner
514
+ arguments:
515
+ client: *failPointClient
516
+ failPoint:
517
+ configureFailPoint: failCommand
518
+ mode: { times: 4 }
519
+ data:
520
+ failCommands: ["update"]
521
+ blockConnection: true
522
+ blockTimeMS: 60
523
+ errorCode: 7
524
+ errorLabels: ["RetryableWriteError"]
525
+ - name: updateOne
526
+ object: *collection
527
+ arguments:
528
+ filter: {}
529
+ update: { $set: { x: 1 } }
530
+
531
+ expectError:
532
+ isTimeoutError: true
533
+ - description: "operation is retried multiple times for non-zero timeoutMS - updateOne on collection"
534
+ runOnRequirements:
535
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
536
+ operations:
537
+ - name: failPoint
538
+ object: testRunner
539
+ arguments:
540
+ client: *failPointClient
541
+ failPoint:
542
+ configureFailPoint: failCommand
543
+ mode: { times: 2 }
544
+ data:
545
+ failCommands: ["update"]
546
+ errorCode: 7
547
+ closeConnection: false
548
+ errorLabels: ["RetryableWriteError"]
549
+ - name: updateOne
550
+ object: *collection
551
+ arguments:
552
+ timeoutMS: 1000
553
+ filter: {}
554
+ update: { $set: { x: 1 } }
555
+
556
+ expectEvents:
557
+ - client: *client
558
+ events:
559
+ - commandStartedEvent:
560
+ commandName: update
561
+ databaseName: *databaseName
562
+ command:
563
+ update: *collectionName
564
+ maxTimeMS: { $$type: ["int", "long"] }
565
+ - commandStartedEvent:
566
+ commandName: update
567
+ databaseName: *databaseName
568
+ command:
569
+ update: *collectionName
570
+ maxTimeMS: { $$type: ["int", "long"] }
571
+ - commandStartedEvent:
572
+ commandName: update
573
+ databaseName: *databaseName
574
+ command:
575
+ update: *collectionName
576
+ maxTimeMS: { $$type: ["int", "long"] }
577
+ - description: "operation is retried multiple times if timeoutMS is zero - updateOne on collection"
578
+ runOnRequirements:
579
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
580
+ operations:
581
+ - name: failPoint
582
+ object: testRunner
583
+ arguments:
584
+ client: *failPointClient
585
+ failPoint:
586
+ configureFailPoint: failCommand
587
+ mode: { times: 2 }
588
+ data:
589
+ failCommands: ["update"]
590
+ errorCode: 7
591
+ closeConnection: false
592
+ errorLabels: ["RetryableWriteError"]
593
+ - name: updateOne
594
+ object: *collection
595
+ arguments:
596
+ timeoutMS: 0
597
+ filter: {}
598
+ update: { $set: { x: 1 } }
599
+
600
+ expectEvents:
601
+ - client: *client
602
+ events:
603
+ - commandStartedEvent:
604
+ commandName: update
605
+ databaseName: *databaseName
606
+ command:
607
+ update: *collectionName
608
+ maxTimeMS: { $$exists: false }
609
+ - commandStartedEvent:
610
+ commandName: update
611
+ databaseName: *databaseName
612
+ command:
613
+ update: *collectionName
614
+ maxTimeMS: { $$exists: false }
615
+ - commandStartedEvent:
616
+ commandName: update
617
+ databaseName: *databaseName
618
+ command:
619
+ update: *collectionName
620
+ maxTimeMS: { $$exists: false }
621
+ - description: "timeoutMS applies to whole operation, not individual attempts - findOneAndDelete on collection"
622
+ runOnRequirements:
623
+ - minServerVersion: "4.4"
624
+ operations:
625
+ - name: failPoint
626
+ object: testRunner
627
+ arguments:
628
+ client: *failPointClient
629
+ failPoint:
630
+ configureFailPoint: failCommand
631
+ mode: { times: 4 }
632
+ data:
633
+ failCommands: ["findAndModify"]
634
+ blockConnection: true
635
+ blockTimeMS: 60
636
+ errorCode: 7
637
+ errorLabels: ["RetryableWriteError"]
638
+ - name: findOneAndDelete
639
+ object: *collection
640
+ arguments:
641
+ filter: {}
642
+
643
+ expectError:
644
+ isTimeoutError: true
645
+ - description: "operation is retried multiple times for non-zero timeoutMS - findOneAndDelete on collection"
646
+ runOnRequirements:
647
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
648
+ operations:
649
+ - name: failPoint
650
+ object: testRunner
651
+ arguments:
652
+ client: *failPointClient
653
+ failPoint:
654
+ configureFailPoint: failCommand
655
+ mode: { times: 2 }
656
+ data:
657
+ failCommands: ["findAndModify"]
658
+ errorCode: 7
659
+ closeConnection: false
660
+ errorLabels: ["RetryableWriteError"]
661
+ - name: findOneAndDelete
662
+ object: *collection
663
+ arguments:
664
+ timeoutMS: 1000
665
+ filter: {}
666
+
667
+ expectEvents:
668
+ - client: *client
669
+ events:
670
+ - commandStartedEvent:
671
+ commandName: findAndModify
672
+ databaseName: *databaseName
673
+ command:
674
+ findAndModify: *collectionName
675
+ maxTimeMS: { $$type: ["int", "long"] }
676
+ - commandStartedEvent:
677
+ commandName: findAndModify
678
+ databaseName: *databaseName
679
+ command:
680
+ findAndModify: *collectionName
681
+ maxTimeMS: { $$type: ["int", "long"] }
682
+ - commandStartedEvent:
683
+ commandName: findAndModify
684
+ databaseName: *databaseName
685
+ command:
686
+ findAndModify: *collectionName
687
+ maxTimeMS: { $$type: ["int", "long"] }
688
+ - description: "operation is retried multiple times if timeoutMS is zero - findOneAndDelete on collection"
689
+ runOnRequirements:
690
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
691
+ operations:
692
+ - name: failPoint
693
+ object: testRunner
694
+ arguments:
695
+ client: *failPointClient
696
+ failPoint:
697
+ configureFailPoint: failCommand
698
+ mode: { times: 2 }
699
+ data:
700
+ failCommands: ["findAndModify"]
701
+ errorCode: 7
702
+ closeConnection: false
703
+ errorLabels: ["RetryableWriteError"]
704
+ - name: findOneAndDelete
705
+ object: *collection
706
+ arguments:
707
+ timeoutMS: 0
708
+ filter: {}
709
+
710
+ expectEvents:
711
+ - client: *client
712
+ events:
713
+ - commandStartedEvent:
714
+ commandName: findAndModify
715
+ databaseName: *databaseName
716
+ command:
717
+ findAndModify: *collectionName
718
+ maxTimeMS: { $$exists: false }
719
+ - commandStartedEvent:
720
+ commandName: findAndModify
721
+ databaseName: *databaseName
722
+ command:
723
+ findAndModify: *collectionName
724
+ maxTimeMS: { $$exists: false }
725
+ - commandStartedEvent:
726
+ commandName: findAndModify
727
+ databaseName: *databaseName
728
+ command:
729
+ findAndModify: *collectionName
730
+ maxTimeMS: { $$exists: false }
731
+ - description: "timeoutMS applies to whole operation, not individual attempts - findOneAndReplace on collection"
732
+ runOnRequirements:
733
+ - minServerVersion: "4.4"
734
+ operations:
735
+ - name: failPoint
736
+ object: testRunner
737
+ arguments:
738
+ client: *failPointClient
739
+ failPoint:
740
+ configureFailPoint: failCommand
741
+ mode: { times: 4 }
742
+ data:
743
+ failCommands: ["findAndModify"]
744
+ blockConnection: true
745
+ blockTimeMS: 60
746
+ errorCode: 7
747
+ errorLabels: ["RetryableWriteError"]
748
+ - name: findOneAndReplace
749
+ object: *collection
750
+ arguments:
751
+ filter: {}
752
+ replacement: { x: 1 }
753
+
754
+ expectError:
755
+ isTimeoutError: true
756
+ - description: "operation is retried multiple times for non-zero timeoutMS - findOneAndReplace on collection"
757
+ runOnRequirements:
758
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
759
+ operations:
760
+ - name: failPoint
761
+ object: testRunner
762
+ arguments:
763
+ client: *failPointClient
764
+ failPoint:
765
+ configureFailPoint: failCommand
766
+ mode: { times: 2 }
767
+ data:
768
+ failCommands: ["findAndModify"]
769
+ errorCode: 7
770
+ closeConnection: false
771
+ errorLabels: ["RetryableWriteError"]
772
+ - name: findOneAndReplace
773
+ object: *collection
774
+ arguments:
775
+ timeoutMS: 1000
776
+ filter: {}
777
+ replacement: { x: 1 }
778
+
779
+ expectEvents:
780
+ - client: *client
781
+ events:
782
+ - commandStartedEvent:
783
+ commandName: findAndModify
784
+ databaseName: *databaseName
785
+ command:
786
+ findAndModify: *collectionName
787
+ maxTimeMS: { $$type: ["int", "long"] }
788
+ - commandStartedEvent:
789
+ commandName: findAndModify
790
+ databaseName: *databaseName
791
+ command:
792
+ findAndModify: *collectionName
793
+ maxTimeMS: { $$type: ["int", "long"] }
794
+ - commandStartedEvent:
795
+ commandName: findAndModify
796
+ databaseName: *databaseName
797
+ command:
798
+ findAndModify: *collectionName
799
+ maxTimeMS: { $$type: ["int", "long"] }
800
+ - description: "operation is retried multiple times if timeoutMS is zero - findOneAndReplace on collection"
801
+ runOnRequirements:
802
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
803
+ operations:
804
+ - name: failPoint
805
+ object: testRunner
806
+ arguments:
807
+ client: *failPointClient
808
+ failPoint:
809
+ configureFailPoint: failCommand
810
+ mode: { times: 2 }
811
+ data:
812
+ failCommands: ["findAndModify"]
813
+ errorCode: 7
814
+ closeConnection: false
815
+ errorLabels: ["RetryableWriteError"]
816
+ - name: findOneAndReplace
817
+ object: *collection
818
+ arguments:
819
+ timeoutMS: 0
820
+ filter: {}
821
+ replacement: { x: 1 }
822
+
823
+ expectEvents:
824
+ - client: *client
825
+ events:
826
+ - commandStartedEvent:
827
+ commandName: findAndModify
828
+ databaseName: *databaseName
829
+ command:
830
+ findAndModify: *collectionName
831
+ maxTimeMS: { $$exists: false }
832
+ - commandStartedEvent:
833
+ commandName: findAndModify
834
+ databaseName: *databaseName
835
+ command:
836
+ findAndModify: *collectionName
837
+ maxTimeMS: { $$exists: false }
838
+ - commandStartedEvent:
839
+ commandName: findAndModify
840
+ databaseName: *databaseName
841
+ command:
842
+ findAndModify: *collectionName
843
+ maxTimeMS: { $$exists: false }
844
+ - description: "timeoutMS applies to whole operation, not individual attempts - findOneAndUpdate on collection"
845
+ runOnRequirements:
846
+ - minServerVersion: "4.4"
847
+ operations:
848
+ - name: failPoint
849
+ object: testRunner
850
+ arguments:
851
+ client: *failPointClient
852
+ failPoint:
853
+ configureFailPoint: failCommand
854
+ mode: { times: 4 }
855
+ data:
856
+ failCommands: ["findAndModify"]
857
+ blockConnection: true
858
+ blockTimeMS: 60
859
+ errorCode: 7
860
+ errorLabels: ["RetryableWriteError"]
861
+ - name: findOneAndUpdate
862
+ object: *collection
863
+ arguments:
864
+ filter: {}
865
+ update: { $set: { x: 1 } }
866
+
867
+ expectError:
868
+ isTimeoutError: true
869
+ - description: "operation is retried multiple times for non-zero timeoutMS - findOneAndUpdate on collection"
870
+ runOnRequirements:
871
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
872
+ operations:
873
+ - name: failPoint
874
+ object: testRunner
875
+ arguments:
876
+ client: *failPointClient
877
+ failPoint:
878
+ configureFailPoint: failCommand
879
+ mode: { times: 2 }
880
+ data:
881
+ failCommands: ["findAndModify"]
882
+ errorCode: 7
883
+ closeConnection: false
884
+ errorLabels: ["RetryableWriteError"]
885
+ - name: findOneAndUpdate
886
+ object: *collection
887
+ arguments:
888
+ timeoutMS: 1000
889
+ filter: {}
890
+ update: { $set: { x: 1 } }
891
+
892
+ expectEvents:
893
+ - client: *client
894
+ events:
895
+ - commandStartedEvent:
896
+ commandName: findAndModify
897
+ databaseName: *databaseName
898
+ command:
899
+ findAndModify: *collectionName
900
+ maxTimeMS: { $$type: ["int", "long"] }
901
+ - commandStartedEvent:
902
+ commandName: findAndModify
903
+ databaseName: *databaseName
904
+ command:
905
+ findAndModify: *collectionName
906
+ maxTimeMS: { $$type: ["int", "long"] }
907
+ - commandStartedEvent:
908
+ commandName: findAndModify
909
+ databaseName: *databaseName
910
+ command:
911
+ findAndModify: *collectionName
912
+ maxTimeMS: { $$type: ["int", "long"] }
913
+ - description: "operation is retried multiple times if timeoutMS is zero - findOneAndUpdate on collection"
914
+ runOnRequirements:
915
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
916
+ operations:
917
+ - name: failPoint
918
+ object: testRunner
919
+ arguments:
920
+ client: *failPointClient
921
+ failPoint:
922
+ configureFailPoint: failCommand
923
+ mode: { times: 2 }
924
+ data:
925
+ failCommands: ["findAndModify"]
926
+ errorCode: 7
927
+ closeConnection: false
928
+ errorLabels: ["RetryableWriteError"]
929
+ - name: findOneAndUpdate
930
+ object: *collection
931
+ arguments:
932
+ timeoutMS: 0
933
+ filter: {}
934
+ update: { $set: { x: 1 } }
935
+
936
+ expectEvents:
937
+ - client: *client
938
+ events:
939
+ - commandStartedEvent:
940
+ commandName: findAndModify
941
+ databaseName: *databaseName
942
+ command:
943
+ findAndModify: *collectionName
944
+ maxTimeMS: { $$exists: false }
945
+ - commandStartedEvent:
946
+ commandName: findAndModify
947
+ databaseName: *databaseName
948
+ command:
949
+ findAndModify: *collectionName
950
+ maxTimeMS: { $$exists: false }
951
+ - commandStartedEvent:
952
+ commandName: findAndModify
953
+ databaseName: *databaseName
954
+ command:
955
+ findAndModify: *collectionName
956
+ maxTimeMS: { $$exists: false }
957
+ - description: "timeoutMS applies to whole operation, not individual attempts - bulkWrite on collection"
958
+ runOnRequirements:
959
+ - minServerVersion: "4.4"
960
+ operations:
961
+ - name: failPoint
962
+ object: testRunner
963
+ arguments:
964
+ client: *failPointClient
965
+ failPoint:
966
+ configureFailPoint: failCommand
967
+ mode: { times: 4 }
968
+ data:
969
+ failCommands: ["insert"]
970
+ blockConnection: true
971
+ blockTimeMS: 60
972
+ errorCode: 7
973
+ errorLabels: ["RetryableWriteError"]
974
+ - name: bulkWrite
975
+ object: *collection
976
+ arguments:
977
+ requests:
978
+ - insertOne:
979
+ document: { _id: 1 }
980
+
981
+ expectError:
982
+ isTimeoutError: true
983
+ - description: "operation is retried multiple times for non-zero timeoutMS - bulkWrite on collection"
984
+ runOnRequirements:
985
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
986
+ operations:
987
+ - name: failPoint
988
+ object: testRunner
989
+ arguments:
990
+ client: *failPointClient
991
+ failPoint:
992
+ configureFailPoint: failCommand
993
+ mode: { times: 2 }
994
+ data:
995
+ failCommands: ["insert"]
996
+ errorCode: 7
997
+ closeConnection: false
998
+ errorLabels: ["RetryableWriteError"]
999
+ - name: bulkWrite
1000
+ object: *collection
1001
+ arguments:
1002
+ timeoutMS: 1000
1003
+ requests:
1004
+ - insertOne:
1005
+ document: { _id: 1 }
1006
+
1007
+ expectEvents:
1008
+ - client: *client
1009
+ events:
1010
+ - commandStartedEvent:
1011
+ commandName: insert
1012
+ databaseName: *databaseName
1013
+ command:
1014
+ insert: *collectionName
1015
+ maxTimeMS: { $$type: ["int", "long"] }
1016
+ - commandStartedEvent:
1017
+ commandName: insert
1018
+ databaseName: *databaseName
1019
+ command:
1020
+ insert: *collectionName
1021
+ maxTimeMS: { $$type: ["int", "long"] }
1022
+ - commandStartedEvent:
1023
+ commandName: insert
1024
+ databaseName: *databaseName
1025
+ command:
1026
+ insert: *collectionName
1027
+ maxTimeMS: { $$type: ["int", "long"] }
1028
+ - description: "operation is retried multiple times if timeoutMS is zero - bulkWrite on collection"
1029
+ runOnRequirements:
1030
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
1031
+ operations:
1032
+ - name: failPoint
1033
+ object: testRunner
1034
+ arguments:
1035
+ client: *failPointClient
1036
+ failPoint:
1037
+ configureFailPoint: failCommand
1038
+ mode: { times: 2 }
1039
+ data:
1040
+ failCommands: ["insert"]
1041
+ errorCode: 7
1042
+ closeConnection: false
1043
+ errorLabels: ["RetryableWriteError"]
1044
+ - name: bulkWrite
1045
+ object: *collection
1046
+ arguments:
1047
+ timeoutMS: 0
1048
+ requests:
1049
+ - insertOne:
1050
+ document: { _id: 1 }
1051
+
1052
+ expectEvents:
1053
+ - client: *client
1054
+ events:
1055
+ - commandStartedEvent:
1056
+ commandName: insert
1057
+ databaseName: *databaseName
1058
+ command:
1059
+ insert: *collectionName
1060
+ maxTimeMS: { $$exists: false }
1061
+ - commandStartedEvent:
1062
+ commandName: insert
1063
+ databaseName: *databaseName
1064
+ command:
1065
+ insert: *collectionName
1066
+ maxTimeMS: { $$exists: false }
1067
+ - commandStartedEvent:
1068
+ commandName: insert
1069
+ databaseName: *databaseName
1070
+ command:
1071
+ insert: *collectionName
1072
+ maxTimeMS: { $$exists: false }
1073
+ - description: "timeoutMS applies to whole operation, not individual attempts - listDatabases on client"
1074
+ runOnRequirements:
1075
+ - minServerVersion: "4.4"
1076
+ operations:
1077
+ - name: failPoint
1078
+ object: testRunner
1079
+ arguments:
1080
+ client: *failPointClient
1081
+ failPoint:
1082
+ configureFailPoint: failCommand
1083
+ mode: { times: 4 }
1084
+ data:
1085
+ failCommands: ["listDatabases"]
1086
+ blockConnection: true
1087
+ blockTimeMS: 60
1088
+ errorCode: 7
1089
+ errorLabels: ["RetryableWriteError"]
1090
+ - name: listDatabases
1091
+ object: *client
1092
+ arguments:
1093
+ filter: {}
1094
+
1095
+ expectError:
1096
+ isTimeoutError: true
1097
+ - description: "operation is retried multiple times for non-zero timeoutMS - listDatabases on client"
1098
+ runOnRequirements:
1099
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
1100
+ operations:
1101
+ - name: failPoint
1102
+ object: testRunner
1103
+ arguments:
1104
+ client: *failPointClient
1105
+ failPoint:
1106
+ configureFailPoint: failCommand
1107
+ mode: { times: 2 }
1108
+ data:
1109
+ failCommands: ["listDatabases"]
1110
+ errorCode: 7
1111
+ closeConnection: false
1112
+ errorLabels: ["RetryableWriteError"]
1113
+ - name: listDatabases
1114
+ object: *client
1115
+ arguments:
1116
+ timeoutMS: 1000
1117
+ filter: {}
1118
+
1119
+ expectEvents:
1120
+ - client: *client
1121
+ events:
1122
+ - commandStartedEvent:
1123
+ commandName: listDatabases
1124
+ databaseName: admin
1125
+ command:
1126
+ listDatabases: 1
1127
+ maxTimeMS: { $$type: ["int", "long"] }
1128
+ - commandStartedEvent:
1129
+ commandName: listDatabases
1130
+ databaseName: admin
1131
+ command:
1132
+ listDatabases: 1
1133
+ maxTimeMS: { $$type: ["int", "long"] }
1134
+ - commandStartedEvent:
1135
+ commandName: listDatabases
1136
+ databaseName: admin
1137
+ command:
1138
+ listDatabases: 1
1139
+ maxTimeMS: { $$type: ["int", "long"] }
1140
+ - description: "operation is retried multiple times if timeoutMS is zero - listDatabases on client"
1141
+ runOnRequirements:
1142
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
1143
+ operations:
1144
+ - name: failPoint
1145
+ object: testRunner
1146
+ arguments:
1147
+ client: *failPointClient
1148
+ failPoint:
1149
+ configureFailPoint: failCommand
1150
+ mode: { times: 2 }
1151
+ data:
1152
+ failCommands: ["listDatabases"]
1153
+ errorCode: 7
1154
+ closeConnection: false
1155
+ errorLabels: ["RetryableWriteError"]
1156
+ - name: listDatabases
1157
+ object: *client
1158
+ arguments:
1159
+ timeoutMS: 0
1160
+ filter: {}
1161
+
1162
+ expectEvents:
1163
+ - client: *client
1164
+ events:
1165
+ - commandStartedEvent:
1166
+ commandName: listDatabases
1167
+ databaseName: admin
1168
+ command:
1169
+ listDatabases: 1
1170
+ maxTimeMS: { $$exists: false }
1171
+ - commandStartedEvent:
1172
+ commandName: listDatabases
1173
+ databaseName: admin
1174
+ command:
1175
+ listDatabases: 1
1176
+ maxTimeMS: { $$exists: false }
1177
+ - commandStartedEvent:
1178
+ commandName: listDatabases
1179
+ databaseName: admin
1180
+ command:
1181
+ listDatabases: 1
1182
+ maxTimeMS: { $$exists: false }
1183
+ - description: "timeoutMS applies to whole operation, not individual attempts - listDatabaseNames on client"
1184
+ runOnRequirements:
1185
+ - minServerVersion: "4.4"
1186
+ operations:
1187
+ - name: failPoint
1188
+ object: testRunner
1189
+ arguments:
1190
+ client: *failPointClient
1191
+ failPoint:
1192
+ configureFailPoint: failCommand
1193
+ mode: { times: 4 }
1194
+ data:
1195
+ failCommands: ["listDatabases"]
1196
+ blockConnection: true
1197
+ blockTimeMS: 60
1198
+ errorCode: 7
1199
+ errorLabels: ["RetryableWriteError"]
1200
+ - name: listDatabaseNames
1201
+ object: *client
1202
+
1203
+ expectError:
1204
+ isTimeoutError: true
1205
+ - description: "operation is retried multiple times for non-zero timeoutMS - listDatabaseNames on client"
1206
+ runOnRequirements:
1207
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
1208
+ operations:
1209
+ - name: failPoint
1210
+ object: testRunner
1211
+ arguments:
1212
+ client: *failPointClient
1213
+ failPoint:
1214
+ configureFailPoint: failCommand
1215
+ mode: { times: 2 }
1216
+ data:
1217
+ failCommands: ["listDatabases"]
1218
+ errorCode: 7
1219
+ closeConnection: false
1220
+ errorLabels: ["RetryableWriteError"]
1221
+ - name: listDatabaseNames
1222
+ object: *client
1223
+ arguments:
1224
+ timeoutMS: 1000
1225
+
1226
+ expectEvents:
1227
+ - client: *client
1228
+ events:
1229
+ - commandStartedEvent:
1230
+ commandName: listDatabases
1231
+ databaseName: admin
1232
+ command:
1233
+ listDatabases: 1
1234
+ maxTimeMS: { $$type: ["int", "long"] }
1235
+ - commandStartedEvent:
1236
+ commandName: listDatabases
1237
+ databaseName: admin
1238
+ command:
1239
+ listDatabases: 1
1240
+ maxTimeMS: { $$type: ["int", "long"] }
1241
+ - commandStartedEvent:
1242
+ commandName: listDatabases
1243
+ databaseName: admin
1244
+ command:
1245
+ listDatabases: 1
1246
+ maxTimeMS: { $$type: ["int", "long"] }
1247
+ - description: "operation is retried multiple times if timeoutMS is zero - listDatabaseNames on client"
1248
+ runOnRequirements:
1249
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
1250
+ operations:
1251
+ - name: failPoint
1252
+ object: testRunner
1253
+ arguments:
1254
+ client: *failPointClient
1255
+ failPoint:
1256
+ configureFailPoint: failCommand
1257
+ mode: { times: 2 }
1258
+ data:
1259
+ failCommands: ["listDatabases"]
1260
+ errorCode: 7
1261
+ closeConnection: false
1262
+ errorLabels: ["RetryableWriteError"]
1263
+ - name: listDatabaseNames
1264
+ object: *client
1265
+ arguments:
1266
+ timeoutMS: 0
1267
+
1268
+ expectEvents:
1269
+ - client: *client
1270
+ events:
1271
+ - commandStartedEvent:
1272
+ commandName: listDatabases
1273
+ databaseName: admin
1274
+ command:
1275
+ listDatabases: 1
1276
+ maxTimeMS: { $$exists: false }
1277
+ - commandStartedEvent:
1278
+ commandName: listDatabases
1279
+ databaseName: admin
1280
+ command:
1281
+ listDatabases: 1
1282
+ maxTimeMS: { $$exists: false }
1283
+ - commandStartedEvent:
1284
+ commandName: listDatabases
1285
+ databaseName: admin
1286
+ command:
1287
+ listDatabases: 1
1288
+ maxTimeMS: { $$exists: false }
1289
+ - description: "timeoutMS applies to whole operation, not individual attempts - createChangeStream on client"
1290
+ runOnRequirements:
1291
+ - minServerVersion: "4.4"
1292
+ operations:
1293
+ - name: failPoint
1294
+ object: testRunner
1295
+ arguments:
1296
+ client: *failPointClient
1297
+ failPoint:
1298
+ configureFailPoint: failCommand
1299
+ mode: { times: 4 }
1300
+ data:
1301
+ failCommands: ["aggregate"]
1302
+ blockConnection: true
1303
+ blockTimeMS: 60
1304
+ errorCode: 7
1305
+ errorLabels: ["RetryableWriteError"]
1306
+ - name: createChangeStream
1307
+ object: *client
1308
+ arguments:
1309
+ pipeline: []
1310
+
1311
+ expectError:
1312
+ isTimeoutError: true
1313
+ - description: "operation is retried multiple times for non-zero timeoutMS - createChangeStream on client"
1314
+ runOnRequirements:
1315
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
1316
+ operations:
1317
+ - name: failPoint
1318
+ object: testRunner
1319
+ arguments:
1320
+ client: *failPointClient
1321
+ failPoint:
1322
+ configureFailPoint: failCommand
1323
+ mode: { times: 2 }
1324
+ data:
1325
+ failCommands: ["aggregate"]
1326
+ errorCode: 7
1327
+ closeConnection: false
1328
+ errorLabels: ["RetryableWriteError"]
1329
+ - name: createChangeStream
1330
+ object: *client
1331
+ arguments:
1332
+ timeoutMS: 1000
1333
+ pipeline: []
1334
+
1335
+ expectEvents:
1336
+ - client: *client
1337
+ events:
1338
+ - commandStartedEvent:
1339
+ commandName: aggregate
1340
+ databaseName: admin
1341
+ command:
1342
+ aggregate: 1
1343
+ maxTimeMS: { $$type: ["int", "long"] }
1344
+ - commandStartedEvent:
1345
+ commandName: aggregate
1346
+ databaseName: admin
1347
+ command:
1348
+ aggregate: 1
1349
+ maxTimeMS: { $$type: ["int", "long"] }
1350
+ - commandStartedEvent:
1351
+ commandName: aggregate
1352
+ databaseName: admin
1353
+ command:
1354
+ aggregate: 1
1355
+ maxTimeMS: { $$type: ["int", "long"] }
1356
+ - description: "operation is retried multiple times if timeoutMS is zero - createChangeStream on client"
1357
+ runOnRequirements:
1358
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
1359
+ operations:
1360
+ - name: failPoint
1361
+ object: testRunner
1362
+ arguments:
1363
+ client: *failPointClient
1364
+ failPoint:
1365
+ configureFailPoint: failCommand
1366
+ mode: { times: 2 }
1367
+ data:
1368
+ failCommands: ["aggregate"]
1369
+ errorCode: 7
1370
+ closeConnection: false
1371
+ errorLabels: ["RetryableWriteError"]
1372
+ - name: createChangeStream
1373
+ object: *client
1374
+ arguments:
1375
+ timeoutMS: 0
1376
+ pipeline: []
1377
+
1378
+ expectEvents:
1379
+ - client: *client
1380
+ events:
1381
+ - commandStartedEvent:
1382
+ commandName: aggregate
1383
+ databaseName: admin
1384
+ command:
1385
+ aggregate: 1
1386
+ maxTimeMS: { $$exists: false }
1387
+ - commandStartedEvent:
1388
+ commandName: aggregate
1389
+ databaseName: admin
1390
+ command:
1391
+ aggregate: 1
1392
+ maxTimeMS: { $$exists: false }
1393
+ - commandStartedEvent:
1394
+ commandName: aggregate
1395
+ databaseName: admin
1396
+ command:
1397
+ aggregate: 1
1398
+ maxTimeMS: { $$exists: false }
1399
+ - description: "timeoutMS applies to whole operation, not individual attempts - aggregate on database"
1400
+ runOnRequirements:
1401
+ - minServerVersion: "4.4"
1402
+ operations:
1403
+ - name: failPoint
1404
+ object: testRunner
1405
+ arguments:
1406
+ client: *failPointClient
1407
+ failPoint:
1408
+ configureFailPoint: failCommand
1409
+ mode: { times: 4 }
1410
+ data:
1411
+ failCommands: ["aggregate"]
1412
+ blockConnection: true
1413
+ blockTimeMS: 60
1414
+ errorCode: 7
1415
+ errorLabels: ["RetryableWriteError"]
1416
+ - name: aggregate
1417
+ object: *database
1418
+ arguments:
1419
+ pipeline: [ { $listLocalSessions: {} }, { $limit: 1 } ]
1420
+
1421
+ expectError:
1422
+ isTimeoutError: true
1423
+ - description: "operation is retried multiple times for non-zero timeoutMS - aggregate on database"
1424
+ runOnRequirements:
1425
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
1426
+ operations:
1427
+ - name: failPoint
1428
+ object: testRunner
1429
+ arguments:
1430
+ client: *failPointClient
1431
+ failPoint:
1432
+ configureFailPoint: failCommand
1433
+ mode: { times: 2 }
1434
+ data:
1435
+ failCommands: ["aggregate"]
1436
+ errorCode: 7
1437
+ closeConnection: false
1438
+ errorLabels: ["RetryableWriteError"]
1439
+ - name: aggregate
1440
+ object: *database
1441
+ arguments:
1442
+ timeoutMS: 1000
1443
+ pipeline: [ { $listLocalSessions: {} }, { $limit: 1 } ]
1444
+
1445
+ expectEvents:
1446
+ - client: *client
1447
+ events:
1448
+ - commandStartedEvent:
1449
+ commandName: aggregate
1450
+ databaseName: *databaseName
1451
+ command:
1452
+ aggregate: 1
1453
+ maxTimeMS: { $$type: ["int", "long"] }
1454
+ - commandStartedEvent:
1455
+ commandName: aggregate
1456
+ databaseName: *databaseName
1457
+ command:
1458
+ aggregate: 1
1459
+ maxTimeMS: { $$type: ["int", "long"] }
1460
+ - commandStartedEvent:
1461
+ commandName: aggregate
1462
+ databaseName: *databaseName
1463
+ command:
1464
+ aggregate: 1
1465
+ maxTimeMS: { $$type: ["int", "long"] }
1466
+ - description: "operation is retried multiple times if timeoutMS is zero - aggregate on database"
1467
+ runOnRequirements:
1468
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
1469
+ operations:
1470
+ - name: failPoint
1471
+ object: testRunner
1472
+ arguments:
1473
+ client: *failPointClient
1474
+ failPoint:
1475
+ configureFailPoint: failCommand
1476
+ mode: { times: 2 }
1477
+ data:
1478
+ failCommands: ["aggregate"]
1479
+ errorCode: 7
1480
+ closeConnection: false
1481
+ errorLabels: ["RetryableWriteError"]
1482
+ - name: aggregate
1483
+ object: *database
1484
+ arguments:
1485
+ timeoutMS: 0
1486
+ pipeline: [ { $listLocalSessions: {} }, { $limit: 1 } ]
1487
+
1488
+ expectEvents:
1489
+ - client: *client
1490
+ events:
1491
+ - commandStartedEvent:
1492
+ commandName: aggregate
1493
+ databaseName: *databaseName
1494
+ command:
1495
+ aggregate: 1
1496
+ maxTimeMS: { $$exists: false }
1497
+ - commandStartedEvent:
1498
+ commandName: aggregate
1499
+ databaseName: *databaseName
1500
+ command:
1501
+ aggregate: 1
1502
+ maxTimeMS: { $$exists: false }
1503
+ - commandStartedEvent:
1504
+ commandName: aggregate
1505
+ databaseName: *databaseName
1506
+ command:
1507
+ aggregate: 1
1508
+ maxTimeMS: { $$exists: false }
1509
+ - description: "timeoutMS applies to whole operation, not individual attempts - listCollections on database"
1510
+ runOnRequirements:
1511
+ - minServerVersion: "4.4"
1512
+ operations:
1513
+ - name: failPoint
1514
+ object: testRunner
1515
+ arguments:
1516
+ client: *failPointClient
1517
+ failPoint:
1518
+ configureFailPoint: failCommand
1519
+ mode: { times: 4 }
1520
+ data:
1521
+ failCommands: ["listCollections"]
1522
+ blockConnection: true
1523
+ blockTimeMS: 60
1524
+ errorCode: 7
1525
+ errorLabels: ["RetryableWriteError"]
1526
+ - name: listCollections
1527
+ object: *database
1528
+ arguments:
1529
+ filter: {}
1530
+
1531
+ expectError:
1532
+ isTimeoutError: true
1533
+ - description: "operation is retried multiple times for non-zero timeoutMS - listCollections on database"
1534
+ runOnRequirements:
1535
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
1536
+ operations:
1537
+ - name: failPoint
1538
+ object: testRunner
1539
+ arguments:
1540
+ client: *failPointClient
1541
+ failPoint:
1542
+ configureFailPoint: failCommand
1543
+ mode: { times: 2 }
1544
+ data:
1545
+ failCommands: ["listCollections"]
1546
+ errorCode: 7
1547
+ closeConnection: false
1548
+ errorLabels: ["RetryableWriteError"]
1549
+ - name: listCollections
1550
+ object: *database
1551
+ arguments:
1552
+ timeoutMS: 1000
1553
+ filter: {}
1554
+
1555
+ expectEvents:
1556
+ - client: *client
1557
+ events:
1558
+ - commandStartedEvent:
1559
+ commandName: listCollections
1560
+ databaseName: *databaseName
1561
+ command:
1562
+ listCollections: 1
1563
+ maxTimeMS: { $$type: ["int", "long"] }
1564
+ - commandStartedEvent:
1565
+ commandName: listCollections
1566
+ databaseName: *databaseName
1567
+ command:
1568
+ listCollections: 1
1569
+ maxTimeMS: { $$type: ["int", "long"] }
1570
+ - commandStartedEvent:
1571
+ commandName: listCollections
1572
+ databaseName: *databaseName
1573
+ command:
1574
+ listCollections: 1
1575
+ maxTimeMS: { $$type: ["int", "long"] }
1576
+ - description: "operation is retried multiple times if timeoutMS is zero - listCollections on database"
1577
+ runOnRequirements:
1578
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
1579
+ operations:
1580
+ - name: failPoint
1581
+ object: testRunner
1582
+ arguments:
1583
+ client: *failPointClient
1584
+ failPoint:
1585
+ configureFailPoint: failCommand
1586
+ mode: { times: 2 }
1587
+ data:
1588
+ failCommands: ["listCollections"]
1589
+ errorCode: 7
1590
+ closeConnection: false
1591
+ errorLabels: ["RetryableWriteError"]
1592
+ - name: listCollections
1593
+ object: *database
1594
+ arguments:
1595
+ timeoutMS: 0
1596
+ filter: {}
1597
+
1598
+ expectEvents:
1599
+ - client: *client
1600
+ events:
1601
+ - commandStartedEvent:
1602
+ commandName: listCollections
1603
+ databaseName: *databaseName
1604
+ command:
1605
+ listCollections: 1
1606
+ maxTimeMS: { $$exists: false }
1607
+ - commandStartedEvent:
1608
+ commandName: listCollections
1609
+ databaseName: *databaseName
1610
+ command:
1611
+ listCollections: 1
1612
+ maxTimeMS: { $$exists: false }
1613
+ - commandStartedEvent:
1614
+ commandName: listCollections
1615
+ databaseName: *databaseName
1616
+ command:
1617
+ listCollections: 1
1618
+ maxTimeMS: { $$exists: false }
1619
+ - description: "timeoutMS applies to whole operation, not individual attempts - listCollectionNames on database"
1620
+ runOnRequirements:
1621
+ - minServerVersion: "4.4"
1622
+ operations:
1623
+ - name: failPoint
1624
+ object: testRunner
1625
+ arguments:
1626
+ client: *failPointClient
1627
+ failPoint:
1628
+ configureFailPoint: failCommand
1629
+ mode: { times: 4 }
1630
+ data:
1631
+ failCommands: ["listCollections"]
1632
+ blockConnection: true
1633
+ blockTimeMS: 60
1634
+ errorCode: 7
1635
+ errorLabels: ["RetryableWriteError"]
1636
+ - name: listCollectionNames
1637
+ object: *database
1638
+ arguments:
1639
+ filter: {}
1640
+
1641
+ expectError:
1642
+ isTimeoutError: true
1643
+ - description: "operation is retried multiple times for non-zero timeoutMS - listCollectionNames on database"
1644
+ runOnRequirements:
1645
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
1646
+ operations:
1647
+ - name: failPoint
1648
+ object: testRunner
1649
+ arguments:
1650
+ client: *failPointClient
1651
+ failPoint:
1652
+ configureFailPoint: failCommand
1653
+ mode: { times: 2 }
1654
+ data:
1655
+ failCommands: ["listCollections"]
1656
+ errorCode: 7
1657
+ closeConnection: false
1658
+ errorLabels: ["RetryableWriteError"]
1659
+ - name: listCollectionNames
1660
+ object: *database
1661
+ arguments:
1662
+ timeoutMS: 1000
1663
+ filter: {}
1664
+
1665
+ expectEvents:
1666
+ - client: *client
1667
+ events:
1668
+ - commandStartedEvent:
1669
+ commandName: listCollections
1670
+ databaseName: *databaseName
1671
+ command:
1672
+ listCollections: 1
1673
+ maxTimeMS: { $$type: ["int", "long"] }
1674
+ - commandStartedEvent:
1675
+ commandName: listCollections
1676
+ databaseName: *databaseName
1677
+ command:
1678
+ listCollections: 1
1679
+ maxTimeMS: { $$type: ["int", "long"] }
1680
+ - commandStartedEvent:
1681
+ commandName: listCollections
1682
+ databaseName: *databaseName
1683
+ command:
1684
+ listCollections: 1
1685
+ maxTimeMS: { $$type: ["int", "long"] }
1686
+ - description: "operation is retried multiple times if timeoutMS is zero - listCollectionNames on database"
1687
+ runOnRequirements:
1688
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
1689
+ operations:
1690
+ - name: failPoint
1691
+ object: testRunner
1692
+ arguments:
1693
+ client: *failPointClient
1694
+ failPoint:
1695
+ configureFailPoint: failCommand
1696
+ mode: { times: 2 }
1697
+ data:
1698
+ failCommands: ["listCollections"]
1699
+ errorCode: 7
1700
+ closeConnection: false
1701
+ errorLabels: ["RetryableWriteError"]
1702
+ - name: listCollectionNames
1703
+ object: *database
1704
+ arguments:
1705
+ timeoutMS: 0
1706
+ filter: {}
1707
+
1708
+ expectEvents:
1709
+ - client: *client
1710
+ events:
1711
+ - commandStartedEvent:
1712
+ commandName: listCollections
1713
+ databaseName: *databaseName
1714
+ command:
1715
+ listCollections: 1
1716
+ maxTimeMS: { $$exists: false }
1717
+ - commandStartedEvent:
1718
+ commandName: listCollections
1719
+ databaseName: *databaseName
1720
+ command:
1721
+ listCollections: 1
1722
+ maxTimeMS: { $$exists: false }
1723
+ - commandStartedEvent:
1724
+ commandName: listCollections
1725
+ databaseName: *databaseName
1726
+ command:
1727
+ listCollections: 1
1728
+ maxTimeMS: { $$exists: false }
1729
+ - description: "timeoutMS applies to whole operation, not individual attempts - createChangeStream on database"
1730
+ runOnRequirements:
1731
+ - minServerVersion: "4.4"
1732
+ operations:
1733
+ - name: failPoint
1734
+ object: testRunner
1735
+ arguments:
1736
+ client: *failPointClient
1737
+ failPoint:
1738
+ configureFailPoint: failCommand
1739
+ mode: { times: 4 }
1740
+ data:
1741
+ failCommands: ["aggregate"]
1742
+ blockConnection: true
1743
+ blockTimeMS: 60
1744
+ errorCode: 7
1745
+ errorLabels: ["RetryableWriteError"]
1746
+ - name: createChangeStream
1747
+ object: *database
1748
+ arguments:
1749
+ pipeline: []
1750
+
1751
+ expectError:
1752
+ isTimeoutError: true
1753
+ - description: "operation is retried multiple times for non-zero timeoutMS - createChangeStream on database"
1754
+ runOnRequirements:
1755
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
1756
+ operations:
1757
+ - name: failPoint
1758
+ object: testRunner
1759
+ arguments:
1760
+ client: *failPointClient
1761
+ failPoint:
1762
+ configureFailPoint: failCommand
1763
+ mode: { times: 2 }
1764
+ data:
1765
+ failCommands: ["aggregate"]
1766
+ errorCode: 7
1767
+ closeConnection: false
1768
+ errorLabels: ["RetryableWriteError"]
1769
+ - name: createChangeStream
1770
+ object: *database
1771
+ arguments:
1772
+ timeoutMS: 1000
1773
+ pipeline: []
1774
+
1775
+ expectEvents:
1776
+ - client: *client
1777
+ events:
1778
+ - commandStartedEvent:
1779
+ commandName: aggregate
1780
+ databaseName: *databaseName
1781
+ command:
1782
+ aggregate: 1
1783
+ maxTimeMS: { $$type: ["int", "long"] }
1784
+ - commandStartedEvent:
1785
+ commandName: aggregate
1786
+ databaseName: *databaseName
1787
+ command:
1788
+ aggregate: 1
1789
+ maxTimeMS: { $$type: ["int", "long"] }
1790
+ - commandStartedEvent:
1791
+ commandName: aggregate
1792
+ databaseName: *databaseName
1793
+ command:
1794
+ aggregate: 1
1795
+ maxTimeMS: { $$type: ["int", "long"] }
1796
+ - description: "operation is retried multiple times if timeoutMS is zero - createChangeStream on database"
1797
+ runOnRequirements:
1798
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
1799
+ operations:
1800
+ - name: failPoint
1801
+ object: testRunner
1802
+ arguments:
1803
+ client: *failPointClient
1804
+ failPoint:
1805
+ configureFailPoint: failCommand
1806
+ mode: { times: 2 }
1807
+ data:
1808
+ failCommands: ["aggregate"]
1809
+ errorCode: 7
1810
+ closeConnection: false
1811
+ errorLabels: ["RetryableWriteError"]
1812
+ - name: createChangeStream
1813
+ object: *database
1814
+ arguments:
1815
+ timeoutMS: 0
1816
+ pipeline: []
1817
+
1818
+ expectEvents:
1819
+ - client: *client
1820
+ events:
1821
+ - commandStartedEvent:
1822
+ commandName: aggregate
1823
+ databaseName: *databaseName
1824
+ command:
1825
+ aggregate: 1
1826
+ maxTimeMS: { $$exists: false }
1827
+ - commandStartedEvent:
1828
+ commandName: aggregate
1829
+ databaseName: *databaseName
1830
+ command:
1831
+ aggregate: 1
1832
+ maxTimeMS: { $$exists: false }
1833
+ - commandStartedEvent:
1834
+ commandName: aggregate
1835
+ databaseName: *databaseName
1836
+ command:
1837
+ aggregate: 1
1838
+ maxTimeMS: { $$exists: false }
1839
+ - description: "timeoutMS applies to whole operation, not individual attempts - aggregate on collection"
1840
+ runOnRequirements:
1841
+ - minServerVersion: "4.4"
1842
+ operations:
1843
+ - name: failPoint
1844
+ object: testRunner
1845
+ arguments:
1846
+ client: *failPointClient
1847
+ failPoint:
1848
+ configureFailPoint: failCommand
1849
+ mode: { times: 4 }
1850
+ data:
1851
+ failCommands: ["aggregate"]
1852
+ blockConnection: true
1853
+ blockTimeMS: 60
1854
+ errorCode: 7
1855
+ errorLabels: ["RetryableWriteError"]
1856
+ - name: aggregate
1857
+ object: *collection
1858
+ arguments:
1859
+ pipeline: []
1860
+
1861
+ expectError:
1862
+ isTimeoutError: true
1863
+ - description: "operation is retried multiple times for non-zero timeoutMS - aggregate on collection"
1864
+ runOnRequirements:
1865
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
1866
+ operations:
1867
+ - name: failPoint
1868
+ object: testRunner
1869
+ arguments:
1870
+ client: *failPointClient
1871
+ failPoint:
1872
+ configureFailPoint: failCommand
1873
+ mode: { times: 2 }
1874
+ data:
1875
+ failCommands: ["aggregate"]
1876
+ errorCode: 7
1877
+ closeConnection: false
1878
+ errorLabels: ["RetryableWriteError"]
1879
+ - name: aggregate
1880
+ object: *collection
1881
+ arguments:
1882
+ timeoutMS: 1000
1883
+ pipeline: []
1884
+
1885
+ expectEvents:
1886
+ - client: *client
1887
+ events:
1888
+ - commandStartedEvent:
1889
+ commandName: aggregate
1890
+ databaseName: *databaseName
1891
+ command:
1892
+ aggregate: *collectionName
1893
+ maxTimeMS: { $$type: ["int", "long"] }
1894
+ - commandStartedEvent:
1895
+ commandName: aggregate
1896
+ databaseName: *databaseName
1897
+ command:
1898
+ aggregate: *collectionName
1899
+ maxTimeMS: { $$type: ["int", "long"] }
1900
+ - commandStartedEvent:
1901
+ commandName: aggregate
1902
+ databaseName: *databaseName
1903
+ command:
1904
+ aggregate: *collectionName
1905
+ maxTimeMS: { $$type: ["int", "long"] }
1906
+ - description: "operation is retried multiple times if timeoutMS is zero - aggregate on collection"
1907
+ runOnRequirements:
1908
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
1909
+ operations:
1910
+ - name: failPoint
1911
+ object: testRunner
1912
+ arguments:
1913
+ client: *failPointClient
1914
+ failPoint:
1915
+ configureFailPoint: failCommand
1916
+ mode: { times: 2 }
1917
+ data:
1918
+ failCommands: ["aggregate"]
1919
+ errorCode: 7
1920
+ closeConnection: false
1921
+ errorLabels: ["RetryableWriteError"]
1922
+ - name: aggregate
1923
+ object: *collection
1924
+ arguments:
1925
+ timeoutMS: 0
1926
+ pipeline: []
1927
+
1928
+ expectEvents:
1929
+ - client: *client
1930
+ events:
1931
+ - commandStartedEvent:
1932
+ commandName: aggregate
1933
+ databaseName: *databaseName
1934
+ command:
1935
+ aggregate: *collectionName
1936
+ maxTimeMS: { $$exists: false }
1937
+ - commandStartedEvent:
1938
+ commandName: aggregate
1939
+ databaseName: *databaseName
1940
+ command:
1941
+ aggregate: *collectionName
1942
+ maxTimeMS: { $$exists: false }
1943
+ - commandStartedEvent:
1944
+ commandName: aggregate
1945
+ databaseName: *databaseName
1946
+ command:
1947
+ aggregate: *collectionName
1948
+ maxTimeMS: { $$exists: false }
1949
+ - description: "timeoutMS applies to whole operation, not individual attempts - count on collection"
1950
+ runOnRequirements:
1951
+ - minServerVersion: "4.4"
1952
+ operations:
1953
+ - name: failPoint
1954
+ object: testRunner
1955
+ arguments:
1956
+ client: *failPointClient
1957
+ failPoint:
1958
+ configureFailPoint: failCommand
1959
+ mode: { times: 4 }
1960
+ data:
1961
+ failCommands: ["count"]
1962
+ blockConnection: true
1963
+ blockTimeMS: 60
1964
+ errorCode: 7
1965
+ errorLabels: ["RetryableWriteError"]
1966
+ - name: count
1967
+ object: *collection
1968
+ arguments:
1969
+ filter: {}
1970
+
1971
+ expectError:
1972
+ isTimeoutError: true
1973
+ - description: "operation is retried multiple times for non-zero timeoutMS - count on collection"
1974
+ runOnRequirements:
1975
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
1976
+ operations:
1977
+ - name: failPoint
1978
+ object: testRunner
1979
+ arguments:
1980
+ client: *failPointClient
1981
+ failPoint:
1982
+ configureFailPoint: failCommand
1983
+ mode: { times: 2 }
1984
+ data:
1985
+ failCommands: ["count"]
1986
+ errorCode: 7
1987
+ closeConnection: false
1988
+ errorLabels: ["RetryableWriteError"]
1989
+ - name: count
1990
+ object: *collection
1991
+ arguments:
1992
+ timeoutMS: 1000
1993
+ filter: {}
1994
+
1995
+ expectEvents:
1996
+ - client: *client
1997
+ events:
1998
+ - commandStartedEvent:
1999
+ commandName: count
2000
+ databaseName: *databaseName
2001
+ command:
2002
+ count: *collectionName
2003
+ maxTimeMS: { $$type: ["int", "long"] }
2004
+ - commandStartedEvent:
2005
+ commandName: count
2006
+ databaseName: *databaseName
2007
+ command:
2008
+ count: *collectionName
2009
+ maxTimeMS: { $$type: ["int", "long"] }
2010
+ - commandStartedEvent:
2011
+ commandName: count
2012
+ databaseName: *databaseName
2013
+ command:
2014
+ count: *collectionName
2015
+ maxTimeMS: { $$type: ["int", "long"] }
2016
+ - description: "operation is retried multiple times if timeoutMS is zero - count on collection"
2017
+ runOnRequirements:
2018
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
2019
+ operations:
2020
+ - name: failPoint
2021
+ object: testRunner
2022
+ arguments:
2023
+ client: *failPointClient
2024
+ failPoint:
2025
+ configureFailPoint: failCommand
2026
+ mode: { times: 2 }
2027
+ data:
2028
+ failCommands: ["count"]
2029
+ errorCode: 7
2030
+ closeConnection: false
2031
+ errorLabels: ["RetryableWriteError"]
2032
+ - name: count
2033
+ object: *collection
2034
+ arguments:
2035
+ timeoutMS: 0
2036
+ filter: {}
2037
+
2038
+ expectEvents:
2039
+ - client: *client
2040
+ events:
2041
+ - commandStartedEvent:
2042
+ commandName: count
2043
+ databaseName: *databaseName
2044
+ command:
2045
+ count: *collectionName
2046
+ maxTimeMS: { $$exists: false }
2047
+ - commandStartedEvent:
2048
+ commandName: count
2049
+ databaseName: *databaseName
2050
+ command:
2051
+ count: *collectionName
2052
+ maxTimeMS: { $$exists: false }
2053
+ - commandStartedEvent:
2054
+ commandName: count
2055
+ databaseName: *databaseName
2056
+ command:
2057
+ count: *collectionName
2058
+ maxTimeMS: { $$exists: false }
2059
+ - description: "timeoutMS applies to whole operation, not individual attempts - countDocuments on collection"
2060
+ runOnRequirements:
2061
+ - minServerVersion: "4.4"
2062
+ operations:
2063
+ - name: failPoint
2064
+ object: testRunner
2065
+ arguments:
2066
+ client: *failPointClient
2067
+ failPoint:
2068
+ configureFailPoint: failCommand
2069
+ mode: { times: 4 }
2070
+ data:
2071
+ failCommands: ["aggregate"]
2072
+ blockConnection: true
2073
+ blockTimeMS: 60
2074
+ errorCode: 7
2075
+ errorLabels: ["RetryableWriteError"]
2076
+ - name: countDocuments
2077
+ object: *collection
2078
+ arguments:
2079
+ filter: {}
2080
+
2081
+ expectError:
2082
+ isTimeoutError: true
2083
+ - description: "operation is retried multiple times for non-zero timeoutMS - countDocuments on collection"
2084
+ runOnRequirements:
2085
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
2086
+ operations:
2087
+ - name: failPoint
2088
+ object: testRunner
2089
+ arguments:
2090
+ client: *failPointClient
2091
+ failPoint:
2092
+ configureFailPoint: failCommand
2093
+ mode: { times: 2 }
2094
+ data:
2095
+ failCommands: ["aggregate"]
2096
+ errorCode: 7
2097
+ closeConnection: false
2098
+ errorLabels: ["RetryableWriteError"]
2099
+ - name: countDocuments
2100
+ object: *collection
2101
+ arguments:
2102
+ timeoutMS: 1000
2103
+ filter: {}
2104
+
2105
+ expectEvents:
2106
+ - client: *client
2107
+ events:
2108
+ - commandStartedEvent:
2109
+ commandName: aggregate
2110
+ databaseName: *databaseName
2111
+ command:
2112
+ aggregate: *collectionName
2113
+ maxTimeMS: { $$type: ["int", "long"] }
2114
+ - commandStartedEvent:
2115
+ commandName: aggregate
2116
+ databaseName: *databaseName
2117
+ command:
2118
+ aggregate: *collectionName
2119
+ maxTimeMS: { $$type: ["int", "long"] }
2120
+ - commandStartedEvent:
2121
+ commandName: aggregate
2122
+ databaseName: *databaseName
2123
+ command:
2124
+ aggregate: *collectionName
2125
+ maxTimeMS: { $$type: ["int", "long"] }
2126
+ - description: "operation is retried multiple times if timeoutMS is zero - countDocuments on collection"
2127
+ runOnRequirements:
2128
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
2129
+ operations:
2130
+ - name: failPoint
2131
+ object: testRunner
2132
+ arguments:
2133
+ client: *failPointClient
2134
+ failPoint:
2135
+ configureFailPoint: failCommand
2136
+ mode: { times: 2 }
2137
+ data:
2138
+ failCommands: ["aggregate"]
2139
+ errorCode: 7
2140
+ closeConnection: false
2141
+ errorLabels: ["RetryableWriteError"]
2142
+ - name: countDocuments
2143
+ object: *collection
2144
+ arguments:
2145
+ timeoutMS: 0
2146
+ filter: {}
2147
+
2148
+ expectEvents:
2149
+ - client: *client
2150
+ events:
2151
+ - commandStartedEvent:
2152
+ commandName: aggregate
2153
+ databaseName: *databaseName
2154
+ command:
2155
+ aggregate: *collectionName
2156
+ maxTimeMS: { $$exists: false }
2157
+ - commandStartedEvent:
2158
+ commandName: aggregate
2159
+ databaseName: *databaseName
2160
+ command:
2161
+ aggregate: *collectionName
2162
+ maxTimeMS: { $$exists: false }
2163
+ - commandStartedEvent:
2164
+ commandName: aggregate
2165
+ databaseName: *databaseName
2166
+ command:
2167
+ aggregate: *collectionName
2168
+ maxTimeMS: { $$exists: false }
2169
+ - description: "timeoutMS applies to whole operation, not individual attempts - estimatedDocumentCount on collection"
2170
+ runOnRequirements:
2171
+ - minServerVersion: "4.4"
2172
+ operations:
2173
+ - name: failPoint
2174
+ object: testRunner
2175
+ arguments:
2176
+ client: *failPointClient
2177
+ failPoint:
2178
+ configureFailPoint: failCommand
2179
+ mode: { times: 4 }
2180
+ data:
2181
+ failCommands: ["count"]
2182
+ blockConnection: true
2183
+ blockTimeMS: 60
2184
+ errorCode: 7
2185
+ errorLabels: ["RetryableWriteError"]
2186
+ - name: estimatedDocumentCount
2187
+ object: *collection
2188
+
2189
+ expectError:
2190
+ isTimeoutError: true
2191
+ - description: "operation is retried multiple times for non-zero timeoutMS - estimatedDocumentCount on collection"
2192
+ runOnRequirements:
2193
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
2194
+ operations:
2195
+ - name: failPoint
2196
+ object: testRunner
2197
+ arguments:
2198
+ client: *failPointClient
2199
+ failPoint:
2200
+ configureFailPoint: failCommand
2201
+ mode: { times: 2 }
2202
+ data:
2203
+ failCommands: ["count"]
2204
+ errorCode: 7
2205
+ closeConnection: false
2206
+ errorLabels: ["RetryableWriteError"]
2207
+ - name: estimatedDocumentCount
2208
+ object: *collection
2209
+ arguments:
2210
+ timeoutMS: 1000
2211
+
2212
+ expectEvents:
2213
+ - client: *client
2214
+ events:
2215
+ - commandStartedEvent:
2216
+ commandName: count
2217
+ databaseName: *databaseName
2218
+ command:
2219
+ count: *collectionName
2220
+ maxTimeMS: { $$type: ["int", "long"] }
2221
+ - commandStartedEvent:
2222
+ commandName: count
2223
+ databaseName: *databaseName
2224
+ command:
2225
+ count: *collectionName
2226
+ maxTimeMS: { $$type: ["int", "long"] }
2227
+ - commandStartedEvent:
2228
+ commandName: count
2229
+ databaseName: *databaseName
2230
+ command:
2231
+ count: *collectionName
2232
+ maxTimeMS: { $$type: ["int", "long"] }
2233
+ - description: "operation is retried multiple times if timeoutMS is zero - estimatedDocumentCount on collection"
2234
+ runOnRequirements:
2235
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
2236
+ operations:
2237
+ - name: failPoint
2238
+ object: testRunner
2239
+ arguments:
2240
+ client: *failPointClient
2241
+ failPoint:
2242
+ configureFailPoint: failCommand
2243
+ mode: { times: 2 }
2244
+ data:
2245
+ failCommands: ["count"]
2246
+ errorCode: 7
2247
+ closeConnection: false
2248
+ errorLabels: ["RetryableWriteError"]
2249
+ - name: estimatedDocumentCount
2250
+ object: *collection
2251
+ arguments:
2252
+ timeoutMS: 0
2253
+
2254
+ expectEvents:
2255
+ - client: *client
2256
+ events:
2257
+ - commandStartedEvent:
2258
+ commandName: count
2259
+ databaseName: *databaseName
2260
+ command:
2261
+ count: *collectionName
2262
+ maxTimeMS: { $$exists: false }
2263
+ - commandStartedEvent:
2264
+ commandName: count
2265
+ databaseName: *databaseName
2266
+ command:
2267
+ count: *collectionName
2268
+ maxTimeMS: { $$exists: false }
2269
+ - commandStartedEvent:
2270
+ commandName: count
2271
+ databaseName: *databaseName
2272
+ command:
2273
+ count: *collectionName
2274
+ maxTimeMS: { $$exists: false }
2275
+ - description: "timeoutMS applies to whole operation, not individual attempts - distinct on collection"
2276
+ runOnRequirements:
2277
+ - minServerVersion: "4.4"
2278
+ operations:
2279
+ - name: failPoint
2280
+ object: testRunner
2281
+ arguments:
2282
+ client: *failPointClient
2283
+ failPoint:
2284
+ configureFailPoint: failCommand
2285
+ mode: { times: 4 }
2286
+ data:
2287
+ failCommands: ["distinct"]
2288
+ blockConnection: true
2289
+ blockTimeMS: 60
2290
+ errorCode: 7
2291
+ errorLabels: ["RetryableWriteError"]
2292
+ - name: distinct
2293
+ object: *collection
2294
+ arguments:
2295
+ fieldName: x
2296
+ filter: {}
2297
+
2298
+ expectError:
2299
+ isTimeoutError: true
2300
+ - description: "operation is retried multiple times for non-zero timeoutMS - distinct on collection"
2301
+ runOnRequirements:
2302
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
2303
+ operations:
2304
+ - name: failPoint
2305
+ object: testRunner
2306
+ arguments:
2307
+ client: *failPointClient
2308
+ failPoint:
2309
+ configureFailPoint: failCommand
2310
+ mode: { times: 2 }
2311
+ data:
2312
+ failCommands: ["distinct"]
2313
+ errorCode: 7
2314
+ closeConnection: false
2315
+ errorLabels: ["RetryableWriteError"]
2316
+ - name: distinct
2317
+ object: *collection
2318
+ arguments:
2319
+ timeoutMS: 1000
2320
+ fieldName: x
2321
+ filter: {}
2322
+
2323
+ expectEvents:
2324
+ - client: *client
2325
+ events:
2326
+ - commandStartedEvent:
2327
+ commandName: distinct
2328
+ databaseName: *databaseName
2329
+ command:
2330
+ distinct: *collectionName
2331
+ maxTimeMS: { $$type: ["int", "long"] }
2332
+ - commandStartedEvent:
2333
+ commandName: distinct
2334
+ databaseName: *databaseName
2335
+ command:
2336
+ distinct: *collectionName
2337
+ maxTimeMS: { $$type: ["int", "long"] }
2338
+ - commandStartedEvent:
2339
+ commandName: distinct
2340
+ databaseName: *databaseName
2341
+ command:
2342
+ distinct: *collectionName
2343
+ maxTimeMS: { $$type: ["int", "long"] }
2344
+ - description: "operation is retried multiple times if timeoutMS is zero - distinct on collection"
2345
+ runOnRequirements:
2346
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
2347
+ operations:
2348
+ - name: failPoint
2349
+ object: testRunner
2350
+ arguments:
2351
+ client: *failPointClient
2352
+ failPoint:
2353
+ configureFailPoint: failCommand
2354
+ mode: { times: 2 }
2355
+ data:
2356
+ failCommands: ["distinct"]
2357
+ errorCode: 7
2358
+ closeConnection: false
2359
+ errorLabels: ["RetryableWriteError"]
2360
+ - name: distinct
2361
+ object: *collection
2362
+ arguments:
2363
+ timeoutMS: 0
2364
+ fieldName: x
2365
+ filter: {}
2366
+
2367
+ expectEvents:
2368
+ - client: *client
2369
+ events:
2370
+ - commandStartedEvent:
2371
+ commandName: distinct
2372
+ databaseName: *databaseName
2373
+ command:
2374
+ distinct: *collectionName
2375
+ maxTimeMS: { $$exists: false }
2376
+ - commandStartedEvent:
2377
+ commandName: distinct
2378
+ databaseName: *databaseName
2379
+ command:
2380
+ distinct: *collectionName
2381
+ maxTimeMS: { $$exists: false }
2382
+ - commandStartedEvent:
2383
+ commandName: distinct
2384
+ databaseName: *databaseName
2385
+ command:
2386
+ distinct: *collectionName
2387
+ maxTimeMS: { $$exists: false }
2388
+ - description: "timeoutMS applies to whole operation, not individual attempts - find on collection"
2389
+ runOnRequirements:
2390
+ - minServerVersion: "4.4"
2391
+ operations:
2392
+ - name: failPoint
2393
+ object: testRunner
2394
+ arguments:
2395
+ client: *failPointClient
2396
+ failPoint:
2397
+ configureFailPoint: failCommand
2398
+ mode: { times: 4 }
2399
+ data:
2400
+ failCommands: ["find"]
2401
+ blockConnection: true
2402
+ blockTimeMS: 60
2403
+ errorCode: 7
2404
+ errorLabels: ["RetryableWriteError"]
2405
+ - name: find
2406
+ object: *collection
2407
+ arguments:
2408
+ filter: {}
2409
+
2410
+ expectError:
2411
+ isTimeoutError: true
2412
+ - description: "operation is retried multiple times for non-zero timeoutMS - find on collection"
2413
+ runOnRequirements:
2414
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
2415
+ operations:
2416
+ - name: failPoint
2417
+ object: testRunner
2418
+ arguments:
2419
+ client: *failPointClient
2420
+ failPoint:
2421
+ configureFailPoint: failCommand
2422
+ mode: { times: 2 }
2423
+ data:
2424
+ failCommands: ["find"]
2425
+ errorCode: 7
2426
+ closeConnection: false
2427
+ errorLabels: ["RetryableWriteError"]
2428
+ - name: find
2429
+ object: *collection
2430
+ arguments:
2431
+ timeoutMS: 1000
2432
+ filter: {}
2433
+
2434
+ expectEvents:
2435
+ - client: *client
2436
+ events:
2437
+ - commandStartedEvent:
2438
+ commandName: find
2439
+ databaseName: *databaseName
2440
+ command:
2441
+ find: *collectionName
2442
+ maxTimeMS: { $$type: ["int", "long"] }
2443
+ - commandStartedEvent:
2444
+ commandName: find
2445
+ databaseName: *databaseName
2446
+ command:
2447
+ find: *collectionName
2448
+ maxTimeMS: { $$type: ["int", "long"] }
2449
+ - commandStartedEvent:
2450
+ commandName: find
2451
+ databaseName: *databaseName
2452
+ command:
2453
+ find: *collectionName
2454
+ maxTimeMS: { $$type: ["int", "long"] }
2455
+ - description: "operation is retried multiple times if timeoutMS is zero - find on collection"
2456
+ runOnRequirements:
2457
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
2458
+ operations:
2459
+ - name: failPoint
2460
+ object: testRunner
2461
+ arguments:
2462
+ client: *failPointClient
2463
+ failPoint:
2464
+ configureFailPoint: failCommand
2465
+ mode: { times: 2 }
2466
+ data:
2467
+ failCommands: ["find"]
2468
+ errorCode: 7
2469
+ closeConnection: false
2470
+ errorLabels: ["RetryableWriteError"]
2471
+ - name: find
2472
+ object: *collection
2473
+ arguments:
2474
+ timeoutMS: 0
2475
+ filter: {}
2476
+
2477
+ expectEvents:
2478
+ - client: *client
2479
+ events:
2480
+ - commandStartedEvent:
2481
+ commandName: find
2482
+ databaseName: *databaseName
2483
+ command:
2484
+ find: *collectionName
2485
+ maxTimeMS: { $$exists: false }
2486
+ - commandStartedEvent:
2487
+ commandName: find
2488
+ databaseName: *databaseName
2489
+ command:
2490
+ find: *collectionName
2491
+ maxTimeMS: { $$exists: false }
2492
+ - commandStartedEvent:
2493
+ commandName: find
2494
+ databaseName: *databaseName
2495
+ command:
2496
+ find: *collectionName
2497
+ maxTimeMS: { $$exists: false }
2498
+ - description: "timeoutMS applies to whole operation, not individual attempts - findOne on collection"
2499
+ runOnRequirements:
2500
+ - minServerVersion: "4.4"
2501
+ operations:
2502
+ - name: failPoint
2503
+ object: testRunner
2504
+ arguments:
2505
+ client: *failPointClient
2506
+ failPoint:
2507
+ configureFailPoint: failCommand
2508
+ mode: { times: 4 }
2509
+ data:
2510
+ failCommands: ["find"]
2511
+ blockConnection: true
2512
+ blockTimeMS: 60
2513
+ errorCode: 7
2514
+ errorLabels: ["RetryableWriteError"]
2515
+ - name: findOne
2516
+ object: *collection
2517
+ arguments:
2518
+ filter: {}
2519
+
2520
+ expectError:
2521
+ isTimeoutError: true
2522
+ - description: "operation is retried multiple times for non-zero timeoutMS - findOne on collection"
2523
+ runOnRequirements:
2524
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
2525
+ operations:
2526
+ - name: failPoint
2527
+ object: testRunner
2528
+ arguments:
2529
+ client: *failPointClient
2530
+ failPoint:
2531
+ configureFailPoint: failCommand
2532
+ mode: { times: 2 }
2533
+ data:
2534
+ failCommands: ["find"]
2535
+ errorCode: 7
2536
+ closeConnection: false
2537
+ errorLabels: ["RetryableWriteError"]
2538
+ - name: findOne
2539
+ object: *collection
2540
+ arguments:
2541
+ timeoutMS: 1000
2542
+ filter: {}
2543
+
2544
+ expectEvents:
2545
+ - client: *client
2546
+ events:
2547
+ - commandStartedEvent:
2548
+ commandName: find
2549
+ databaseName: *databaseName
2550
+ command:
2551
+ find: *collectionName
2552
+ maxTimeMS: { $$type: ["int", "long"] }
2553
+ - commandStartedEvent:
2554
+ commandName: find
2555
+ databaseName: *databaseName
2556
+ command:
2557
+ find: *collectionName
2558
+ maxTimeMS: { $$type: ["int", "long"] }
2559
+ - commandStartedEvent:
2560
+ commandName: find
2561
+ databaseName: *databaseName
2562
+ command:
2563
+ find: *collectionName
2564
+ maxTimeMS: { $$type: ["int", "long"] }
2565
+ - description: "operation is retried multiple times if timeoutMS is zero - findOne on collection"
2566
+ runOnRequirements:
2567
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
2568
+ operations:
2569
+ - name: failPoint
2570
+ object: testRunner
2571
+ arguments:
2572
+ client: *failPointClient
2573
+ failPoint:
2574
+ configureFailPoint: failCommand
2575
+ mode: { times: 2 }
2576
+ data:
2577
+ failCommands: ["find"]
2578
+ errorCode: 7
2579
+ closeConnection: false
2580
+ errorLabels: ["RetryableWriteError"]
2581
+ - name: findOne
2582
+ object: *collection
2583
+ arguments:
2584
+ timeoutMS: 0
2585
+ filter: {}
2586
+
2587
+ expectEvents:
2588
+ - client: *client
2589
+ events:
2590
+ - commandStartedEvent:
2591
+ commandName: find
2592
+ databaseName: *databaseName
2593
+ command:
2594
+ find: *collectionName
2595
+ maxTimeMS: { $$exists: false }
2596
+ - commandStartedEvent:
2597
+ commandName: find
2598
+ databaseName: *databaseName
2599
+ command:
2600
+ find: *collectionName
2601
+ maxTimeMS: { $$exists: false }
2602
+ - commandStartedEvent:
2603
+ commandName: find
2604
+ databaseName: *databaseName
2605
+ command:
2606
+ find: *collectionName
2607
+ maxTimeMS: { $$exists: false }
2608
+ - description: "timeoutMS applies to whole operation, not individual attempts - listIndexes on collection"
2609
+ runOnRequirements:
2610
+ - minServerVersion: "4.4"
2611
+ operations:
2612
+ - name: failPoint
2613
+ object: testRunner
2614
+ arguments:
2615
+ client: *failPointClient
2616
+ failPoint:
2617
+ configureFailPoint: failCommand
2618
+ mode: { times: 4 }
2619
+ data:
2620
+ failCommands: ["listIndexes"]
2621
+ blockConnection: true
2622
+ blockTimeMS: 60
2623
+ errorCode: 7
2624
+ errorLabels: ["RetryableWriteError"]
2625
+ - name: listIndexes
2626
+ object: *collection
2627
+
2628
+ expectError:
2629
+ isTimeoutError: true
2630
+ - description: "operation is retried multiple times for non-zero timeoutMS - listIndexes on collection"
2631
+ runOnRequirements:
2632
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
2633
+ operations:
2634
+ - name: failPoint
2635
+ object: testRunner
2636
+ arguments:
2637
+ client: *failPointClient
2638
+ failPoint:
2639
+ configureFailPoint: failCommand
2640
+ mode: { times: 2 }
2641
+ data:
2642
+ failCommands: ["listIndexes"]
2643
+ errorCode: 7
2644
+ closeConnection: false
2645
+ errorLabels: ["RetryableWriteError"]
2646
+ - name: listIndexes
2647
+ object: *collection
2648
+ arguments:
2649
+ timeoutMS: 1000
2650
+
2651
+ expectEvents:
2652
+ - client: *client
2653
+ events:
2654
+ - commandStartedEvent:
2655
+ commandName: listIndexes
2656
+ databaseName: *databaseName
2657
+ command:
2658
+ listIndexes: *collectionName
2659
+ maxTimeMS: { $$type: ["int", "long"] }
2660
+ - commandStartedEvent:
2661
+ commandName: listIndexes
2662
+ databaseName: *databaseName
2663
+ command:
2664
+ listIndexes: *collectionName
2665
+ maxTimeMS: { $$type: ["int", "long"] }
2666
+ - commandStartedEvent:
2667
+ commandName: listIndexes
2668
+ databaseName: *databaseName
2669
+ command:
2670
+ listIndexes: *collectionName
2671
+ maxTimeMS: { $$type: ["int", "long"] }
2672
+ - description: "operation is retried multiple times if timeoutMS is zero - listIndexes on collection"
2673
+ runOnRequirements:
2674
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
2675
+ operations:
2676
+ - name: failPoint
2677
+ object: testRunner
2678
+ arguments:
2679
+ client: *failPointClient
2680
+ failPoint:
2681
+ configureFailPoint: failCommand
2682
+ mode: { times: 2 }
2683
+ data:
2684
+ failCommands: ["listIndexes"]
2685
+ errorCode: 7
2686
+ closeConnection: false
2687
+ errorLabels: ["RetryableWriteError"]
2688
+ - name: listIndexes
2689
+ object: *collection
2690
+ arguments:
2691
+ timeoutMS: 0
2692
+
2693
+ expectEvents:
2694
+ - client: *client
2695
+ events:
2696
+ - commandStartedEvent:
2697
+ commandName: listIndexes
2698
+ databaseName: *databaseName
2699
+ command:
2700
+ listIndexes: *collectionName
2701
+ maxTimeMS: { $$exists: false }
2702
+ - commandStartedEvent:
2703
+ commandName: listIndexes
2704
+ databaseName: *databaseName
2705
+ command:
2706
+ listIndexes: *collectionName
2707
+ maxTimeMS: { $$exists: false }
2708
+ - commandStartedEvent:
2709
+ commandName: listIndexes
2710
+ databaseName: *databaseName
2711
+ command:
2712
+ listIndexes: *collectionName
2713
+ maxTimeMS: { $$exists: false }
2714
+ - description: "timeoutMS applies to whole operation, not individual attempts - createChangeStream on collection"
2715
+ runOnRequirements:
2716
+ - minServerVersion: "4.4"
2717
+ operations:
2718
+ - name: failPoint
2719
+ object: testRunner
2720
+ arguments:
2721
+ client: *failPointClient
2722
+ failPoint:
2723
+ configureFailPoint: failCommand
2724
+ mode: { times: 4 }
2725
+ data:
2726
+ failCommands: ["aggregate"]
2727
+ blockConnection: true
2728
+ blockTimeMS: 60
2729
+ errorCode: 7
2730
+ errorLabels: ["RetryableWriteError"]
2731
+ - name: createChangeStream
2732
+ object: *collection
2733
+ arguments:
2734
+ pipeline: []
2735
+
2736
+ expectError:
2737
+ isTimeoutError: true
2738
+ - description: "operation is retried multiple times for non-zero timeoutMS - createChangeStream on collection"
2739
+ runOnRequirements:
2740
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
2741
+ operations:
2742
+ - name: failPoint
2743
+ object: testRunner
2744
+ arguments:
2745
+ client: *failPointClient
2746
+ failPoint:
2747
+ configureFailPoint: failCommand
2748
+ mode: { times: 2 }
2749
+ data:
2750
+ failCommands: ["aggregate"]
2751
+ errorCode: 7
2752
+ closeConnection: false
2753
+ errorLabels: ["RetryableWriteError"]
2754
+ - name: createChangeStream
2755
+ object: *collection
2756
+ arguments:
2757
+ timeoutMS: 1000
2758
+ pipeline: []
2759
+
2760
+ expectEvents:
2761
+ - client: *client
2762
+ events:
2763
+ - commandStartedEvent:
2764
+ commandName: aggregate
2765
+ databaseName: *databaseName
2766
+ command:
2767
+ aggregate: *collectionName
2768
+ maxTimeMS: { $$type: ["int", "long"] }
2769
+ - commandStartedEvent:
2770
+ commandName: aggregate
2771
+ databaseName: *databaseName
2772
+ command:
2773
+ aggregate: *collectionName
2774
+ maxTimeMS: { $$type: ["int", "long"] }
2775
+ - commandStartedEvent:
2776
+ commandName: aggregate
2777
+ databaseName: *databaseName
2778
+ command:
2779
+ aggregate: *collectionName
2780
+ maxTimeMS: { $$type: ["int", "long"] }
2781
+ - description: "operation is retried multiple times if timeoutMS is zero - createChangeStream on collection"
2782
+ runOnRequirements:
2783
+ - minServerVersion: "4.3.1" # failCommand errorLabels option
2784
+ operations:
2785
+ - name: failPoint
2786
+ object: testRunner
2787
+ arguments:
2788
+ client: *failPointClient
2789
+ failPoint:
2790
+ configureFailPoint: failCommand
2791
+ mode: { times: 2 }
2792
+ data:
2793
+ failCommands: ["aggregate"]
2794
+ errorCode: 7
2795
+ closeConnection: false
2796
+ errorLabels: ["RetryableWriteError"]
2797
+ - name: createChangeStream
2798
+ object: *collection
2799
+ arguments:
2800
+ timeoutMS: 0
2801
+ pipeline: []
2802
+
2803
+ expectEvents:
2804
+ - client: *client
2805
+ events:
2806
+ - commandStartedEvent:
2807
+ commandName: aggregate
2808
+ databaseName: *databaseName
2809
+ command:
2810
+ aggregate: *collectionName
2811
+ maxTimeMS: { $$exists: false }
2812
+ - commandStartedEvent:
2813
+ commandName: aggregate
2814
+ databaseName: *databaseName
2815
+ command:
2816
+ aggregate: *collectionName
2817
+ maxTimeMS: { $$exists: false }
2818
+ - commandStartedEvent:
2819
+ commandName: aggregate
2820
+ databaseName: *databaseName
2821
+ command:
2822
+ aggregate: *collectionName
2823
+ maxTimeMS: { $$exists: false }
2824
+