mongo 2.8.0 → 2.9.0.rc0

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 (276) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/Rakefile +12 -0
  5. data/lib/mongo.rb +15 -1
  6. data/lib/mongo/address/ipv6.rb +0 -2
  7. data/lib/mongo/auth/scram/conversation.rb +0 -3
  8. data/lib/mongo/bulk_write/result_combiner.rb +12 -2
  9. data/lib/mongo/client.rb +59 -6
  10. data/lib/mongo/cluster.rb +19 -8
  11. data/lib/mongo/cluster/reapers/cursor_reaper.rb +0 -2
  12. data/lib/mongo/cluster/reapers/socket_reaper.rb +12 -9
  13. data/lib/mongo/collection.rb +1 -1
  14. data/lib/mongo/collection/view/aggregation.rb +5 -1
  15. data/lib/mongo/collection/view/builder/map_reduce.rb +1 -1
  16. data/lib/mongo/collection/view/change_stream.rb +30 -10
  17. data/lib/mongo/collection/view/iterable.rb +13 -6
  18. data/lib/mongo/collection/view/map_reduce.rb +12 -10
  19. data/lib/mongo/collection/view/readable.rb +19 -14
  20. data/lib/mongo/cursor.rb +12 -8
  21. data/lib/mongo/database.rb +10 -7
  22. data/lib/mongo/database/view.rb +18 -11
  23. data/lib/mongo/error.rb +2 -2
  24. data/lib/mongo/error/connection_check_out_timeout.rb +49 -0
  25. data/lib/mongo/error/operation_failure.rb +9 -9
  26. data/lib/mongo/error/parser.rb +25 -3
  27. data/lib/mongo/error/pool_closed_error.rb +43 -0
  28. data/lib/mongo/error/sdam_error_detection.rb +18 -0
  29. data/lib/mongo/grid/file/chunk.rb +0 -2
  30. data/lib/mongo/grid/fs_bucket.rb +26 -12
  31. data/lib/mongo/grid/stream/read.rb +36 -21
  32. data/lib/mongo/index/view.rb +11 -7
  33. data/lib/mongo/logger.rb +0 -2
  34. data/lib/mongo/monitoring.rb +31 -0
  35. data/lib/mongo/monitoring/cmap_log_subscriber.rb +53 -0
  36. data/lib/mongo/monitoring/event.rb +1 -0
  37. data/lib/mongo/monitoring/event/cmap.rb +25 -0
  38. data/lib/mongo/monitoring/event/cmap/base.rb +28 -0
  39. data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +78 -0
  40. data/lib/mongo/monitoring/event/cmap/connection_check_out_started.rb +56 -0
  41. data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +63 -0
  42. data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +64 -0
  43. data/lib/mongo/monitoring/event/cmap/connection_closed.rb +103 -0
  44. data/lib/mongo/monitoring/event/cmap/connection_created.rb +64 -0
  45. data/lib/mongo/monitoring/event/cmap/connection_ready.rb +64 -0
  46. data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +57 -0
  47. data/lib/mongo/monitoring/event/cmap/pool_closed.rb +57 -0
  48. data/lib/mongo/monitoring/event/cmap/pool_created.rb +63 -0
  49. data/lib/mongo/monitoring/event/command_started.rb +12 -3
  50. data/lib/mongo/monitoring/publishable.rb +10 -2
  51. data/lib/mongo/operation.rb +0 -1
  52. data/lib/mongo/operation/find/legacy/result.rb +1 -0
  53. data/lib/mongo/operation/list_collections/result.rb +7 -1
  54. data/lib/mongo/operation/result.rb +10 -1
  55. data/lib/mongo/operation/shared/executable.rb +15 -0
  56. data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +29 -0
  57. data/lib/mongo/operation/shared/specifiable.rb +0 -16
  58. data/lib/mongo/operation/update/legacy/result.rb +1 -0
  59. data/lib/mongo/protocol/compressed.rb +0 -2
  60. data/lib/mongo/protocol/msg.rb +25 -2
  61. data/lib/mongo/retryable.rb +171 -33
  62. data/lib/mongo/server.rb +26 -7
  63. data/lib/mongo/server/app_metadata.rb +0 -2
  64. data/lib/mongo/server/connectable.rb +8 -2
  65. data/lib/mongo/server/connection.rb +83 -13
  66. data/lib/mongo/server/connection_base.rb +1 -1
  67. data/lib/mongo/server/connection_pool.rb +439 -43
  68. data/lib/mongo/server/monitor/connection.rb +4 -1
  69. data/lib/mongo/session.rb +37 -5
  70. data/lib/mongo/session/session_pool.rb +2 -2
  71. data/lib/mongo/socket.rb +0 -2
  72. data/lib/mongo/socket/ssl.rb +0 -2
  73. data/lib/mongo/uri.rb +127 -66
  74. data/lib/mongo/uri/srv_protocol.rb +35 -13
  75. data/lib/mongo/version.rb +1 -1
  76. data/spec/README.md +190 -63
  77. data/spec/integration/change_stream_spec.rb +64 -0
  78. data/spec/integration/command_spec.rb +0 -7
  79. data/spec/integration/error_detection_spec.rb +39 -0
  80. data/spec/integration/read_concern.rb +83 -0
  81. data/spec/integration/retryable_writes_spec.rb +6 -50
  82. data/spec/integration/sdam_error_handling_spec.rb +60 -7
  83. data/spec/integration/ssl_uri_options_spec.rb +24 -0
  84. data/spec/integration/step_down_spec.rb +197 -0
  85. data/spec/lite_spec_helper.rb +4 -0
  86. data/spec/mongo/client_construction_spec.rb +42 -17
  87. data/spec/mongo/client_spec.rb +32 -1
  88. data/spec/mongo/cluster/socket_reaper_spec.rb +2 -2
  89. data/spec/mongo/cluster_spec.rb +36 -2
  90. data/spec/mongo/collection/view/aggregation_spec.rb +2 -0
  91. data/spec/mongo/collection/view/change_stream_spec.rb +28 -28
  92. data/spec/mongo/collection/view/readable_spec.rb +1 -1
  93. data/spec/mongo/collection/view_spec.rb +3 -1
  94. data/spec/mongo/cursor_spec.rb +5 -5
  95. data/spec/mongo/error/parser_spec.rb +61 -1
  96. data/spec/mongo/grid/stream/read_spec.rb +2 -2
  97. data/spec/mongo/monitoring/event/cmap/connection_check_out_failed_spec.rb +23 -0
  98. data/spec/mongo/monitoring/event/cmap/connection_check_out_started_spec.rb +19 -0
  99. data/spec/mongo/monitoring/event/cmap/connection_checked_in_spec.rb +23 -0
  100. data/spec/mongo/monitoring/event/cmap/connection_checked_out_spec.rb +23 -0
  101. data/spec/mongo/monitoring/event/cmap/connection_closed_spec.rb +27 -0
  102. data/spec/mongo/monitoring/event/cmap/connection_created_spec.rb +24 -0
  103. data/spec/mongo/monitoring/event/cmap/connection_ready_spec.rb +24 -0
  104. data/spec/mongo/monitoring/event/cmap/pool_cleared_spec.rb +19 -0
  105. data/spec/mongo/monitoring/event/cmap/pool_closed_spec.rb +19 -0
  106. data/spec/mongo/monitoring/event/cmap/pool_created_spec.rb +26 -0
  107. data/spec/mongo/operation/delete/bulk_spec.rb +1 -6
  108. data/spec/mongo/operation/delete/command_spec.rb +1 -1
  109. data/spec/mongo/operation/delete/op_msg_spec.rb +1 -1
  110. data/spec/mongo/operation/delete_spec.rb +4 -4
  111. data/spec/mongo/operation/insert/bulk_spec.rb +1 -1
  112. data/spec/mongo/operation/insert/command_spec.rb +1 -1
  113. data/spec/mongo/operation/insert/op_msg_spec.rb +1 -1
  114. data/spec/mongo/operation/update/bulk_spec.rb +1 -1
  115. data/spec/mongo/operation/update/command_spec.rb +2 -2
  116. data/spec/mongo/operation/update/op_msg_spec.rb +2 -2
  117. data/spec/mongo/protocol/msg_spec.rb +11 -0
  118. data/spec/mongo/retryable_spec.rb +78 -25
  119. data/spec/mongo/server/connection_pool_spec.rb +661 -126
  120. data/spec/mongo/server/connection_spec.rb +55 -7
  121. data/spec/mongo/server_spec.rb +5 -0
  122. data/spec/mongo/uri/srv_protocol_spec.rb +135 -2
  123. data/spec/mongo/uri_option_parsing_spec.rb +511 -0
  124. data/spec/mongo/uri_spec.rb +42 -6
  125. data/spec/spec_helper.rb +1 -84
  126. data/spec/spec_tests/cmap_spec.rb +50 -0
  127. data/spec/spec_tests/command_monitoring_spec.rb +7 -18
  128. data/spec/spec_tests/crud_spec.rb +3 -49
  129. data/spec/spec_tests/data/cmap/connection-must-have-id.yml +21 -0
  130. data/spec/spec_tests/data/cmap/connection-must-order-ids.yml +21 -0
  131. data/spec/spec_tests/data/cmap/pool-checkin-destroy-closed.yml +24 -0
  132. data/spec/spec_tests/data/cmap/pool-checkin-destroy-stale.yml +24 -0
  133. data/spec/spec_tests/data/cmap/pool-checkin-make-available.yml +21 -0
  134. data/spec/spec_tests/data/cmap/pool-checkin.yml +18 -0
  135. data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +13 -0
  136. data/spec/spec_tests/data/cmap/pool-checkout-error-closed.yml +28 -0
  137. data/spec/spec_tests/data/cmap/pool-checkout-multiple.yml +34 -0
  138. data/spec/spec_tests/data/cmap/pool-checkout-no-idle.yml +31 -0
  139. data/spec/spec_tests/data/cmap/pool-checkout-no-stale.yml +29 -0
  140. data/spec/spec_tests/data/cmap/pool-close-destroy-conns.yml +26 -0
  141. data/spec/spec_tests/data/cmap/pool-close.yml +11 -0
  142. data/spec/spec_tests/data/cmap/pool-create-max-size.yml +56 -0
  143. data/spec/spec_tests/data/cmap/pool-create-min-size.yml +27 -0
  144. data/spec/spec_tests/data/cmap/pool-create-with-options.yml +20 -0
  145. data/spec/spec_tests/data/cmap/pool-create.yml +12 -0
  146. data/spec/spec_tests/data/cmap/wait-queue-fairness.yml +94 -0
  147. data/spec/spec_tests/data/cmap/wait-queue-timeout.yml +41 -0
  148. data/spec/spec_tests/data/retryable_reads/aggregate-serverErrors.yml +157 -0
  149. data/spec/spec_tests/data/retryable_reads/aggregate.yml +87 -0
  150. data/spec/spec_tests/data/retryable_reads/changeStreams-client.watch-serverErrors.yml +149 -0
  151. data/spec/spec_tests/data/retryable_reads/changeStreams-client.watch.yml +61 -0
  152. data/spec/spec_tests/data/retryable_reads/changeStreams-db.coll.watch-serverErrors.yml +149 -0
  153. data/spec/spec_tests/data/retryable_reads/changeStreams-db.coll.watch.yml +65 -0
  154. data/spec/spec_tests/data/retryable_reads/changeStreams-db.watch-serverErrors.yml +153 -0
  155. data/spec/spec_tests/data/retryable_reads/changeStreams-db.watch.yml +61 -0
  156. data/spec/spec_tests/data/retryable_reads/count-serverErrors.yml +150 -0
  157. data/spec/spec_tests/data/retryable_reads/count.yml +64 -0
  158. data/spec/spec_tests/data/retryable_reads/countDocuments-serverErrors.yml +150 -0
  159. data/spec/spec_tests/data/retryable_reads/countDocuments.yml +64 -0
  160. data/spec/spec_tests/data/retryable_reads/distinct-serverErrors.yml +156 -0
  161. data/spec/spec_tests/data/retryable_reads/distinct.yml +71 -0
  162. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors.yml +148 -0
  163. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount.yml +62 -0
  164. data/spec/spec_tests/data/retryable_reads/find-serverErrors.yml +160 -0
  165. data/spec/spec_tests/data/retryable_reads/find.yml +86 -0
  166. data/spec/spec_tests/data/retryable_reads/findOne-serverErrors.yml +154 -0
  167. data/spec/spec_tests/data/retryable_reads/findOne.yml +68 -0
  168. data/spec/spec_tests/data/retryable_reads/gridfs-download-serverErrors.yml +173 -0
  169. data/spec/spec_tests/data/retryable_reads/gridfs-download.yml +79 -0
  170. data/spec/spec_tests/data/retryable_reads/gridfs-downloadByName-serverErrors.yml +174 -0
  171. data/spec/spec_tests/data/retryable_reads/gridfs-downloadByName.yml +79 -0
  172. data/spec/spec_tests/data/retryable_reads/listCollectionNames-serverErrors.yml +143 -0
  173. data/spec/spec_tests/data/retryable_reads/listCollectionNames.yml +59 -0
  174. data/spec/spec_tests/data/retryable_reads/listCollectionObjects-serverErrors.yml +144 -0
  175. data/spec/spec_tests/data/retryable_reads/listCollectionObjects.yml +59 -0
  176. data/spec/spec_tests/data/retryable_reads/listCollections-serverErrors.yml +143 -0
  177. data/spec/spec_tests/data/retryable_reads/listCollections.yml +59 -0
  178. data/spec/spec_tests/data/retryable_reads/listDatabaseNames-serverErrors.yml +143 -0
  179. data/spec/spec_tests/data/retryable_reads/listDatabaseNames.yml +59 -0
  180. data/spec/spec_tests/data/retryable_reads/listDatabaseObjects-serverErrors.yml +144 -0
  181. data/spec/spec_tests/data/retryable_reads/listDatabaseObjects.yml +59 -0
  182. data/spec/spec_tests/data/retryable_reads/listDatabases-serverErrors.yml +144 -0
  183. data/spec/spec_tests/data/retryable_reads/listDatabases.yml +59 -0
  184. data/spec/spec_tests/data/retryable_reads/listIndexNames-serverErrors.yml +144 -0
  185. data/spec/spec_tests/data/retryable_reads/listIndexNames.yml +60 -0
  186. data/spec/spec_tests/data/retryable_reads/listIndexes-serverErrors.yml +145 -0
  187. data/spec/spec_tests/data/retryable_reads/listIndexes.yml +60 -0
  188. data/spec/spec_tests/data/retryable_reads/mapReduce.yml +60 -0
  189. data/spec/spec_tests/data/retryable_writes/bulkWrite-serverErrors.yml +10 -7
  190. data/spec/spec_tests/data/retryable_writes/bulkWrite.yml +15 -22
  191. data/spec/spec_tests/data/retryable_writes/deleteMany.yml +22 -0
  192. data/spec/spec_tests/data/retryable_writes/deleteOne-serverErrors.yml +8 -7
  193. data/spec/spec_tests/data/retryable_writes/deleteOne.yml +5 -8
  194. data/spec/spec_tests/data/retryable_writes/findOneAndDelete-serverErrors.yml +8 -7
  195. data/spec/spec_tests/data/retryable_writes/findOneAndDelete.yml +5 -8
  196. data/spec/spec_tests/data/retryable_writes/findOneAndReplace-serverErrors.yml +8 -7
  197. data/spec/spec_tests/data/retryable_writes/findOneAndReplace.yml +5 -8
  198. data/spec/spec_tests/data/retryable_writes/findOneAndUpdate-serverErrors.yml +8 -7
  199. data/spec/spec_tests/data/retryable_writes/findOneAndUpdate.yml +5 -8
  200. data/spec/spec_tests/data/retryable_writes/insertMany-serverErrors.yml +8 -7
  201. data/spec/spec_tests/data/retryable_writes/insertMany.yml +5 -8
  202. data/spec/spec_tests/data/retryable_writes/insertOne-serverErrors.yml +10 -45
  203. data/spec/spec_tests/data/retryable_writes/insertOne.yml +5 -8
  204. data/spec/spec_tests/data/retryable_writes/replaceOne-serverErrors.yml +8 -7
  205. data/spec/spec_tests/data/retryable_writes/replaceOne.yml +5 -8
  206. data/spec/spec_tests/data/retryable_writes/updateMany.yml +27 -0
  207. data/spec/spec_tests/data/retryable_writes/updateOne-serverErrors.yml +8 -7
  208. data/spec/spec_tests/data/retryable_writes/updateOne.yml +5 -14
  209. data/spec/spec_tests/data/transactions/abort.yml +7 -2
  210. data/spec/spec_tests/data/transactions/bulk.yml +7 -2
  211. data/spec/spec_tests/data/transactions/causal-consistency.yml +11 -4
  212. data/spec/spec_tests/data/transactions/commit.yml +11 -4
  213. data/spec/spec_tests/data/transactions/count.yml +64 -0
  214. data/spec/spec_tests/data/transactions/delete.yml +7 -2
  215. data/spec/spec_tests/data/transactions/error-labels.yml +8 -2
  216. data/spec/spec_tests/data/transactions/errors.yml +7 -2
  217. data/spec/spec_tests/data/transactions/findOneAndDelete.yml +7 -2
  218. data/spec/spec_tests/data/transactions/findOneAndReplace.yml +7 -2
  219. data/spec/spec_tests/data/transactions/findOneAndUpdate.yml +7 -2
  220. data/spec/spec_tests/data/transactions/insert.yml +9 -2
  221. data/spec/spec_tests/data/transactions/isolation.yml +7 -2
  222. data/spec/spec_tests/data/transactions/read-concern.yml +15 -6
  223. data/spec/spec_tests/data/transactions/read-pref.yml +7 -2
  224. data/spec/spec_tests/data/transactions/reads.yml +8 -48
  225. data/spec/spec_tests/data/transactions/retryable-abort.yml +7 -2
  226. data/spec/spec_tests/data/transactions/retryable-commit.yml +7 -2
  227. data/spec/spec_tests/data/transactions/retryable-writes.yml +7 -2
  228. data/spec/spec_tests/data/transactions/run-command.yml +7 -2
  229. data/spec/spec_tests/data/transactions/transaction-options.yml +7 -2
  230. data/spec/spec_tests/data/transactions/update.yml +7 -2
  231. data/spec/spec_tests/data/transactions/write-concern.yml +7 -2
  232. data/spec/spec_tests/data/transactions_api/callback-aborts.yml +6 -1
  233. data/spec/spec_tests/data/transactions_api/callback-commits.yml +6 -1
  234. data/spec/spec_tests/data/transactions_api/callback-retry.yml +6 -1
  235. data/spec/spec_tests/data/transactions_api/commit-retry.yml +6 -1
  236. data/spec/spec_tests/data/transactions_api/commit-transienttransactionerror-4.2.yml +6 -3
  237. data/spec/spec_tests/data/transactions_api/commit-transienttransactionerror.yml +6 -1
  238. data/spec/spec_tests/data/transactions_api/commit-writeconcernerror.yml +6 -1
  239. data/spec/spec_tests/data/transactions_api/commit.yml +6 -1
  240. data/spec/spec_tests/data/transactions_api/transaction-options.yml +6 -1
  241. data/spec/spec_tests/retryable_reads_spec.rb +11 -0
  242. data/spec/spec_tests/retryable_writes_spec.rb +4 -69
  243. data/spec/spec_tests/transactions_api_spec.rb +42 -37
  244. data/spec/spec_tests/transactions_spec.rb +42 -33
  245. data/spec/support/authorization.rb +12 -0
  246. data/spec/support/change_streams/operation.rb +1 -1
  247. data/spec/support/client_registry.rb +20 -0
  248. data/spec/support/cluster_config.rb +16 -15
  249. data/spec/support/cluster_tools.rb +346 -0
  250. data/spec/support/cmap.rb +367 -0
  251. data/spec/support/cmap/verifier.rb +46 -0
  252. data/spec/support/command_monitoring.rb +4 -6
  253. data/spec/support/common_shortcuts.rb +6 -0
  254. data/spec/support/connection_string.rb +2 -2
  255. data/spec/support/crud.rb +171 -184
  256. data/spec/support/crud/operation.rb +43 -0
  257. data/spec/support/crud/outcome.rb +53 -0
  258. data/spec/support/crud/read.rb +102 -12
  259. data/spec/support/crud/requirement.rb +69 -0
  260. data/spec/support/crud/spec.rb +68 -0
  261. data/spec/support/crud/test.rb +141 -0
  262. data/spec/support/crud/verifier.rb +96 -18
  263. data/spec/support/crud/write.rb +18 -3
  264. data/spec/support/event_subscriber.rb +15 -0
  265. data/spec/support/primary_socket.rb +2 -2
  266. data/spec/support/spec_config.rb +89 -20
  267. data/spec/support/transactions.rb +2 -306
  268. data/spec/support/transactions/operation.rb +7 -7
  269. data/spec/support/transactions/spec.rb +28 -0
  270. data/spec/support/transactions/test.rb +191 -0
  271. data/spec/support/utils.rb +123 -0
  272. metadata +202 -9
  273. metadata.gz.sig +0 -0
  274. data/lib/mongo/server/connection_pool/queue.rb +0 -359
  275. data/spec/mongo/server/connection_pool/queue_spec.rb +0 -353
  276. data/spec/support/transactions/verifier.rb +0 -97
