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
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mongo
4
+ # A shared concern implementing settings and configuration for entities that
5
+ # "host" (or spawn) cursors.
6
+ #
7
+ # The class or module that includes this concern must implement:
8
+ # * timeout_ms -- this must return either the operation level timeout_ms
9
+ # (if set) or an inherited timeout_ms from a hierarchically higher
10
+ # level (if any).
11
+ module CursorHost
12
+ # Returns the cursor associated with this view, if any.
13
+ #
14
+ # @return [ nil | Cursor ] The cursor, if any.
15
+ #
16
+ # @api private
17
+ attr_reader :cursor
18
+
19
+ # @return [ :cursor_lifetime | :iteration ] The timeout mode to be
20
+ # used by this object.
21
+ attr_reader :timeout_mode
22
+
23
+ # Ensure the timeout mode is appropriate for other options that
24
+ # have been given.
25
+ #
26
+ # @param [ Hash ] options The options to inspect.
27
+ # @param [ Array<Symbol> ] forbid The list of options to forbid for this
28
+ # class.
29
+ #
30
+ # @raise [ ArgumentError ] if inconsistent or incompatible options are
31
+ # detected.
32
+ #
33
+ # @api private
34
+ # rubocop:disable Metrics
35
+ def validate_timeout_mode!(options, forbid: [])
36
+ forbid.each do |key|
37
+ raise ArgumentError, "#{key} is not allowed here" if options.key?(key)
38
+ end
39
+
40
+ cursor_type = options[:cursor_type]
41
+ timeout_mode = options[:timeout_mode]
42
+
43
+ if timeout_ms
44
+ # "Tailable cursors only support the ITERATION value for the
45
+ # timeoutMode option. This is the default value and drivers MUST
46
+ # error if the option is set to CURSOR_LIFETIME."
47
+ if cursor_type
48
+ timeout_mode ||= :iteration
49
+ if timeout_mode == :cursor_lifetime
50
+ raise ArgumentError, 'tailable cursors only support `timeout_mode: :iteration`'
51
+ end
52
+
53
+ # "Drivers MUST error if [the maxAwaitTimeMS] option is set,
54
+ # timeoutMS is set to a non-zero value, and maxAwaitTimeMS is
55
+ # greater than or equal to timeoutMS."
56
+ max_await_time_ms = options[:max_await_time_ms] || 0
57
+ if cursor_type == :tailable_await && max_await_time_ms >= timeout_ms
58
+ raise ArgumentError, ':max_await_time_ms must not be >= :timeout_ms'
59
+ end
60
+ else
61
+ # "For non-tailable cursors, the default value of timeoutMode
62
+ # is CURSOR_LIFETIME."
63
+ timeout_mode ||= :cursor_lifetime
64
+ end
65
+ elsif timeout_mode
66
+ # "Drivers MUST error if timeoutMode is set and timeoutMS is not."
67
+ raise ArgumentError, ':timeout_ms must be set if :timeout_mode is set'
68
+ end
69
+
70
+ if timeout_mode == :iteration && respond_to?(:write?) && write?
71
+ raise ArgumentError, 'timeout_mode=:iteration is not supported for aggregation pipelines with $out or $merge'
72
+ end
73
+
74
+ # set it as an instance variable, rather than updating the options,
75
+ # because if the cursor type changes (e.g. via #configure()), the new
76
+ # View instance must be able to select a different default timeout_mode
77
+ # if no timeout_mode was set initially.
78
+ @timeout_mode = timeout_mode
79
+ end
80
+ # rubocop:enable Metrics
81
+ end
82
+ 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
  #
@@ -15,6 +15,8 @@
15
15
  # See the License for the specific language governing permissions and
16
16
  # limitations under the License.
17
17
 
18
+ require 'mongo/cursor/nontailable'
19
+
18
20
  module Mongo
19
21
  class Database
20
22
 
@@ -25,10 +27,12 @@ module Mongo
25
27
  extend Forwardable
26
28
  include Enumerable
27
29
  include Retryable
30
+ include Mongo::CursorHost
31
+ include Cursor::NonTailable
28
32
 
