mongo 2.17.2 → 2.18.1

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 (689) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +21 -37
  4. data/lib/mongo/auth/base.rb +8 -1
  5. data/lib/mongo/auth.rb +12 -1
  6. data/lib/mongo/bulk_write/result.rb +10 -1
  7. data/lib/mongo/bulk_write/result_combiner.rb +2 -4
  8. data/lib/mongo/bulk_write.rb +115 -29
  9. data/lib/mongo/client.rb +133 -17
  10. data/lib/mongo/client_encryption.rb +113 -10
  11. data/lib/mongo/cluster/reapers/cursor_reaper.rb +11 -1
  12. data/lib/mongo/cluster.rb +26 -28
  13. data/lib/mongo/collection/helpers.rb +43 -0
  14. data/lib/mongo/collection/queryable_encryption.rb +122 -0
  15. data/lib/mongo/collection/view/aggregation.rb +22 -16
  16. data/lib/mongo/collection/view/change_stream.rb +65 -23
  17. data/lib/mongo/collection/view/explainable.rb +1 -1
  18. data/lib/mongo/collection/view/iterable.rb +2 -2
  19. data/lib/mongo/collection/view/map_reduce.rb +18 -9
  20. data/lib/mongo/collection/view/readable.rb +29 -25
  21. data/lib/mongo/collection/view/writable.rb +133 -40
  22. data/lib/mongo/collection.rb +117 -49
  23. data/lib/mongo/config/options.rb +62 -0
  24. data/lib/mongo/config/validators/option.rb +26 -0
  25. data/lib/mongo/config.rb +42 -0
  26. data/lib/mongo/crypt/auto_encrypter.rb +136 -14
  27. data/lib/mongo/crypt/binding.rb +513 -144
  28. data/lib/mongo/crypt/context.rb +5 -2
  29. data/lib/mongo/crypt/data_key_context.rb +12 -104
  30. data/lib/mongo/crypt/encryption_io.rb +94 -60
  31. data/lib/mongo/crypt/explicit_encrypter.rb +143 -26
  32. data/lib/mongo/crypt/explicit_encryption_context.rb +25 -2
  33. data/lib/mongo/crypt/handle.rb +160 -86
  34. data/lib/mongo/crypt/hooks.rb +25 -2
  35. data/lib/mongo/crypt/kms/aws.rb +136 -0
  36. data/lib/mongo/crypt/kms/azure.rb +144 -0
  37. data/lib/mongo/crypt/kms/credentials.rb +81 -0
  38. data/lib/mongo/crypt/kms/gcp.rb +189 -0
  39. data/lib/mongo/crypt/kms/kmip.rb +116 -0
  40. data/lib/mongo/crypt/kms/local.rb +82 -0
  41. data/lib/mongo/crypt/kms/master_key_document.rb +65 -0
  42. data/lib/mongo/crypt/kms.rb +117 -0
  43. data/lib/mongo/crypt/rewrap_many_data_key_context.rb +46 -0
  44. data/lib/mongo/crypt/rewrap_many_data_key_result.rb +37 -0
  45. data/lib/mongo/crypt/status.rb +8 -2
  46. data/lib/mongo/crypt.rb +3 -0
  47. data/lib/mongo/cursor/kill_spec.rb +27 -6
  48. data/lib/mongo/cursor.rb +26 -11
  49. data/lib/mongo/database/view.rb +6 -3
  50. data/lib/mongo/database.rb +57 -13
  51. data/lib/mongo/dbref.rb +1 -105
  52. data/lib/mongo/error/bulk_write_error.rb +31 -4
  53. data/lib/mongo/error/invalid_config_option.rb +20 -0
  54. data/lib/mongo/error/invalid_replacement_document.rb +27 -9
  55. data/lib/mongo/error/invalid_update_document.rb +27 -7
  56. data/lib/mongo/error/labelable.rb +72 -0
  57. data/lib/mongo/error/missing_connection.rb +25 -0
  58. data/lib/mongo/error/missing_file_chunk.rb +8 -2
  59. data/lib/mongo/error/notable.rb +7 -0
  60. data/lib/mongo/error/operation_failure.rb +34 -86
  61. data/lib/mongo/error/read_write_retryable.rb +108 -0
  62. data/lib/mongo/{operation/kill_cursors/legacy.rb → error/session_not_materialized.rb} +7 -19
  63. data/lib/mongo/error.rb +5 -37
  64. data/lib/mongo/grid/stream/read.rb +6 -0
  65. data/lib/mongo/index/view.rb +23 -7
  66. data/lib/mongo/monitoring/event/command_failed.rb +8 -2
  67. data/lib/mongo/monitoring/event/command_started.rb +1 -1
  68. data/lib/mongo/monitoring/event/command_succeeded.rb +9 -2
  69. data/lib/mongo/monitoring/publishable.rb +9 -5
  70. data/lib/mongo/operation/collections_info/result.rb +5 -2
  71. data/lib/mongo/operation/command/op_msg.rb +6 -0
  72. data/lib/mongo/operation/context.rb +24 -6
  73. data/lib/mongo/operation/count/op_msg.rb +4 -1
  74. data/lib/mongo/operation/create/op_msg.rb +4 -1
  75. data/lib/mongo/operation/create_index/op_msg.rb +2 -1
  76. data/lib/mongo/operation/delete/op_msg.rb +1 -0
  77. data/lib/mongo/operation/delete.rb +0 -1
  78. data/lib/mongo/operation/distinct/op_msg.rb +4 -1
  79. data/lib/mongo/operation/drop_index/op_msg.rb +5 -1
  80. data/lib/mongo/operation/get_more/command_builder.rb +5 -1
  81. data/lib/mongo/operation/insert/bulk_result.rb +5 -1
  82. data/lib/mongo/operation/insert/command.rb +0 -4
  83. data/lib/mongo/operation/insert/op_msg.rb +6 -3
  84. data/lib/mongo/operation/insert/result.rb +6 -3
  85. data/lib/mongo/operation/insert.rb +0 -1
  86. data/lib/mongo/operation/kill_cursors.rb +0 -1
  87. data/lib/mongo/operation/list_collections/op_msg.rb +4 -1
  88. data/lib/mongo/operation/map_reduce/result.rb +16 -0
  89. data/lib/mongo/operation/result.rb +21 -5
  90. data/lib/mongo/operation/shared/executable.rb +21 -6
  91. data/lib/mongo/operation/shared/polymorphic_operation.rb +15 -3
  92. data/lib/mongo/operation/shared/response_handling.rb +6 -5
  93. data/lib/mongo/operation/shared/sessions_supported.rb +7 -3
  94. data/lib/mongo/operation/shared/write.rb +18 -12
  95. data/lib/mongo/operation/update/op_msg.rb +2 -1
  96. data/lib/mongo/operation/update.rb +0 -1
  97. data/lib/mongo/protocol/caching_hash.rb +69 -0
  98. data/lib/mongo/protocol/msg.rb +21 -1
  99. data/lib/mongo/protocol.rb +1 -0
  100. data/lib/mongo/query_cache.rb +15 -0
  101. data/lib/mongo/retryable.rb +78 -30
  102. data/lib/mongo/server/connection.rb +33 -0
  103. data/lib/mongo/server/connection_base.rb +2 -0
  104. data/lib/mongo/server/connection_common.rb +4 -1
  105. data/lib/mongo/server/connection_pool.rb +74 -46
  106. data/lib/mongo/server/description/features.rb +3 -1
  107. data/lib/mongo/server/description.rb +7 -2
  108. data/lib/mongo/server/monitor/connection.rb +1 -0
  109. data/lib/mongo/server/monitor.rb +25 -13
  110. data/lib/mongo/server/push_monitor.rb +13 -3
  111. data/lib/mongo/server.rb +9 -5
  112. data/lib/mongo/session/session_pool.rb +8 -0
  113. data/lib/mongo/session.rb +111 -35
  114. data/lib/mongo/socket/ocsp_verifier.rb +4 -5
  115. data/lib/mongo/socket/tcp.rb +3 -0
  116. data/lib/mongo/srv/resolver.rb +24 -3
  117. data/lib/mongo/uri/options_mapper.rb +2 -0
  118. data/lib/mongo/uri/srv_protocol.rb +1 -1
  119. data/lib/mongo/uri.rb +20 -0
  120. data/lib/mongo/version.rb +1 -1
  121. data/lib/mongo.rb +22 -0
  122. data/mongo.gemspec +10 -4
  123. data/spec/README.md +23 -5
  124. data/spec/integration/aws_lambda_examples_spec.rb +68 -0
  125. data/spec/integration/bulk_write_error_message_spec.rb +32 -0
  126. data/spec/integration/bulk_write_spec.rb +16 -0
  127. data/spec/integration/change_stream_spec.rb +6 -5
  128. data/spec/integration/client_construction_spec.rb +74 -8
  129. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +9 -9
  130. data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +168 -168
  131. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +0 -1
  132. data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +31 -0
  133. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +108 -1
  134. data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +2 -2
  135. data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +2 -2
  136. data/spec/integration/client_side_encryption/client_close_spec.rb +1 -1
  137. data/spec/integration/client_side_encryption/corpus_spec.rb +64 -35
  138. data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +39 -42
  139. data/spec/integration/client_side_encryption/data_key_spec.rb +97 -7
  140. data/spec/integration/client_side_encryption/decryption_events_prose_spec.rb +158 -0
  141. data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +59 -0
  142. data/spec/integration/client_side_encryption/explicit_queryable_encryption_spec.rb +147 -0
  143. data/spec/integration/client_side_encryption/external_key_vault_spec.rb +6 -6
  144. data/spec/integration/client_side_encryption/kms_tls_options_spec.rb +436 -0
  145. data/spec/integration/client_side_encryption/kms_tls_spec.rb +92 -0
  146. data/spec/integration/client_side_encryption/queryable_encryption_examples_spec.rb +111 -0
  147. data/spec/integration/client_side_encryption/unique_index_on_key_alt_names_prose_spec.rb +85 -0
  148. data/spec/integration/client_side_encryption/views_spec.rb +1 -1
  149. data/spec/integration/client_update_spec.rb +2 -2
  150. data/spec/integration/crud_spec.rb +12 -0
  151. data/spec/integration/cursor_pinning_spec.rb +3 -3
  152. data/spec/integration/fork_reconnect_spec.rb +15 -8
  153. data/spec/integration/grid_fs_bucket_spec.rb +3 -3
  154. data/spec/integration/ocsp_verifier_spec.rb +3 -0
  155. data/spec/integration/query_cache_spec.rb +34 -30
  156. data/spec/integration/reconnect_spec.rb +2 -0
  157. data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +1 -1
  158. data/spec/integration/server_monitor_spec.rb +2 -1
  159. data/spec/integration/size_limit_spec.rb +4 -1
  160. data/spec/integration/snapshot_query_examples_spec.rb +127 -0
  161. data/spec/integration/srv_monitoring_spec.rb +38 -0
  162. data/spec/integration/srv_spec.rb +1 -0
  163. data/spec/integration/step_down_spec.rb +20 -4
  164. data/spec/integration/transaction_pinning_spec.rb +2 -2
  165. data/spec/integration/versioned_api_examples_spec.rb +37 -31
  166. data/spec/lite_spec_helper.rb +19 -9
  167. data/spec/mongo/address/ipv6_spec.rb +7 -0
  168. data/spec/mongo/address_spec.rb +7 -0
  169. data/spec/mongo/auth/scram/conversation_spec.rb +23 -23
  170. data/spec/mongo/auth/scram256/conversation_spec.rb +20 -20
  171. data/spec/mongo/auth/scram_negotiation_spec.rb +1 -0
  172. data/spec/mongo/bulk_write/result_spec.rb +15 -1
  173. data/spec/mongo/bulk_write_spec.rb +141 -20
  174. data/spec/mongo/client_construction_spec.rb +186 -9
  175. data/spec/mongo/client_encryption_spec.rb +10 -22
  176. data/spec/mongo/client_spec.rb +297 -1
  177. data/spec/mongo/cluster/cursor_reaper_spec.rb +21 -3
  178. data/spec/mongo/cluster_spec.rb +0 -44
  179. data/spec/mongo/collection/view/aggregation_spec.rb +121 -2
  180. data/spec/mongo/collection/view/change_stream_spec.rb +2 -2
  181. data/spec/mongo/collection/view/readable_spec.rb +605 -1
  182. data/spec/mongo/collection/view/writable_spec.rb +144 -32
  183. data/spec/mongo/collection_crud_spec.rb +63 -13
  184. data/spec/mongo/collection_spec.rb +32 -0
  185. data/spec/mongo/config/options_spec.rb +75 -0
  186. data/spec/mongo/config_spec.rb +73 -0
  187. data/spec/mongo/crypt/auto_decryption_context_spec.rb +17 -1
  188. data/spec/mongo/crypt/auto_encrypter_spec.rb +256 -5
  189. data/spec/mongo/crypt/auto_encryption_context_spec.rb +17 -1
  190. data/spec/mongo/crypt/binding/context_spec.rb +67 -17
  191. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +17 -46
  192. data/spec/mongo/crypt/binding/version_spec.rb +33 -0
  193. data/spec/mongo/crypt/binding_unloaded_spec.rb +14 -0
  194. data/spec/mongo/crypt/data_key_context_spec.rb +42 -114
  195. data/spec/mongo/crypt/encryption_io_spec.rb +2 -0
  196. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +32 -1
  197. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +94 -1
  198. data/spec/mongo/crypt/handle_spec.rb +172 -156
  199. data/spec/mongo/crypt/hooks_spec.rb +30 -0
  200. data/spec/mongo/crypt/kms/credentials_spec.rb +357 -0
  201. data/spec/mongo/crypt/kms_spec.rb +59 -0
  202. data/spec/mongo/cursor_spec.rb +87 -1
  203. data/spec/mongo/database_spec.rb +66 -1
  204. data/spec/mongo/error/operation_failure_heavy_spec.rb +49 -0
  205. data/spec/mongo/index/view_spec.rb +125 -0
  206. data/spec/mongo/operation/create/op_msg_spec.rb +244 -0
  207. data/spec/mongo/operation/delete/op_msg_spec.rb +13 -4
  208. data/spec/mongo/operation/delete_spec.rb +0 -30
  209. data/spec/mongo/operation/insert/op_msg_spec.rb +18 -10
  210. data/spec/mongo/operation/insert_spec.rb +0 -32
  211. data/spec/mongo/operation/result_spec.rb +20 -0
  212. data/spec/mongo/operation/update/op_msg_spec.rb +13 -4
  213. data/spec/mongo/operation/update_spec.rb +0 -29
  214. data/spec/mongo/protocol/caching_hash_spec.rb +82 -0
  215. data/spec/mongo/protocol/msg_spec.rb +41 -0
  216. data/spec/mongo/query_cache_spec.rb +1 -0
  217. data/spec/mongo/retryable_spec.rb +32 -3
  218. data/spec/mongo/server/connection_auth_spec.rb +3 -1
  219. data/spec/mongo/server/connection_common_spec.rb +13 -1
  220. data/spec/mongo/server/connection_pool_spec.rb +120 -53
  221. data/spec/mongo/server/connection_spec.rb +50 -159
  222. data/spec/mongo/server/description/features_spec.rb +24 -0
  223. data/spec/mongo/server/push_monitor_spec.rb +2 -8
  224. data/spec/mongo/session_spec.rb +26 -6
  225. data/spec/mongo/session_transaction_spec.rb +2 -1
  226. data/spec/mongo/socket/ssl_spec.rb +18 -7
  227. data/spec/mongo/uri/srv_protocol_spec.rb +101 -2
  228. data/spec/mongo/uri_spec.rb +25 -0
  229. data/spec/runners/connection_string.rb +8 -0
  230. data/spec/runners/crud/operation.rb +12 -3
  231. data/spec/runners/crud/requirement.rb +9 -4
  232. data/spec/runners/crud/spec.rb +5 -0
  233. data/spec/runners/crud/test.rb +1 -1
  234. data/spec/runners/crud/verifier.rb +6 -0
  235. data/spec/runners/transactions/spec.rb +2 -2
  236. data/spec/runners/transactions/test.rb +19 -16
  237. data/spec/runners/transactions.rb +11 -8
  238. data/spec/runners/unified/assertions.rb +90 -11
  239. data/spec/runners/unified/change_stream_operations.rb +12 -0
  240. data/spec/runners/unified/client_side_encryption_operations.rb +83 -0
  241. data/spec/runners/unified/crud_operations.rb +67 -4
  242. data/spec/runners/unified/ddl_operations.rb +45 -0
  243. data/spec/runners/unified/error.rb +2 -1
  244. data/spec/runners/unified/grid_fs_operations.rb +21 -0
  245. data/spec/runners/unified/support_operations.rb +5 -2
  246. data/spec/runners/unified/test.rb +78 -5
  247. data/spec/runners/unified.rb +9 -2
  248. data/spec/shared/lib/mrss/constraints.rb +10 -17
  249. data/spec/shared/lib/mrss/docker_runner.rb +23 -3
  250. data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
  251. data/spec/shared/lib/mrss/event_subscriber.rb +15 -5
  252. data/spec/shared/lib/mrss/lite_constraints.rb +40 -1
  253. data/spec/shared/lib/mrss/session_registry.rb +69 -0
  254. data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
  255. data/spec/shared/share/Dockerfile.erb +56 -54
  256. data/spec/shared/shlib/config.sh +27 -0
  257. data/spec/shared/shlib/distro.sh +2 -1
  258. data/spec/shared/shlib/server.sh +46 -21
  259. data/spec/shared/shlib/set_env.sh +43 -5
  260. data/spec/solo/clean_exit_spec.rb +5 -0
  261. data/spec/spec_helper.rb +0 -1
  262. data/spec/spec_tests/client_side_encryption_spec.rb +1 -1
  263. data/spec/spec_tests/client_side_encryption_unified_spec.rb +16 -0
  264. data/spec/spec_tests/crud_spec.rb +0 -10
  265. data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +124 -0
  266. data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +351 -0
  267. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1171 -0
  268. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1071 -0
  269. data/spec/spec_tests/data/change_streams_unified/change-streams-showExpandedEvents.yml +298 -0
  270. data/spec/spec_tests/data/change_streams_unified/change-streams.yml +859 -4
  271. data/spec/spec_tests/data/client_side_encryption/aggregate.yml +3 -17
  272. data/spec/spec_tests/data/client_side_encryption/azureKMS.yml +46 -0
  273. data/spec/spec_tests/data/client_side_encryption/badQueries.yml +12 -2
  274. data/spec/spec_tests/data/client_side_encryption/basic.yml +3 -17
  275. data/spec/spec_tests/data/client_side_encryption/bulk.yml +1 -8
  276. data/spec/spec_tests/data/client_side_encryption/bypassAutoEncryption.yml +2 -2
  277. data/spec/spec_tests/data/client_side_encryption/count.yml +1 -8
  278. data/spec/spec_tests/data/client_side_encryption/countDocuments.yml +1 -8
  279. data/spec/spec_tests/data/client_side_encryption/create-and-createIndexes.yml +58 -0
  280. data/spec/spec_tests/data/client_side_encryption/delete.yml +2 -16
  281. data/spec/spec_tests/data/client_side_encryption/distinct.yml +1 -8
  282. data/spec/spec_tests/data/client_side_encryption/explain.yml +1 -8
  283. data/spec/spec_tests/data/client_side_encryption/find.yml +2 -16
  284. data/spec/spec_tests/data/client_side_encryption/findOneAndDelete.yml +1 -8
  285. data/spec/spec_tests/data/client_side_encryption/findOneAndReplace.yml +1 -8
  286. data/spec/spec_tests/data/client_side_encryption/findOneAndUpdate.yml +1 -8
  287. data/spec/spec_tests/data/client_side_encryption/fle2-BypassQueryAnalysis.yml +101 -0
  288. data/spec/spec_tests/data/client_side_encryption/fle2-Compact.yml +80 -0
  289. data/spec/spec_tests/data/client_side_encryption/fle2-CreateCollection.yml +1263 -0
  290. data/spec/spec_tests/data/client_side_encryption/fle2-DecryptExistingData.yml +64 -0
  291. data/spec/spec_tests/data/client_side_encryption/fle2-Delete.yml +107 -0
  292. data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFields-vs-EncryptedFieldsMap.yml +80 -0
  293. data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFields-vs-jsonSchema.yml +90 -0
  294. data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFieldsMap-defaults.yml +57 -0
  295. data/spec/spec_tests/data/client_side_encryption/fle2-FindOneAndUpdate.yml +213 -0
  296. data/spec/spec_tests/data/client_side_encryption/fle2-InsertFind-Indexed.yml +86 -0
  297. data/spec/spec_tests/data/client_side_encryption/fle2-InsertFind-Unindexed.yml +83 -0
  298. data/spec/spec_tests/data/client_side_encryption/fle2-MissingKey.yml +41 -0
  299. data/spec/spec_tests/data/client_side_encryption/fle2-NoEncryption.yml +42 -0
  300. data/spec/spec_tests/data/client_side_encryption/fle2-Update.yml +221 -0
  301. data/spec/spec_tests/data/client_side_encryption/fle2-validatorAndPartialFieldExpression.yml +168 -0
  302. data/spec/spec_tests/data/client_side_encryption/gcpKMS.yml +46 -0
  303. data/spec/spec_tests/data/client_side_encryption/getMore.yml +1 -8
  304. data/spec/spec_tests/data/client_side_encryption/insert.yml +2 -16
  305. data/spec/spec_tests/data/client_side_encryption/keyAltName.yml +1 -8
  306. data/spec/spec_tests/data/client_side_encryption/localKMS.yml +1 -8
  307. data/spec/spec_tests/data/client_side_encryption/localSchema.yml +1 -8
  308. data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +2 -0
  309. data/spec/spec_tests/data/client_side_encryption/missingKey.yml +2 -9
  310. data/spec/spec_tests/data/client_side_encryption/noSchema.yml +39 -0
  311. data/spec/spec_tests/data/client_side_encryption/replaceOne.yml +1 -8
  312. data/spec/spec_tests/data/client_side_encryption/types.yml +44 -70
  313. data/spec/spec_tests/data/client_side_encryption/unified/addKeyAltName.yml +194 -0
  314. data/spec/spec_tests/data/client_side_encryption/unified/createDataKey-kms_providers-invalid.yml +67 -0
  315. data/spec/spec_tests/data/client_side_encryption/unified/createDataKey.yml +309 -0
  316. data/spec/spec_tests/data/client_side_encryption/unified/deleteKey.yml +159 -0
  317. data/spec/spec_tests/data/client_side_encryption/unified/getKey.yml +105 -0
  318. data/spec/spec_tests/data/client_side_encryption/unified/getKeyByAltName.yml +104 -0
  319. data/spec/spec_tests/data/client_side_encryption/unified/getKeys.yml +122 -0
  320. data/spec/spec_tests/data/client_side_encryption/unified/removeKeyAltName.yml +157 -0
  321. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-decrypt_failure.yml +69 -0
  322. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-encrypt_failure.yml +122 -0
  323. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey.yml +432 -0
  324. data/spec/spec_tests/data/client_side_encryption/updateMany.yml +1 -8
  325. data/spec/spec_tests/data/client_side_encryption/updateOne.yml +1 -8
  326. data/spec/spec_tests/data/client_side_encryption/validatorAndPartialFieldExpression.yml +166 -0
  327. data/spec/spec_tests/data/collection_management/clustered-indexes.yml +135 -0
  328. data/spec/spec_tests/data/collection_management/createCollection-pre_and_post_images.yml +50 -0
  329. data/spec/spec_tests/data/collection_management/modifyCollection-pre_and_post_images.yml +58 -0
  330. data/spec/spec_tests/data/command_monitoring_unified/bulkWrite.yml +68 -0
  331. data/spec/spec_tests/data/command_monitoring_unified/command.yml +50 -0
  332. data/spec/spec_tests/data/command_monitoring_unified/deleteMany.yml +79 -0
  333. data/spec/spec_tests/data/command_monitoring_unified/deleteOne.yml +79 -0
  334. data/spec/spec_tests/data/command_monitoring_unified/find.yml +254 -0
  335. data/spec/spec_tests/data/command_monitoring_unified/insertMany.yml +79 -0
  336. data/spec/spec_tests/data/command_monitoring_unified/insertOne.yml +77 -0
  337. data/spec/spec_tests/data/command_monitoring_unified/pre-42-server-connection-id.yml +56 -0
  338. data/spec/spec_tests/data/command_monitoring_unified/server-connection-id.yml +56 -0
  339. data/spec/spec_tests/data/command_monitoring_unified/unacknowledgedBulkWrite.yml +55 -0
  340. data/spec/spec_tests/data/command_monitoring_unified/updateMany.yml +87 -0
  341. data/spec/spec_tests/data/command_monitoring_unified/updateOne.yml +118 -0
  342. data/spec/spec_tests/data/crud/read/aggregate-collation.yml +1 -1
  343. data/spec/spec_tests/data/crud/read/count-collation.yml +1 -1
  344. data/spec/spec_tests/data/crud/read/distinct-collation.yml +1 -1
  345. data/spec/spec_tests/data/crud/read/find-collation.yml +1 -1
  346. data/spec/spec_tests/data/crud/write/bulkWrite-collation.yml +1 -1
  347. data/spec/spec_tests/data/crud/write/deleteMany-collation.yml +1 -1
  348. data/spec/spec_tests/data/crud/write/deleteOne-collation.yml +1 -1
  349. data/spec/spec_tests/data/crud/write/findOneAndDelete-collation.yml +1 -1
  350. data/spec/spec_tests/data/crud/write/findOneAndReplace-collation.yml +1 -1
  351. data/spec/spec_tests/data/crud/write/findOneAndUpdate-collation.yml +1 -1
  352. data/spec/spec_tests/data/crud/write/replaceOne-collation.yml +1 -1
  353. data/spec/spec_tests/data/crud/write/updateMany-collation.yml +1 -1
  354. data/spec/spec_tests/data/crud/write/updateOne-collation.yml +1 -1
  355. data/spec/spec_tests/data/crud_unified/aggregate-allowdiskuse.yml +75 -0
  356. data/spec/spec_tests/data/crud_unified/aggregate-merge.yml +185 -0
  357. data/spec/spec_tests/data/crud_unified/aggregate-out-readConcern.yml +171 -0
  358. data/spec/spec_tests/data/crud_unified/aggregate.yml +215 -0
  359. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters-clientError.yml +98 -0
  360. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters.yml +174 -0
  361. data/spec/spec_tests/data/crud_unified/bulkWrite-comment.yml +189 -0
  362. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-clientError.yml +113 -0
  363. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-serverError.yml +142 -0
  364. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint.yml +154 -0
  365. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-hint-unacknowledged.yml +98 -0
  366. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-let.yml +86 -0
  367. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-hint-unacknowledged.yml +97 -0
  368. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-let.yml +86 -0
  369. data/spec/spec_tests/data/crud_unified/bulkWrite-insertOne-dots_and_dollars.yml +138 -0
  370. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-dots_and_dollars.yml +165 -0
  371. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-hint-unacknowledged.yml +103 -0
  372. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-let.yml +93 -0
  373. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-clientError.yml +148 -0
  374. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-serverError.yml +239 -0
  375. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint.yml +256 -0
  376. data/spec/spec_tests/data/crud_unified/bulkWrite-update-validation.yml +73 -0
  377. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-dots_and_dollars.yml +150 -0
  378. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-hint-unacknowledged.yml +104 -0
  379. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-let.yml +96 -0
  380. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-dots_and_dollars.yml +150 -0
  381. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-hint-unacknowledged.yml +103 -0
  382. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-let.yml +95 -0
  383. data/spec/spec_tests/data/crud_unified/countDocuments-comment.yml +92 -0
  384. data/spec/spec_tests/data/crud_unified/db-aggregate.yml +73 -0
  385. data/spec/spec_tests/data/crud_unified/deleteMany-comment.yml +97 -0
  386. data/spec/spec_tests/data/crud_unified/deleteMany-hint-clientError.yml +87 -0
  387. data/spec/spec_tests/data/crud_unified/deleteMany-hint-serverError.yml +107 -0
  388. data/spec/spec_tests/data/crud_unified/deleteMany-hint-unacknowledged.yml +90 -0
  389. data/spec/spec_tests/data/crud_unified/deleteMany-hint.yml +99 -0
  390. data/spec/spec_tests/data/crud_unified/deleteMany-let.yml +2 -0
  391. data/spec/spec_tests/data/crud_unified/deleteOne-comment.yml +98 -0
  392. data/spec/spec_tests/data/crud_unified/deleteOne-hint-clientError.yml +80 -0
  393. data/spec/spec_tests/data/crud_unified/deleteOne-hint-serverError.yml +100 -0
  394. data/spec/spec_tests/data/crud_unified/deleteOne-hint-unacknowledged.yml +89 -0
  395. data/spec/spec_tests/data/crud_unified/deleteOne-hint.yml +95 -0
  396. data/spec/spec_tests/data/crud_unified/deleteOne-let.yml +2 -0
  397. data/spec/spec_tests/data/crud_unified/distinct-comment.yml +98 -0
  398. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount-comment.yml +95 -0
  399. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +5 -135
  400. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-clientError.yml +55 -0
  401. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-serverError.yml +68 -0
  402. data/spec/spec_tests/data/crud_unified/find-allowdiskuse.yml +79 -0
  403. data/spec/spec_tests/data/crud_unified/find-comment.yml +166 -0
  404. data/spec/spec_tests/data/crud_unified/find.yml +68 -0
  405. data/spec/spec_tests/data/crud_unified/findOneAndDelete-comment.yml +96 -0
  406. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-clientError.yml +91 -0
  407. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-serverError.yml +107 -0
  408. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-unacknowledged.yml +88 -0
  409. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint.yml +102 -0
  410. data/spec/spec_tests/data/crud_unified/findOneAndDelete-let.yml +2 -4
  411. data/spec/spec_tests/data/crud_unified/findOneAndReplace-comment.yml +101 -0
  412. data/spec/spec_tests/data/crud_unified/findOneAndReplace-dots_and_dollars.yml +140 -0
  413. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-clientError.yml +83 -0
  414. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-serverError.yml +99 -0
  415. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-unacknowledged.yml +96 -0
  416. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint.yml +98 -0
  417. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-comment.yml +95 -0
  418. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-dots_and_dollars.yml +127 -0
  419. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-clientError.yml +84 -0
  420. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-serverError.yml +100 -0
  421. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-unacknowledged.yml +92 -0
  422. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint.yml +99 -0
  423. data/spec/spec_tests/data/crud_unified/insertMany-comment.yml +93 -0
  424. data/spec/spec_tests/data/crud_unified/insertMany-dots_and_dollars.yml +128 -0
  425. data/spec/spec_tests/data/crud_unified/insertOne-comment.yml +91 -0
  426. data/spec/spec_tests/data/crud_unified/insertOne-dots_and_dollars.yml +238 -0
  427. data/spec/spec_tests/data/crud_unified/replaceOne-comment.yml +105 -0
  428. data/spec/spec_tests/data/crud_unified/replaceOne-dots_and_dollars.yml +180 -0
  429. data/spec/spec_tests/data/crud_unified/replaceOne-hint-unacknowledged.yml +95 -0
  430. data/spec/spec_tests/data/crud_unified/replaceOne-hint.yml +108 -0
  431. data/spec/spec_tests/data/crud_unified/replaceOne-let.yml +98 -0
  432. data/spec/spec_tests/data/crud_unified/replaceOne-validation.yml +37 -0
  433. data/spec/spec_tests/data/crud_unified/updateMany-comment.yml +104 -0
  434. data/spec/spec_tests/data/crud_unified/updateMany-dots_and_dollars.yml +138 -0
  435. data/spec/spec_tests/data/crud_unified/updateMany-hint-clientError.yml +91 -0
  436. data/spec/spec_tests/data/crud_unified/updateMany-hint-serverError.yml +115 -0
  437. data/spec/spec_tests/data/crud_unified/updateMany-hint-unacknowledged.yml +96 -0
  438. data/spec/spec_tests/data/crud_unified/updateMany-hint.yml +115 -0
  439. data/spec/spec_tests/data/crud_unified/updateMany-let.yml +5 -1
  440. data/spec/spec_tests/data/crud_unified/updateMany-validation.yml +39 -0
  441. data/spec/spec_tests/data/crud_unified/updateOne-comment.yml +104 -0
  442. data/spec/spec_tests/data/crud_unified/updateOne-dots_and_dollars.yml +138 -0
  443. data/spec/spec_tests/data/crud_unified/updateOne-hint-clientError.yml +85 -0
  444. data/spec/spec_tests/data/crud_unified/updateOne-hint-serverError.yml +109 -0
  445. data/spec/spec_tests/data/crud_unified/updateOne-hint-unacknowledged.yml +95 -0
  446. data/spec/spec_tests/data/crud_unified/updateOne-hint.yml +109 -0
  447. data/spec/spec_tests/data/crud_unified/updateOne-let.yml +5 -1
  448. data/spec/spec_tests/data/crud_unified/updateOne-validation.yml +37 -0
  449. data/spec/spec_tests/data/crud_unified/updateWithPipelines.yml +8 -14
  450. data/spec/spec_tests/data/gridfs_unified/delete.yml +198 -0
  451. data/spec/spec_tests/data/gridfs_unified/download.yml +241 -0
  452. data/spec/spec_tests/data/gridfs_unified/downloadByName.yml +159 -0
  453. data/spec/spec_tests/data/gridfs_unified/upload-disableMD5.yml +92 -0
  454. data/spec/spec_tests/data/gridfs_unified/upload.yml +288 -0
  455. data/spec/spec_tests/data/retryable_reads/{aggregate-merge.yml → legacy/aggregate-merge.yml} +0 -0
  456. data/spec/spec_tests/data/retryable_reads/{aggregate-serverErrors.yml → legacy/aggregate-serverErrors.yml} +0 -0
  457. data/spec/spec_tests/data/retryable_reads/{aggregate.yml → legacy/aggregate.yml} +0 -0
  458. data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch-serverErrors.yml → legacy/changeStreams-client.watch-serverErrors.yml} +0 -0
  459. data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch.yml → legacy/changeStreams-client.watch.yml} +0 -0
  460. data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch-serverErrors.yml → legacy/changeStreams-db.coll.watch-serverErrors.yml} +0 -0
  461. data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch.yml → legacy/changeStreams-db.coll.watch.yml} +0 -0
  462. data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch-serverErrors.yml → legacy/changeStreams-db.watch-serverErrors.yml} +0 -0
  463. data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch.yml → legacy/changeStreams-db.watch.yml} +0 -0
  464. data/spec/spec_tests/data/retryable_reads/{count-serverErrors.yml → legacy/count-serverErrors.yml} +0 -0
  465. data/spec/spec_tests/data/retryable_reads/{count.yml → legacy/count.yml} +0 -0
  466. data/spec/spec_tests/data/retryable_reads/{countDocuments-serverErrors.yml → legacy/countDocuments-serverErrors.yml} +0 -0
  467. data/spec/spec_tests/data/retryable_reads/{countDocuments.yml → legacy/countDocuments.yml} +0 -0
  468. data/spec/spec_tests/data/retryable_reads/{distinct-serverErrors.yml → legacy/distinct-serverErrors.yml} +0 -0
  469. data/spec/spec_tests/data/retryable_reads/{distinct.yml → legacy/distinct.yml} +0 -0
  470. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-serverErrors-pre4.9.yml → legacy/estimatedDocumentCount-serverErrors.yml} +0 -2
  471. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-pre4.9.yml → legacy/estimatedDocumentCount.yml} +0 -2
  472. data/spec/spec_tests/data/retryable_reads/{find-serverErrors.yml → legacy/find-serverErrors.yml} +0 -0
  473. data/spec/spec_tests/data/retryable_reads/{find.yml → legacy/find.yml} +0 -0
  474. data/spec/spec_tests/data/retryable_reads/{findOne-serverErrors.yml → legacy/findOne-serverErrors.yml} +0 -0
  475. data/spec/spec_tests/data/retryable_reads/{findOne.yml → legacy/findOne.yml} +0 -0
  476. data/spec/spec_tests/data/retryable_reads/{gridfs-download-serverErrors.yml → legacy/gridfs-download-serverErrors.yml} +0 -0
  477. data/spec/spec_tests/data/retryable_reads/{gridfs-download.yml → legacy/gridfs-download.yml} +0 -0
  478. data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName-serverErrors.yml → legacy/gridfs-downloadByName-serverErrors.yml} +0 -0
  479. data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName.yml → legacy/gridfs-downloadByName.yml} +0 -0
  480. data/spec/spec_tests/data/retryable_reads/{listCollectionNames-serverErrors.yml → legacy/listCollectionNames-serverErrors.yml} +0 -0
  481. data/spec/spec_tests/data/retryable_reads/{listCollectionNames.yml → legacy/listCollectionNames.yml} +0 -0
  482. data/spec/spec_tests/data/retryable_reads/{listCollectionObjects-serverErrors.yml → legacy/listCollectionObjects-serverErrors.yml} +0 -0
  483. data/spec/spec_tests/data/retryable_reads/{listCollectionObjects.yml → legacy/listCollectionObjects.yml} +0 -0
  484. data/spec/spec_tests/data/retryable_reads/{listCollections-serverErrors.yml → legacy/listCollections-serverErrors.yml} +0 -0
  485. data/spec/spec_tests/data/retryable_reads/{listCollections.yml → legacy/listCollections.yml} +0 -0
  486. data/spec/spec_tests/data/retryable_reads/{listDatabaseNames-serverErrors.yml → legacy/listDatabaseNames-serverErrors.yml} +0 -0
  487. data/spec/spec_tests/data/retryable_reads/{listDatabaseNames.yml → legacy/listDatabaseNames.yml} +0 -0
  488. data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects-serverErrors.yml → legacy/listDatabaseObjects-serverErrors.yml} +0 -0
  489. data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects.yml → legacy/listDatabaseObjects.yml} +0 -0
  490. data/spec/spec_tests/data/retryable_reads/{listDatabases-serverErrors.yml → legacy/listDatabases-serverErrors.yml} +0 -0
  491. data/spec/spec_tests/data/retryable_reads/{listDatabases.yml → legacy/listDatabases.yml} +0 -0
  492. data/spec/spec_tests/data/retryable_reads/{listIndexNames-serverErrors.yml → legacy/listIndexNames-serverErrors.yml} +0 -0
  493. data/spec/spec_tests/data/retryable_reads/{listIndexNames.yml → legacy/listIndexNames.yml} +0 -0
  494. data/spec/spec_tests/data/retryable_reads/{listIndexes-serverErrors.yml → legacy/listIndexes-serverErrors.yml} +0 -0
  495. data/spec/spec_tests/data/retryable_reads/{listIndexes.yml → legacy/listIndexes.yml} +0 -0
  496. data/spec/spec_tests/data/retryable_reads/{mapReduce.yml → legacy/mapReduce.yml} +0 -0
  497. data/spec/spec_tests/data/retryable_reads/unified/handshakeError.yml +129 -0
  498. data/spec/spec_tests/data/retryable_writes/{bulkWrite-errorLabels.yml → legacy/bulkWrite-errorLabels.yml} +0 -0
  499. data/spec/spec_tests/data/retryable_writes/{bulkWrite-serverErrors.yml → legacy/bulkWrite-serverErrors.yml} +1 -1
  500. data/spec/spec_tests/data/retryable_writes/{bulkWrite.yml → legacy/bulkWrite.yml} +0 -0
  501. data/spec/spec_tests/data/retryable_writes/{deleteMany.yml → legacy/deleteMany.yml} +0 -0
  502. data/spec/spec_tests/data/retryable_writes/{deleteOne-errorLabels.yml → legacy/deleteOne-errorLabels.yml} +0 -0
  503. data/spec/spec_tests/data/retryable_writes/{deleteOne-serverErrors.yml → legacy/deleteOne-serverErrors.yml} +1 -1
  504. data/spec/spec_tests/data/retryable_writes/{deleteOne.yml → legacy/deleteOne.yml} +0 -0
  505. data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-errorLabels.yml → legacy/findOneAndDelete-errorLabels.yml} +0 -0
  506. data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-serverErrors.yml → legacy/findOneAndDelete-serverErrors.yml} +1 -1
  507. data/spec/spec_tests/data/retryable_writes/{findOneAndDelete.yml → legacy/findOneAndDelete.yml} +0 -0
  508. data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-errorLabels.yml → legacy/findOneAndReplace-errorLabels.yml} +0 -0
  509. data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-serverErrors.yml → legacy/findOneAndReplace-serverErrors.yml} +1 -1
  510. data/spec/spec_tests/data/retryable_writes/{findOneAndReplace.yml → legacy/findOneAndReplace.yml} +0 -0
  511. data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-errorLabels.yml → legacy/findOneAndUpdate-errorLabels.yml} +0 -0
  512. data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-serverErrors.yml → legacy/findOneAndUpdate-serverErrors.yml} +1 -1
  513. data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate.yml → legacy/findOneAndUpdate.yml} +0 -0
  514. data/spec/spec_tests/data/retryable_writes/{insertMany-errorLabels.yml → legacy/insertMany-errorLabels.yml} +0 -0
  515. data/spec/spec_tests/data/retryable_writes/{insertMany-serverErrors.yml → legacy/insertMany-serverErrors.yml} +1 -1
  516. data/spec/spec_tests/data/retryable_writes/{insertMany.yml → legacy/insertMany.yml} +0 -0
  517. data/spec/spec_tests/data/retryable_writes/{insertOne-errorLabels.yml → legacy/insertOne-errorLabels.yml} +0 -0
  518. data/spec/spec_tests/data/retryable_writes/{insertOne-serverErrors.yml → legacy/insertOne-serverErrors.yml} +5 -5
  519. data/spec/spec_tests/data/retryable_writes/{insertOne.yml → legacy/insertOne.yml} +0 -0
  520. data/spec/spec_tests/data/retryable_writes/{replaceOne-errorLabels.yml → legacy/replaceOne-errorLabels.yml} +0 -0
  521. data/spec/spec_tests/data/retryable_writes/{replaceOne-serverErrors.yml → legacy/replaceOne-serverErrors.yml} +1 -1
  522. data/spec/spec_tests/data/retryable_writes/{replaceOne.yml → legacy/replaceOne.yml} +0 -0
  523. data/spec/spec_tests/data/retryable_writes/{updateMany.yml → legacy/updateMany.yml} +0 -0
  524. data/spec/spec_tests/data/retryable_writes/{updateOne-errorLabels.yml → legacy/updateOne-errorLabels.yml} +0 -0
  525. data/spec/spec_tests/data/retryable_writes/{updateOne-serverErrors.yml → legacy/updateOne-serverErrors.yml} +1 -1
  526. data/spec/spec_tests/data/retryable_writes/{updateOne.yml → legacy/updateOne.yml} +0 -0
  527. data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +96 -0
  528. data/spec/spec_tests/data/retryable_writes/unified/handshakeError.yml +137 -0
  529. data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +78 -0
  530. data/spec/spec_tests/data/sdam/errors/prefer-error-code.yml +2 -2
  531. data/spec/spec_tests/data/sdam_integration/hello-command-error.yml +6 -14
  532. data/spec/spec_tests/data/sdam_integration/hello-network-error.yml +4 -14
  533. data/spec/spec_tests/data/sdam_integration/hello-timeout.yml +8 -14
  534. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-no-results.yml +5 -0
  535. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true-txt.yml +5 -0
  536. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true.yml +5 -0
  537. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero-txt.yml +10 -0
  538. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero.yml +10 -0
  539. data/spec/spec_tests/data/seed_list_discovery/replica-set/srv-service-name.yml +11 -0
  540. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet-txt.yml +5 -0
  541. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet.yml +5 -0
  542. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-equal_to_srv_records.yml +16 -0
  543. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-greater_than_srv_records.yml +15 -0
  544. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-less_than_srv_records.yml +15 -0
  545. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero-txt.yml +15 -0
  546. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero.yml +15 -0
  547. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-equal_to_srv_records.yml +13 -0
  548. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-greater_than_srv_records.yml +12 -0
  549. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-less_than_srv_records.yml +10 -0
  550. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-zero.yml +11 -0
  551. data/spec/spec_tests/data/server_selection/Unknown/read/ghost.yml +11 -0
  552. data/spec/spec_tests/data/server_selection/Unknown/write/ghost.yml +11 -0
  553. data/spec/spec_tests/data/sessions_unified/driver-sessions-server-support.yml +123 -0
  554. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-client-error.yml +9 -3
  555. data/spec/spec_tests/data/transactions/error-labels.yml +1 -1
  556. data/spec/spec_tests/data/transactions/errors-client.yml +8 -9
  557. data/spec/spec_tests/data/transactions/mongos-recovery-token.yml +1 -1
  558. data/spec/spec_tests/data/transactions/retryable-abort-errorLabels.yml +0 -2
  559. data/spec/spec_tests/data/transactions/retryable-abort.yml +7 -9
  560. data/spec/spec_tests/data/transactions/retryable-commit-errorLabels.yml +0 -2
  561. data/spec/spec_tests/data/transactions/retryable-commit.yml +7 -9
  562. data/spec/spec_tests/data/transactions/retryable-writes.yml +0 -2
  563. data/spec/spec_tests/data/transactions_unified/do-not-retry-read-in-transaction.yml +64 -0
  564. data/spec/spec_tests/data/transactions_unified/retryable-abort-handshake.yml +118 -0
  565. data/spec/spec_tests/data/transactions_unified/retryable-commit-handshake.yml +118 -0
  566. data/spec/spec_tests/data/unified/invalid/expectedEventsForClient-ignoreExtraEvents-type.yml +15 -0
  567. data/spec/spec_tests/data/unified/valid-fail/operation-unsupported.yml +13 -0
  568. data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-ignoreExtraEvents.yml +78 -0
  569. data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +4 -1
  570. data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +3 -3
  571. data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +3 -2
  572. data/spec/spec_tests/data/uri_options/srv-options.yml +96 -0
  573. data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +6 -4
  574. data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +7 -5
  575. data/spec/spec_tests/gridfs_unified_spec.rb +13 -0
  576. data/spec/spec_tests/retryable_reads_spec.rb +4 -1
  577. data/spec/spec_tests/retryable_reads_unified_spec.rb +22 -0
  578. data/spec/spec_tests/retryable_writes_spec.rb +4 -1
  579. data/spec/spec_tests/retryable_writes_unified_spec.rb +21 -0
  580. data/spec/spec_tests/seed_list_discovery_spec.rb +10 -1
  581. data/spec/spec_tests/unified_spec.rb +6 -1
  582. data/spec/stress/connection_pool_timing_spec.rb +3 -2
  583. data/spec/stress/fork_reconnect_stress_spec.rb +3 -2
  584. data/spec/support/authorization.rb +1 -1
  585. data/spec/support/background_thread_registry.rb +3 -13
  586. data/spec/support/certificates/retrieve-atlas-cert +38 -0
  587. data/spec/support/cluster_tools.rb +1 -1
  588. data/spec/support/common_shortcuts.rb +22 -0
  589. data/spec/support/crypt/corpus/corpus-encrypted.json +9515 -0
  590. data/spec/support/crypt/corpus/corpus-key-aws.json +32 -32
  591. data/spec/support/crypt/corpus/corpus-key-azure.json +33 -0
  592. data/spec/support/crypt/corpus/corpus-key-gcp.json +35 -0
  593. data/spec/support/crypt/corpus/corpus-key-kmip.json +32 -0
  594. data/spec/support/crypt/corpus/corpus-key-local.json +30 -30
  595. data/spec/support/crypt/corpus/corpus-schema.json +4399 -121
  596. data/spec/support/crypt/corpus/corpus.json +4999 -37
  597. data/spec/support/crypt/data_keys/key_document_azure.json +33 -0
  598. data/spec/support/crypt/data_keys/key_document_gcp.json +37 -0
  599. data/spec/support/crypt/data_keys/key_document_kmip.json +32 -0
  600. data/spec/support/crypt/encryptedFields.json +33 -0
  601. data/spec/support/crypt/keys/key1-document.json +30 -0
  602. data/spec/support/crypt/schema_maps/schema_map_azure.json +17 -0
  603. data/spec/support/crypt/schema_maps/schema_map_azure_key_alt_names.json +12 -0
  604. data/spec/support/crypt/schema_maps/schema_map_gcp.json +17 -0
  605. data/spec/support/crypt/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
  606. data/spec/support/crypt/schema_maps/schema_map_kmip.json +17 -0
  607. data/spec/support/crypt/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
  608. data/spec/support/crypt.rb +258 -13
  609. data/spec/support/macros.rb +28 -0
  610. data/spec/support/mongos_macros.rb +17 -0
  611. data/spec/support/shared/scram_conversation.rb +2 -1
  612. data/spec/support/shared/session.rb +13 -7
  613. data/spec/support/spec_config.rb +90 -1
  614. data/spec/support/utils.rb +25 -4
  615. data.tar.gz.sig +0 -0
  616. metadata +604 -290
  617. metadata.gz.sig +0 -0
  618. data/lib/mongo/operation/delete/legacy.rb +0 -64
  619. data/lib/mongo/operation/insert/legacy.rb +0 -68
  620. data/lib/mongo/operation/update/legacy/result.rb +0 -112
  621. data/lib/mongo/operation/update/legacy.rb +0 -76
  622. data/spec/mongo/dbref_spec.rb +0 -152
  623. data/spec/mongo/operation/kill_cursors_spec.rb +0 -47
  624. data/spec/spec_tests/change_streams_spec.rb +0 -93
  625. data/spec/spec_tests/command_monitoring_spec.rb +0 -71
  626. data/spec/spec_tests/data/change_streams/change-streams-errors.yml +0 -101
  627. data/spec/spec_tests/data/change_streams/change-streams-resume-allowlist.yml +0 -1173
  628. data/spec/spec_tests/data/change_streams/change-streams-resume-errorLabels.yml +0 -1105
  629. data/spec/spec_tests/data/change_streams/change-streams.yml +0 -535
  630. data/spec/spec_tests/data/command_monitoring/bulkWrite.yml +0 -49
  631. data/spec/spec_tests/data/command_monitoring/command.yml +0 -61
  632. data/spec/spec_tests/data/command_monitoring/deleteMany.yml +0 -55
  633. data/spec/spec_tests/data/command_monitoring/deleteOne.yml +0 -55
  634. data/spec/spec_tests/data/command_monitoring/find.yml +0 -266
  635. data/spec/spec_tests/data/command_monitoring/insertMany.yml +0 -75
  636. data/spec/spec_tests/data/command_monitoring/insertOne.yml +0 -51
  637. data/spec/spec_tests/data/command_monitoring/unacknowledgedBulkWrite.yml +0 -34
  638. data/spec/spec_tests/data/command_monitoring/updateMany.yml +0 -65
  639. data/spec/spec_tests/data/command_monitoring/updateOne.yml +0 -90
  640. data/spec/spec_tests/data/crud_v2/aggregate-merge.yml +0 -103
  641. data/spec/spec_tests/data/crud_v2/aggregate-out-readConcern.yml +0 -111
  642. data/spec/spec_tests/data/crud_v2/bulkWrite-arrayFilters.yml +0 -103
  643. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-clientError.yml +0 -63
  644. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-serverError.yml +0 -92
  645. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint.yml +0 -103
  646. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-clientError.yml +0 -90
  647. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-serverError.yml +0 -147
  648. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint.yml +0 -164
  649. data/spec/spec_tests/data/crud_v2/db-aggregate.yml +0 -39
  650. data/spec/spec_tests/data/crud_v2/deleteMany-hint-clientError.yml +0 -43
  651. data/spec/spec_tests/data/crud_v2/deleteMany-hint-serverError.yml +0 -62
  652. data/spec/spec_tests/data/crud_v2/deleteMany-hint.yml +0 -58
  653. data/spec/spec_tests/data/crud_v2/deleteOne-hint-clientError.yml +0 -41
  654. data/spec/spec_tests/data/crud_v2/deleteOne-hint-serverError.yml +0 -60
  655. data/spec/spec_tests/data/crud_v2/deleteOne-hint.yml +0 -57
  656. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-clientError.yml +0 -28
  657. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-serverError.yml +0 -44
  658. data/spec/spec_tests/data/crud_v2/find-allowdiskuse.yml +0 -50
  659. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-clientError.yml +0 -45
  660. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-serverError.yml +0 -60
  661. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint.yml +0 -56
  662. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-clientError.yml +0 -40
  663. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-serverError.yml +0 -59
  664. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint.yml +0 -55
  665. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-clientError.yml +0 -40
  666. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-serverError.yml +0 -58
  667. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint.yml +0 -55
  668. data/spec/spec_tests/data/crud_v2/replaceOne-hint.yml +0 -61
  669. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-delete-hint-clientError.yml +0 -60
  670. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-update-hint-clientError.yml +0 -88
  671. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteMany-hint-clientError.yml +0 -40
  672. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteOne-hint-clientError.yml +0 -38
  673. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndDelete-hint-clientError.yml +0 -42
  674. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndReplace-hint-clientError.yml +0 -40
  675. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndUpdate-hint-clientError.yml +0 -40
  676. data/spec/spec_tests/data/crud_v2/unacknowledged-replaceOne-hint-clientError.yml +0 -40
  677. data/spec/spec_tests/data/crud_v2/unacknowledged-updateMany-hint-clientError.yml +0 -43
  678. data/spec/spec_tests/data/crud_v2/unacknowledged-updateOne-hint-clientError.yml +0 -40
  679. data/spec/spec_tests/data/crud_v2/updateMany-hint-clientError.yml +0 -45
  680. data/spec/spec_tests/data/crud_v2/updateMany-hint-serverError.yml +0 -66
  681. data/spec/spec_tests/data/crud_v2/updateMany-hint.yml +0 -65
  682. data/spec/spec_tests/data/crud_v2/updateOne-hint-clientError.yml +0 -43
  683. data/spec/spec_tests/data/crud_v2/updateOne-hint-serverError.yml +0 -62
  684. data/spec/spec_tests/data/crud_v2/updateOne-hint.yml +0 -61
  685. data/spec/spec_tests/data/crud_v2/updateWithPipelines.yml +0 -157
  686. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-4.9.yml +0 -60
  687. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors-4.9.yml +0 -146
  688. data/spec/support/crypt/corpus/corpus_encrypted.json +0 -4152
  689. data/spec/support/session_registry.rb +0 -55