@@ -0,0 +1,64 @@
1
+ runOn:
2
+ -
3
+ minServerVersion: "4.0"
4
+ topology: ["single", "replicaset"]
5
+ -
6
+ minServerVersion: "4.1.7"
7
+ topology: ["sharded"]
8
+
9
+ database_name: &database_name "retryable-reads-tests"
10
+ collection_name: &collection_name "coll"
11
+
12
+ data:
13
+ - { _id: 1, x: 11 }
14
+ - { _id: 2, x: 22 }
15
+
16
+ tests:
17
+ -
18
+ description: "Count succeeds on first attempt"
19
+ operations:
20
+ - &retryable_operation_succeeds
21
+ <<: &retryable_operation
22
+ name: count
23
+ object: collection
24
+ arguments: { filter: { } }
25
+ result: 2
26
+ expectations:
27
+ - &retryable_command_started_event
28
+ command_started_event:
29
+ command:
30
+ count: *collection_name
31
+ database_name: *database_name
32
+ -
33
+ description: "Count succeeds on second attempt"
34
+ failPoint: &failCommand_failPoint
35
+ configureFailPoint: failCommand
36
+ mode: { times: 1 }
37
+ data:
38
+ failCommands: [count]
39
+ closeConnection: true
40
+
41
+ operations: [*retryable_operation_succeeds]
42
+ expectations:
43
+ - *retryable_command_started_event
44
+ - *retryable_command_started_event
45
+ -
46
+ description: "Count fails on first attempt"
47
+ clientOptions:
48
+ retryReads: false
49
+ failPoint: *failCommand_failPoint
50
+ operations:
51
+ - &retryable_operation_fails
52
+ <<: *retryable_operation
53
+ error: true
54
+ expectations:
55
+ - *retryable_command_started_event
56
+ -
57
+ description: "Count fails on second attempt"
58
+ failPoint:
59
+ <<: *failCommand_failPoint
60
+ mode: { times: 2 }
61
+ operations: [*retryable_operation_fails]
62
+ expectations:
63
+ - *retryable_command_started_event
64
+ - *retryable_command_started_event
@@ -0,0 +1,150 @@
1
+ runOn:
2
+ -
3
+ minServerVersion: "4.0"
4
+ topology: ["single", "replicaset"]
5
+ -
6
+ minServerVersion: "4.1.7"
7
+ topology: ["sharded"]
8
+
9
+ database_name: &database_name "retryable-reads-tests"
10
+ collection_name: &collection_name "coll"
11
+
12
+ data:
13
+ - { _id: 1, x: 11 }
14
+ - { _id: 2, x: 22 }
15
+
16
+ tests:
17
+ -
18
+ description: "CountDocuments succeeds after InterruptedAtShutdown"
19
+ failPoint: &failCommand_failPoint
20
+ configureFailPoint: failCommand
21
+ mode: { times: 1 }
22
+ data: { failCommands: [aggregate], errorCode: 11600 }
23
+ operations:
24
+ - &retryable_operation_succeeds
25
+ <<: &retryable_operation
26
+ name: countDocuments
27
+ object: collection
28
+ arguments: { filter: { } }
29
+ result: 2
30
+ expectations:
31
+ - &retryable_command_started_event
32
+ command_started_event:
33
+ command:
34
+ aggregate: *collection_name
35
+ pipeline: [{'$match': {}}, {'$group': {'_id': 1, 'n': {'$sum': 1}}}]
36
+ database_name: *database_name
37
+ - *retryable_command_started_event
38
+ -
39
+ description: "CountDocuments succeeds after InterruptedDueToStepDown"
40
+ failPoint:
41
+ <<: *failCommand_failPoint
42
+ data: { failCommands: [aggregate], errorCode: 11602 }
43
+ operations: [*retryable_operation_succeeds]
44
+ expectations:
45
+ - *retryable_command_started_event
46
+ - *retryable_command_started_event
47
+ -
48
+ description: "CountDocuments succeeds after NotMaster"
49
+ failPoint:
50
+ <<: *failCommand_failPoint
51
+ data: { failCommands: [aggregate], errorCode: 10107 }
52
+ operations: [*retryable_operation_succeeds]
53
+ expectations:
54
+ - *retryable_command_started_event
55
+ - *retryable_command_started_event
56
+ -
57
+ description: "CountDocuments succeeds after NotMasterNoSlaveOk"
58
+ failPoint:
59
+ <<: *failCommand_failPoint
60
+ data: { failCommands: [aggregate], errorCode: 13435 }
61
+ operations: [*retryable_operation_succeeds]
62
+ expectations:
63
+ - *retryable_command_started_event
64
+ - *retryable_command_started_event
65
+ -
66
+ description: "CountDocuments succeeds after NotMasterOrSecondary"
67
+ failPoint:
68
+ <<: *failCommand_failPoint
69
+ data: { failCommands: [aggregate], errorCode: 13436 }
70
+ operations: [*retryable_operation_succeeds]
71
+ expectations:
72
+ - *retryable_command_started_event
73
+ - *retryable_command_started_event
74
+ -
75
+ description: "CountDocuments succeeds after PrimarySteppedDown"
76
+ failPoint:
77
+ <<: *failCommand_failPoint
78
+ data: { failCommands: [aggregate], errorCode: 189 }
79
+ operations: [*retryable_operation_succeeds]
80
+ expectations:
81
+ - *retryable_command_started_event
82
+ - *retryable_command_started_event
83
+ -
84
+ description: "CountDocuments succeeds after ShutdownInProgress"
85
+ failPoint:
86
+ <<: *failCommand_failPoint
87
+ data: { failCommands: [aggregate], errorCode: 91 }
88
+ operations: [*retryable_operation_succeeds]
89
+ expectations:
90
+ - *retryable_command_started_event
91
+ - *retryable_command_started_event
92
+ -
93
+ description: "CountDocuments succeeds after HostNotFound"
94
+ failPoint:
95
+ <<: *failCommand_failPoint
96
+ data: { failCommands: [aggregate], errorCode: 7 }
97
+ operations: [*retryable_operation_succeeds]
98
+ expectations:
99
+ - *retryable_command_started_event
100
+ - *retryable_command_started_event
101
+ -
102
+ description: "CountDocuments succeeds after HostUnreachable"
103
+ failPoint:
104
+ <<: *failCommand_failPoint
105
+ data: { failCommands: [aggregate], errorCode: 6 }
106
+ operations: [*retryable_operation_succeeds]
107
+ expectations:
108
+ - *retryable_command_started_event
109
+ - *retryable_command_started_event
110
+ -
111
+ description: "CountDocuments succeeds after NetworkTimeout"
112
+ failPoint:
113
+ <<: *failCommand_failPoint
114
+ data: { failCommands: [aggregate], errorCode: 89 }
115
+ operations: [*retryable_operation_succeeds]
116
+ expectations:
117
+ - *retryable_command_started_event
118
+ - *retryable_command_started_event
119
+ -
120
+ description: "CountDocuments succeeds after SocketException"
121
+ failPoint:
122
+ <<: *failCommand_failPoint
123
+ data: { failCommands: [aggregate], errorCode: 9001 }
124
+ operations: [*retryable_operation_succeeds]
125
+ expectations:
126
+ - *retryable_command_started_event
127
+ - *retryable_command_started_event
128
+ -
129
+ description: "CountDocuments fails after two NotMaster errors"
130
+ failPoint:
131
+ <<: *failCommand_failPoint
132
+ mode: { times: 2 }
133
+ data: { failCommands: [aggregate], errorCode: 10107 }
134
+ operations:
135
+ - &retryable_operation_fails
136
+ <<: *retryable_operation
137
+ error: true
138
+ expectations:
139
+ - *retryable_command_started_event
140
+ - *retryable_command_started_event
141
+ -
142
+ description: "CountDocuments fails after NotMaster when retryReads is false"
143
+ clientOptions:
144
+ retryReads: false
145
+ failPoint:
146
+ <<: *failCommand_failPoint
147
+ data: { failCommands: [aggregate], errorCode: 10107 }
148
+ operations: [*retryable_operation_fails]
149
+ expectations:
150
+ - *retryable_command_started_event
@@ -0,0 +1,64 @@
1
+ runOn:
2
+ -
3
+ minServerVersion: "4.0"
4
+ topology: ["single", "replicaset"]
5
+ -
6
+ minServerVersion: "4.1.7"
7
+ topology: ["sharded"]
8
+
9
+ database_name: &database_name "retryable-reads-tests"
10
+ collection_name: &collection_name "coll"
11
+
12
+ data:
13
+ - { _id: 1, x: 11 }
14
+ - { _id: 2, x: 22 }
15
+
16
+ tests:
17
+ -
18
+ description: "CountDocuments succeeds on first attempt"
19
+ operations:
20
+ - &retryable_operation_succeeds
21
+ <<: &retryable_operation
22
+ name: countDocuments
23
+ object: collection
24
+ arguments: { filter: { } }
25
+ result: 2
26
+ expectations:
27
+ - &retryable_command_started_event
28
+ command_started_event:
29
+ command:
30
+ aggregate: *collection_name
31
+ pipeline: [{'$match': {}}, {'$group': {'_id': 1, 'n': {'$sum': 1}}}]
32
+ database_name: *database_name
33
+ -
34
+ description: "CountDocuments succeeds on second attempt"
35
+ failPoint: &failCommand_failPoint
36
+ configureFailPoint: failCommand
37
+ mode: { times: 1 }
38
+ data:
39
+ failCommands: [aggregate]
40
+ closeConnection: true
41
+ operations: [*retryable_operation_succeeds]
42
+ expectations:
43
+ - *retryable_command_started_event
44
+ - *retryable_command_started_event
45
+ -
46
+ description: "CountDocuments fails on first attempt"
47
+ clientOptions:
48
+ retryReads: false
49
+ failPoint: *failCommand_failPoint
50
+ operations:
51
+ - &retryable_operation_fails
52
+ <<: *retryable_operation
53
+ error: true
54
+ expectations:
55
+ - *retryable_command_started_event
56
+ -
57
+ description: "CountDocuments fails on second attempt"
58
+ failPoint:
59
+ <<: *failCommand_failPoint
60
+ mode: { times: 2 }
61
+ operations: [*retryable_operation_fails]
62
+ expectations:
63
+ - *retryable_command_started_event
64
+ - *retryable_command_started_event
@@ -0,0 +1,156 @@
1
+ runOn:
2
+ -
3
+ minServerVersion: "4.0"
4
+ topology: ["single", "replicaset"]
5
+ -
6
+ minServerVersion: "4.1.7"
7
+ topology: ["sharded"]
8
+
9
+ database_name: &database_name "retryable-reads-tests"
10
+ collection_name: &collection_name "coll"
11
+
12
+ data:
13
+ - {_id: 1, x: 11}
14
+ - {_id: 2, x: 22}
15
+ - {_id: 3, x: 33}
16
+
17
+ tests:
18
+ -
19
+ description: "Distinct succeeds after InterruptedAtShutdown"
20
+ failPoint: &failCommand_failPoint
21
+ configureFailPoint: failCommand
22
+ mode: { times: 1 }
23
+ data: { failCommands: [distinct], errorCode: 11600 }
24
+ operations:
25
+ - &retryable_operation_succeeds
26
+ <<: &retryable_operation
27
+ name: distinct
28
+ object: collection
29
+ arguments: { fieldName: "x", filter: { _id: { $gt: 1 } } }
30
+ result:
31
+ - 22
32
+ - 33
33
+ expectations:
34
+ - &retryable_command_started_event
35
+ command_started_event:
36
+ command:
37
+ distinct: *collection_name
38
+ key: "x"
39
+ query:
40
+ _id: {$gt: 1}
41
+ database_name: *database_name
42
+ - *retryable_command_started_event
43
+ -
44
+ description: "Distinct succeeds after InterruptedDueToStepDown"
45
+ failPoint:
46
+ <<: *failCommand_failPoint
47
+ data: { failCommands: [distinct], errorCode: 11602 }
48
+ operations: [*retryable_operation_succeeds]
49
+ expectations:
50
+ - *retryable_command_started_event
51
+ - *retryable_command_started_event
52
+ -
53
+ description: "Distinct succeeds after NotMaster"
54
+ failPoint:
55
+ <<: *failCommand_failPoint
56
+ data: { failCommands: [distinct], errorCode: 10107 }
57
+ operations: [*retryable_operation_succeeds]
58
+ expectations:
59
+ - *retryable_command_started_event
60
+ - *retryable_command_started_event
61
+ -
62
+ description: "Distinct succeeds after NotMasterNoSlaveOk"
63
+ failPoint:
64
+ <<: *failCommand_failPoint
65
+ data: { failCommands: [distinct], errorCode: 13435 }
66
+ operations: [*retryable_operation_succeeds]
67
+ expectations:
68
+ - *retryable_command_started_event
69
+ - *retryable_command_started_event
70
+ -
71
+ description: "Distinct succeeds after NotMasterOrSecondary"
72
+ failPoint:
73
+ <<: *failCommand_failPoint
74
+ data: { failCommands: [distinct], errorCode: 13436 }
75
+ operations: [*retryable_operation_succeeds]
76
+ expectations:
77
+ - *retryable_command_started_event
78
+ - *retryable_command_started_event
79
+ -
80
+ description: "Distinct succeeds after PrimarySteppedDown"
81
+ failPoint:
82
+ <<: *failCommand_failPoint
83
+ data: { failCommands: [distinct], errorCode: 189 }
84
+ operations: [*retryable_operation_succeeds]
85
+ expectations:
86
+ - *retryable_command_started_event
87
+ - *retryable_command_started_event
88
+ -
89
+ description: "Distinct succeeds after ShutdownInProgress"
90
+ failPoint:
91
+ <<: *failCommand_failPoint
92
+ data: { failCommands: [distinct], errorCode: 91 }
93
+ operations: [*retryable_operation_succeeds]
94
+ expectations:
95
+ - *retryable_command_started_event
96
+ - *retryable_command_started_event
97
+ -
98
+ description: "Distinct succeeds after HostNotFound"
99
+ failPoint:
100
+ <<: *failCommand_failPoint
101
+ data: { failCommands: [distinct], errorCode: 7 }
102
+ operations: [*retryable_operation_succeeds]
103
+ expectations:
104
+ - *retryable_command_started_event
105
+ - *retryable_command_started_event
106
+ -
107
+ description: "Distinct succeeds after HostUnreachable"
108
+ failPoint:
109
+ <<: *failCommand_failPoint
110
+ data: { failCommands: [distinct], errorCode: 6 }
111
+ operations: [*retryable_operation_succeeds]
112
+ expectations:
113
+ - *retryable_command_started_event
114
+ - *retryable_command_started_event
115
+ -
116
+ description: "Distinct succeeds after NetworkTimeout"
117
+ failPoint:
118
+ <<: *failCommand_failPoint
119
+ data: { failCommands: [distinct], errorCode: 89 }
120
+ operations: [*retryable_operation_succeeds]
121
+ expectations:
122
+ - *retryable_command_started_event
123
+ - *retryable_command_started_event
124
+ -
125
+ description: "Distinct succeeds after SocketException"
126
+ failPoint:
127
+ <<: *failCommand_failPoint
128
+ data: { failCommands: [distinct], errorCode: 9001 }
129
+ operations: [*retryable_operation_succeeds]
130
+ expectations:
131
+ - *retryable_command_started_event
132
+ - *retryable_command_started_event
133
+ -
134
+ description: "Distinct fails after two NotMaster errors"
135
+ failPoint:
136
+ <<: *failCommand_failPoint
137
+ mode: { times: 2 }
138
+ data: { failCommands: [distinct], errorCode: 10107 }
139
+ operations:
140
+ - &retryable_operation_fails
141
+ <<: *retryable_operation
142
+ error: true
143
+ expectations:
144
+ - *retryable_command_started_event
145
+ - *retryable_command_started_event
146
+ -
147
+ description: "Distinct fails after NotMaster when retryReads is false"
148
+ clientOptions:
149
+ retryReads: false
150
+ failPoint:
151
+ <<: *failCommand_failPoint
152
+ data: { failCommands: [distinct], errorCode: 10107 }
153
+ operations: [*retryable_operation_fails]
154
+ expectations:
155
+ - *retryable_command_started_event
156
+
@@ -0,0 +1,71 @@
1
+ runOn:
2
+ -
3
+ minServerVersion: "4.0"
4
+ topology: ["single", "replicaset"]
5
+ -
6
+ minServerVersion: "4.1.7"
7
+ topology: ["sharded"]
8
+
9
+ database_name: &database_name "retryable-reads-tests"
10
+ collection_name: &collection_name "coll"
11
+
12
+ data:
13
+ - {_id: 1, x: 11}
14
+ - {_id: 2, x: 22}
15
+ - {_id: 3, x: 33}
16
+
17
+ tests:
18
+ -
19
+ description: "Distinct succeeds on first attempt"
20
+ operations:
21
+ - &retryable_operation_succeeds
22
+ <<: &retryable_operation
23
+ name: distinct
24
+ object: collection
25
+ arguments: { fieldName: "x", filter: { _id: { $gt: 1 } } }
26
+ result:
27
+ - 22
28
+ - 33
29
+ expectations:
30
+ - &retryable_command_started_event
31
+ command_started_event:
32
+ command:
33
+ distinct: *collection_name
34
+ key: "x"
35
+ query:
36
+ _id: {$gt: 1}
37
+ database_name: *database_name
38
+ -
39
+ description: "Distinct succeeds on second attempt"
40
+ failPoint: &failCommand_failPoint
41
+ configureFailPoint: failCommand
42
+ mode: { times: 1 }
43
+ data:
44
+ failCommands: [distinct]
45
+ closeConnection: true
46
+ operations: [*retryable_operation_succeeds]
47
+ expectations:
48
+ - *retryable_command_started_event
49
+ - *retryable_command_started_event
50
+ -
51
+ description: "Distinct fails on first attempt"
52
+ clientOptions:
53
+ retryReads: false
54
+ failPoint: *failCommand_failPoint
55
+ operations:
56
+ - &retryable_operation_fails
57
+ <<: *retryable_operation
58
+ error: true
59
+ expectations:
60
+ - *retryable_command_started_event
61
+
62
+ -
63
+ description: "Distinct fails on second attempt"
64
+ failPoint:
65
+ <<: *failCommand_failPoint
66
+ mode: { times: 2 }
67
+ operations: [*retryable_operation_fails]
68
+ expectations:
69
+ - *retryable_command_started_event
70
+ - *retryable_command_started_event
71
+