29
33
  def_delegators :@database, :cluster, :read_preference, :client
30
34
  # @api private
31
- def_delegators :@database, :server_selector, :read_concern
35
+ def_delegators :@database, :server_selector, :read_concern, :write_concern
32
36
  def_delegators :cluster, :next_primary
33
37
 
34
38
  # @return [ Integer ] batch_size The size of the batch of results
@@ -53,19 +57,31 @@ module Mongo
53
57
  # @option options [ Hash ] :filter A filter on the collections returned.
54
58
  # @option options [ true, false ] :authorized_collections A flag, when
55
59
  # set to true, that allows a user without the required privilege
56
- # to run the command when access control is enforced
60
+ # to run the command when access control is enforced.
61
+ # @option options [ Object ] :comment A user-provided
62
+ # comment to attach to this command.
63
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
64
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
65
+ # The default value is unset which means the value is inherited from
66
+ # the database or the client.
57
67
  #
58
- # See https://docs.mongodb.com/manual/reference/command/listCollections/
68
+ # See https://mongodb.com/docs/manual/reference/command/listCollections/
59
69
  # for more information and usage.
70
+ # @option options [ Session ] :session The session to use.
60
71
  #
61
72
  # @return [ Array<String> ] The names of all non-system collections.
62
73
  #
63
74
  # @since 2.0.0
64
75
  def collection_names(options = {})
65
76
  @batch_size = options[:batch_size]
66
- session = client.send(:get_session, options)
67
- cursor = read_with_retry_cursor(session, ServerSelector.primary, self) do |server|
68
- send_initial_query(server, session, options.merge(name_only: true))
77
+ session = client.get_session(options)
78
+ context = Operation::Context.new(
79
+ client: client,
80
+ session: session,
81
+ operation_timeouts: operation_timeouts(options)
82
+ )
83
+ cursor = read_with_retry_cursor(session, ServerSelector.primary, self, context: context) do |server|
84
+ send_initial_query(server, session, context, options.merge(name_only: true))
69
85
  end
70
86
  cursor.map do |info|
71
87
  if cursor.initial_result.connection_description.features.list_collections_enabled?
@@ -98,27 +114,44 @@ module Mongo
98
114
  # set to true and used with nameOnly: true, that allows a user without the
99
115
  # required privilege to run the command when access control is enforced
100
116
  #
101
- # See https://docs.mongodb.com/manual/reference/command/listCollections/
117
+ # See https://mongodb.com/docs/manual/reference/command/listCollections/
102
118
  # for more information and usage.
119
+ # @option options [ Session ] :session The session to use.
120
+ # @option options [ Boolean ] :deserialize_as_bson Whether to deserialize
121
+ # this message using BSON types instead of native Ruby types wherever
122
+ # possible.
103
123
  #
104
124
  # @return [ Array<Hash> ] Info for each collection in the database.
105
125
  #
106
126
  # @since 2.0.5
107
127
  def list_collections(options = {})
108
- session = client.send(:get_session)
128
+ session = client.get_session(options)
109
129
  collections_info(session, ServerSelector.primary, options)
110
130
  end
111
131
 
112
132
  # Create the new database view.
113
133
  #
114
134
  # @example Create the new database view.
115
- # View::Index.new(database)
135
+ # Database::View.new(database)
116
136
  #
117
137
  # @param [ Database ] database The database.
138
+ # @param [ Hash ] options The options to configure the view with.
139
+ #
140
+ # @option options [ :cursor_lifetime | :iteration ] :timeout_mode How to interpret
141
+ # :timeout_ms (whether it applies to the lifetime of the cursor, or per
142
+ # iteration).
143
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
144
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
145
+ # The default value is unset which means the value is inherited from
146
+ # the database or the client.
118
147
  #
119
148
  # @since 2.0.0
120
- def initialize(database)
149
+ def initialize(database, options = {})
121
150
  @database = database
151
+ @operation_timeout_ms = options.delete(:timeout_ms)
152
+
153
+ validate_timeout_mode!(options)
154
+
122
155
  @batch_size = nil
123
156
  @limit = nil
124
157
  @collection = @database[Database::COMMAND]