@@ -69,7 +69,9 @@ module Mongo
69
69
  :unique => :unique,
70
70
  :version => :v,
71
71
  :weights => :weights,
72
- :collation => :collation
72
+ :collation => :collation,
73
+ :comment => :comment,
74
+ :wildcard_projection => :wildcardProjection,
73
75
  }.freeze
74
76
 
75
77
  # Drop an index by its name.
@@ -78,13 +80,17 @@ module Mongo
78
80
  # view.drop_one('name_1')
79
81
  #
80
82
  # @param [ String ] name The name of the index.
83
+ # @param [ Hash ] options Options for this operation.
84
+ #
85
+ # @option options [ Object ] :comment A user-provided
86
+ # comment to attach to this command.
81
87
  #
82
88
  # @return [ Result ] The response.
83
89
  #
84
90
  # @since 2.0.0
85
- def drop_one(name)
91
+ def drop_one(name, options = {})
86
92
  raise Error::MultiIndexDrop.new if name == Index::ALL
87
- drop_by_name(name)
93
+ drop_by_name(name, comment: options[:comment])
88
94
  end
89
95
 
90
96
  # Drop all indexes on the collection.
@@ -92,11 +98,16 @@ module Mongo
92
98
  # @example Drop all indexes on the collection.
93
99
  # view.drop_all
