mongo 2.17.4 → 2.18.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 (624) 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 +108 -28
  9. data/lib/mongo/client.rb +114 -12
  10. data/lib/mongo/client_encryption.rb +30 -9
  11. data/lib/mongo/cluster/reapers/cursor_reaper.rb +11 -1
  12. data/lib/mongo/cluster.rb +20 -24
  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 +19 -16
  16. data/lib/mongo/collection/view/change_stream.rb +56 -23
  17. data/lib/mongo/collection/view/explainable.rb +1 -1
  18. data/lib/mongo/collection/view/iterable.rb +2 -18
  19. data/lib/mongo/collection/view/map_reduce.rb +18 -9
  20. data/lib/mongo/collection/view/readable.rb +19 -23
  21. data/lib/mongo/collection/view/writable.rb +133 -40
  22. data/lib/mongo/collection/view.rb +0 -1
  23. data/lib/mongo/collection.rb +108 -48
  24. data/lib/mongo/config/options.rb +62 -0
  25. data/lib/mongo/config/validators/option.rb +26 -0
  26. data/lib/mongo/config.rb +31 -0
  27. data/lib/mongo/crypt/auto_encrypter.rb +79 -6
  28. data/lib/mongo/crypt/binding.rb +395 -143
  29. data/lib/mongo/crypt/context.rb +5 -2
  30. data/lib/mongo/crypt/data_key_context.rb +7 -104
  31. data/lib/mongo/crypt/encryption_io.rb +28 -60
  32. data/lib/mongo/crypt/explicit_encrypter.rb +27 -25
  33. data/lib/mongo/crypt/explicit_encryption_context.rb +31 -3
  34. data/lib/mongo/crypt/handle.rb +102 -79
  35. data/lib/mongo/crypt/hooks.rb +25 -2
  36. data/lib/mongo/crypt/kms/aws.rb +128 -0
  37. data/lib/mongo/crypt/kms/azure.rb +136 -0
  38. data/lib/mongo/crypt/kms/credentials.rb +81 -0
  39. data/lib/mongo/crypt/kms/gcp.rb +182 -0
  40. data/lib/mongo/crypt/kms/kmip.rb +110 -0
  41. data/lib/mongo/crypt/kms/local.rb +74 -0
  42. data/lib/mongo/crypt/kms/master_key_document.rb +65 -0
  43. data/lib/mongo/crypt/kms.rb +117 -0
  44. data/lib/mongo/crypt.rb +1 -0
  45. data/lib/mongo/cursor/kill_spec.rb +27 -6
  46. data/lib/mongo/cursor.rb +21 -16
  47. data/lib/mongo/database/view.rb +6 -3
  48. data/lib/mongo/database.rb +73 -12
  49. data/lib/mongo/dbref.rb +1 -105
  50. data/lib/mongo/error/bulk_write_error.rb +31 -4
  51. data/lib/mongo/error/invalid_config_option.rb +20 -0
  52. data/lib/mongo/error/invalid_replacement_document.rb +27 -9
  53. data/lib/mongo/error/invalid_update_document.rb +27 -7
  54. data/lib/mongo/error/labelable.rb +72 -0
  55. data/lib/mongo/error/missing_connection.rb +25 -0
  56. data/lib/mongo/error/notable.rb +7 -0
  57. data/lib/mongo/error/operation_failure.rb +34 -86
  58. data/lib/mongo/error/read_write_retryable.rb +108 -0
  59. data/lib/mongo/{operation/kill_cursors/legacy.rb → error/session_not_materialized.rb} +7 -19
  60. data/lib/mongo/error.rb +5 -37
  61. data/lib/mongo/index/view.rb +22 -7
  62. data/lib/mongo/monitoring/event/command_failed.rb +8 -2
  63. data/lib/mongo/monitoring/event/command_started.rb +1 -1
  64. data/lib/mongo/monitoring/event/command_succeeded.rb +9 -2
  65. data/lib/mongo/monitoring/publishable.rb +9 -5
  66. data/lib/mongo/operation/collections_info/result.rb +5 -2
  67. data/lib/mongo/operation/command/op_msg.rb +6 -0
  68. data/lib/mongo/operation/context.rb +24 -6
  69. data/lib/mongo/operation/count/op_msg.rb +4 -1
  70. data/lib/mongo/operation/create/op_msg.rb +16 -1
  71. data/lib/mongo/operation/create_index/op_msg.rb +2 -1
  72. data/lib/mongo/operation/delete/op_msg.rb +1 -0
  73. data/lib/mongo/operation/delete.rb +0 -1
  74. data/lib/mongo/operation/drop_index/op_msg.rb +5 -1
  75. data/lib/mongo/operation/get_more/command_builder.rb +5 -1
  76. data/lib/mongo/operation/insert/bulk_result.rb +5 -1
  77. data/lib/mongo/operation/insert/command.rb +0 -4
  78. data/lib/mongo/operation/insert/op_msg.rb +6 -3
  79. data/lib/mongo/operation/insert/result.rb +6 -3
  80. data/lib/mongo/operation/insert.rb +0 -1
  81. data/lib/mongo/operation/kill_cursors.rb +0 -1
  82. data/lib/mongo/operation/list_collections/op_msg.rb +4 -1
  83. data/lib/mongo/operation/map_reduce/result.rb +16 -0
  84. data/lib/mongo/operation/result.rb +21 -5
  85. data/lib/mongo/operation/shared/executable.rb +21 -6
  86. data/lib/mongo/operation/shared/polymorphic_operation.rb +15 -3
  87. data/lib/mongo/operation/shared/response_handling.rb +6 -5
  88. data/lib/mongo/operation/shared/sessions_supported.rb +3 -7
  89. data/lib/mongo/operation/shared/write.rb +18 -12
  90. data/lib/mongo/operation/update/op_msg.rb +2 -1
  91. data/lib/mongo/operation/update.rb +0 -1
  92. data/lib/mongo/protocol/caching_hash.rb +69 -0
  93. data/lib/mongo/protocol/msg.rb +37 -1
  94. data/lib/mongo/protocol.rb +1 -0
  95. data/lib/mongo/query_cache.rb +15 -0
  96. data/lib/mongo/retryable.rb +78 -30
  97. data/lib/mongo/server/connection.rb +33 -0
  98. data/lib/mongo/server/connection_base.rb +2 -0
  99. data/lib/mongo/server/connection_common.rb +4 -1
  100. data/lib/mongo/server/connection_pool.rb +69 -42
  101. data/lib/mongo/server/description/features.rb +3 -1
  102. data/lib/mongo/server/description.rb +7 -2
  103. data/lib/mongo/server/monitor/connection.rb +5 -10
  104. data/lib/mongo/server/monitor.rb +21 -13
  105. data/lib/mongo/server/push_monitor.rb +9 -3
  106. data/lib/mongo/server.rb +9 -5
  107. data/lib/mongo/session/session_pool.rb +8 -0
  108. data/lib/mongo/session.rb +111 -35
  109. data/lib/mongo/socket/ocsp_verifier.rb +4 -5
  110. data/lib/mongo/socket/tcp.rb +3 -0
  111. data/lib/mongo/srv/resolver.rb +24 -3
  112. data/lib/mongo/uri/options_mapper.rb +2 -0
  113. data/lib/mongo/uri/srv_protocol.rb +1 -1
  114. data/lib/mongo/uri.rb +20 -0
  115. data/lib/mongo/version.rb +1 -1
  116. data/lib/mongo.rb +20 -0
  117. data/mongo.gemspec +10 -4
  118. data/spec/README.md +5 -5
  119. data/spec/integration/aws_lambda_examples_spec.rb +68 -0
  120. data/spec/integration/bulk_write_error_message_spec.rb +32 -0
  121. data/spec/integration/bulk_write_spec.rb +0 -16
  122. data/spec/integration/change_stream_spec.rb +6 -5
  123. data/spec/integration/client_construction_spec.rb +1 -1
  124. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +9 -9
  125. data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +18 -19
  126. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +0 -1
  127. data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +31 -0
  128. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +108 -1
  129. data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +2 -2
  130. data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +2 -2
  131. data/spec/integration/client_side_encryption/client_close_spec.rb +1 -1
  132. data/spec/integration/client_side_encryption/corpus_spec.rb +64 -35
  133. data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +39 -42
  134. data/spec/integration/client_side_encryption/data_key_spec.rb +97 -7
  135. data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +59 -0
  136. data/spec/integration/client_side_encryption/explicit_queryable_encryption_spec.rb +147 -0
  137. data/spec/integration/client_side_encryption/external_key_vault_spec.rb +6 -6
  138. data/spec/integration/client_side_encryption/kms_tls_options_spec.rb +394 -0
  139. data/spec/integration/client_side_encryption/kms_tls_spec.rb +92 -0
  140. data/spec/integration/client_side_encryption/queryable_encryption_examples_spec.rb +111 -0
  141. data/spec/integration/client_side_encryption/views_spec.rb +1 -1
  142. data/spec/integration/client_update_spec.rb +2 -2
  143. data/spec/integration/crud_spec.rb +12 -0
  144. data/spec/integration/cursor_pinning_spec.rb +3 -3
  145. data/spec/integration/fork_reconnect_spec.rb +15 -8
  146. data/spec/integration/grid_fs_bucket_spec.rb +3 -3
  147. data/spec/integration/ocsp_verifier_spec.rb +1 -0
  148. data/spec/integration/query_cache_spec.rb +34 -30
  149. data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +1 -1
  150. data/spec/integration/sdam_events_spec.rb +0 -40
  151. data/spec/integration/server_monitor_spec.rb +2 -1
  152. data/spec/integration/size_limit_spec.rb +4 -1
  153. data/spec/integration/snapshot_query_examples_spec.rb +127 -0
  154. data/spec/integration/srv_monitoring_spec.rb +37 -0
  155. data/spec/integration/step_down_spec.rb +20 -4
  156. data/spec/integration/transaction_pinning_spec.rb +2 -2
  157. data/spec/integration/versioned_api_examples_spec.rb +37 -31
  158. data/spec/lite_spec_helper.rb +14 -5
  159. data/spec/mongo/address/ipv6_spec.rb +7 -0
  160. data/spec/mongo/address_spec.rb +7 -0
  161. data/spec/mongo/auth/scram/conversation_spec.rb +23 -23
  162. data/spec/mongo/auth/scram256/conversation_spec.rb +20 -20
  163. data/spec/mongo/auth/scram_negotiation_spec.rb +1 -0
  164. data/spec/mongo/bulk_write/result_spec.rb +15 -1
  165. data/spec/mongo/bulk_write_spec.rb +128 -20
  166. data/spec/mongo/client_construction_spec.rb +141 -7
  167. data/spec/mongo/client_encryption_spec.rb +11 -11
  168. data/spec/mongo/client_spec.rb +297 -1
  169. data/spec/mongo/cluster/cursor_reaper_spec.rb +21 -3
  170. data/spec/mongo/cluster_spec.rb +0 -44
  171. data/spec/mongo/collection/view/aggregation_spec.rb +2 -2
  172. data/spec/mongo/collection/view/change_stream_spec.rb +2 -2
  173. data/spec/mongo/collection/view/readable_spec.rb +35 -56
  174. data/spec/mongo/collection/view/writable_spec.rb +144 -32
  175. data/spec/mongo/collection_crud_spec.rb +63 -13
  176. data/spec/mongo/config/options_spec.rb +75 -0
  177. data/spec/mongo/config_spec.rb +73 -0
  178. data/spec/mongo/crypt/auto_decryption_context_spec.rb +17 -1
  179. data/spec/mongo/crypt/auto_encrypter_spec.rb +106 -0
  180. data/spec/mongo/crypt/auto_encryption_context_spec.rb +17 -1
  181. data/spec/mongo/crypt/binding/context_spec.rb +99 -17
  182. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +17 -46
  183. data/spec/mongo/crypt/binding/version_spec.rb +25 -0
  184. data/spec/mongo/crypt/binding_unloaded_spec.rb +14 -0
  185. data/spec/mongo/crypt/data_key_context_spec.rb +42 -114
  186. data/spec/mongo/crypt/encryption_io_spec.rb +2 -0
  187. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +32 -1
  188. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +89 -1
  189. data/spec/mongo/crypt/handle_spec.rb +47 -169
  190. data/spec/mongo/crypt/hooks_spec.rb +30 -0
  191. data/spec/mongo/crypt/kms/credentials_spec.rb +404 -0
  192. data/spec/mongo/crypt/kms_spec.rb +59 -0
  193. data/spec/mongo/cursor_spec.rb +37 -51
  194. data/spec/mongo/database_spec.rb +66 -1
  195. data/spec/mongo/error/operation_failure_heavy_spec.rb +49 -0
  196. data/spec/mongo/index/view_spec.rb +69 -0
  197. data/spec/mongo/operation/create/op_msg_spec.rb +286 -0
  198. data/spec/mongo/operation/delete/op_msg_spec.rb +13 -4
  199. data/spec/mongo/operation/delete_spec.rb +0 -30
  200. data/spec/mongo/operation/insert/op_msg_spec.rb +18 -10
  201. data/spec/mongo/operation/insert_spec.rb +0 -32
  202. data/spec/mongo/operation/result_spec.rb +20 -0
  203. data/spec/mongo/operation/update/op_msg_spec.rb +13 -4
  204. data/spec/mongo/operation/update_spec.rb +0 -29
  205. data/spec/mongo/protocol/caching_hash_spec.rb +82 -0
  206. data/spec/mongo/protocol/msg_spec.rb +41 -0
  207. data/spec/mongo/query_cache_spec.rb +1 -0
  208. data/spec/mongo/retryable_spec.rb +32 -3
  209. data/spec/mongo/server/connection_auth_spec.rb +3 -1
  210. data/spec/mongo/server/connection_common_spec.rb +13 -1
  211. data/spec/mongo/server/connection_pool_spec.rb +94 -49
  212. data/spec/mongo/server/connection_spec.rb +50 -159
  213. data/spec/mongo/server/description/features_spec.rb +24 -0
  214. data/spec/mongo/server/push_monitor_spec.rb +2 -8
  215. data/spec/mongo/session_spec.rb +26 -6
  216. data/spec/mongo/session_transaction_spec.rb +2 -1
  217. data/spec/mongo/socket/ssl_spec.rb +15 -4
  218. data/spec/mongo/uri/srv_protocol_spec.rb +101 -2
  219. data/spec/mongo/uri_spec.rb +25 -0
  220. data/spec/runners/connection_string.rb +8 -0
  221. data/spec/runners/crud/operation.rb +12 -3
  222. data/spec/runners/crud/requirement.rb +3 -3
  223. data/spec/runners/crud/spec.rb +5 -0
  224. data/spec/runners/crud/verifier.rb +6 -0
  225. data/spec/runners/transactions/test.rb +33 -14
  226. data/spec/runners/transactions.rb +9 -6
  227. data/spec/runners/unified/assertions.rb +59 -10
  228. data/spec/runners/unified/change_stream_operations.rb +9 -0
  229. data/spec/runners/unified/crud_operations.rb +50 -2
  230. data/spec/runners/unified/ddl_operations.rb +20 -0
  231. data/spec/runners/unified/error.rb +2 -1
  232. data/spec/runners/unified/support_operations.rb +5 -2
  233. data/spec/runners/unified/test.rb +19 -4
  234. data/spec/runners/unified.rb +9 -2
  235. data/spec/shared/lib/mrss/constraints.rb +10 -17
  236. data/spec/shared/lib/mrss/docker_runner.rb +21 -3
  237. data/spec/shared/lib/mrss/lite_constraints.rb +32 -1
  238. data/spec/shared/lib/mrss/session_registry.rb +69 -0
  239. data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
  240. data/spec/shared/share/Dockerfile.erb +56 -54
  241. data/spec/shared/shlib/config.sh +27 -0
  242. data/spec/shared/shlib/distro.sh +2 -1
  243. data/spec/shared/shlib/server.sh +46 -21
  244. data/spec/shared/shlib/set_env.sh +40 -5
  245. data/spec/spec_helper.rb +0 -1
  246. data/spec/spec_tests/crud_spec.rb +0 -10
  247. data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +124 -0
  248. data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +351 -0
  249. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1171 -0
  250. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1068 -0
  251. data/spec/spec_tests/data/change_streams_unified/change-streams.yml +859 -4
  252. data/spec/spec_tests/data/client_side_encryption/aggregate.yml +3 -17
  253. data/spec/spec_tests/data/client_side_encryption/azureKMS.yml +46 -0
  254. data/spec/spec_tests/data/client_side_encryption/badQueries.yml +12 -2
  255. data/spec/spec_tests/data/client_side_encryption/basic.yml +3 -17
  256. data/spec/spec_tests/data/client_side_encryption/bulk.yml +1 -8
  257. data/spec/spec_tests/data/client_side_encryption/bypassAutoEncryption.yml +2 -2
  258. data/spec/spec_tests/data/client_side_encryption/count.yml +1 -8
  259. data/spec/spec_tests/data/client_side_encryption/countDocuments.yml +1 -8
  260. data/spec/spec_tests/data/client_side_encryption/delete.yml +2 -16
  261. data/spec/spec_tests/data/client_side_encryption/distinct.yml +1 -8
  262. data/spec/spec_tests/data/client_side_encryption/explain.yml +1 -8
  263. data/spec/spec_tests/data/client_side_encryption/find.yml +2 -16
  264. data/spec/spec_tests/data/client_side_encryption/findOneAndDelete.yml +1 -8
  265. data/spec/spec_tests/data/client_side_encryption/findOneAndReplace.yml +1 -8
  266. data/spec/spec_tests/data/client_side_encryption/findOneAndUpdate.yml +1 -8
  267. data/spec/spec_tests/data/client_side_encryption/fle2-BypassQueryAnalysis.yml +101 -0
  268. data/spec/spec_tests/data/client_side_encryption/fle2-Compact.yml +80 -0
  269. data/spec/spec_tests/data/client_side_encryption/fle2-CreateCollection.yml +1263 -0
  270. data/spec/spec_tests/data/client_side_encryption/fle2-DecryptExistingData.yml +64 -0
  271. data/spec/spec_tests/data/client_side_encryption/fle2-Delete.yml +107 -0
  272. data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFields-vs-EncryptedFieldsMap.yml +80 -0
  273. data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFields-vs-jsonSchema.yml +90 -0
  274. data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFieldsMap-defaults.yml +57 -0
  275. data/spec/spec_tests/data/client_side_encryption/fle2-FindOneAndUpdate.yml +213 -0
  276. data/spec/spec_tests/data/client_side_encryption/fle2-InsertFind-Indexed.yml +86 -0
  277. data/spec/spec_tests/data/client_side_encryption/fle2-InsertFind-Unindexed.yml +83 -0
  278. data/spec/spec_tests/data/client_side_encryption/fle2-MissingKey.yml +41 -0
  279. data/spec/spec_tests/data/client_side_encryption/fle2-NoEncryption.yml +42 -0
  280. data/spec/spec_tests/data/client_side_encryption/fle2-Update.yml +221 -0
  281. data/spec/spec_tests/data/client_side_encryption/fle2-validatorAndPartialFieldExpression.yml +168 -0
  282. data/spec/spec_tests/data/client_side_encryption/gcpKMS.yml +46 -0
  283. data/spec/spec_tests/data/client_side_encryption/getMore.yml +1 -8
  284. data/spec/spec_tests/data/client_side_encryption/insert.yml +2 -16
  285. data/spec/spec_tests/data/client_side_encryption/keyAltName.yml +1 -8
  286. data/spec/spec_tests/data/client_side_encryption/localKMS.yml +1 -8
  287. data/spec/spec_tests/data/client_side_encryption/localSchema.yml +1 -8
  288. data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +2 -0
  289. data/spec/spec_tests/data/client_side_encryption/missingKey.yml +2 -9
  290. data/spec/spec_tests/data/client_side_encryption/noSchema.yml +39 -0
  291. data/spec/spec_tests/data/client_side_encryption/replaceOne.yml +1 -8
  292. data/spec/spec_tests/data/client_side_encryption/types.yml +44 -70
  293. data/spec/spec_tests/data/client_side_encryption/updateMany.yml +1 -8
  294. data/spec/spec_tests/data/client_side_encryption/updateOne.yml +1 -8
  295. data/spec/spec_tests/data/collection_management/clustered-indexes.yml +135 -0
  296. data/spec/spec_tests/data/collection_management/createCollection-pre_and_post_images.yml +50 -0
  297. data/spec/spec_tests/data/collection_management/modifyCollection-pre_and_post_images.yml +58 -0
  298. data/spec/spec_tests/data/command_monitoring_unified/pre-42-server-connection-id.yml +56 -0
  299. data/spec/spec_tests/data/command_monitoring_unified/server-connection-id.yml +56 -0
  300. data/spec/spec_tests/data/crud/read/aggregate-collation.yml +1 -1
  301. data/spec/spec_tests/data/crud/read/count-collation.yml +1 -1
  302. data/spec/spec_tests/data/crud/read/distinct-collation.yml +1 -1
  303. data/spec/spec_tests/data/crud/read/find-collation.yml +1 -1
  304. data/spec/spec_tests/data/crud/write/bulkWrite-collation.yml +1 -1
  305. data/spec/spec_tests/data/crud/write/deleteMany-collation.yml +1 -1
  306. data/spec/spec_tests/data/crud/write/deleteOne-collation.yml +1 -1
  307. data/spec/spec_tests/data/crud/write/findOneAndDelete-collation.yml +1 -1
  308. data/spec/spec_tests/data/crud/write/findOneAndReplace-collation.yml +1 -1
  309. data/spec/spec_tests/data/crud/write/findOneAndUpdate-collation.yml +1 -1
  310. data/spec/spec_tests/data/crud/write/replaceOne-collation.yml +1 -1
  311. data/spec/spec_tests/data/crud/write/updateMany-collation.yml +1 -1
  312. data/spec/spec_tests/data/crud/write/updateOne-collation.yml +1 -1
  313. data/spec/spec_tests/data/crud_unified/aggregate-allowdiskuse.yml +75 -0
  314. data/spec/spec_tests/data/crud_unified/aggregate-merge.yml +185 -0
  315. data/spec/spec_tests/data/crud_unified/aggregate-out-readConcern.yml +171 -0
  316. data/spec/spec_tests/data/crud_unified/aggregate.yml +215 -0
  317. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters-clientError.yml +98 -0
  318. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters.yml +174 -0
  319. data/spec/spec_tests/data/crud_unified/bulkWrite-comment.yml +189 -0
  320. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-clientError.yml +113 -0
  321. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-serverError.yml +142 -0
  322. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint.yml +154 -0
  323. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-hint-unacknowledged.yml +98 -0
  324. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-let.yml +86 -0
  325. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-hint-unacknowledged.yml +97 -0
  326. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-let.yml +86 -0
  327. data/spec/spec_tests/data/crud_unified/bulkWrite-insertOne-dots_and_dollars.yml +138 -0
  328. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-dots_and_dollars.yml +165 -0
  329. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-hint-unacknowledged.yml +103 -0
  330. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-let.yml +93 -0
  331. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-clientError.yml +148 -0
  332. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-serverError.yml +239 -0
  333. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint.yml +256 -0
  334. data/spec/spec_tests/data/crud_unified/bulkWrite-update-validation.yml +73 -0
  335. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-dots_and_dollars.yml +150 -0
  336. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-hint-unacknowledged.yml +104 -0
  337. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-let.yml +96 -0
  338. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-dots_and_dollars.yml +150 -0
  339. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-hint-unacknowledged.yml +103 -0
  340. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-let.yml +95 -0
  341. data/spec/spec_tests/data/crud_unified/countDocuments-comment.yml +92 -0
  342. data/spec/spec_tests/data/crud_unified/db-aggregate.yml +73 -0
  343. data/spec/spec_tests/data/crud_unified/deleteMany-comment.yml +97 -0
  344. data/spec/spec_tests/data/crud_unified/deleteMany-hint-clientError.yml +87 -0
  345. data/spec/spec_tests/data/crud_unified/deleteMany-hint-serverError.yml +107 -0
  346. data/spec/spec_tests/data/crud_unified/deleteMany-hint-unacknowledged.yml +90 -0
  347. data/spec/spec_tests/data/crud_unified/deleteMany-hint.yml +99 -0
  348. data/spec/spec_tests/data/crud_unified/deleteMany-let.yml +2 -0
  349. data/spec/spec_tests/data/crud_unified/deleteOne-comment.yml +98 -0
  350. data/spec/spec_tests/data/crud_unified/deleteOne-hint-clientError.yml +80 -0
  351. data/spec/spec_tests/data/crud_unified/deleteOne-hint-serverError.yml +100 -0
  352. data/spec/spec_tests/data/crud_unified/deleteOne-hint-unacknowledged.yml +89 -0
  353. data/spec/spec_tests/data/crud_unified/deleteOne-hint.yml +95 -0
  354. data/spec/spec_tests/data/crud_unified/deleteOne-let.yml +2 -0
  355. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount-comment.yml +95 -0
  356. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +5 -135
  357. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-clientError.yml +55 -0
  358. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-serverError.yml +68 -0
  359. data/spec/spec_tests/data/crud_unified/find-allowdiskuse.yml +79 -0
  360. data/spec/spec_tests/data/crud_unified/find-comment.yml +166 -0
  361. data/spec/spec_tests/data/crud_unified/find.yml +68 -0
  362. data/spec/spec_tests/data/crud_unified/findOneAndDelete-comment.yml +96 -0
  363. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-clientError.yml +91 -0
  364. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-serverError.yml +107 -0
  365. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-unacknowledged.yml +88 -0
  366. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint.yml +102 -0
  367. data/spec/spec_tests/data/crud_unified/findOneAndDelete-let.yml +2 -4
  368. data/spec/spec_tests/data/crud_unified/findOneAndReplace-comment.yml +101 -0
  369. data/spec/spec_tests/data/crud_unified/findOneAndReplace-dots_and_dollars.yml +140 -0
  370. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-clientError.yml +83 -0
  371. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-serverError.yml +99 -0
  372. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-unacknowledged.yml +96 -0
  373. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint.yml +98 -0
  374. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-comment.yml +95 -0
  375. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-dots_and_dollars.yml +127 -0
  376. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-clientError.yml +84 -0
  377. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-serverError.yml +100 -0
  378. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-unacknowledged.yml +92 -0
  379. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint.yml +99 -0
  380. data/spec/spec_tests/data/crud_unified/insertMany-comment.yml +93 -0
  381. data/spec/spec_tests/data/crud_unified/insertMany-dots_and_dollars.yml +128 -0
  382. data/spec/spec_tests/data/crud_unified/insertOne-comment.yml +91 -0
  383. data/spec/spec_tests/data/crud_unified/insertOne-dots_and_dollars.yml +238 -0
  384. data/spec/spec_tests/data/crud_unified/replaceOne-comment.yml +105 -0
  385. data/spec/spec_tests/data/crud_unified/replaceOne-dots_and_dollars.yml +180 -0
  386. data/spec/spec_tests/data/crud_unified/replaceOne-hint-unacknowledged.yml +95 -0
  387. data/spec/spec_tests/data/crud_unified/replaceOne-hint.yml +108 -0
  388. data/spec/spec_tests/data/crud_unified/replaceOne-let.yml +98 -0
  389. data/spec/spec_tests/data/crud_unified/replaceOne-validation.yml +37 -0
  390. data/spec/spec_tests/data/crud_unified/updateMany-comment.yml +104 -0
  391. data/spec/spec_tests/data/crud_unified/updateMany-dots_and_dollars.yml +138 -0
  392. data/spec/spec_tests/data/crud_unified/updateMany-hint-clientError.yml +91 -0
  393. data/spec/spec_tests/data/crud_unified/updateMany-hint-serverError.yml +115 -0
  394. data/spec/spec_tests/data/crud_unified/updateMany-hint-unacknowledged.yml +96 -0
  395. data/spec/spec_tests/data/crud_unified/updateMany-hint.yml +115 -0
  396. data/spec/spec_tests/data/crud_unified/updateMany-let.yml +5 -1
  397. data/spec/spec_tests/data/crud_unified/updateMany-validation.yml +39 -0
  398. data/spec/spec_tests/data/crud_unified/updateOne-comment.yml +104 -0
  399. data/spec/spec_tests/data/crud_unified/updateOne-dots_and_dollars.yml +138 -0
  400. data/spec/spec_tests/data/crud_unified/updateOne-hint-clientError.yml +85 -0
  401. data/spec/spec_tests/data/crud_unified/updateOne-hint-serverError.yml +109 -0
  402. data/spec/spec_tests/data/crud_unified/updateOne-hint-unacknowledged.yml +95 -0
  403. data/spec/spec_tests/data/crud_unified/updateOne-hint.yml +109 -0
  404. data/spec/spec_tests/data/crud_unified/updateOne-let.yml +5 -1
  405. data/spec/spec_tests/data/crud_unified/updateOne-validation.yml +37 -0
  406. data/spec/spec_tests/data/crud_unified/updateWithPipelines.yml +8 -14
  407. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-serverErrors-pre4.9.yml → legacy/estimatedDocumentCount-serverErrors.yml} +0 -2
  408. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-pre4.9.yml → legacy/estimatedDocumentCount.yml} +0 -2
  409. data/spec/spec_tests/data/retryable_reads/unified/handshakeError.yml +129 -0
  410. data/spec/spec_tests/data/retryable_writes/{bulkWrite-serverErrors.yml → legacy/bulkWrite-serverErrors.yml} +1 -1
  411. data/spec/spec_tests/data/retryable_writes/{deleteOne-serverErrors.yml → legacy/deleteOne-serverErrors.yml} +1 -1
  412. data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-serverErrors.yml → legacy/findOneAndDelete-serverErrors.yml} +1 -1
  413. data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-serverErrors.yml → legacy/findOneAndReplace-serverErrors.yml} +1 -1
  414. data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-serverErrors.yml → legacy/findOneAndUpdate-serverErrors.yml} +1 -1
  415. data/spec/spec_tests/data/retryable_writes/{insertMany-serverErrors.yml → legacy/insertMany-serverErrors.yml} +1 -1
  416. data/spec/spec_tests/data/retryable_writes/{insertOne-serverErrors.yml → legacy/insertOne-serverErrors.yml} +5 -5
  417. data/spec/spec_tests/data/retryable_writes/{replaceOne-serverErrors.yml → legacy/replaceOne-serverErrors.yml} +1 -1
  418. data/spec/spec_tests/data/retryable_writes/{updateOne-serverErrors.yml → legacy/updateOne-serverErrors.yml} +1 -1
  419. data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +96 -0
  420. data/spec/spec_tests/data/retryable_writes/unified/handshakeError.yml +137 -0
  421. data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +78 -0
  422. data/spec/spec_tests/data/sdam/errors/prefer-error-code.yml +2 -2
  423. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-no-results.yml +5 -0
  424. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true-txt.yml +5 -0
  425. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true.yml +5 -0
  426. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero-txt.yml +10 -0
  427. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero.yml +10 -0
  428. data/spec/spec_tests/data/seed_list_discovery/replica-set/srv-service-name.yml +11 -0
  429. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet-txt.yml +5 -0
  430. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet.yml +5 -0
  431. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-equal_to_srv_records.yml +16 -0
  432. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-greater_than_srv_records.yml +15 -0
  433. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-less_than_srv_records.yml +15 -0
  434. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero-txt.yml +15 -0
  435. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero.yml +15 -0
  436. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-equal_to_srv_records.yml +13 -0
  437. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-greater_than_srv_records.yml +12 -0
  438. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-less_than_srv_records.yml +10 -0
  439. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-zero.yml +11 -0
  440. data/spec/spec_tests/data/server_selection/Unknown/read/ghost.yml +11 -0
  441. data/spec/spec_tests/data/server_selection/Unknown/write/ghost.yml +11 -0
  442. data/spec/spec_tests/data/sessions_unified/driver-sessions-server-support.yml +123 -0
  443. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-client-error.yml +9 -3
  444. data/spec/spec_tests/data/transactions/error-labels.yml +1 -1
  445. data/spec/spec_tests/data/transactions/errors-client.yml +8 -9
  446. data/spec/spec_tests/data/transactions/mongos-recovery-token.yml +1 -1
  447. data/spec/spec_tests/data/transactions/retryable-abort-errorLabels.yml +0 -2
  448. data/spec/spec_tests/data/transactions/retryable-abort.yml +7 -9
  449. data/spec/spec_tests/data/transactions/retryable-commit-errorLabels.yml +0 -2
  450. data/spec/spec_tests/data/transactions/retryable-commit.yml +7 -9
  451. data/spec/spec_tests/data/transactions/retryable-writes.yml +0 -2
  452. data/spec/spec_tests/data/unified/invalid/expectedEventsForClient-ignoreExtraEvents-type.yml +15 -0
  453. data/spec/spec_tests/data/unified/valid-fail/operation-unsupported.yml +13 -0
  454. data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-ignoreExtraEvents.yml +78 -0
  455. data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +4 -1
  456. data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +3 -3
  457. data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +3 -2
  458. data/spec/spec_tests/data/uri_options/srv-options.yml +96 -0
  459. data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +6 -4
  460. data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +7 -5
  461. data/spec/spec_tests/retryable_reads_spec.rb +4 -1
  462. data/spec/spec_tests/retryable_reads_unified_spec.rb +22 -0
  463. data/spec/spec_tests/retryable_writes_spec.rb +4 -1
  464. data/spec/spec_tests/retryable_writes_unified_spec.rb +21 -0
  465. data/spec/spec_tests/seed_list_discovery_spec.rb +10 -1
  466. data/spec/spec_tests/unified_spec.rb +6 -1
  467. data/spec/stress/connection_pool_timing_spec.rb +2 -1
  468. data/spec/stress/fork_reconnect_stress_spec.rb +3 -2
  469. data/spec/support/authorization.rb +1 -1
  470. data/spec/support/certificates/atlas-ocsp-ca.crt +47 -40
  471. data/spec/support/certificates/atlas-ocsp.crt +106 -101
  472. data/spec/support/cluster_tools.rb +1 -1
  473. data/spec/support/common_shortcuts.rb +22 -0
  474. data/spec/support/crypt/corpus/corpus-encrypted.json +9515 -0
  475. data/spec/support/crypt/corpus/corpus-key-aws.json +32 -32
  476. data/spec/support/crypt/corpus/corpus-key-azure.json +33 -0
  477. data/spec/support/crypt/corpus/corpus-key-gcp.json +35 -0
  478. data/spec/support/crypt/corpus/corpus-key-kmip.json +32 -0
  479. data/spec/support/crypt/corpus/corpus-key-local.json +30 -30
  480. data/spec/support/crypt/corpus/corpus-schema.json +4399 -121
  481. data/spec/support/crypt/corpus/corpus.json +4999 -37
  482. data/spec/support/crypt/data_keys/key_document_azure.json +33 -0
  483. data/spec/support/crypt/data_keys/key_document_gcp.json +37 -0
  484. data/spec/support/crypt/data_keys/key_document_kmip.json +32 -0
  485. data/spec/support/crypt/encryptedFields.json +33 -0
  486. data/spec/support/crypt/keys/key1-document.json +30 -0
  487. data/spec/support/crypt/schema_maps/schema_map_azure.json +17 -0
  488. data/spec/support/crypt/schema_maps/schema_map_azure_key_alt_names.json +12 -0
  489. data/spec/support/crypt/schema_maps/schema_map_gcp.json +17 -0
  490. data/spec/support/crypt/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
  491. data/spec/support/crypt/schema_maps/schema_map_kmip.json +17 -0
  492. data/spec/support/crypt/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
  493. data/spec/support/crypt.rb +207 -6
  494. data/spec/support/macros.rb +18 -0
  495. data/spec/support/mongos_macros.rb +17 -0
  496. data/spec/support/shared/scram_conversation.rb +2 -1
  497. data/spec/support/shared/session.rb +13 -7
  498. data/spec/support/spec_config.rb +82 -1
  499. data/spec/support/utils.rb +25 -4
  500. data.tar.gz.sig +0 -0
  501. metadata +1499 -1252
  502. metadata.gz.sig +0 -0
  503. data/lib/mongo/operation/delete/legacy.rb +0 -64
  504. data/lib/mongo/operation/insert/legacy.rb +0 -68
  505. data/lib/mongo/operation/update/legacy/result.rb +0 -112
  506. data/lib/mongo/operation/update/legacy.rb +0 -76
  507. data/spec/integration/find_options_spec.rb +0 -227
  508. data/spec/mongo/dbref_spec.rb +0 -152
  509. data/spec/mongo/operation/kill_cursors_spec.rb +0 -47
  510. data/spec/spec_tests/change_streams_spec.rb +0 -93
  511. data/spec/spec_tests/data/change_streams/change-streams-errors.yml +0 -101
  512. data/spec/spec_tests/data/change_streams/change-streams-resume-allowlist.yml +0 -1173
  513. data/spec/spec_tests/data/change_streams/change-streams-resume-errorLabels.yml +0 -1105
  514. data/spec/spec_tests/data/change_streams/change-streams.yml +0 -535
  515. data/spec/spec_tests/data/crud_v2/aggregate-merge.yml +0 -103
  516. data/spec/spec_tests/data/crud_v2/aggregate-out-readConcern.yml +0 -111
  517. data/spec/spec_tests/data/crud_v2/bulkWrite-arrayFilters.yml +0 -103
  518. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-clientError.yml +0 -63
  519. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-serverError.yml +0 -92
  520. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint.yml +0 -103
  521. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-clientError.yml +0 -90
  522. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-serverError.yml +0 -147
  523. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint.yml +0 -164
  524. data/spec/spec_tests/data/crud_v2/db-aggregate.yml +0 -39
  525. data/spec/spec_tests/data/crud_v2/deleteMany-hint-clientError.yml +0 -43
  526. data/spec/spec_tests/data/crud_v2/deleteMany-hint-serverError.yml +0 -62
  527. data/spec/spec_tests/data/crud_v2/deleteMany-hint.yml +0 -58
  528. data/spec/spec_tests/data/crud_v2/deleteOne-hint-clientError.yml +0 -41
  529. data/spec/spec_tests/data/crud_v2/deleteOne-hint-serverError.yml +0 -60
  530. data/spec/spec_tests/data/crud_v2/deleteOne-hint.yml +0 -57
  531. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-clientError.yml +0 -28
  532. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-serverError.yml +0 -44
  533. data/spec/spec_tests/data/crud_v2/find-allowdiskuse.yml +0 -50
  534. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-clientError.yml +0 -45
  535. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-serverError.yml +0 -60
  536. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint.yml +0 -56
  537. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-clientError.yml +0 -40
  538. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-serverError.yml +0 -59
  539. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint.yml +0 -55
  540. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-clientError.yml +0 -40
  541. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-serverError.yml +0 -58
  542. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint.yml +0 -55
  543. data/spec/spec_tests/data/crud_v2/replaceOne-hint.yml +0 -61
  544. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-delete-hint-clientError.yml +0 -60
  545. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-update-hint-clientError.yml +0 -88
  546. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteMany-hint-clientError.yml +0 -40
  547. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteOne-hint-clientError.yml +0 -38
  548. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndDelete-hint-clientError.yml +0 -42
  549. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndReplace-hint-clientError.yml +0 -40
  550. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndUpdate-hint-clientError.yml +0 -40
  551. data/spec/spec_tests/data/crud_v2/unacknowledged-replaceOne-hint-clientError.yml +0 -40
  552. data/spec/spec_tests/data/crud_v2/unacknowledged-updateMany-hint-clientError.yml +0 -43
  553. data/spec/spec_tests/data/crud_v2/unacknowledged-updateOne-hint-clientError.yml +0 -40
  554. data/spec/spec_tests/data/crud_v2/updateMany-hint-clientError.yml +0 -45
  555. data/spec/spec_tests/data/crud_v2/updateMany-hint-serverError.yml +0 -66
  556. data/spec/spec_tests/data/crud_v2/updateMany-hint.yml +0 -65
  557. data/spec/spec_tests/data/crud_v2/updateOne-hint-clientError.yml +0 -43
  558. data/spec/spec_tests/data/crud_v2/updateOne-hint-serverError.yml +0 -62
  559. data/spec/spec_tests/data/crud_v2/updateOne-hint.yml +0 -61
  560. data/spec/spec_tests/data/crud_v2/updateWithPipelines.yml +0 -157
  561. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-4.9.yml +0 -60
  562. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors-4.9.yml +0 -146
  563. data/spec/support/crypt/corpus/corpus_encrypted.json +0 -4152
  564. data/spec/support/session_registry.rb +0 -55
  565. /data/spec/spec_tests/data/retryable_reads/{aggregate-merge.yml → legacy/aggregate-merge.yml} +0 -0
  566. /data/spec/spec_tests/data/retryable_reads/{aggregate-serverErrors.yml → legacy/aggregate-serverErrors.yml} +0 -0
  567. /data/spec/spec_tests/data/retryable_reads/{aggregate.yml → legacy/aggregate.yml} +0 -0
  568. /data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch-serverErrors.yml → legacy/changeStreams-client.watch-serverErrors.yml} +0 -0
  569. /data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch.yml → legacy/changeStreams-client.watch.yml} +0 -0
  570. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch-serverErrors.yml → legacy/changeStreams-db.coll.watch-serverErrors.yml} +0 -0
  571. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch.yml → legacy/changeStreams-db.coll.watch.yml} +0 -0
  572. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch-serverErrors.yml → legacy/changeStreams-db.watch-serverErrors.yml} +0 -0
  573. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch.yml → legacy/changeStreams-db.watch.yml} +0 -0
  574. /data/spec/spec_tests/data/retryable_reads/{count-serverErrors.yml → legacy/count-serverErrors.yml} +0 -0
  575. /data/spec/spec_tests/data/retryable_reads/{count.yml → legacy/count.yml} +0 -0
  576. /data/spec/spec_tests/data/retryable_reads/{countDocuments-serverErrors.yml → legacy/countDocuments-serverErrors.yml} +0 -0
  577. /data/spec/spec_tests/data/retryable_reads/{countDocuments.yml → legacy/countDocuments.yml} +0 -0
  578. /data/spec/spec_tests/data/retryable_reads/{distinct-serverErrors.yml → legacy/distinct-serverErrors.yml} +0 -0
  579. /data/spec/spec_tests/data/retryable_reads/{distinct.yml → legacy/distinct.yml} +0 -0
  580. /data/spec/spec_tests/data/retryable_reads/{find-serverErrors.yml → legacy/find-serverErrors.yml} +0 -0
  581. /data/spec/spec_tests/data/retryable_reads/{find.yml → legacy/find.yml} +0 -0
  582. /data/spec/spec_tests/data/retryable_reads/{findOne-serverErrors.yml → legacy/findOne-serverErrors.yml} +0 -0
  583. /data/spec/spec_tests/data/retryable_reads/{findOne.yml → legacy/findOne.yml} +0 -0
  584. /data/spec/spec_tests/data/retryable_reads/{gridfs-download-serverErrors.yml → legacy/gridfs-download-serverErrors.yml} +0 -0
  585. /data/spec/spec_tests/data/retryable_reads/{gridfs-download.yml → legacy/gridfs-download.yml} +0 -0
  586. /data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName-serverErrors.yml → legacy/gridfs-downloadByName-serverErrors.yml} +0 -0
  587. /data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName.yml → legacy/gridfs-downloadByName.yml} +0 -0
  588. /data/spec/spec_tests/data/retryable_reads/{listCollectionNames-serverErrors.yml → legacy/listCollectionNames-serverErrors.yml} +0 -0
  589. /data/spec/spec_tests/data/retryable_reads/{listCollectionNames.yml → legacy/listCollectionNames.yml} +0 -0
  590. /data/spec/spec_tests/data/retryable_reads/{listCollectionObjects-serverErrors.yml → legacy/listCollectionObjects-serverErrors.yml} +0 -0
  591. /data/spec/spec_tests/data/retryable_reads/{listCollectionObjects.yml → legacy/listCollectionObjects.yml} +0 -0
  592. /data/spec/spec_tests/data/retryable_reads/{listCollections-serverErrors.yml → legacy/listCollections-serverErrors.yml} +0 -0
  593. /data/spec/spec_tests/data/retryable_reads/{listCollections.yml → legacy/listCollections.yml} +0 -0
  594. /data/spec/spec_tests/data/retryable_reads/{listDatabaseNames-serverErrors.yml → legacy/listDatabaseNames-serverErrors.yml} +0 -0
  595. /data/spec/spec_tests/data/retryable_reads/{listDatabaseNames.yml → legacy/listDatabaseNames.yml} +0 -0
  596. /data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects-serverErrors.yml → legacy/listDatabaseObjects-serverErrors.yml} +0 -0
  597. /data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects.yml → legacy/listDatabaseObjects.yml} +0 -0
  598. /data/spec/spec_tests/data/retryable_reads/{listDatabases-serverErrors.yml → legacy/listDatabases-serverErrors.yml} +0 -0
  599. /data/spec/spec_tests/data/retryable_reads/{listDatabases.yml → legacy/listDatabases.yml} +0 -0
  600. /data/spec/spec_tests/data/retryable_reads/{listIndexNames-serverErrors.yml → legacy/listIndexNames-serverErrors.yml} +0 -0
  601. /data/spec/spec_tests/data/retryable_reads/{listIndexNames.yml → legacy/listIndexNames.yml} +0 -0
  602. /data/spec/spec_tests/data/retryable_reads/{listIndexes-serverErrors.yml → legacy/listIndexes-serverErrors.yml} +0 -0
  603. /data/spec/spec_tests/data/retryable_reads/{listIndexes.yml → legacy/listIndexes.yml} +0 -0
  604. /data/spec/spec_tests/data/retryable_reads/{mapReduce.yml → legacy/mapReduce.yml} +0 -0
  605. /data/spec/spec_tests/data/retryable_writes/{bulkWrite-errorLabels.yml → legacy/bulkWrite-errorLabels.yml} +0 -0
  606. /data/spec/spec_tests/data/retryable_writes/{bulkWrite.yml → legacy/bulkWrite.yml} +0 -0
  607. /data/spec/spec_tests/data/retryable_writes/{deleteMany.yml → legacy/deleteMany.yml} +0 -0
  608. /data/spec/spec_tests/data/retryable_writes/{deleteOne-errorLabels.yml → legacy/deleteOne-errorLabels.yml} +0 -0
  609. /data/spec/spec_tests/data/retryable_writes/{deleteOne.yml → legacy/deleteOne.yml} +0 -0
  610. /data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-errorLabels.yml → legacy/findOneAndDelete-errorLabels.yml} +0 -0
  611. /data/spec/spec_tests/data/retryable_writes/{findOneAndDelete.yml → legacy/findOneAndDelete.yml} +0 -0
  612. /data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-errorLabels.yml → legacy/findOneAndReplace-errorLabels.yml} +0 -0
  613. /data/spec/spec_tests/data/retryable_writes/{findOneAndReplace.yml → legacy/findOneAndReplace.yml} +0 -0
  614. /data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-errorLabels.yml → legacy/findOneAndUpdate-errorLabels.yml} +0 -0
  615. /data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate.yml → legacy/findOneAndUpdate.yml} +0 -0
  616. /data/spec/spec_tests/data/retryable_writes/{insertMany-errorLabels.yml → legacy/insertMany-errorLabels.yml} +0 -0
  617. /data/spec/spec_tests/data/retryable_writes/{insertMany.yml → legacy/insertMany.yml} +0 -0
  618. /data/spec/spec_tests/data/retryable_writes/{insertOne-errorLabels.yml → legacy/insertOne-errorLabels.yml} +0 -0
  619. /data/spec/spec_tests/data/retryable_writes/{insertOne.yml → legacy/insertOne.yml} +0 -0
  620. /data/spec/spec_tests/data/retryable_writes/{replaceOne-errorLabels.yml → legacy/replaceOne-errorLabels.yml} +0 -0
  621. /data/spec/spec_tests/data/retryable_writes/{replaceOne.yml → legacy/replaceOne.yml} +0 -0
  622. /data/spec/spec_tests/data/retryable_writes/{updateMany.yml → legacy/updateMany.yml} +0 -0
  623. /data/spec/spec_tests/data/retryable_writes/{updateOne-errorLabels.yml → legacy/updateOne-errorLabels.yml} +0 -0
  624. /data/spec/spec_tests/data/retryable_writes/{updateOne.yml → legacy/updateOne.yml} +0 -0
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
  # encoding: utf-8
