mongo 2.12.4 → 2.13.2

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 (860) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/CONTRIBUTING.md +8 -36
  5. data/LICENSE +1 -1
  6. data/README.md +54 -54
  7. data/Rakefile +16 -10
  8. data/lib/mongo.rb +8 -3
  9. data/lib/mongo/active_support.rb +1 -1
  10. data/lib/mongo/address.rb +41 -14
  11. data/lib/mongo/address/ipv4.rb +32 -5
  12. data/lib/mongo/address/ipv6.rb +32 -5
  13. data/lib/mongo/address/unix.rb +3 -3
  14. data/lib/mongo/address/validator.rb +1 -1
  15. data/lib/mongo/auth.rb +36 -13
  16. data/lib/mongo/auth/aws.rb +37 -0
  17. data/lib/mongo/auth/aws/conversation.rb +128 -0
  18. data/lib/mongo/auth/aws/credentials_retriever.rb +219 -0
  19. data/lib/mongo/auth/aws/request.rb +283 -0
  20. data/lib/mongo/auth/base.rb +129 -0
  21. data/lib/mongo/auth/conversation_base.rb +52 -0
  22. data/lib/mongo/auth/cr.rb +9 -36
  23. data/lib/mongo/auth/cr/conversation.rb +24 -69
  24. data/lib/mongo/auth/credential_cache.rb +1 -1
  25. data/lib/mongo/auth/gssapi.rb +38 -0
  26. data/lib/mongo/auth/gssapi/conversation.rb +108 -0
  27. data/lib/mongo/auth/ldap.rb +9 -34
  28. data/lib/mongo/auth/ldap/conversation.rb +3 -43
  29. data/lib/mongo/auth/roles.rb +1 -1
  30. data/lib/mongo/auth/sasl_conversation_base.rb +111 -0
  31. data/lib/mongo/auth/scram.rb +39 -51
  32. data/lib/mongo/auth/scram/conversation.rb +12 -506
  33. data/lib/mongo/auth/scram256.rb +31 -0
  34. data/lib/mongo/auth/scram256/conversation.rb +63 -0
  35. data/lib/mongo/auth/scram_conversation_base.rb +402 -0
  36. data/lib/mongo/auth/stringprep.rb +5 -4
  37. data/lib/mongo/auth/stringprep/profiles/sasl.rb +2 -1
  38. data/lib/mongo/auth/stringprep/tables.rb +2 -1
  39. data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +1 -0
  40. data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +1 -0
  41. data/lib/mongo/auth/user.rb +2 -2
  42. data/lib/mongo/auth/user/view.rb +1 -1
  43. data/lib/mongo/auth/x509.rb +14 -32
  44. data/lib/mongo/auth/x509/conversation.rb +15 -42
  45. data/lib/mongo/background_thread.rb +11 -2
  46. data/lib/mongo/bson.rb +1 -1
  47. data/lib/mongo/bulk_write.rb +62 -26
  48. data/lib/mongo/bulk_write/combineable.rb +20 -8
  49. data/lib/mongo/bulk_write/ordered_combiner.rb +1 -1
  50. data/lib/mongo/bulk_write/result.rb +1 -1
  51. data/lib/mongo/bulk_write/result_combiner.rb +1 -1
  52. data/lib/mongo/bulk_write/transformable.rb +9 -10
  53. data/lib/mongo/bulk_write/unordered_combiner.rb +1 -1
  54. data/lib/mongo/bulk_write/validatable.rb +5 -1
  55. data/lib/mongo/client.rb +214 -31
  56. data/lib/mongo/client_encryption.rb +1 -1
  57. data/lib/mongo/cluster.rb +177 -69
  58. data/lib/mongo/cluster/periodic_executor.rb +1 -1
  59. data/lib/mongo/cluster/reapers/cursor_reaper.rb +1 -1
  60. data/lib/mongo/cluster/reapers/socket_reaper.rb +1 -1
  61. data/lib/mongo/cluster/sdam_flow.rb +36 -17
  62. data/lib/mongo/cluster/topology.rb +19 -2
  63. data/lib/mongo/cluster/topology/base.rb +1 -1
  64. data/lib/mongo/cluster/topology/no_replica_set_options.rb +1 -1
  65. data/lib/mongo/cluster/topology/replica_set_no_primary.rb +4 -3
  66. data/lib/mongo/cluster/topology/replica_set_with_primary.rb +1 -1
  67. data/lib/mongo/cluster/topology/sharded.rb +2 -2
  68. data/lib/mongo/cluster/topology/single.rb +2 -2
  69. data/lib/mongo/cluster/topology/unknown.rb +1 -1
  70. data/lib/mongo/cluster_time.rb +1 -1
  71. data/lib/mongo/collection.rb +51 -24
  72. data/lib/mongo/collection/view.rb +6 -2
  73. data/lib/mongo/collection/view/aggregation.rb +6 -3
  74. data/lib/mongo/collection/view/builder.rb +1 -1
  75. data/lib/mongo/collection/view/builder/aggregation.rb +1 -1
  76. data/lib/mongo/collection/view/builder/find_command.rb +9 -1
  77. data/lib/mongo/collection/view/builder/flags.rb +1 -1
  78. data/lib/mongo/collection/view/builder/map_reduce.rb +1 -1
  79. data/lib/mongo/collection/view/builder/modifiers.rb +1 -1
  80. data/lib/mongo/collection/view/builder/op_query.rb +1 -1
  81. data/lib/mongo/collection/view/change_stream.rb +3 -6
  82. data/lib/mongo/collection/view/change_stream/retryable.rb +1 -1
  83. data/lib/mongo/collection/view/explainable.rb +1 -1
  84. data/lib/mongo/collection/view/immutable.rb +1 -1
  85. data/lib/mongo/collection/view/iterable.rb +8 -2
  86. data/lib/mongo/collection/view/map_reduce.rb +7 -4
  87. data/lib/mongo/collection/view/readable.rb +10 -2
  88. data/lib/mongo/collection/view/writable.rb +93 -13
  89. data/lib/mongo/crypt.rb +1 -1
  90. data/lib/mongo/crypt/auto_decryption_context.rb +1 -1
  91. data/lib/mongo/crypt/auto_encrypter.rb +1 -1
  92. data/lib/mongo/crypt/auto_encryption_context.rb +1 -1
  93. data/lib/mongo/crypt/binary.rb +1 -1
  94. data/lib/mongo/crypt/binding.rb +1 -1
  95. data/lib/mongo/crypt/context.rb +1 -1
  96. data/lib/mongo/crypt/data_key_context.rb +1 -1
  97. data/lib/mongo/crypt/encryption_io.rb +41 -24
  98. data/lib/mongo/crypt/explicit_decryption_context.rb +1 -1
  99. data/lib/mongo/crypt/explicit_encrypter.rb +1 -1
  100. data/lib/mongo/crypt/explicit_encryption_context.rb +1 -1
  101. data/lib/mongo/crypt/handle.rb +1 -1
  102. data/lib/mongo/crypt/hooks.rb +1 -1
  103. data/lib/mongo/crypt/kms_context.rb +1 -1
  104. data/lib/mongo/crypt/status.rb +1 -1
  105. data/lib/mongo/cursor.rb +3 -3
  106. data/lib/mongo/cursor/builder.rb +1 -1
  107. data/lib/mongo/cursor/builder/get_more_command.rb +1 -1
  108. data/lib/mongo/cursor/builder/kill_cursors_command.rb +1 -1
  109. data/lib/mongo/cursor/builder/op_get_more.rb +1 -1
  110. data/lib/mongo/cursor/builder/op_kill_cursors.rb +1 -1
  111. data/lib/mongo/database.rb +35 -5
  112. data/lib/mongo/database/view.rb +20 -5
  113. data/lib/mongo/dbref.rb +1 -1
  114. data/lib/mongo/distinguishing_semaphore.rb +55 -0
  115. data/lib/mongo/error.rb +28 -2
  116. data/lib/mongo/error/auth_error.rb +1 -1
  117. data/lib/mongo/error/bulk_write_error.rb +1 -1
  118. data/lib/mongo/error/change_stream_resumable.rb +1 -1
  119. data/lib/mongo/error/closed_stream.rb +1 -1
  120. data/lib/mongo/error/connection_check_out_timeout.rb +1 -1
  121. data/lib/mongo/error/connection_perished.rb +23 -0
  122. data/lib/mongo/error/credential_check_error.rb +26 -0
  123. data/lib/mongo/error/extra_file_chunk.rb +1 -1
  124. data/lib/mongo/error/file_not_found.rb +1 -1
  125. data/lib/mongo/error/handshake_error.rb +1 -1
  126. data/lib/mongo/error/insufficient_iteration_count.rb +1 -1
  127. data/lib/mongo/error/invalid_address.rb +1 -1
  128. data/lib/mongo/error/invalid_application_name.rb +1 -1
  129. data/lib/mongo/error/invalid_bulk_operation.rb +1 -1
  130. data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -1
  131. data/lib/mongo/error/invalid_collection_name.rb +1 -1
  132. data/lib/mongo/error/invalid_cursor_operation.rb +1 -1
  133. data/lib/mongo/error/invalid_database_name.rb +1 -1
  134. data/lib/mongo/error/invalid_document.rb +1 -1
  135. data/lib/mongo/error/invalid_file.rb +1 -1
  136. data/lib/mongo/error/invalid_file_revision.rb +1 -1
  137. data/lib/mongo/error/invalid_min_pool_size.rb +1 -1
  138. data/lib/mongo/error/invalid_nonce.rb +2 -2
  139. data/lib/mongo/error/invalid_read_option.rb +1 -1
  140. data/lib/mongo/error/invalid_replacement_document.rb +1 -1
  141. data/lib/mongo/error/invalid_server_auth_host.rb +22 -0
  142. data/lib/mongo/error/invalid_server_auth_response.rb +23 -0
  143. data/lib/mongo/error/invalid_server_preference.rb +6 -1
  144. data/lib/mongo/error/invalid_session.rb +3 -2
  145. data/lib/mongo/error/invalid_signature.rb +1 -1
  146. data/lib/mongo/error/invalid_transaction_operation.rb +1 -1
  147. data/lib/mongo/error/invalid_txt_record.rb +1 -1
  148. data/lib/mongo/error/invalid_update_document.rb +1 -1
  149. data/lib/mongo/error/invalid_uri.rb +1 -1
  150. data/lib/mongo/error/invalid_write_concern.rb +1 -1
  151. data/lib/mongo/error/lint_error.rb +1 -1
  152. data/lib/mongo/error/max_bson_size.rb +1 -1
  153. data/lib/mongo/error/max_message_size.rb +1 -1
  154. data/lib/mongo/error/mismatched_domain.rb +1 -1
  155. data/lib/mongo/error/missing_file_chunk.rb +1 -1
  156. data/lib/mongo/error/missing_password.rb +1 -1
  157. data/lib/mongo/error/missing_resume_token.rb +1 -1
  158. data/lib/mongo/error/missing_scram_server_signature.rb +27 -0
  159. data/lib/mongo/error/multi_index_drop.rb +1 -1
  160. data/lib/mongo/error/need_primary_server.rb +1 -1
  161. data/lib/mongo/error/no_server_available.rb +1 -1
  162. data/lib/mongo/error/no_srv_records.rb +1 -1
  163. data/lib/mongo/error/notable.rb +18 -3
  164. data/lib/mongo/error/operation_failure.rb +63 -44
  165. data/lib/mongo/error/parser.rb +16 -5
  166. data/lib/mongo/error/pool_closed_error.rb +1 -1
  167. data/lib/mongo/error/raise_original_error.rb +29 -0
  168. data/lib/mongo/error/session_ended.rb +1 -1
  169. data/lib/mongo/error/sessions_not_supported.rb +35 -0
  170. data/lib/mongo/error/socket_error.rb +1 -1
  171. data/lib/mongo/error/socket_timeout_error.rb +1 -1
  172. data/lib/mongo/error/unchangeable_collection_option.rb +1 -1
  173. data/lib/mongo/error/unexpected_chunk_length.rb +1 -1
  174. data/lib/mongo/error/unexpected_response.rb +1 -1
  175. data/lib/mongo/error/unknown_payload_type.rb +1 -1
  176. data/lib/mongo/error/unsupported_array_filters.rb +7 -2
  177. data/lib/mongo/error/unsupported_collation.rb +7 -2
  178. data/lib/mongo/error/unsupported_features.rb +1 -1
  179. data/lib/mongo/error/unsupported_message_type.rb +1 -1
  180. data/lib/mongo/error/unsupported_option.rb +99 -0
  181. data/lib/mongo/error/write_retryable.rb +1 -1
  182. data/lib/mongo/event.rb +1 -1
  183. data/lib/mongo/event/base.rb +7 -1
  184. data/lib/mongo/event/listeners.rb +1 -1
  185. data/lib/mongo/event/publisher.rb +1 -1
  186. data/lib/mongo/event/subscriber.rb +1 -1
  187. data/lib/mongo/grid.rb +1 -1
  188. data/lib/mongo/grid/file.rb +1 -1
  189. data/lib/mongo/grid/file/chunk.rb +1 -1
  190. data/lib/mongo/grid/file/info.rb +1 -1
  191. data/lib/mongo/grid/fs_bucket.rb +9 -4
  192. data/lib/mongo/grid/stream.rb +1 -1
  193. data/lib/mongo/grid/stream/read.rb +1 -1
  194. data/lib/mongo/grid/stream/write.rb +1 -1
  195. data/lib/mongo/id.rb +1 -1
  196. data/lib/mongo/index.rb +2 -1
  197. data/lib/mongo/index/view.rb +61 -11
  198. data/lib/mongo/lint.rb +10 -0
  199. data/lib/mongo/loggable.rb +1 -1
  200. data/lib/mongo/logger.rb +1 -1
  201. data/lib/mongo/monitoring.rb +39 -1
  202. data/lib/mongo/monitoring/cmap_log_subscriber.rb +1 -1
  203. data/lib/mongo/monitoring/command_log_subscriber.rb +20 -5
  204. data/lib/mongo/monitoring/event.rb +1 -1
  205. data/lib/mongo/monitoring/event/cmap.rb +1 -1
  206. data/lib/mongo/monitoring/event/cmap/base.rb +1 -1
  207. data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +1 -1
  208. data/lib/mongo/monitoring/event/cmap/connection_check_out_started.rb +1 -1
  209. data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +1 -1
  210. data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +1 -1
  211. data/lib/mongo/monitoring/event/cmap/connection_closed.rb +1 -1
  212. data/lib/mongo/monitoring/event/cmap/connection_created.rb +1 -1
  213. data/lib/mongo/monitoring/event/cmap/connection_ready.rb +1 -1
  214. data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +1 -1
  215. data/lib/mongo/monitoring/event/cmap/pool_closed.rb +1 -1
  216. data/lib/mongo/monitoring/event/cmap/pool_created.rb +1 -1
  217. data/lib/mongo/monitoring/event/command_failed.rb +12 -1
  218. data/lib/mongo/monitoring/event/command_started.rb +44 -3
  219. data/lib/mongo/monitoring/event/command_succeeded.rb +12 -1
  220. data/lib/mongo/monitoring/event/secure.rb +8 -2
  221. data/lib/mongo/monitoring/event/server_closed.rb +2 -2
  222. data/lib/mongo/monitoring/event/server_description_changed.rb +28 -5
  223. data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +10 -3
  224. data/lib/mongo/monitoring/event/server_heartbeat_started.rb +10 -3
  225. data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +10 -3
  226. data/lib/mongo/monitoring/event/server_opening.rb +2 -2
  227. data/lib/mongo/monitoring/event/topology_changed.rb +2 -2
  228. data/lib/mongo/monitoring/event/topology_closed.rb +2 -2
  229. data/lib/mongo/monitoring/event/topology_opening.rb +2 -2
  230. data/lib/mongo/monitoring/publishable.rb +9 -9
  231. data/lib/mongo/monitoring/sdam_log_subscriber.rb +1 -1
  232. data/lib/mongo/monitoring/server_closed_log_subscriber.rb +1 -1
  233. data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +10 -2
  234. data/lib/mongo/monitoring/server_opening_log_subscriber.rb +1 -1
  235. data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +2 -2
  236. data/lib/mongo/monitoring/topology_closed_log_subscriber.rb +1 -1
  237. data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +1 -1
  238. data/lib/mongo/monitoring/unified_sdam_log_subscriber.rb +1 -1
  239. data/lib/mongo/operation.rb +1 -0
  240. data/lib/mongo/operation/aggregate.rb +1 -1
  241. data/lib/mongo/operation/aggregate/command.rb +5 -5
  242. data/lib/mongo/operation/aggregate/op_msg.rb +1 -1
  243. data/lib/mongo/operation/aggregate/result.rb +1 -1
  244. data/lib/mongo/operation/collections_info.rb +3 -36
  245. data/lib/mongo/operation/collections_info/command.rb +45 -0
  246. data/lib/mongo/operation/collections_info/result.rb +17 -2
  247. data/lib/mongo/operation/command.rb +1 -1
  248. data/lib/mongo/operation/command/command.rb +3 -3
  249. data/lib/mongo/operation/command/op_msg.rb +1 -1
  250. data/lib/mongo/operation/count.rb +1 -1
  251. data/lib/mongo/operation/count/command.rb +3 -3
  252. data/lib/mongo/operation/count/op_msg.rb +1 -1
  253. data/lib/mongo/operation/create.rb +1 -1
  254. data/lib/mongo/operation/create/command.rb +3 -3
  255. data/lib/mongo/operation/create/op_msg.rb +1 -1
  256. data/lib/mongo/operation/create_index.rb +1 -1
  257. data/lib/mongo/operation/create_index/command.rb +4 -4
  258. data/lib/mongo/operation/create_index/op_msg.rb +6 -3
  259. data/lib/mongo/operation/create_user.rb +1 -1
  260. data/lib/mongo/operation/create_user/command.rb +4 -4
  261. data/lib/mongo/operation/create_user/op_msg.rb +2 -2
  262. data/lib/mongo/operation/delete.rb +1 -1
  263. data/lib/mongo/operation/delete/bulk_result.rb +1 -1
  264. data/lib/mongo/operation/delete/command.rb +4 -4
  265. data/lib/mongo/operation/delete/legacy.rb +2 -2
  266. data/lib/mongo/operation/delete/op_msg.rb +4 -4
  267. data/lib/mongo/operation/delete/result.rb +2 -2
  268. data/lib/mongo/operation/distinct.rb +1 -1
  269. data/lib/mongo/operation/distinct/command.rb +3 -3
  270. data/lib/mongo/operation/distinct/op_msg.rb +1 -1
  271. data/lib/mongo/operation/drop.rb +1 -1
  272. data/lib/mongo/operation/drop/command.rb +3 -3
  273. data/lib/mongo/operation/drop/op_msg.rb +1 -1
  274. data/lib/mongo/operation/drop_database.rb +1 -1
  275. data/lib/mongo/operation/drop_database/command.rb +3 -3
  276. data/lib/mongo/operation/drop_database/op_msg.rb +1 -1
  277. data/lib/mongo/operation/drop_index.rb +1 -1
  278. data/lib/mongo/operation/drop_index/command.rb +4 -4
  279. data/lib/mongo/operation/drop_index/op_msg.rb +2 -2
  280. data/lib/mongo/operation/explain.rb +1 -1
  281. data/lib/mongo/operation/explain/command.rb +3 -3
  282. data/lib/mongo/operation/explain/legacy.rb +3 -3
  283. data/lib/mongo/operation/explain/op_msg.rb +1 -1
  284. data/lib/mongo/operation/explain/result.rb +1 -1
  285. data/lib/mongo/operation/find.rb +1 -1
  286. data/lib/mongo/operation/find/command.rb +3 -3
  287. data/lib/mongo/operation/find/legacy.rb +3 -3
  288. data/lib/mongo/operation/find/legacy/result.rb +1 -1
  289. data/lib/mongo/operation/find/op_msg.rb +2 -12
  290. data/lib/mongo/operation/find/result.rb +1 -1
  291. data/lib/mongo/operation/get_more.rb +1 -1
  292. data/lib/mongo/operation/get_more/command.rb +3 -3
  293. data/lib/mongo/operation/get_more/legacy.rb +2 -2
  294. data/lib/mongo/operation/get_more/op_msg.rb +2 -12
  295. data/lib/mongo/operation/get_more/result.rb +1 -1
  296. data/lib/mongo/operation/indexes.rb +1 -1
  297. data/lib/mongo/operation/indexes/command.rb +3 -3
  298. data/lib/mongo/operation/indexes/legacy.rb +4 -4
  299. data/lib/mongo/operation/indexes/op_msg.rb +1 -1
  300. data/lib/mongo/operation/indexes/result.rb +1 -1
  301. data/lib/mongo/operation/insert.rb +3 -2
  302. data/lib/mongo/operation/insert/bulk_result.rb +6 -2
  303. data/lib/mongo/operation/insert/command.rb +7 -7
  304. data/lib/mongo/operation/insert/legacy.rb +9 -5
  305. data/lib/mongo/operation/insert/op_msg.rb +6 -6
  306. data/lib/mongo/operation/insert/result.rb +7 -4
  307. data/lib/mongo/operation/kill_cursors.rb +1 -1
  308. data/lib/mongo/operation/kill_cursors/command.rb +3 -3
  309. data/lib/mongo/operation/kill_cursors/legacy.rb +2 -2
  310. data/lib/mongo/operation/kill_cursors/op_msg.rb +1 -1
  311. data/lib/mongo/operation/list_collections.rb +1 -1
  312. data/lib/mongo/operation/list_collections/command.rb +4 -4
  313. data/lib/mongo/operation/list_collections/op_msg.rb +2 -2
  314. data/lib/mongo/operation/list_collections/result.rb +1 -1
  315. data/lib/mongo/operation/map_reduce.rb +1 -1
  316. data/lib/mongo/operation/map_reduce/command.rb +3 -3
  317. data/lib/mongo/operation/map_reduce/op_msg.rb +1 -1
  318. data/lib/mongo/operation/map_reduce/result.rb +1 -1
  319. data/lib/mongo/operation/op_msg_base.rb +3 -3
  320. data/lib/mongo/operation/parallel_scan.rb +1 -1
  321. data/lib/mongo/operation/parallel_scan/command.rb +5 -5
  322. data/lib/mongo/operation/parallel_scan/op_msg.rb +2 -2
  323. data/lib/mongo/operation/parallel_scan/result.rb +1 -1
  324. data/lib/mongo/operation/remove_user.rb +1 -1
  325. data/lib/mongo/operation/remove_user/command.rb +4 -4
  326. data/lib/mongo/operation/remove_user/op_msg.rb +2 -2
  327. data/lib/mongo/operation/result.rb +28 -4
  328. data/lib/mongo/operation/shared/bypass_document_validation.rb +10 -4
  329. data/lib/mongo/operation/shared/causal_consistency_supported.rb +3 -3
  330. data/lib/mongo/operation/shared/collections_info_or_list_collections.rb +56 -0
  331. data/lib/mongo/operation/shared/executable.rb +46 -28
  332. data/lib/mongo/operation/shared/executable_no_validate.rb +3 -3
  333. data/lib/mongo/operation/shared/executable_transaction_label.rb +1 -1
  334. data/lib/mongo/operation/shared/idable.rb +1 -1
  335. data/lib/mongo/operation/shared/limited.rb +10 -2
  336. data/lib/mongo/operation/shared/object_id_generator.rb +1 -1
  337. data/lib/mongo/operation/shared/op_msg_or_command.rb +7 -5
  338. data/lib/mongo/operation/shared/op_msg_or_find_command.rb +8 -6
  339. data/lib/mongo/operation/shared/op_msg_or_list_indexes_command.rb +8 -6
  340. data/lib/mongo/operation/shared/polymorphic_lookup.rb +1 -1
  341. data/lib/mongo/operation/shared/polymorphic_result.rb +1 -1
  342. data/lib/mongo/operation/shared/read_preference_supported.rb +19 -16
  343. data/lib/mongo/operation/shared/response_handling.rb +83 -8
  344. data/lib/mongo/operation/shared/result/aggregatable.rb +1 -1
  345. data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +1 -1
  346. data/lib/mongo/operation/shared/sessions_supported.rb +50 -27
  347. data/lib/mongo/operation/shared/specifiable.rb +32 -20
  348. data/lib/mongo/operation/shared/write.rb +25 -19
  349. data/lib/mongo/operation/shared/write_concern_supported.rb +6 -6
  350. data/lib/mongo/operation/update.rb +1 -1
  351. data/lib/mongo/operation/update/bulk_result.rb +1 -1
  352. data/lib/mongo/operation/update/command.rb +4 -4
  353. data/lib/mongo/operation/update/legacy.rb +2 -2
  354. data/lib/mongo/operation/update/legacy/result.rb +1 -1
  355. data/lib/mongo/operation/update/op_msg.rb +4 -4
  356. data/lib/mongo/operation/update/result.rb +2 -2
  357. data/lib/mongo/operation/update_user.rb +1 -1
  358. data/lib/mongo/operation/update_user/command.rb +4 -4
  359. data/lib/mongo/operation/update_user/op_msg.rb +2 -2
  360. data/lib/mongo/operation/users_info.rb +1 -1
  361. data/lib/mongo/operation/users_info/command.rb +4 -4
  362. data/lib/mongo/operation/users_info/op_msg.rb +2 -2
  363. data/lib/mongo/operation/users_info/result.rb +1 -1
  364. data/lib/mongo/options.rb +1 -1
  365. data/lib/mongo/options/mapper.rb +1 -1
  366. data/lib/mongo/options/redacted.rb +1 -1
  367. data/lib/mongo/protocol/bit_vector.rb +1 -1
  368. data/lib/mongo/protocol/compressed.rb +1 -1
  369. data/lib/mongo/protocol/delete.rb +1 -1
  370. data/lib/mongo/protocol/get_more.rb +1 -1
  371. data/lib/mongo/protocol/insert.rb +1 -1
  372. data/lib/mongo/protocol/kill_cursors.rb +1 -1
  373. data/lib/mongo/protocol/message.rb +35 -7
  374. data/lib/mongo/protocol/msg.rb +18 -4
  375. data/lib/mongo/protocol/query.rb +1 -1
  376. data/lib/mongo/protocol/registry.rb +1 -1
  377. data/lib/mongo/protocol/reply.rb +1 -1
  378. data/lib/mongo/protocol/serializers.rb +1 -1
  379. data/lib/mongo/protocol/update.rb +1 -1
  380. data/lib/mongo/retryable.rb +23 -10
  381. data/lib/mongo/semaphore.rb +1 -1
  382. data/lib/mongo/server.rb +40 -8
  383. data/lib/mongo/server/app_metadata.rb +44 -7
  384. data/lib/mongo/server/connection.rb +37 -133
  385. data/lib/mongo/server/connection_base.rb +22 -7
  386. data/lib/mongo/server/connection_common.rb +75 -1
  387. data/lib/mongo/server/connection_pool.rb +20 -1
  388. data/lib/mongo/server/connection_pool/populator.rb +1 -1
  389. data/lib/mongo/server/context.rb +1 -1
  390. data/lib/mongo/server/description.rb +49 -2
  391. data/lib/mongo/server/description/features.rb +12 -3
  392. data/lib/mongo/server/monitor.rb +145 -69
  393. data/lib/mongo/server/monitor/app_metadata.rb +1 -1
  394. data/lib/mongo/server/monitor/connection.rb +110 -80
  395. data/lib/mongo/server/pending_connection.rb +215 -3
  396. data/lib/mongo/server/push_monitor.rb +173 -0
  397. data/{spec/runners/transactions/context.rb → lib/mongo/server/push_monitor/connection.rb} +9 -14
  398. data/lib/mongo/server/round_trip_time_averager.rb +12 -3
  399. data/lib/mongo/server_selector.rb +2 -2
  400. data/lib/mongo/server_selector/{selectable.rb → base.rb} +159 -86
  401. data/lib/mongo/server_selector/nearest.rb +26 -21
  402. data/lib/mongo/server_selector/primary.rb +24 -28
  403. data/lib/mongo/server_selector/primary_preferred.rb +32 -25
  404. data/lib/mongo/server_selector/secondary.rb +26 -21
  405. data/lib/mongo/server_selector/secondary_preferred.rb +29 -34
  406. data/lib/mongo/session.rb +14 -1
  407. data/lib/mongo/session/server_session.rb +1 -1
  408. data/lib/mongo/session/session_pool.rb +1 -1
  409. data/lib/mongo/socket.rb +121 -41
  410. data/lib/mongo/socket/ssl.rb +98 -35
  411. data/lib/mongo/socket/tcp.rb +39 -31
  412. data/lib/mongo/socket/unix.rb +14 -6
  413. data/lib/mongo/srv.rb +1 -1
  414. data/lib/mongo/srv/monitor.rb +1 -1
  415. data/lib/mongo/srv/resolver.rb +1 -1
  416. data/lib/mongo/srv/result.rb +1 -1
  417. data/lib/mongo/timeout.rb +9 -9
  418. data/lib/mongo/topology_version.rb +89 -0
  419. data/lib/mongo/uri.rb +61 -47
  420. data/lib/mongo/uri/srv_protocol.rb +9 -1
  421. data/lib/mongo/utils.rb +62 -0
  422. data/lib/mongo/version.rb +2 -2
  423. data/lib/mongo/write_concern.rb +1 -1
  424. data/lib/mongo/write_concern/acknowledged.rb +1 -1
  425. data/lib/mongo/write_concern/base.rb +1 -1
  426. data/lib/mongo/write_concern/unacknowledged.rb +1 -1
  427. data/mongo.gemspec +1 -1
  428. data/spec/NOTES.aws-auth.md +291 -0
  429. data/spec/README.aws-auth.md +318 -0
  430. data/spec/README.md +64 -17
  431. data/spec/integration/auth_spec.rb +29 -9
  432. data/spec/integration/awaited_ismaster_spec.rb +28 -0
  433. data/spec/integration/aws_auth_request_spec.rb +74 -0
  434. data/spec/integration/aws_credentials_retriever_spec.rb +103 -0
  435. data/spec/integration/bson_symbol_spec.rb +4 -2
  436. data/spec/integration/change_stream_examples_spec.rb +6 -2
  437. data/spec/integration/change_stream_spec.rb +123 -51
  438. data/spec/integration/check_clean_slate_spec.rb +16 -0
  439. data/spec/integration/client_construction_aws_auth_spec.rb +191 -0
  440. data/spec/integration/client_construction_spec.rb +2 -1
  441. data/spec/integration/collection_indexes_prose_spec.rb +55 -0
  442. data/spec/integration/command_monitoring_spec.rb +30 -6
  443. data/spec/integration/command_spec.rb +11 -9
  444. data/spec/integration/connect_single_rs_name_spec.rb +10 -5
  445. data/spec/integration/connection_spec.rb +7 -3
  446. data/spec/integration/crud_spec.rb +32 -4
  447. data/spec/integration/cursor_reaping_spec.rb +14 -10
  448. data/spec/integration/docs_examples_spec.rb +6 -0
  449. data/spec/integration/fork_reconnect_spec.rb +143 -0
  450. data/spec/integration/get_more_spec.rb +10 -3
  451. data/spec/integration/heartbeat_events_spec.rb +5 -24
  452. data/spec/integration/read_concern_spec.rb +1 -1
  453. data/spec/integration/read_preference_spec.rb +41 -11
  454. data/spec/integration/reconnect_spec.rb +2 -3
  455. data/spec/integration/retryable_errors_spec.rb +33 -14
  456. data/spec/integration/{retryable_writes_spec.rb → retryable_writes/retryable_writes_36_and_older_spec.rb} +55 -51
  457. data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +401 -0
  458. data/spec/integration/retryable_writes/shared/adds_diagnostics.rb +15 -0
  459. data/spec/integration/retryable_writes/shared/does_not_support_retries.rb +24 -0
  460. data/spec/integration/retryable_writes/shared/only_supports_legacy_retries.rb +25 -0
  461. data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +215 -0
  462. data/spec/integration/retryable_writes/shared/performs_modern_retries.rb +232 -0
  463. data/spec/integration/retryable_writes/shared/performs_no_retries.rb +110 -0
  464. data/spec/integration/retryable_writes/shared/supports_legacy_retries.rb +19 -0
  465. data/spec/integration/retryable_writes/shared/supports_modern_retries.rb +25 -0
  466. data/spec/integration/retryable_writes/shared/supports_retries.rb +16 -0
  467. data/spec/integration/sdam_error_handling_spec.rb +159 -22
  468. data/spec/integration/sdam_events_spec.rb +80 -5
  469. data/spec/integration/sdam_prose_spec.rb +64 -0
  470. data/spec/integration/server_monitor_spec.rb +25 -1
  471. data/spec/integration/server_spec.rb +42 -26
  472. data/spec/integration/size_limit_spec.rb +3 -3
  473. data/spec/integration/ssl_uri_options_spec.rb +2 -2
  474. data/spec/integration/step_down_spec.rb +15 -15
  475. data/spec/integration/transactions_api_examples_spec.rb +59 -0
  476. data/spec/integration/transactions_examples_spec.rb +5 -2
  477. data/spec/integration/x509_auth_spec.rb +109 -0
  478. data/spec/kerberos/kerberos_spec.rb +10 -6
  479. data/spec/lite_spec_helper.rb +32 -23
  480. data/spec/mongo/address/ipv4_spec.rb +1 -1
  481. data/spec/mongo/address_spec.rb +2 -2
  482. data/spec/mongo/auth/aws/request_region_spec.rb +42 -0
  483. data/spec/mongo/auth/aws/request_spec.rb +76 -0
  484. data/spec/mongo/auth/cr_spec.rb +7 -7
  485. data/spec/mongo/auth/gssapi/conversation_spec.rb +121 -0
  486. data/spec/mongo/auth/invalid_mechanism_spec.rb +1 -1
  487. data/spec/mongo/auth/ldap/conversation_spec.rb +1 -1
  488. data/spec/mongo/auth/ldap_spec.rb +3 -3
  489. data/spec/mongo/auth/scram/conversation_spec.rb +119 -334
  490. data/spec/mongo/auth/scram256/conversation_spec.rb +171 -0
  491. data/spec/mongo/auth/{scram/negotiation_spec.rb → scram_negotiation_spec.rb} +13 -8
  492. data/spec/mongo/auth/scram_spec.rb +29 -69
  493. data/spec/mongo/auth/user_spec.rb +1 -1
  494. data/spec/mongo/auth/x509/conversation_spec.rb +1 -1
  495. data/spec/mongo/auth/x509_spec.rb +8 -8
  496. data/spec/mongo/auth_spec.rb +4 -4
  497. data/spec/mongo/bulk_write_spec.rb +206 -2
  498. data/spec/mongo/client_construction_spec.rb +620 -86
  499. data/spec/mongo/client_encryption_spec.rb +16 -10
  500. data/spec/mongo/client_spec.rb +59 -5
  501. data/spec/mongo/cluster/topology/replica_set_spec.rb +52 -9
  502. data/spec/mongo/cluster/topology/single_spec.rb +4 -2
  503. data/spec/mongo/cluster_spec.rb +37 -36
  504. data/spec/mongo/collection/view/aggregation_spec.rb +6 -2
  505. data/spec/mongo/collection/view/builder/find_command_spec.rb +17 -6
  506. data/spec/mongo/collection/view/change_stream_resume_spec.rb +392 -0
  507. data/spec/mongo/collection/view/change_stream_spec.rb +0 -318
  508. data/spec/mongo/collection/view/iterable_spec.rb +38 -0
  509. data/spec/mongo/collection/view/map_reduce_spec.rb +6 -2
  510. data/spec/mongo/collection/view/readable_spec.rb +15 -1
  511. data/spec/mongo/collection/view/writable_spec.rb +208 -1
  512. data/spec/mongo/collection_spec.rb +507 -43
  513. data/spec/mongo/crypt/data_key_context_spec.rb +1 -1
  514. data/spec/mongo/cursor/builder/get_more_command_spec.rb +6 -1
  515. data/spec/mongo/cursor/builder/op_get_more_spec.rb +6 -1
  516. data/spec/mongo/cursor/builder/op_kill_cursors_spec.rb +6 -1
  517. data/spec/mongo/cursor_spec.rb +9 -1
  518. data/spec/mongo/database_spec.rb +315 -10
  519. data/spec/mongo/distinguishing_semaphore_spec.rb +63 -0
  520. data/spec/mongo/error/operation_failure_heavy_spec.rb +58 -0
  521. data/spec/mongo/error/operation_failure_spec.rb +167 -69
  522. data/spec/mongo/error/unsupported_option_spec.rb +54 -0
  523. data/spec/mongo/grid/fs_bucket_spec.rb +18 -0
  524. data/spec/mongo/grid/stream/write_spec.rb +32 -0
  525. data/spec/mongo/index/view_spec.rb +312 -0
  526. data/spec/mongo/monitoring/event/server_description_changed_spec.rb +1 -4
  527. data/spec/mongo/operation/aggregate/result_spec.rb +6 -1
  528. data/spec/mongo/operation/delete/bulk_spec.rb +18 -6
  529. data/spec/mongo/operation/delete/op_msg_spec.rb +22 -14
  530. data/spec/mongo/operation/find/legacy_spec.rb +27 -7
  531. data/spec/mongo/operation/get_more_spec.rb +6 -1
  532. data/spec/mongo/operation/insert/bulk_spec.rb +21 -7
  533. data/spec/mongo/operation/insert/command_spec.rb +4 -0
  534. data/spec/mongo/operation/insert/op_msg_spec.rb +22 -14
  535. data/spec/mongo/operation/limited_spec.rb +5 -3
  536. data/spec/mongo/operation/read_preference_legacy_spec.rb +16 -4
  537. data/spec/mongo/operation/read_preference_op_msg_spec.rb +115 -5
  538. data/spec/mongo/operation/result_spec.rb +6 -1
  539. data/spec/mongo/operation/update/bulk_spec.rb +18 -6
  540. data/spec/mongo/operation/update/command_spec.rb +4 -0
  541. data/spec/mongo/operation/update/op_msg_spec.rb +22 -14
  542. data/spec/mongo/protocol/msg_spec.rb +10 -0
  543. data/spec/mongo/retryable_spec.rb +71 -70
  544. data/spec/mongo/semaphore_spec.rb +51 -0
  545. data/spec/mongo/server/app_metadata_shared.rb +136 -0
  546. data/spec/mongo/server/app_metadata_spec.rb +8 -1
  547. data/spec/mongo/server/connection_auth_spec.rb +33 -14
  548. data/spec/mongo/server/connection_pool_spec.rb +0 -31
  549. data/spec/mongo/server/connection_spec.rb +118 -71
  550. data/spec/mongo/server/monitor/app_metadata_spec.rb +8 -1
  551. data/spec/mongo/server/monitor/connection_spec.rb +1 -82
  552. data/spec/mongo/server/monitor_spec.rb +76 -17
  553. data/spec/mongo/server/round_trip_time_averager_spec.rb +5 -3
  554. data/spec/mongo/server_selector/nearest_spec.rb +24 -23
  555. data/spec/mongo/server_selector/primary_preferred_spec.rb +27 -26
  556. data/spec/mongo/server_selector/primary_spec.rb +27 -9
  557. data/spec/mongo/server_selector/secondary_preferred_spec.rb +40 -23
  558. data/spec/mongo/server_selector/secondary_spec.rb +19 -18
  559. data/spec/mongo/server_selector_spec.rb +4 -5
  560. data/spec/mongo/session/session_pool_spec.rb +7 -3
  561. data/spec/mongo/session_spec.rb +35 -0
  562. data/spec/mongo/socket/ssl_spec.rb +2 -2
  563. data/spec/mongo/socket/tcp_spec.rb +2 -2
  564. data/spec/mongo/socket/unix_spec.rb +2 -2
  565. data/spec/mongo/socket_spec.rb +9 -9
  566. data/spec/mongo/timeout_spec.rb +22 -68
  567. data/spec/mongo/uri_spec.rb +21 -6
  568. data/spec/runners/auth.rb +5 -6
  569. data/spec/runners/change_streams/outcome.rb +42 -0
  570. data/spec/runners/change_streams/spec.rb +57 -0
  571. data/spec/runners/change_streams/test.rb +229 -0
  572. data/spec/runners/cmap.rb +1 -1
  573. data/spec/runners/cmap/verifier.rb +1 -1
  574. data/spec/runners/command_monitoring.rb +4 -35
  575. data/spec/runners/connection_string.rb +3 -2
  576. data/spec/runners/crud.rb +2 -2
  577. data/spec/runners/crud/context.rb +10 -6
  578. data/spec/runners/crud/operation.rb +177 -55
  579. data/spec/runners/crud/outcome.rb +1 -1
  580. data/spec/runners/crud/spec.rb +0 -7
  581. data/spec/runners/crud/test.rb +8 -26
  582. data/spec/runners/crud/test_base.rb +47 -0
  583. data/spec/runners/crud/verifier.rb +21 -3
  584. data/spec/runners/gridfs.rb +1 -1
  585. data/spec/runners/{server_discovery_and_monitoring.rb → sdam.rb} +41 -22
  586. data/spec/runners/sdam/verifier.rb +26 -8
  587. data/spec/runners/server_selection.rb +242 -28
  588. data/spec/runners/transactions.rb +13 -14
  589. data/spec/runners/transactions/operation.rb +155 -25
  590. data/spec/runners/transactions/spec.rb +1 -1
  591. data/spec/runners/transactions/test.rb +103 -65
  592. data/spec/shared/LICENSE +20 -0
  593. data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
  594. data/spec/shared/lib/mrss/constraints.rb +303 -0
  595. data/spec/shared/lib/mrss/lite_constraints.rb +175 -0
  596. data/spec/shared/lib/mrss/spec_organizer.rb +149 -0
  597. data/spec/spec_tests/auth_spec.rb +2 -0
  598. data/spec/spec_tests/change_streams_spec.rb +39 -4
  599. data/spec/spec_tests/client_side_encryption_spec.rb +3 -0
  600. data/spec/spec_tests/cmap_spec.rb +5 -0
  601. data/spec/spec_tests/command_monitoring_spec.rb +25 -12
  602. data/spec/spec_tests/connection_string_spec.rb +2 -0
  603. data/spec/spec_tests/crud_spec.rb +3 -1
  604. data/spec/spec_tests/data/auth/connection-string.yml +57 -1
  605. data/spec/spec_tests/data/change_streams/change-streams-errors.yml +27 -1
  606. data/spec/spec_tests/data/change_streams/change-streams-resume-errorLabels.yml +1105 -0
  607. data/spec/spec_tests/data/change_streams/change-streams-resume-whitelist.yml +1173 -0
  608. data/spec/spec_tests/data/change_streams/change-streams.yml +5 -4
  609. data/spec/spec_tests/data/crud_v2/aggregate-merge.yml +1 -1
  610. data/spec/spec_tests/data/crud_v2/bulkWrite-arrayFilters.yml +33 -11
  611. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-clientError.yml +63 -0
  612. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-serverError.yml +92 -0
  613. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint.yml +103 -0
  614. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-clientError.yml +90 -0
  615. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-serverError.yml +147 -0
  616. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint.yml +164 -0
  617. data/spec/spec_tests/data/crud_v2/deleteMany-hint-clientError.yml +43 -0
  618. data/spec/spec_tests/data/crud_v2/deleteMany-hint-serverError.yml +62 -0
  619. data/spec/spec_tests/data/crud_v2/deleteMany-hint.yml +58 -0
  620. data/spec/spec_tests/data/crud_v2/deleteOne-hint-clientError.yml +41 -0
  621. data/spec/spec_tests/data/crud_v2/deleteOne-hint-serverError.yml +60 -0
  622. data/spec/spec_tests/data/crud_v2/deleteOne-hint.yml +57 -0
  623. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-clientError.yml +28 -0
  624. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-serverError.yml +44 -0
  625. data/spec/spec_tests/data/crud_v2/find-allowdiskuse.yml +50 -0
  626. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-clientError.yml +45 -0
  627. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-serverError.yml +60 -0
  628. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint.yml +56 -0
  629. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-clientError.yml +40 -0
  630. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-serverError.yml +59 -0
  631. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint.yml +55 -0
  632. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-clientError.yml +40 -0
  633. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-serverError.yml +58 -0
  634. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint.yml +55 -0
  635. data/spec/spec_tests/data/crud_v2/replaceOne-hint.yml +61 -0
  636. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-delete-hint-clientError.yml +60 -0
  637. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-update-hint-clientError.yml +88 -0
  638. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteMany-hint-clientError.yml +40 -0
  639. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteOne-hint-clientError.yml +38 -0
  640. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndDelete-hint-clientError.yml +42 -0
  641. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndReplace-hint-clientError.yml +40 -0
  642. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndUpdate-hint-clientError.yml +40 -0
  643. data/spec/spec_tests/data/crud_v2/unacknowledged-replaceOne-hint-clientError.yml +40 -0
  644. data/spec/spec_tests/data/crud_v2/unacknowledged-updateMany-hint-clientError.yml +43 -0
  645. data/spec/spec_tests/data/crud_v2/unacknowledged-updateOne-hint-clientError.yml +40 -0
  646. data/spec/spec_tests/data/crud_v2/updateMany-hint-clientError.yml +45 -0
  647. data/spec/spec_tests/data/crud_v2/updateMany-hint-serverError.yml +66 -0
  648. data/spec/spec_tests/data/crud_v2/updateMany-hint.yml +65 -0
  649. data/spec/spec_tests/data/crud_v2/updateOne-hint-clientError.yml +43 -0
  650. data/spec/spec_tests/data/crud_v2/updateOne-hint-serverError.yml +62 -0
  651. data/spec/spec_tests/data/crud_v2/updateOne-hint.yml +61 -0
  652. data/spec/spec_tests/data/crud_v2/updateWithPipelines.yml +65 -0
  653. data/spec/spec_tests/data/dns_seedlist_discovery/direct-connection-false.yml +10 -0
  654. data/spec/spec_tests/data/dns_seedlist_discovery/direct-connection-true.yml +5 -0
  655. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/MaxStalenessTooSmall.yml +15 -0
  656. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/NoKnownServers.yml +4 -3
  657. data/spec/spec_tests/data/max_staleness/Unknown/SmallMaxStaleness.yml +1 -0
  658. data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-2.6.yml +215 -0
  659. data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-3.2.yml +58 -0
  660. data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-3.4.yml +95 -0
  661. data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-4.2.yml +36 -0
  662. data/spec/spec_tests/data/retryable_writes/bulkWrite-errorLabels.yml +77 -0
  663. data/spec/spec_tests/data/retryable_writes/bulkWrite-serverErrors.yml +37 -0
  664. data/spec/spec_tests/data/retryable_writes/deleteOne-errorLabels.yml +48 -0
  665. data/spec/spec_tests/data/retryable_writes/deleteOne-serverErrors.yml +22 -0
  666. data/spec/spec_tests/data/retryable_writes/findOneAndDelete-errorLabels.yml +49 -0
  667. data/spec/spec_tests/data/retryable_writes/findOneAndDelete-serverErrors.yml +23 -0
  668. data/spec/spec_tests/data/retryable_writes/findOneAndReplace-errorLabels.yml +52 -0
  669. data/spec/spec_tests/data/retryable_writes/findOneAndReplace-serverErrors.yml +25 -0
  670. data/spec/spec_tests/data/retryable_writes/findOneAndUpdate-errorLabels.yml +52 -0
  671. data/spec/spec_tests/data/retryable_writes/findOneAndUpdate-serverErrors.yml +24 -0
  672. data/spec/spec_tests/data/retryable_writes/insertMany-errorLabels.yml +54 -0
  673. data/spec/spec_tests/data/retryable_writes/insertMany-serverErrors.yml +24 -0
  674. data/spec/spec_tests/data/retryable_writes/insertOne-errorLabels.yml +44 -0
  675. data/spec/spec_tests/data/retryable_writes/insertOne-serverErrors.yml +69 -0
  676. data/spec/spec_tests/data/retryable_writes/replaceOne-errorLabels.yml +53 -0
  677. data/spec/spec_tests/data/retryable_writes/replaceOne-serverErrors.yml +23 -0
  678. data/spec/spec_tests/data/retryable_writes/updateOne-errorLabels.yml +53 -0
  679. data/spec/spec_tests/data/retryable_writes/updateOne-serverErrors.yml +23 -0
  680. data/spec/spec_tests/data/sdam/errors/error_handling_handshake.yml +54 -0
  681. data/spec/spec_tests/data/sdam/errors/non-stale-network-error.yml +46 -0
  682. data/spec/spec_tests/data/sdam/errors/non-stale-network-timeout-error.yml +37 -0
  683. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-InterruptedAtShutdown.yml +60 -0
  684. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-InterruptedDueToReplStateChange.yml +60 -0
  685. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotMaster.yml +60 -0
  686. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotMasterNoSlaveOk.yml +60 -0
  687. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotMasterOrSecondary.yml +60 -0
  688. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-PrimarySteppedDown.yml +60 -0
  689. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-ShutdownInProgress.yml +60 -0
  690. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-InterruptedAtShutdown.yml +51 -0
  691. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-InterruptedDueToReplStateChange.yml +51 -0
  692. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotMaster.yml +51 -0
  693. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotMasterNoSlaveOk.yml +51 -0
  694. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotMasterOrSecondary.yml +51 -0
  695. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-PrimarySteppedDown.yml +51 -0
  696. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-ShutdownInProgress.yml +51 -0
  697. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-InterruptedAtShutdown.yml +60 -0
  698. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-InterruptedDueToReplStateChange.yml +60 -0
  699. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotMaster.yml +60 -0
  700. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotMasterNoSlaveOk.yml +60 -0
  701. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotMasterOrSecondary.yml +60 -0
  702. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-PrimarySteppedDown.yml +60 -0
  703. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-ShutdownInProgress.yml +60 -0
  704. data/spec/spec_tests/data/sdam/errors/post-42-InterruptedAtShutdown.yml +46 -0
  705. data/spec/spec_tests/data/sdam/errors/post-42-InterruptedDueToReplStateChange.yml +46 -0
  706. data/spec/spec_tests/data/sdam/errors/post-42-NotMaster.yml +46 -0
  707. data/spec/spec_tests/data/sdam/errors/post-42-NotMasterNoSlaveOk.yml +46 -0
  708. data/spec/spec_tests/data/sdam/errors/post-42-NotMasterOrSecondary.yml +46 -0
  709. data/spec/spec_tests/data/sdam/errors/post-42-PrimarySteppedDown.yml +46 -0
  710. data/spec/spec_tests/data/sdam/errors/post-42-ShutdownInProgress.yml +46 -0
  711. data/spec/spec_tests/data/sdam/errors/pre-42-InterruptedAtShutdown.yml +46 -0
  712. data/spec/spec_tests/data/sdam/errors/pre-42-InterruptedDueToReplStateChange.yml +46 -0
  713. data/spec/spec_tests/data/sdam/errors/pre-42-NotMaster.yml +46 -0
  714. data/spec/spec_tests/data/sdam/errors/pre-42-NotMasterNoSlaveOk.yml +46 -0
  715. data/spec/spec_tests/data/sdam/errors/pre-42-NotMasterOrSecondary.yml +46 -0
  716. data/spec/spec_tests/data/sdam/errors/pre-42-PrimarySteppedDown.yml +46 -0
  717. data/spec/spec_tests/data/sdam/errors/pre-42-ShutdownInProgress.yml +46 -0
  718. data/spec/spec_tests/data/sdam/errors/stale-generation-InterruptedAtShutdown.yml +89 -0
  719. data/spec/spec_tests/data/sdam/errors/stale-generation-InterruptedDueToReplStateChange.yml +89 -0
  720. data/spec/spec_tests/data/sdam/errors/stale-generation-NotMaster.yml +89 -0
  721. data/spec/spec_tests/data/sdam/errors/stale-generation-NotMasterNoSlaveOk.yml +89 -0
  722. data/spec/spec_tests/data/sdam/errors/stale-generation-NotMasterOrSecondary.yml +89 -0
  723. data/spec/spec_tests/data/sdam/errors/stale-generation-PrimarySteppedDown.yml +89 -0
  724. data/spec/spec_tests/data/sdam/errors/stale-generation-ShutdownInProgress.yml +89 -0
  725. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-InterruptedAtShutdown.yml +89 -0
  726. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-InterruptedDueToReplStateChange.yml +89 -0
  727. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotMaster.yml +89 -0
  728. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotMasterNoSlaveOk.yml +89 -0
  729. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotMasterOrSecondary.yml +89 -0
  730. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-PrimarySteppedDown.yml +89 -0
  731. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-ShutdownInProgress.yml +89 -0
  732. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-network.yml +80 -0
  733. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-timeout.yml +80 -0
  734. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-InterruptedAtShutdown.yml +89 -0
  735. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-InterruptedDueToReplStateChange.yml +89 -0
  736. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotMaster.yml +89 -0
  737. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotMasterNoSlaveOk.yml +89 -0
  738. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotMasterOrSecondary.yml +89 -0
  739. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-PrimarySteppedDown.yml +89 -0
  740. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-ShutdownInProgress.yml +89 -0
  741. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-network.yml +80 -0
  742. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-timeout.yml +80 -0
  743. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-InterruptedAtShutdown.yml +64 -0
  744. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-InterruptedDueToReplStateChange.yml +64 -0
  745. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotMaster.yml +64 -0
  746. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotMasterNoSlaveOk.yml +64 -0
  747. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotMasterOrSecondary.yml +64 -0
  748. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-PrimarySteppedDown.yml +64 -0
  749. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-ShutdownInProgress.yml +64 -0
  750. data/spec/spec_tests/data/sdam/rs/compatible.yml +2 -0
  751. data/spec/spec_tests/data/sdam/rs/compatible_unknown.yml +2 -0
  752. data/spec/spec_tests/data/sdam/rs/discover_arbiters.yml +2 -2
  753. data/spec/spec_tests/data/sdam/rs/discover_arbiters_replicaset.yml +43 -0
  754. data/spec/spec_tests/data/sdam/rs/discover_ghost.yml +35 -0
  755. data/spec/spec_tests/data/sdam/rs/{ghost_discovered.yml → discover_ghost_replicaset.yml} +1 -1
  756. data/spec/spec_tests/data/sdam/rs/discover_hidden.yml +50 -0
  757. data/spec/spec_tests/data/sdam/rs/discover_hidden_replicaset.yml +50 -0
  758. data/spec/spec_tests/data/sdam/rs/discover_passives.yml +2 -2
  759. data/spec/spec_tests/data/sdam/rs/discover_passives_replicaset.yml +81 -0
  760. data/spec/spec_tests/data/sdam/rs/discover_primary.yml +2 -2
  761. data/spec/spec_tests/data/sdam/rs/discover_primary_replicaset.yml +42 -0
  762. data/spec/spec_tests/data/sdam/rs/discover_rsother.yml +49 -0
  763. data/spec/spec_tests/data/sdam/rs/{rsother_discovered.yml → discover_rsother_replicaset.yml} +1 -1
  764. data/spec/spec_tests/data/sdam/rs/discover_secondary.yml +2 -2
  765. data/spec/spec_tests/data/sdam/rs/discover_secondary_replicaset.yml +43 -0
  766. data/spec/spec_tests/data/sdam/rs/incompatible_arbiter.yml +2 -0
  767. data/spec/spec_tests/data/sdam/rs/incompatible_ghost.yml +2 -0
  768. data/spec/spec_tests/data/sdam/rs/incompatible_other.yml +2 -0
  769. data/spec/spec_tests/data/sdam/rs/primary_mismatched_me.yml +23 -27
  770. data/spec/spec_tests/data/sdam/rs/primary_to_no_primary_mismatched_me.yml +79 -55
  771. data/spec/spec_tests/data/sdam/rs/replicaset_rsnp.yml +20 -0
  772. data/spec/spec_tests/data/sdam/rs/secondary_mismatched_me.yml +3 -2
  773. data/spec/spec_tests/data/sdam/rs/too_new.yml +2 -0
  774. data/spec/spec_tests/data/sdam/rs/topology_version_equal.yml +66 -0
  775. data/spec/spec_tests/data/sdam/rs/topology_version_greater.yml +189 -0
  776. data/spec/spec_tests/data/sdam/rs/topology_version_less.yml +62 -0
  777. data/spec/spec_tests/data/sdam/sharded/discover_single_mongos.yml +23 -0
  778. data/spec/spec_tests/data/sdam/single/direct_connection_external_ip.yml +1 -1
  779. data/spec/spec_tests/data/sdam/single/direct_connection_mongos.yml +2 -2
  780. data/spec/spec_tests/data/sdam/single/direct_connection_replicaset.yml +22 -0
  781. data/spec/spec_tests/data/sdam/single/direct_connection_rsarbiter.yml +2 -2
  782. data/spec/spec_tests/data/sdam/single/direct_connection_rsprimary.yml +2 -2
  783. data/spec/spec_tests/data/sdam/single/direct_connection_rssecondary.yml +2 -2
  784. data/spec/spec_tests/data/sdam/single/direct_connection_slave.yml +1 -1
  785. data/spec/spec_tests/data/sdam/single/direct_connection_standalone.yml +2 -2
  786. data/spec/spec_tests/data/sdam/single/{unavailable_seed.yml → direct_connection_unavailable_seed.yml} +2 -2
  787. data/spec/spec_tests/data/sdam/single/direct_connection_wrong_set_name.yml +38 -0
  788. data/spec/spec_tests/data/sdam/single/discover_standalone.yml +34 -0
  789. data/spec/spec_tests/data/sdam/single/discover_unavailable_seed.yml +28 -0
  790. data/spec/spec_tests/data/sdam/single/too_old_then_upgraded.yml +46 -0
  791. data/spec/spec_tests/data/sdam_integration/cancel-server-check.yml +96 -0
  792. data/spec/spec_tests/data/sdam_integration/connectTimeoutMS.yml +88 -0
  793. data/spec/spec_tests/data/sdam_integration/find-network-error.yml +83 -0
  794. data/spec/spec_tests/data/sdam_integration/find-shutdown-error.yml +116 -0
  795. data/spec/spec_tests/data/sdam_integration/insert-network-error.yml +86 -0
  796. data/spec/spec_tests/data/sdam_integration/insert-shutdown-error.yml +115 -0
  797. data/spec/spec_tests/data/sdam_integration/isMaster-command-error.yml +168 -0
  798. data/spec/spec_tests/data/sdam_integration/isMaster-network-error.yml +162 -0
  799. data/spec/spec_tests/data/sdam_integration/isMaster-timeout.yml +229 -0
  800. data/spec/spec_tests/data/sdam_integration/rediscover-quickly-after-step-down.yml +87 -0
  801. data/spec/spec_tests/data/transactions/create-collection.yml +131 -0
  802. data/spec/spec_tests/data/transactions/create-index.yml +152 -0
  803. data/spec/spec_tests/data/transactions/error-labels.yml +87 -21
  804. data/spec/spec_tests/data/transactions/mongos-recovery-token.yml +1 -0
  805. data/spec/spec_tests/data/transactions/retryable-abort-errorLabels.yml +124 -0
  806. data/spec/spec_tests/data/transactions/retryable-abort.yml +17 -2
  807. data/spec/spec_tests/data/transactions/retryable-commit-errorLabels.yml +132 -0
  808. data/spec/spec_tests/data/transactions/retryable-commit.yml +24 -9
  809. data/spec/spec_tests/data/uri_options/connection-options.yml +43 -0
  810. data/spec/spec_tests/data/uri_options/ruby-auth-options.yml +12 -0
  811. data/spec/spec_tests/data/uri_options/ruby-connection-options.yml +57 -0
  812. data/spec/spec_tests/dns_seedlist_discovery_spec.rb +3 -1
  813. data/spec/spec_tests/gridfs_spec.rb +2 -0
  814. data/spec/spec_tests/max_staleness_spec.rb +5 -141
  815. data/spec/spec_tests/read_write_concern_connection_string_spec.rb +2 -0
  816. data/spec/spec_tests/read_write_concern_operaton_spec.rb +10 -0
  817. data/spec/spec_tests/retryable_reads_spec.rb +4 -2
  818. data/spec/spec_tests/retryable_writes_spec.rb +8 -1
  819. data/spec/spec_tests/sdam_integration_spec.rb +13 -0
  820. data/spec/spec_tests/sdam_monitoring_spec.rb +3 -2
  821. data/spec/spec_tests/sdam_spec.rb +70 -1
  822. data/spec/spec_tests/server_selection_rtt_spec.rb +2 -0
  823. data/spec/spec_tests/server_selection_spec.rb +5 -115
  824. data/spec/spec_tests/transactions_api_spec.rb +5 -0
  825. data/spec/spec_tests/transactions_spec.rb +5 -0
  826. data/spec/spec_tests/uri_options_spec.rb +2 -0
  827. data/spec/stress/cleanup_spec.rb +58 -0
  828. data/spec/stress/connection_pool_stress_spec.rb +11 -13
  829. data/spec/stress/connection_pool_timing_spec.rb +3 -6
  830. data/spec/stress/fork_reconnect_stress_spec.rb +109 -0
  831. data/spec/support/authorization.rb +1 -11
  832. data/spec/support/aws_utils.rb +62 -0
  833. data/spec/support/aws_utils/base.rb +134 -0
  834. data/spec/support/aws_utils/inspector.rb +224 -0
  835. data/spec/support/aws_utils/orchestrator.rb +370 -0
  836. data/spec/support/aws_utils/provisioner.rb +360 -0
  837. data/spec/support/background_thread_registry.rb +6 -2
  838. data/spec/support/child_process_helper.rb +78 -0
  839. data/spec/support/client_registry.rb +6 -24
  840. data/spec/support/cluster_config.rb +5 -0
  841. data/spec/support/common_shortcuts.rb +43 -0
  842. data/spec/support/constraints.rb +27 -7
  843. data/spec/support/crypt.rb +1 -1
  844. data/spec/support/event_subscriber.rb +184 -84
  845. data/spec/support/keyword_struct.rb +26 -0
  846. data/spec/support/lite_constraints.rb +47 -0
  847. data/spec/support/shared/scram_conversation.rb +100 -0
  848. data/spec/support/shared/server_selector.rb +93 -1
  849. data/spec/support/shared/session.rb +29 -21
  850. data/spec/support/spec_config.rb +76 -21
  851. data/spec/support/spec_organizer.rb +129 -0
  852. data/spec/support/spec_setup.rb +9 -5
  853. data/spec/support/utils.rb +161 -24
  854. metadata +1246 -795
  855. metadata.gz.sig +0 -0
  856. data/lib/mongo/server/connectable.rb +0 -107
  857. data/spec/runners/change_streams.rb +0 -262
  858. data/spec/runners/change_streams/operation.rb +0 -89
  859. data/spec/runners/sdam_monitoring.rb +0 -89
  860. data/spec/spec_tests/data/sdam/sharded/ruby_discovered_single_mongos.yml +0 -27
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c810c7a786a9400b9a55c53b59a8078ec63e57703e8cf564e5001188cd33144b
4
- data.tar.gz: 2230cea6d335950d790fb19f414113f7115241ce105d228f7e42a06606795b5e
3
+ metadata.gz: e1730c9274095cd8113fe9ac6d8f48b82ea3228aeb0b327988ab580105c745e3
4
+ data.tar.gz: d8a224877facc2e078dceb63c01eb9351f558ec9ea8a42b9264b909a77855d56
5
5
  SHA512:
6
- metadata.gz: 1c0fd06e7e5e937ddb6a2c27f98574e79cf39e71f10a41b874186478708db34bcc6c9fa0a2cf5d191bf57ef35c613fbc40a47b8fca3ee660bd7e92dbb4f4b956
7
- data.tar.gz: 28f1e23f087f9944ba3f236d78621e48b7fe91b7c75b57e9eac44d67dbe0f345c19d6be2ec96700e36de4952126fe42997702bd018eda9a70e2c25701991853a
6
+ metadata.gz: 93e0f291aa4e52e81decda048473b8330eac80c17251cde83fb66592800d066d14010142893fabb00d896cdf409aa0bc7dd25feba3ca27b443d94cd44a6542e6
7
+ data.tar.gz: 6e19b5c2a3f846ae7ffb0feab92b92bbfb0d88d21536d8e66eaccfc63f3dc8236cf7672b6aa23e9d51696135138529819f7fd3fff122c4d1608f8bf6081086b8
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -5,46 +5,18 @@ Thank you for your interest in contributing to the MongoDB Ruby driver.
5
5
  We are building this software together and appreciate and encourage
6
6
  contributions from the community.
7
7
 
8
- JIRA Tickets
9
- ------------
10
-
11
- The Ruby driver team uses MongoDB JIRA to schedule and track work.
12
- To report a problem with the driver, please [create a new
13
- issue](https://jira.mongodb.org/secure/CreateIssue!default.jspa) in the Ruby
14
- JIRA project. A ticket is appreciated, though not necessary, when submitting
15
- a pull request.
16
-
17
- Please consult [JIRA issues](https://jira.mongodb.org/browse/RUBY)
18
- for existing known issues in the driver.
19
-
20
- Environment
21
- -----------
22
-
23
- We recommend using [rbenv](https://github.com/sstephenson/rbenv) to set up
24
- the Ruby development and testing environments, though other tools like
25
- [RVM](https://rvm.io/) will also work. The driver currently supports
26
- MRI 2.3-2.7 and JRuby 9.2.
27
-
28
- A MongoDB cluster is required to run the tests. Setup procedures and
29
- recommendations for various clusters, as well as how to configure the
30
- driver's test suite, are covered in the [spec
31
- readme](https://github.com/mongodb/mongo-ruby-driver/blob/master/spec/README.md).
32
-
33
- The driver is tested on [Evergreen](https://github.com/evergreen-ci/evergreen),
34
- MongoDB's in house continuous integration platform. After a pull request
35
- is created, one of the Ruby driver team engineers will schedule continous
36
- integration builds on Evergreen.
37
-
38
8
  Pull Requests
39
9
  -------------
40
10
 
41
- Pull requests should be made against the master (development) branch and
11
+ Pull requests should be made against the `master` branch and
42
12
  include relevant tests, if applicable. The Ruby driver team will backport
43
13
  the changes to the stable branches, if needed.
44
14
 
45
- Talk To Us
46
- ----------
15
+ JIRA Tickets
16
+ ------------
17
+
18
+ The Ruby driver team uses [MongoDB JIRA](https://jira.mongodb.org/browse/RUBY)
19
+ to schedule and track work.
47
20
 
48
- We would love to hear from you. If you want to work on something or have
49
- questions please reach out to us by creating a [question](https://jira.mongodb.org/secure/CreateIssue.jspa?pid=10005&issuetype=6)
50
- in JIRA.
21
+ A JIRA ticket is not required when submitting a pull request, but is
22
+ appreciated especially for non-trivial changes.
data/LICENSE CHANGED
@@ -175,7 +175,7 @@
175
175
 
176
176
  END OF TERMS AND CONDITIONS
177
177
 
178
- Copyright (C) 2009-2019 MongoDB, Inc.
178
+ Copyright (C) 2009-2020 MongoDB, Inc.
179
179
 
180
180
  Licensed under the Apache License, Version 2.0 (the "License");
181
181
  you may not use this file except in compliance with the License.
data/README.md CHANGED
@@ -1,6 +1,11 @@
1
- MongoDB Ruby Driver [![Code Climate][codeclimate-img]][codeclimate-url] [![Gem Version][rubygems-img]][rubygems-url]
2
- -----
3
- The officially supported Ruby driver for [MongoDB](http://www.mongodb.org).
1
+ MongoDB Ruby Driver
2
+ [![Gem Version][rubygems-img]][rubygems-url]
3
+ [![Inline docs][inch-img]][inch-url]
4
+ ================================================================
5
+
6
+ The officially supported Ruby driver for [MongoDB](https://www.mongodb.org/).
7
+
8
+ The Ruby driver supports Ruby 2.3-2.7 and JRuby 9.2.
4
9
 
5
10
 
6
11
  Documentation
@@ -9,90 +14,85 @@ Documentation
9
14
  High level documentation and usage examples are located
10
15
  [here](http://docs.mongodb.org/ecosystem/drivers/ruby/).
11
16
 
12
- API docs can be found [here](http://api.mongodb.org/ruby/).
17
+ API documentation can be found [here](https://api.mongodb.org/ruby/).
13
18
 
14
19
 
15
- Support & Feedback
16
- ------------------
20
+ Support
21
+ -------
22
+
23
+ Commercial support for the driver is available through the
24
+ [MongoDB Support Portal](https://support.mongodb.com/).
17
25
 
18
- For issues, questions or feedback related to the Ruby driver, please look into
19
- our [support channels](http://www.mongodb.org/about/support). Please
20
- do not email any of the Ruby developers directly with issues or
21
- questions - you're more likely to get an answer quickly on the
22
- [MongoDB Community Forum](https://community.mongodb.com).
26
+ For questions, discussions or general technical support, please visit the
27
+ [MongoDB Community Forum](https://developer.mongodb.com/community/forums/tags/c/drivers-odms-connectors/7/ruby-driver).
28
+
29
+ Please see [Technical Support](https://docs.mongodb.com/manual/support/) page
30
+ in the documentation for other support resources.
23
31
 
24
32
 
25
33
  Bugs & Feature Requests
26
34
  -----------------------
27
35
 
28
- Do you have a bug to report or a feature request to make?
36
+ To report a bug in the driver or request a feature specific to the Ruby driver:
29
37
 
30
- 1. Visit [our issue tracker](https://jira.mongodb.org) and login (or create an account if necessary).
31
- 2. Navigate to the [RUBY](https://jira.mongodb.org/browse/RUBY) project.
32
- 3. Click 'Create Issue' and fill out all the applicable form fields.
38
+ 1. Visit [our issue tracker](https://jira.mongodb.org/) and login
39
+ (or create an account if you do not have one already).
40
+ 2. Navigate to the [RUBY project](https://jira.mongodb.org/browse/RUBY).
41
+ 3. Click 'Create Issue' and fill out all of the applicable form fields.
33
42
 
34
- When reporting an issue, please keep in mind that all information in JIRA for all driver projects (ex. RUBY, CSHARP, JAVA) and the Core Server (ex. SERVER) project is **PUBLICLY** visible.
43
+ When creating an issue, please keep in mind that all information in JIRA
44
+ for the RUBY project, as well as the core server (the SERVER project),
45
+ is publicly visible.
35
46
 
36
- **PLEASE DO**
47
+ **PLEASE DO:**
37
48
 
38
- * Provide as much information as possible about the issue.
39
- * Provide detailed steps for reproducing the issue.
40
- * Provide any applicable code snippets, stack traces and log data.
41
- * Specify version information for the driver and MongoDB.
49
+ - Provide as much information as possible about the issue.
50
+ - Provide detailed steps for reproducing the issue.
51
+ - Provide any applicable code snippets, stack traces and log data.
52
+ Do not include any sensitive data or server logs.
53
+ - Specify version numbers of the driver and MongoDB server.
42
54
 
43
- **PLEASE DO NOT**
55
+ **PLEASE DO NOT:**
44
56
 
45
- * Provide any sensitive data or server logs.
46
- * Report potential security issues publicly (see 'Security Issues').
57
+ - Provide any sensitive data or server logs.
58
+ - Report potential security issues publicly (see 'Security Issues' below).
47
59
 
48
60
 
49
61
  Security Issues
50
62
  ---------------
51
63
 
52
- If you’ve identified a potential security related issue in a driver or any other
53
- MongoDB project, please report it by following the [instructions here](http://docs.mongodb.org/manual/tutorial/create-a-vulnerability-report).
54
-
55
-
56
- Running Tests
57
- -------------
58
-
59
- The driver uses RSpec as its primary testing tool. Most tests require a
60
- running MongoDB server. To test the driver against a single-node (standalone)
61
- deployment, first launch a server:
62
-
63
- mkdir /tmp/mrb
64
- mongod --dbpath /tmp/mrb --bind_ip 127.0.0.1 --setParameter enableTestCommands=1
64
+ If you have identified a potential security-related issue in the Ruby driver
65
+ (or any other MongoDB product), please report it by following the
66
+ [instructions here](http://docs.mongodb.org/manual/tutorial/create-a-vulnerability-report).
65
67
 
66
- ... then run the tests:
67
68
 
68
- bundle exec rake
69
+ Product Feature Requests
70
+ ------------------------
69
71
 
70
- It is possible to run tests in a specific file, as well as use other
71
- test invocations supported by RSpec:
72
+ To request a feature which is not specific to the Ruby driver, or which
73
+ affects more than the driver alone (for example, a feature which requires
74
+ MongoDB server support), please submit your idea through the
75
+ [MongoDB Feedback Forum](https://feedback.mongodb.com/forums/924286-drivers).
72
76
 
73
- bundle exec rspec path/to/spec.rb:42
74
77
 
75
- Note that certain user accounts have to be created for individual tests to
76
- succeed, and they are not created when the individual tests are run. The
77
- user accounts are created if you run `rake` as mentioned above, and you can
78
- also create them by running:
79
-
80
- bundle exec rake spec:prepare
78
+ Running Tests
79
+ -------------
81
80
 
82
- For further information about supported cluster configurations and how to
83
- configure the test suite, please see the README in the spec directory.
81
+ Please refer to [spec/README.md](spec/README.md) for instructions on how
82
+ to run the driver's test suite.
84
83
 
85
84
 
86
85
  Release History
87
86
  ---------------
88
87
 
89
- Full release notes and release history are available [here](https://github.com/mongodb/mongo-ruby-driver/releases).
88
+ Full release notes and release history are available [on the GitHub releases
89
+ page](https://github.com/mongodb/mongo-ruby-driver/releases).
90
90
 
91
91
 
92
92
  License
93
93
  -------
94
94
 
95
- Copyright (C) 2009-2019 MongoDB, Inc.
95
+ Copyright (C) 2009-2020 MongoDB, Inc.
96
96
 
97
97
  Licensed under the Apache License, Version 2.0 (the "License");
98
98
  you may not use this file except in compliance with the License.
@@ -108,5 +108,5 @@ License
108
108
 
109
109
  [rubygems-img]: https://badge.fury.io/rb/mongo.svg
110
110
  [rubygems-url]: http://badge.fury.io/rb/mongo
111
- [codeclimate-img]: https://codeclimate.com/github/mongodb/mongo-ruby-driver.svg?branch=master
112
- [codeclimate-url]: https://codeclimate.com/github/mongodb/mongo-ruby-driver?branch=master
111
+ [inch-img]: http://inch-ci.org/github/mongodb/mongo-ruby-driver.svg?branch=master
112
+ [inch-url]: http://inch-ci.org/github/mongodb/mongo-ruby-driver
data/Rakefile CHANGED
@@ -45,16 +45,16 @@ namespace :spec do
45
45
  client = ClientRegistry.instance.global_client('authorized')
46
46
  client.database.command(ping: 1)
47
47
  deadline = Time.now + 300
48
- while Time.now < deadline
49
- if client.cluster.send(:sessions_supported?)
48
+ loop do
49
+ begin
50
+ client.cluster.validate_session_support!
50
51
  break
52
+ rescue Mongo::Error::SessionsNotSupported
53
+ if Time.now >= deadline
54
+ raise "Sessions did not become supported in 300 seconds"
55
+ end
56
+ client.cluster.scan!
51
57
  end
52
- sleep 1
53
- client.close
54
- client.reconnect
55
- end
56
- unless client.cluster.send(:sessions_supported?)
57
- raise "Sessions did not become supported in the allowed time"
58
58
  end
59
59
  end
60
60
 
@@ -71,12 +71,18 @@ namespace :spec do
71
71
  SpecConfig.instance.print_summary
72
72
  end
73
73
 
74
- task :ci => ['spec:prepare', :spec]
74
+ task :ci => ['spec:prepare'] do
75
+ $: << File.join(File.dirname(__FILE__), 'spec')
76
+
77
+ require 'support/spec_organizer'
78
+
79
+ SpecOrganizer.new.run
80
+ end
75
81
  end
76
82
 
77
83
  namespace :release do
78
84
  task :check_private_key do
79
- unless File.exists?('gem-private_key.pem')
85
+ unless File.exist?('gem-private_key.pem')
80
86
  raise "No private key present, cannot release"
81
87
  end
82
88
  end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2014-2019 MongoDB, Inc.
1
+ # Copyright (C) 2014-2020 MongoDB Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -27,14 +27,18 @@ require 'timeout'
27
27
  require 'uri'
28
28
  require 'zlib'
29
29
 
30
+ autoload :CGI, 'cgi'
31
+
30
32
  require 'bson'
31
33
 
32
34
  require 'mongo/id'
33
35
  require 'mongo/bson'
34
36
  require 'mongo/semaphore'
37
+ require 'mongo/distinguishing_semaphore'
35
38
  require 'mongo/options'
36
39
  require 'mongo/loggable'
37
40
  require 'mongo/cluster_time'
41
+ require 'mongo/topology_version'
38
42
  require 'mongo/monitoring'
39
43
  require 'mongo/logger'
40
44
  require 'mongo/retryable'
@@ -51,9 +55,11 @@ require 'mongo/collection'
51
55
  require 'mongo/database'
52
56
  require 'mongo/crypt'
53
57
  require 'mongo/client' # Purposely out-of-order so that database is loaded first
58
+ require 'mongo/client_encryption'
54
59
  require 'mongo/dbref'
55
60
  require 'mongo/grid'
56
61
  require 'mongo/index'
62
+ require 'mongo/lint'
57
63
  require 'mongo/server'
58
64
  require 'mongo/server_selector'
59
65
  require 'mongo/session'
@@ -63,5 +69,4 @@ require 'mongo/timeout'
63
69
  require 'mongo/uri'
64
70
  require 'mongo/version'
65
71
  require 'mongo/write_concern'
66
- require 'mongo/lint'
67
- require 'mongo/client_encryption'
72
+ require 'mongo/utils'
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2019 MongoDB Inc.
1
+ # Copyright (C) 2019-2020 MongoDB Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2014-2019 MongoDB, Inc.
1
+ # Copyright (C) 2014-2020 MongoDB Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the 'License');
4
4
  # you may not use this file except in compliance with the License.
@@ -75,7 +75,7 @@ module Mongo
75
75
  end
76
76
  @seed = seed
77
77
  @host, @port = parse_host_port
78
- @options = options
78
+ @options = Hash[options.map { |k, v| [k.to_sym, v] }]
79
79
  end
80
80
 
81
81
  # @return [ String ] seed The seed address.
@@ -172,10 +172,36 @@ module Mongo
172
172
  # address.socket(5, :ssl => true)
173
173
  #
174
174
  # @param [ Float ] socket_timeout The socket timeout.
175
- # @param [ Hash ] ssl_options SSL options.
176
- # @param [ Hash ] options The options.
177
- #
178
- # @option options [ Float ] :connect_timeout Connect timeout.
175
+ # @param [ Hash ] opts The options.
176
+ #
177
+ # @option opts [ Float ] :connect_timeout Connect timeout.
178
+ # @option opts [ true | false ] :ssl Whether to use SSL.
179
+ # @option opts [ String ] :ssl_ca_cert
180
+ # Same as the corresponding Client/Socket::SSL option.
181
+ # @option opts [ Array<OpenSSL::X509::Certificate> ] :ssl_ca_cert_object
182
+ # Same as the corresponding Client/Socket::SSL option.
183
+ # @option opts [ String ] :ssl_ca_cert_string
184
+ # Same as the corresponding Client/Socket::SSL option.
185
+ # @option opts [ String ] :ssl_cert
186
+ # Same as the corresponding Client/Socket::SSL option.
187
+ # @option opts [ OpenSSL::X509::Certificate ] :ssl_cert_object
188
+ # Same as the corresponding Client/Socket::SSL option.
189
+ # @option opts [ String ] :ssl_cert_string
190
+ # Same as the corresponding Client/Socket::SSL option.
191
+ # @option opts [ String ] :ssl_key
192
+ # Same as the corresponding Client/Socket::SSL option.
193
+ # @option opts [ OpenSSL::PKey ] :ssl_key_object
194
+ # Same as the corresponding Client/Socket::SSL option.
195
+ # @option opts [ String ] :ssl_key_pass_phrase
196
+ # Same as the corresponding Client/Socket::SSL option.
197
+ # @option opts [ String ] :ssl_key_string
198
+ # Same as the corresponding Client/Socket::SSL option.
199
+ # @option opts [ true, false ] :ssl_verify
200
+ # Same as the corresponding Client/Socket::SSL option.
201
+ # @option opts [ true, false ] :ssl_verify_certificate
202
+ # Same as the corresponding Client/Socket::SSL option.
203
+ # @option opts [ true, false ] :ssl_verify_hostname
204
+ # Same as the corresponding Client/Socket::SSL option.
179
205
  #
180
206
  # @return [ Mongo::Socket::SSL | Mongo::Socket::TCP | Mongo::Socket::Unix ]
181
207
  # The socket.
@@ -183,17 +209,18 @@ module Mongo
183
209
  # @raise [ Mongo::Error ] If network connection failed.
184
210
  #
185
211
  # @since 2.0.0
186
- def socket(socket_timeout, ssl_options = {}, options = {})
212
+ # @api private
213
+ def socket(socket_timeout, opts = {})
214
+ opts = {
215
+ connect_timeout: Server::CONNECT_TIMEOUT,
216
+ }.update(options).update(Hash[opts.map { |k, v| [k.to_sym, v] }])
217
+
187
218
  map_exceptions do
188
219
  if seed.downcase =~ Unix::MATCH
189
220
  specific_address = Unix.new(seed.downcase)
190
- return specific_address.socket(socket_timeout, ssl_options, options)
221
+ return specific_address.socket(socket_timeout, opts)
191
222
  end
192
223
 
193
- options = {
194
- connect_timeout: Server::CONNECT_TIMEOUT,
195
- }.update(options)
196
-
197
224
  # When the driver connects to "localhost", it only attempts IPv4
198
225
  # connections. When the driver connects to other hosts, it will
199
226
  # attempt both IPv4 and IPv6 connections.
@@ -210,7 +237,7 @@ module Mongo
210
237
  results.each do |family, address_str|
211
238
  begin
212
239
  specific_address = FAMILY_MAP[family].new(address_str, port, host)
213
- socket = specific_address.socket(socket_timeout, ssl_options, options)
240
+ socket = specific_address.socket(socket_timeout, opts)
214
241
  return socket
215
242
  rescue IOError, SystemCallError, Error::SocketTimeoutError, Error::SocketError => e
216
243
  error = e
@@ -259,7 +286,7 @@ module Mongo
259
286
  rescue IOError, SystemCallError => e
260
287
  raise Error::SocketError, "#{e.class}: #{e} (for #{self})"
261
288
  rescue OpenSSL::SSL::SSLError => e
262
- raise Error::SocketError, "#{e.class}: #{e} (for #{self}) (#{SSL_ERROR})"
289
+ raise Error::SocketError, "#{e.class}: #{e} (for #{self})"
263
290
  end
264
291
  end
265
292
  end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2014-2019 MongoDB, Inc.
1
+ # Copyright (C) 2014-2020 MongoDB Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the 'License');
4
4
  # you may not use this file except in compliance with the License.
@@ -78,17 +78,44 @@ module Mongo
78
78
  # ipv4.socket(5, :ssl => true)
79
79
  #
80
80
  # @param [ Float ] socket_timeout The socket timeout.
81
- # @param [ Hash ] ssl_options SSL options.
82
81
  # @param [ Hash ] options The options.
83
82
  #
84
83
  # @option options [ Float ] :connect_timeout Connect timeout.
84
+ # @option options [ true | false ] :ssl Whether to use SSL.
85
+ # @option options [ String ] :ssl_ca_cert
86
+ # Same as the corresponding Client/Socket::SSL option.
87
+ # @option options [ Array<OpenSSL::X509::Certificate> ] :ssl_ca_cert_object
88
+ # Same as the corresponding Client/Socket::SSL option.
89
+ # @option options [ String ] :ssl_ca_cert_string
90
+ # Same as the corresponding Client/Socket::SSL option.
91
+ # @option options [ String ] :ssl_cert
92
+ # Same as the corresponding Client/Socket::SSL option.
93
+ # @option options [ OpenSSL::X509::Certificate ] :ssl_cert_object
94
+ # Same as the corresponding Client/Socket::SSL option.
95
+ # @option options [ String ] :ssl_cert_string
96
+ # Same as the corresponding Client/Socket::SSL option.
97
+ # @option options [ String ] :ssl_key
98
+ # Same as the corresponding Client/Socket::SSL option.
99
+ # @option options [ OpenSSL::PKey ] :ssl_key_object
100
+ # Same as the corresponding Client/Socket::SSL option.
101
+ # @option options [ String ] :ssl_key_pass_phrase
102
+ # Same as the corresponding Client/Socket::SSL option.
103
+ # @option options [ String ] :ssl_key_string
104
+ # Same as the corresponding Client/Socket::SSL option.
105
+ # @option options [ true, false ] :ssl_verify
106
+ # Same as the corresponding Client/Socket::SSL option.
107
+ # @option options [ true, false ] :ssl_verify_certificate
108
+ # Same as the corresponding Client/Socket::SSL option.
109
+ # @option options [ true, false ] :ssl_verify_hostname
110
+ # Same as the corresponding Client/Socket::SSL option.
85
111
  #
86
112
  # @return [ Mongo::Socket::SSL, Mongo::Socket::TCP ] The socket.
87
113
  #
88
114
  # @since 2.0.0
89
- def socket(socket_timeout, ssl_options = {}, options = {})
90
- unless ssl_options.empty?
91
- Socket::SSL.new(host, port, host_name, socket_timeout, Socket::PF_INET, ssl_options.merge(options))
115
+ # @api private
116
+ def socket(socket_timeout, options = {})
117
+ if options[:ssl]
118
+ Socket::SSL.new(host, port, host_name, socket_timeout, Socket::PF_INET, options)
92
119
  else
93
120
  Socket::TCP.new(host, port, socket_timeout, Socket::PF_INET, options)
94
121
  end