mongo 2.20.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 (246) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -0
  3. data/Rakefile +2 -2
  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 +109 -17
  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 +1 -1
  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/operation_failure_code_spec.rb +1 -1
  103. data/spec/integration/operation_failure_message_spec.rb +3 -3
  104. data/spec/integration/retryable_errors_spec.rb +2 -2
  105. data/spec/integration/sdam_error_handling_spec.rb +2 -1
  106. data/spec/integration/search_indexes_prose_spec.rb +4 -0
  107. data/spec/integration/server_spec.rb +4 -3
  108. data/spec/integration/transactions_api_examples_spec.rb +2 -0
  109. data/spec/kerberos/kerberos_spec.rb +4 -0
  110. data/spec/lite_spec_helper.rb +3 -1
  111. data/spec/mongo/auth/user/view_spec.rb +1 -1
  112. data/spec/mongo/caching_cursor_spec.rb +1 -1
  113. data/spec/mongo/client_encryption_spec.rb +1 -0
  114. data/spec/mongo/client_spec.rb +158 -4
  115. data/spec/mongo/collection/view/aggregation_spec.rb +14 -39
  116. data/spec/mongo/collection/view/change_stream_spec.rb +3 -3
  117. data/spec/mongo/collection_spec.rb +5 -6
  118. data/spec/mongo/crypt/auto_encrypter_spec.rb +14 -12
  119. data/spec/mongo/crypt/data_key_context_spec.rb +3 -1
  120. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +2 -2
  121. data/spec/mongo/crypt/handle_spec.rb +1 -1
  122. data/spec/mongo/cursor_spec.rb +26 -9
  123. data/spec/mongo/error/operation_failure_heavy_spec.rb +2 -2
  124. data/spec/mongo/operation/context_spec.rb +79 -0
  125. data/spec/mongo/operation/create/op_msg_spec.rb +106 -110
  126. data/spec/mongo/operation/delete/op_msg_spec.rb +6 -5
  127. data/spec/mongo/operation/find/op_msg_spec.rb +66 -0
  128. data/spec/mongo/operation/get_more/op_msg_spec.rb +65 -0
  129. data/spec/mongo/operation/insert/op_msg_spec.rb +128 -131
  130. data/spec/mongo/operation/shared/csot/examples.rb +113 -0
  131. data/spec/mongo/query_cache_spec.rb +243 -225
  132. data/spec/mongo/retryable_spec.rb +1 -0
  133. data/spec/mongo/server/round_trip_time_calculator_spec.rb +120 -0
  134. data/spec/mongo/socket/ssl_spec.rb +0 -10
  135. data/spec/runners/change_streams/test.rb +2 -2
  136. data/spec/runners/crud/operation.rb +1 -1
  137. data/spec/runners/crud/verifier.rb +3 -1
  138. data/spec/runners/transactions/operation.rb +4 -6
  139. data/spec/runners/unified/ambiguous_operations.rb +13 -0
  140. data/spec/runners/unified/assertions.rb +4 -0
  141. data/spec/runners/unified/change_stream_operations.rb +14 -24
  142. data/spec/runners/unified/crud_operations.rb +82 -59
  143. data/spec/runners/unified/ddl_operations.rb +38 -7
  144. data/spec/runners/unified/grid_fs_operations.rb +37 -2
  145. data/spec/runners/unified/support_operations.rb +43 -4
  146. data/spec/runners/unified/test.rb +22 -10
  147. data/spec/runners/unified.rb +1 -1
  148. data/spec/solo/clean_exit_spec.rb +2 -0
  149. data/spec/spec_tests/client_side_operations_timeout_spec.rb +15 -0
  150. data/spec/spec_tests/data/change_streams_unified/change-streams-clusterTime.yml +3 -1
  151. data/spec/spec_tests/data/change_streams_unified/change-streams-disambiguatedPaths.yml +3 -1
  152. data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +3 -1
  153. data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +1 -1
  154. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1 -1
  155. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1 -1
  156. data/spec/spec_tests/data/change_streams_unified/change-streams-showExpandedEvents.yml +1 -1
  157. data/spec/spec_tests/data/client_side_encryption/badQueries.yml +2 -1
  158. data/spec/spec_tests/data/client_side_encryption/timeoutMS.yml +67 -0
  159. data/spec/spec_tests/data/client_side_operations_timeout/bulkWrite.yml +87 -0
  160. data/spec/spec_tests/data/client_side_operations_timeout/change-streams.yml +358 -0
  161. data/spec/spec_tests/data/client_side_operations_timeout/close-cursors.yml +129 -0
  162. data/spec/spec_tests/data/client_side_operations_timeout/command-execution.yml +250 -0
  163. data/spec/spec_tests/data/client_side_operations_timeout/convenient-transactions.yml +113 -0
  164. data/spec/spec_tests/data/client_side_operations_timeout/cursors.yml +70 -0
  165. data/spec/spec_tests/data/client_side_operations_timeout/deprecated-options.yml +3982 -0
  166. data/spec/spec_tests/data/client_side_operations_timeout/error-transformations.yml +96 -0
  167. data/spec/spec_tests/data/client_side_operations_timeout/global-timeoutMS.yml +3236 -0
  168. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-advanced.yml +207 -0
  169. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-delete.yml +152 -0
  170. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-download.yml +182 -0
  171. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-find.yml +100 -0
  172. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-upload.yml +249 -0
  173. data/spec/spec_tests/data/client_side_operations_timeout/legacy-timeouts.yml +204 -0
  174. data/spec/spec_tests/data/client_side_operations_timeout/non-tailable-cursors.yml +307 -0
  175. data/spec/spec_tests/data/client_side_operations_timeout/override-collection-timeoutMS.yml +1877 -0
  176. data/spec/spec_tests/data/client_side_operations_timeout/override-operation-timeoutMS.yml +1918 -0
  177. data/spec/spec_tests/data/client_side_operations_timeout/retryability-legacy-timeouts.yml +1676 -0
  178. data/spec/spec_tests/data/client_side_operations_timeout/retryability-timeoutMS.yml +2824 -0
  179. data/spec/spec_tests/data/client_side_operations_timeout/sessions-inherit-timeoutMS.yml +168 -0
  180. data/spec/spec_tests/data/client_side_operations_timeout/sessions-override-operation-timeoutMS.yml +171 -0
  181. data/spec/spec_tests/data/client_side_operations_timeout/sessions-override-timeoutMS.yml +168 -0
  182. data/spec/spec_tests/data/client_side_operations_timeout/tailable-awaitData.yml +247 -0
  183. data/spec/spec_tests/data/client_side_operations_timeout/tailable-non-awaitData.yml +181 -0
  184. data/spec/spec_tests/data/crud_unified/aggregate-write-readPreference.yml +4 -0
  185. data/spec/spec_tests/data/crud_unified/db-aggregate-write-readPreference.yml +4 -0
  186. data/spec/spec_tests/data/crud_unified/find-test-all-options.yml +29 -0
  187. data/spec/spec_tests/server_selection_rtt_spec.rb +6 -6
  188. data/spec/support/certificates/atlas-ocsp-ca.crt +81 -83
  189. data/spec/support/certificates/atlas-ocsp.crt +107 -107
  190. data/spec/support/cluster_tools.rb +3 -3
  191. data/spec/support/common_shortcuts.rb +2 -2
  192. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Date.json +1 -1
  193. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalNoPrecision.json +1 -1
  194. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalPrecision.json +1 -1
  195. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoubleNoPrecision.json +1 -1
  196. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoublePrecision.json +1 -1
  197. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Int.json +1 -1
  198. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Long.json +1 -1
  199. data/spec/support/shared/session.rb +2 -2
  200. data/spec/support/spec_setup.rb +2 -2
  201. data/spec/support/utils.rb +3 -1
  202. metadata +78 -91
  203. data/spec/mongo/server/round_trip_time_averager_spec.rb +0 -48
  204. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Aggregate.yml +0 -242
  205. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Correctness.yml +0 -423
  206. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Delete.yml +0 -183
  207. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-FindOneAndUpdate.yml +0 -240
  208. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-InsertFind.yml +0 -236
  209. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Update.yml +0 -253
  210. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Aggregate.yml +0 -1688
  211. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Correctness.yml +0 -294
  212. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Delete.yml +0 -906
  213. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-FindOneAndUpdate.yml +0 -1685
  214. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-InsertFind.yml +0 -1681
  215. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Update.yml +0 -1698
  216. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Aggregate.yml +0 -330
  217. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Correctness.yml +0 -425
  218. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Delete.yml +0 -227
  219. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-FindOneAndUpdate.yml +0 -328
  220. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-InsertFind.yml +0 -320
  221. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Update.yml +0 -337
  222. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Aggregate.yml +0 -914
  223. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Correctness.yml +0 -293
  224. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Delete.yml +0 -519
  225. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-FindOneAndUpdate.yml +0 -912
  226. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-InsertFind.yml +0 -908
  227. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Update.yml +0 -925
  228. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Aggregate.yml +0 -326
  229. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Correctness.yml +0 -425
  230. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Delete.yml +0 -225
  231. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-FindOneAndUpdate.yml +0 -324
  232. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-InsertFind.yml +0 -320
  233. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Update.yml +0 -339
  234. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Aggregate.yml +0 -242
  235. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Correctness.yml +0 -424
  236. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Delete.yml +0 -183
  237. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-FindOneAndUpdate.yml +0 -240
  238. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-InsertFind.yml +0 -236
  239. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Update.yml +0 -255
  240. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Aggregate.yml +0 -242
  241. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Correctness.yml +0 -423
  242. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Delete.yml +0 -183
  243. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-FindOneAndUpdate.yml +0 -240
  244. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-InsertFind.yml +0 -236
  245. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Update.yml +0 -255
  246. 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