mongo 2.16.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 (1614) 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 -3
  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 +153 -32
  53. data/lib/mongo/caching_cursor.rb +1 -1
  54. data/lib/mongo/client.rb +227 -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 +40 -17
  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 +85 -100
  75. data/lib/mongo/collection/view/builder/aggregation.rb +13 -21
  76. data/lib/mongo/collection/view/builder/map_reduce.rb +2 -2
  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 +144 -45
  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 +81 -65
  83. data/lib/mongo/collection/view/map_reduce.rb +43 -15
  84. data/lib/mongo/collection/view/readable.rb +127 -52
  85. data/lib/mongo/collection/view/writable.rb +231 -56
  86. data/lib/mongo/collection/view.rb +44 -4
  87. data/lib/mongo/collection.rb +483 -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/drop/command.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 +45 -4
  134. data/lib/mongo/cursor/nontailable.rb +27 -0
  135. data/lib/mongo/cursor.rb +149 -38
  136. data/lib/mongo/cursor_host.rb +82 -0
  137. data/lib/mongo/database/view.rb +126 -17
  138. data/lib/mongo/database.rb +154 -40
  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/error/invalid_max_connecting.rb +28 -0
  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/error/session_not_materialized.rb +29 -0
  220. data/lib/mongo/error/sessions_not_supported.rb +1 -1
  221. data/lib/mongo/{operation/kill_cursors/legacy.rb → error/snapshot_session_invalid_server_version.rb} +9 -19
  222. data/lib/mongo/{operation/command/command.rb → error/snapshot_session_transaction_prohibited.rb} +8 -19
  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 +18 -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 +6 -3
  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 +2 -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 +53 -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 -14
  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 +27 -8
  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 +6 -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 +7 -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 +98 -13
  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 +240 -44
  455. data/lib/mongo/socket/ocsp_cache.rb +3 -4
  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 +184 -32
  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 -7
  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 +15 -15
  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 +17 -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 +17 -13
  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 +42 -17
  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 +198 -123
  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 +25 -2
  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 +172 -21
  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 +25 -2
  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 +137 -16
  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 +45 -82
  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 -15
  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 +13 -6
  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 +166 -51
  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 +197 -36
  864. data/spec/runners/unified/ddl_operations.rb +185 -5
  865. data/spec/runners/unified/entity_map.rb +4 -4
  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 +121 -12
  872. data/spec/runners/unified/test.rb +219 -39
  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-let.yml +138 -0
  1047. data/spec/spec_tests/data/crud_unified/aggregate-merge-errorResponse.yml +42 -0
  1048. data/spec/spec_tests/data/crud_unified/aggregate-merge.yml +185 -0
  1049. data/spec/spec_tests/data/crud_unified/aggregate-out-readConcern.yml +171 -0
  1050. data/spec/spec_tests/data/crud_unified/aggregate-write-readPreference.yml +161 -0
  1051. data/spec/spec_tests/data/crud_unified/aggregate.yml +215 -0
  1052. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters-clientError.yml +98 -0
  1053. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters.yml +174 -0
  1054. data/spec/spec_tests/data/crud_unified/bulkWrite-comment.yml +189 -0
  1055. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-clientError.yml +113 -0
  1056. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-serverError.yml +142 -0
  1057. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint.yml +154 -0
  1058. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-hint-unacknowledged.yml +98 -0
  1059. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-let.yml +86 -0
  1060. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-hint-unacknowledged.yml +97 -0
  1061. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-let.yml +86 -0
  1062. data/spec/spec_tests/data/crud_unified/bulkWrite-errorResponse.yml +50 -0
  1063. data/spec/spec_tests/data/crud_unified/bulkWrite-insertOne-dots_and_dollars.yml +138 -0
  1064. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-dots_and_dollars.yml +165 -0
  1065. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-hint-unacknowledged.yml +103 -0
  1066. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-let.yml +93 -0
  1067. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-clientError.yml +148 -0
  1068. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-serverError.yml +239 -0
  1069. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint.yml +256 -0
  1070. data/spec/spec_tests/data/crud_unified/bulkWrite-update-validation.yml +73 -0
  1071. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-dots_and_dollars.yml +150 -0
  1072. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-hint-unacknowledged.yml +104 -0
  1073. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-let.yml +96 -0
  1074. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-dots_and_dollars.yml +150 -0
  1075. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-hint-unacknowledged.yml +103 -0
  1076. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-let.yml +95 -0
  1077. data/spec/spec_tests/data/crud_unified/countDocuments-comment.yml +92 -0
  1078. data/spec/spec_tests/data/crud_unified/db-aggregate-write-readPreference.yml +157 -0
  1079. data/spec/spec_tests/data/crud_unified/db-aggregate.yml +73 -0
  1080. data/spec/spec_tests/data/crud_unified/deleteMany-comment.yml +97 -0
  1081. data/spec/spec_tests/data/crud_unified/deleteMany-hint-clientError.yml +87 -0
  1082. data/spec/spec_tests/data/crud_unified/deleteMany-hint-serverError.yml +107 -0
  1083. data/spec/spec_tests/data/crud_unified/deleteMany-hint-unacknowledged.yml +90 -0
  1084. data/spec/spec_tests/data/crud_unified/deleteMany-hint.yml +99 -0
  1085. data/spec/spec_tests/data/crud_unified/deleteMany-let.yml +93 -0
  1086. data/spec/spec_tests/data/crud_unified/deleteOne-comment.yml +98 -0
  1087. data/spec/spec_tests/data/crud_unified/deleteOne-errorResponse.yml +46 -0
  1088. data/spec/spec_tests/data/crud_unified/deleteOne-hint-clientError.yml +80 -0
  1089. data/spec/spec_tests/data/crud_unified/deleteOne-hint-serverError.yml +100 -0
  1090. data/spec/spec_tests/data/crud_unified/deleteOne-hint-unacknowledged.yml +89 -0
  1091. data/spec/spec_tests/data/crud_unified/deleteOne-hint.yml +95 -0
  1092. data/spec/spec_tests/data/crud_unified/deleteOne-let.yml +91 -0
  1093. data/spec/spec_tests/data/crud_unified/distinct-comment.yml +98 -0
  1094. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount-comment.yml +95 -0
  1095. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +49 -135
  1096. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-clientError.yml +55 -0
  1097. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-serverError.yml +68 -0
  1098. data/spec/spec_tests/data/crud_unified/find-allowdiskuse.yml +79 -0
  1099. data/spec/spec_tests/data/crud_unified/find-comment.yml +166 -0
  1100. data/spec/spec_tests/data/crud_unified/find-let.yml +71 -0
  1101. data/spec/spec_tests/data/crud_unified/find-test-all-options.yml +377 -0
  1102. data/spec/spec_tests/data/crud_unified/find.yml +68 -0
  1103. data/spec/spec_tests/data/crud_unified/findOneAndDelete-comment.yml +96 -0
  1104. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-clientError.yml +91 -0
  1105. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-serverError.yml +107 -0
  1106. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-unacknowledged.yml +88 -0
  1107. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint.yml +102 -0
  1108. data/spec/spec_tests/data/crud_unified/findOneAndDelete-let.yml +86 -0
  1109. data/spec/spec_tests/data/crud_unified/findOneAndReplace-comment.yml +101 -0
  1110. data/spec/spec_tests/data/crud_unified/findOneAndReplace-dots_and_dollars.yml +140 -0
  1111. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-clientError.yml +83 -0
  1112. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-serverError.yml +99 -0
  1113. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-unacknowledged.yml +96 -0
  1114. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint.yml +98 -0
  1115. data/spec/spec_tests/data/crud_unified/findOneAndReplace-let.yml +94 -0
  1116. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-comment.yml +95 -0
  1117. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-dots_and_dollars.yml +127 -0
  1118. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-errorResponse.yml +69 -0
  1119. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-clientError.yml +84 -0
  1120. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-serverError.yml +100 -0
  1121. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-unacknowledged.yml +92 -0
  1122. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint.yml +99 -0
  1123. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-let.yml +96 -0
  1124. data/spec/spec_tests/data/crud_unified/insertMany-comment.yml +93 -0
  1125. data/spec/spec_tests/data/crud_unified/insertMany-dots_and_dollars.yml +128 -0
  1126. data/spec/spec_tests/data/crud_unified/insertOne-comment.yml +91 -0
  1127. data/spec/spec_tests/data/crud_unified/insertOne-dots_and_dollars.yml +238 -0
  1128. data/spec/spec_tests/data/crud_unified/insertOne-errorResponse.yml +46 -0
  1129. data/spec/spec_tests/data/crud_unified/replaceOne-comment.yml +105 -0
  1130. data/spec/spec_tests/data/crud_unified/replaceOne-dots_and_dollars.yml +180 -0
  1131. data/spec/spec_tests/data/crud_unified/replaceOne-hint-unacknowledged.yml +95 -0
  1132. data/spec/spec_tests/data/crud_unified/replaceOne-hint.yml +108 -0
  1133. data/spec/spec_tests/data/crud_unified/replaceOne-let.yml +98 -0
  1134. data/spec/spec_tests/data/crud_unified/replaceOne-validation.yml +37 -0
  1135. data/spec/spec_tests/data/crud_unified/updateMany-comment.yml +104 -0
  1136. data/spec/spec_tests/data/crud_unified/updateMany-dots_and_dollars.yml +138 -0
  1137. data/spec/spec_tests/data/crud_unified/updateMany-hint-clientError.yml +91 -0
  1138. data/spec/spec_tests/data/crud_unified/updateMany-hint-serverError.yml +115 -0
  1139. data/spec/spec_tests/data/crud_unified/updateMany-hint-unacknowledged.yml +96 -0
  1140. data/spec/spec_tests/data/crud_unified/updateMany-hint.yml +115 -0
  1141. data/spec/spec_tests/data/crud_unified/updateMany-let.yml +107 -0
  1142. data/spec/spec_tests/data/crud_unified/updateMany-validation.yml +39 -0
  1143. data/spec/spec_tests/data/crud_unified/updateOne-comment.yml +104 -0
  1144. data/spec/spec_tests/data/crud_unified/updateOne-dots_and_dollars.yml +138 -0
  1145. data/spec/spec_tests/data/crud_unified/updateOne-errorResponse.yml +47 -0
  1146. data/spec/spec_tests/data/crud_unified/updateOne-hint-clientError.yml +85 -0
  1147. data/spec/spec_tests/data/crud_unified/updateOne-hint-serverError.yml +109 -0
  1148. data/spec/spec_tests/data/crud_unified/updateOne-hint-unacknowledged.yml +95 -0
  1149. data/spec/spec_tests/data/crud_unified/updateOne-hint.yml +109 -0
  1150. data/spec/spec_tests/data/crud_unified/updateOne-let.yml +102 -0
  1151. data/spec/spec_tests/data/crud_unified/updateOne-validation.yml +37 -0
  1152. data/spec/spec_tests/data/crud_unified/updateWithPipelines.yml +8 -14
  1153. data/spec/spec_tests/data/gridfs_unified/delete.yml +198 -0
  1154. data/spec/spec_tests/data/gridfs_unified/download.yml +241 -0
  1155. data/spec/spec_tests/data/gridfs_unified/downloadByName.yml +159 -0
  1156. data/spec/spec_tests/data/gridfs_unified/upload-disableMD5.yml +92 -0
  1157. data/spec/spec_tests/data/gridfs_unified/upload.yml +288 -0
  1158. data/spec/spec_tests/data/index_management/createSearchIndex.yml +64 -0
  1159. data/spec/spec_tests/data/index_management/createSearchIndexes.yml +86 -0
  1160. data/spec/spec_tests/data/index_management/dropSearchIndex.yml +43 -0
  1161. data/spec/spec_tests/data/index_management/listSearchIndexes.yml +91 -0
  1162. data/spec/spec_tests/data/index_management/updateSearchIndex.yml +46 -0
  1163. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/DefaultNoMaxStaleness.yml +2 -2
  1164. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/LastUpdateTime.yml +3 -3
  1165. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Nearest.yml +3 -3
  1166. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Nearest2.yml +3 -3
  1167. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred.yml +2 -2
  1168. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred_tags.yml +2 -2
  1169. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Secondary.yml +4 -4
  1170. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred.yml +2 -2
  1171. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred_tags.yml +4 -4
  1172. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/ZeroMaxStaleness.yml +2 -2
  1173. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/DefaultNoMaxStaleness.yml +2 -2
  1174. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LastUpdateTime.yml +3 -3
  1175. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LongHeartbeat.yml +2 -2
  1176. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LongHeartbeat2.yml +2 -2
  1177. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/MaxStalenessTooSmall.yml +2 -2
  1178. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/MaxStalenessWithModePrimary.yml +2 -2
  1179. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest.yml +3 -3
  1180. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest2.yml +3 -3
  1181. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest_tags.yml +2 -2
  1182. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/PrimaryPreferred.yml +2 -2
  1183. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred.yml +2 -2
  1184. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags.yml +5 -5
  1185. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags2.yml +3 -3
  1186. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Secondary_tags.yml +5 -5
  1187. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Secondary_tags2.yml +3 -3
  1188. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/ZeroMaxStaleness.yml +2 -2
  1189. data/spec/spec_tests/data/max_staleness/Sharded/SmallMaxStaleness.yml +2 -2
  1190. data/spec/spec_tests/data/max_staleness/Single/SmallMaxStaleness.yml +1 -1
  1191. data/spec/spec_tests/data/max_staleness/Unknown/SmallMaxStaleness.yml +1 -1
  1192. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-serverErrors-pre4.9.yml → legacy/estimatedDocumentCount-serverErrors.yml} +0 -2
  1193. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-pre4.9.yml → legacy/estimatedDocumentCount.yml} +0 -2
  1194. data/spec/spec_tests/data/retryable_reads/unified/handshakeError.yml +1342 -0
  1195. data/spec/spec_tests/data/retryable_writes/{bulkWrite-serverErrors.yml → legacy/bulkWrite-serverErrors.yml} +1 -1
  1196. data/spec/spec_tests/data/retryable_writes/{deleteOne-serverErrors.yml → legacy/deleteOne-serverErrors.yml} +1 -1
  1197. data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-serverErrors.yml → legacy/findOneAndDelete-serverErrors.yml} +1 -1
  1198. data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-serverErrors.yml → legacy/findOneAndReplace-serverErrors.yml} +1 -1
  1199. data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-serverErrors.yml → legacy/findOneAndUpdate-serverErrors.yml} +1 -1
  1200. data/spec/spec_tests/data/retryable_writes/{insertMany-serverErrors.yml → legacy/insertMany-serverErrors.yml} +1 -1
  1201. data/spec/spec_tests/data/retryable_writes/{insertOne-serverErrors.yml → legacy/insertOne-serverErrors.yml} +5 -5
  1202. data/spec/spec_tests/data/retryable_writes/{replaceOne-serverErrors.yml → legacy/replaceOne-serverErrors.yml} +1 -1
  1203. data/spec/spec_tests/data/retryable_writes/{updateOne-serverErrors.yml → legacy/updateOne-serverErrors.yml} +1 -1
  1204. data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +93 -0
  1205. data/spec/spec_tests/data/retryable_writes/unified/handshakeError.yml +785 -0
  1206. data/spec/spec_tests/data/retryable_writes/unified/insertOne-noWritesPerformedError.yml +54 -0
  1207. data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +75 -0
  1208. data/spec/spec_tests/data/run_command_unified/runCommand.yml +319 -0
  1209. data/spec/spec_tests/data/sdam/errors/prefer-error-code.yml +2 -2
  1210. data/spec/spec_tests/data/sdam/rs/electionId_precedence_setVersion.yml +62 -0
  1211. data/spec/spec_tests/data/sdam/rs/null_election_id-pre-6.0.yml +175 -0
  1212. data/spec/spec_tests/data/sdam/rs/null_election_id.yml +20 -18
  1213. data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0-pre-6.0.yml +87 -0
  1214. data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0.yml +1 -1
  1215. data/spec/spec_tests/data/sdam/rs/set_version_can_rollback.yml +101 -0
  1216. data/spec/spec_tests/data/sdam/rs/setversion_equal_max_without_electionid.yml +78 -0
  1217. data/spec/spec_tests/data/sdam/rs/setversion_greaterthan_max_without_electionid.yml +79 -0
  1218. data/spec/spec_tests/data/sdam/rs/setversion_without_electionid-pre-6.0.yml +79 -0
  1219. data/spec/spec_tests/data/sdam/rs/setversion_without_electionid.yml +9 -10
  1220. data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid-pre-6.0.yml +117 -0
  1221. data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid.yml +23 -21
  1222. data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +1 -1
  1223. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_no_primary.yml +38 -39
  1224. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_primary.yml +38 -39
  1225. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_removal.yml +1 -1
  1226. data/spec/spec_tests/data/sdam_monitoring/required_replica_set.yml +1 -1
  1227. data/spec/spec_tests/data/sdam_monitoring/standalone.yml +1 -1
  1228. data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +2 -2
  1229. data/spec/spec_tests/data/sdam_unified/auth-error.yml +130 -0
  1230. data/spec/spec_tests/data/sdam_unified/auth-misc-command-error.yml +132 -0
  1231. data/spec/spec_tests/data/sdam_unified/auth-network-error.yml +132 -0
  1232. data/spec/spec_tests/data/sdam_unified/auth-network-timeout-error.yml +138 -0
  1233. data/spec/spec_tests/data/sdam_unified/auth-shutdown-error.yml +133 -0
  1234. data/spec/spec_tests/data/sdam_unified/cancel-server-check.yml +143 -0
  1235. data/spec/spec_tests/data/sdam_unified/connectTimeoutMS.yml +130 -0
  1236. data/spec/spec_tests/data/sdam_unified/find-network-error.yml +135 -0
  1237. data/spec/spec_tests/data/sdam_unified/find-network-timeout-error.yml +119 -0
  1238. data/spec/spec_tests/data/sdam_unified/find-shutdown-error.yml +163 -0
  1239. data/spec/spec_tests/data/sdam_unified/hello-command-error.yml +233 -0
  1240. data/spec/spec_tests/data/sdam_unified/hello-network-error.yml +228 -0
  1241. data/spec/spec_tests/data/sdam_unified/hello-timeout.yml +318 -0
  1242. data/spec/spec_tests/data/sdam_unified/insert-network-error.yml +137 -0
  1243. data/spec/spec_tests/data/sdam_unified/insert-shutdown-error.yml +162 -0
  1244. data/spec/spec_tests/data/sdam_unified/interruptInUse-pool-clear.yml +340 -0
  1245. data/spec/spec_tests/data/sdam_unified/minPoolSize-error.yml +125 -0
  1246. data/spec/spec_tests/data/sdam_unified/pool-cleared-error.yml +239 -0
  1247. data/spec/spec_tests/data/sdam_unified/rediscover-quickly-after-step-down.yml +144 -0
  1248. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-directConnection.yml +6 -5
  1249. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-no-results.yml +5 -0
  1250. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-replicaSet-errors.yml +2 -2
  1251. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-txt.yml +5 -4
  1252. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true-txt.yml +5 -0
  1253. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true.yml +5 -0
  1254. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero-txt.yml +11 -0
  1255. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero.yml +11 -0
  1256. data/spec/spec_tests/data/seed_list_discovery/replica-set/srv-service-name.yml +11 -0
  1257. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet-txt.yml +5 -0
  1258. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet.yml +5 -0
  1259. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-equal_to_srv_records.yml +16 -0
  1260. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-greater_than_srv_records.yml +15 -0
  1261. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-less_than_srv_records.yml +15 -0
  1262. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero-txt.yml +15 -0
  1263. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero.yml +15 -0
  1264. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-equal_to_srv_records.yml +13 -0
  1265. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-greater_than_srv_records.yml +12 -0
  1266. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-less_than_srv_records.yml +10 -0
  1267. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-zero.yml +11 -0
  1268. data/spec/spec_tests/data/server_selection/Unknown/read/ghost.yml +11 -0
  1269. data/spec/spec_tests/data/server_selection/Unknown/write/ghost.yml +11 -0
  1270. data/spec/spec_tests/data/sessions_unified/driver-sessions-dirty-session-errors.yml +351 -0
  1271. data/spec/spec_tests/data/sessions_unified/driver-sessions-server-support.yml +123 -0
  1272. data/spec/spec_tests/data/sessions_unified/implicit-sessions-default-causal-consistency.yml +119 -0
  1273. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-client-error.yml +75 -0
  1274. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-server-error.yml +102 -0
  1275. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-unsupported-ops.yml +258 -0
  1276. data/spec/spec_tests/data/sessions_unified/snapshot-sessions.yml +482 -0
  1277. data/spec/spec_tests/data/transactions/error-labels.yml +1 -1
  1278. data/spec/spec_tests/data/transactions/errors-client.yml +8 -9
  1279. data/spec/spec_tests/data/transactions/mongos-recovery-token.yml +1 -1
  1280. data/spec/spec_tests/data/transactions/retryable-abort-errorLabels.yml +0 -2
  1281. data/spec/spec_tests/data/transactions/retryable-abort.yml +7 -9
  1282. data/spec/spec_tests/data/transactions/retryable-commit-errorLabels.yml +0 -2
  1283. data/spec/spec_tests/data/transactions/retryable-commit.yml +7 -9
  1284. data/spec/spec_tests/data/transactions/retryable-writes.yml +0 -2
  1285. data/spec/spec_tests/data/transactions_unified/do-not-retry-read-in-transaction.yml +64 -0
  1286. data/spec/spec_tests/data/transactions_unified/mongos-unpin.yml +1 -1
  1287. data/spec/spec_tests/data/transactions_unified/retryable-abort-handshake.yml +118 -0
  1288. data/spec/spec_tests/data/transactions_unified/retryable-commit-handshake.yml +118 -0
  1289. data/spec/spec_tests/data/unified/valid-fail/entity-findCursor-malformed.yml +31 -0
  1290. data/spec/spec_tests/data/unified/valid-fail/entity-findCursor.yml +31 -0
  1291. data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError-malformed.yml +34 -0
  1292. data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError.yml +35 -0
  1293. data/spec/spec_tests/data/unified/valid-fail/operation-unsupported.yml +13 -0
  1294. data/spec/spec_tests/data/unified/valid-pass/assertNumberConnectionsCheckedOut.yml +17 -0
  1295. data/spec/spec_tests/data/unified/valid-pass/collectionData-createOptions.yml +37 -0
  1296. data/spec/spec_tests/data/unified/valid-pass/entity-client-cmap-events.yml +40 -0
  1297. data/spec/spec_tests/data/unified/valid-pass/entity-client-storeEventsAsEntities.yml +37 -0
  1298. data/spec/spec_tests/data/unified/valid-pass/expectedError-errorResponse.yml +39 -0
  1299. data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-eventType.yml +66 -0
  1300. data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-ignoreExtraEvents.yml +78 -0
  1301. data/spec/spec_tests/data/unified/valid-pass/ignoreResultAndError.yml +34 -0
  1302. data/spec/spec_tests/data/unified/valid-pass/observeSensitiveCommands.yml +255 -0
  1303. data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +22 -1
  1304. data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +3 -3
  1305. data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +19 -13
  1306. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-reads.yml +3 -3
  1307. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +9 -9
  1308. data/spec/spec_tests/data/unified/valid-pass/poc-sessions.yml +3 -4
  1309. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-convenient-api.yml +1 -1
  1310. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-mongos-pin-auto.yml +1 -1
  1311. data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +6 -5
  1312. data/spec/spec_tests/data/uri_options/srv-options.yml +96 -0
  1313. data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +6 -4
  1314. data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +7 -5
  1315. data/spec/spec_tests/data/versioned_api/transaction-handling.yml +4 -4
  1316. data/spec/spec_tests/gridfs_spec.rb +1 -1
  1317. data/spec/spec_tests/gridfs_unified_spec.rb +13 -0
  1318. data/spec/spec_tests/index_management_unified_spec.rb +13 -0
  1319. data/spec/spec_tests/load_balancers_spec.rb +1 -1
  1320. data/spec/spec_tests/max_staleness_spec.rb +1 -1
  1321. data/spec/spec_tests/read_write_concern_connection_string_spec.rb +1 -1
  1322. data/spec/spec_tests/read_write_concern_document_spec.rb +1 -1
  1323. data/spec/spec_tests/read_write_concern_operaton_spec.rb +1 -1
  1324. data/spec/spec_tests/retryable_reads_spec.rb +7 -2
  1325. data/spec/spec_tests/retryable_reads_unified_spec.rb +22 -0
  1326. data/spec/spec_tests/retryable_writes_spec.rb +5 -2
  1327. data/spec/spec_tests/retryable_writes_unified_spec.rb +21 -0
  1328. data/spec/spec_tests/run_command_unified_spec.rb +13 -0
  1329. data/spec/spec_tests/sdam_monitoring_spec.rb +1 -1
  1330. data/spec/spec_tests/sdam_spec.rb +5 -1
  1331. data/spec/spec_tests/sdam_unified_spec.rb +15 -0
  1332. data/spec/spec_tests/seed_list_discovery_spec.rb +11 -2
  1333. data/spec/spec_tests/server_selection_rtt_spec.rb +7 -7
  1334. data/spec/spec_tests/server_selection_spec.rb +1 -1
  1335. data/spec/spec_tests/sessions_unified_spec.rb +13 -0
  1336. data/spec/spec_tests/transactions_api_spec.rb +1 -1
  1337. data/spec/spec_tests/transactions_spec.rb +1 -1
  1338. data/spec/spec_tests/transactions_unified_spec.rb +3 -2
  1339. data/spec/spec_tests/unified_spec.rb +2 -2
  1340. data/spec/spec_tests/uri_options_spec.rb +1 -1
  1341. data/spec/spec_tests/versioned_api_spec.rb +1 -1
  1342. data/spec/stress/cleanup_spec.rb +1 -1
  1343. data/spec/stress/connection_pool_stress_spec.rb +1 -62
  1344. data/spec/stress/connection_pool_timing_spec.rb +12 -36
  1345. data/spec/stress/fork_reconnect_stress_spec.rb +10 -10
  1346. data/spec/stress/push_monitor_close_spec.rb +1 -1
  1347. data/spec/support/authorization.rb +2 -2
  1348. data/spec/support/aws_utils/base.rb +1 -1
  1349. data/spec/support/aws_utils/inspector.rb +1 -1
  1350. data/spec/support/aws_utils/orchestrator.rb +20 -8
  1351. data/spec/support/aws_utils/provisioner.rb +1 -1
  1352. data/spec/support/aws_utils.rb +4 -3
  1353. data/spec/support/background_thread_registry.rb +4 -14
  1354. data/spec/support/certificates/atlas-ocsp-ca.crt +89 -79
  1355. data/spec/support/certificates/atlas-ocsp.crt +117 -122
  1356. data/spec/support/certificates/retrieve-atlas-cert +40 -0
  1357. data/spec/support/client_registry.rb +6 -2
  1358. data/spec/support/client_registry_macros.rb +1 -1
  1359. data/spec/support/cluster_tools.rb +17 -12
  1360. data/spec/support/common_shortcuts.rb +53 -6
  1361. data/spec/support/constraints.rb +21 -1
  1362. data/spec/support/crypt/corpus/corpus-encrypted.json +9515 -0
  1363. data/spec/support/crypt/corpus/corpus-key-aws.json +32 -32
  1364. data/spec/support/crypt/corpus/corpus-key-azure.json +33 -0
  1365. data/spec/support/crypt/corpus/corpus-key-gcp.json +35 -0
  1366. data/spec/support/crypt/corpus/corpus-key-kmip.json +32 -0
  1367. data/spec/support/crypt/corpus/corpus-key-local.json +30 -30
  1368. data/spec/support/crypt/corpus/corpus-schema.json +4399 -121
  1369. data/spec/support/crypt/corpus/corpus.json +4999 -37
  1370. data/spec/support/crypt/data_keys/key_document_azure.json +33 -0
  1371. data/spec/support/crypt/data_keys/key_document_gcp.json +37 -0
  1372. data/spec/support/crypt/data_keys/key_document_kmip.json +32 -0
  1373. data/spec/support/crypt/encrypted_fields/encryptedFields.json +32 -0
  1374. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Date.json +30 -0
  1375. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalNoPrecision.json +21 -0
  1376. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalPrecision.json +29 -0
  1377. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoubleNoPrecision.json +21 -0
  1378. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoublePrecision.json +30 -0
  1379. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Int.json +27 -0
  1380. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Long.json +27 -0
  1381. data/spec/support/crypt/keys/key1-document.json +30 -0
  1382. data/spec/support/crypt/schema_maps/schema_map_azure.json +17 -0
  1383. data/spec/support/crypt/schema_maps/schema_map_azure_key_alt_names.json +12 -0
  1384. data/spec/support/crypt/schema_maps/schema_map_gcp.json +17 -0
  1385. data/spec/support/crypt/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
  1386. data/spec/support/crypt/schema_maps/schema_map_kmip.json +17 -0
  1387. data/spec/support/crypt/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
  1388. data/spec/support/crypt.rb +269 -14
  1389. data/spec/support/dns.rb +1 -1
  1390. data/spec/support/json_ext_formatter.rb +1 -1
  1391. data/spec/support/keyword_struct.rb +1 -1
  1392. data/spec/support/local_resource_registry.rb +1 -1
  1393. data/spec/support/macros.rb +29 -0
  1394. data/spec/support/matchers.rb +5 -5
  1395. data/spec/support/mongos_macros.rb +24 -0
  1396. data/spec/support/monitoring_ext.rb +1 -1
  1397. data/spec/support/ocsp +1 -1
  1398. data/spec/support/primary_socket.rb +1 -1
  1399. data/spec/support/recording_logger.rb +27 -0
  1400. data/spec/support/sdam_formatter_integration.rb +1 -1
  1401. data/spec/support/shared/app_metadata.rb +15 -3
  1402. data/spec/support/shared/auth_context.rb +1 -0
  1403. data/spec/support/shared/protocol.rb +1 -1
  1404. data/spec/support/shared/scram_conversation.rb +3 -2
  1405. data/spec/support/shared/server_selector.rb +1 -1
  1406. data/spec/support/shared/session.rb +16 -10
  1407. data/spec/support/spec_config.rb +133 -2
  1408. data/spec/support/spec_setup.rb +3 -3
  1409. data/spec/support/using_hash.rb +11 -2
  1410. data/spec/support/utils.rb +280 -229
  1411. metadata +1809 -1274
  1412. checksums.yaml.gz.sig +0 -0
  1413. data/lib/mongo/operation/aggregate/command.rb +0 -55
  1414. data/lib/mongo/operation/collections_info/command.rb +0 -48
  1415. data/lib/mongo/operation/count/command.rb +0 -47
  1416. data/lib/mongo/operation/create/command.rb +0 -47
  1417. data/lib/mongo/operation/create_index/command.rb +0 -61
  1418. data/lib/mongo/operation/delete/command.rb +0 -52
  1419. data/lib/mongo/operation/delete/legacy.rb +0 -64
  1420. data/lib/mongo/operation/distinct/command.rb +0 -47
  1421. data/lib/mongo/operation/explain/command.rb +0 -58
  1422. data/lib/mongo/operation/explain/legacy.rb +0 -52
  1423. data/lib/mongo/operation/find/builder/legacy.rb +0 -123
  1424. data/lib/mongo/operation/find/command.rb +0 -51
  1425. data/lib/mongo/operation/find/legacy/result.rb +0 -46
  1426. data/lib/mongo/operation/find/legacy.rb +0 -52
  1427. data/lib/mongo/operation/get_more/command.rb +0 -43
  1428. data/lib/mongo/operation/indexes/command.rb +0 -42
  1429. data/lib/mongo/operation/indexes/legacy.rb +0 -48
  1430. data/lib/mongo/operation/insert/command.rb +0 -59
  1431. data/lib/mongo/operation/insert/legacy.rb +0 -68
  1432. data/lib/mongo/operation/kill_cursors/command.rb +0 -48
  1433. data/lib/mongo/operation/list_collections/command.rb +0 -46
  1434. data/lib/mongo/operation/map_reduce/command.rb +0 -51
  1435. data/lib/mongo/operation/parallel_scan/command.rb +0 -57
  1436. data/lib/mongo/operation/remove_user/command.rb +0 -46
  1437. data/lib/mongo/operation/shared/op_msg_or_find_command.rb +0 -44
  1438. data/lib/mongo/operation/update/command.rb +0 -53
  1439. data/lib/mongo/operation/update/legacy/result.rb +0 -112
  1440. data/lib/mongo/operation/update/legacy.rb +0 -76
  1441. data/lib/mongo/operation/users_info/command.rb +0 -46
  1442. data/lib/mongo/operation/write_command/command.rb +0 -51
  1443. data/lib/mongo/protocol/delete.rb +0 -172
  1444. data/lib/mongo/protocol/insert.rb +0 -181
  1445. data/lib/mongo/protocol/update.rb +0 -214
  1446. data/spec/mongo/dbref_spec.rb +0 -152
  1447. data/spec/mongo/operation/delete/command_spec.rb +0 -115
  1448. data/spec/mongo/operation/find/legacy_spec.rb +0 -131
  1449. data/spec/mongo/operation/get_more_spec.rb +0 -63
  1450. data/spec/mongo/operation/insert/command_spec.rb +0 -118
  1451. data/spec/mongo/operation/kill_cursors_spec.rb +0 -47
  1452. data/spec/mongo/operation/update/command_spec.rb +0 -122
  1453. data/spec/mongo/protocol/delete_spec.rb +0 -185
  1454. data/spec/mongo/protocol/insert_spec.rb +0 -179
  1455. data/spec/mongo/protocol/update_spec.rb +0 -204
  1456. data/spec/mongo/server/round_trip_time_averager_spec.rb +0 -48
  1457. data/spec/shared/LICENSE +0 -20
  1458. data/spec/shared/bin/get-mongodb-download-url +0 -17
  1459. data/spec/shared/bin/s3-copy +0 -45
  1460. data/spec/shared/bin/s3-upload +0 -69
  1461. data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
  1462. data/spec/shared/lib/mrss/cluster_config.rb +0 -231
  1463. data/spec/shared/lib/mrss/constraints.rb +0 -385
  1464. data/spec/shared/lib/mrss/docker_runner.rb +0 -271
  1465. data/spec/shared/lib/mrss/event_subscriber.rb +0 -200
  1466. data/spec/shared/lib/mrss/lite_constraints.rb +0 -191
  1467. data/spec/shared/lib/mrss/server_version_registry.rb +0 -120
  1468. data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
  1469. data/spec/shared/lib/mrss/utils.rb +0 -15
  1470. data/spec/shared/share/Dockerfile.erb +0 -323
  1471. data/spec/shared/share/haproxy-1.conf +0 -16
  1472. data/spec/shared/share/haproxy-2.conf +0 -17
  1473. data/spec/shared/shlib/distro.sh +0 -73
  1474. data/spec/shared/shlib/server.sh +0 -367
  1475. data/spec/shared/shlib/set_env.sh +0 -131
  1476. data/spec/spec_tests/change_streams_spec.rb +0 -93
  1477. data/spec/spec_tests/command_monitoring_spec.rb +0 -71
  1478. data/spec/spec_tests/data/change_streams/change-streams-errors.yml +0 -101
  1479. data/spec/spec_tests/data/change_streams/change-streams-resume-allowlist.yml +0 -1173
  1480. data/spec/spec_tests/data/change_streams/change-streams-resume-errorLabels.yml +0 -1105
  1481. data/spec/spec_tests/data/change_streams/change-streams.yml +0 -535
  1482. data/spec/spec_tests/data/command_monitoring/bulkWrite.yml +0 -49
  1483. data/spec/spec_tests/data/command_monitoring/command.yml +0 -61
  1484. data/spec/spec_tests/data/command_monitoring/deleteMany.yml +0 -55
  1485. data/spec/spec_tests/data/command_monitoring/deleteOne.yml +0 -55
  1486. data/spec/spec_tests/data/command_monitoring/find.yml +0 -266
  1487. data/spec/spec_tests/data/command_monitoring/insertMany.yml +0 -75
  1488. data/spec/spec_tests/data/command_monitoring/insertOne.yml +0 -51
  1489. data/spec/spec_tests/data/command_monitoring/unacknowledgedBulkWrite.yml +0 -34
  1490. data/spec/spec_tests/data/command_monitoring/updateMany.yml +0 -65
  1491. data/spec/spec_tests/data/command_monitoring/updateOne.yml +0 -90
  1492. data/spec/spec_tests/data/crud_v2/aggregate-merge.yml +0 -103
  1493. data/spec/spec_tests/data/crud_v2/aggregate-out-readConcern.yml +0 -111
  1494. data/spec/spec_tests/data/crud_v2/bulkWrite-arrayFilters.yml +0 -103
  1495. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-clientError.yml +0 -63
  1496. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-serverError.yml +0 -92
  1497. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint.yml +0 -103
  1498. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-clientError.yml +0 -90
  1499. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-serverError.yml +0 -147
  1500. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint.yml +0 -164
  1501. data/spec/spec_tests/data/crud_v2/db-aggregate.yml +0 -39
  1502. data/spec/spec_tests/data/crud_v2/deleteMany-hint-clientError.yml +0 -43
  1503. data/spec/spec_tests/data/crud_v2/deleteMany-hint-serverError.yml +0 -62
  1504. data/spec/spec_tests/data/crud_v2/deleteMany-hint.yml +0 -58
  1505. data/spec/spec_tests/data/crud_v2/deleteOne-hint-clientError.yml +0 -41
  1506. data/spec/spec_tests/data/crud_v2/deleteOne-hint-serverError.yml +0 -60
  1507. data/spec/spec_tests/data/crud_v2/deleteOne-hint.yml +0 -57
  1508. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-clientError.yml +0 -28
  1509. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-serverError.yml +0 -44
  1510. data/spec/spec_tests/data/crud_v2/find-allowdiskuse.yml +0 -50
  1511. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-clientError.yml +0 -45
  1512. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-serverError.yml +0 -60
  1513. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint.yml +0 -56
  1514. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-clientError.yml +0 -40
  1515. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-serverError.yml +0 -59
  1516. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint.yml +0 -55
  1517. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-clientError.yml +0 -40
  1518. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-serverError.yml +0 -58
  1519. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint.yml +0 -55
  1520. data/spec/spec_tests/data/crud_v2/replaceOne-hint.yml +0 -61
  1521. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-delete-hint-clientError.yml +0 -60
  1522. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-update-hint-clientError.yml +0 -88
  1523. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteMany-hint-clientError.yml +0 -40
  1524. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteOne-hint-clientError.yml +0 -38
  1525. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndDelete-hint-clientError.yml +0 -42
  1526. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndReplace-hint-clientError.yml +0 -40
  1527. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndUpdate-hint-clientError.yml +0 -40
  1528. data/spec/spec_tests/data/crud_v2/unacknowledged-replaceOne-hint-clientError.yml +0 -40
  1529. data/spec/spec_tests/data/crud_v2/unacknowledged-updateMany-hint-clientError.yml +0 -43
  1530. data/spec/spec_tests/data/crud_v2/unacknowledged-updateOne-hint-clientError.yml +0 -40
  1531. data/spec/spec_tests/data/crud_v2/updateMany-hint-clientError.yml +0 -45
  1532. data/spec/spec_tests/data/crud_v2/updateMany-hint-serverError.yml +0 -66
  1533. data/spec/spec_tests/data/crud_v2/updateMany-hint.yml +0 -65
  1534. data/spec/spec_tests/data/crud_v2/updateOne-hint-clientError.yml +0 -43
  1535. data/spec/spec_tests/data/crud_v2/updateOne-hint-serverError.yml +0 -62
  1536. data/spec/spec_tests/data/crud_v2/updateOne-hint.yml +0 -61
  1537. data/spec/spec_tests/data/crud_v2/updateWithPipelines.yml +0 -157
  1538. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-4.9.yml +0 -60
  1539. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors-4.9.yml +0 -146
  1540. data/spec/spec_tests/data/sdam_integration/cancel-server-check.yml +0 -96
  1541. data/spec/spec_tests/data/sdam_integration/connectTimeoutMS.yml +0 -88
  1542. data/spec/spec_tests/data/sdam_integration/find-network-error.yml +0 -85
  1543. data/spec/spec_tests/data/sdam_integration/find-shutdown-error.yml +0 -118
  1544. data/spec/spec_tests/data/sdam_integration/hello-command-error.yml +0 -160
  1545. data/spec/spec_tests/data/sdam_integration/hello-network-error.yml +0 -158
  1546. data/spec/spec_tests/data/sdam_integration/hello-timeout.yml +0 -225
  1547. data/spec/spec_tests/data/sdam_integration/insert-network-error.yml +0 -88
  1548. data/spec/spec_tests/data/sdam_integration/insert-shutdown-error.yml +0 -117
  1549. data/spec/spec_tests/data/sdam_integration/rediscover-quickly-after-step-down.yml +0 -98
  1550. data/spec/spec_tests/sdam_integration_spec.rb +0 -16
  1551. data/spec/support/crypt/corpus/corpus_encrypted.json +0 -4152
  1552. data/spec/support/session_registry.rb +0 -55
  1553. data.tar.gz.sig +0 -0
  1554. metadata.gz.sig +0 -0
  1555. /data/spec/spec_tests/data/retryable_reads/{aggregate-merge.yml → legacy/aggregate-merge.yml} +0 -0
  1556. /data/spec/spec_tests/data/retryable_reads/{aggregate-serverErrors.yml → legacy/aggregate-serverErrors.yml} +0 -0
  1557. /data/spec/spec_tests/data/retryable_reads/{aggregate.yml → legacy/aggregate.yml} +0 -0
  1558. /data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch-serverErrors.yml → legacy/changeStreams-client.watch-serverErrors.yml} +0 -0
  1559. /data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch.yml → legacy/changeStreams-client.watch.yml} +0 -0
  1560. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch-serverErrors.yml → legacy/changeStreams-db.coll.watch-serverErrors.yml} +0 -0
  1561. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch.yml → legacy/changeStreams-db.coll.watch.yml} +0 -0
  1562. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch-serverErrors.yml → legacy/changeStreams-db.watch-serverErrors.yml} +0 -0
  1563. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch.yml → legacy/changeStreams-db.watch.yml} +0 -0
  1564. /data/spec/spec_tests/data/retryable_reads/{count-serverErrors.yml → legacy/count-serverErrors.yml} +0 -0
  1565. /data/spec/spec_tests/data/retryable_reads/{count.yml → legacy/count.yml} +0 -0
  1566. /data/spec/spec_tests/data/retryable_reads/{countDocuments-serverErrors.yml → legacy/countDocuments-serverErrors.yml} +0 -0
  1567. /data/spec/spec_tests/data/retryable_reads/{countDocuments.yml → legacy/countDocuments.yml} +0 -0
  1568. /data/spec/spec_tests/data/retryable_reads/{distinct-serverErrors.yml → legacy/distinct-serverErrors.yml} +0 -0
  1569. /data/spec/spec_tests/data/retryable_reads/{distinct.yml → legacy/distinct.yml} +0 -0
  1570. /data/spec/spec_tests/data/retryable_reads/{find-serverErrors.yml → legacy/find-serverErrors.yml} +0 -0
  1571. /data/spec/spec_tests/data/retryable_reads/{find.yml → legacy/find.yml} +0 -0
  1572. /data/spec/spec_tests/data/retryable_reads/{findOne-serverErrors.yml → legacy/findOne-serverErrors.yml} +0 -0
  1573. /data/spec/spec_tests/data/retryable_reads/{findOne.yml → legacy/findOne.yml} +0 -0
  1574. /data/spec/spec_tests/data/retryable_reads/{gridfs-download-serverErrors.yml → legacy/gridfs-download-serverErrors.yml} +0 -0
  1575. /data/spec/spec_tests/data/retryable_reads/{gridfs-download.yml → legacy/gridfs-download.yml} +0 -0
  1576. /data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName-serverErrors.yml → legacy/gridfs-downloadByName-serverErrors.yml} +0 -0
  1577. /data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName.yml → legacy/gridfs-downloadByName.yml} +0 -0
  1578. /data/spec/spec_tests/data/retryable_reads/{listCollectionNames-serverErrors.yml → legacy/listCollectionNames-serverErrors.yml} +0 -0
  1579. /data/spec/spec_tests/data/retryable_reads/{listCollectionNames.yml → legacy/listCollectionNames.yml} +0 -0
  1580. /data/spec/spec_tests/data/retryable_reads/{listCollectionObjects-serverErrors.yml → legacy/listCollectionObjects-serverErrors.yml} +0 -0
  1581. /data/spec/spec_tests/data/retryable_reads/{listCollectionObjects.yml → legacy/listCollectionObjects.yml} +0 -0
  1582. /data/spec/spec_tests/data/retryable_reads/{listCollections-serverErrors.yml → legacy/listCollections-serverErrors.yml} +0 -0
  1583. /data/spec/spec_tests/data/retryable_reads/{listCollections.yml → legacy/listCollections.yml} +0 -0
  1584. /data/spec/spec_tests/data/retryable_reads/{listDatabaseNames-serverErrors.yml → legacy/listDatabaseNames-serverErrors.yml} +0 -0
  1585. /data/spec/spec_tests/data/retryable_reads/{listDatabaseNames.yml → legacy/listDatabaseNames.yml} +0 -0
  1586. /data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects-serverErrors.yml → legacy/listDatabaseObjects-serverErrors.yml} +0 -0
  1587. /data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects.yml → legacy/listDatabaseObjects.yml} +0 -0
  1588. /data/spec/spec_tests/data/retryable_reads/{listDatabases-serverErrors.yml → legacy/listDatabases-serverErrors.yml} +0 -0
  1589. /data/spec/spec_tests/data/retryable_reads/{listDatabases.yml → legacy/listDatabases.yml} +0 -0
  1590. /data/spec/spec_tests/data/retryable_reads/{listIndexNames-serverErrors.yml → legacy/listIndexNames-serverErrors.yml} +0 -0
  1591. /data/spec/spec_tests/data/retryable_reads/{listIndexNames.yml → legacy/listIndexNames.yml} +0 -0
  1592. /data/spec/spec_tests/data/retryable_reads/{listIndexes-serverErrors.yml → legacy/listIndexes-serverErrors.yml} +0 -0
  1593. /data/spec/spec_tests/data/retryable_reads/{listIndexes.yml → legacy/listIndexes.yml} +0 -0
  1594. /data/spec/spec_tests/data/retryable_reads/{mapReduce.yml → legacy/mapReduce.yml} +0 -0
  1595. /data/spec/spec_tests/data/retryable_writes/{bulkWrite-errorLabels.yml → legacy/bulkWrite-errorLabels.yml} +0 -0
  1596. /data/spec/spec_tests/data/retryable_writes/{bulkWrite.yml → legacy/bulkWrite.yml} +0 -0
  1597. /data/spec/spec_tests/data/retryable_writes/{deleteMany.yml → legacy/deleteMany.yml} +0 -0
  1598. /data/spec/spec_tests/data/retryable_writes/{deleteOne-errorLabels.yml → legacy/deleteOne-errorLabels.yml} +0 -0
  1599. /data/spec/spec_tests/data/retryable_writes/{deleteOne.yml → legacy/deleteOne.yml} +0 -0
  1600. /data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-errorLabels.yml → legacy/findOneAndDelete-errorLabels.yml} +0 -0
  1601. /data/spec/spec_tests/data/retryable_writes/{findOneAndDelete.yml → legacy/findOneAndDelete.yml} +0 -0
  1602. /data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-errorLabels.yml → legacy/findOneAndReplace-errorLabels.yml} +0 -0
  1603. /data/spec/spec_tests/data/retryable_writes/{findOneAndReplace.yml → legacy/findOneAndReplace.yml} +0 -0
  1604. /data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-errorLabels.yml → legacy/findOneAndUpdate-errorLabels.yml} +0 -0
  1605. /data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate.yml → legacy/findOneAndUpdate.yml} +0 -0
  1606. /data/spec/spec_tests/data/retryable_writes/{insertMany-errorLabels.yml → legacy/insertMany-errorLabels.yml} +0 -0
  1607. /data/spec/spec_tests/data/retryable_writes/{insertMany.yml → legacy/insertMany.yml} +0 -0
  1608. /data/spec/spec_tests/data/retryable_writes/{insertOne-errorLabels.yml → legacy/insertOne-errorLabels.yml} +0 -0
  1609. /data/spec/spec_tests/data/retryable_writes/{insertOne.yml → legacy/insertOne.yml} +0 -0
  1610. /data/spec/spec_tests/data/retryable_writes/{replaceOne-errorLabels.yml → legacy/replaceOne-errorLabels.yml} +0 -0
  1611. /data/spec/spec_tests/data/retryable_writes/{replaceOne.yml → legacy/replaceOne.yml} +0 -0
  1612. /data/spec/spec_tests/data/retryable_writes/{updateMany.yml → legacy/updateMany.yml} +0 -0
  1613. /data/spec/spec_tests/data/retryable_writes/{updateOne-errorLabels.yml → legacy/updateOne-errorLabels.yml} +0 -0
  1614. /data/spec/spec_tests/data/retryable_writes/{updateOne.yml → legacy/updateOne.yml} +0 -0
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2014-2020 MongoDB Inc.
5
5
  #