@@ -127,6 +160,12 @@ module Mongo
127
160
  # @api private
128
161
  attr_reader :database
129
162
 
163
+ # @return [ Integer | nil | The timeout_ms value that was passed as an
164
+ # option to the view.
165
+ #
166
+ # @api private
167
+ attr_reader :operation_timeout_ms
168
+
130
169
  # Execute an aggregation on the database view.
131
170
  #
132
171
  # @example Aggregate documents.
@@ -137,7 +176,7 @@ module Mongo
137
176
  # @param [ Array<Hash> ] pipeline The aggregation pipeline.
138
177
  # @param [ Hash ] options The aggregation options.
139
178
  #
140
- # @return [ Aggregation ] The aggregation object.
179
+ # @return [ Collection::View::Aggregation ] The aggregation object.
141
180
  #
142
181
  # @since 2.10.0
143
182
  # @api private
@@ -145,15 +184,41 @@ module Mongo
145
184
  Collection::View::Aggregation.new(self, pipeline, options)
146
185
  end
147
186
 
187
+ # The timeout_ms value to use for this operation; either specified as an
188
+ # option to the view, or inherited from the database.
189
+ #
190
+ # @return [ Integer | nil ] the timeout_ms for this operation
191
+ def timeout_ms
192
+ operation_timeout_ms || database.timeout_ms
193
+ end
194
+
195
+ # @return [ Hash ] timeout_ms value set on the operation level (if any).
196
+ #
197
+ # @api private
198
+ def operation_timeouts(opts = {})
199
+ {}.tap do |result|
200
+ if opts[:timeout_ms] || operation_timeout_ms
201
+ result[:operation_timeout_ms] = opts.delete(:timeout_ms) || operation_timeout_ms
202
+ else
203
+ result[:inherited_timeout_ms] = database.timeout_ms
204
+ end
205
+ end
206
+ end
207
+
148
208
  private
149
209
 
150
210
  def collections_info(session, server_selector, options = {}, &block)
151
211
  description = nil
152
- cursor = read_with_retry_cursor(session, server_selector, self) do |server|
212
+ context = Operation::Context.new(
213
+ client: client,
214
+ session: session,
215
+ operation_timeouts: operation_timeouts(options)
216
+ )
217
+ cursor = read_with_retry_cursor(session, server_selector, self, context: context) do |server|
153
218
  # TODO take description from the connection used to send the query
154
219
  # once https://jira.mongodb.org/browse/RUBY-1601 is fixed.
155
220
  description = server.description
156
- send_initial_query(server, session, options)
221
+ send_initial_query(server, session, context, options)
157
222
  end
158
223
  # On 3.0+ servers, we get just the collection names.
159
224
  # On 2.6 server, we get collection names prefixed with the database
@@ -168,7 +233,7 @@ module Mongo
168
233
  doc['name'].start_with?('system.') || doc['name'].include?('$')
169
234
  end
170
235
  else
171
- docs = cursor.reject do |doc|
236
+ cursor.reject do |doc|
172
237
  doc['name'].start_with?("#{database.name}.system") || doc['name'].include?('$')
173
238
  end
174
239
  end
@@ -184,6 +249,7 @@ module Mongo
184
249
  spec[:selector][:nameOnly] = true if options[:name_only]
185
250
  spec[:selector][:filter] = options[:filter] if options[:filter]
186
251
  spec[:selector][:authorizedCollections] = true if options[:authorized_collections]
252
+ spec[:comment] = options[:comment] if options[:comment]
187
253
  end
188
254
  end
189
255
 
@@ -191,8 +257,51 @@ module Mongo
191
257
  Operation::CollectionsInfo.new(collections_info_spec(session, options))
192
258
  end
193
259
 