94
100
  #
101
+ # @param [ Hash ] options Options for this operation.
102
+ #
103
+ # @option options [ Object ] :comment A user-provided
104
+ # comment to attach to this command.
105
+ #
95
106
  # @return [ Result ] The response.
96
107
  #
97
108
  # @since 2.0.0
98
- def drop_all
99
- drop_by_name(Index::ALL)
109
+ def drop_all(options = {})
110
+ drop_by_name(Index::ALL, comment: options[:comment])
100
111
  end
101
112
 
102
113
  # Creates an index on the collection.
@@ -134,6 +145,8 @@ module Mongo
134
145
  # - "majority" indicating that a majority of data bearing nodes must vote
135
146
  # - "votingMembers" which means that all voting data bearing nodes must vote
136
147
  # @option options [ Session ] :session The session to use for the operation.
148
+ # @option options [ Object ] :comment A user-provided
149
+ # comment to attach to this command.
137
150
  #
138
151
  # @note Note that the options listed may be subset of those available.
139
152
  # See the MongoDB documentation for a full list of supported options by server version.
@@ -148,7 +161,7 @@ module Mongo
148
161
  if session = @options[:session]
149
162
  create_options[:session] = session
150
163
  end
151
- %i(commit_quorum session).each do |key|
164
+ %i(commit_quorum session comment).each do |key|
152
165
  if value = options.delete(key)