@@ -38,7 +38,8 @@ module Mongo
38
38
  # @param [ Hash ] opts The options.
39
39
  #
40
40
  # @option opts [ Integer ] :max_time_ms The maximum amount of time to allow the command
41
- # to run in milliseconds.
41
+ # to run in milliseconds. This option is deprecated, use
42
+ # :timeout_ms instead.
42
43
  # @option opts [ Hash ] :projection The fields to include or exclude in the returned doc.
43
44
  # @option opts [ Hash ] :sort The key and direction pairs by which the result set
44
45
  # will be sorted.
@@ -46,8 +47,16 @@ module Mongo
46
47
  # @option opts [ Session ] :session The session to use.
47
48
  # @option opts [ Hash | String ] :hint The index to use for this operation.
48
49
  # May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
50
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
51
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
52
+ # The default value is unset which means the value is inherited from
53
+ # the collection or the database or the client.
49
54
  # @option opts [ Hash ] :write_concern The write concern options.
50
55
  # Can be :w => Integer, :fsync => Boolean, :j => Boolean.
56
+ # @option opts [ Hash ] :let Mapping of variables to use in the command.
57
+ # See the server documentation for details.
58
+ # @option opts [ Object ] :comment A user-provided
59
+ # comment to attach to this command.
51
60
  #
