mongo 2.11.2 → 2.13.0.beta1

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 (970) 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 -53
  7. data/Rakefile +1 -1
  8. data/lib/mongo.rb +7 -1
  9. data/lib/mongo/active_support.rb +1 -1
  10. data/lib/mongo/address.rb +114 -46
  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 +37 -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 +257 -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 +51 -0
  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 -502
  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 +9 -11
  42. data/lib/mongo/auth/user/view.rb +5 -5
  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 +12 -3
  46. data/lib/mongo/bson.rb +1 -1
  47. data/lib/mongo/bulk_write.rb +61 -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 +178 -23
  56. data/lib/mongo/client_encryption.rb +103 -0
  57. data/lib/mongo/cluster.rb +130 -52
  58. data/lib/mongo/cluster/periodic_executor.rb +1 -1
  59. data/lib/mongo/cluster/reapers/cursor_reaper.rb +19 -7
  60. data/lib/mongo/cluster/reapers/socket_reaper.rb +1 -1
  61. data/lib/mongo/cluster/sdam_flow.rb +74 -62
  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 +1 -1
  66. data/lib/mongo/cluster/topology/replica_set_with_primary.rb +1 -1
  67. data/lib/mongo/cluster/topology/sharded.rb +1 -1
  68. data/lib/mongo/cluster/topology/single.rb +1 -1
  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 +25 -5
  72. data/lib/mongo/collection/view.rb +7 -3
  73. data/lib/mongo/collection/view/aggregation.rb +7 -4
  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 +15 -9
  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 +22 -7
  86. data/lib/mongo/collection/view/map_reduce.rb +9 -6
  87. data/lib/mongo/collection/view/readable.rb +16 -8
  88. data/lib/mongo/collection/view/writable.rb +62 -18
  89. data/lib/mongo/crypt.rb +33 -0
  90. data/lib/mongo/crypt/auto_decryption_context.rb +40 -0
  91. data/lib/mongo/crypt/auto_encrypter.rb +179 -0
  92. data/lib/mongo/crypt/auto_encryption_context.rb +44 -0
  93. data/lib/mongo/crypt/binary.rb +155 -0
  94. data/lib/mongo/crypt/binding.rb +1229 -0
  95. data/lib/mongo/crypt/context.rb +135 -0
  96. data/lib/mongo/crypt/data_key_context.rb +162 -0
  97. data/lib/mongo/crypt/encryption_io.rb +306 -0
  98. data/lib/mongo/crypt/explicit_decryption_context.rb +40 -0
  99. data/lib/mongo/crypt/explicit_encrypter.rb +117 -0
  100. data/lib/mongo/crypt/explicit_encryption_context.rb +89 -0
  101. data/lib/mongo/crypt/handle.rb +315 -0
  102. data/lib/mongo/crypt/hooks.rb +90 -0
  103. data/lib/mongo/crypt/kms_context.rb +67 -0
  104. data/lib/mongo/crypt/status.rb +131 -0
  105. data/lib/mongo/cursor.rb +67 -35
  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 +9 -2
  109. data/lib/mongo/cursor/builder/op_get_more.rb +1 -1
  110. data/lib/mongo/cursor/builder/op_kill_cursors.rb +9 -2
  111. data/lib/mongo/database.rb +27 -7
  112. data/lib/mongo/database/view.rb +15 -6
  113. data/lib/mongo/dbref.rb +10 -3
  114. data/lib/mongo/error.rb +30 -3
  115. data/lib/mongo/error/auth_error.rb +1 -1
  116. data/lib/mongo/error/bulk_write_error.rb +17 -15
  117. data/lib/mongo/error/change_stream_resumable.rb +1 -1
  118. data/lib/mongo/error/closed_stream.rb +1 -1
  119. data/lib/mongo/error/connection_check_out_timeout.rb +1 -1
  120. data/lib/mongo/error/connection_perished.rb +23 -0
  121. data/lib/mongo/error/credential_check_error.rb +26 -0
  122. data/lib/mongo/error/crypt_error.rb +31 -0
  123. data/lib/mongo/error/extra_file_chunk.rb +1 -1
  124. data/lib/mongo/error/{failed_stringprep_validation.rb → failed_string_prep_validation.rb} +0 -0
  125. data/lib/mongo/error/file_not_found.rb +1 -1
  126. data/lib/mongo/error/handshake_error.rb +1 -1
  127. data/lib/mongo/error/insufficient_iteration_count.rb +1 -1
  128. data/lib/mongo/error/invalid_address.rb +1 -1
  129. data/lib/mongo/error/invalid_application_name.rb +1 -1
  130. data/lib/mongo/error/invalid_bulk_operation.rb +1 -1
  131. data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -1
  132. data/lib/mongo/error/invalid_collection_name.rb +1 -1
  133. data/lib/mongo/error/invalid_cursor_operation.rb +27 -0
  134. data/lib/mongo/error/invalid_database_name.rb +1 -1
  135. data/lib/mongo/error/invalid_document.rb +1 -1
  136. data/lib/mongo/error/invalid_file.rb +1 -1
  137. data/lib/mongo/error/invalid_file_revision.rb +1 -1
  138. data/lib/mongo/error/invalid_min_pool_size.rb +1 -1
  139. data/lib/mongo/error/invalid_nonce.rb +2 -2
  140. data/lib/mongo/error/invalid_read_option.rb +1 -1
  141. data/lib/mongo/error/invalid_replacement_document.rb +1 -1
  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 +1 -1
  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/kms_error.rb +22 -0
  152. data/lib/mongo/error/lint_error.rb +1 -1
  153. data/lib/mongo/error/max_bson_size.rb +15 -4
  154. data/lib/mongo/error/max_message_size.rb +1 -1
  155. data/lib/mongo/error/mismatched_domain.rb +1 -1
  156. data/lib/mongo/error/missing_file_chunk.rb +1 -1
  157. data/lib/mongo/error/missing_password.rb +1 -1
  158. data/lib/mongo/error/missing_resume_token.rb +1 -1
  159. data/lib/mongo/error/missing_scram_server_signature.rb +27 -0
  160. data/lib/mongo/error/mongocryptd_spawn_error.rb +22 -0
  161. data/lib/mongo/error/multi_index_drop.rb +1 -1
  162. data/lib/mongo/error/need_primary_server.rb +1 -1
  163. data/lib/mongo/error/no_server_available.rb +9 -4
  164. data/lib/mongo/error/no_srv_records.rb +1 -1
  165. data/lib/mongo/error/notable.rb +17 -17
  166. data/lib/mongo/error/operation_failure.rb +57 -43
  167. data/lib/mongo/error/parser.rb +17 -6
  168. data/lib/mongo/error/pool_closed_error.rb +1 -1
  169. data/lib/mongo/error/raise_original_error.rb +29 -0
  170. data/lib/mongo/error/session_ended.rb +1 -1
  171. data/lib/mongo/error/socket_error.rb +1 -1
  172. data/lib/mongo/error/socket_timeout_error.rb +1 -1
  173. data/lib/mongo/error/unchangeable_collection_option.rb +1 -1
  174. data/lib/mongo/error/unexpected_chunk_length.rb +1 -1
  175. data/lib/mongo/error/unexpected_response.rb +1 -1
  176. data/lib/mongo/error/unknown_payload_type.rb +1 -1
  177. data/lib/mongo/error/unsupported_array_filters.rb +7 -2
  178. data/lib/mongo/error/unsupported_collation.rb +7 -2
  179. data/lib/mongo/error/unsupported_features.rb +1 -1
  180. data/lib/mongo/error/unsupported_message_type.rb +1 -1
  181. data/lib/mongo/error/unsupported_option.rb +99 -0
  182. data/lib/mongo/error/write_retryable.rb +1 -1
  183. data/lib/mongo/event.rb +1 -1
  184. data/lib/mongo/event/base.rb +1 -1
  185. data/lib/mongo/event/listeners.rb +1 -1
  186. data/lib/mongo/event/publisher.rb +1 -1
  187. data/lib/mongo/event/subscriber.rb +1 -1
  188. data/lib/mongo/grid.rb +1 -1
  189. data/lib/mongo/grid/file.rb +1 -1
  190. data/lib/mongo/grid/file/chunk.rb +1 -1
  191. data/lib/mongo/grid/file/info.rb +4 -3
  192. data/lib/mongo/grid/fs_bucket.rb +7 -2
  193. data/lib/mongo/grid/stream.rb +1 -1
  194. data/lib/mongo/grid/stream/read.rb +1 -1
  195. data/lib/mongo/grid/stream/write.rb +1 -1
  196. data/lib/mongo/id.rb +1 -1
  197. data/lib/mongo/index.rb +2 -1
  198. data/lib/mongo/index/view.rb +61 -14
  199. data/lib/mongo/lint.rb +10 -0
  200. data/lib/mongo/loggable.rb +1 -1
  201. data/lib/mongo/logger.rb +1 -1
  202. data/lib/mongo/monitoring.rb +1 -1
  203. data/lib/mongo/monitoring/cmap_log_subscriber.rb +1 -1
  204. data/lib/mongo/monitoring/command_log_subscriber.rb +12 -5
  205. data/lib/mongo/monitoring/event.rb +1 -1
  206. data/lib/mongo/monitoring/event/cmap.rb +1 -1
  207. data/lib/mongo/monitoring/event/cmap/base.rb +1 -1
  208. data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +2 -2
  209. data/lib/mongo/monitoring/event/cmap/connection_check_out_started.rb +1 -1
  210. data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +1 -1
  211. data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +1 -1
  212. data/lib/mongo/monitoring/event/cmap/connection_closed.rb +1 -1
  213. data/lib/mongo/monitoring/event/cmap/connection_created.rb +1 -1
  214. data/lib/mongo/monitoring/event/cmap/connection_ready.rb +1 -1
  215. data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +1 -1
  216. data/lib/mongo/monitoring/event/cmap/pool_closed.rb +1 -1
  217. data/lib/mongo/monitoring/event/cmap/pool_created.rb +1 -1
  218. data/lib/mongo/monitoring/event/command_failed.rb +1 -1
  219. data/lib/mongo/monitoring/event/command_started.rb +15 -4
  220. data/lib/mongo/monitoring/event/command_succeeded.rb +1 -1
  221. data/lib/mongo/monitoring/event/secure.rb +8 -2
  222. data/lib/mongo/monitoring/event/server_closed.rb +1 -1
  223. data/lib/mongo/monitoring/event/server_description_changed.rb +1 -1
  224. data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +1 -1
  225. data/lib/mongo/monitoring/event/server_heartbeat_started.rb +1 -1
  226. data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +1 -1
  227. data/lib/mongo/monitoring/event/server_opening.rb +1 -1
  228. data/lib/mongo/monitoring/event/topology_changed.rb +1 -1
  229. data/lib/mongo/monitoring/event/topology_closed.rb +1 -1
  230. data/lib/mongo/monitoring/event/topology_opening.rb +1 -1
  231. data/lib/mongo/monitoring/publishable.rb +5 -8
  232. data/lib/mongo/monitoring/sdam_log_subscriber.rb +1 -1
  233. data/lib/mongo/monitoring/server_closed_log_subscriber.rb +1 -1
  234. data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +1 -1
  235. data/lib/mongo/monitoring/server_opening_log_subscriber.rb +1 -1
  236. data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +1 -1
  237. data/lib/mongo/monitoring/topology_closed_log_subscriber.rb +1 -1
  238. data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +1 -1
  239. data/lib/mongo/monitoring/unified_sdam_log_subscriber.rb +1 -1
  240. data/lib/mongo/operation.rb +1 -0
  241. data/lib/mongo/operation/aggregate.rb +1 -1
  242. data/lib/mongo/operation/aggregate/command.rb +5 -5
  243. data/lib/mongo/operation/aggregate/op_msg.rb +1 -1
  244. data/lib/mongo/operation/aggregate/result.rb +1 -1
  245. data/lib/mongo/operation/collections_info.rb +3 -33
  246. data/lib/mongo/operation/collections_info/command.rb +40 -0
  247. data/lib/mongo/operation/collections_info/result.rb +1 -1
  248. data/lib/mongo/operation/command.rb +1 -1
  249. data/lib/mongo/operation/command/command.rb +3 -3
  250. data/lib/mongo/operation/command/op_msg.rb +1 -1
  251. data/lib/mongo/operation/count.rb +1 -1
  252. data/lib/mongo/operation/count/command.rb +3 -3
  253. data/lib/mongo/operation/count/op_msg.rb +1 -1
  254. data/lib/mongo/operation/create.rb +1 -1
  255. data/lib/mongo/operation/create/command.rb +3 -3
  256. data/lib/mongo/operation/create/op_msg.rb +1 -1
  257. data/lib/mongo/operation/create_index.rb +1 -1
  258. data/lib/mongo/operation/create_index/command.rb +4 -4
  259. data/lib/mongo/operation/create_index/op_msg.rb +6 -3
  260. data/lib/mongo/operation/create_user.rb +1 -1
  261. data/lib/mongo/operation/create_user/command.rb +4 -4
  262. data/lib/mongo/operation/create_user/op_msg.rb +2 -2
  263. data/lib/mongo/operation/delete.rb +1 -1
  264. data/lib/mongo/operation/delete/bulk_result.rb +1 -1
  265. data/lib/mongo/operation/delete/command.rb +4 -4
  266. data/lib/mongo/operation/delete/legacy.rb +2 -2
  267. data/lib/mongo/operation/delete/op_msg.rb +5 -5
  268. data/lib/mongo/operation/delete/result.rb +2 -2
  269. data/lib/mongo/operation/distinct.rb +1 -1
  270. data/lib/mongo/operation/distinct/command.rb +3 -3
  271. data/lib/mongo/operation/distinct/op_msg.rb +1 -1
  272. data/lib/mongo/operation/drop.rb +1 -1
  273. data/lib/mongo/operation/drop/command.rb +3 -3
  274. data/lib/mongo/operation/drop/op_msg.rb +1 -1
  275. data/lib/mongo/operation/drop_database.rb +1 -1
  276. data/lib/mongo/operation/drop_database/command.rb +3 -3
  277. data/lib/mongo/operation/drop_database/op_msg.rb +1 -1
  278. data/lib/mongo/operation/drop_index.rb +1 -1
  279. data/lib/mongo/operation/drop_index/command.rb +4 -4
  280. data/lib/mongo/operation/drop_index/op_msg.rb +2 -2
  281. data/lib/mongo/operation/explain.rb +1 -1
  282. data/lib/mongo/operation/explain/command.rb +3 -3
  283. data/lib/mongo/operation/explain/legacy.rb +3 -3
  284. data/lib/mongo/operation/explain/op_msg.rb +1 -1
  285. data/lib/mongo/operation/explain/result.rb +1 -1
  286. data/lib/mongo/operation/find.rb +1 -1
  287. data/lib/mongo/operation/find/command.rb +3 -3
  288. data/lib/mongo/operation/find/legacy.rb +3 -3
  289. data/lib/mongo/operation/find/legacy/result.rb +1 -1
  290. data/lib/mongo/operation/find/op_msg.rb +2 -9
  291. data/lib/mongo/operation/find/result.rb +1 -1
  292. data/lib/mongo/operation/get_more.rb +1 -1
  293. data/lib/mongo/operation/get_more/command.rb +3 -3
  294. data/lib/mongo/operation/get_more/legacy.rb +2 -2
  295. data/lib/mongo/operation/get_more/op_msg.rb +2 -9
  296. data/lib/mongo/operation/get_more/result.rb +1 -1
  297. data/lib/mongo/operation/indexes.rb +1 -1
  298. data/lib/mongo/operation/indexes/command.rb +3 -3
  299. data/lib/mongo/operation/indexes/legacy.rb +4 -4
  300. data/lib/mongo/operation/indexes/op_msg.rb +1 -1
  301. data/lib/mongo/operation/indexes/result.rb +1 -1
  302. data/lib/mongo/operation/insert.rb +3 -2
  303. data/lib/mongo/operation/insert/bulk_result.rb +6 -2
  304. data/lib/mongo/operation/insert/command.rb +8 -7
  305. data/lib/mongo/operation/insert/legacy.rb +10 -5
  306. data/lib/mongo/operation/insert/op_msg.rb +7 -7
  307. data/lib/mongo/operation/insert/result.rb +7 -4
  308. data/lib/mongo/operation/kill_cursors.rb +1 -1
  309. data/lib/mongo/operation/kill_cursors/command.rb +3 -3
  310. data/lib/mongo/operation/kill_cursors/legacy.rb +2 -2
  311. data/lib/mongo/operation/kill_cursors/op_msg.rb +1 -1
  312. data/lib/mongo/operation/list_collections.rb +1 -1
  313. data/lib/mongo/operation/list_collections/command.rb +4 -4
  314. data/lib/mongo/operation/list_collections/op_msg.rb +2 -2
  315. data/lib/mongo/operation/list_collections/result.rb +1 -1
  316. data/lib/mongo/operation/map_reduce.rb +1 -1
  317. data/lib/mongo/operation/map_reduce/command.rb +3 -3
  318. data/lib/mongo/operation/map_reduce/op_msg.rb +1 -1
  319. data/lib/mongo/operation/map_reduce/result.rb +1 -1
  320. data/lib/mongo/operation/op_msg_base.rb +3 -3
  321. data/lib/mongo/operation/parallel_scan.rb +1 -1
  322. data/lib/mongo/operation/parallel_scan/command.rb +5 -5
  323. data/lib/mongo/operation/parallel_scan/op_msg.rb +2 -2
  324. data/lib/mongo/operation/parallel_scan/result.rb +1 -1
  325. data/lib/mongo/operation/remove_user.rb +1 -1
  326. data/lib/mongo/operation/remove_user/command.rb +4 -4
  327. data/lib/mongo/operation/remove_user/op_msg.rb +2 -2
  328. data/lib/mongo/operation/result.rb +64 -31
  329. data/lib/mongo/operation/shared/bypass_document_validation.rb +10 -4
  330. data/lib/mongo/operation/shared/causal_consistency_supported.rb +3 -3
  331. data/lib/mongo/operation/shared/collections_info_or_list_collections.rb +56 -0
  332. data/lib/mongo/operation/shared/executable.rb +47 -27
  333. data/lib/mongo/operation/shared/executable_no_validate.rb +3 -3
  334. data/lib/mongo/operation/shared/executable_transaction_label.rb +1 -1
  335. data/lib/mongo/operation/shared/idable.rb +1 -1
  336. data/lib/mongo/operation/shared/limited.rb +10 -2
  337. data/lib/mongo/operation/shared/object_id_generator.rb +1 -1
  338. data/lib/mongo/operation/shared/op_msg_or_command.rb +8 -6
  339. data/lib/mongo/operation/shared/op_msg_or_find_command.rb +9 -7
  340. data/lib/mongo/operation/shared/op_msg_or_list_indexes_command.rb +9 -7
  341. data/lib/mongo/operation/shared/polymorphic_lookup.rb +1 -1
  342. data/lib/mongo/operation/shared/polymorphic_result.rb +1 -1
  343. data/lib/mongo/operation/shared/read_preference_supported.rb +74 -22
  344. data/lib/mongo/operation/shared/response_handling.rb +84 -9
  345. data/lib/mongo/operation/shared/result/aggregatable.rb +1 -1
  346. data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +1 -1
  347. data/lib/mongo/operation/shared/sessions_supported.rb +86 -22
  348. data/lib/mongo/operation/shared/specifiable.rb +32 -20
  349. data/lib/mongo/operation/shared/write.rb +33 -20
  350. data/lib/mongo/operation/shared/write_concern_supported.rb +6 -6
  351. data/lib/mongo/operation/update.rb +1 -1
  352. data/lib/mongo/operation/update/bulk_result.rb +1 -1
  353. data/lib/mongo/operation/update/command.rb +4 -4
  354. data/lib/mongo/operation/update/legacy.rb +2 -2
  355. data/lib/mongo/operation/update/legacy/result.rb +1 -1
  356. data/lib/mongo/operation/update/op_msg.rb +5 -5
  357. data/lib/mongo/operation/update/result.rb +2 -2
  358. data/lib/mongo/operation/update_user.rb +1 -1
  359. data/lib/mongo/operation/update_user/command.rb +4 -4
  360. data/lib/mongo/operation/update_user/op_msg.rb +2 -2
  361. data/lib/mongo/operation/users_info.rb +1 -1
  362. data/lib/mongo/operation/users_info/command.rb +4 -4
  363. data/lib/mongo/operation/users_info/op_msg.rb +2 -2
  364. data/lib/mongo/operation/users_info/result.rb +1 -1
  365. data/lib/mongo/options.rb +1 -1
  366. data/lib/mongo/options/mapper.rb +1 -1
  367. data/lib/mongo/options/redacted.rb +1 -1
  368. data/lib/mongo/protocol/bit_vector.rb +3 -2
  369. data/lib/mongo/protocol/compressed.rb +7 -6
  370. data/lib/mongo/protocol/delete.rb +1 -1
  371. data/lib/mongo/protocol/get_more.rb +1 -1
  372. data/lib/mongo/protocol/insert.rb +4 -2
  373. data/lib/mongo/protocol/kill_cursors.rb +1 -1
  374. data/lib/mongo/protocol/message.rb +95 -16
  375. data/lib/mongo/protocol/msg.rb +189 -38
  376. data/lib/mongo/protocol/query.rb +8 -10
  377. data/lib/mongo/protocol/registry.rb +1 -1
  378. data/lib/mongo/protocol/reply.rb +1 -1
  379. data/lib/mongo/protocol/serializers.rb +51 -16
  380. data/lib/mongo/protocol/update.rb +1 -1
  381. data/lib/mongo/retryable.rb +24 -11
  382. data/lib/mongo/semaphore.rb +1 -1
  383. data/lib/mongo/server.rb +42 -11
  384. data/lib/mongo/server/app_metadata.rb +17 -4
  385. data/lib/mongo/server/connection.rb +40 -126
  386. data/lib/mongo/server/connection_base.rb +106 -19
  387. data/lib/mongo/server/connection_common.rb +135 -0
  388. data/lib/mongo/server/connection_pool.rb +57 -2
  389. data/lib/mongo/server/connection_pool/populator.rb +2 -2
  390. data/lib/mongo/server/context.rb +1 -1
  391. data/lib/mongo/server/description.rb +53 -13
  392. data/lib/mongo/server/description/features.rb +12 -3
  393. data/lib/mongo/server/monitor.rb +118 -72
  394. data/lib/mongo/server/monitor/app_metadata.rb +1 -1
  395. data/lib/mongo/server/monitor/connection.rb +62 -96
  396. data/lib/mongo/server/pending_connection.rb +204 -1
  397. data/lib/mongo/server/round_trip_time_averager.rb +12 -3
  398. data/lib/mongo/server_selector.rb +2 -1
  399. data/lib/mongo/server_selector/base.rb +40 -0
  400. data/lib/mongo/server_selector/nearest.rb +25 -15
  401. data/lib/mongo/server_selector/primary.rb +23 -22
  402. data/lib/mongo/server_selector/primary_preferred.rb +25 -15
  403. data/lib/mongo/server_selector/secondary.rb +25 -15
  404. data/lib/mongo/server_selector/secondary_preferred.rb +28 -27
  405. data/lib/mongo/server_selector/selectable.rb +30 -15
  406. data/lib/mongo/session.rb +15 -4
  407. data/lib/mongo/session/server_session.rb +1 -1
  408. data/lib/mongo/session/session_pool.rb +9 -4
  409. data/lib/mongo/socket.rb +120 -30
  410. data/lib/mongo/socket/ssl.rb +110 -32
  411. data/lib/mongo/socket/tcp.rb +41 -24
  412. data/lib/mongo/socket/unix.rb +14 -6
  413. data/lib/mongo/srv.rb +1 -1
  414. data/lib/mongo/srv/monitor.rb +74 -43
  415. data/lib/mongo/srv/resolver.rb +1 -1
  416. data/lib/mongo/srv/result.rb +1 -2
  417. data/lib/mongo/timeout.rb +49 -0
  418. data/lib/mongo/topology_version.rb +80 -0
  419. data/lib/mongo/uri.rb +84 -41
  420. data/lib/mongo/uri/srv_protocol.rb +10 -2
  421. data/lib/mongo/version.rb +2 -2
  422. data/lib/mongo/write_concern.rb +1 -1
  423. data/lib/mongo/write_concern/acknowledged.rb +1 -1
  424. data/lib/mongo/write_concern/base.rb +1 -1
  425. data/lib/mongo/write_concern/unacknowledged.rb +1 -1
  426. data/mongo.gemspec +2 -4
  427. data/spec/NOTES.aws-auth.md +291 -0
  428. data/spec/README.aws-auth.md +318 -0
  429. data/spec/README.md +282 -14
  430. data/spec/integration/auth_spec.rb +74 -1
  431. data/spec/integration/aws_auth_request_spec.rb +74 -0
  432. data/spec/integration/aws_credentials_retriever_spec.rb +103 -0
  433. data/spec/integration/bson_symbol_spec.rb +34 -0
  434. data/spec/integration/change_stream_spec.rb +123 -51
  435. data/spec/integration/{client_options_spec.rb → client_authentication_options_spec.rb} +15 -15
  436. data/spec/integration/client_construction_aws_auth_spec.rb +191 -0
  437. data/spec/integration/client_construction_spec.rb +101 -2
  438. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +353 -0
  439. data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +303 -0
  440. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +72 -0
  441. data/spec/integration/client_side_encryption/auto_encryption_old_wire_version_spec.rb +79 -0
  442. data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +221 -0
  443. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +601 -0
  444. data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +187 -0
  445. data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +78 -0
  446. data/spec/integration/client_side_encryption/client_close_spec.rb +63 -0
  447. data/spec/integration/client_side_encryption/corpus_spec.rb +233 -0
  448. data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +132 -0
  449. data/spec/integration/client_side_encryption/data_key_spec.rb +165 -0
  450. data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +114 -0
  451. data/spec/integration/client_side_encryption/external_key_vault_spec.rb +141 -0
  452. data/spec/integration/client_side_encryption/views_spec.rb +44 -0
  453. data/spec/integration/client_update_spec.rb +154 -0
  454. data/spec/integration/collection_indexes_prose_spec.rb +55 -0
  455. data/spec/integration/command_monitoring_spec.rb +33 -7
  456. data/spec/integration/command_spec.rb +55 -19
  457. data/spec/integration/connect_single_rs_name_spec.rb +5 -3
  458. data/spec/integration/connection_spec.rb +115 -9
  459. data/spec/integration/crud_spec.rb +162 -0
  460. data/spec/integration/cursor_reaping_spec.rb +16 -11
  461. data/spec/integration/fork_reconnect_spec.rb +143 -0
  462. data/spec/integration/get_more_spec.rb +10 -3
  463. data/spec/integration/heartbeat_events_spec.rb +1 -1
  464. data/spec/integration/read_preference_spec.rb +67 -11
  465. data/spec/integration/reconnect_spec.rb +7 -7
  466. data/spec/integration/retryable_errors_spec.rb +35 -16
  467. data/spec/integration/{retryable_writes_spec.rb → retryable_writes/retryable_writes_36_and_older_spec.rb} +55 -51
  468. data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +401 -0
  469. data/spec/integration/retryable_writes/shared/adds_diagnostics.rb +15 -0
  470. data/spec/integration/retryable_writes/shared/does_not_support_retries.rb +24 -0
  471. data/spec/integration/retryable_writes/shared/only_supports_legacy_retries.rb +25 -0
  472. data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +215 -0
  473. data/spec/integration/retryable_writes/shared/performs_modern_retries.rb +232 -0
  474. data/spec/integration/retryable_writes/shared/performs_no_retries.rb +110 -0
  475. data/spec/integration/retryable_writes/shared/supports_legacy_retries.rb +19 -0
  476. data/spec/integration/retryable_writes/shared/supports_modern_retries.rb +25 -0
  477. data/spec/integration/retryable_writes/shared/supports_retries.rb +16 -0
  478. data/spec/integration/sdam_error_handling_spec.rb +116 -18
  479. data/spec/integration/sdam_events_spec.rb +1 -0
  480. data/spec/integration/server_spec.rb +42 -26
  481. data/spec/integration/size_limit_spec.rb +94 -0
  482. data/spec/integration/srv_monitoring_spec.rb +16 -8
  483. data/spec/integration/step_down_spec.rb +15 -15
  484. data/spec/integration/transactions_api_examples_spec.rb +59 -0
  485. data/spec/integration/transactions_examples_spec.rb +5 -2
  486. data/spec/integration/x509_auth_spec.rb +109 -0
  487. data/spec/kerberos/kerberos_spec.rb +91 -0
  488. data/spec/lite_spec_helper.rb +41 -33
  489. data/spec/mongo/address/ipv4_spec.rb +1 -1
  490. data/spec/mongo/address_spec.rb +20 -14
  491. data/spec/mongo/auth/cr_spec.rb +15 -7
  492. data/spec/mongo/auth/gssapi/conversation_spec.rb +121 -0
  493. data/spec/mongo/auth/invalid_mechanism_spec.rb +1 -1
  494. data/spec/mongo/auth/ldap/conversation_spec.rb +1 -1
  495. data/spec/mongo/auth/ldap_spec.rb +8 -4
  496. data/spec/mongo/auth/scram/conversation_spec.rb +120 -334
  497. data/spec/mongo/auth/scram256/conversation_spec.rb +171 -0
  498. data/spec/mongo/auth/{scram/negotiation_spec.rb → scram_negotiation_spec.rb} +79 -75
  499. data/spec/mongo/auth/scram_spec.rb +55 -85
  500. data/spec/mongo/auth/user/view_spec.rb +39 -7
  501. data/spec/mongo/auth/user_spec.rb +13 -1
  502. data/spec/mongo/auth/x509/conversation_spec.rb +1 -1
  503. data/spec/mongo/auth/x509_spec.rb +13 -9
  504. data/spec/mongo/auth_spec.rb +4 -4
  505. data/spec/mongo/bulk_write/result_spec.rb +11 -7
  506. data/spec/mongo/bulk_write_spec.rb +208 -4
  507. data/spec/mongo/client_construction_spec.rb +496 -88
  508. data/spec/mongo/client_encryption_spec.rb +405 -0
  509. data/spec/mongo/client_spec.rb +21 -2
  510. data/spec/mongo/cluster/cursor_reaper_spec.rb +12 -8
  511. data/spec/mongo/cluster/socket_reaper_spec.rb +14 -3
  512. data/spec/mongo/cluster_spec.rb +23 -2
  513. data/spec/mongo/collection/view/aggregation_spec.rb +6 -4
  514. data/spec/mongo/collection/view/builder/find_command_spec.rb +17 -6
  515. data/spec/mongo/collection/view/change_stream_resume_spec.rb +392 -0
  516. data/spec/mongo/collection/view/change_stream_spec.rb +3 -321
  517. data/spec/mongo/collection/view/iterable_spec.rb +38 -0
  518. data/spec/mongo/collection/view/map_reduce_spec.rb +9 -5
  519. data/spec/mongo/collection/view/readable_spec.rb +15 -1
  520. data/spec/mongo/collection/view/writable_spec.rb +208 -1
  521. data/spec/mongo/collection/view_spec.rb +1 -1
  522. data/spec/mongo/collection_spec.rb +35 -52
  523. data/spec/mongo/crypt/auto_decryption_context_spec.rb +90 -0
  524. data/spec/mongo/crypt/auto_encrypter_spec.rb +187 -0
  525. data/spec/mongo/crypt/auto_encryption_context_spec.rb +107 -0
  526. data/spec/mongo/crypt/binary_spec.rb +115 -0
  527. data/spec/mongo/crypt/binding/binary_spec.rb +56 -0
  528. data/spec/mongo/crypt/binding/context_spec.rb +257 -0
  529. data/spec/mongo/crypt/binding/helpers_spec.rb +46 -0
  530. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +144 -0
  531. data/spec/mongo/crypt/binding/status_spec.rb +99 -0
  532. data/spec/mongo/crypt/binding/version_spec.rb +22 -0
  533. data/spec/mongo/crypt/binding_unloaded_spec.rb +20 -0
  534. data/spec/mongo/crypt/data_key_context_spec.rb +213 -0
  535. data/spec/mongo/crypt/encryption_io_spec.rb +136 -0
  536. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +72 -0
  537. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +170 -0
  538. data/spec/mongo/crypt/handle_spec.rb +232 -0
  539. data/spec/mongo/crypt/helpers/mongo_crypt_spec_helper.rb +108 -0
  540. data/spec/mongo/crypt/status_spec.rb +152 -0
  541. data/spec/mongo/cursor/builder/get_more_command_spec.rb +6 -1
  542. data/spec/mongo/cursor/builder/op_get_more_spec.rb +6 -1
  543. data/spec/mongo/cursor/builder/op_kill_cursors_spec.rb +61 -0
  544. data/spec/mongo/cursor_spec.rb +33 -5
  545. data/spec/mongo/database_spec.rb +26 -2
  546. data/spec/mongo/error/bulk_write_error_spec.rb +49 -0
  547. data/spec/mongo/error/crypt_error_spec.rb +26 -0
  548. data/spec/mongo/error/max_bson_size_spec.rb +35 -0
  549. data/spec/mongo/error/no_server_available_spec.rb +11 -1
  550. data/spec/mongo/error/notable_spec.rb +59 -0
  551. data/spec/mongo/error/operation_failure_heavy_spec.rb +58 -0
  552. data/spec/mongo/error/operation_failure_spec.rb +130 -72
  553. data/spec/mongo/error/unsupported_option_spec.rb +54 -0
  554. data/spec/mongo/grid/fs_bucket_spec.rb +18 -0
  555. data/spec/mongo/grid/stream/write_spec.rb +32 -0
  556. data/spec/mongo/index/view_spec.rb +166 -0
  557. data/spec/mongo/operation/aggregate/result_spec.rb +6 -1
  558. data/spec/mongo/operation/aggregate_spec.rb +1 -1
  559. data/spec/mongo/operation/collections_info_spec.rb +1 -1
  560. data/spec/mongo/operation/command_spec.rb +3 -3
  561. data/spec/mongo/operation/create_index_spec.rb +3 -3
  562. data/spec/mongo/operation/create_user_spec.rb +3 -3
  563. data/spec/mongo/operation/delete/bulk_spec.rb +18 -6
  564. data/spec/mongo/operation/delete/op_msg_spec.rb +23 -20
  565. data/spec/mongo/operation/delete_spec.rb +7 -7
  566. data/spec/mongo/operation/drop_index_spec.rb +2 -2
  567. data/spec/mongo/operation/find/legacy_spec.rb +27 -6
  568. data/spec/mongo/operation/get_more_spec.rb +6 -1
  569. data/spec/mongo/operation/indexes_spec.rb +1 -1
  570. data/spec/mongo/operation/insert/bulk_spec.rb +21 -7
  571. data/spec/mongo/operation/insert/command_spec.rb +4 -0
  572. data/spec/mongo/operation/insert/op_msg_spec.rb +25 -20
  573. data/spec/mongo/operation/insert_spec.rb +12 -12
  574. data/spec/mongo/operation/limited_spec.rb +5 -3
  575. data/spec/mongo/operation/map_reduce_spec.rb +2 -2
  576. data/spec/mongo/operation/read_preference_legacy_spec.rb +363 -0
  577. data/spec/mongo/operation/read_preference_op_msg_spec.rb +304 -0
  578. data/spec/mongo/operation/remove_user_spec.rb +3 -3
  579. data/spec/mongo/operation/result_spec.rb +6 -1
  580. data/spec/mongo/operation/update/bulk_spec.rb +18 -6
  581. data/spec/mongo/operation/update/command_spec.rb +4 -0
  582. data/spec/mongo/operation/update/op_msg_spec.rb +25 -20
  583. data/spec/mongo/operation/update_spec.rb +7 -7
  584. data/spec/mongo/operation/update_user_spec.rb +1 -1
  585. data/spec/mongo/protocol/compressed_spec.rb +2 -3
  586. data/spec/mongo/protocol/delete_spec.rb +9 -8
  587. data/spec/mongo/protocol/get_more_spec.rb +9 -8
  588. data/spec/mongo/protocol/insert_spec.rb +9 -8
  589. data/spec/mongo/protocol/kill_cursors_spec.rb +6 -5
  590. data/spec/mongo/protocol/msg_spec.rb +57 -53
  591. data/spec/mongo/protocol/query_spec.rb +12 -12
  592. data/spec/mongo/protocol/registry_spec.rb +1 -1
  593. data/spec/mongo/protocol/reply_spec.rb +1 -1
  594. data/spec/mongo/protocol/update_spec.rb +10 -9
  595. data/spec/mongo/retryable_spec.rb +71 -70
  596. data/spec/mongo/server/app_metadata_shared.rb +56 -0
  597. data/spec/mongo/server/app_metadata_spec.rb +8 -1
  598. data/spec/mongo/server/connection_auth_spec.rb +31 -12
  599. data/spec/mongo/server/connection_pool_spec.rb +1 -32
  600. data/spec/mongo/server/connection_spec.rb +143 -74
  601. data/spec/mongo/server/monitor/app_metadata_spec.rb +8 -1
  602. data/spec/mongo/server/monitor/connection_spec.rb +7 -81
  603. data/spec/mongo/server/monitor_spec.rb +76 -17
  604. data/spec/mongo/server/round_trip_time_averager_spec.rb +5 -3
  605. data/spec/mongo/server_selector/nearest_spec.rb +1 -0
  606. data/spec/mongo/server_selector/primary_preferred_spec.rb +1 -0
  607. data/spec/mongo/server_selector/primary_spec.rb +18 -0
  608. data/spec/mongo/server_selector/secondary_preferred_spec.rb +18 -1
  609. data/spec/mongo/server_selector/secondary_spec.rb +1 -0
  610. data/spec/mongo/server_selector_spec.rb +0 -1
  611. data/spec/mongo/session/session_pool_spec.rb +7 -3
  612. data/spec/mongo/socket/ssl_spec.rb +134 -100
  613. data/spec/mongo/socket/tcp_spec.rb +3 -11
  614. data/spec/mongo/socket/unix_spec.rb +2 -2
  615. data/spec/mongo/socket_spec.rb +9 -9
  616. data/spec/mongo/srv/monitor_spec.rb +88 -69
  617. data/spec/mongo/timeout_spec.rb +39 -0
  618. data/spec/mongo/uri/srv_protocol_spec.rb +2 -2
  619. data/spec/mongo/uri_spec.rb +74 -12
  620. data/spec/mongo/write_concern_spec.rb +13 -1
  621. data/spec/{support → runners}/auth.rb +19 -7
  622. data/spec/runners/change_streams/outcome.rb +42 -0
  623. data/spec/runners/change_streams/spec.rb +57 -0
  624. data/spec/runners/change_streams/test.rb +229 -0
  625. data/spec/{support → runners}/cmap.rb +1 -1
  626. data/spec/{support → runners}/cmap/verifier.rb +1 -1
  627. data/spec/{support → runners}/command_monitoring.rb +2 -2
  628. data/spec/runners/connection_string.rb +359 -4
  629. data/spec/{support → runners}/crud.rb +11 -11
  630. data/spec/{support → runners}/crud/context.rb +1 -1
  631. data/spec/{support → runners}/crud/operation.rb +127 -33
  632. data/spec/{support → runners}/crud/outcome.rb +1 -1
  633. data/spec/{support → runners}/crud/requirement.rb +1 -1
  634. data/spec/{support → runners}/crud/spec.rb +13 -1
  635. data/spec/{support → runners}/crud/test.rb +8 -26
  636. data/spec/runners/crud/test_base.rb +69 -0
  637. data/spec/{support → runners}/crud/verifier.rb +29 -13
  638. data/spec/{support → runners}/gridfs.rb +1 -1
  639. data/spec/{support/server_discovery_and_monitoring.rb → runners/sdam.rb} +41 -22
  640. data/spec/runners/sdam/verifier.rb +26 -8
  641. data/spec/{support → runners}/sdam_monitoring.rb +1 -1
  642. data/spec/{support → runners}/server_selection.rb +0 -0
  643. data/spec/{support → runners}/server_selection_rtt.rb +0 -0
  644. data/spec/{support → runners}/transactions.rb +10 -13
  645. data/spec/{support → runners}/transactions/context.rb +1 -1
  646. data/spec/{support → runners}/transactions/operation.rb +5 -1
  647. data/spec/{support → runners}/transactions/spec.rb +1 -1
  648. data/spec/{support → runners}/transactions/test.rb +82 -56
  649. data/spec/spec_helper.rb +0 -5
  650. data/spec/spec_tests/auth_spec.rb +5 -3
  651. data/spec/spec_tests/change_streams_spec.rb +39 -4
  652. data/spec/spec_tests/client_side_encryption_spec.rb +11 -0
  653. data/spec/spec_tests/cmap_spec.rb +5 -0
  654. data/spec/spec_tests/command_monitoring_spec.rb +3 -0
  655. data/spec/spec_tests/connection_string_spec.rb +3 -1
  656. data/spec/spec_tests/crud_spec.rb +2 -0
  657. data/spec/spec_tests/data/auth/connection-string.yml +69 -0
  658. data/spec/spec_tests/data/change_streams/change-streams-errors.yml +30 -0
  659. data/spec/spec_tests/data/change_streams/change-streams-resume-errorLabels.yml +1105 -0
  660. data/spec/spec_tests/data/change_streams/change-streams-resume-whitelist.yml +1107 -0
  661. data/spec/spec_tests/data/change_streams/change-streams.yml +5 -4
  662. data/spec/spec_tests/data/client_side_encryption/aggregate.yml +134 -0
  663. data/spec/spec_tests/data/client_side_encryption/badQueries.yml +526 -0
  664. data/spec/spec_tests/data/client_side_encryption/badSchema.yml +73 -0
  665. data/spec/spec_tests/data/client_side_encryption/basic.yml +116 -0
  666. data/spec/spec_tests/data/client_side_encryption/bulk.yml +88 -0
  667. data/spec/spec_tests/data/client_side_encryption/bypassAutoEncryption.yml +100 -0
  668. data/spec/spec_tests/data/client_side_encryption/bypassedCommand.yml +42 -0
  669. data/spec/spec_tests/data/client_side_encryption/count.yml +61 -0
  670. data/spec/spec_tests/data/client_side_encryption/countDocuments.yml +59 -0
  671. data/spec/spec_tests/data/client_side_encryption/delete.yml +105 -0
  672. data/spec/spec_tests/data/client_side_encryption/distinct.yml +73 -0
  673. data/spec/spec_tests/data/client_side_encryption/explain.yml +64 -0
  674. data/spec/spec_tests/data/client_side_encryption/find.yml +119 -0
  675. data/spec/spec_tests/data/client_side_encryption/findOneAndDelete.yml +57 -0
  676. data/spec/spec_tests/data/client_side_encryption/findOneAndReplace.yml +57 -0
  677. data/spec/spec_tests/data/client_side_encryption/findOneAndUpdate.yml +57 -0
  678. data/spec/spec_tests/data/client_side_encryption/getMore.yml +68 -0
  679. data/spec/spec_tests/data/client_side_encryption/insert.yml +102 -0
  680. data/spec/spec_tests/data/client_side_encryption/keyAltName.yml +71 -0
  681. data/spec/spec_tests/data/client_side_encryption/localKMS.yml +54 -0
  682. data/spec/spec_tests/data/client_side_encryption/localSchema.yml +72 -0
  683. data/spec/spec_tests/data/client_side_encryption/malformedCiphertext.yml +69 -0
  684. data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +20 -0
  685. data/spec/spec_tests/data/client_side_encryption/missingKey.yml +49 -0
  686. data/spec/spec_tests/data/client_side_encryption/replaceOne.yml +64 -0
  687. data/spec/spec_tests/data/client_side_encryption/types.yml +527 -0
  688. data/spec/spec_tests/data/client_side_encryption/unsupportedCommand.yml +25 -0
  689. data/spec/spec_tests/data/client_side_encryption/updateMany.yml +77 -0
  690. data/spec/spec_tests/data/client_side_encryption/updateOne.yml +171 -0
  691. data/spec/spec_tests/data/crud_v2/aggregate-merge.yml +1 -1
  692. data/spec/spec_tests/data/crud_v2/bulkWrite-arrayFilters.yml +33 -11
  693. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-clientError.yml +63 -0
  694. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-serverError.yml +92 -0
  695. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint.yml +103 -0
  696. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-clientError.yml +90 -0
  697. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-serverError.yml +147 -0
  698. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint.yml +164 -0
  699. data/spec/spec_tests/data/crud_v2/deleteMany-hint-clientError.yml +43 -0
  700. data/spec/spec_tests/data/crud_v2/deleteMany-hint-serverError.yml +62 -0
  701. data/spec/spec_tests/data/crud_v2/deleteMany-hint.yml +58 -0
  702. data/spec/spec_tests/data/crud_v2/deleteOne-hint-clientError.yml +41 -0
  703. data/spec/spec_tests/data/crud_v2/deleteOne-hint-serverError.yml +60 -0
  704. data/spec/spec_tests/data/crud_v2/deleteOne-hint.yml +57 -0
  705. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-clientError.yml +28 -0
  706. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-serverError.yml +44 -0
  707. data/spec/spec_tests/data/crud_v2/find-allowdiskuse.yml +50 -0
  708. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-clientError.yml +45 -0
  709. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-serverError.yml +60 -0
  710. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint.yml +56 -0
  711. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-clientError.yml +40 -0
  712. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-serverError.yml +59 -0
  713. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint.yml +55 -0
  714. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-clientError.yml +40 -0
  715. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-serverError.yml +58 -0
  716. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint.yml +55 -0
  717. data/spec/spec_tests/data/crud_v2/replaceOne-hint.yml +61 -0
  718. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-delete-hint-clientError.yml +60 -0
  719. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-update-hint-clientError.yml +88 -0
  720. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteMany-hint-clientError.yml +40 -0
  721. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteOne-hint-clientError.yml +38 -0
  722. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndDelete-hint-clientError.yml +42 -0
  723. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndReplace-hint-clientError.yml +40 -0
  724. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndUpdate-hint-clientError.yml +40 -0
  725. data/spec/spec_tests/data/crud_v2/unacknowledged-replaceOne-hint-clientError.yml +40 -0
  726. data/spec/spec_tests/data/crud_v2/unacknowledged-updateMany-hint-clientError.yml +43 -0
  727. data/spec/spec_tests/data/crud_v2/unacknowledged-updateOne-hint-clientError.yml +40 -0
  728. data/spec/spec_tests/data/crud_v2/updateMany-hint-clientError.yml +45 -0
  729. data/spec/spec_tests/data/crud_v2/updateMany-hint-serverError.yml +66 -0
  730. data/spec/spec_tests/data/crud_v2/updateMany-hint.yml +65 -0
  731. data/spec/spec_tests/data/crud_v2/updateOne-hint-clientError.yml +43 -0
  732. data/spec/spec_tests/data/crud_v2/updateOne-hint-serverError.yml +62 -0
  733. data/spec/spec_tests/data/crud_v2/updateOne-hint.yml +61 -0
  734. data/spec/spec_tests/data/crud_v2/updateWithPipelines.yml +65 -0
  735. data/spec/spec_tests/data/dns_seedlist_discovery/direct-connection-false.yml +10 -0
  736. data/spec/spec_tests/data/dns_seedlist_discovery/direct-connection-true.yml +5 -0
  737. data/spec/spec_tests/data/read_write_concern/connection-string/write-concern.yml +1 -4
  738. data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-2.6.yml +215 -0
  739. data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-3.2.yml +58 -0
  740. data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-3.4.yml +95 -0
  741. data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-4.2.yml +36 -0
  742. data/spec/spec_tests/data/retryable_writes/bulkWrite-errorLabels.yml +77 -0
  743. data/spec/spec_tests/data/retryable_writes/bulkWrite-serverErrors.yml +37 -0
  744. data/spec/spec_tests/data/retryable_writes/deleteOne-errorLabels.yml +48 -0
  745. data/spec/spec_tests/data/retryable_writes/deleteOne-serverErrors.yml +22 -0
  746. data/spec/spec_tests/data/retryable_writes/findOneAndDelete-errorLabels.yml +49 -0
  747. data/spec/spec_tests/data/retryable_writes/findOneAndDelete-serverErrors.yml +23 -0
  748. data/spec/spec_tests/data/retryable_writes/findOneAndReplace-errorLabels.yml +52 -0
  749. data/spec/spec_tests/data/retryable_writes/findOneAndReplace-serverErrors.yml +25 -0
  750. data/spec/spec_tests/data/retryable_writes/findOneAndUpdate-errorLabels.yml +52 -0
  751. data/spec/spec_tests/data/retryable_writes/findOneAndUpdate-serverErrors.yml +24 -0
  752. data/spec/spec_tests/data/retryable_writes/insertMany-errorLabels.yml +54 -0
  753. data/spec/spec_tests/data/retryable_writes/insertMany-serverErrors.yml +24 -0
  754. data/spec/spec_tests/data/retryable_writes/insertOne-errorLabels.yml +44 -0
  755. data/spec/spec_tests/data/retryable_writes/insertOne-serverErrors.yml +90 -0
  756. data/spec/spec_tests/data/retryable_writes/replaceOne-errorLabels.yml +53 -0
  757. data/spec/spec_tests/data/retryable_writes/replaceOne-serverErrors.yml +23 -0
  758. data/spec/spec_tests/data/retryable_writes/updateOne-errorLabels.yml +53 -0
  759. data/spec/spec_tests/data/retryable_writes/updateOne-serverErrors.yml +23 -0
  760. data/spec/spec_tests/data/sdam/errors/error_handling_handshake.yml +54 -0
  761. data/spec/spec_tests/data/sdam/errors/non-stale-network-error.yml +46 -0
  762. data/spec/spec_tests/data/sdam/errors/non-stale-network-timeout-error.yml +37 -0
  763. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-InterruptedAtShutdown.yml +60 -0
  764. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-InterruptedDueToReplStateChange.yml +60 -0
  765. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotMaster.yml +60 -0
  766. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotMasterNoSlaveOk.yml +60 -0
  767. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotMasterOrSecondary.yml +60 -0
  768. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-PrimarySteppedDown.yml +60 -0
  769. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-ShutdownInProgress.yml +60 -0
  770. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-InterruptedAtShutdown.yml +51 -0
  771. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-InterruptedDueToReplStateChange.yml +51 -0
  772. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotMaster.yml +51 -0
  773. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotMasterNoSlaveOk.yml +51 -0
  774. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotMasterOrSecondary.yml +51 -0
  775. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-PrimarySteppedDown.yml +51 -0
  776. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-ShutdownInProgress.yml +51 -0
  777. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-InterruptedAtShutdown.yml +60 -0
  778. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-InterruptedDueToReplStateChange.yml +60 -0
  779. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotMaster.yml +60 -0
  780. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotMasterNoSlaveOk.yml +60 -0
  781. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotMasterOrSecondary.yml +60 -0
  782. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-PrimarySteppedDown.yml +60 -0
  783. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-ShutdownInProgress.yml +60 -0
  784. data/spec/spec_tests/data/sdam/errors/post-42-InterruptedAtShutdown.yml +46 -0
  785. data/spec/spec_tests/data/sdam/errors/post-42-InterruptedDueToReplStateChange.yml +46 -0
  786. data/spec/spec_tests/data/sdam/errors/post-42-NotMaster.yml +46 -0
  787. data/spec/spec_tests/data/sdam/errors/post-42-NotMasterNoSlaveOk.yml +46 -0
  788. data/spec/spec_tests/data/sdam/errors/post-42-NotMasterOrSecondary.yml +46 -0
  789. data/spec/spec_tests/data/sdam/errors/post-42-PrimarySteppedDown.yml +46 -0
  790. data/spec/spec_tests/data/sdam/errors/post-42-ShutdownInProgress.yml +46 -0
  791. data/spec/spec_tests/data/sdam/errors/pre-42-InterruptedAtShutdown.yml +46 -0
  792. data/spec/spec_tests/data/sdam/errors/pre-42-InterruptedDueToReplStateChange.yml +46 -0
  793. data/spec/spec_tests/data/sdam/errors/pre-42-NotMaster.yml +46 -0
  794. data/spec/spec_tests/data/sdam/errors/pre-42-NotMasterNoSlaveOk.yml +46 -0
  795. data/spec/spec_tests/data/sdam/errors/pre-42-NotMasterOrSecondary.yml +46 -0
  796. data/spec/spec_tests/data/sdam/errors/pre-42-PrimarySteppedDown.yml +46 -0
  797. data/spec/spec_tests/data/sdam/errors/pre-42-ShutdownInProgress.yml +46 -0
  798. data/spec/spec_tests/data/sdam/errors/stale-generation-InterruptedAtShutdown.yml +89 -0
  799. data/spec/spec_tests/data/sdam/errors/stale-generation-InterruptedDueToReplStateChange.yml +89 -0
  800. data/spec/spec_tests/data/sdam/errors/stale-generation-NotMaster.yml +89 -0
  801. data/spec/spec_tests/data/sdam/errors/stale-generation-NotMasterNoSlaveOk.yml +89 -0
  802. data/spec/spec_tests/data/sdam/errors/stale-generation-NotMasterOrSecondary.yml +89 -0
  803. data/spec/spec_tests/data/sdam/errors/stale-generation-PrimarySteppedDown.yml +89 -0
  804. data/spec/spec_tests/data/sdam/errors/stale-generation-ShutdownInProgress.yml +89 -0
  805. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-InterruptedAtShutdown.yml +89 -0
  806. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-InterruptedDueToReplStateChange.yml +89 -0
  807. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotMaster.yml +89 -0
  808. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotMasterNoSlaveOk.yml +89 -0
  809. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotMasterOrSecondary.yml +89 -0
  810. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-PrimarySteppedDown.yml +89 -0
  811. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-ShutdownInProgress.yml +89 -0
  812. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-network.yml +80 -0
  813. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-timeout.yml +80 -0
  814. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-InterruptedAtShutdown.yml +89 -0
  815. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-InterruptedDueToReplStateChange.yml +89 -0
  816. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotMaster.yml +89 -0
  817. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotMasterNoSlaveOk.yml +89 -0
  818. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotMasterOrSecondary.yml +89 -0
  819. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-PrimarySteppedDown.yml +89 -0
  820. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-ShutdownInProgress.yml +89 -0
  821. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-network.yml +80 -0
  822. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-timeout.yml +80 -0
  823. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-InterruptedAtShutdown.yml +64 -0
  824. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-InterruptedDueToReplStateChange.yml +64 -0
  825. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotMaster.yml +64 -0
  826. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotMasterNoSlaveOk.yml +64 -0
  827. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotMasterOrSecondary.yml +64 -0
  828. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-PrimarySteppedDown.yml +64 -0
  829. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-ShutdownInProgress.yml +64 -0
  830. data/spec/spec_tests/data/sdam/rs/compatible.yml +2 -0
  831. data/spec/spec_tests/data/sdam/rs/compatible_unknown.yml +2 -0
  832. data/spec/spec_tests/data/sdam/rs/discover_arbiters.yml +2 -2
  833. data/spec/spec_tests/data/sdam/rs/discover_arbiters_replicaset.yml +43 -0
  834. data/spec/spec_tests/data/sdam/rs/discover_ghost.yml +35 -0
  835. data/spec/spec_tests/data/sdam/rs/{ghost_discovered.yml → discover_ghost_replicaset.yml} +1 -1
  836. data/spec/spec_tests/data/sdam/rs/discover_hidden.yml +50 -0
  837. data/spec/spec_tests/data/sdam/rs/discover_hidden_replicaset.yml +50 -0
  838. data/spec/spec_tests/data/sdam/rs/discover_passives.yml +2 -2
  839. data/spec/spec_tests/data/sdam/rs/discover_passives_replicaset.yml +81 -0
  840. data/spec/spec_tests/data/sdam/rs/discover_primary.yml +2 -2
  841. data/spec/spec_tests/data/sdam/rs/discover_primary_replicaset.yml +42 -0
  842. data/spec/spec_tests/data/sdam/rs/discover_rsother.yml +49 -0
  843. data/spec/spec_tests/data/sdam/rs/{rsother_discovered.yml → discover_rsother_replicaset.yml} +1 -1
  844. data/spec/spec_tests/data/sdam/rs/discover_secondary.yml +2 -2
  845. data/spec/spec_tests/data/sdam/rs/discover_secondary_replicaset.yml +43 -0
  846. data/spec/spec_tests/data/sdam/rs/incompatible_arbiter.yml +2 -0
  847. data/spec/spec_tests/data/sdam/rs/incompatible_ghost.yml +4 -4
  848. data/spec/spec_tests/data/sdam/rs/incompatible_other.yml +3 -1
  849. data/spec/spec_tests/data/sdam/rs/primary_mismatched_me.yml +23 -27
  850. data/spec/spec_tests/data/sdam/rs/primary_mismatched_me_not_removed.yml +73 -0
  851. data/spec/spec_tests/data/sdam/rs/primary_to_no_primary_mismatched_me.yml +79 -56
  852. data/spec/spec_tests/data/sdam/rs/repeated.yml +101 -0
  853. data/spec/spec_tests/data/sdam/rs/replicaset_rsnp.yml +20 -0
  854. data/spec/spec_tests/data/sdam/rs/{primary_address_change.yml → ruby_primary_address_change.yml} +2 -0
  855. data/spec/spec_tests/data/sdam/rs/{secondary_wrong_set_name_with_primary_second.yml → ruby_secondary_wrong_set_name_with_primary_second.yml} +0 -0
  856. data/spec/spec_tests/data/sdam/rs/secondary_mismatched_me.yml +3 -2
  857. data/spec/spec_tests/data/sdam/rs/too_new.yml +2 -0
  858. data/spec/spec_tests/data/sdam/rs/topology_version_equal.yml +66 -0
  859. data/spec/spec_tests/data/sdam/rs/topology_version_greater.yml +189 -0
  860. data/spec/spec_tests/data/sdam/rs/topology_version_less.yml +62 -0
  861. data/spec/spec_tests/data/sdam/sharded/discover_single_mongos.yml +23 -0
  862. data/spec/spec_tests/data/sdam/sharded/{primary_address_change.yml → ruby_primary_different_address.yml} +1 -1
  863. data/spec/spec_tests/data/sdam/sharded/{primary_mismatched_me.yml → ruby_primary_mismatched_me.yml} +1 -1
  864. data/spec/spec_tests/data/sdam/single/direct_connection_external_ip.yml +1 -1
  865. data/spec/spec_tests/data/sdam/single/direct_connection_mongos.yml +2 -2
  866. data/spec/spec_tests/data/sdam/single/direct_connection_replicaset.yml +22 -0
  867. data/spec/spec_tests/data/sdam/single/direct_connection_rsarbiter.yml +2 -2
  868. data/spec/spec_tests/data/sdam/single/direct_connection_rsprimary.yml +2 -2
  869. data/spec/spec_tests/data/sdam/single/direct_connection_rssecondary.yml +2 -2
  870. data/spec/spec_tests/data/sdam/single/direct_connection_slave.yml +1 -1
  871. data/spec/spec_tests/data/sdam/single/direct_connection_standalone.yml +2 -2
  872. data/spec/spec_tests/data/sdam/single/{unavailable_seed.yml → direct_connection_unavailable_seed.yml} +2 -2
  873. data/spec/spec_tests/data/sdam/single/direct_connection_wrong_set_name.yml +38 -0
  874. data/spec/spec_tests/data/sdam/{sharded/single_mongos.yml → single/discover_standalone.yml} +7 -6
  875. data/spec/spec_tests/data/sdam/single/discover_unavailable_seed.yml +28 -0
  876. data/spec/spec_tests/data/sdam/single/{primary_address_change.yml → ruby_primary_different_address.yml} +1 -1
  877. data/spec/spec_tests/data/sdam/single/{primary_mismatched_me.yml → ruby_primary_mismatched_me.yml} +1 -1
  878. data/spec/spec_tests/data/sdam/single/too_old_then_upgraded.yml +46 -0
  879. data/spec/spec_tests/data/sdam_monitoring/{replica_set_with_primary_change.yml → replica_set_primary_address_change.yml} +27 -5
  880. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_me_mismatch.yml +26 -74
  881. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_removal.yml +20 -16
  882. data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +73 -0
  883. data/spec/spec_tests/data/transactions/create-collection.yml +131 -0
  884. data/spec/spec_tests/data/transactions/create-index.yml +152 -0
  885. data/spec/spec_tests/data/transactions/error-labels.yml +87 -21
  886. data/spec/spec_tests/data/transactions/mongos-recovery-token.yml +1 -0
  887. data/spec/spec_tests/data/transactions/pin-mongos.yml +2 -3
  888. data/spec/spec_tests/data/transactions/retryable-abort-errorLabels.yml +124 -0
  889. data/spec/spec_tests/data/transactions/retryable-abort.yml +17 -2
  890. data/spec/spec_tests/data/transactions/retryable-commit-errorLabels.yml +132 -0
  891. data/spec/spec_tests/data/transactions/retryable-commit.yml +24 -9
  892. data/spec/spec_tests/data/uri_options/auth-options.yml +10 -0
  893. data/spec/spec_tests/data/uri_options/connection-options.yml +43 -0
  894. data/spec/spec_tests/data/uri_options/ruby-auth-options.yml +12 -0
  895. data/spec/spec_tests/data/uri_options/ruby-connection-options.yml +57 -0
  896. data/spec/spec_tests/data/uri_options/tls-options.yml +75 -4
  897. data/spec/spec_tests/dns_seedlist_discovery_spec.rb +3 -1
  898. data/spec/spec_tests/gridfs_spec.rb +2 -0
  899. data/spec/spec_tests/max_staleness_spec.rb +3 -1
  900. data/spec/spec_tests/read_write_concern_connection_string_spec.rb +3 -1
  901. data/spec/spec_tests/read_write_concern_operaton_spec.rb +10 -0
  902. data/spec/spec_tests/retryable_reads_spec.rb +2 -0
  903. data/spec/spec_tests/retryable_writes_spec.rb +8 -1
  904. data/spec/spec_tests/sdam_monitoring_spec.rb +3 -1
  905. data/spec/spec_tests/sdam_spec.rb +70 -1
  906. data/spec/spec_tests/server_selection_rtt_spec.rb +2 -0
  907. data/spec/spec_tests/server_selection_spec.rb +2 -0
  908. data/spec/spec_tests/transactions_api_spec.rb +5 -0
  909. data/spec/spec_tests/transactions_spec.rb +5 -0
  910. data/spec/spec_tests/uri_options_spec.rb +8 -8
  911. data/spec/stress/cleanup_spec.rb +43 -0
  912. data/spec/stress/connection_pool_stress_spec.rb +1 -5
  913. data/spec/stress/connection_pool_timing_spec.rb +9 -9
  914. data/spec/stress/fork_reconnect_stress_spec.rb +109 -0
  915. data/spec/support/authorization.rb +1 -11
  916. data/spec/support/aws_utils.rb +62 -0
  917. data/spec/support/aws_utils/base.rb +134 -0
  918. data/spec/support/aws_utils/inspector.rb +224 -0
  919. data/spec/support/aws_utils/orchestrator.rb +370 -0
  920. data/spec/support/aws_utils/provisioner.rb +360 -0
  921. data/spec/support/background_thread_registry.rb +6 -2
  922. data/spec/support/certificates/README.md +4 -0
  923. data/spec/support/certificates/server-second-level-bundle.pem +77 -77
  924. data/spec/support/certificates/server-second-level.crt +52 -52
  925. data/spec/support/certificates/server-second-level.key +25 -25
  926. data/spec/support/certificates/server-second-level.pem +77 -77
  927. data/spec/support/client_registry.rb +24 -27
  928. data/spec/support/cluster_config.rb +10 -1
  929. data/spec/support/cluster_tools.rb +11 -4
  930. data/spec/support/common_shortcuts.rb +55 -0
  931. data/spec/support/constraints.rb +43 -7
  932. data/spec/support/crypt.rb +154 -0
  933. data/spec/support/crypt/corpus/corpus-key-aws.json +33 -0
  934. data/spec/support/crypt/corpus/corpus-key-local.json +31 -0
  935. data/spec/support/crypt/corpus/corpus-schema.json +2057 -0
  936. data/spec/support/crypt/corpus/corpus.json +3657 -0
  937. data/spec/support/crypt/corpus/corpus_encrypted.json +4152 -0
  938. data/spec/support/crypt/data_keys/key_document_aws.json +34 -0
  939. data/spec/support/crypt/data_keys/key_document_local.json +31 -0
  940. data/spec/support/crypt/external/external-key.json +31 -0
  941. data/spec/support/crypt/external/external-schema.json +19 -0
  942. data/spec/support/crypt/limits/limits-doc.json +102 -0
  943. data/spec/support/crypt/limits/limits-key.json +31 -0
  944. data/spec/support/crypt/limits/limits-schema.json +1405 -0
  945. data/spec/support/crypt/schema_maps/schema_map_aws.json +17 -0
  946. data/spec/support/crypt/schema_maps/schema_map_aws_key_alt_names.json +12 -0
  947. data/spec/support/crypt/schema_maps/schema_map_local.json +18 -0
  948. data/spec/support/crypt/schema_maps/schema_map_local_key_alt_names.json +12 -0
  949. data/spec/support/event_subscriber.rb +94 -84
  950. data/spec/support/lite_constraints.rb +74 -1
  951. data/spec/support/matchers.rb +19 -0
  952. data/spec/support/shared/protocol.rb +2 -0
  953. data/spec/support/shared/scram_conversation.rb +100 -0
  954. data/spec/support/shared/server_selector.rb +81 -1
  955. data/spec/support/shared/session.rb +29 -21
  956. data/spec/support/spec_config.rb +92 -22
  957. data/spec/support/spec_setup.rb +8 -4
  958. data/spec/support/utils.rb +263 -32
  959. metadata +1285 -682
  960. metadata.gz.sig +0 -0
  961. data/lib/mongo/cluster/srv_monitor.rb +0 -127
  962. data/lib/mongo/server/connectable.rb +0 -107
  963. data/lib/mongo/srv/warning_result.rb +0 -35
  964. data/spec/enterprise_auth/kerberos_spec.rb +0 -58
  965. data/spec/mongo/cluster/srv_monitor_spec.rb +0 -214
  966. data/spec/mongo/operation/read_preference_spec.rb +0 -245
  967. data/spec/support/change_streams.rb +0 -262
  968. data/spec/support/change_streams/operation.rb +0 -89
  969. data/spec/support/connection_string.rb +0 -354
  970. data/spec/support/crud/test_base.rb +0 -22
