mongo 2.20.0 → 2.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (296) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +40 -1
  3. data/Rakefile +59 -23
  4. data/lib/mongo/address.rb +22 -3
  5. data/lib/mongo/auth/aws/credentials_retriever.rb +70 -17
  6. data/lib/mongo/auth/base.rb +1 -1
  7. data/lib/mongo/bulk_write.rb +35 -2
  8. data/lib/mongo/client.rb +38 -6
  9. data/lib/mongo/client_encryption.rb +6 -3
  10. data/lib/mongo/cluster/reapers/cursor_reaper.rb +6 -1
  11. data/lib/mongo/cluster/sdam_flow.rb +20 -7
  12. data/lib/mongo/cluster.rb +14 -4
  13. data/lib/mongo/collection/helpers.rb +1 -1
  14. data/lib/mongo/collection/view/aggregation/behavior.rb +131 -0
  15. data/lib/mongo/collection/view/aggregation.rb +33 -99
  16. data/lib/mongo/collection/view/builder/aggregation.rb +1 -7
  17. data/lib/mongo/collection/view/change_stream.rb +80 -27
  18. data/lib/mongo/collection/view/iterable.rb +76 -60
  19. data/lib/mongo/collection/view/map_reduce.rb +25 -8
  20. data/lib/mongo/collection/view/readable.rb +79 -30
  21. data/lib/mongo/collection/view/writable.rb +109 -48
  22. data/lib/mongo/collection/view.rb +43 -3
  23. data/lib/mongo/collection.rb +158 -23
  24. data/lib/mongo/config.rb +2 -2
  25. data/lib/mongo/crypt/auto_encrypter.rb +4 -6
  26. data/lib/mongo/crypt/binding.rb +4 -4
  27. data/lib/mongo/crypt/context.rb +20 -14
  28. data/lib/mongo/crypt/encryption_io.rb +56 -26
  29. data/lib/mongo/crypt/explicit_encrypter.rb +49 -20
  30. data/lib/mongo/crypt/explicit_encryption_context.rb +17 -11
  31. data/lib/mongo/crypt/kms/azure/credentials_retriever.rb +22 -6
  32. data/lib/mongo/crypt/kms/gcp/credentials_retriever.rb +29 -4
  33. data/lib/mongo/csot_timeout_holder.rb +119 -0
  34. data/lib/mongo/cursor/kill_spec.rb +5 -2
  35. data/lib/mongo/cursor/nontailable.rb +27 -0
  36. data/lib/mongo/cursor.rb +86 -24
  37. data/lib/mongo/cursor_host.rb +82 -0
  38. data/lib/mongo/database/view.rb +81 -14
  39. data/lib/mongo/database.rb +88 -18
  40. data/lib/mongo/error/operation_failure.rb +209 -204
  41. data/lib/mongo/error/server_timeout_error.rb +12 -0
  42. data/lib/mongo/error/socket_timeout_error.rb +3 -1
  43. data/lib/mongo/error/timeout_error.rb +23 -0
  44. data/lib/mongo/error.rb +2 -0
  45. data/lib/mongo/grid/fs_bucket.rb +45 -12
  46. data/lib/mongo/grid/stream/read.rb +15 -1
  47. data/lib/mongo/grid/stream/write.rb +21 -4
  48. data/lib/mongo/index/view.rb +77 -16
  49. data/lib/mongo/operation/context.rb +40 -2
  50. data/lib/mongo/operation/create_search_indexes/op_msg.rb +2 -2
  51. data/lib/mongo/operation/delete/op_msg.rb +2 -1
  52. data/lib/mongo/operation/drop_search_index/op_msg.rb +2 -2
  53. data/lib/mongo/operation/find/op_msg.rb +45 -0
  54. data/lib/mongo/operation/get_more/op_msg.rb +33 -0
  55. data/lib/mongo/operation/insert/op_msg.rb +3 -2
  56. data/lib/mongo/operation/insert/result.rb +4 -2
  57. data/lib/mongo/operation/list_collections/result.rb +1 -1
  58. data/lib/mongo/operation/map_reduce/result.rb +1 -1
  59. data/lib/mongo/operation/op_msg_base.rb +3 -1
  60. data/lib/mongo/operation/result.rb +26 -5
  61. data/lib/mongo/operation/shared/executable.rb +12 -1
  62. data/lib/mongo/operation/shared/op_msg_executable.rb +4 -1
  63. data/lib/mongo/operation/shared/response_handling.rb +3 -3
  64. data/lib/mongo/operation/shared/sessions_supported.rb +1 -1
  65. data/lib/mongo/operation/shared/timed.rb +52 -0
  66. data/lib/mongo/operation/shared/write.rb +4 -1
  67. data/lib/mongo/operation/update/op_msg.rb +2 -1
  68. data/lib/mongo/operation/update_search_index/op_msg.rb +2 -2
  69. data/lib/mongo/operation.rb +1 -0
  70. data/lib/mongo/protocol/message.rb +1 -4
  71. data/lib/mongo/protocol/msg.rb +2 -2
  72. data/lib/mongo/retryable/base_worker.rb +28 -3
  73. data/lib/mongo/retryable/read_worker.rb +76 -35
  74. data/lib/mongo/retryable/write_worker.rb +53 -22
  75. data/lib/mongo/retryable.rb +8 -2
  76. data/lib/mongo/server/connection.rb +11 -5
  77. data/lib/mongo/server/connection_base.rb +22 -2
  78. data/lib/mongo/server/connection_pool.rb +32 -14
  79. data/lib/mongo/server/description/features.rb +1 -1
  80. data/lib/mongo/server/description.rb +18 -5
  81. data/lib/mongo/server/monitor.rb +7 -4
  82. data/lib/mongo/server/pending_connection.rb +25 -8
  83. data/lib/mongo/server/{round_trip_time_averager.rb → round_trip_time_calculator.rb} +25 -7
  84. data/lib/mongo/server.rb +11 -6
  85. data/lib/mongo/server_selector/base.rb +25 -9
  86. data/lib/mongo/session.rb +78 -9
  87. data/lib/mongo/socket/ssl.rb +131 -18
  88. data/lib/mongo/socket/tcp.rb +40 -6
  89. data/lib/mongo/socket.rb +154 -25
  90. data/lib/mongo/uri/options_mapper.rb +1 -0
  91. data/lib/mongo/version.rb +1 -5
  92. data/lib/mongo.rb +1 -0
  93. data/mongo.gemspec +8 -11
  94. data/spec/atlas/atlas_connectivity_spec.rb +4 -0
  95. data/spec/atlas/operations_spec.rb +4 -0
  96. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +2 -1
  97. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +494 -487
  98. data/spec/integration/client_side_encryption/on_demand_aws_credentials_spec.rb +1 -1
  99. data/spec/integration/client_side_encryption/range_explicit_encryption_prose_spec.rb +67 -20
  100. data/spec/integration/client_side_operations_timeout/encryption_prose_spec.rb +131 -0
  101. data/spec/integration/connection_pool_populator_spec.rb +2 -0
  102. data/spec/integration/cursor_pinning_spec.rb +15 -60
  103. data/spec/integration/cursor_reaping_spec.rb +1 -1
  104. data/spec/integration/docs_examples_spec.rb +1 -1
  105. data/spec/integration/operation_failure_code_spec.rb +1 -1
  106. data/spec/integration/operation_failure_message_spec.rb +3 -3
  107. data/spec/integration/retryable_errors_spec.rb +2 -2
  108. data/spec/integration/retryable_reads_errors_spec.rb +35 -23
  109. data/spec/integration/sdam_error_handling_spec.rb +4 -1
  110. data/spec/integration/search_indexes_prose_spec.rb +4 -0
  111. data/spec/integration/server_spec.rb +4 -3
  112. data/spec/integration/transactions_api_examples_spec.rb +2 -0
  113. data/spec/kerberos/kerberos_spec.rb +4 -0
  114. data/spec/lite_spec_helper.rb +3 -11
  115. data/spec/mongo/auth/user/view_spec.rb +1 -1
  116. data/spec/mongo/caching_cursor_spec.rb +1 -1
  117. data/spec/mongo/client_encryption_spec.rb +1 -0
  118. data/spec/mongo/client_spec.rb +158 -4
  119. data/spec/mongo/collection/view/aggregation_spec.rb +14 -39
  120. data/spec/mongo/collection/view/change_stream_spec.rb +3 -3
  121. data/spec/mongo/collection_crud_spec.rb +1 -0
  122. data/spec/mongo/collection_spec.rb +5 -6
  123. data/spec/mongo/crypt/auto_encrypter_spec.rb +14 -12
  124. data/spec/mongo/crypt/data_key_context_spec.rb +3 -1
  125. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +2 -2
  126. data/spec/mongo/crypt/handle_spec.rb +1 -1
  127. data/spec/mongo/cursor_spec.rb +26 -9
  128. data/spec/mongo/error/operation_failure_heavy_spec.rb +2 -2
  129. data/spec/mongo/operation/context_spec.rb +79 -0
  130. data/spec/mongo/operation/create/op_msg_spec.rb +106 -110
  131. data/spec/mongo/operation/delete/op_msg_spec.rb +6 -5
  132. data/spec/mongo/operation/find/op_msg_spec.rb +66 -0
  133. data/spec/mongo/operation/get_more/op_msg_spec.rb +65 -0
  134. data/spec/mongo/operation/insert/op_msg_spec.rb +128 -131
  135. data/spec/mongo/operation/shared/csot/examples.rb +113 -0
  136. data/spec/mongo/query_cache_spec.rb +243 -225
  137. data/spec/mongo/retryable_spec.rb +1 -0
  138. data/spec/mongo/server/connection_spec.rb +22 -0
  139. data/spec/mongo/server/round_trip_time_calculator_spec.rb +120 -0
  140. data/spec/mongo/socket/ssl_spec.rb +0 -10
  141. data/spec/runners/change_streams/test.rb +2 -2
  142. data/spec/runners/crud/operation.rb +1 -1
  143. data/spec/runners/crud/verifier.rb +3 -1
  144. data/spec/runners/transactions/operation.rb +4 -6
  145. data/spec/runners/unified/ambiguous_operations.rb +13 -0
  146. data/spec/runners/unified/assertions.rb +4 -0
  147. data/spec/runners/unified/change_stream_operations.rb +14 -24
  148. data/spec/runners/unified/crud_operations.rb +82 -59
  149. data/spec/runners/unified/ddl_operations.rb +38 -7
  150. data/spec/runners/unified/grid_fs_operations.rb +37 -2
  151. data/spec/runners/unified/support_operations.rb +43 -4
  152. data/spec/runners/unified/test.rb +22 -10
  153. data/spec/runners/unified.rb +1 -1
  154. data/spec/solo/clean_exit_spec.rb +2 -0
  155. data/spec/spec_tests/client_side_operations_timeout_spec.rb +15 -0
  156. data/spec/spec_tests/data/change_streams_unified/change-streams-clusterTime.yml +3 -1
  157. data/spec/spec_tests/data/change_streams_unified/change-streams-disambiguatedPaths.yml +3 -1
  158. data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +3 -1
  159. data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +1 -1
  160. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1 -1
  161. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1 -1
  162. data/spec/spec_tests/data/change_streams_unified/change-streams-showExpandedEvents.yml +1 -1
  163. data/spec/spec_tests/data/client_side_encryption/badQueries.yml +2 -1
  164. data/spec/spec_tests/data/client_side_encryption/fle2v2-BypassQueryAnalysis.yml +1 -0
  165. data/spec/spec_tests/data/client_side_encryption/fle2v2-Compact.yml +1 -0
  166. data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection.yml +1 -0
  167. data/spec/spec_tests/data/client_side_encryption/fle2v2-DecryptExistingData.yml +1 -0
  168. data/spec/spec_tests/data/client_side_encryption/fle2v2-Delete.yml +1 -0
  169. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-EncryptedFieldsMap.yml +1 -0
  170. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-jsonSchema.yml +1 -0
  171. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFieldsMap-defaults.yml +1 -0
  172. data/spec/spec_tests/data/client_side_encryption/fle2v2-FindOneAndUpdate.yml +1 -0
  173. data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Indexed.yml +1 -0
  174. data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Unindexed.yml +1 -0
  175. data/spec/spec_tests/data/client_side_encryption/fle2v2-MissingKey.yml +1 -0
  176. data/spec/spec_tests/data/client_side_encryption/fle2v2-NoEncryption.yml +1 -0
  177. data/spec/spec_tests/data/client_side_encryption/fle2v2-Update.yml +1 -0
  178. data/spec/spec_tests/data/client_side_encryption/fle2v2-validatorAndPartialFieldExpression.yml +2 -1
  179. data/spec/spec_tests/data/client_side_encryption/timeoutMS.yml +67 -0
  180. data/spec/spec_tests/data/client_side_operations_timeout/bulkWrite.yml +87 -0
  181. data/spec/spec_tests/data/client_side_operations_timeout/change-streams.yml +358 -0
  182. data/spec/spec_tests/data/client_side_operations_timeout/close-cursors.yml +129 -0
  183. data/spec/spec_tests/data/client_side_operations_timeout/command-execution.yml +250 -0
  184. data/spec/spec_tests/data/client_side_operations_timeout/convenient-transactions.yml +113 -0
  185. data/spec/spec_tests/data/client_side_operations_timeout/cursors.yml +70 -0
  186. data/spec/spec_tests/data/client_side_operations_timeout/deprecated-options.yml +3982 -0
  187. data/spec/spec_tests/data/client_side_operations_timeout/error-transformations.yml +96 -0
  188. data/spec/spec_tests/data/client_side_operations_timeout/global-timeoutMS.yml +3236 -0
  189. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-advanced.yml +207 -0
  190. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-delete.yml +152 -0
  191. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-download.yml +182 -0
  192. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-find.yml +100 -0
  193. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-upload.yml +249 -0
  194. data/spec/spec_tests/data/client_side_operations_timeout/legacy-timeouts.yml +204 -0
  195. data/spec/spec_tests/data/client_side_operations_timeout/non-tailable-cursors.yml +307 -0
  196. data/spec/spec_tests/data/client_side_operations_timeout/override-collection-timeoutMS.yml +1877 -0
  197. data/spec/spec_tests/data/client_side_operations_timeout/override-operation-timeoutMS.yml +1918 -0
  198. data/spec/spec_tests/data/client_side_operations_timeout/retryability-legacy-timeouts.yml +1676 -0
  199. data/spec/spec_tests/data/client_side_operations_timeout/retryability-timeoutMS.yml +2824 -0
  200. data/spec/spec_tests/data/client_side_operations_timeout/sessions-inherit-timeoutMS.yml +168 -0
  201. data/spec/spec_tests/data/client_side_operations_timeout/sessions-override-operation-timeoutMS.yml +171 -0
  202. data/spec/spec_tests/data/client_side_operations_timeout/sessions-override-timeoutMS.yml +168 -0
  203. data/spec/spec_tests/data/client_side_operations_timeout/tailable-awaitData.yml +247 -0
  204. data/spec/spec_tests/data/client_side_operations_timeout/tailable-non-awaitData.yml +181 -0
  205. data/spec/spec_tests/data/crud_unified/aggregate-write-readPreference.yml +6 -0
  206. data/spec/spec_tests/data/crud_unified/db-aggregate-write-readPreference.yml +6 -0
  207. data/spec/spec_tests/data/crud_unified/find-test-all-options.yml +29 -0
  208. data/spec/spec_tests/server_selection_rtt_spec.rb +6 -6
  209. data/spec/spec_tests/transactions_unified_spec.rb +2 -1
  210. data/spec/support/certificates/atlas-ocsp-ca.crt +89 -79
  211. data/spec/support/certificates/atlas-ocsp.crt +117 -122
  212. data/spec/support/certificates/retrieve-atlas-cert +1 -1
  213. data/spec/support/cluster_tools.rb +3 -3
  214. data/spec/support/common_shortcuts.rb +2 -2
  215. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Date.json +1 -1
  216. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalNoPrecision.json +1 -1
  217. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalPrecision.json +1 -1
  218. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoubleNoPrecision.json +1 -1
  219. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoublePrecision.json +1 -1
  220. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Int.json +1 -1
  221. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Long.json +1 -1
  222. data/spec/support/shared/session.rb +2 -2
  223. data/spec/support/spec_setup.rb +2 -2
  224. data/spec/support/utils.rb +3 -1
  225. metadata +88 -173
  226. checksums.yaml.gz.sig +0 -0
  227. data/spec/mongo/server/round_trip_time_averager_spec.rb +0 -48
  228. data/spec/shared/LICENSE +0 -20
  229. data/spec/shared/bin/get-mongodb-download-url +0 -17
  230. data/spec/shared/bin/s3-copy +0 -45
  231. data/spec/shared/bin/s3-upload +0 -69
  232. data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
  233. data/spec/shared/lib/mrss/cluster_config.rb +0 -231
  234. data/spec/shared/lib/mrss/constraints.rb +0 -378
  235. data/spec/shared/lib/mrss/docker_runner.rb +0 -298
  236. data/spec/shared/lib/mrss/eg_config_utils.rb +0 -51
  237. data/spec/shared/lib/mrss/event_subscriber.rb +0 -210
  238. data/spec/shared/lib/mrss/lite_constraints.rb +0 -238
  239. data/spec/shared/lib/mrss/server_version_registry.rb +0 -113
  240. data/spec/shared/lib/mrss/session_registry.rb +0 -69
  241. data/spec/shared/lib/mrss/session_registry_legacy.rb +0 -60
  242. data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
  243. data/spec/shared/lib/mrss/utils.rb +0 -37
  244. data/spec/shared/share/Dockerfile.erb +0 -281
  245. data/spec/shared/share/haproxy-1.conf +0 -16
  246. data/spec/shared/share/haproxy-2.conf +0 -17
  247. data/spec/shared/shlib/config.sh +0 -27
  248. data/spec/shared/shlib/distro.sh +0 -74
  249. data/spec/shared/shlib/server.sh +0 -417
  250. data/spec/shared/shlib/set_env.sh +0 -146
  251. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Aggregate.yml +0 -241
  252. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Correctness.yml +0 -422
  253. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Delete.yml +0 -182
  254. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-FindOneAndUpdate.yml +0 -239
  255. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-InsertFind.yml +0 -235
  256. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Update.yml +0 -252
  257. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Aggregate.yml +0 -1687
  258. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Correctness.yml +0 -293
  259. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Delete.yml +0 -905
  260. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-FindOneAndUpdate.yml +0 -1684
  261. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-InsertFind.yml +0 -1680
  262. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Update.yml +0 -1697
  263. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Aggregate.yml +0 -329
  264. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Correctness.yml +0 -424
  265. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Delete.yml +0 -226
  266. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-FindOneAndUpdate.yml +0 -327
  267. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-InsertFind.yml +0 -319
  268. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Update.yml +0 -336
  269. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Aggregate.yml +0 -913
  270. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Correctness.yml +0 -292
  271. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Delete.yml +0 -518
  272. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-FindOneAndUpdate.yml +0 -911
  273. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-InsertFind.yml +0 -907
  274. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Update.yml +0 -924
  275. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Aggregate.yml +0 -325
  276. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Correctness.yml +0 -424
  277. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Delete.yml +0 -224
  278. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-FindOneAndUpdate.yml +0 -323
  279. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-InsertFind.yml +0 -319
  280. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Update.yml +0 -338
  281. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Aggregate.yml +0 -241
  282. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Correctness.yml +0 -423
  283. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Delete.yml +0 -182
  284. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-FindOneAndUpdate.yml +0 -239
  285. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-InsertFind.yml +0 -235
  286. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Update.yml +0 -254
  287. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Aggregate.yml +0 -241
  288. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Correctness.yml +0 -422
  289. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Delete.yml +0 -182
  290. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-FindOneAndUpdate.yml +0 -239
  291. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-InsertFind.yml +0 -235
  292. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Update.yml +0 -254
  293. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-WrongType.yml +0 -43
  294. data/spec/support/faas/app/aws_lambda/mongodb/Gemfile.lock +0 -19
  295. data.tar.gz.sig +0 -0
  296. metadata.gz.sig +0 -3