52
61
  # @return [ BSON::Document, nil ] The document, if found.
53
62
  #
@@ -59,9 +68,6 @@ module Mongo
59
68
  else
60
69
  write_concern_with_session(session)
61
70
  end
62
- if opts[:hint] && write_concern && !write_concern.acknowledged?
63
- raise Error::UnsupportedOption.hint_error(unacknowledged_write: true)
64
- end
65
71
 
66
72
  QueryCache.clear_namespace(collection.namespace)
67
73
 
@@ -75,18 +81,30 @@ module Mongo
75
81
  bypassDocumentValidation: opts[:bypass_document_validation],
76
82
  hint: opts[:hint],
77
83
  collation: opts[:collation] || opts['collation'] || collation,
84
+ let: opts[:let],
85
+ comment: opts[:comment],
78
86
  }.compact
79
87
 
80
- write_with_retry(session, write_concern) do |server, txn_num|
88
+ context = Operation::Context.new(
89
+ client: client,
90
+ session: session,
91
+ operation_timeouts: operation_timeouts(opts)
92
+ )
93
+ write_with_retry(write_concern, context: context) do |connection, txn_num, context|
94
+ gte_4_4 = connection.server.description.server_version_gte?('4.4')
95
+ if !gte_4_4 && opts[:hint] && write_concern && !write_concern.acknowledged?
96
+ raise Error::UnsupportedOption.hint_error(unacknowledged_write: true)
97
+ end
98
+
81
99
  Operation::WriteCommand.new(
82
100
  selector: cmd,
83
101
  db_name: database.name,
84
102
  write_concern: write_concern,
85
103
  session: session,
86
104
  txn_num: txn_num,
87
- ).execute(server, context: Operation::Context.new(client: client, session: session))
105
+ ).execute_with_connection(connection, context: context)
88
106
  end