@@ -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.
@@ -0,0 +1,99 @@
1
+ # Copyright (C) 2020 MongoDB Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module Mongo
16
+ class Error
17
+
18
+ # Raised if an unsupported option is specified for an operation.
19
+ class UnsupportedOption < Error
20
+ # @api private
21
+ #
22
+ # The error message provided when the user passes the hint option to
23
+ # a write operation against a server that does not support the hint
24
+ # option and does not provide option validation.
25
+ HINT_MESSAGE = "The MongoDB server handling this request does not support " \
26
+ "the hint option on this command. The hint option is supported on update " \
27
+ "commands on MongoDB server versions 4.2 and later and on findAndModify " \
28
+ "and delete commands on MongoDB server versions 4.4 and later"
29
+
30
+ # @api private
31
+ #
32
+ # The error message provided when the user passes the hint option to
33
+ # an unacknowledged write operation.
34
+ UNACKNOWLEDGED_HINT_MESSAGE = "The hint option cannot be specified on " \
35
+ "an unacknowledged write operation. Remove the hint option or perform " \
36
+ "this operation with a write concern of at least { w: 1 }"
37
+
38
+ # @api private
39
+ #
40
+ # The error message provided when the user passes the allow_disk_use
41
+ # option to a find operation against a server that does not support the
42
+ # allow_disk_use operation and does not provide option validation.
43
+ ALLOW_DISK_USE_MESSAGE = "The MongoDB server handling this request does " \
44
+ "not support the allow_disk_use option on this command. The " \
45
+ "allow_disk_use option is supported on find commands on MongoDB " \
46
+ "server versions 4.4 and later"
47
+
48
+ # @api private
49
+ #
50
+ # The error message provided when the user passes the commit_quorum option
51
+ # to a createIndexes operation against a server that does not support
52
+ # that option.
53
+ COMMIT_QUORUM_MESSAGE = "The MongoDB server handling this request does " \
54
+ "not support the commit_quorum option on this command. The commit_quorum " \
55
+ "option is supported on createIndexes commands on MongoDB server versions " \
56
+ "4.4 and later"
57
+
58
+ # Raise an error about an unsupported hint option.
59
+ #
60
+ # @param [ Hash ] options
61
+ #
62
+ # @option options [ Boolean ] unacknowledged_write Whether this error
63
+ # pertains to a hint option passed to an unacknowledged write. Defaults
64
+ # to false.
65
+ #
66
+ # @return [ Mongo::Error::UnsupportedOption ] An error with a default
67
+ # error message.
68
+ def self.hint_error(**options)
69
+ unacknowledged_write = options[:unacknowledged_write] || false
70
+
71
+ error_message = if unacknowledged_write
72
+ UNACKNOWLEDGED_HINT_MESSAGE
73
+ else
74
+ HINT_MESSAGE
75
+ end
76
+
77
+ new(error_message)
78
+ end
79
+
80
+ # Raise an error about an unsupported allow_disk_use option.
81
+ #
82
+ # @param [ Hash ] options
83
+ #
84
+ # @return [ Mongo::Error::UnsupportedOption ] An error with a default
85
+ # error message.
86
+ def self.allow_disk_use_error
87
+ new(ALLOW_DISK_USE_MESSAGE)
88
+ end
89
+
90
+ # Raise an error about an unsupported commit_quorum option.
91
+ #
92
+ # @return [ Mongo::Error::UnsupportedOption ] An error with a default
93
+ # error message.
94
+ def self.commit_quorum_error
95
+ new(COMMIT_QUORUM_MESSAGE)
96
+ end
97
+ end
98
+ end
99
+ end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2018-2019 MongoDB, Inc.
1
+ # Copyright (C) 2018-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.
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2018-2019 MongoDB, Inc.
1
+ # Copyright (C) 2018-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) 2015-2019 MongoDB, Inc.
1
+ # Copyright (C) 2015-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.
@@ -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.
@@ -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.
@@ -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.
@@ -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.
@@ -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.
@@ -204,7 +204,7 @@ module Mongo
204
204
  # @note This method is transitional and is provided for backwards compatibility.
