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
data/lib/mongo/session.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2017-2020 MongoDB Inc.
5
5
  #
@@ -35,38 +35,74 @@ module Mongo
35
35
 
36
36
  # Initialize a Session.
37
37
  #
38
- # @note Applications should use Client#start_session to begin a session.
38
+ # A session can be explicit or implicit. Lifetime of explicit sessions is
39
+ # managed by the application - applications explicitry create such sessions
40
+ # and explicitly end them. Implicit sessions are created automatically by
41
+ # the driver when sending operations to servers that support sessions
42
+ # (3.6+), and their lifetime is managed by the driver.
39
43
  #
40
- # @example
41
- # Session.new(server_session, client, options)
44
+ # When an implicit session is created, it cannot have a server session
45
+ # associated with it. The server session will be checked out of the
46
+ # session pool when an operation using this session is actually executed.
47
+ # When an explicit session is created, it must reference a server session
48
+ # that is already allocated.
42
49
  #
43
- # @param [ ServerSession ] server_session The server session this session is associated with.
50
+ # @note Applications should use Client#start_session to begin a session.
51
+ # This constructor is for internal driver use only.
52
+ #
53
+ # @param [ ServerSession | nil ] server_session The server session this session is associated with.
54
+ # If the :implicit option is true, this must be nil.
44
55
  # @param [ Client ] client The client through which this session is created.
45
56
  # @param [ Hash ] options The options for this session.
46
57
  #
47
58
  # @option options [ true|false ] :causal_consistency Whether to enable
48
59
  # causal consistency for this session.
60
+ # @option options [ Integer ] :default_timeout_ms The timeoutMS value for
61
+ # the following operations executed on the session:
62
+ # - commitTransaction
63
+ # - abortTransaction
64
+ # - withTransaction
65
+ # - endSession
49
66
  # @option options [ Hash ] :default_transaction_options Options to pass
50
67
  # to start_transaction by default, can contain any of the options that
51
68
  # start_transaction accepts.
52
69
  # @option options [ true|false ] :implicit For internal driver use only -
53
- # specifies whether the session is implicit.
70
+ # specifies whether the session is implicit. If this is true, the server_session
71
+ # will be nil. This is done so that the server session is only checked
72
+ # out after the connection is checked out.
54
73
  # @option options [ Hash ] :read_preference The read preference options hash,
55
74
  # with the following optional keys:
56
75
  # - *:mode* -- the read preference as a string or symbol; valid values are
57
76
  # *:primary*, *:primary_preferred*, *:secondary*, *:secondary_preferred*
58
77
  # and *:nearest*.
78
+ # @option options [ true | false ] :snapshot Set up the session for
79
+ # snapshot reads.
59
80
  #
60
81
  # @since 2.5.0
61
82
  # @api private
62
83
  def initialize(server_session, client, options = {})
84
+ if options[:causal_consistency] && options[:snapshot]
85
+ raise ArgumentError, ':causal_consistency and :snapshot options cannot be both set on a session'
86
+ end
87
+
88
+ if options[:implicit]
89
+ unless server_session.nil?
90
+ raise ArgumentError, 'Implicit session cannot reference server session during construction'
91
+ end
92
+ else
93
+ if server_session.nil?
94
+ raise ArgumentError, 'Explicit session must reference server session during construction'
95
+ end
96
+ end
97
+
63
98
  @server_session = server_session
64
99
  options = options.dup
65
100
 
66
101
  @client = client.use(:admin)
67
- @options = options.freeze
102
+ @options = options.dup.freeze
68
103
  @cluster_time = nil
69
104
  @state = NO_TRANSACTION_STATE
105
+ @with_transaction_deadline = nil
70
106
  end
71
107
 
72
108
  # @return [ Hash ] The options for this session.
@@ -83,11 +119,34 @@ module Mongo
83
119
  @client.cluster
84
120
  end
85
121
 
122
+ # @return [ true | false ] Whether the session is configured for snapshot
123
+ # reads.
124
+ def snapshot?
125
+ !!options[:snapshot]
126
+ end
127
+
86
128
  # @return [ BSON::Timestamp ] The latest seen operation time for this session.
