mongo 2.20.2 → 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 (279) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -0
  3. data/Rakefile +11 -11
  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/crypt/auto_encrypter.rb +4 -6
  25. data/lib/mongo/crypt/binding.rb +4 -4
  26. data/lib/mongo/crypt/context.rb +20 -14
  27. data/lib/mongo/crypt/encryption_io.rb +56 -26
  28. data/lib/mongo/crypt/explicit_encrypter.rb +49 -20
  29. data/lib/mongo/crypt/explicit_encryption_context.rb +17 -11
  30. data/lib/mongo/crypt/kms/azure/credentials_retriever.rb +22 -6
  31. data/lib/mongo/crypt/kms/gcp/credentials_retriever.rb +29 -4
  32. data/lib/mongo/csot_timeout_holder.rb +119 -0
  33. data/lib/mongo/cursor/kill_spec.rb +5 -2
  34. data/lib/mongo/cursor/nontailable.rb +27 -0
  35. data/lib/mongo/cursor.rb +86 -24
  36. data/lib/mongo/cursor_host.rb +82 -0
  37. data/lib/mongo/database/view.rb +81 -14
  38. data/lib/mongo/database.rb +88 -18
  39. data/lib/mongo/error/operation_failure.rb +209 -204
  40. data/lib/mongo/error/server_timeout_error.rb +12 -0
  41. data/lib/mongo/error/socket_timeout_error.rb +3 -1
  42. data/lib/mongo/error/timeout_error.rb +23 -0
  43. data/lib/mongo/error.rb +2 -0
  44. data/lib/mongo/grid/fs_bucket.rb +45 -12
  45. data/lib/mongo/grid/stream/read.rb +15 -1
  46. data/lib/mongo/grid/stream/write.rb +21 -4
  47. data/lib/mongo/index/view.rb +77 -16
  48. data/lib/mongo/operation/context.rb +40 -2
  49. data/lib/mongo/operation/create_search_indexes/op_msg.rb +2 -2
  50. data/lib/mongo/operation/delete/op_msg.rb +2 -1
  51. data/lib/mongo/operation/drop_search_index/op_msg.rb +2 -2
  52. data/lib/mongo/operation/find/op_msg.rb +45 -0
  53. data/lib/mongo/operation/get_more/op_msg.rb +33 -0
  54. data/lib/mongo/operation/insert/op_msg.rb +3 -2
  55. data/lib/mongo/operation/insert/result.rb +4 -2
  56. data/lib/mongo/operation/list_collections/result.rb +1 -1
  57. data/lib/mongo/operation/map_reduce/result.rb +1 -1
  58. data/lib/mongo/operation/op_msg_base.rb +3 -1
  59. data/lib/mongo/operation/result.rb +26 -5
  60. data/lib/mongo/operation/shared/executable.rb +12 -1
  61. data/lib/mongo/operation/shared/op_msg_executable.rb +4 -1
  62. data/lib/mongo/operation/shared/response_handling.rb +3 -3
  63. data/lib/mongo/operation/shared/sessions_supported.rb +1 -1
  64. data/lib/mongo/operation/shared/timed.rb +52 -0
  65. data/lib/mongo/operation/shared/write.rb +4 -1
  66. data/lib/mongo/operation/update/op_msg.rb +2 -1
  67. data/lib/mongo/operation/update_search_index/op_msg.rb +2 -2
  68. data/lib/mongo/operation.rb +1 -0
  69. data/lib/mongo/protocol/message.rb +1 -4
  70. data/lib/mongo/protocol/msg.rb +2 -2
  71. data/lib/mongo/retryable/read_worker.rb +69 -29
  72. data/lib/mongo/retryable/write_worker.rb +49 -18
  73. data/lib/mongo/retryable.rb +8 -2
  74. data/lib/mongo/server/connection.rb +11 -5
  75. data/lib/mongo/server/connection_base.rb +22 -2
  76. data/lib/mongo/server/connection_pool.rb +32 -14
  77. data/lib/mongo/server/description/features.rb +1 -1
  78. data/lib/mongo/server/description.rb +18 -5
  79. data/lib/mongo/server/monitor.rb +7 -4
  80. data/lib/mongo/server/pending_connection.rb +7 -3
  81. data/lib/mongo/server/{round_trip_time_averager.rb → round_trip_time_calculator.rb} +25 -7
  82. data/lib/mongo/server.rb +11 -6
  83. data/lib/mongo/server_selector/base.rb +25 -9
  84. data/lib/mongo/session.rb +78 -9
  85. data/lib/mongo/socket/ssl.rb +113 -30
  86. data/lib/mongo/socket/tcp.rb +40 -6
  87. data/lib/mongo/socket.rb +154 -25
  88. data/lib/mongo/uri/options_mapper.rb +1 -0
  89. data/lib/mongo/version.rb +15 -4
  90. data/lib/mongo.rb +1 -0
  91. data/spec/atlas/atlas_connectivity_spec.rb +4 -0
  92. data/spec/atlas/operations_spec.rb +4 -0
  93. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +2 -1
  94. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +494 -487
  95. data/spec/integration/client_side_encryption/on_demand_aws_credentials_spec.rb +1 -1
  96. data/spec/integration/client_side_encryption/range_explicit_encryption_prose_spec.rb +66 -22
  97. data/spec/integration/client_side_operations_timeout/encryption_prose_spec.rb +131 -0
  98. data/spec/integration/connection_pool_populator_spec.rb +2 -0
  99. data/spec/integration/cursor_pinning_spec.rb +15 -60
  100. data/spec/integration/cursor_reaping_spec.rb +1 -1
  101. data/spec/integration/docs_examples_spec.rb +1 -1
  102. data/spec/integration/ocsp_verifier_spec.rb +99 -30
  103. data/spec/integration/operation_failure_code_spec.rb +1 -1
  104. data/spec/integration/operation_failure_message_spec.rb +3 -3
  105. data/spec/integration/reconnect_spec.rb +2 -8
  106. data/spec/integration/retryable_errors_spec.rb +2 -2
  107. data/spec/integration/sdam_error_handling_spec.rb +2 -1
  108. data/spec/integration/search_indexes_prose_spec.rb +4 -0
  109. data/spec/integration/server_spec.rb +4 -3
  110. data/spec/integration/srv_monitoring_spec.rb +3 -2
  111. data/spec/integration/srv_spec.rb +4 -0
  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 -1
  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_spec.rb +5 -6
  122. data/spec/mongo/crypt/auto_encrypter_spec.rb +14 -12
  123. data/spec/mongo/crypt/data_key_context_spec.rb +3 -1
  124. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +2 -2
  125. data/spec/mongo/crypt/handle_spec.rb +1 -1
  126. data/spec/mongo/cursor_spec.rb +26 -9
  127. data/spec/mongo/error/operation_failure_heavy_spec.rb +2 -2
  128. data/spec/mongo/operation/context_spec.rb +79 -0
  129. data/spec/mongo/operation/create/op_msg_spec.rb +106 -110
  130. data/spec/mongo/operation/delete/op_msg_spec.rb +6 -5
  131. data/spec/mongo/operation/find/op_msg_spec.rb +66 -0
  132. data/spec/mongo/operation/get_more/op_msg_spec.rb +65 -0
  133. data/spec/mongo/operation/insert/op_msg_spec.rb +128 -131
  134. data/spec/mongo/operation/shared/csot/examples.rb +113 -0
  135. data/spec/mongo/query_cache_spec.rb +243 -225
  136. data/spec/mongo/retryable_spec.rb +1 -0
  137. data/spec/mongo/server/round_trip_time_calculator_spec.rb +120 -0
  138. data/spec/mongo/socket/ssl_spec.rb +0 -10
  139. data/spec/runners/change_streams/test.rb +2 -2
  140. data/spec/runners/crud/operation.rb +1 -1
  141. data/spec/runners/crud/verifier.rb +3 -1
  142. data/spec/runners/transactions/operation.rb +4 -6
  143. data/spec/runners/unified/ambiguous_operations.rb +13 -0
  144. data/spec/runners/unified/assertions.rb +4 -0
  145. data/spec/runners/unified/change_stream_operations.rb +14 -24
  146. data/spec/runners/unified/crud_operations.rb +82 -59
  147. data/spec/runners/unified/ddl_operations.rb +38 -7
  148. data/spec/runners/unified/grid_fs_operations.rb +37 -2
  149. data/spec/runners/unified/support_operations.rb +43 -4
  150. data/spec/runners/unified/test.rb +22 -10
  151. data/spec/runners/unified.rb +1 -1
  152. data/spec/solo/clean_exit_spec.rb +2 -0
  153. data/spec/spec_tests/client_side_operations_timeout_spec.rb +15 -0
  154. data/spec/spec_tests/data/change_streams_unified/change-streams-clusterTime.yml +3 -1
  155. data/spec/spec_tests/data/change_streams_unified/change-streams-disambiguatedPaths.yml +3 -1
  156. data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +3 -1
  157. data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +1 -1
  158. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1 -1
  159. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1 -1
  160. data/spec/spec_tests/data/change_streams_unified/change-streams-showExpandedEvents.yml +1 -1
  161. data/spec/spec_tests/data/client_side_encryption/badQueries.yml +2 -1
  162. data/spec/spec_tests/data/client_side_encryption/timeoutMS.yml +67 -0
  163. data/spec/spec_tests/data/client_side_operations_timeout/bulkWrite.yml +87 -0
  164. data/spec/spec_tests/data/client_side_operations_timeout/change-streams.yml +358 -0
  165. data/spec/spec_tests/data/client_side_operations_timeout/close-cursors.yml +129 -0
  166. data/spec/spec_tests/data/client_side_operations_timeout/command-execution.yml +250 -0
  167. data/spec/spec_tests/data/client_side_operations_timeout/convenient-transactions.yml +113 -0
  168. data/spec/spec_tests/data/client_side_operations_timeout/cursors.yml +70 -0
  169. data/spec/spec_tests/data/client_side_operations_timeout/deprecated-options.yml +3982 -0
  170. data/spec/spec_tests/data/client_side_operations_timeout/error-transformations.yml +96 -0
  171. data/spec/spec_tests/data/client_side_operations_timeout/global-timeoutMS.yml +3236 -0
  172. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-advanced.yml +207 -0
  173. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-delete.yml +152 -0
  174. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-download.yml +182 -0
  175. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-find.yml +100 -0
  176. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-upload.yml +249 -0
  177. data/spec/spec_tests/data/client_side_operations_timeout/legacy-timeouts.yml +204 -0
  178. data/spec/spec_tests/data/client_side_operations_timeout/non-tailable-cursors.yml +307 -0
  179. data/spec/spec_tests/data/client_side_operations_timeout/override-collection-timeoutMS.yml +1877 -0
  180. data/spec/spec_tests/data/client_side_operations_timeout/override-operation-timeoutMS.yml +1918 -0
  181. data/spec/spec_tests/data/client_side_operations_timeout/retryability-legacy-timeouts.yml +1676 -0
  182. data/spec/spec_tests/data/client_side_operations_timeout/retryability-timeoutMS.yml +2824 -0
  183. data/spec/spec_tests/data/client_side_operations_timeout/sessions-inherit-timeoutMS.yml +168 -0
  184. data/spec/spec_tests/data/client_side_operations_timeout/sessions-override-operation-timeoutMS.yml +171 -0
  185. data/spec/spec_tests/data/client_side_operations_timeout/sessions-override-timeoutMS.yml +168 -0
  186. data/spec/spec_tests/data/client_side_operations_timeout/tailable-awaitData.yml +247 -0
  187. data/spec/spec_tests/data/client_side_operations_timeout/tailable-non-awaitData.yml +181 -0
  188. data/spec/spec_tests/data/crud_unified/aggregate-write-readPreference.yml +4 -0
  189. data/spec/spec_tests/data/crud_unified/db-aggregate-write-readPreference.yml +4 -0
  190. data/spec/spec_tests/data/crud_unified/find-test-all-options.yml +29 -0
  191. data/spec/spec_tests/server_selection_rtt_spec.rb +6 -6
  192. data/spec/support/certificates/atlas-ocsp-ca.crt +81 -83
  193. data/spec/support/certificates/atlas-ocsp.crt +107 -107
  194. data/spec/support/cluster_tools.rb +3 -3
  195. data/spec/support/common_shortcuts.rb +39 -21
  196. data/spec/support/constraints.rb +0 -10
  197. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Date.json +1 -1
  198. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalNoPrecision.json +1 -1
  199. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalPrecision.json +1 -1
  200. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoubleNoPrecision.json +1 -1
  201. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoublePrecision.json +1 -1
  202. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Int.json +1 -1
  203. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Long.json +1 -1
  204. data/spec/support/dns.rb +16 -0
  205. data/spec/support/shared/session.rb +2 -2
  206. data/spec/support/spec_setup.rb +2 -2
  207. data/spec/support/utils.rb +3 -1
  208. metadata +91 -153
  209. data/spec/mongo/server/round_trip_time_averager_spec.rb +0 -48
  210. data/spec/shared/CANDIDATE.md +0 -28
  211. data/spec/shared/LICENSE +0 -20
  212. data/spec/shared/bin/get-mongodb-download-url +0 -17
  213. data/spec/shared/bin/s3-copy +0 -45
  214. data/spec/shared/bin/s3-upload +0 -69
  215. data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
  216. data/spec/shared/lib/mrss/cluster_config.rb +0 -231
  217. data/spec/shared/lib/mrss/constraints.rb +0 -378
  218. data/spec/shared/lib/mrss/docker_runner.rb +0 -298
  219. data/spec/shared/lib/mrss/eg_config_utils.rb +0 -51
  220. data/spec/shared/lib/mrss/event_subscriber.rb +0 -210
  221. data/spec/shared/lib/mrss/lite_constraints.rb +0 -238
  222. data/spec/shared/lib/mrss/release/candidate.rb +0 -281
  223. data/spec/shared/lib/mrss/release/product_data.rb +0 -144
  224. data/spec/shared/lib/mrss/server_version_registry.rb +0 -113
  225. data/spec/shared/lib/mrss/session_registry.rb +0 -69
  226. data/spec/shared/lib/mrss/session_registry_legacy.rb +0 -60
  227. data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
  228. data/spec/shared/lib/mrss/utils.rb +0 -37
  229. data/spec/shared/lib/tasks/candidate.rake +0 -64
  230. data/spec/shared/share/Dockerfile.erb +0 -251
  231. data/spec/shared/share/haproxy-1.conf +0 -16
  232. data/spec/shared/share/haproxy-2.conf +0 -17
  233. data/spec/shared/shlib/config.sh +0 -27
  234. data/spec/shared/shlib/distro.sh +0 -84
  235. data/spec/shared/shlib/server.sh +0 -423
  236. data/spec/shared/shlib/set_env.sh +0 -110
  237. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Aggregate.yml +0 -242
  238. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Correctness.yml +0 -423
  239. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Delete.yml +0 -183
  240. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-FindOneAndUpdate.yml +0 -240
  241. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-InsertFind.yml +0 -236
  242. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Update.yml +0 -253
  243. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Aggregate.yml +0 -1688
  244. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Correctness.yml +0 -294
  245. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Delete.yml +0 -906
  246. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-FindOneAndUpdate.yml +0 -1685
  247. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-InsertFind.yml +0 -1681
  248. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Update.yml +0 -1698
  249. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Aggregate.yml +0 -330
  250. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Correctness.yml +0 -425
  251. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Delete.yml +0 -227
  252. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-FindOneAndUpdate.yml +0 -328
  253. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-InsertFind.yml +0 -320
  254. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Update.yml +0 -337
  255. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Aggregate.yml +0 -914
  256. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Correctness.yml +0 -293
  257. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Delete.yml +0 -519
  258. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-FindOneAndUpdate.yml +0 -912
  259. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-InsertFind.yml +0 -908
  260. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Update.yml +0 -925
  261. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Aggregate.yml +0 -326
  262. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Correctness.yml +0 -425
  263. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Delete.yml +0 -225
  264. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-FindOneAndUpdate.yml +0 -324
  265. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-InsertFind.yml +0 -320
  266. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Update.yml +0 -339
  267. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Aggregate.yml +0 -242
  268. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Correctness.yml +0 -424
  269. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Delete.yml +0 -183
  270. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-FindOneAndUpdate.yml +0 -240
  271. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-InsertFind.yml +0 -236
  272. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Update.yml +0 -255
  273. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Aggregate.yml +0 -242
  274. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Correctness.yml +0 -423
  275. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Delete.yml +0 -183
  276. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-FindOneAndUpdate.yml +0 -240
  277. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-InsertFind.yml +0 -236
  278. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Update.yml +0 -255
  279. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-WrongType.yml +0 -44