3
3
 
4
- # Copyright (C) 2014-2020 MongoDB Inc.
4
+ # Copyright (C) 2022 MongoDB Inc.
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
7
7
  # you may not use this file except in compliance with the License.
@@ -16,26 +16,14 @@
16
16
  # limitations under the License.
17
17
 
18
18
  module Mongo
19
- module Operation
20
- class KillCursors
19
+ class Error
21
20
 
22
- # A MongoDB killcursors operation sent as a legacy wire protocol message.
23
- #
24
- # @api private
25
- #
26
- # @since 2.5.2
27
- class Legacy
28
- include Specifiable
29
- include Executable
30
- include CommandBuilder
31
-
32
- private
33
-
34
- def message(connection)
35
- Protocol::KillCursors.new(coll_name, db_name, int64_cursor_ids)
36
- end
21
+ # This exception is raised when a session is attempted to be used but
22
+ # it was never materialized.
23
+ class SessionNotMaterialized < InvalidSession
24
+ def initialize
25
+ super("The session was not materialized and cannot be used. Use start_session or with_session in order to start a session that will be materialized.")
37
26
  end
38
27
  end
39
28
  end
40
29
  end
41
-
data/lib/mongo/error.rb CHANGED
@@ -16,6 +16,7 @@
16
16
  # limitations under the License.