153
166
  create_options[key] = value
154
167
  end
@@ -185,6 +198,7 @@ module Mongo
185
198
  # - "majority" indicating that a majority of data bearing nodes must vote
186
199
  # - "votingMembers" which means that all voting data bearing nodes must vote
187
200
  # - session: The session to use.
201
+ # - comment: A user-provided comment to attach to this command.
188
202
  #
189
203
  # @return [ Result ] The result of the command.
190
204
  #
@@ -213,6 +227,7 @@ module Mongo
213
227
  session: session,
214
228
  commit_quorum: options[:commit_quorum],
215
229
  write_concern: write_concern,
230
+ comment: options[:comment],
216
231
  }
217
232
 
218
233
  Operation::CreateIndex.new(spec).execute(server, context: Operation::Context.new(client: client, session: session))
@@ -283,7 +298,7 @@ module Mongo
283
298
 
284
299
  private
285
300
 
286
- def drop_by_name(name)
301
+ def drop_by_name(name, comment: nil)
287
302
  client.send(:with_session, @options) do |session|
288
303
  spec = {
289
304
  db_name: database.name,
@@ -292,6 +307,7 @@ module Mongo
292
307
  session: session,
293
308
  write_concern: write_concern,
294
309
  }
310
+ spec[:comment] = comment unless comment.nil?
295
311
  server = next_primary(nil, session)
