mongo 2.19.1 → 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 (356) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +40 -1
  3. data/Rakefile +83 -174
  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/topology/base.rb +16 -0
  13. data/lib/mongo/cluster.rb +41 -5
  14. data/lib/mongo/collection/helpers.rb +1 -1
  15. data/lib/mongo/collection/view/aggregation/behavior.rb +131 -0
  16. data/lib/mongo/collection/view/aggregation.rb +33 -99
  17. data/lib/mongo/collection/view/builder/aggregation.rb +1 -7
  18. data/lib/mongo/collection/view/change_stream.rb +80 -27
  19. data/lib/mongo/collection/view/iterable.rb +92 -60
  20. data/lib/mongo/collection/view/map_reduce.rb +25 -8
  21. data/lib/mongo/collection/view/readable.rb +79 -30
  22. data/lib/mongo/collection/view/writable.rb +109 -48
  23. data/lib/mongo/collection/view.rb +44 -3
  24. data/lib/mongo/collection.rb +185 -26
  25. data/lib/mongo/config.rb +2 -2
  26. data/lib/mongo/crypt/auto_encrypter.rb +4 -6
  27. data/lib/mongo/crypt/binding.rb +4 -4
  28. data/lib/mongo/crypt/context.rb +20 -14
  29. data/lib/mongo/crypt/encryption_io.rb +56 -26
  30. data/lib/mongo/crypt/explicit_encrypter.rb +49 -20
  31. data/lib/mongo/crypt/explicit_encryption_context.rb +17 -11
  32. data/lib/mongo/crypt/kms/azure/credentials_retriever.rb +22 -6
  33. data/lib/mongo/crypt/kms/gcp/credentials_retriever.rb +29 -4
  34. data/lib/mongo/csot_timeout_holder.rb +119 -0
  35. data/lib/mongo/cursor/kill_spec.rb +5 -2
  36. data/lib/mongo/cursor/nontailable.rb +27 -0
  37. data/lib/mongo/cursor.rb +86 -24
  38. data/lib/mongo/cursor_host.rb +82 -0
  39. data/lib/mongo/database/view.rb +81 -14
  40. data/lib/mongo/database.rb +88 -18
  41. data/lib/mongo/error/operation_failure.rb +209 -204
  42. data/lib/mongo/error/server_timeout_error.rb +12 -0
  43. data/lib/mongo/error/socket_timeout_error.rb +3 -1
  44. data/lib/mongo/error/timeout_error.rb +23 -0
  45. data/lib/mongo/error/transactions_not_supported.rb +34 -0
  46. data/lib/mongo/error.rb +3 -0
  47. data/lib/mongo/grid/fs_bucket.rb +48 -9
  48. data/lib/mongo/grid/stream/read.rb +15 -1
  49. data/lib/mongo/grid/stream/write.rb +21 -4
  50. data/lib/mongo/index/view.rb +77 -16
  51. data/lib/mongo/monitoring/event/secure.rb +1 -1
  52. data/lib/mongo/operation/context.rb +40 -2
  53. data/lib/mongo/operation/create_search_indexes/op_msg.rb +31 -0
  54. data/lib/mongo/operation/create_search_indexes.rb +15 -0
  55. data/lib/mongo/operation/delete/op_msg.rb +2 -1
  56. data/lib/mongo/operation/drop_search_index/op_msg.rb +33 -0
  57. data/lib/mongo/operation/drop_search_index.rb +15 -0
  58. data/lib/mongo/operation/find/op_msg.rb +45 -0
  59. data/lib/mongo/operation/get_more/op_msg.rb +33 -0
  60. data/lib/mongo/operation/insert/op_msg.rb +3 -2
  61. data/lib/mongo/operation/insert/result.rb +4 -2
  62. data/lib/mongo/operation/list_collections/result.rb +1 -1
  63. data/lib/mongo/operation/map_reduce/result.rb +1 -1
  64. data/lib/mongo/operation/op_msg_base.rb +3 -1
  65. data/lib/mongo/operation/result.rb +26 -5
  66. data/lib/mongo/operation/shared/executable.rb +55 -28
  67. data/lib/mongo/operation/shared/op_msg_executable.rb +4 -1
  68. data/lib/mongo/operation/shared/response_handling.rb +25 -27
  69. data/lib/mongo/operation/shared/sessions_supported.rb +1 -1
  70. data/lib/mongo/operation/shared/specifiable.rb +7 -0
  71. data/lib/mongo/operation/shared/timed.rb +52 -0
  72. data/lib/mongo/operation/shared/write.rb +4 -1
  73. data/lib/mongo/operation/update/op_msg.rb +2 -1
  74. data/lib/mongo/operation/update_search_index/op_msg.rb +34 -0
  75. data/lib/mongo/operation/update_search_index.rb +15 -0
  76. data/lib/mongo/operation.rb +4 -0
  77. data/lib/mongo/protocol/message.rb +1 -4
  78. data/lib/mongo/protocol/msg.rb +2 -2
  79. data/lib/mongo/retryable/base_worker.rb +28 -3
  80. data/lib/mongo/retryable/read_worker.rb +78 -36
  81. data/lib/mongo/retryable/write_worker.rb +59 -25
  82. data/lib/mongo/retryable.rb +8 -2
  83. data/lib/mongo/search_index/view.rb +232 -0
  84. data/lib/mongo/server/app_metadata/environment.rb +64 -9
  85. data/lib/mongo/server/app_metadata.rb +5 -4
  86. data/lib/mongo/server/connection.rb +11 -5
  87. data/lib/mongo/server/connection_base.rb +22 -2
  88. data/lib/mongo/server/connection_pool.rb +32 -14
  89. data/lib/mongo/server/description/features.rb +2 -1
  90. data/lib/mongo/server/description.rb +18 -5
  91. data/lib/mongo/server/monitor.rb +7 -4
  92. data/lib/mongo/server/pending_connection.rb +25 -8
  93. data/lib/mongo/server/{round_trip_time_averager.rb → round_trip_time_calculator.rb} +25 -7
  94. data/lib/mongo/server.rb +11 -6
  95. data/lib/mongo/server_selector/base.rb +54 -12
  96. data/lib/mongo/session/server_session/dirtyable.rb +52 -0
  97. data/lib/mongo/session/server_session.rb +3 -0
  98. data/lib/mongo/session/session_pool.rb +12 -18
  99. data/lib/mongo/session.rb +110 -9
  100. data/lib/mongo/socket/ssl.rb +131 -18
  101. data/lib/mongo/socket/tcp.rb +40 -6
  102. data/lib/mongo/socket.rb +154 -25
  103. data/lib/mongo/uri/options_mapper.rb +1 -0
  104. data/lib/mongo/uri.rb +0 -4
  105. data/lib/mongo/version.rb +1 -5
  106. data/lib/mongo.rb +2 -0
  107. data/mongo.gemspec +9 -18
  108. data/spec/atlas/atlas_connectivity_spec.rb +9 -9
  109. data/spec/atlas/operations_spec.rb +5 -5
  110. data/spec/faas/ruby-sam-app/Gemfile +9 -0
  111. data/spec/faas/ruby-sam-app/mongodb/Gemfile +4 -0
  112. data/spec/faas/ruby-sam-app/mongodb/app.rb +149 -0
  113. data/spec/faas/ruby-sam-app/template.yaml +48 -0
  114. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +2 -1
  115. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +494 -487
  116. data/spec/integration/client_side_encryption/corpus_spec.rb +10 -2
  117. data/spec/integration/client_side_encryption/on_demand_aws_credentials_spec.rb +1 -1
  118. data/spec/integration/client_side_encryption/range_explicit_encryption_prose_spec.rb +67 -20
  119. data/spec/integration/client_side_operations_timeout/encryption_prose_spec.rb +131 -0
  120. data/spec/integration/connection_pool_populator_spec.rb +2 -0
  121. data/spec/integration/cursor_pinning_spec.rb +15 -60
  122. data/spec/integration/cursor_reaping_spec.rb +1 -1
  123. data/spec/integration/docs_examples_spec.rb +1 -1
  124. data/spec/integration/find_options_spec.rb +227 -0
  125. data/spec/integration/operation_failure_code_spec.rb +1 -1
  126. data/spec/integration/operation_failure_message_spec.rb +3 -3
  127. data/spec/integration/retryable_errors_spec.rb +2 -2
  128. data/spec/integration/retryable_reads_errors_spec.rb +196 -31
  129. data/spec/integration/retryable_writes_errors_spec.rb +156 -0
  130. data/spec/integration/sdam_error_handling_spec.rb +4 -1
  131. data/spec/integration/search_indexes_prose_spec.rb +172 -0
  132. data/spec/integration/server_spec.rb +4 -3
  133. data/spec/integration/transactions_api_examples_spec.rb +2 -0
  134. data/spec/kerberos/kerberos_spec.rb +4 -0
  135. data/spec/lite_spec_helper.rb +34 -20
  136. data/spec/mongo/auth/user/view_spec.rb +1 -1
  137. data/spec/mongo/caching_cursor_spec.rb +1 -1
  138. data/spec/mongo/client_encryption_spec.rb +1 -0
  139. data/spec/mongo/client_spec.rb +158 -4
  140. data/spec/mongo/cluster_spec.rb +36 -0
  141. data/spec/mongo/collection/view/aggregation_spec.rb +20 -40
  142. data/spec/mongo/collection/view/change_stream_spec.rb +3 -3
  143. data/spec/mongo/collection/view/explainable_spec.rb +2 -0
  144. data/spec/mongo/collection_crud_spec.rb +2 -1
  145. data/spec/mongo/collection_spec.rb +5 -6
  146. data/spec/mongo/crypt/auto_encrypter_spec.rb +14 -12
  147. data/spec/mongo/crypt/data_key_context_spec.rb +3 -1
  148. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +2 -2
  149. data/spec/mongo/crypt/handle_spec.rb +1 -1
  150. data/spec/mongo/cursor_spec.rb +26 -9
  151. data/spec/mongo/error/operation_failure_heavy_spec.rb +2 -2
  152. data/spec/mongo/operation/context_spec.rb +79 -0
  153. data/spec/mongo/operation/create/op_msg_spec.rb +106 -110
  154. data/spec/mongo/operation/delete/op_msg_spec.rb +6 -5
  155. data/spec/mongo/operation/find/op_msg_spec.rb +66 -0
  156. data/spec/mongo/operation/get_more/op_msg_spec.rb +65 -0
  157. data/spec/mongo/operation/insert/op_msg_spec.rb +128 -131
  158. data/spec/mongo/operation/insert_spec.rb +1 -1
  159. data/spec/mongo/operation/shared/csot/examples.rb +113 -0
  160. data/spec/mongo/query_cache_spec.rb +243 -225
  161. data/spec/mongo/retryable/write_worker_spec.rb +39 -0
  162. data/spec/mongo/retryable_spec.rb +1 -0
  163. data/spec/mongo/server/app_metadata/environment_spec.rb +135 -0
  164. data/spec/mongo/server/app_metadata_spec.rb +12 -2
  165. data/spec/mongo/server/connection_spec.rb +26 -0
  166. data/spec/mongo/server/round_trip_time_calculator_spec.rb +120 -0
  167. data/spec/mongo/session/session_pool_spec.rb +1 -16
  168. data/spec/mongo/session_transaction_spec.rb +15 -0
  169. data/spec/mongo/socket/ssl_spec.rb +0 -10
  170. data/spec/mongo/uri_spec.rb +0 -9
  171. data/spec/runners/change_streams/test.rb +2 -2
  172. data/spec/runners/crud/operation.rb +1 -1
  173. data/spec/runners/crud/test.rb +0 -8
  174. data/spec/runners/crud/verifier.rb +3 -1
  175. data/spec/runners/crud.rb +1 -1
  176. data/spec/runners/transactions/operation.rb +4 -6
  177. data/spec/runners/transactions/test.rb +12 -3
  178. data/spec/runners/unified/ambiguous_operations.rb +13 -0
  179. data/spec/runners/unified/assertions.rb +20 -3
  180. data/spec/runners/unified/change_stream_operations.rb +14 -24
  181. data/spec/runners/unified/crud_operations.rb +82 -47
  182. data/spec/runners/unified/ddl_operations.rb +38 -7
  183. data/spec/runners/unified/grid_fs_operations.rb +37 -2
  184. data/spec/runners/unified/search_index_operations.rb +63 -0
  185. data/spec/runners/unified/support_operations.rb +46 -9
  186. data/spec/runners/unified/test.rb +33 -12
  187. data/spec/runners/unified.rb +1 -1
  188. data/spec/solo/clean_exit_spec.rb +2 -0
  189. data/spec/spec_helper.rb +1 -1
  190. data/spec/spec_tests/client_side_operations_timeout_spec.rb +15 -0
  191. data/spec/spec_tests/data/change_streams_unified/change-streams-clusterTime.yml +3 -1
  192. data/spec/spec_tests/data/change_streams_unified/change-streams-disambiguatedPaths.yml +3 -1
  193. data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +3 -1
  194. data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +1 -1
  195. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1 -1
  196. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1 -1
  197. data/spec/spec_tests/data/change_streams_unified/change-streams-showExpandedEvents.yml +1 -1
  198. data/spec/spec_tests/data/client_side_encryption/badQueries.yml +2 -1
  199. data/spec/spec_tests/data/client_side_encryption/explain.yml +2 -2
  200. data/spec/spec_tests/data/client_side_encryption/fle2v2-BypassQueryAnalysis.yml +1 -0
  201. data/spec/spec_tests/data/client_side_encryption/fle2v2-Compact.yml +1 -0
  202. data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection.yml +1 -0
  203. data/spec/spec_tests/data/client_side_encryption/fle2v2-DecryptExistingData.yml +1 -0
  204. data/spec/spec_tests/data/client_side_encryption/fle2v2-Delete.yml +1 -0
  205. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-EncryptedFieldsMap.yml +1 -0
  206. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-jsonSchema.yml +1 -0
  207. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFieldsMap-defaults.yml +1 -0
  208. data/spec/spec_tests/data/client_side_encryption/fle2v2-FindOneAndUpdate.yml +1 -0
  209. data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Indexed.yml +1 -0
  210. data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Unindexed.yml +1 -0
  211. data/spec/spec_tests/data/client_side_encryption/fle2v2-MissingKey.yml +1 -0
  212. data/spec/spec_tests/data/client_side_encryption/fle2v2-NoEncryption.yml +1 -0
  213. data/spec/spec_tests/data/client_side_encryption/fle2v2-Update.yml +1 -0
  214. data/spec/spec_tests/data/client_side_encryption/fle2v2-validatorAndPartialFieldExpression.yml +2 -1
  215. data/spec/spec_tests/data/client_side_encryption/timeoutMS.yml +67 -0
  216. data/spec/spec_tests/data/client_side_operations_timeout/bulkWrite.yml +87 -0
  217. data/spec/spec_tests/data/client_side_operations_timeout/change-streams.yml +358 -0
  218. data/spec/spec_tests/data/client_side_operations_timeout/close-cursors.yml +129 -0
  219. data/spec/spec_tests/data/client_side_operations_timeout/command-execution.yml +250 -0
  220. data/spec/spec_tests/data/client_side_operations_timeout/convenient-transactions.yml +113 -0
  221. data/spec/spec_tests/data/client_side_operations_timeout/cursors.yml +70 -0
  222. data/spec/spec_tests/data/client_side_operations_timeout/deprecated-options.yml +3982 -0
  223. data/spec/spec_tests/data/client_side_operations_timeout/error-transformations.yml +96 -0
  224. data/spec/spec_tests/data/client_side_operations_timeout/global-timeoutMS.yml +3236 -0
  225. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-advanced.yml +207 -0
  226. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-delete.yml +152 -0
  227. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-download.yml +182 -0
  228. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-find.yml +100 -0
  229. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-upload.yml +249 -0
  230. data/spec/spec_tests/data/client_side_operations_timeout/legacy-timeouts.yml +204 -0
  231. data/spec/spec_tests/data/client_side_operations_timeout/non-tailable-cursors.yml +307 -0
  232. data/spec/spec_tests/data/client_side_operations_timeout/override-collection-timeoutMS.yml +1877 -0
  233. data/spec/spec_tests/data/client_side_operations_timeout/override-operation-timeoutMS.yml +1918 -0
  234. data/spec/spec_tests/data/client_side_operations_timeout/retryability-legacy-timeouts.yml +1676 -0
  235. data/spec/spec_tests/data/client_side_operations_timeout/retryability-timeoutMS.yml +2824 -0
  236. data/spec/spec_tests/data/client_side_operations_timeout/sessions-inherit-timeoutMS.yml +168 -0
  237. data/spec/spec_tests/data/client_side_operations_timeout/sessions-override-operation-timeoutMS.yml +171 -0
  238. data/spec/spec_tests/data/client_side_operations_timeout/sessions-override-timeoutMS.yml +168 -0
  239. data/spec/spec_tests/data/client_side_operations_timeout/tailable-awaitData.yml +247 -0
  240. data/spec/spec_tests/data/client_side_operations_timeout/tailable-non-awaitData.yml +181 -0
  241. data/spec/spec_tests/data/connection_string/invalid-uris.yml +0 -10
  242. data/spec/spec_tests/data/connection_string/valid-options.yml +13 -0
  243. data/spec/spec_tests/data/crud_unified/aggregate-write-readPreference.yml +6 -0
  244. data/spec/spec_tests/data/crud_unified/db-aggregate-write-readPreference.yml +6 -0
  245. data/spec/spec_tests/data/crud_unified/find-test-all-options.yml +377 -0
  246. data/spec/spec_tests/data/index_management/createSearchIndex.yml +64 -0
  247. data/spec/spec_tests/data/index_management/createSearchIndexes.yml +86 -0
  248. data/spec/spec_tests/data/index_management/dropSearchIndex.yml +43 -0
  249. data/spec/spec_tests/data/index_management/listSearchIndexes.yml +91 -0
  250. data/spec/spec_tests/data/index_management/updateSearchIndex.yml +46 -0
  251. data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +3 -6
  252. data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +3 -6
  253. data/spec/spec_tests/data/run_command_unified/runCommand.yml +319 -0
  254. data/spec/spec_tests/data/sessions_unified/driver-sessions-dirty-session-errors.yml +351 -0
  255. data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +1 -1
  256. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +7 -7
  257. data/spec/spec_tests/data/unified/valid-pass/poc-sessions.yml +3 -4
  258. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-convenient-api.yml +1 -1
  259. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-mongos-pin-auto.yml +1 -1
  260. data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +3 -3
  261. data/spec/spec_tests/index_management_unified_spec.rb +13 -0
  262. data/spec/spec_tests/run_command_unified_spec.rb +13 -0
  263. data/spec/spec_tests/sdam_unified_spec.rb +2 -0
  264. data/spec/spec_tests/server_selection_rtt_spec.rb +6 -6
  265. data/spec/spec_tests/transactions_unified_spec.rb +2 -1
  266. data/spec/support/certificates/atlas-ocsp-ca.crt +89 -79
  267. data/spec/support/certificates/atlas-ocsp.crt +117 -122
  268. data/spec/support/certificates/retrieve-atlas-cert +1 -1
  269. data/spec/support/cluster_tools.rb +3 -3
  270. data/spec/support/common_shortcuts.rb +2 -2
  271. data/spec/support/constraints.rb +6 -0
  272. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Date.json +1 -1
  273. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalNoPrecision.json +1 -1
  274. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalPrecision.json +1 -1
  275. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoubleNoPrecision.json +1 -1
  276. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoublePrecision.json +1 -1
  277. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Int.json +1 -1
  278. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Long.json +1 -1
  279. data/spec/support/ocsp +1 -1
  280. data/spec/support/recording_logger.rb +27 -0
  281. data/spec/support/shared/session.rb +2 -2
  282. data/spec/support/spec_config.rb +5 -0
  283. data/spec/support/spec_setup.rb +2 -2
  284. data/spec/support/utils.rb +3 -1
  285. metadata +1329 -1368
  286. checksums.yaml.gz.sig +0 -0
  287. data/spec/mongo/server/round_trip_time_averager_spec.rb +0 -48
  288. data/spec/shared/LICENSE +0 -20
  289. data/spec/shared/bin/get-mongodb-download-url +0 -17
  290. data/spec/shared/bin/s3-copy +0 -45
  291. data/spec/shared/bin/s3-upload +0 -69
  292. data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
  293. data/spec/shared/lib/mrss/cluster_config.rb +0 -231
  294. data/spec/shared/lib/mrss/constraints.rb +0 -378
  295. data/spec/shared/lib/mrss/docker_runner.rb +0 -295
  296. data/spec/shared/lib/mrss/eg_config_utils.rb +0 -51
  297. data/spec/shared/lib/mrss/event_subscriber.rb +0 -210
  298. data/spec/shared/lib/mrss/lite_constraints.rb +0 -238
  299. data/spec/shared/lib/mrss/server_version_registry.rb +0 -113
  300. data/spec/shared/lib/mrss/session_registry.rb +0 -69
  301. data/spec/shared/lib/mrss/session_registry_legacy.rb +0 -60
  302. data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
  303. data/spec/shared/lib/mrss/utils.rb +0 -37
  304. data/spec/shared/share/Dockerfile.erb +0 -330
  305. data/spec/shared/share/haproxy-1.conf +0 -16
  306. data/spec/shared/share/haproxy-2.conf +0 -17
  307. data/spec/shared/shlib/config.sh +0 -27
  308. data/spec/shared/shlib/distro.sh +0 -74
  309. data/spec/shared/shlib/server.sh +0 -416
  310. data/spec/shared/shlib/set_env.sh +0 -169
  311. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Aggregate.yml +0 -241
  312. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Correctness.yml +0 -422
  313. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Delete.yml +0 -182
  314. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-FindOneAndUpdate.yml +0 -239
  315. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-InsertFind.yml +0 -235
  316. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Update.yml +0 -252
  317. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Aggregate.yml +0 -1687
  318. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Correctness.yml +0 -293
  319. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Delete.yml +0 -905
  320. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-FindOneAndUpdate.yml +0 -1684
  321. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-InsertFind.yml +0 -1680
  322. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Update.yml +0 -1697
  323. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Aggregate.yml +0 -329
  324. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Correctness.yml +0 -424
  325. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Delete.yml +0 -226
  326. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-FindOneAndUpdate.yml +0 -327
  327. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-InsertFind.yml +0 -319
  328. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Update.yml +0 -336
  329. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Aggregate.yml +0 -913
  330. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Correctness.yml +0 -292
  331. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Delete.yml +0 -518
  332. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-FindOneAndUpdate.yml +0 -911
  333. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-InsertFind.yml +0 -907
  334. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Update.yml +0 -924
  335. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Aggregate.yml +0 -325
  336. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Correctness.yml +0 -424
  337. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Delete.yml +0 -224
  338. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-FindOneAndUpdate.yml +0 -323
  339. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-InsertFind.yml +0 -319
  340. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Update.yml +0 -338
  341. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Aggregate.yml +0 -241
  342. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Correctness.yml +0 -423
  343. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Delete.yml +0 -182
  344. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-FindOneAndUpdate.yml +0 -239
  345. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-InsertFind.yml +0 -235
  346. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Update.yml +0 -254
  347. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Aggregate.yml +0 -241
  348. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Correctness.yml +0 -422
  349. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Delete.yml +0 -182
  350. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-FindOneAndUpdate.yml +0 -239
  351. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-InsertFind.yml +0 -235
  352. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Update.yml +0 -254
  353. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-WrongType.yml +0 -43
  354. data/spec/spec_tests/data/cmap/pool-clear-interrupt-immediately.yml +0 -49
  355. data.tar.gz.sig +0 -0
  356. metadata.gz.sig +0 -2