89
- end.first['value']
107
+ end.first&.fetch('value', nil)
90
108
  end
91
109
 
92
110
  # Finds a single document and replaces it.
@@ -107,8 +125,14 @@ module Mongo
107
125
  # @option opts [ Hash ] :collation The collation to use.
108
126
  # @option opts [ Hash | String ] :hint The index to use for this operation.
109
127
  # May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
128
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
129
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
130
+ # The default value is unset which means the value is inherited from
131
+ # the collection or the database or the client.
110
132
  # @option opts [ Hash ] :write_concern The write concern options.
111
133
  # Can be :w => Integer, :fsync => Boolean, :j => Boolean.
134
+ # @option opts [ Hash ] :let Mapping of variables to use in the command.
135
+ # See the server documentation for details.
112
136
  #
113
137
  # @return [ BSON::Document ] The document.
114
138
  #
@@ -125,8 +149,9 @@ module Mongo
125
149
  # @param [ BSON::Document ] document The updates.
126
150
  # @param [ Hash ] opts The options.
127
151
  #
128
- # @option options [ Integer ] :max_time_ms The maximum amount of time to allow the command
129
- # to run in milliseconds.
152
+ # @option opts [ Integer ] :max_time_ms The maximum amount of time to allow the command
153
+ # to run in milliseconds. This option is deprecated, use
154
+ # :timeout_ms instead.
130
155
  # @option opts [ Hash ] :projection The fields to include or exclude in the returned doc.