296
312
  Operation::DropIndex.new(spec).execute(server, context: Operation::Context.new(client: client, session: session))
297
313
  end
@@ -53,6 +53,9 @@ module Mongo
53
53
  # @return [ Integer ] request_id The request id.
54
54
  attr_reader :request_id
55
55
 
56
+ # @return [ Integer ] server_connection_id The server connection id.
57
+ attr_reader :server_connection_id
58
+
56
59
  # @return [ nil | Object ] The service id, if any.
57
60
  attr_reader :service_id
58
61
 
@@ -81,7 +84,7 @@ module Mongo
81
84
  # @api private
82
85
  def initialize(command_name, database_name, address,
83
86
  request_id, operation_id, message, failure, duration,
84
- started_event:, service_id: nil
87
+ started_event:, server_connection_id: nil, service_id: nil
85
88
  )
86
89
  @command_name = command_name.to_s
87
90
  @database_name = database_name
@@ -93,6 +96,7 @@ module Mongo
93
96
  @started_event = started_event
94
97
  @failure = redacted(command_name, failure)
95
98
  @duration = duration
99
+ @server_connection_id = server_connection_id
96
100
  end
97
101
 
98
102
  # Returns a concise yet useful summary of the event.
@@ -126,7 +130,8 @@ module Mongo
126
130
  # @since 2.1.0