@@ -63,10 +63,10 @@ module Mongo
63
63
  :client,
64
64
  :cluster,
65
65
  :database,
66
+ :nro_write_with_retry,
66
67
  :read_with_retry,
67
68
  :read_with_retry_cursor,
68
69
  :write_with_retry,
69
- :nro_write_with_retry,
70
70
  :write_concern_with_session
71
71
 
72
72
  # Delegate to the cluster for the next primary.
@@ -74,6 +74,12 @@ module Mongo
74
74
 
75
75
  alias :selector :filter
76
76
 
77
+ # @return [ Integer | nil | The timeout_ms value that was passed as an
78
+ # option to the view.
79
+ #
80
+ # @api private
81
+ attr_reader :operation_timeout_ms
82
+
77
83
  # Compare two +View+ objects.
78
84
  #
79
85
  # @example Compare the view with another object.
@@ -127,6 +133,7 @@ module Mongo
127
133
  # return in each response from MongoDB.
128
134
  # @option options [ Hash ] :collation The collation to use.
129
135
  # @option options [ String ] :comment Associate a comment with the query.
136
+ # @option options [ :tailable, :tailable_await ] :cursor_type The type of cursor to use.
130
137
  # @option options [ Hash ] :explain Execute an explain with the provided
131
138
  # explain options (known options are :verbose and :verbosity) rather