17
17
 
18
18
  require 'mongo/error/notable'
19
+ require 'mongo/error/labelable'
19
20
 
20
21
  module Mongo
21
22
  # Base error class for all Mongo related errors.
@@ -23,6 +24,7 @@ module Mongo
23
24
  # @since 2.0.0
24
25
  class Error < StandardError
25
26
  include Notable
27
+ include Labelable
26
28
 
27
29
  # The error code field.
28
30
  #
@@ -109,24 +111,9 @@ module Mongo
109
111
 
110
112
  def initialize(msg = nil)
111
113
  super
112
- @labels = []
113
114
  @write_concern_error_labels = []
114
115
  end
115
116
 
116
- # Does the error have the given label?
117
- #
118
- # @example
119
- # error.label?(label)
120
- #
121
- # @param [ String ] label The label to check if the error has.
122
- #
123
- # @return [ true, false ] Whether the error has the given label.
124
- #
125
- # @since 2.6.0
126
- def label?(label)
127
- @labels.include?(label)
128
- end
129
-
130
117
  # Does the write concern error have the given label?
131
118
  #
132
119
  # @param [ String ] label The label to check for the presence of.
@@ -136,34 +123,12 @@ module Mongo
136
123
  @write_concern_error_labels.include?(label)
137
124
  end