194
- def send_initial_query(server, session, options = {})
195
- initial_query_op(session, options).execute(server, context: Operation::Context.new(client: client, session: session))
260
+ # Sends command that obtains information about the database.
261
+ #
262
+ # This command returns a cursor, so there could be additional commands,
263
+ # therefore this method is called send *initial* command.
264
+ #
265
+ # @param [ Server ] server Server to send the query to.
266
+ # @param [ Session ] session Session that should be used to send the query.
267
+ # @param [ Hash ] options
268
+ # @option options [ Hash | nil ] :filter A query expression to filter
269
+ # the list of collections.
270
+ # @option options [ true | false | nil ] :name_only A flag to indicate
271
+ # whether the command should return just the collection/view names
272
+ # and type or return both the name and other information.
273
+ # @option options [ true | false | nil ] :authorized_collections A flag,
274
+ # when set to true and used with name_only: true, that allows a user
275
+ # without the required privilege (i.e. listCollections
276
+ # action on the database) to run the command when access control
277
+ # is enforced.
278
+ # @option options [ Object | nil ] :comment A user-provided comment to attach
279
+ # to this command.
280
+ # @option options [ true | false | nil ] :deserialize_as_bson Whether the
281
+ # query results should be deserialized to BSON types, or to Ruby
282
+ # types (where possible).
283
+ #
284
+ # @return [ Operation::Result ] Result of the query.
285
+ def send_initial_query(server, session, context, options = {})
286
+ opts = options.dup
287
+ execution_opts = {}
288
+ if opts.key?(:deserialize_as_bson)
289
+ execution_opts[:deserialize_as_bson] = opts.delete(:deserialize_as_bson)
290
+ end
291
+ if server.load_balancer?
292
+ connection = server.pool.check_out(context: context)
293
+ initial_query_op(session, opts).execute_with_connection(
294
+ connection,
295
+ context: context,
296
+ options: execution_opts
297
+ )
298
+ else
299
+ initial_query_op(session, opts).execute(
300
+ server,
301
+ context: context,
302
+ options: execution_opts
303
+ )
304
+ end
196
305
  end
197
306
  end
198
307
  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
  #
@@ -73,7 +73,8 @@ module Mongo
73
73
  :read_preference,
74
74
  :server_selector,
75
75
  :read_concern,
76
- :write_concern
76
+ :write_concern,
77
+ :encrypted_fields_map
77
78
 
78
79
  # @return [ Mongo::Server ] Get the primary server from the cluster.
79
80
  def_delegators :cluster,
@@ -125,15 +126,21 @@ module Mongo
125
126
  # @option options [ true, false ] :authorized_collections A flag, when
126
127
  # set to true and used with nameOnly: true, that allows a user without the
127
128
  # required privilege to run the command when access control is enforced
128
- #
129
- # See https://docs.mongodb.com/manual/reference/command/listCollections/
129
+ # @option options [ Object ] :comment A user-provided
130
+ # comment to attach to this command.
131
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
132
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
133
+ # The default value is unset which means the value is inherited from
134
+ # the database or the client.
135
+ #
136
+ # See https://mongodb.com/docs/manual/reference/command/listCollections/
130
137
  # for more information and usage.
131
138
  #
132
139
  # @return [ Array<String> ] Names of the collections.
133
140
  #
134
141
  # @since 2.0.0
135
142
  def collection_names(options = {})
136
- View.new(self).collection_names(options)
143
+ View.new(self, options).collection_names(options)
137
144
  end
138
145
 
139
146
  # Get info on all the non-system collections in the database.
@@ -150,9 +157,15 @@ module Mongo
150
157
  # name and other information
151
158
  # @option options [ true, false ] :authorized_collections A flag, when
152
159
  # set to true and used with nameOnly: true, that allows a user without the
153
- # required privilege to run the command when access control is enforced
154
- #
155
- # See https://docs.mongodb.com/manual/reference/command/listCollections/
160
+ # required privilege to run the command when access control is enforced.
161
+ # @option options [ Object ] :comment A user-provided
162
+ # comment to attach to this command.
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 database or the client.
167
+ #
168
+ # See https://mongodb.com/docs/manual/reference/command/listCollections/
156
169
  # for more information and usage.
157
170
  #
158
171
  # @return [ Array<Hash> ] Array of information hashes, one for each
@@ -160,7 +173,7 @@ module Mongo
160
173
  #
161
174
  # @since 2.0.5
162
175
  def list_collections(options = {})
163
- View.new(self).list_collections(options)
176
+ View.new(self, options).list_collections(options)
164
177
  end