132
139
  # than a find.
@@ -150,15 +157,26 @@ module Mongo
150
157
  # document more than once. Deprecated as of MongoDB server version 4.0.
151
158
  # @option options [ Hash ] :sort The key and direction pairs used to sort
152
159
  # the results.
160
+ # @option options [ :cursor_lifetime | :iteration ] :timeout_mode How to interpret
161
+ # :timeout_ms (whether it applies to the lifetime of the cursor, or per
162
+ # iteration).
163
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
164
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
165
+ # The default value is unset which means the value is inherited from
166
+ # the collection or the database or the client.
153
167
  #
154
168
  # @since 2.0.0
155
169
  def initialize(collection, filter = {}, options = {})
156
170
  validate_doc!(filter)
157
- @collection = collection
158
171
 
159
172
  filter = BSON::Document.new(filter)
160
173
  options = BSON::Document.new(options)
161
174
 
175
+ @collection = collection
176
+ @operation_timeout_ms = options.delete(:timeout_ms)
177
+
178
+ validate_timeout_mode!(options)
179
+
162
180
  # This is when users pass $query in filter and other modifiers
163
181
  # alongside?
164
182
  query = filter.delete(:$query)
@@ -170,6 +188,14 @@ module Mongo
170
188
  @options = Operation::Find::Builder::Modifiers.map_driver_options(modifiers).merge!(options).freeze