138
125
 
139
- # Gets the set of labels associated with the error.
140
- #
141
- # @example
142
- # error.labels
143
- #
144
- # @return [ Array ] The set of labels.
145
- #
146
- # @since 2.7.0
147
- def labels
148
- @labels.dup
149
- end
150
-
151
126
  # The set of error labels associated with the write concern error.
152
127
  #
153
128
  # @return [ Array<String> ] The list of error labels.
154
129
  def write_concern_error_labels
155
130
  @write_concern_error_labels.dup
156
131
  end
157
-
158
- # Adds the specified label to the error instance, if the label is not
159
- # already in the set of labels.
160
- #
161
- # @param [ String ] label The label to add.
162
- #
163
- # @api private
164
- def add_label(label)
165
- @labels << label unless label?(label)
166
- end
167
132
  end
168
133
  end
169
134
 
@@ -186,6 +151,7 @@ require 'mongo/error/invalid_address'
186
151
  require 'mongo/error/invalid_bulk_operation'
187
152
  require 'mongo/error/invalid_bulk_operation_type'
188
153
  require 'mongo/error/invalid_collection_name'
154
+ require 'mongo/error/invalid_config_option'
189
155
  require 'mongo/error/invalid_cursor_operation'
190
156
  require 'mongo/error/invalid_database_name'