127
131
  # @api private
128
132
  def self.generate(address, operation_id, payload, message,
129
- failure, duration, started_event:, service_id: nil
133
+ failure, duration, started_event:, server_connection_id: nil,
134
+ service_id: nil
130
135
  )
131
136
  new(
132
137
  payload[:command_name],
@@ -138,6 +143,7 @@ module Mongo
138
143
  failure,
139
144
  duration,
140
145
  started_event: started_event,
146
+ server_connection_id: server_connection_id,
141
147
  service_id: service_id,
142
148
  )
143
149
  end
@@ -60,7 +60,7 @@ module Mongo
60
60
  # @api private
61
61
  attr_reader :connection_id
62
62
 
63
- # @api private
63
+ # @return [ Integer ] server_connection_id The server connection id.
64
64
  attr_reader :server_connection_id
65
65
 
66
66
  # @return [ true | false ] Whether the event contains sensitive data.
@@ -46,6 +46,9 @@ module Mongo
46
46
  # @return [ Integer ] request_id The request id.
47
47
  attr_reader :request_id
48
48
 
49
+ # @return [ Integer ] server_connection_id The server connection id.
50
+ attr_reader :server_connection_id
51
+
49
52
  # @return [ nil | Object ] The service id, if any.
50
53
  attr_reader :service_id