171
189
  end
172
190
 
191
+ # The timeout_ms value to use for this operation; either specified as an
192
+ # option to the view, or inherited from the collection.
193
+ #
194
+ # @return [ Integer | nil ] the timeout_ms for this operation
195
+ def timeout_ms
196
+ operation_timeout_ms || collection.timeout_ms
197
+ end
198
+
173
199
  # Get a human-readable string representation of +View+.
174
200
  #
175
201
  # @example Get the inspection.
@@ -195,6 +221,20 @@ module Mongo
195
221
  WriteConcern.get(options[:write_concern] || options[:write] || collection.write_concern)
196
222
  end
197
223
 
224
+ # @return [ Hash ] timeout_ms value set on the operation level (if any),
225
+ # and/or timeout_ms that is set on collection/database/client level (if any).
226
+ #
227
+ # @api private
228
+ def operation_timeouts(opts = {})
229
+ {}.tap do |result|
230
+ if opts[:timeout_ms] || operation_timeout_ms
231
+ result[:operation_timeout_ms] = opts[:timeout_ms] || operation_timeout_ms
232
+ else
233
+ result[:inherited_timeout_ms] = collection.timeout_ms
234
+ end
235
+ end
236
+ end
237
+
198
238
  private
199
239
 
200
240
  def initialize_copy(other)