191
157
  require 'mongo/error/invalid_document'
@@ -223,6 +189,7 @@ require 'mongo/error/no_server_available'
223
189
  require 'mongo/error/no_srv_records'
224
190
  require 'mongo/error/session_ended'
225
191
  require 'mongo/error/sessions_not_supported'
192
+ require 'mongo/error/session_not_materialized'
226
193
  require 'mongo/error/snapshot_session_invalid_server_version'
227
194
  require 'mongo/error/snapshot_session_transaction_prohibited'
228
195
  require 'mongo/error/operation_failure'
@@ -235,6 +202,7 @@ require 'mongo/error/failed_string_prep_validation'
235
202
  require 'mongo/error/unchangeable_collection_option'
236
203
  require 'mongo/error/unexpected_chunk_length'
237
204
  require 'mongo/error/unexpected_response'
205
+ require 'mongo/error/missing_connection'
238
206
  require 'mongo/error/missing_file_chunk'
239
207
  require 'mongo/error/missing_password'
240
208
  require 'mongo/error/missing_resume_token'
@@ -69,7 +69,8 @@ module Mongo
69
69
  :unique => :unique,
70
70
  :version => :v,
71
71
  :weights => :weights,
72
- :collation => :collation
72
+ :collation => :collation,
73
+ :comment => :comment,
73
74
  }.freeze