205
205
  # It will be removed when md5 support is deprecated entirely.
206
206
  #
207
- # @param [ String ] The bytes to use to update the digest.
207
+ # @param [ String ] bytes The bytes to use to update the digest.
208
208
  #
209
209
  # @return [ Digest::MD5 ] The md5 hash object.
210
210
  #
@@ -254,7 +254,8 @@ module Mongo
254
254
  BSON::Document.new(
255
255
  :_id => BSON::ObjectId.new,
256
256
  :chunkSize => Chunk::DEFAULT_SIZE,
257
- :uploadDate => Time.now.utc,
257
+ # MongoDB stores times with millisecond precision
258
+ :uploadDate => Time.now.utc.round(3),
258
259
  :contentType => DEFAULT_CONTENT_TYPE
259
260
  )
260
261
  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.
@@ -70,6 +70,8 @@ module Mongo
70
70
  # @param [ Hash ] selector The selector to use in the find.
71
71
  # @param [ Hash ] options The options for the find.
72
72
  #
73
+ # @option options [ true, false ] :allow_disk_use Whether the server can
74
+ # write temporary data to disk while executing the find operation.
73
75
  # @option options [ Integer ] :batch_size The number of documents returned in each batch
74
76
  # of results from MongoDB.
75
77
  # @option options [ Integer ] :limit The max number of docs to return from the query.