131
156
  # @option opts [ Hash ] :sort The key and direction pairs by which the result set
132
157
  # will be sorted.
@@ -138,12 +163,20 @@ module Mongo
138
163
  # @option opts [ Array ] :array_filters A set of filters specifying to which array elements
139
164
  # an update should apply.
140
165
  # @option opts [ Session ] :session The session to use.
166
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
167
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
168
+ # The default value is unset which means the value is inherited from
169
+ # the collection or the database or the client.
141
170
  # @option opts [ Hash | String ] :hint The index to use for this operation.
142
171
  # May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
143
172
  # @option opts [ Hash ] :write_concern The write concern options.
144
173
  # Can be :w => Integer, :fsync => Boolean, :j => Boolean.
174
+ # @option opts [ Hash ] :let Mapping of variables to use in the command.
175
+ # See the server documentation for details.
176
+ # @option opts [ Object ] :comment A user-provided
177
+ # comment to attach to this command.
145
178
  #
146
- # @return [ BSON::Document ] The document.
179
+ # @return [ BSON::Document | nil ] The document or nil if none is found.
147
180
  #
148
181
  # @since 2.0.0
149
182
  def find_one_and_update(document, opts = {})
@@ -153,9 +186,6 @@ module Mongo
153
186
  else
154
187
  write_concern_with_session(session)