74
75
 
75
76
  # Drop an index by its name.
@@ -78,13 +79,17 @@ module Mongo
78
79
  # view.drop_one('name_1')
79
80
  #
80
81
  # @param [ String ] name The name of the index.
82
+ # @param [ Hash ] options Options for this operation.
83
+ #
84
+ # @option options [ Object ] :comment A user-provided
85
+ # comment to attach to this command.
81
86
  #
82
87
  # @return [ Result ] The response.
83
88
  #
84
89
  # @since 2.0.0
85
- def drop_one(name)
90
+ def drop_one(name, options = {})
86
91
  raise Error::MultiIndexDrop.new if name == Index::ALL
87
- drop_by_name(name)
92
+ drop_by_name(name, comment: options[:comment])
88
93
  end
89
94
 
90
95
  # Drop all indexes on the collection.
@@ -92,11 +97,16 @@ module Mongo
92
97
  # @example Drop all indexes on the collection.
93
98
  # view.drop_all
94
99
  #
100
+ # @param [ Hash ] options Options for this operation.
101
+ #
102
+ # @option options [ Object ] :comment A user-provided
103
+ # comment to attach to this command.
104
+ #
95
105
  # @return [ Result ] The response.
96
106
  #
97
107
  # @since 2.0.0
98
- def drop_all
99
- drop_by_name(Index::ALL)
108
+ def drop_all(options = {})
109
+ drop_by_name(Index::ALL, comment: options[:comment])
100
110
  end