165
178
 
166
179
  # Get all the non-system collections that belong to this database.
@@ -173,9 +186,15 @@ module Mongo
173
186
  # @option options [ Hash ] :filter A filter on the collections returned.
174
187
  # @option options [ true, false ] :authorized_collections A flag, when
175
188
  # set to true and used with name_only: true, that allows a user without the
176
- # required privilege to run the command when access control is enforced
177
- #
178
- # See https://docs.mongodb.com/manual/reference/command/listCollections/
189
+ # required privilege to run the command when access control is enforced.
190
+ # @option options [ Object ] :comment A user-provided
191
+ # comment to attach to this command.
192
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
193
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
194
+ # The default value is unset which means the value is inherited from
195
+ # the database or the client.
196
+ #
197
+ # See https://mongodb.com/docs/manual/reference/command/listCollections/
179
198
  # for more information and usage.
180
199
  #
181
200
  # @return [ Array<Mongo::Collection> ] The collections.
@@ -195,6 +214,10 @@ module Mongo
195
214
  #
196
215
  # @option opts :read [ Hash ] The read preference for this command.
197
216
  # @option opts :session [ Session ] The session to use for this command.
217
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
218
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
219
+ # The default value is unset which means the value is inherited from
220
+ # the database or the client.
198
221
  # @option opts :execution_options [ Hash ] Options to pass to the code that
199
222
  # executes this command. This is an internal option and is subject to
200
223
  # change.
@@ -216,17 +239,21 @@ module Mongo
216
239
  Lint.validate_underscore_read_preference(txn_read_pref)
217
240
  selector = ServerSelector.get(txn_read_pref)
218
241
 
219
- client.send(:with_session, opts) do |session|
242
+ client.with_session(opts) do |session|
220
243
  server = selector.select_server(cluster, nil, session)
221
244
  op = Operation::Command.new(
222
- :selector => operation.dup,
245
+ :selector => operation,
223
246
  :db_name => name,
224
247
  :read => selector,
225
248
  :session => session
226
249
  )
227
250
 
228
251
  op.execute(server,
229
- context: Operation::Context.new(client: client, session: session),
252
+ context: Operation::Context.new(
253
+ client: client,
254
+ session: session,
255
+ operation_timeouts: operation_timeouts(opts)
256
+ ),
230
257
  options: execution_opts)
231
258
  end
232
259
  end
@@ -238,6 +265,12 @@ module Mongo
238
265
  #
239
266
  # @option opts :read [ Hash ] The read preference for this command.
240
267
  # @option opts :session [ Session ] The session to use for this command.
268
+ # @option opts [ Object ] :comment A user-provided
269
+ # comment to attach to this command.
270
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
271
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
272
+ # The default value is unset which means the value is inherited from
273
+ # the database or the client.
241
274
  #
242
275
  # @return [ Hash ] The result of the command execution.
243
276
  # @api private
@@ -251,14 +284,20 @@ module Mongo
251
284
  Lint.validate_underscore_read_preference(txn_read_pref)
252
285
  preference = ServerSelector.get(txn_read_pref)
253
286
 
254
- client.send(:with_session, opts) do |session|
255
- read_with_retry(session, preference) do |server|
256
- Operation::Command.new({
257
- :selector => operation.dup,
258
- :db_name => name,
259
- :read => preference,
260
- :session => session
261
- }).execute(server, context: Operation::Context.new(client: client, session: session))
287
+ client.with_session(opts) do |session|
288
+ context = Operation::Context.new(
289
+ client: client,
290
+ session: session,
291
+ operation_timeouts: operation_timeouts(opts)
292
+ )
293
+ read_with_retry(session, preference, context) do |server|
294
+ Operation::Command.new(
295
+ selector: operation.dup,
296
+ db_name: name,
297
+ read: preference,
298
+ session: session,
299
+ comment: opts[:comment],
300
+ ).execute(server, context: context)
262
301
  end
263
302
  end
264
303
  end
@@ -271,14 +310,18 @@ module Mongo
271
310
  # @param [ Hash ] options The options for the operation.
272
311
  #