@@ -0,0 +1,168 @@
1
+ description: "sessions inherit timeoutMS from their parent MongoClient"
2
+
3
+ schemaVersion: "1.9"
4
+
5
+ runOnRequirements:
6
+ - minServerVersion: "4.4"
7
+ topologies: ["replicaset", "sharded"]
8
+
9
+ createEntities:
10
+ - client:
11
+ id: &failPointClient failPointClient
12
+ useMultipleMongoses: false
13
+ - client:
14
+ id: &client client
15
+ uriOptions:
16
+ timeoutMS: 50
17
+ useMultipleMongoses: false
18
+ observeEvents:
19
+ - commandStartedEvent
20
+ - commandSucceededEvent
21
+ - commandFailedEvent
22
+ - database:
23
+ id: &database database
24
+ client: *client
25
+ databaseName: &databaseName test
26
+ - collection:
27
+ id: &collection collection
28
+ database: *database
29
+ collectionName: &collectionName coll
30
+ - session:
31
+ id: &session session
32
+ client: *client
33
+
34
+ initialData:
35
+ - collectionName: *collectionName
36
+ databaseName: *databaseName
37
+ documents: []
38
+
39
+ tests:
40
+ # Drivers ignore errors from abortTransaction, so the tests in this file use commandSucceededEvent and
41
+ # commandFailedEvent events to assert success/failure.
42
+
43
+ - description: "timeoutMS applied to commitTransaction"
44
+ operations:
45
+ - name: failPoint
46
+ object: testRunner
47
+ arguments:
48
+ client: *failPointClient
49
+ failPoint:
50
+ configureFailPoint: failCommand
51
+ mode: { times: 1 }
52
+ data:
53
+ failCommands: ["commitTransaction"]
54
+ blockConnection: true
55
+ blockTimeMS: 60
56
+ - name: startTransaction
57
+ object: *session
58
+ - name: insertOne
59
+ object: *collection
60
+ arguments:
61
+ session: *session
62
+ document: { _id: 1 }
63
+ - name: commitTransaction
64
+ object: *session
65
+ expectError:
66
+ isTimeoutError: true
67
+ expectEvents:
68
+ - client: *client
69
+ events:
70
+ - commandStartedEvent:
71
+ commandName: insert
72
+ databaseName: *databaseName
73
+ command:
74
+ insert: *collectionName
75
+ - commandSucceededEvent:
76
+ commandName: insert
77
+ - commandStartedEvent:
78
+ commandName: commitTransaction
79
+ databaseName: admin
80
+ command:
81
+ commitTransaction: 1
82
+ maxTimeMS: { $$type: ["int", "long"] }
83
+ - commandFailedEvent:
84
+ commandName: commitTransaction
85
+
86
+ - description: "timeoutMS applied to abortTransaction"
87
+ operations:
88
+ - name: failPoint
89
+ object: testRunner
90
+ arguments:
91
+ client: *failPointClient
92
+ failPoint:
93
+ configureFailPoint: failCommand
94
+ mode: { times: 1 }
95
+ data:
96
+ failCommands: ["abortTransaction"]
97
+ blockConnection: true
98
+ blockTimeMS: 60
99
+ - name: startTransaction
100
+ object: *session
101
+ - name: insertOne
102
+ object: *collection
103
+ arguments:
104
+ session: *session
105
+ document: { _id: 1 }
106
+ - name: abortTransaction
107
+ object: *session
108
+ expectEvents:
109
+ - client: *client
110
+ events:
111
+ - commandStartedEvent:
112
+ commandName: insert
113
+ databaseName: *databaseName
114
+ command:
115
+ insert: *collectionName
116
+ - commandSucceededEvent:
117
+ commandName: insert
118
+ - commandStartedEvent:
119
+ commandName: abortTransaction
120
+ databaseName: admin
121
+ command:
122
+ abortTransaction: 1
123
+ maxTimeMS: { $$type: ["int", "long"] }
124
+ - commandFailedEvent:
125
+ commandName: abortTransaction
126
+
127
+ - description: "timeoutMS applied to withTransaction"
128
+ operations:
129
+ - name: failPoint
130
+ object: testRunner
131
+ arguments:
132
+ client: *failPointClient
133
+ failPoint:
134
+ configureFailPoint: failCommand
135
+ mode: { times: 1 }
136
+ data:
137
+ failCommands: ["insert"]
138
+ blockConnection: true
139
+ blockTimeMS: 60
140
+ - name: withTransaction
141
+ object: *session
142
+ arguments:
143
+ callback:
144
+ - name: insertOne
145
+ object: *collection
146
+ arguments:
147
+ session: *session
148
+ document: { _id: 1 }
149
+ expectError:
150
+ isTimeoutError: true
151
+ expectError:
152
+ isTimeoutError: true
153
+ expectEvents:
154
+ - client: *client
155
+ events:
156
+ # Because the insert expects an error and gets an error, it technically succeeds, so withTransaction will
157
+ # try to run commitTransaction. This will fail client-side, though, because the timeout has already expired,
158
+ # so no command is sent.
159
+ - commandStartedEvent:
160
+ commandName: insert
161
+ databaseName: *databaseName
162
+ command:
163
+ insert: *collectionName
164
+ # withTransaction specifies timeoutMS for each operation in the callback that uses the session, so the
165
+ # insert command should have a maxTimeMS field.
166
+ maxTimeMS: { $$type: ["int", "long"] }
167
+ - commandFailedEvent:
168
+ commandName: insert
@@ -0,0 +1,171 @@
1
+ description: "timeoutMS can be overridden for individual session operations"
2
+
3
+ schemaVersion: "1.9"
4
+
5
+ runOnRequirements:
6
+ - minServerVersion: "4.4"
7
+ topologies: ["replicaset", "sharded"]
8
+
9
+ createEntities:
10
+ - client:
11
+ id: &failPointClient failPointClient
12
+ useMultipleMongoses: false
13
+ - client:
14
+ id: &client client
15
+ useMultipleMongoses: false
16
+ observeEvents:
17
+ - commandStartedEvent
18
+ - commandSucceededEvent
19
+ - commandFailedEvent
20
+ - database:
21
+ id: &database database
22
+ client: *client
23
+ databaseName: &databaseName test
24
+ - collection:
25
+ id: &collection collection
26
+ database: *database
27
+ collectionName: &collectionName coll
28
+ - session:
29
+ id: &session session
30
+ client: *client
31
+
32
+ initialData:
33
+ - collectionName: *collectionName
34
+ databaseName: *databaseName
35
+ documents: []
36
+
37
+ tests:
38
+ # Drivers ignore errors from abortTransaction, so the tests in this file use commandSucceededEvent and
39
+ # commandFailedEvent events to assert success/failure.
40
+
41
+ - description: "timeoutMS can be overridden for commitTransaction"
42
+ operations:
43
+ - name: failPoint
44
+ object: testRunner
45
+ arguments:
46
+ client: *failPointClient
47
+ failPoint:
48
+ configureFailPoint: failCommand
49
+ mode: { times: 1 }
50
+ data:
51
+ failCommands: ["commitTransaction"]
52
+ blockConnection: true
53
+ blockTimeMS: 60
54
+ - name: startTransaction
55
+ object: *session
56
+ - name: insertOne
57
+ object: *collection
58
+ arguments:
59
+ session: *session
60
+ document: { _id: 1 }
61
+ - name: commitTransaction
62
+ object: *session
63
+ arguments:
64
+ timeoutMS: 50
65
+ expectError:
66
+ isTimeoutError: true
67
+ expectEvents:
68
+ - client: *client
69
+ events:
70
+ - commandStartedEvent:
71
+ commandName: insert
72
+ databaseName: *databaseName
73
+ command:
74
+ insert: *collectionName
75
+ - commandSucceededEvent:
76
+ commandName: insert
77
+ - commandStartedEvent:
78
+ commandName: commitTransaction
79
+ databaseName: admin
80
+ command:
81
+ commitTransaction: 1
82
+ maxTimeMS: { $$type: ["int", "long"] }
83
+ - commandFailedEvent:
84
+ commandName: commitTransaction
85
+
86
+ - description: "timeoutMS applied to abortTransaction"
87
+ operations:
88
+ - name: failPoint
89
+ object: testRunner
90
+ arguments:
91
+ client: *failPointClient
92
+ failPoint:
93
+ configureFailPoint: failCommand
94
+ mode: { times: 1 }
95
+ data:
96
+ failCommands: ["abortTransaction"]
97
+ blockConnection: true
98
+ blockTimeMS: 60
99
+ - name: startTransaction
100
+ object: *session
101
+ - name: insertOne
102
+ object: *collection
103
+ arguments:
104
+ session: *session
105
+ document: { _id: 1 }
106
+ - name: abortTransaction
107
+ object: *session
108
+ arguments:
109
+ timeoutMS: 50
110
+ expectEvents:
111
+ - client: *client
112
+ events:
113
+ - commandStartedEvent:
114
+ commandName: insert
115
+ databaseName: *databaseName
116
+ command:
117
+ insert: *collectionName
118
+ - commandSucceededEvent:
119
+ commandName: insert
120
+ - commandStartedEvent:
121
+ commandName: abortTransaction
122
+ databaseName: admin
123
+ command:
124
+ abortTransaction: 1
125
+ maxTimeMS: { $$type: ["int", "long"] }
126
+ - commandFailedEvent:
127
+ commandName: abortTransaction
128
+
129
+ - description: "timeoutMS applied to withTransaction"
130
+ operations:
131
+ - name: failPoint
132
+ object: testRunner
133
+ arguments:
134
+ client: *failPointClient
135
+ failPoint:
136
+ configureFailPoint: failCommand
137
+ mode: { times: 1 }
138
+ data:
139
+ failCommands: ["insert"]
140
+ blockConnection: true
141
+ blockTimeMS: 60
142
+ - name: withTransaction
143
+ object: *session
144
+ arguments:
145
+ timeoutMS: 50
146
+ callback:
147
+ - name: insertOne
148
+ object: *collection
149
+ arguments:
150
+ session: *session
151
+ document: { _id: 1 }
152
+ expectError:
153
+ isTimeoutError: true
154
+ expectError:
155
+ isTimeoutError: true
156
+ expectEvents:
157
+ - client: *client
158
+ events:
159
+ # Because the insert expects an error and gets an error, it technically succeeds, so withTransaction will
160
+ # try to run commitTransaction. This will fail client-side, though, because the timeout has already expired,
161
+ # so no command is sent.
162
+ - commandStartedEvent:
163
+ commandName: insert
164
+ databaseName: *databaseName
165
+ command:
166
+ insert: *collectionName
167
+ # withTransaction specifies timeoutMS for each operation in the callback that uses the session, so the
168
+ # insert command should have a maxTimeMS field.
169
+ maxTimeMS: { $$type: ["int", "long"] }
170
+ - commandFailedEvent:
171
+ commandName: insert
@@ -0,0 +1,168 @@
1
+ description: "timeoutMS can be overridden at the level of a ClientSession"
2
+
3
+ schemaVersion: "1.9"
4
+
5
+ runOnRequirements:
6
+ - minServerVersion: "4.4"
7
+ topologies: ["replicaset", "sharded"]
8
+
9
+ createEntities:
10
+ - client:
11
+ id: &failPointClient failPointClient
12
+ useMultipleMongoses: false
13
+ - client:
14
+ id: &client client
15
+ useMultipleMongoses: false
16
+ observeEvents:
17
+ - commandStartedEvent
18
+ - commandSucceededEvent
19
+ - commandFailedEvent
20
+ - database:
21
+ id: &database database
22
+ client: *client
23
+ databaseName: &databaseName test
24
+ - collection:
25
+ id: &collection collection
26
+ database: *database
27
+ collectionName: &collectionName coll
28
+ - session:
29
+ id: &session session
30
+ client: *client
31
+ sessionOptions:
32
+ defaultTimeoutMS: 50
33
+
34
+ initialData:
35
+ - collectionName: *collectionName
36
+ databaseName: *databaseName
37
+ documents: []
38
+
39
+ tests:
40
+ # Drivers ignore errors from abortTransaction, so the tests in this file use commandSucceededEvent and
41
+ # commandFailedEvent events to assert success/failure.
42
+
43
+ - description: "timeoutMS applied to commitTransaction"
44
+ operations:
45
+ - name: failPoint
46
+ object: testRunner
47
+ arguments:
48
+ client: *failPointClient
49
+ failPoint:
50
+ configureFailPoint: failCommand
51
+ mode: { times: 1 }
52
+ data:
53
+ failCommands: ["commitTransaction"]
54
+ blockConnection: true
55
+ blockTimeMS: 60
56
+ - name: startTransaction
57
+ object: *session
58
+ - name: insertOne
59
+ object: *collection
60
+ arguments:
61
+ session: *session
62
+ document: { _id: 1 }
63
+ - name: commitTransaction
64
+ object: *session
65
+ expectError:
66
+ isTimeoutError: true
67
+ expectEvents:
68
+ - client: *client
69
+ events:
70
+ - commandStartedEvent:
71
+ commandName: insert
72
+ databaseName: *databaseName
73
+ command:
74
+ insert: *collectionName
75
+ - commandSucceededEvent:
76
+ commandName: insert
77
+ - commandStartedEvent:
78
+ commandName: commitTransaction
79
+ databaseName: admin
80
+ command:
81
+ commitTransaction: 1
82
+ maxTimeMS: { $$type: ["int", "long"] }
83
+ - commandFailedEvent:
84
+ commandName: commitTransaction
85
+
86
+ - description: "timeoutMS applied to abortTransaction"
87
+ operations:
88
+ - name: failPoint
89
+ object: testRunner
90
+ arguments:
91
+ client: *failPointClient
92
+ failPoint:
93
+ configureFailPoint: failCommand
94
+ mode: { times: 1 }
95
+ data:
96
+ failCommands: ["abortTransaction"]
97
+ blockConnection: true
98
+ blockTimeMS: 60
99
+ - name: startTransaction
100
+ object: *session
101
+ - name: insertOne
102
+ object: *collection
103
+ arguments:
104
+ session: *session
105
+ document: { _id: 1 }
106
+ - name: abortTransaction
107
+ object: *session
108
+ expectEvents:
109
+ - client: *client
110
+ events:
111
+ - commandStartedEvent:
112
+ commandName: insert
113
+ databaseName: *databaseName
114
+ command:
115
+ insert: *collectionName
116
+ - commandSucceededEvent:
117
+ commandName: insert
118
+ - commandStartedEvent:
119
+ commandName: abortTransaction
120
+ databaseName: admin
121
+ command:
122
+ abortTransaction: 1
123
+ maxTimeMS: { $$type: ["int", "long"] }
124
+ - commandFailedEvent:
125
+ commandName: abortTransaction
126
+
127
+ - description: "timeoutMS applied to withTransaction"
128
+ operations:
129
+ - name: failPoint
130
+ object: testRunner
131
+ arguments:
132
+ client: *failPointClient
133
+ failPoint:
134
+ configureFailPoint: failCommand
135
+ mode: { times: 1 }
136
+ data:
137
+ failCommands: ["insert"]
138
+ blockConnection: true
139
+ blockTimeMS: 60
140
+ - name: withTransaction
141
+ object: *session
142
+ arguments:
143
+ callback:
144
+ - name: insertOne
145
+ object: *collection
146
+ arguments:
147
+ session: *session
148
+ document: { _id: 1 }
149
+ expectError:
150
+ isTimeoutError: true
151
+ expectError:
152
+ isTimeoutError: true
153
+ expectEvents:
154
+ - client: *client
155
+ events:
156
+ # Because the insert expects an error and gets an error, it technically succeeds, so withTransaction will
157
+ # try to run commitTransaction. This will fail client-side, though, because the timeout has already expired,
158
+ # so no command is sent.
159
+ - commandStartedEvent:
160
+ commandName: insert
161
+ databaseName: *databaseName
162
+ command:
163
+ insert: *collectionName
164
+ # withTransaction specifies timeoutMS for each operation in the callback that uses the session, so the
165
+ # insert command should have a maxTimeMS field.
166
+ maxTimeMS: { $$type: ["int", "long"] }
167
+ - commandFailedEvent:
168
+ commandName: insert