101
111
 
102
112
  # Creates an index on the collection.
@@ -134,6 +144,8 @@ module Mongo
134
144
  # - "majority" indicating that a majority of data bearing nodes must vote
135
145
  # - "votingMembers" which means that all voting data bearing nodes must vote
136
146
  # @option options [ Session ] :session The session to use for the operation.
147
+ # @option options [ Object ] :comment A user-provided
148
+ # comment to attach to this command.
137
149
  #
138
150
  # @note Note that the options listed may be subset of those available.
139
151
  # See the MongoDB documentation for a full list of supported options by server version.
@@ -148,7 +160,7 @@ module Mongo
148
160
  if session = @options[:session]
149
161
  create_options[:session] = session
150
162
  end
151
- %i(commit_quorum session).each do |key|
163
+ %i(commit_quorum session comment).each do |key|
152
164
  if value = options.delete(key)
153
165
  create_options[key] = value
154
166
  end
@@ -185,6 +197,7 @@ module Mongo
185
197
  # - "majority" indicating that a majority of data bearing nodes must vote
186
198
  # - "votingMembers" which means that all voting data bearing nodes must vote
187
199
  # - session: The session to use.
200
+ # - comment: A user-provided comment to attach to this command.
188
201
  #
189
202
  # @return [ Result ] The result of the command.