87
129
  #
88
130
  # @since 2.5.0
89
131
  attr_reader :operation_time
90
132
 
133
+ # Sets the dirty state to the given value for the underlying server
134
+ # session. If there is no server session, this does nothing.
135
+ #
136
+ # @param [ true | false ] mark whether to mark the server session as
137
+ # dirty, or not.
138
+ def dirty!(mark = true)
139
+ @server_session&.dirty!(mark)
140
+ end
141
+
142
+ # @return [ true | false | nil ] whether the underlying server session is
143
+ # dirty. If no server session exists for this session, returns nil.
144
+ #
145
+ # @api private
146
+ def dirty?
147
+ @server_session&.dirty?
148
+ end
149
+
91
150
  # @return [ Hash ] The options for the transaction currently being executed
92
151
  # on this session.
93
152
  #
@@ -148,11 +207,11 @@ module Mongo
148
207
  # @return [ true, false ] If writes will be retried.
149
208
  #
150
209
  # @note Retryable writes are only available on server versions at least 3.6
151
- # and with sharded clusters or replica sets.
210
+ # and with sharded clusters, replica sets, or load-balanced topologies.
152
211
  #
153
212
  # @since 2.5.0
154
213
  def retry_writes?
155
- !!client.options[:retry_writes] && (cluster.replica_set? || cluster.sharded?)
214
+ !!client.options[:retry_writes] && (cluster.replica_set? || cluster.sharded? || cluster.load_balanced?)
156
215
  end
157
216
 
158
217
  # Get the read preference the session will use in the currently
@@ -182,23 +241,33 @@ module Mongo
182
241
  #
183
242
  # @since 2.5.0
184
243
  def ended?
185
- @server_session.nil?
244
+ !!@ended
186
245
  end
187
246
 
188
- # Get the server session id of this session, if the session was not ended.
189
- # If the session was ended, returns nil.
190
- #
191
- # @example Get the session id.
192
- # session.session_id
247
+ # Get the server session id of this session, if the session has not been
248
+ # ended. If the session had been ended, raises Error::SessionEnded.
193
249
  #
194
250
  # @return [ BSON::Document ] The server session id.
195
251
  #
252
+ # @raise [ Error::SessionEnded ] If the session had been ended.
253
+ #
196
254
  # @since 2.5.0
197
255
  def session_id
198
256
  if ended?
199
257
  raise Error::SessionEnded
200
258
  end
201
259
 
260
+ # An explicit session will always have a session_id, because during
261
+ # construction a server session must be provided. An implicit session
262
+ # will not have a session_id until materialized, thus calls to
263
+ # session_id might fail. An application should not have an opportunity
264
+ # to experience this failure because an implicit session shouldn't be
265
+ # accessible to applications due to its lifetime being constrained to
266
+ # operation execution, which is done entirely by the driver.
267
+ unless materialized?
268
+ raise Error::SessionNotMaterialized
269
+ end
270
+
202
271
  @server_session.session_id
203
272
  end
204
273
 
@@ -208,11 +277,11 @@ module Mongo
208
277
  # @api private
209
278
  attr_reader :pinned_server
210
279
 
211
- # @return [ Object | nil ] The service id that this session is pinned to,
280
+ # @return [ Integer | nil ] The connection global id that this session is pinned to,
212
281
  # if any.
213
282
  #
214
283
  # @api private
215
- attr_reader :pinned_service_id
284
+ attr_reader :pinned_connection_global_id
216
285
 
217
286
  # @return [ BSON::Document | nil ] Recovery token for the sharded
218
287
  # transaction being executed on this session, if any.
@@ -313,10 +382,13 @@ module Mongo
313
382
  rescue Mongo::Error, Error::AuthError
314
383
  end
315
384
  end
316
- @client.cluster.session_pool.checkin(@server_session)
385
+ if @server_session
386
+ @client.cluster.session_pool.checkin(@server_session)
387
+ end
317
388
  end
318
389
  ensure
319
390
  @server_session = nil
391
+ @ended = true
320
392
  end
321
393
 