@@ -204,13 +244,14 @@ module Mongo
204
244
  end
205
245
 
206
246
  def new(options)
247
+ options = options.merge(timeout_ms: operation_timeout_ms) if operation_timeout_ms
207
248
  View.new(collection, filter, options)
208
249
  end
209
250
 
210
251
  def view; self; end
211
252
 
212
253
  def with_session(opts = {}, &block)
213
- client.send(:with_session, @options.merge(opts), &block)
254
+ client.with_session(@options.merge(opts), &block)
214
255
  end
215
256
  end
216
257
  end
@@ -134,8 +134,12 @@ module Mongo
134
134
  # and *:nearest*.
135
135
  # - *:tag_sets* -- an array of hashes.
136
136
  # - *:local_threshold*.
137
- # @option opts [ Session ] :session The session to use for the operation.
138
- # @option opts [ Integer ] :size The size of the capped collection.
137
+ # @option options [ Session ] :session The session to use for the operation.
138
+ # @option options [ Integer ] :size The size of the capped collection.
139
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
140
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
141
+ # The default value is unset which means the value is inherited from
142
+ # the database or the client.
139
143
  # @option opts [ Hash ] :time_series Create a time-series collection.
140
144
  # The hash may have the following items:
141
145
  # - *:timeField* -- The name of the field which contains the date in each
@@ -163,6 +167,7 @@ module Mongo
163
167
  @database = database
164
168
  @name = name.to_s.freeze
165
169
  @options = options.dup
170
+ @timeout_ms = options.delete(:timeout_ms)
166
171
  =begin WriteConcern object support
167
172
  if @options[:write_concern].is_a?(WriteConcern::Base)
168
173
  # Cache the instance so that we do not needlessly reconstruct it.
@@ -339,7 +344,9 @@ module Mongo
339
344
  # inserted or updated documents where the clustered index key value
340
345
  # matches an existing value in the index.
341
346
  # - *:name* -- Optional. A name that uniquely identifies the clustered index.
342
- # @option opts [ Hash ] :collation The collation to use.
347
+ # @option opts [ Hash ] :collation The collation to use when creating the
348
+ # collection. This option will not be sent to the server when calling
349
+ # collection methods.
343
350
  # @option opts [ Hash ] :encrypted_fields Hash describing encrypted fields
344
351
  # for queryable encryption.
345
352
  # @option opts [ Integer ] :expire_after Number indicating
@@ -399,7 +406,10 @@ module Mongo
399
406
  self.write_concern
400
407
  end
401
408
 
402
- context = Operation::Context.new(client: client, session: session)
409
+ context = Operation::Context.new(
410
+ client: client,
411
+ session: session
412
+ )
403
413
  maybe_create_qe_collections(opts[:encrypted_fields], client, session) do |encrypted_fields|
404
414
  Operation::Create.new(
405
415
  selector: operation,
@@ -411,7 +421,10 @@ module Mongo
411
421
  collation: options[:collation] || options['collation'],
412
422
  encrypted_fields: encrypted_fields,
413
423
  validator: options[:validator],
414
- ).execute(next_primary(nil, session), context: context)
424
+ ).execute(
425
+ next_primary(nil, session),
426
+ context: context
427
+ )
415
428
  end
416
429
  end
417
430
  end
@@ -430,12 +443,16 @@ module Mongo
430
443
  # @option opts [ Hash ] :write_concern The write concern options.
431
444
  # @option opts [ Hash | nil ] :encrypted_fields Encrypted fields hash that
432
445
  # was provided to `create` collection helper.
446
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
447
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
448
+ # The default value is unset which means the value is inherited from
449
+ # the collection or the database or the client.
433
450
  #
434
451
  # @return [ Result ] The result of the command.
435
452
  #
436
453
  # @since 2.0.0
437
454
  def drop(opts = {})
438
- client.send(:with_session, opts) do |session|
455
+ client.with_session(opts) do |session|
439
456
  maybe_drop_emm_collections(opts[:encrypted_fields], client, session) do
440
457
  temp_write_concern = write_concern
441
458
  write_concern = if opts[:write_concern]
@@ -443,7 +460,11 @@ module Mongo
443
460
  else
444
461
  temp_write_concern
445
462
  end