@@ -418,7 +420,10 @@ module Mongo
418
420
  open_upload_stream(filename, opts) do |stream|
419
421
  begin
420
422
  stream.write(io)
421
- rescue IOError
423
+ # IOError and SystemCallError are for errors reading the io.
424
+ # Error::SocketError and Error::SocketTimeoutError are for
425
+ # writing to MongoDB.
426
+ rescue IOError, SystemCallError, Error::SocketError, Error::SocketTimeoutError
422
427
  begin
423
428
  stream.abort
424
429
  rescue Error::OperationFailure
@@ -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.
@@ -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.
@@ -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.
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2016-2019 MongoDB, Inc.
1
+ # Copyright (C) 2016-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.
@@ -49,6 +49,7 @@ module Mongo
49
49
  # Specify a geoHaystack index.
50
50
  #
51
51
  # @since 2.0.0
52
+ # @deprecated
52
53
  GEOHAYSTACK = 'geoHaystack'.freeze
53
54
 
54
55
  # Encodes a text index.
@@ -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.
@@ -120,6 +120,10 @@ module Mongo
120
120
  # a geo index.
121
121
  # @option options [ Hash ] :partial_filter_expression Specify a filter for a partial
122
122
  # index.
123
+ # @option options [ String | Integer ] :commit_quorum Specify how many
124
+ # data-bearing members of a replica set, including the primary, must
125
+ # complete the index builds successfully before the primary marks
126
+ # the indexes as ready.
123
127
  #