190
203
  #
@@ -213,6 +226,7 @@ module Mongo
213
226
  session: session,
214
227
  commit_quorum: options[:commit_quorum],
215
228
  write_concern: write_concern,
229
+ comment: options[:comment],
216
230
  }
217
231
 
218
232
  Operation::CreateIndex.new(spec).execute(server, context: Operation::Context.new(client: client, session: session))
@@ -283,7 +297,7 @@ module Mongo
283
297
 
284
298
  private
285
299
 
286
- def drop_by_name(name)
300
+ def drop_by_name(name, comment: nil)
287
301
  client.send(:with_session, @options) do |session|
288
302
  spec = {
289
303
  db_name: database.name,
@@ -292,6 +306,7 @@ module Mongo
292
306
  session: session,
293
307
  write_concern: write_concern,
294
308
  }
309
+ spec[:comment] = comment unless comment.nil?
295
310
  server = next_primary(nil, session)
296
311
  Operation::DropIndex.new(spec).execute(server, context: Operation::Context.new(client: client, session: session))
297
312
  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,22 @@ 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.tap do |sel|
38
+ # This code MUST be removed as soon as server starts accepting
39
+ # contention as int32.
40
+ if sel[:encryptedFields] && sel[:encryptedFields].key?('fields')
41
+ sel[:encryptedFields]['fields'] = sel[:encryptedFields]['fields'].map do |field|
42
+ if field['queries'] && field['queries'].key?('contention')
43
+ field['queries']['contention'] = BSON::Int64.new(field['queries']['contention'])
44
+ end
45
+ field
46
+ end
47
+ end
48
+ # End of code to be removed
49
+ end
35
50
  end
36
51
  end
37
52
  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
 
@@ -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