155
188
  end
156
- if opts[:hint] && write_concern && !write_concern.acknowledged?
157
- raise Error::UnsupportedOption.hint_error(unacknowledged_write: true)
158
- end
159
189
 
160
190
  QueryCache.clear_namespace(collection.namespace)
161
191
 
@@ -172,18 +202,30 @@ module Mongo
172
202
  bypassDocumentValidation: opts[:bypass_document_validation],
173
203
  hint: opts[:hint],
174
204
  collation: opts[:collation] || opts['collation'] || collation,
205
+ let: opts[:let],
206
+ comment: opts[:comment]
175
207
  }.compact
176
208
 
177
- write_with_retry(session, write_concern) do |server, txn_num|
209
+ context = Operation::Context.new(
210
+ client: client,
211
+ session: session,
212
+ operation_timeouts: operation_timeouts(opts)
213
+ )
214
+ write_with_retry(write_concern, context: context) do |connection, txn_num, context|
215
+ gte_4_4 = connection.server.description.server_version_gte?('4.4')
216
+ if !gte_4_4 && opts[:hint] && write_concern && !write_concern.acknowledged?
217
+ raise Error::UnsupportedOption.hint_error(unacknowledged_write: true)
218
+ end
219
+
178
220
  Operation::WriteCommand.new(
179
221
  selector: cmd,
180
222
  db_name: database.name,
181
223
  write_concern: write_concern,
182
224
  session: session,
183
225
  txn_num: txn_num,
184
- ).execute(server, context: Operation::Context.new(client: client, session: session))
226
+ ).execute_with_connection(connection, context: context)
185
227
  end
186
- end.first['value']
228
+ end.first&.fetch('value', nil)
187
229
  value unless value.nil? || value.empty?
188
230
  end
189
231
 
@@ -196,10 +238,18 @@ module Mongo
196
238
  #
197
239
  # @option opts [ Hash ] :collation The collation to use.
198
240
  # @option opts [ Session ] :session The session to use.
241
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
242
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
243
+ # The default value is unset which means the value is inherited from
244
+ # the collection or the database or the client.
199
245
  # @option opts [ Hash | String ] :hint The index to use for this operation.
200
246
  # May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
201
247
  # @option opts [ Hash ] :write_concern The write concern options.
202
248
  # Can be :w => Integer, :fsync => Boolean, :j => Boolean.
249
+ # @option opts [ Hash ] :let Mapping of variables to use in the command.
250
+ # See the server documentation for details.
251
+ # @option opts [ Object ] :comment A user-provided
252
+ # comment to attach to this command.
203
253
  #
204
254
  # @return [ Result ] The response from the database.
205
255
  #
@@ -211,9 +261,6 @@ module Mongo
211
261
  else
212
262
  write_concern_with_session(session)
213
263
  end
214
- if opts[:hint] && write_concern && !write_concern.acknowledged?
215
- raise Error::UnsupportedOption.hint_error(unacknowledged_write: true)
216
- end
217
264
 