273
312
  # @option options [ Session ] :session The session to use for the operation.
274
- # @option opts [ Hash ] :write_concern The write concern options.
313
+ # @option options [ Hash ] :write_concern The write concern options.
314
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
315
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
316
+ # The default value is unset which means the value is inherited from
317
+ # the database or the client.
275
318
  #
276
319
  # @return [ Result ] The result of the command.
277
320
  #
278
321
  # @since 2.0.0
279
322
  def drop(options = {})
280
323
  operation = { :dropDatabase => 1 }
281
- client.send(:with_session, options) do |session|
324
+ client.with_session(options) do |session|
282
325
  write_concern = if options[:write_concern]
283
326
  WriteConcern.get(options[:write_concern])
284
327
  else
@@ -289,7 +332,14 @@ module Mongo
289
332
  db_name: name,
290
333
  write_concern: write_concern,
291
334
  session: session
292
- }).execute(next_primary(nil, session), context: Operation::Context.new(client: client, session: session))
335
+ }).execute(
336
+ next_primary(nil, session),
337
+ context: Operation::Context.new(
338
+ client: client,
339
+ session: session,
340
+ operation_timeouts: operation_timeouts(options)
341
+ )
342
+ )
293
343
  end
294
344
  end
295
345
 
@@ -301,6 +351,10 @@ module Mongo
301
351
  # @param [ Mongo::Client ] client The driver client.
302
352
  # @param [ String, Symbol ] name The name of the database.
303
353
  # @param [ Hash ] options The options.
354
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
355
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
356
+ # The default value is unset which means the value is inherited from
357
+ # the client.
304
358
  #
305
359
  # @raise [ Mongo::Database::InvalidName ] If the name is nil.
306
360
  #
@@ -378,21 +432,23 @@ module Mongo
378
432
  # @option options [ true, false ] :bypass_document_validation Whether or
379
433
  # not to skip document level validation.
380
434
  # @option options [ Hash ] :collation The collation to use.
381
- # @option options [ String ] :comment Associate a comment with the aggregation.
435
+ # @option options [ Object ] :comment A user-provided
436
+ # comment to attach to this command.
437
+ # @option options [ Integer ] :max_time_ms The maximum amount of time to
438
+ # allow the query to run, in milliseconds. This option is deprecated, use
439
+ # :timeout_ms instead.
440
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
441
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
442
+ # The default value is unset which means the value is inherited from
443
+ # the database or the client.
382
444
  # @option options [ String ] :hint The index to use for the aggregation.
383
- # @option options [ Integer ] :max_time_ms The maximum amount of time in
384
- # milliseconds to allow the aggregation to run.
385
- # @option options [ true, false ] :use_cursor Indicates whether the command
386
- # will request that the server provide results using a cursor. Note that
387
- # as of server version 3.6, aggregations always provide results using a
388
- # cursor and this option is therefore not valid.
389
445
  # @option options [ Session ] :session The session to use.
390
446
  #
391
- # @return [ Aggregation ] The aggregation object.
447
+ # @return [ Collection::View::Aggregation ] The aggregation object.
392
448
  #
393
449
  # @since 2.10.0
394
450
  def aggregate(pipeline, options = {})
395
- View.new(self).aggregate(pipeline, options)
451
+ View.new(self, options).aggregate(pipeline, options)
396
452
  end
397
453
 
398
454
  # As of version 3.6 of the MongoDB server, a ``$changeStream`` pipeline stage is supported
@@ -405,10 +461,35 @@ module Mongo
405
461
  # @param [ Array<Hash> ] pipeline Optional additional filter operators.
406
462
  # @param [ Hash ] options The change stream options.
407
463
  #