51
54
 
@@ -73,7 +76,8 @@ module Mongo
73
76
  # @since 2.1.0
74
77
  # @api private
75
78
  def initialize(command_name, database_name, address, request_id,
76
- operation_id, reply, duration, started_event:, service_id: nil
79
+ operation_id, reply, duration, started_event:,
80
+ server_connection_id: nil, service_id: nil
77
81
  )
78
82
  @command_name = command_name.to_s
79
83
  @database_name = database_name
@@ -84,6 +88,7 @@ module Mongo
84
88
  @started_event = started_event
85
89
  @reply = redacted(command_name, reply)
86
90
  @duration = duration
91
+ @server_connection_id = server_connection_id
87
92
  end
88
93
 
89
94
  # Returns a concise yet useful summary of the event.
@@ -116,7 +121,8 @@ module Mongo
116
121
  # @since 2.1.0
117
122
  # @api private
118
123
  def self.generate(address, operation_id, command_payload,
119
- reply_payload, duration, started_event:, service_id: nil
124
+ reply_payload, duration, started_event:, server_connection_id: nil,
125
+ service_id: nil
120
126
  )
121
127
  new(
122
128
  command_payload[:command_name],
@@ -127,6 +133,7 @@ module Mongo
127
133
  generate_reply(command_payload, reply_payload),
128
134
  duration,
129
135
  started_event: started_event,
136
+ server_connection_id: server_connection_id,
130
137
  service_id: service_id,
131
138
  )
132
139
  end
@@ -64,24 +64,26 @@ module Mongo
64
64
  end
65
65
 
66
66
  def command_completed(result, address, operation_id, payload, duration,
67
- started_event:, service_id: nil
67
+ started_event:, server_connection_id: nil, service_id: nil
68
68
  )
69
69
  document = result ? (result.documents || []).first : nil
70
70
  if document && (document['ok'] && document['ok'] != 1 || document.key?('$err'))
71
71
  parser = Error::Parser.new(document)
72
72
  command_failed(document, address, operation_id,
73
73
  payload, parser.message, duration,
74
- started_event: started_event, service_id: service_id,
74
+ started_event: started_event, server_connection_id: server_connection_id,
75
+ service_id: service_id,
75
76
  )
76
77
  else
77
78
  command_succeeded(result, address, operation_id, payload, duration,
78
- started_event: started_event, service_id: service_id,
79
+ started_event: started_event, server_connection_id: server_connection_id,
80
+ service_id: service_id,
79
81
  )
80
82
  end
81
83
  end
82
84
 
83
85
  def command_succeeded(result, address, operation_id, payload, duration,
84
- started_event:, service_id: nil
86
+ started_event:, server_connection_id: nil, service_id: nil
85
87
  )
86
88
  monitoring.succeeded(
87
89
  Monitoring::COMMAND,
@@ -92,19 +94,21 @@ module Mongo
92
94
  result ? result.payload : nil,
93
95
  duration,
94
96
  started_event: started_event,
97
+ server_connection_id: server_connection_id,
95
98
  service_id: service_id,
96
99
  )
97
100
  )
98
101
  end
99
102
 
100
103
  def command_failed(failure, address, operation_id, payload, message, duration,
101
- started_event:, service_id: nil
104
+ started_event:, server_connection_id: nil, service_id: nil
102
105
  )
103
106
  monitoring.failed(
104
107
  Monitoring::COMMAND,
105
108
  Event::CommandFailed.generate(address, operation_id, payload,
106
109
  message, failure, duration,
107
110
  started_event: started_event,
111
+ server_connection_id: server_connection_id,
108
112
  service_id: service_id,
109
113
  )
110
114
  )
@@ -32,12 +32,15 @@ module Mongo
32
32
  # @param [ Server::Description ] connection_description
33
33
  # Server description of the server that performed the operation that
34
34
  # this result is for.
35
+ # @param [ Integer ] connection_global_id
36
+ # Global id of the connection on which the operation that
37
+ # this result is for was performed.
35
38
  # @param [ String ] database_name The name of the database that the
36
39
  # query was sent to.
37
40
  #
38
41
  # @api private
39
- def initialize(replies, connection_description, database_name)
40
- super(replies, connection_description)
42
+ def initialize(replies, connection_description, connection_global_id, database_name)
43
+ super(replies, connection_description, connection_global_id)
41
44
  @database_name = database_name
42
45
  end
43
46
 
@@ -25,6 +25,12 @@ module Mongo
25
25
  #
26
26
  # @since 2.5.2
27
27
  class OpMsg < OpMsgBase
28
+
29
+ def selector(connection)
30
+ spec[:selector].dup.tap do |sel|
31
+ sel[:comment] = spec[:comment] unless spec[:comment].nil?
32
+ end
33
+ end
28
34
  end
29
35
  end
30
36
  end
@@ -35,7 +35,7 @@ module Mongo
35
35
  #
36
36
  # @api private
37
37
  class Context
38
- def initialize(client: nil, session: nil, service_id: nil, options: nil)
38
+ def initialize(client: nil, session: nil, connection_global_id: nil, options: nil)
39
39
  if options
40
40
  if client
41
41
  raise ArgumentError, 'Client and options cannot both be specified'
@@ -46,13 +46,13 @@ module Mongo
46
46
  end
47
47
  end
48
48
 
49
- if service_id && session&.pinned_service_id
50
- raise ArgumentError, 'Trying to pin context to a service when the session is already pinned to a service'
49
+ if connection_global_id && session&.pinned_connection_global_id
50
+ raise ArgumentError, 'Trying to pin context to a connection when the session is already pinned to a connection.'
51
51
  end
52
52
 
53
53
  @client = client
54
54
  @session = session
55
- @service_id = service_id
55
+ @connection_global_id = connection_global_id
56
56
  @options = options
57
57
  end
58
58
 
@@ -60,8 +60,8 @@ module Mongo
60
60
  attr_reader :session
61
61
  attr_reader :options
62
62
 
63
- def service_id
64
- @service_id || session&.pinned_service_id
63
+ def connection_global_id
64
+ @connection_global_id || session&.pinned_connection_global_id
65
65
  end
66
66
 
67
67
  def in_transaction?
@@ -100,6 +100,24 @@ module Mongo
100
100
  end
101
101
  end
102
102
 
103
+ # Whether the operation is a retry (true) or an initial attempt (false).
104
+ def retry?
105
+ !!@is_retry
106
+ end
107
+
108
+ # Returns a new context with the parameters changed as per the
109
+ # provided arguments.
110
+ #
111
+ # @option opts [ true|false ] :is_retry Whether the operation is a retry
112
+ # or a first attempt.
113
+ def with(**opts)
114
+ dup.tap do |copy|
115
+ opts.each do |k, v|
116
+ copy.instance_variable_set("@#{k}", v)
117
+ end
118
+ end
119
+ end
120
+
103
121
  def encrypt?
104
122
  client&.encrypter&.encrypt? || false
105
123
  end
@@ -30,7 +30,10 @@ module Mongo
30
30
  private
31
31
 
32
32
  def selector(connection)
33
- spec[:selector].merge(collation: spec[:collation]).compact
33
+ spec[:selector].merge(
34
+ collation: spec[:collation],
35
+ comment: spec[:comment],
36
+ ).compact
34
37
  end
35
38
  end
36
39
  end
@@ -31,7 +31,10 @@ module Mongo
31
31
 
32
32
  def selector(connection)
33
33
  # Collation is always supported on 3.6+ servers that would use OP_MSG.