124
128
  # @note Note that the options listed may be subset of those available.
125
129
  # See the MongoDB documentation for a full list of supported options by server version.
@@ -128,7 +132,10 @@ module Mongo
128
132
  #
129
133
  # @since 2.0.0
130
134
  def create_one(keys, options = {})
131
- create_many({ key: keys }.merge(options))
135
+ options = options.dup
136
+
137
+ create_options = { commit_quorum: options.delete(:commit_quorum) }
138
+ create_many({ key: keys }.merge(options), create_options)
132
139
  end
133
140
 
134
141
  # Creates multiple indexes on the collection.
@@ -139,11 +146,23 @@ module Mongo
139
146
  # { key: { age: -1 }, background: true }
140
147
  # ])
141
148
  #
149
+ # @example Create multiple indexes with options.
150
+ # view.create_many(
151
+ # { key: { name: 1 }, unique: true },
152
+ # { key: { age: -1 }, background: true },
153
+ # { commit_quorum: 'majority' }
154
+ # )
155
+ #
142
156
  # @note On MongoDB 3.0.0 and higher, the indexes will be created in
143
157
  # parallel on the server.
144
158
  #
145
159
  # @param [ Array<Hash> ] models The index specifications. Each model MUST
146
- # include a :key option.
160
+ # include a :key option, except for the last item in the Array, which
161
+ # may be a Hash specifying options relevant to the createIndexes operation.
162
+ # The following options are accepted:
163
+ # - commit_quorum: Specify how many data-bearing members of a replica set,
164
+ # including the primary, must complete the index builds successfully
165
+ # before the primary marks the indexes as ready.
147
166
  #