408
- # @option options [ String ] :full_document Allowed values: 'default', 'updateLookup'.
409
- # Defaults to 'default'. When set to 'updateLookup', the change notification for partial
410
- # updates will include both a delta describing the changes to the document, as well as a copy
411
- # of the entire document that was changed from some time after the change occurred.
464
+ # @option options [ String ] :full_document Allowed values: nil, 'default',
465
+ # 'updateLookup', 'whenAvailable', 'required'.
466
+ #
467
+ # The default is to not send a value (i.e. nil), which is equivalent to
468
+ # 'default'. By default, the change notification for partial updates will
469
+ # include a delta describing the changes to the document.
470
+ #
471
+ # When set to 'updateLookup', the change notification for partial updates
472
+ # will include both a delta describing the changes to the document as well
473
+ # as a copy of the entire document that was changed from some time after
474
+ # the change occurred.
475
+ #
476
+ # When set to 'whenAvailable', configures the change stream to return the
477
+ # post-image of the modified document for replace and update change events
478
+ # if the post-image for this event is available.
479
+ #
480
+ # When set to 'required', the same behavior as 'whenAvailable' except that
481
+ # an error is raised if the post-image is not available.
482
+ # @option options [ String ] :full_document_before_change Allowed values: nil,
483
+ # 'whenAvailable', 'required', 'off'.
484
+ #
485
+ # The default is to not send a value (i.e. nil), which is equivalent to 'off'.
486
+ #
487
+ # When set to 'whenAvailable', configures the change stream to return the
488
+ # pre-image of the modified document for replace, update, and delete change
489
+ # events if it is available.
490
+ #
491
+ # When set to 'required', the same behavior as 'whenAvailable' except that
492
+ # an error is raised if the pre-image is not available.
412
493
  # @option options [ BSON::Document, Hash ] :resume_after Specifies the logical starting point
413
494
  # for the new change stream.
414
495
  # @option options [ Integer ] :max_await_time_ms The maximum amount of time for the server to
@@ -420,6 +501,13 @@ module Mongo
420
501
  # changes that occurred after the specified timestamp. Any command run
421
502
  # against the server will return a cluster time that can be used here.
422
503
  # Only recognized by server versions 4.0+.
504
+ # @option options [ Object ] :comment A user-provided
505
+ # comment to attach to this command.
506
+ # @option options [ Boolean ] :show_expanded_events Enables the server to
507
+ # send the 'expanded' list of change stream events. The list of additional
508
+ # events included with this flag set are: createIndexes, dropIndexes,
509
+ # modify, create, shardCollection, reshardCollection,
510
+ # refineCollectionShardKey.
423
511
  #
424
512
  # @note A change stream only allows 'majority' read concern.
425
513
  # @note This helper method is preferable to running a raw aggregation with a $changeStream
@@ -429,8 +517,11 @@ module Mongo
429
517
  #
430
518
  # @since 2.6.0
431
519
  def watch(pipeline = [], options = {})
520
+ view_options = options.dup
521
+ view_options[:cursor_type] = :tailable_await if options[:max_await_time_ms]
522
+
432
523
  Mongo::Collection::View::ChangeStream.new(
433
- Mongo::Collection::View.new(collection("#{COMMAND}.aggregate")),
524
+ Mongo::Collection::View.new(collection("#{COMMAND}.aggregate"), {}, view_options),
434
525
  pipeline,
435
526
  Mongo::Collection::View::ChangeStream::DATABASE,
436
527
  options)
@@ -453,5 +544,28 @@ module Mongo
453
544
  database = Database.new(client, client.options[:database], client.options)
454
545
  client.instance_variable_set(:@database, database)
455
546
  end
547
+
548
+ # @return [ Integer | nil ] Operation timeout that is for this database or
549
+ # for the corresponding client.
550
+ #
551
+ # @api private
552
+ def timeout_ms
553
+ options[:timeout_ms] || client.timeout_ms
554
+ end
555
+
556
+ # @return [ Hash ] timeout_ms value set on the operation level (if any),
557
+ # and/or timeout_ms that is set on collection/database/client level (if any).
558
+ #
559
+ # @api private
560
+ def operation_timeouts(opts)
561
+ # TODO: We should re-evaluate if we need two timeouts separately.
562
+ {}.tap do |result|
563
+ if opts[:timeout_ms].nil?
564
+ result[:inherited_timeout_ms] = timeout_ms
565
+ else
566
+ result[:operation_timeout_ms] = opts.delete(:timeout_ms)
567
+ end
568
+ end
569
+ end
456
570
  end
457
571
  end