322
394
  # Executes the provided block in a transaction, retrying as necessary.
@@ -373,9 +445,21 @@ module Mongo
373
445
  # progress or if the write concern is unacknowledged.
374
446
  #
375
447
  # @since 2.7.0
376
- def with_transaction(options=nil)
377
- # Non-configurable 120 second timeout for the entire operation
378
- deadline = Utils.monotonic_time + 120
448
+ def with_transaction(options = nil)
449
+ if timeout_ms = (options || {})[:timeout_ms]
450
+ timeout_sec = timeout_ms / 1_000.0
451
+ deadline = Utils.monotonic_time + timeout_sec
452
+ @with_transaction_deadline = deadline
453
+ elsif default_timeout_ms = @options[:default_timeout_ms]
454
+ timeout_sec = default_timeout_ms / 1_000.0
455
+ deadline = Utils.monotonic_time + timeout_sec
456
+ @with_transaction_deadline = deadline
457
+ elsif @client.timeout_sec
458
+ deadline = Utils.monotonic_time + @client.timeout_sec
459
+ @with_transaction_deadline = deadline
460
+ else
461
+ deadline = Utils.monotonic_time + 120
462
+ end
379
463
  transaction_in_progress = false
380
464
  loop do
381
465
  commit_options = {}
@@ -389,6 +473,7 @@ module Mongo
389
473
  rescue Exception => e
390
474
  if within_states?(STARTING_TRANSACTION_STATE, TRANSACTION_IN_PROGRESS_STATE)
391
475
  log_warn("Aborting transaction due to #{e.class}: #{e}")
476
+ @with_transaction_deadline = nil
392
477
  abort_transaction
393
478
  transaction_in_progress = false
394
479
  end
@@ -416,7 +501,7 @@ module Mongo
416
501
  rescue Mongo::Error => e
417
502
  if e.label?('UnknownTransactionCommitResult')
418
503
  if Utils.monotonic_time >= deadline ||
419
- e.is_a?(Error::OperationFailure) && e.max_time_ms_expired?
504
+ e.is_a?(Error::OperationFailure::Family) && e.max_time_ms_expired?
420
505
  then
421
506
  transaction_in_progress = false
422
507
  raise
@@ -457,9 +542,10 @@ module Mongo
457
542
  log_warn('with_transaction callback broke out of with_transaction loop, aborting transaction')
458
543
  begin
459
544
  abort_transaction
460
- rescue Error::OperationFailure, Error::InvalidTransactionOperation
545
+ rescue Error::OperationFailure::Family, Error::InvalidTransactionOperation
461
546
  end
462
547
  end
548
+ @with_transaction_deadline = nil
463
549
  end
464
550
 
465
551
  # Places subsequent operations in this session into a new transaction.
@@ -474,7 +560,8 @@ module Mongo
474
560
  #
475
561
  # @option options [ Integer ] :max_commit_time_ms The maximum amount of
476
562
  # time to allow a single commitTransaction command to run, in milliseconds.
477
- # @option options [ Hash ] read_concern The read concern options hash,
563
+ # This options is deprecated, use :timeout_ms instead.
564
+ # @option options [ Hash ] :read_concern The read concern options hash,
478
565
  # with the following optional keys:
479
566
  # - *:level* -- the read preference level as a symbol; valid values
480
567
  # are *:local*, *:majority*, and *:snapshot*
@@ -484,12 +571,18 @@ module Mongo
484
571
  # items:
485
572
  # - *:mode* -- read preference specified as a symbol; the only valid value is
486
573
  # *:primary*.
574
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
575
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
576
+ # The default value is unset which means the value is inherited from
577
+ # the client.
487
578
  #
488
579
  # @raise [ Error::InvalidTransactionOperation ] If a transaction is already in
489
580
  # progress or if the write concern is unacknowledged.
490
581
  #
491
582
  # @since 2.6.0
492
583
  def start_transaction(options = nil)
584
+ check_transactions_supported!
585
+
493
586
  if options
494
587
  Lint.validate_read_concern_option(options[:read_concern])
495
588
 
@@ -506,6 +599,10 @@ module Mongo
506
599
  =end