148
167
  # @return [ Result ] The result of the command.
149
168
  #
@@ -151,14 +170,42 @@ module Mongo
151
170
  def create_many(*models)
152
171
  client.send(:with_session, @options) do |session|
153
172
  server = next_primary(nil, session)
173
+
174
+ models = models.flatten
175
+ options = {}
176
+ if models && !models.last.key?(:key)
177
+ options = models.pop
178
+ end
179
+
180
+ # While server versions 3.4 and newer generally perform option
181
+ # validation, there was a bug on server versions 4.2.0 - 4.2.5 where
182
+ # the server would accept the commitQuorum option and use it internally
183
+ # (see SERVER-47193). As a result, the drivers specifications require
184
+ # drivers to perform validation and raise an error when the commitQuorum
185
+ # option is passed to servers that don't support it.
186
+ description = server.with_connection { |connection| connection.description }
187
+ if description.max_wire_version < 9 && options[:commit_quorum]
188
+ raise Error::UnsupportedOption.commit_quorum_error
189
+ end
190
+
191
+ indexes = normalize_models(models, server)
192
+ indexes.each do |index|
193
+ if index[:bucketSize] || index['bucketSize']
194
+ client.log_warn("Haystack indexes (bucketSize index option) are deprecated as of MongoDB 4.4")
195
+ end
196
+ end
197
+
154
198
  spec = {
155
- indexes: normalize_models(models.flatten, server),
156
- db_name: database.name,
157
- coll_name: collection.name,
158
- session: session
159
- }
160
- spec[:write_concern] = write_concern if server.features.collation_enabled?
161
- Operation::CreateIndex.new(spec).execute(server)
199
+ indexes: indexes,
200
+ db_name: database.name,
201
+ coll_name: collection.name,
202
+ session: session,
203
+ commit_quorum: options[:commit_quorum]
204
+ }
205
+
206
+ spec[:write_concern] = write_concern if description.features.collation_enabled?
207
+
208
+ Operation::CreateIndex.new(spec).execute(server, client: client)
162
209
  end