@@ -0,0 +1,249 @@
1
+ description: "timeoutMS behaves correctly for GridFS upload operations"
2
+
3
+ schemaVersion: "1.9"
4
+
5
+ runOnRequirements:
6
+ - minServerVersion: "4.4"
7
+ serverless: forbid # GridFS ops can be slow on serverless.
8
+
9
+ createEntities:
10
+ - client:
11
+ id: &failPointClient failPointClient
12
+ useMultipleMongoses: false
13
+ - client:
14
+ id: &client client
15
+ uriOptions:
16
+ timeoutMS: 75
17
+ useMultipleMongoses: false
18
+ - database:
19
+ id: &database database
20
+ client: *client
21
+ databaseName: &databaseName test
22
+ - bucket:
23
+ id: &bucket bucket
24
+ database: *database
25
+ - collection:
26
+ id: &filesCollection filesCollection
27
+ database: *database
28
+ collectionName: &filesCollectionName fs.files
29
+ - collection:
30
+ id: &chunksCollection chunksCollection
31
+ database: *database
32
+ collectionName: &chunksCollectionName fs.chunks
33
+
34
+ initialData:
35
+ - collectionName: *filesCollectionName
36
+ databaseName: *databaseName
37
+ documents: []
38
+ - collectionName: *chunksCollectionName
39
+ databaseName: *databaseName
40
+ documents: []
41
+
42
+ tests:
43
+ # Many tests in this file do not specify command monitoring expectations because GridFS uploads internally do a
44
+ # number of operations, so expecting an exact set of commands can cause flaky failures.
45
+
46
+ - description: "timeoutMS can be overridden for upload"
47
+ operations:
48
+ - name: failPoint
49
+ object: testRunner
50
+ arguments:
51
+ client: *failPointClient
52
+ failPoint:
53
+ configureFailPoint: failCommand
54
+ mode: { times: 1 }
55
+ data:
56
+ failCommands: ["find"]
57
+ blockConnection: true
58
+ blockTimeMS: 100
59
+ - name: upload
60
+ object: *bucket
61
+ arguments:
62
+ filename: filename
63
+ source: { $$hexBytes: "1122334455" }
64
+ timeoutMS: 1000
65
+
66
+ # On the first write to the bucket, drivers check if the files collection is empty to see if indexes need to be
67
+ # created.
68
+ - description: "timeoutMS applied to initial find on files collection"
69
+ operations:
70
+ - name: failPoint
71
+ object: testRunner
72
+ arguments:
73
+ client: *failPointClient
74
+ failPoint:
75
+ configureFailPoint: failCommand
76
+ mode: { times: 1 }
77
+ data:
78
+ failCommands: ["find"]
79
+ blockConnection: true
80
+ blockTimeMS: 100
81
+ - name: upload
82
+ object: *bucket
83
+ arguments:
84
+ filename: filename
85
+ source: { $$hexBytes: "1122334455" }
86
+ expectError:
87
+ isTimeoutError: true
88
+
89
+ # On the first write to the bucket, drivers check if the files collection has the correct indexes.
90
+ - description: "timeoutMS applied to listIndexes on files collection"
91
+ operations:
92
+ - name: failPoint
93
+ object: testRunner
94
+ arguments:
95
+ client: *failPointClient
96
+ failPoint:
97
+ configureFailPoint: failCommand
98
+ mode: { times: 1 }
99
+ data:
100
+ failCommands: ["listIndexes"]
101
+ blockConnection: true
102
+ blockTimeMS: 100
103
+ - name: upload
104
+ object: *bucket
105
+ arguments:
106
+ filename: filename
107
+ source: { $$hexBytes: "1122334455" }
108
+ expectError:
109
+ isTimeoutError: true
110
+
111
+ # If the files collection is empty when the first write to the bucket occurs, drivers attempt to create an index
112
+ # on the bucket's files collection.
113
+ - description: "timeoutMS applied to index creation for files collection"
114
+ operations:
115
+ - name: failPoint
116
+ object: testRunner
117
+ arguments:
118
+ client: *failPointClient
119
+ failPoint:
120
+ configureFailPoint: failCommand
121
+ mode: { times: 1 }
122
+ data:
123
+ failCommands: ["createIndexes"]
124
+ blockConnection: true
125
+ blockTimeMS: 100
126
+ - name: upload
127
+ object: *bucket
128
+ arguments:
129
+ filename: filename
130
+ source: { $$hexBytes: "1122334455" }
131
+ expectError:
132
+ isTimeoutError: true
133
+
134
+ # On the first write to the bucket, drivers check if the chunks collection has the correct indexes.
135
+ - description: "timeoutMS applied to listIndexes on chunks collection"
136
+ operations:
137
+ - name: failPoint
138
+ object: testRunner
139
+ arguments:
140
+ client: *failPointClient
141
+ failPoint:
142
+ configureFailPoint: failCommand
143
+ # The first listIndexes will be on the files collection, so we skip it.
144
+ mode: { skip: 1 }
145
+ data:
146
+ failCommands: ["listIndexes"]
147
+ blockConnection: true
148
+ blockTimeMS: 100
149
+ - name: upload
150
+ object: *bucket
151
+ arguments:
152
+ filename: filename
153
+ source: { $$hexBytes: "1122334455" }
154
+ expectError:
155
+ isTimeoutError: true
156
+
157
+ # If the files collection is empty when the first write to the bucket occurs, drivers attempt to create an index
158
+ # on the bucket's chunks collection.
159
+ - description: "timeoutMS applied to index creation for chunks collection"
160
+ operations:
161
+ - name: failPoint
162
+ object: testRunner
163
+ arguments:
164
+ client: *failPointClient
165
+ failPoint:
166
+ configureFailPoint: failCommand
167
+ # This index is created after the one on the files collection, so we skip the first createIndexes command
168
+ # and target the second.
169
+ mode: { skip: 1 }
170
+ data:
171
+ failCommands: ["createIndexes"]
172
+ blockConnection: true
173
+ blockTimeMS: 100
174
+ - name: upload
175
+ object: *bucket
176
+ arguments:
177
+ filename: filename
178
+ source: { $$hexBytes: "1122334455" }
179
+ expectError:
180
+ isTimeoutError: true
181
+
182
+ - description: "timeoutMS applied to chunk insertion"
183
+ operations:
184
+ - name: failPoint
185
+ object: testRunner
186
+ arguments:
187
+ client: *failPointClient
188
+ failPoint:
189
+ configureFailPoint: failCommand
190
+ mode: { times: 1 }
191
+ data:
192
+ failCommands: ["insert"]
193
+ blockConnection: true
194
+ blockTimeMS: 100
195
+ - name: upload
196
+ object: *bucket
197
+ arguments:
198
+ filename: filename
199
+ source: { $$hexBytes: "1122334455" }
200
+ expectError:
201
+ isTimeoutError: true
202
+
203
+ - description: "timeoutMS applied to creation of files document"
204
+ operations:
205
+ - name: failPoint
206
+ object: testRunner
207
+ arguments:
208
+ client: *failPointClient
209
+ failPoint:
210
+ configureFailPoint: failCommand
211
+ # Skip the insert to upload the chunk. Because the whole file fits into one chunk, the second insert will
212
+ # be the files document upload.
213
+ mode: { skip: 1 }
214
+ data:
215
+ failCommands: ["insert"]
216
+ blockConnection: true
217
+ blockTimeMS: 100
218
+ - name: upload
219
+ object: *bucket
220
+ arguments:
221
+ filename: filename
222
+ source: { $$hexBytes: "1122334455" }
223
+ expectError:
224
+ isTimeoutError: true
225
+
226
+ # Test that drivers apply timeoutMS to the entire upload rather than refreshing it between individual commands. We
227
+ # test this by blocking the "find" and "listIndexes" commands for 50ms each and performing an upload. The upload
228
+ # should inherit timeoutMS=75 from the client/database and the server takes over 75ms total, so the operation should
229
+ # fail.
230
+ - description: "timeoutMS applied to upload as a whole, not individual parts"
231
+ operations:
232
+ - name: failPoint
233
+ object: testRunner
234
+ arguments:
235
+ client: *failPointClient
236
+ failPoint:
237
+ configureFailPoint: failCommand
238
+ mode: { times: 2 }
239
+ data:
240
+ failCommands: ["find", "listIndexes"]
241
+ blockConnection: true
242
+ blockTimeMS: 50
243
+ - name: upload
244
+ object: *bucket
245
+ arguments:
246
+ filename: filename
247
+ source: { $$hexBytes: "1122334455" }
248
+ expectError:
249
+ isTimeoutError: true
@@ -0,0 +1,204 @@
1
+ description: "legacy timeouts continue to work if timeoutMS is not set"
2
+
3
+ schemaVersion: "1.0"
4
+
5
+ runOnRequirements:
6
+ - minServerVersion: "4.4"
7
+
8
+ initialData:
9
+ - collectionName: &collectionName coll
10
+ databaseName: &databaseName test
11
+ documents: []
12
+
13
+ tests:
14
+ - description: "socketTimeoutMS is not used to derive a maxTimeMS command field"
15
+ operations:
16
+ - name: createEntities
17
+ object: testRunner
18
+ arguments:
19
+ entities:
20
+ - client:
21
+ id: &client client
22
+ observeEvents:
23
+ - commandStartedEvent
24
+ uriOptions:
25
+ socketTimeoutMS: 50000
26
+ - database:
27
+ id: &database database
28
+ client: *client
29
+ databaseName: *databaseName
30
+ - collection:
31
+ id: &collection collection
32
+ database: *database
33
+ collectionName: *collectionName
34
+ - name: insertOne
35
+ object: *collection
36
+ arguments:
37
+ document: { x: 1 }
38
+ expectEvents:
39
+ - client: *client
40
+ events:
41
+ - commandStartedEvent:
42
+ commandName: insert
43
+ databaseName: *databaseName
44
+ command:
45
+ insert: *collectionName
46
+ maxTimeMS: { $$exists: false }
47
+
48
+ - description: "waitQueueTimeoutMS is not used to derive a maxTimeMS command field"
49
+ operations:
50
+ - name: createEntities
51
+ object: testRunner
52
+ arguments:
53
+ entities:
54
+ - client:
55
+ id: &client client
56
+ observeEvents:
57
+ - commandStartedEvent
58
+ uriOptions:
59
+ waitQueueTimeoutMS: 50000
60
+ - database:
61
+ id: &database database
62
+ client: *client
63
+ databaseName: *databaseName
64
+ - collection:
65
+ id: &collection collection
66
+ database: *database
67
+ collectionName: *collectionName
68
+ - name: insertOne
69
+ object: *collection
70
+ arguments:
71
+ document: { x: 1 }
72
+ expectEvents:
73
+ - client: *client
74
+ events:
75
+ - commandStartedEvent:
76
+ commandName: insert
77
+ databaseName: *databaseName
78
+ command:
79
+ insert: *collectionName
80
+ maxTimeMS: { $$exists: false }
81
+
82
+ - description: "wTimeoutMS is not used to derive a maxTimeMS command field"
83
+ operations:
84
+ - name: createEntities
85
+ object: testRunner
86
+ arguments:
87
+ entities:
88
+ - client:
89
+ id: &client client
90
+ observeEvents:
91
+ - commandStartedEvent
92
+ uriOptions:
93
+ wTimeoutMS: &wTimeoutMS 50000
94
+ - database:
95
+ id: &database database
96
+ client: *client
97
+ databaseName: *databaseName
98
+ - collection:
99
+ id: &collection collection
100
+ database: *database
101
+ collectionName: *collectionName
102
+ - name: insertOne
103
+ object: *collection
104
+ arguments:
105
+ document: { x: 1 }
106
+ expectEvents:
107
+ - client: *client
108
+ events:
109
+ - commandStartedEvent:
110
+ commandName: insert
111
+ databaseName: *databaseName
112
+ command:
113
+ insert: *collectionName
114
+ maxTimeMS: { $$exists: false }
115
+ writeConcern:
116
+ wtimeout: *wTimeoutMS
117
+
118
+ # If the maxTimeMS option is set for a specific command, it should be used as the maxTimeMS command field without any
119
+ # modifications. This is different from timeoutMS because in that case, drivers subtract the target server's min
120
+ # RTT from the remaining timeout to derive a maxTimeMS field.
121
+ - description: "maxTimeMS option is used directly as the maxTimeMS field on a command"
122
+ operations:
123
+ - name: createEntities
124
+ object: testRunner
125
+ arguments:
126
+ entities:
127
+ - client:
128
+ id: &client client
129
+ observeEvents:
130
+ - commandStartedEvent
131
+ - database:
132
+ id: &database database
133
+ client: *client
134
+ databaseName: *databaseName
135
+ - collection:
136
+ id: &collection collection
137
+ database: *database
138
+ collectionName: *collectionName
139
+ - name: estimatedDocumentCount
140
+ object: *collection
141
+ arguments:
142
+ maxTimeMS: &maxTimeMS 50000
143
+ expectEvents:
144
+ - client: *client
145
+ events:
146
+ - commandStartedEvent:
147
+ commandName: count
148
+ databaseName: *databaseName
149
+ command:
150
+ count: *collectionName
151
+ maxTimeMS: *maxTimeMS
152
+
153
+ # Same test as above but with the maxCommitTimeMS option.
154
+ - description: "maxCommitTimeMS option is used directly as the maxTimeMS field on a commitTransaction command"
155
+ runOnRequirements:
156
+ # Note: minServerVersion is specified in top-level runOnRequirements
157
+ - topologies: ["replicaset", "sharded"]
158
+ operations:
159
+ - name: createEntities
160
+ object: testRunner
161
+ arguments:
162
+ entities:
163
+ - client:
164
+ id: &client client
165
+ observeEvents:
166
+ - commandStartedEvent
167
+ - database:
168
+ id: &database database
169
+ client: *client
170
+ databaseName: *databaseName
171
+ - collection:
172
+ id: &collection collection
173
+ database: *database
174
+ collectionName: *collectionName
175
+ - session:
176
+ id: &session session
177
+ client: *client
178
+ sessionOptions:
179
+ defaultTransactionOptions:
180
+ maxCommitTimeMS: &maxCommitTimeMS 1000
181
+ - name: startTransaction
182
+ object: *session
183
+ - name: insertOne
184
+ object: *collection
185
+ arguments:
186
+ document: { _id: 1 }
187
+ session: *session
188
+ - name: commitTransaction
189
+ object: *session
190
+ expectEvents:
191
+ - client: *client
192
+ events:
193
+ - commandStartedEvent:
194
+ commandName: insert
195
+ databaseName: *databaseName
196
+ command:
197
+ insert: *collectionName
198
+ maxTimeMS: { $$exists: false }
199
+ - commandStartedEvent:
200
+ commandName: commitTransaction
201
+ databaseName: admin
202
+ command:
203
+ commitTransaction: 1
204
+ maxTimeMS: *maxCommitTimeMS