507
600
  end
508
601
 
602
+ if snapshot?
603
+ raise Mongo::Error::SnapshotSessionTransactionProhibited
604
+ end
605
+
509
606
  check_if_ended!
510
607
 
511
608
  if within_states?(STARTING_TRANSACTION_STATE, TRANSACTION_IN_PROGRESS_STATE)
@@ -540,6 +637,10 @@ module Mongo
540
637
  #
541
638
  # @option options :write_concern [ nil | WriteConcern::Base ] The write
542
639
  # concern to use for this operation.
640
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
641
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
642
+ # The default value is unset which means the value is inherited from
643
+ # the client.
543
644
  #
544
645
  # @raise [ Error::InvalidTransactionOperation ] If there is no active transaction.
545
646
  #
@@ -575,8 +676,16 @@ module Mongo
575
676
  if write_concern && !write_concern.is_a?(WriteConcern::Base)
576
677
  write_concern = WriteConcern.get(write_concern)
577
678
  end
578
- write_with_retry(self, write_concern, true) do |server, txn_num, is_retry|
579
- if is_retry
679
+
680
+ context = Operation::Context.new(
681
+ client: @client,
682
+ session: self,
683
+ operation_timeouts: operation_timeouts(options)
684
+ )
685
+ write_with_retry(write_concern, ending_transaction: true,
686
+ context: context,
687
+ ) do |connection, txn_num, context|
688
+ if context.retry?
580
689
  if write_concern
581
690
  wco = write_concern.options.merge(w: :majority)
582
691
  wco[:wtimeout] ||= 10000
@@ -592,7 +701,7 @@ module Mongo
592
701
  txn_num: txn_num,
593
702
  write_concern: write_concern,
594
703
  }
595
- Operation::Command.new(spec).execute(server, context: Operation::Context.new(client: @client, session: self))
704
+ Operation::Command.new(spec).execute_with_connection(connection, context: context)
596
705
  end
597
706
  end
598
707
  ensure
@@ -610,10 +719,15 @@ module Mongo
610
719
  # @example Abort the transaction.
611
720
  # session.abort_transaction
612
721
  #
722
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
723
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
724
+ # The default value is unset which means the value is inherited from
725
+ # the client.
726
+ #
613
727
  # @raise [ Error::InvalidTransactionOperation ] If there is no active transaction.
614
728
  #
615
729
  # @since 2.6.0
616
- def abort_transaction
730
+ def abort_transaction(options = nil)
617
731
  QueryCache.clear
618
732
 
619
733
  check_if_ended!
@@ -630,17 +744,26 @@ module Mongo
630
744
  Mongo::Error::InvalidTransactionOperation.cannot_call_twice_msg(:abortTransaction))
631
745
  end
632
746
 
747
+ options ||= {}
748
+
633
749
  begin
634
750
  unless starting_transaction?
635
751
  @aborting_transaction = true
636
- write_with_retry(self, txn_options[:write_concern], true) do |server, txn_num|
752
+ context = Operation::Context.new(
753
+ client: @client,
754
+ session: self,
755
+ operation_timeouts: operation_timeouts(options)
756
+ )
757
+ write_with_retry(txn_options[:write_concern],
758
+ ending_transaction: true, context: context,
759
+ ) do |connection, txn_num, context|
637
760
  begin
638
761
  Operation::Command.new(
639
762
  selector: { abortTransaction: 1 },
640
763
  db_name: 'admin',
641
764
  session: self,
642
765
  txn_num: txn_num
643
- ).execute(server, context: Operation::Context.new(client: @client, session: self))
766
+ ).execute_with_connection(connection, context: context)
644
767
  ensure
645
768
  unpin
646
769
  end
@@ -714,27 +837,32 @@ module Mongo
714
837
  @pinned_server = server
715
838
  end
716
839
 
717
- # Pins this session to the specified service.
840
+ # Pins this session to the specified connection.
718
841
  #
719
- # @param [ Object ] service_id The service id to pin this session to.
842
+ # @param [ Integer ] connection_global_id The global id of connection to pin
843
+ # this session to.
720
844
  #