163
210
  end
164
211
 
@@ -235,8 +282,8 @@ module Mongo
235
282
  session: session
236
283
  }
237
284
  server = next_primary(nil, session)
238
- spec[:write_concern] = write_concern if server.features.collation_enabled?
239
- Operation::DropIndex.new(spec).execute(server)
285
+ spec[:write_concern] = write_concern if server.with_connection { |connection| connection.features }.collation_enabled?
286
+ Operation::DropIndex.new(spec).execute(server, client: client)
240
287
  end
241
288
  end
242
289
 
@@ -272,7 +319,7 @@ module Mongo
272
319
  end
273
320
 
274
321
  def send_initial_query(server, session)
275
- initial_query_op(session).execute(server)
322
+ initial_query_op(session).execute(server, client: client)
276
323
  end
277
324
 
278
325
  def with_generated_names(models, server)
@@ -286,7 +333,7 @@ module Mongo
286
333
 
287
334
  def validate_collation!(model, server)
288
335
  if (model[:collation] || model[Operation::COLLATION]) &&
289
- !server.features.collation_enabled?
336
+ !server.with_connection { |connection| connection.features }.collation_enabled?
290
337
  raise Error::UnsupportedCollation.new
291
338
  end
292
339
  end
@@ -1,6 +1,16 @@
1
1
  module Mongo