218
265
  QueryCache.clear_namespace(collection.namespace)
219
266
 
@@ -223,8 +270,17 @@ module Mongo
223
270
  hint: opts[:hint],
224
271
  collation: opts[:collation] || opts['collation'] || collation,
225
272
  }.compact
273
+ context = Operation::Context.new(
274
+ client: client,
275
+ session: session,
276
+ operation_timeouts: operation_timeouts(opts)
277
+ )
278
+ nro_write_with_retry(write_concern, context: context) do |connection, txn_num, context|
279
+ gte_4_4 = connection.server.description.server_version_gte?('4.4')
280
+ if !gte_4_4 && opts[:hint] && write_concern && !write_concern.acknowledged?
281
+ raise Error::UnsupportedOption.hint_error(unacknowledged_write: true)
282
+ end
226
283
 
227
- nro_write_with_retry(session, write_concern) do |server|
228
284
  Operation::Delete.new(
229
285
  deletes: [ delete_doc ],
230
286
  db_name: collection.database.name,
@@ -232,7 +288,9 @@ module Mongo
232
288
  write_concern: write_concern,
233
289
  bypass_document_validation: !!opts[:bypass_document_validation],
234
290
  session: session,
235
- ).execute(server, context: Operation::Context.new(client: client, session: session))
291
+ let: opts[:let],
292
+ comment: opts[:comment],
293
+ ).execute_with_connection(connection, context: context)
236
294
  end
237
295
  end
238
296
  end
@@ -245,9 +303,17 @@ module Mongo
245
303
  # @param [ Hash ] opts The options.
246
304
  #
247
305
  # @option opts [ Hash ] :collation The collation to use.
248
- # @option opts [ Session ] :session The session to use.
306
+ # @option opts [ Object ] :comment A user-provided
307
+ # comment to attach to this command.
249
308
  # @option opts [ Hash | String ] :hint The index to use for this operation.
250
309
  # May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
310
+ # @option opts [ Hash ] :let Mapping of variables to use in the command.
311
+ # See the server documentation for details.
312
+ # @option opts [ Session ] :session The session to use.
313
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
314
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
315
+ # The default value is unset which means the value is inherited from
316
+ # the collection or the database or the client.
251
317
  # @option opts [ Hash ] :write_concern The write concern options.
252
318
  # Can be :w => Integer, :fsync => Boolean, :j => Boolean.
253
319
  #
@@ -261,9 +327,6 @@ module Mongo
261
327
  else
262
328
  write_concern_with_session(session)
263
329
  end
264
- if opts[:hint] && write_concern && !write_concern.acknowledged?
265
- raise Error::UnsupportedOption.hint_error(unacknowledged_write: true)
266
- end
267
330
 
268
331
  QueryCache.clear_namespace(collection.namespace)
269
332
 
@@ -274,7 +337,17 @@ module Mongo
274
337
  collation: opts[:collation] || opts['collation'] || collation,
275
338
  }.compact
276
339
 
277
- write_with_retry(session, write_concern) do |server, txn_num|
340
+ context = Operation::Context.new(
341
+ client: client,
342
+ session: session,
343
+ operation_timeouts: operation_timeouts(opts)
344
+ )
345
+ write_with_retry(write_concern, context: context) do |connection, txn_num, context|
346
+ gte_4_4 = connection.server.description.server_version_gte?('4.4')
347
+ if !gte_4_4 && opts[:hint] && write_concern && !write_concern.acknowledged?
348
+ raise Error::UnsupportedOption.hint_error(unacknowledged_write: true)
349
+ end
350
+
278
351
  Operation::Delete.new(
279
352
  deletes: [ delete_doc ],
280
353
  db_name: collection.database.name,
@@ -283,7 +356,9 @@ module Mongo
283
356
  bypass_document_validation: !!opts[:bypass_document_validation],
284
357
  session: session,
285
358
  txn_num: txn_num,
286
- ).execute(server, context: Operation::Context.new(client: client, session: session))
359
+ let: opts[:let],
360
+ comment: opts[:comment],
361
+ ).execute_with_connection(connection, context: context)
287
362
  end
288
363
  end
289
364
  end
@@ -296,15 +371,23 @@ module Mongo
296
371
  # @param [ Hash ] replacement The replacement document.
297
372
  # @param [ Hash ] opts The options.
298
373
  #
299
- # @option opts [ true, false ] :upsert Whether to upsert if the
300
- # document doesn't exist.
301
374
  # @option opts [ true, false ] :bypass_document_validation Whether or
302
375
  # not to skip document level validation.
303
376
  # @option opts [ Hash ] :collation The collation to use.
304
- # @option opts [ Session ] :session The session to use.
377
+ # @option opts [ Object ] :comment A user-provided
378
+ # comment to attach to this command.
305
379
  # @option opts [ Hash | String ] :hint The index to use for this operation.
306
380
  # May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
381
+ # @option opts [ Hash ] :let Mapping of variables to use in the command.
382
+ # See the server documentation for details.
383
+ # @option opts [ Session ] :session The session to use.
384
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
385
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
386
+ # The default value is unset which means the value is inherited from
387
+ # the collection or the database or the client.
307
388
  # @option opts [ Hash ] :write_concern The write concern options.
389
+ # @option opts [ true, false ] :upsert Whether to upsert if the
390
+ # document doesn't exist.
308
391
  # Can be :w => Integer, :fsync => Boolean, :j => Boolean.
309
392
  #
310
393
  # @return [ Result ] The response from the database.
@@ -317,9 +400,7 @@ module Mongo
317
400
  else
318
401
  write_concern_with_session(session)
319
402
  end
320
- if opts[:hint] && write_concern && !write_concern.acknowledged?
321
- raise Error::UnsupportedOption.hint_error(unacknowledged_write: true)
322
- end
403
+ validate_replacement_documents!(replacement)
323
404
 
324
405
  QueryCache.clear_namespace(collection.namespace)
325
406
 
@@ -334,7 +415,17 @@ module Mongo
334
415
  update_doc['upsert'] = true
335
416
  end
336
417
 
337
- write_with_retry(session, write_concern) do |server, txn_num|
418
+ context = Operation::Context.new(
419
+ client: client,
420
+ session: session,
421
+ operation_timeouts: operation_timeouts(opts)
422
+ )
423
+ write_with_retry(write_concern, context: context) do |connection, txn_num, context|
424
+ gte_4_2 = connection.server.description.server_version_gte?('4.2')
425
+ if !gte_4_2 && opts[:hint] && write_concern && !write_concern.acknowledged?
426
+ raise Error::UnsupportedOption.hint_error(unacknowledged_write: true)
427
+ end
428
+
338
429
  Operation::Update.new(
339
430
  updates: [ update_doc ],
340
431
  db_name: collection.database.name,
@@ -343,7 +434,9 @@ module Mongo
343
434
  bypass_document_validation: !!opts[:bypass_document_validation],
344
435
  session: session,
345
436
  txn_num: txn_num,
346
- ).execute(server, context: Operation::Context.new(client: client, session: session))
437
+ let: opts[:let],
438
+ comment: opts[:comment],
439
+ ).execute_with_connection(connection, context: context)
347
440
  end
348
441
  end
349
442
  end
@@ -356,16 +449,24 @@ module Mongo
356
449
  # @param [ Hash | Array<Hash> ] spec The update document or pipeline.
357
450
  # @param [ Hash ] opts The options.
358
451
  #
359
- # @option opts [ true, false ] :upsert Whether to upsert if the
360
- # document doesn't exist.
452
+ # @option opts [ Array ] :array_filters A set of filters specifying to
453
+ # which array elements an update should apply.
361
454
  # @option opts [ true, false ] :bypass_document_validation Whether or
362
455
  # not to skip document level validation.
363
456
  # @option opts [ Hash ] :collation The collation to use.
364
- # @option opts [ Array ] :array_filters A set of filters specifying to
365
- # which array elements an update should apply.
366
- # @option opts [ Session ] :session The session to use.
457
+ # @option opts [ Object ] :comment A user-provided
458
+ # comment to attach to this command.
367
459
  # @option opts [ Hash | String ] :hint The index to use for this operation.
368
460
  # May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
461
+ # @option opts [ Hash ] :let Mapping of variables to use in the command.
462
+ # See the server documentation for details.
463
+ # @option opts [ Session ] :session The session to use.
464
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
465
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
466
+ # The default value is unset which means the value is inherited from
467
+ # the collection or the database or the client.
468
+ # @option opts [ true, false ] :upsert Whether to upsert if the
469
+ # document doesn't exist.
369
470
  # @option opts [ Hash ] :write_concern The write concern options.
370
471
  # Can be :w => Integer, :fsync => Boolean, :j => Boolean.
371
472
  #
@@ -379,9 +480,7 @@ module Mongo
379
480
  else
380
481
  write_concern_with_session(session)
381
482
  end
382
- if opts[:hint] && write_concern && !write_concern.acknowledged?
383
- raise Error::UnsupportedOption.hint_error(unacknowledged_write: true)
384
- end
483
+ validate_update_documents!(spec)
385
484
 
386
485
  QueryCache.clear_namespace(collection.namespace)
387
486
 
@@ -397,7 +496,17 @@ module Mongo
397
496
  update_doc['upsert'] = true
398
497
  end
399
498
 