721
845
  # @api private
722
- def pin_to_service(service_id)
723
- if service_id.nil?
724
- raise ArgumentError, 'Cannot pin to a nil service id'
846
+ def pin_to_connection(connection_global_id)
847
+ if connection_global_id.nil?
848
+ raise ArgumentError, 'Cannot pin to a nil connection id'
725
849
  end
726
- @pinned_service_id = service_id
850
+ @pinned_connection_global_id = connection_global_id
727
851
  end
728
852
 
729
- # Unpins this session from the pinned server, if the session was pinned.
853
+ # Unpins this session from the pinned server or connection,
854
+ # if the session was pinned.
855
+ #
856
+ # @param [ Connection | nil ] connection Connection to unpin from.
730
857
  #
731
858
  # @api private
732
- def unpin
859
+ def unpin(connection = nil)
733
860
  @pinned_server = nil
734
- @pinned_service_id = nil
861
+ @pinned_connection_global_id = nil
862
+ connection.unpin unless connection.nil?
735
863
  end
736
864
 
737
- # Unpins this session from the pinned server, if the session was pinned
865
+ # Unpins this session from the pinned server or connection, if the session was pinned
738
866
  # and the specified exception instance and the session's transaction state
739
867
  # require it to be unpinned.
740
868
  #
@@ -742,19 +870,20 @@ module Mongo
742
870
  # (both client- and server-side generated ones).
743
871
  #
744
872
  # @param [ Error ] error The exception instance to process.
873
+ # @param [ Connection | nil ] connection Connection to unpin from.
745
874
  #
746
875
  # @api private
747
- def unpin_maybe(error)
876
+ def unpin_maybe(error, connection = nil)
748
877
  if !within_states?(Session::NO_TRANSACTION_STATE) &&
749
878
  error.label?('TransientTransactionError')
750
879
  then
751
- unpin
880
+ unpin(connection)
752
881
  end
753
882
 
754
883
  if committing_transaction? &&
755
884
  error.label?('UnknownTransactionCommitResult')
756
885
  then
757
- unpin
886
+ unpin(connection)
758
887
  end
759
888
  end
760
889
 
@@ -814,7 +943,7 @@ module Mongo
814
943
  #
815
944
  # @since 2.6.0
816
945
  # @api private
817
- def add_txn_opts!(command, read)
946
+ def add_txn_opts!(command, read, context)
818
947
  command.tap do |c|
819
948
  # The read concern should be added to any command that starts a transaction.
820
949
  if starting_transaction?
@@ -868,6 +997,14 @@ module Mongo
868
997
  if c[:writeConcern] && c[:writeConcern][:w] && c[:writeConcern][:w].is_a?(Symbol)
869
998
  c[:writeConcern][:w] = c[:writeConcern][:w].to_s
870
999
  end
1000
+
1001
+ # Ignore wtimeout if csot
1002
+ if context&.csot?
1003
+ c[:writeConcern]&.delete(:wtimeout)
1004
+ end
1005
+
1006
+ # We must not send an empty (server default) write concern.
1007
+ c.delete(:writeConcern) if c[:writeConcern]&.empty?
871
1008
  end
872
1009
  end
873
1010
 
@@ -991,6 +1128,33 @@ module Mongo
991
1128
  end
992
1129
  end
993
1130
 
1131
+ # If not already set, populate a session objects's server_session by
1132
+ # checking out a session from the session pool.
1133
+ #
1134
+ # @return [ Session ] Self.
1135
+ #
1136
+ # @api private
1137
+ def materialize_if_needed
1138
+ if ended?
1139
+ raise Error::SessionEnded
1140
+ end
1141
+
1142
+ return unless implicit? && !@server_session
1143
+
1144
+ @server_session = cluster.session_pool.checkout
1145
+
1146
+ self
1147
+ end
1148
+
1149
+ # @api private
1150
+ def materialized?
1151
+ if ended?
1152
+ raise Error::SessionEnded
1153
+ end
1154
+
1155
+ !@server_session.nil?
1156
+ end
1157
+
994
1158
  # Increment and return the next transaction number.