2
+
2
3
  # @api private
3
4
  module Lint
5
+
6
+ # Raises LintError if +obj+ is not of type +cls+.
7
+ module_function def assert_type(obj, cls)
8
+ return unless enabled?
9
+ unless obj.is_a?(cls)
10
+ raise Error::LintError, "Expected #{obj} to be a #{cls}"
11
+ end
12
+ end
13
+
4
14
  def validate_underscore_read_preference(read_pref)
5
15
  return unless enabled?
6
16
  return if read_pref.nil?
@@ -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.
@@ -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.
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2015-2019 MongoDB, Inc.
1
+ # Copyright (C) 2015-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) 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) 2015-2019 MongoDB, Inc.
1
+ # Copyright (C) 2015-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.
@@ -54,8 +54,11 @@ module Mongo
54
54
  # @since 2.1.0
55
55
  def started(event)
56
56
  if logger.debug?
57
- log_debug("#{prefix(event, connection_id: event.connection_id)} | " +
58
- "STARTED | #{format_command(event.command)}")
57
+ _prefix = prefix(event,
58
+ connection_generation: event.connection_generation,
59
+ connection_id: event.connection_id,
60
+ )
61
+ log_debug("#{_prefix} | STARTED | #{format_command(event.command)}")
59
62
  end
60
63
  end
61
64
 
@@ -97,8 +100,12 @@ module Mongo
97
100
  end
98
101
  end
99
102
 
100
- def prefix(event, connection_id: nil)
101
- "[#{event.request_id}] #{event.address.to_s}#{connection_id && " ##{connection_id}"} | " +
103
+ def prefix(event, connection_generation: nil, connection_id: nil)
104
+ extra = [connection_generation, connection_id].compact.join(':')
105
+ if extra == ''
106
+ extra = nil
107
+ end
108
+ "[#{event.request_id}] #{event.address.to_s}#{extra && " ##{extra}"} | " +
102
109
  "#{event.database_name}.#{event.command_name}"
103
110
  end
104
111