34
- spec[:selector].merge(collation: spec[:collation]).compact
34
+ spec[:selector].merge(
35
+ collation: spec[:collation],
36
+ encryptedFields: spec[:encrypted_fields],
37
+ ).compact
35
38
  end
36
39
  end
37
40
  end
@@ -33,7 +33,8 @@ module Mongo
33
33
  {
34
34
  createIndexes: coll_name,
35
35
  indexes: indexes,
36
- }.tap do |selector|
36
+ comment: spec[:comment],
37
+ }.compact.tap do |selector|
37
38
  if commit_quorum = spec[:commit_quorum]
38
39
  # While server versions 3.4 and newer generally perform option
39
40
  # validation, there was a bug on server versions 4.2.0 - 4.2.5 where
@@ -38,6 +38,7 @@ module Mongo
38
38
  Protocol::Msg::DATABASE_IDENTIFIER => db_name,
39
39
  ordered: ordered?,
40
40
  let: spec[:let],
41
+ comment: spec[:comment],
41
42
  }.compact.tap do |selector|
42
43
  if hint = spec[:hint]
43
44
  validate_hint_on_update(connection, selector)
@@ -17,7 +17,6 @@
17
17
 
18
18
  require 'mongo/operation/delete/command'
19
19
  require 'mongo/operation/delete/op_msg'
20
- require 'mongo/operation/delete/legacy'
21
20
  require 'mongo/operation/delete/result'
22
21
  require 'mongo/operation/delete/bulk_result'
23
22
 
@@ -32,7 +32,10 @@ module Mongo
32
32
 
33
33
  def selector(connection)
34
34
  # Collation is always supported on 3.6+ servers that would use OP_MSG.
35
- spec[:selector].merge(collation: spec[:collation]).compact
35
+ spec[:selector].merge(
36
+ collation: spec[:collation],
37
+ comment: spec[:comment],
38
+ ).compact
36
39
  end
37
40
  end
38
41
  end
@@ -30,7 +30,11 @@ module Mongo
30
30
  private
31
31
 
32
32
  def selector(connection)
33
- { :dropIndexes => coll_name, :index => index_name }
33
+ {
34
+ :dropIndexes => coll_name,
35
+ :index => index_name,
36
+ :comment => spec[:comment],
37
+ }.compact
34
38
  end
35
39
  end
36
40
  end
@@ -30,7 +30,11 @@ module Mongo
30
30
  collection: spec.fetch(:coll_name),
31
31
  batchSize: spec[:batch_size],
32
32
  maxTimeMS: spec[:max_time_ms],
33
- }.compact
33
+ }.compact.tap do |sel|
34
+ if spec[:comment] && connection.features.get_more_comment_enabled?
35
+ sel[:comment] = spec[:comment]
36
+ end
37
+ end
34
38
  end
35
39
  end
36
40
  end
@@ -41,13 +41,17 @@ module Mongo
41
41
  # @param [ Server::Description ] connection_description
42
42
  # Server description of the server that performed the operation that
43
43
  # this result is for.
44
+ # @param [ Integer ] connection_global_id
45
+ # Global id of the connection on which the operation that
46
+ # this result is for was performed.
44
47
  # @param [ Array<Object> ] ids The ids of the inserted documents.
45
48
  #
46
49
  # @since 2.0.0
47
50
  # @api private
48
- def initialize(replies, connection_description, ids)
51
+ def initialize(replies, connection_description, connection_global_id, ids)
49
52
  @replies = [*replies] if replies
50
53
  @connection_description = connection_description
54
+ @connection_global_id = connection_global_id
51
55
  if replies && replies.first && (doc = replies.first.documents.first)
52
56
  if errors = doc['writeErrors']
53
57
  # some documents were potentially inserted
@@ -46,10 +46,6 @@ module Mongo
46
46
  ordered: ordered? }
47
47
  end
48
48
 
49
- def options(server)
50
- super.merge(validating_keys: true)
51
- end
52
-
53
49
  def message(connection)
54
50
  Protocol::Query.new(db_name, Database::COMMAND, command(connection), options(connection))
55
51
  end
@@ -39,14 +39,17 @@ module Mongo
39
39
  end
40
40
 
41
41
  def selector(connection)
42
- { insert: coll_name,
42
+ {
43
+ insert: coll_name,
43
44
  Protocol::Msg::DATABASE_IDENTIFIER => db_name,
44
- ordered: ordered? }
45
+ ordered: ordered?,
46
+ comment: spec[:comment],
47
+ }.compact
45
48
  end
46
49
 
47
50
  def message(connection)
48
51
  section = Protocol::Msg::Section1.new(IDENTIFIER, send(IDENTIFIER))
49
- Protocol::Msg.new(flags, { validating_keys: true }, command(connection), section)
52
+ Protocol::Msg.new(flags, {}, command(connection), section)
50
53
  end
51
54
  end
52
55
  end
@@ -43,12 +43,15 @@ module Mongo
43
43
  # @param [ Server::Description ] connection_description
44
44
  # Server description of the server that performed the operation that
45
45
  # this result is for.
46
+ # @param [ Integer ] connection_global_id
47
+ # Global id of the connection on which the operation that
48
+ # this result is for was performed.
46
49
  # @param [ Array<Object> ] ids The ids of the inserted documents.
47
50
  #
48
51
  # @since 2.0.0
49
52
  # @api private
50
- def initialize(replies, connection_description, ids)
51
- super(replies, connection_description)
53
+ def initialize(replies, connection_description, connection_global_id, ids)
54
+ super(replies, connection_description, connection_global_id)
52
55
  @inserted_ids = ids
53
56
  end
54
57
 
@@ -67,7 +70,7 @@ module Mongo
67
70
 
68
71
  # @api public
69
72
  def bulk_result
70
- BulkResult.new(@replies, connection_description, @inserted_ids)
73
+ BulkResult.new(@replies, connection_description, connection_global_id, @inserted_ids)
71
74
  end
72
75
  end
73
76
  end
@@ -17,7 +17,6 @@
17
17
 
18
18
  require 'mongo/operation/insert/command'
19
19
  require 'mongo/operation/insert/op_msg'
20
- require 'mongo/operation/insert/legacy'
21
20
  require 'mongo/operation/insert/result'
22
21
  require 'mongo/operation/insert/bulk_result'
23
22
 
@@ -18,7 +18,6 @@
18
18
  require 'mongo/operation/kill_cursors/command_builder'
19
19
  require 'mongo/operation/kill_cursors/command'
20
20
  require 'mongo/operation/kill_cursors/op_msg'
21
- require 'mongo/operation/kill_cursors/legacy'
22
21
 
23
22
  module Mongo
24
23
  module Operation
@@ -31,7 +31,10 @@ module Mongo
31
31
  private
32
32
 
33
33
  def selector(connection)
34
- (spec[SELECTOR] || {}).merge(listCollections: 1)
34
+ (spec[SELECTOR] || {}).merge({
35
+ listCollections: 1,
36
+ comment: spec[:comment]
37
+ }).compact
35
38
  end
36
39
  end
37
40
  end
@@ -131,6 +131,22 @@ module Mongo
131
131
  0
132
132
  end
133
133
 
134
+ # Get the number of documents returned by the server in this batch.
135
+ #
136
+ # Map/Reduce operation returns documents inline without using
137
+ # cursors; as such, the standard Mongo::Reply#returned_count does
138
+ # not work correctly for Map/Reduce.
139
+ #
140
+ # Note that the Map/Reduce operation is limited to max BSON document
141
+ # size (16 MB) in its inline result set.
142
+ #
143
+ # @return [ Integer ] The number of documents returned.
144
+ #
145
+ # @api public
146
+ def returned_count
147
+ reply.documents.length
148
+ end
149
+
134
150
  private
135
151
 
136
152
  def first_document
@@ -97,9 +97,12 @@ module Mongo
97
97
  # this result is for. This parameter is allowed to be nil for
98
98
  # compatibility with existing mongo_kerberos library, but should
99
99
  # always be not nil in the driver proper.
100
+ # @param [ Integer ] connection_global_id
101
+ # Global id of the connection on which the operation that
102
+ # this result is for was performed.
100
103
  #
101
104
  # @api private
102
- def initialize(replies, connection_description = nil)
105
+ def initialize(replies, connection_description = nil, connection_global_id = nil)
103
106
  if replies
104
107
  if replies.is_a?(Array)
105
108
  if replies.length != 1
@@ -114,6 +117,7 @@ module Mongo
114
117
  end
115
118
  @replies = [ reply ]
116
119
  @connection_description = connection_description
120
+ @connection_global_id = connection_global_id
117
121
  end
118
122
  end
119
123
 
@@ -128,6 +132,12 @@ module Mongo
128
132
  # @api private
129
133
  attr_reader :connection_description
130
134
 
135
+ # @return [ Object ] Global is of the connection that
136
+ # the operation was performed on that this result is for.
137
+ #
138
+ # @api private
139
+ attr_reader :connection_global_id
140
+
131
141
  # @api private
132
142
  def_delegators :parser,
133
143
  :not_master?, :node_recovering?, :node_shutting_down?
@@ -148,6 +158,15 @@ module Mongo
148
158
  !!@replies
149
159
  end
150
160
 
161
+ # Whether the result contains cursor_id
162
+ #
163
+ # @return [ true, false ] If the result contains cursor_id.
164
+ #
165
+ # @api private
166
+ def has_cursor_id?
167
+ acknowledged? && replies.last.respond_to?(:cursor_id)
168
+ end
169
+
151
170
  # Get the cursor id if the response is acknowledged.
152
171
  #
153
172
  # @note Cursor ids of 0 indicate there is no cursor on the server.
@@ -238,10 +257,7 @@ module Mongo
238
257
  end
239
258
  end
240
259
 
241
- # Get the count of documents returned by the server.
242
- #
243
- # @example Get the number returned.
244
- # result.returned_count
260
+ # Get the number of documents returned by the server in this batch.
245
261
  #
246
262
  # @return [ Integer ] The number of documents returned.
247
263
  #