400
- nro_write_with_retry(session, write_concern) do |server|
499
+ context = Operation::Context.new(
500
+ client: client,
501
+ session: session,
502
+ operation_timeouts: operation_timeouts(opts)
503
+ )
504
+ nro_write_with_retry(write_concern, context: context) do |connection, txn_num, context|
505
+ gte_4_2 = connection.server.description.server_version_gte?('4.2')
506
+ if !gte_4_2 && opts[:hint] && write_concern && !write_concern.acknowledged?
507
+ raise Error::UnsupportedOption.hint_error(unacknowledged_write: true)
508
+ end
509
+
401
510
  Operation::Update.new(
402
511
  updates: [ update_doc ],
403
512
  db_name: collection.database.name,
@@ -405,7 +514,9 @@ module Mongo
405
514
  write_concern: write_concern,
406
515
  bypass_document_validation: !!opts[:bypass_document_validation],
407
516
  session: session,
408
- ).execute(server, context: Operation::Context.new(client: client, session: session))
517
+ let: opts[:let],
518
+ comment: opts[:comment],
519
+ ).execute_with_connection(connection, context: context)
409
520
  end
410
521
  end
411
522
  end
@@ -418,16 +529,24 @@ module Mongo
418
529
  # @param [ Hash | Array<Hash> ] spec The update document or pipeline.
419
530
  # @param [ Hash ] opts The options.
420
531
  #
421
- # @option opts [ true, false ] :upsert Whether to upsert if the
422
- # document doesn't exist.
532
+ # @option opts [ Array ] :array_filters A set of filters specifying to
533
+ # which array elements an update should apply.
423
534
  # @option opts [ true, false ] :bypass_document_validation Whether or
424
535
  # not to skip document level validation.
425
536
  # @option opts [ Hash ] :collation The collation to use.
426
- # @option opts [ Array ] :array_filters A set of filters specifying to
427
- # which array elements an update should apply.
428
- # @option opts [ Session ] :session The session to use.
537
+ # @option opts [ Object ] :comment A user-provided
538
+ # comment to attach to this command.
429
539
  # @option opts [ Hash | String ] :hint The index to use for this operation.
430
540
  # May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
541
+ # @option opts [ Hash ] :let Mapping of variables to use in the command.
542
+ # See the server documentation for details.
543
+ # @option opts [ Session ] :session The session to use.
544
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
545
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
546
+ # The default value is unset which means the value is inherited from
547
+ # the collection or the database or the client.
548
+ # @option opts [ true, false ] :upsert Whether to upsert if the
549
+ # document doesn't exist.
431
550
  # @option opts [ Hash ] :write_concern The write concern options.
432
551
  # Can be :w => Integer, :fsync => Boolean, :j => Boolean.
433
552
  #
@@ -441,9 +560,7 @@ module Mongo
441
560
  else
442
561
  write_concern_with_session(session)
443
562
  end
444
- if opts[:hint] && write_concern && !write_concern.acknowledged?
445
- raise Error::UnsupportedOption.hint_error(unacknowledged_write: true)
446
- end
563
+ validate_update_documents!(spec)
447
564
 
448
565
  QueryCache.clear_namespace(collection.namespace)
449
566
 
@@ -458,7 +575,17 @@ module Mongo
458
575
  update_doc['upsert'] = true
459
576
  end
460
577
 
461
- write_with_retry(session, write_concern) do |server, txn_num|
578
+ context = Operation::Context.new(
579
+ client: client,
580
+ session: session,
581
+ operation_timeouts: operation_timeouts(opts)
582
+ )
583
+ write_with_retry(write_concern, context: context) do |connection, txn_num, context|
584
+ gte_4_2 = connection.server.description.server_version_gte?('4.2')
585
+ if !gte_4_2 && opts[:hint] && write_concern && !write_concern.acknowledged?
586
+ raise Error::UnsupportedOption.hint_error(unacknowledged_write: true)
587
+ end
588
+
462
589
  Operation::Update.new(
463
590
  updates: [ update_doc ],
464
591
  db_name: collection.database.name,
@@ -467,7 +594,55 @@ module Mongo
467
594
  bypass_document_validation: !!opts[:bypass_document_validation],
468
595
  session: session,
469
596
  txn_num: txn_num,
470
- ).execute(server, context: Operation::Context.new(client: client, session: session))
597
+ let: opts[:let],
598
+ comment: opts[:comment],
599
+ ).execute_with_connection(connection, context: context)
600
+ end
601
+ end
602
+ end
603
+
604
+ private
605
+
606
+ # Checks the update documents to make sure they only have atomic modifiers.
607
+ # Note that as per the spec, we only have to examine the first element
608
+ # in the update document.
609
+ #
610
+ # @param [ Hash | Array<Hash> ] spec The update document or pipeline.
611
+ #
612
+ # @raise [ Error::InvalidUpdateDocument ] if the first key in the
613
+ # document does not start with a $.
614
+ def validate_update_documents!(spec)
615
+ if update = spec.is_a?(Array) ? spec&.first : spec
616
+ if key = update.keys&.first
617
+ unless key.to_s.start_with?("$")
618
+ if Mongo.validate_update_replace
619
+ raise Error::InvalidUpdateDocument.new(key: key)
620
+ else
621
+ Error::InvalidUpdateDocument.warn(Logger.logger, key)
622
+ end
623
+ end
624
+ end
625
+ end
626
+ end
627
+
628
+ # Check the replacement documents to make sure they don't have atomic
629
+ # modifiers. Note that as per the spec, we only have to examine the
630
+ # first element in the replacement document.
631
+ #
632
+ # @param [ Hash | Array<Hash> ] spec The replacement document or pipeline.
633
+ #
634
+ # @raise [ Error::InvalidUpdateDocument ] if the first key in the
635
+ # document does not start with a $.
636
+ def validate_replacement_documents!(spec)
637
+ if replace = spec.is_a?(Array) ? spec&.first : spec
638
+ if key = replace.keys&.first
639
+ if key.to_s.start_with?("$")
640
+ if Mongo.validate_update_replace
641
+ raise Error::InvalidReplacementDocument.new(key: key)
642
+ else
643
+ Error::InvalidReplacementDocument.warn(Logger.logger, key)
644
+ end
645
+ end
471
646
  end
472
647
  end
473
648
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2014-2020 MongoDB Inc.
5
5
  #
@@ -63,10 +63,10 @@ module Mongo
63
63
  :client,
64
64
  :cluster,
65
65
  :database,
66
+ :nro_write_with_retry,
66
67
  :read_with_retry,
67
68
  :read_with_retry_cursor,
68
69
  :write_with_retry,
69
- :nro_write_with_retry,
70
70
  :write_concern_with_session
71
71
 
72
72
  # Delegate to the cluster for the next primary.
@@ -74,6 +74,12 @@ module Mongo
74
74
 
75
75
  alias :selector :filter
76
76
 
77
+ # @return [ Integer | nil | The timeout_ms value that was passed as an
78
+ # option to the view.
79
+ #
80
+ # @api private
81
+ attr_reader :operation_timeout_ms
82
+
77
83
  # Compare two +View+ objects.
78
84
  #
79
85
  # @example Compare the view with another object.
@@ -151,15 +157,26 @@ module Mongo
151
157
  # document more than once. Deprecated as of MongoDB server version 4.0.
152
158
  # @option options [ Hash ] :sort The key and direction pairs used to sort
153
159
  # the results.
160
+ # @option options [ :cursor_lifetime | :iteration ] :timeout_mode How to interpret
161
+ # :timeout_ms (whether it applies to the lifetime of the cursor, or per
162
+ # iteration).
163
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
164
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
165
+ # The default value is unset which means the value is inherited from
166
+ # the collection or the database or the client.
154
167
  #
155
168
  # @since 2.0.0
156
169
  def initialize(collection, filter = {}, options = {})
157
170
  validate_doc!(filter)
158
- @collection = collection
159
171
 
160
172
  filter = BSON::Document.new(filter)
161
173
  options = BSON::Document.new(options)
162
174
 
175
+ @collection = collection
176
+ @operation_timeout_ms = options.delete(:timeout_ms)
177
+
178
+ validate_timeout_mode!(options)
179
+
163
180
  # This is when users pass $query in filter and other modifiers
164
181
  # alongside?
165
182
  query = filter.delete(:$query)
@@ -171,6 +188,14 @@ module Mongo
171
188
  @options = Operation::Find::Builder::Modifiers.map_driver_options(modifiers).merge!(options).freeze
172
189
  end
173
190
 
191
+ # The timeout_ms value to use for this operation; either specified as an
192
+ # option to the view, or inherited from the collection.
193
+ #
194
+ # @return [ Integer | nil ] the timeout_ms for this operation
195
+ def timeout_ms
196
+ operation_timeout_ms || collection.timeout_ms
197
+ end
198
+
174
199
  # Get a human-readable string representation of +View+.
175
200
  #
176
201
  # @example Get the inspection.
@@ -196,6 +221,20 @@ module Mongo
196
221
  WriteConcern.get(options[:write_concern] || options[:write] || collection.write_concern)
197
222
  end
198
223
 
224
+ # @return [ Hash ] timeout_ms value set on the operation level (if any),
225
+ # and/or timeout_ms that is set on collection/database/client level (if any).
226
+ #
227
+ # @api private
228
+ def operation_timeouts(opts = {})
229
+ {}.tap do |result|
230
+ if opts[:timeout_ms] || operation_timeout_ms
231
+ result[:operation_timeout_ms] = opts[:timeout_ms] || operation_timeout_ms
232
+ else
233
+ result[:inherited_timeout_ms] = collection.timeout_ms
234
+ end
235
+ end
236
+ end
237
+
199
238
  private
200
239
 
201
240
  def initialize_copy(other)
@@ -205,13 +244,14 @@ module Mongo
205
244
  end
206
245
 
207
246
  def new(options)
247
+ options = options.merge(timeout_ms: operation_timeout_ms) if operation_timeout_ms
208
248
  View.new(collection, filter, options)
209
249
  end
210
250
 
211
251
  def view; self; end
212
252
 
213
253
  def with_session(opts = {}, &block)
214
- client.send(:with_session, @options.merge(opts), &block)
254
+ client.with_session(@options.merge(opts), &block)
215
255
  end
216
256
  end
217
257
  end