446
- context = Operation::Context.new(client: client, session: session)
463
+ context = Operation::Context.new(
464
+ client: client,
465
+ session: session,
466
+ operation_timeouts: operation_timeouts(opts)
467
+ )
447
468
  operation = Operation::Drop.new({
448
469
  selector: { :drop => name },
449
470
  db_name: database.name,
@@ -479,8 +500,9 @@ module Mongo
479
500
  # this command.
480
501
  # @option options [ :tailable, :tailable_await ] :cursor_type The type of cursor to use.
481
502
  # @option options [ Integer ] :limit The max number of docs to return from the query.
482
- # @option options [ Integer ] :max_time_ms
483
- # The maximum amount of time to allow the query to run, in milliseconds.
503
+ # @option options [ Integer ] :max_time_ms The maximum amount of time to
504
+ # allow the query to run, in milliseconds. This option is deprecated, use
505
+ # :timeout_ms instead.
484
506
  # @option options [ Hash ] :modifiers A document containing meta-operators modifying the
485
507
  # output or behavior of a query.
486
508
  # @option options [ true | false ] :no_cursor_timeout The server normally times out idle
@@ -494,6 +516,13 @@ module Mongo
494
516
  # @option options [ Integer ] :skip The number of docs to skip before returning results.
495
517
  # @option options [ Hash ] :sort The key and direction pairs by which the result set
496
518
  # will be sorted.
519
+ # @option options [ :cursor_lifetime | :iteration ] :timeout_mode How to interpret
520
+ # :timeout_ms (whether it applies to the lifetime of the cursor, or per
521
+ # iteration).
522
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
523
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
524
+ # The default value is unset which means the value is inherited from
525
+ # the collection or the database or the client.
497
526
  # @option options [ Hash ] :let Mapping of variables to use in the command.
498
527
  # See the server documentation for details.
499
528
  #
@@ -524,13 +553,14 @@ module Mongo
524
553
  # @option options [ String ] :hint The index to use for the aggregation.
525
554
  # @option options [ Hash ] :let Mapping of variables to use in the pipeline.
526
555
  # See the server documentation for details.
527
- # @option options [ Integer ] :max_time_ms The maximum amount of time in
528
- # milliseconds to allow the aggregation to run.
529
- # @option options [ true | false ] :use_cursor Indicates whether the command
530
- # will request that the server provide results using a cursor. Note that
531
- # as of server version 3.6, aggregations always provide results using a
532
- # cursor and this option is therefore not valid.
556
+ # @option options [ Integer ] :max_time_ms The maximum amount of time to
557
+ # allow the query to run, in milliseconds. This option is deprecated, use
558
+ # :timeout_ms instead.
533
559
  # @option options [ Session ] :session The session to use.
560
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
561
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
562
+ # The default value is unset which means the value is inherited from
563
+ # the collection or the database or the client.
534
564
  #
535
565
  # @return [ View::Aggregation ] The aggregation object.
536
566
  #
@@ -598,6 +628,13 @@ module Mongo
598
628
  # events included with this flag set are: createIndexes, dropIndexes,
599
629
  # modify, create, shardCollection, reshardCollection,
600
630
  # refineCollectionShardKey.
631
+ # @option options [ :cursor_lifetime | :iteration ] :timeout_mode How to interpret
632
+ # :timeout_ms (whether it applies to the lifetime of the cursor, or per
633
+ # iteration).
634
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
635
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
636
+ # The default value is unset which means the value is inherited from
637
+ # the collection or the database or the client.
601
638
  #
602
639
  # @note A change stream only allows 'majority' read concern.
603
640
  # @note This helper method is preferable to running a raw aggregation with
@@ -608,7 +645,7 @@ module Mongo
608
645
  # @since 2.5.0
609
646
  def watch(pipeline = [], options = {})
610
647
  view_options = options.dup
611
- view_options[:await_data] = true if options[:max_await_time_ms]
648
+ view_options[:cursor_type] = :tailable_await if options[:max_await_time_ms]
612
649
  View::ChangeStream.new(View.new(self, {}, view_options), pipeline, nil, options)
613
650
  end
614
651
 
@@ -622,13 +659,19 @@ module Mongo
622
659
  #
623
660
  # @option options [ Hash ] :hint The index to use.
624
661
  # @option options [ Integer ] :limit The maximum number of documents to count.
625
- # @option options [ Integer ] :max_time_ms The maximum amount of time to allow the command to run.
662
+ # @option options [ Integer ] :max_time_ms The maximum amount of time to
663
+ # allow the query to run, in milliseconds. This option is deprecated, use
664
+ # :timeout_ms instead.
626
665
  # @option options [ Integer ] :skip The number of documents to skip before counting.
627
666
  # @option options [ Hash ] :read The read preference options.
628
667
  # @option options [ Hash ] :collation The collation to use.
629
668
  # @option options [ Session ] :session The session to use.
630
669
  # @option options [ Object ] :comment A user-provided
631
670
  # comment to attach to this command.
671
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
672
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
673
+ # The default value is unset which means the value is inherited from
674
+ # the collection or the database or the client.
632
675
  #
633
676
  # @return [ Integer ] The document count.
634
677
  #
@@ -665,6 +708,10 @@ module Mongo
665
708
  # @option options [ Session ] :session The session to use.
666
709
  # @option options [ Object ] :comment A user-provided
667
710
  # comment to attach to this command.
711
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
712
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
713
+ # The default value is unset which means the value is inherited from
714
+ # the collection or the database or the client.
668
715
  #
669
716
  # @return [ Integer ] The document count.
670
717
  #
@@ -686,6 +733,10 @@ module Mongo
686
733
  # @option options [ Hash ] :read The read preference options.
687
734
  # @option options [ Object ] :comment A user-provided
688
735
  # comment to attach to this command.
736
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
737
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
738
+ # The default value is unset which means the value is inherited from
739
+ # the collection or the database or the client.
689
740
  #
690
741
  # @return [ Integer ] The document count.
691
742
  #
@@ -703,10 +754,16 @@ module Mongo
703
754
  # @param [ Hash ] filter The documents from which to retrieve the distinct values.
704
755
  # @param [ Hash ] options The distinct command options.
705
756
  #
706
- # @option options [ Integer ] :max_time_ms The maximum amount of time to allow the command to run.
757
+ # @option options [ Integer ] :max_time_ms The maximum amount of time to
758
+ # allow the query to run, in milliseconds. This option is deprecated, use
759
+ # :timeout_ms instead.
707
760
  # @option options [ Hash ] :read The read preference options.
708
761
  # @option options [ Hash ] :collation The collation to use.
709
762
  # @option options [ Session ] :session The session to use.
763
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
764
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
765
+ # The default value is unset which means the value is inherited from
766
+ # the collection or the database or the client.
710
767
  #
711
768
  # @return [ Array<Object> ] The list of distinct values.
712
769
  #
@@ -725,13 +782,35 @@ module Mongo
725
782
  #
726
783
  # @option options [ Session ] :session The session to use.
727
784
  #
728
- # @return [ View::Index ] The index view.
785
+ # @return [ Index::View ] The index view.
729
786
  #
730
787
  # @since 2.0.0
731
788
  def indexes(options = {})
732
789
  Index::View.new(self, options)
733
790
  end
734
791
 
792
+ # Get a view of all search indexes for this collection. Can be iterated or
793
+ # operated on directly. If id or name are given, the iterator will return
794
+ # only the indicated index. For all other operations, id and name are
795
+ # ignored.
796
+ #
797
+ # @note Only one of id or name may be given; it is an error to specify both,
798
+ # although both may be omitted safely.
799
+ #
800
+ # @param [ Hash ] options The options to use to configure the view.
801
+ #
802
+ # @option options [ String ] :id The id of the specific index to query (optional)
803
+ # @option options [ String ] :name The name of the specific index to query (optional)
804
+ # @option options [ Hash ] :aggregate The options hash to pass to the
805
+ # aggregate command (optional)
806
+ #
807
+ # @return [ SearchIndex::View ] The search index view.
808
+ #
809
+ # @since 2.0.0
810
+ def search_indexes(options = {})
811
+ SearchIndex::View.new(self, options)
812
+ end
813
+
735
814
  # Get a pretty printed string inspection for the collection.
736
815
  #
737
816
  # @example Inspect the collection.
@@ -757,6 +836,10 @@ module Mongo
757
836
  # @option opts [ Object ] :comment A user-provided comment to attach to
758
837
  # this command.
759
838
  # @option opts [ Session ] :session The session to use for the operation.
839
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
840
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
841
+ # The default value is unset which means the value is inherited from
842
+ # the collection or the database or the client.
760
843
  # @option opts [ Hash ] :write_concern The write concern options.
761
844
  # Can be :w => Integer, :fsync => Boolean, :j => Boolean.
762
845
  #
@@ -766,7 +849,7 @@ module Mongo
766
849
  def insert_one(document, opts = {})
767
850
  QueryCache.clear_namespace(namespace)
768
851
 
769
- client.send(:with_session, opts) do |session|
852
+ client.with_session(opts) do |session|
770
853
  write_concern = if opts[:write_concern]
771
854
  WriteConcern.get(opts[:write_concern])
772
855
  else
@@ -777,7 +860,11 @@ module Mongo
777
860
  raise ArgumentError, "Document to be inserted cannot be nil"
778
861
  end
779
862
 
780
- context = Operation::Context.new(client: client, session: session)
863
+ context = Operation::Context.new(
864
+ client: client,
865
+ session: session,
866
+ operation_timeouts: operation_timeouts(opts)
867
+ )
781
868
  write_with_retry(write_concern, context: context) do |connection, txn_num, context|
782
869
  Operation::Insert.new(
783
870
  :documents => [ document ],
@@ -810,6 +897,10 @@ module Mongo
810
897
  # @option options [ true | false ] :ordered Whether the operations
811
898
  # should be executed in order.
812
899
  # @option options [ Session ] :session The session to use for the operation.
900
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
901
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
902
+ # The default value is unset which means the value is inherited from
903
+ # the collection or the database or the client.
813
904
  # @option options [ Hash ] :write_concern The write concern options.
814
905
  # Can be :w => Integer, :fsync => Boolean, :j => Boolean.
815
906
  #
@@ -838,6 +929,10 @@ module Mongo
838
929
  # @option options [ true | false ] :bypass_document_validation Whether or
839
930
  # not to skip document level validation.
840
931
  # @option options [ Session ] :session The session to use for the set of operations.
932
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
933
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
934
+ # The default value is unset which means the value is inherited from
935
+ # the collection or the database or the client.
841
936
  # @option options [ Hash ] :let Mapping of variables to use in the command.
842
937
  # See the server documentation for details.
843
938
  #
@@ -860,6 +955,10 @@ module Mongo
860
955
  # @option options [ Session ] :session The session to use.
861
956
  # @option options [ Hash | String ] :hint The index to use for this operation.
862
957
  # May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
958
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
959
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
960
+ # The default value is unset which means the value is inherited from
961
+ # the collection or the database or the client.
863
962
  # @option options [ Hash ] :let Mapping of variables to use in the command.
864
963
  # See the server documentation for details.
865
964
  #
@@ -882,6 +981,10 @@ module Mongo
882
981
  # @option options [ Session ] :session The session to use.
883
982
  # @option options [ Hash | String ] :hint The index to use for this operation.
884
983
  # May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
984
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
985
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
986
+ # The default value is unset which means the value is inherited from
987
+ # the collection or the database or the client.
885
988
  # @option options [ Hash ] :let Mapping of variables to use in the command.
886
989
  # See the server documentation for details.
887
990
  #
@@ -904,15 +1007,23 @@ module Mongo
904
1007
  # @param [ Integer ] cursor_count The max number of cursors to return.
905
1008
  # @param [ Hash ] options The parallel scan command options.
906
1009
  #
907
- # @option options [ Integer ] :max_time_ms The maximum amount of time to allow the command
908
- # to run in milliseconds.
1010
+ # @option options [ Integer ] :max_time_ms The maximum amount of time to
1011
+ # allow the query to run, in milliseconds. This option is deprecated, use
1012
+ # :timeout_ms instead.
909
1013
  # @option options [ Session ] :session The session to use.
1014
+ # @option options [ :cursor_lifetime | :iteration ] :timeout_mode How to interpret
1015
+ # :timeout_ms (whether it applies to the lifetime of the cursor, or per
1016
+ # iteration).
1017
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
1018
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
1019
+ # The default value is unset which means the value is inherited from
1020
+ # the collection or the database or the client.
910
1021
  #
911
1022
  # @return [ Array<Cursor> ] An array of cursors.
912
1023
  #
913
1024
  # @since 2.1
914
1025
  def parallel_scan(cursor_count, options = {})
915
- find({}, options).send(:parallel_scan, cursor_count, options)
1026
+ find({}, options).parallel_scan(cursor_count, options)
916
1027
  end
917
1028
 
918
1029
  # Replaces a single document in the collection with the new document.
@@ -930,6 +1041,10 @@ module Mongo
930
1041
  # not to skip document level validation.
931
1042
  # @option options [ Hash ] :collation The collation to use.
932
1043
  # @option options [ Session ] :session The session to use.
1044
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
1045
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
1046
+ # The default value is unset which means the value is inherited from
1047
+ # the collection or the database or the client.
933
1048
  # @option options [ Hash | String ] :hint The index to use for this operation.
934
1049
  # May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
935
1050
  # @option options [ Hash ] :let Mapping of variables to use in the command.
@@ -959,6 +1074,10 @@ module Mongo
959
1074
  # @option options [ Array ] :array_filters A set of filters specifying to which array elements
960
1075
  # an update should apply.
961
1076
  # @option options [ Session ] :session The session to use.
1077
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
1078
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
1079
+ # The default value is unset which means the value is inherited from
1080
+ # the collection or the database or the client.
962
1081
  # @option options [ Hash | String ] :hint The index to use for this operation.
963
1082
  # May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
964
1083
  # @option options [ Hash ] :let Mapping of variables to use in the command.
@@ -988,6 +1107,10 @@ module Mongo
988
1107
  # @option options [ Array ] :array_filters A set of filters specifying to which array elements
989
1108
  # an update should apply.
990
1109
  # @option options [ Session ] :session The session to use.
1110
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
1111
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
1112
+ # The default value is unset which means the value is inherited from
1113
+ # the collection or the database or the client.
991
1114
  # @option options [ Hash | String ] :hint The index to use for this operation.
992
1115
  # May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
993
1116
  # @option options [ Hash ] :let Mapping of variables to use in the command.
@@ -1009,8 +1132,9 @@ module Mongo
1009
1132
  # @param [ Hash ] filter The filter to use.
1010
1133
  # @param [ Hash ] options The options.
1011
1134
  #
1012
- # @option options [ Integer ] :max_time_ms The maximum amount of time to allow the command
1013
- # to run in milliseconds.
1135
+ # @option options [ Integer ] :max_time_ms The maximum amount of time to
1136
+ # allow the query to run, in milliseconds. This option is deprecated, use
1137
+ # :timeout_ms instead.
1014
1138
  # @option options [ Hash ] :projection The fields to include or exclude in the returned doc.
1015
1139
  # @option options [ Hash ] :sort The key and direction pairs by which the result set
1016
1140
  # will be sorted.
@@ -1018,6 +1142,10 @@ module Mongo
1018
1142
  # Defaults to the collection's write concern.
1019
1143
  # @option options [ Hash ] :collation The collation to use.
1020
1144
  # @option options [ Session ] :session The session to use.
1145
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
1146
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
1147
+ # The default value is unset which means the value is inherited from
1148
+ # the collection or the database or the client.
1021
1149
  # @option options [ Hash | String ] :hint The index to use for this operation.
1022
1150
  # May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
1023
1151
  # @option options [ Hash ] :let Mapping of variables to use in the command.
@@ -1062,6 +1190,10 @@ module Mongo
1062
1190
  # May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
1063
1191
  # @option options [ Hash ] :let Mapping of variables to use in the command.
1064
1192
  # See the server documentation for details.
1193
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
1194
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
1195
+ # The default value is unset which means the value is inherited from
1196
+ # the collection or the database or the client.
1065
1197
  #
1066
1198
  # @return [ BSON::Document ] The document.
1067
1199
  #
@@ -1098,6 +1230,10 @@ module Mongo
1098
1230
  # @option options [ Session ] :session The session to use.
1099
1231
  # @option options [ Hash | String ] :hint The index to use for this operation.
1100
1232
  # May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
1233
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
1234
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
1235
+ # The default value is unset which means the value is inherited from
1236
+ # the collection or the database or the client.
1101
1237
  # @option options [ Hash ] :let Mapping of variables to use in the command.
1102
1238
  # See the server documentation for details.
1103
1239
  #
@@ -1128,5 +1264,28 @@ module Mongo
1128
1264
  def system_collection?
1129
1265
  name.start_with?('system.')
1130
1266
  end
1267
+
1268
+ # @return [ Integer | nil ] Operation timeout that is for this database or
1269
+ # for the corresponding client.
1270
+ #
1271
+ # @api private
1272
+ def timeout_ms
1273
+ @timeout_ms || database.timeout_ms
1274
+ end
1275
+
1276
+ # @return [ Hash ] timeout_ms value set on the operation level (if any),
1277
+ # and/or timeout_ms that is set on collection/database/client level (if any).
1278
+ #
1279
+ # @api private
1280
+ def operation_timeouts(opts = {})
1281
+ # TODO: We should re-evaluate if we need two timeouts separately.
1282
+ {}.tap do |result|
1283
+ if opts[:timeout_ms].nil?
1284
+ result[:inherited_timeout_ms] = timeout_ms
1285
+ else
1286
+ result[:operation_timeout_ms] = opts.delete(:timeout_ms)
1287
+ end
1288
+ end
1289
+ end
1131
1290
  end
1132
1291
  end
data/lib/mongo/config.rb CHANGED
@@ -16,7 +16,7 @@ module Mongo
16
16
 
17
17
  # When this flag is off, an aggregation done on a view will be executed over
18
18
  # the documents included in that view, instead of all documents in the
19
- # collection. When this flag is on, the view fiter is ignored.
19
+ # collection. When this flag is on, the view filter is ignored.
20
20
  option :broken_view_aggregate, default: true
21
21
 
22
22
  # When this flag is set to false, the view options will be correctly
@@ -24,7 +24,7 @@ module Mongo
24
24
  option :broken_view_options, default: true
25
25
 
26
26
  # When this flag is set to true, the update and replace methods will
27
- # validate the paramters and raise an error if they are invalid.
27
+ # validate the parameters and raise an error if they are invalid.
28
28
  option :validate_update_replace, default: false
29
29
 
30
30
  # Set the configuration options.
@@ -119,8 +119,6 @@ module Mongo
119
119
  @options[:extra_options][:crypt_shared_lib_required]
120
120
 
121
121
  unless @options[:extra_options][:crypt_shared_lib_required] || @crypt_handle.crypt_shared_lib_available? || @options[:bypass_query_analysis]
122
- # Set server selection timeout to 1 to prevent the client waiting for a
123
- # long timeout before spawning mongocryptd
124
122
  @mongocryptd_client = Client.new(
125
123
  @options[:extra_options][:mongocryptd_uri],
126
124
  monitoring_io: @options[:client].options[:monitoring_io],
@@ -189,13 +187,13 @@ module Mongo
189
187
  # @param [ Hash ] command The command to be encrypted.
190
188
  #
191
189
  # @return [ BSON::Document ] The encrypted command.
192
- def encrypt(database_name, command)
190
+ def encrypt(database_name, command, timeout_holder)
193
191
  AutoEncryptionContext.new(
194
192
  @crypt_handle,
195
193
  @encryption_io,
196
194
  database_name,
197
195
  command
198
- ).run_state_machine
196
+ ).run_state_machine(timeout_holder)
199
197
  end
200
198
 
201
199
  # Decrypt a database command.
@@ -203,12 +201,12 @@ module Mongo
203
201
  # @param [ Hash ] command The command with encrypted fields.
204
202
  #
205
203
  # @return [ BSON::Document ] The decrypted command.
206
- def decrypt(command)
204
+ def decrypt(command, timeout_holder)
207
205
  AutoDecryptionContext.new(
208
206
  @crypt_handle,
209
207
  @encryption_io,
210
208
  command
211
- ).run_state_machine
209
+ ).run_state_machine(timeout_holder)
212
210
  end
213
211
 
214
212
  # Close the resources created by the AutoEncrypter.
@@ -1699,9 +1699,9 @@ module Mongo
1699
1699
  # @!method self.mongocrypt_ctx_setopt_algorithm_range(ctx, opts)
1700
1700
  # @api private
1701
1701
  #
1702
- # Set options for explicit encryption with the "rangePreview" algorithm.
1702
+ # Set options for explicit encryption with the "range" algorithm.
1703
1703
  #
1704
- # @note The RangePreview algorithm is experimental only. It is not intended for
1704
+ # @note The Range algorithm is experimental only. It is not intended for
1705
1705
  # public use.
1706
1706
  #
1707
1707
  # @param [ FFI::Pointer ] ctx A pointer to a mongocrypt_ctx_t object.
@@ -1718,9 +1718,9 @@ module Mongo
1718
1718
  :bool
1719
1719
  )
1720
1720
 
1721
- # Set options for explicit encryption with the "rangePreview" algorithm.
1721
+ # Set options for explicit encryption with the "range" algorithm.
1722
1722
  #
1723
- # @note The RangePreview algorithm is experimental only. It is not intended for
1723
+ # @note The Range algorithm is experimental only. It is not intended for
1724
1724
  # public use.
1725
1725
  #
1726
1726
  # @param [ Mongo::Crypt::Context ] context