995
1159
  #
996
1160
  # @example Get the next transaction number.
@@ -1024,6 +1188,11 @@ module Mongo
1024
1188
  @server_session.txn_num
1025
1189
  end
1026
1190
 
1191
+ # @api private
1192
+ attr_accessor :snapshot_timestamp
1193
+
1194
+ attr_reader :with_transaction_deadline
1195
+
1027
1196
  private
1028
1197
 
1029
1198
  # Get the read concern the session will use when starting a transaction.
@@ -1090,5 +1259,32 @@ module Mongo
1090
1259
  raise Mongo::Error::InvalidSession.new(MISMATCHED_CLUSTER_ERROR_MSG)
1091
1260
  end
1092
1261
  end
1262
+
1263
+ def check_transactions_supported!
1264
+ raise Mongo::Error::TransactionsNotSupported, "standalone topology" if cluster.single?
1265
+
1266
+ cluster.next_primary.with_connection do |conn|
1267
+ if cluster.replica_set? && !conn.features.transactions_enabled?
1268
+ raise Mongo::Error::TransactionsNotSupported, "server version is < 4.0"
1269
+ end
1270
+ if cluster.sharded? && !conn.features.sharded_transactions_enabled?
1271
+ raise Mongo::Error::TransactionsNotSupported, "sharded transactions require server version >= 4.2"
1272
+ end
1273
+ end
1274
+ end
1275
+
1276
+ def operation_timeouts(opts)
1277
+ {
1278
+ inherited_timeout_ms: @client.timeout_ms
1279
+ }.tap do |result|
1280
+ if @with_transaction_deadline.nil?
1281
+ if timeout_ms = opts[:timeout_ms]
1282
+ result[:operation_timeout_ms] = timeout_ms
1283
+ elsif default_timeout_ms = options[:default_timeout_ms]
1284
+ result[:operation_timeout_ms] = default_timeout_ms
1285
+ end
1286
+ end
1287
+ end
1288
+ end
1093
1289
  end
1094
1290
  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) 2020 MongoDB Inc.
5
5
  #
@@ -21,8 +21,7 @@ module Mongo
21
21
  # This module caches OCSP responses for their indicated validity time.
22
22
  #
23
23
  # The key is the CertificateId used for the OCSP request.
24
- # The value is the SingleResponse on Ruby 2.4+, or the OpenStruct
25
- # emulation of it on Ruby 2.3.
24
+ # The value is the SingleResponse.
26
25
  #
27
26
  # @api private
28
27
  module OcspCache
@@ -40,7 +39,7 @@ module Mongo
40
39
  # expire by the time caller uses them. The caller should not perform
41
40
  # update time checks on the returned response.
42
41
  #
43
- # @return [ OpenSSL::OCSP::SingleResponse | OpenStruct ] The previously
42
+ # @return [ OpenSSL::OCSP::SingleResponse ] The previously
44
43
  # retrieved response.
45
44
  module_function def get(cert_id)
46
45
  resp = responses.detect do |resp|
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2020 MongoDB Inc.
5
5
  #
@@ -238,6 +238,10 @@ module Mongo
238
238
  end
239
239
 
240
240
  resp = resp.find_response(cert_id)
241
+ unless resp
242
+ @resp_errors << "OCSP response from #{report_uri(original_uri, uri)} did not include information about the requested certificate"
243
+ return false
244
+ end
241
245
  # TODO make a new class instead of patching the stdlib one?
242
246
  resp.instance_variable_set('@uri', uri)
243
247
  resp.instance_variable_set('@original_uri', original_uri)
@@ -245,11 +249,6 @@ module Mongo
245
249
  attr_reader :uri, :original_uri
246
250
  end
247
251
 
248
- unless resp
249
- @resp_errors << "OCSP response from #{report_uri(original_uri, uri)} did not include information about the requested certificate"
250
- return false
251
- end
252
-
253
252
  unless resp.check_validity
254
253
  @resp_errors << "OCSP response from #{report_uri(original_uri, uri)} was invalid: this_update was in the future or next_update time has passed"
255
254
  return false