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,149 @@
1
+ runOn:
2
+ -
3
+ minServerVersion: "4.0"
4
+ topology: ["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: "db.coll.watch succeeds after InterruptedAtShutdown"
20
+ failPoint: &failCommand_failPoint
21
+ configureFailPoint: failCommand
22
+ mode: { times: 1 }
23
+ data: { failCommands: [aggregate], errorCode: 11600 }
24
+ operations:
25
+ - &retryable_operation
26
+ name: watch
27
+ object: collection
28
+ expectations:
29
+ - &retryable_command_started_event
30
+ command_started_event:
31
+ command:
32
+ aggregate: *collection_name
33
+ cursor: {}
34
+ pipeline: [ { $changeStream: { fullDocument: "default" } } ]
35
+ database_name: *database_name
36
+ - *retryable_command_started_event
37
+ -
38
+ description: "db.coll.watch succeeds after InterruptedDueToStepDown"
39
+ failPoint:
40
+ <<: *failCommand_failPoint
41
+ data: { failCommands: [aggregate], errorCode: 11602 }
42
+ operations: [*retryable_operation]
43
+ expectations:
44
+ - *retryable_command_started_event
45
+ - *retryable_command_started_event
46
+ -
47
+ description: "db.coll.watch succeeds after NotMaster"
48
+ failPoint:
49
+ <<: *failCommand_failPoint
50
+ data: { failCommands: [aggregate], errorCode: 10107 }
51
+ operations: [*retryable_operation]
52
+ expectations:
53
+ - *retryable_command_started_event
54
+ - *retryable_command_started_event
55
+ -
56
+ description: "db.coll.watch succeeds after NotMasterNoSlaveOk"
57
+ failPoint:
58
+ <<: *failCommand_failPoint
59
+ data: { failCommands: [aggregate], errorCode: 13435 }
60
+ operations: [*retryable_operation]
61
+ expectations:
62
+ - *retryable_command_started_event
63
+ - *retryable_command_started_event
64
+ -
65
+ description: "db.coll.watch succeeds after NotMasterOrSecondary"
66
+ failPoint:
67
+ <<: *failCommand_failPoint
68
+ data: { failCommands: [aggregate], errorCode: 13436 }
69
+ operations: [*retryable_operation]
70
+ expectations:
71
+ - *retryable_command_started_event
72
+ - *retryable_command_started_event
73
+ -
74
+ description: "db.coll.watch succeeds after PrimarySteppedDown"
75
+ failPoint:
76
+ <<: *failCommand_failPoint
77
+ data: { failCommands: [aggregate], errorCode: 189 }
78
+ operations: [*retryable_operation]
79
+ expectations:
80
+ - *retryable_command_started_event
81
+ - *retryable_command_started_event
82
+ -
83
+ description: "db.coll.watch succeeds after ShutdownInProgress"
84
+ failPoint:
85
+ <<: *failCommand_failPoint
86
+ data: { failCommands: [aggregate], errorCode: 91 }
87
+ operations: [*retryable_operation]
88
+ expectations:
89
+ - *retryable_command_started_event
90
+ - *retryable_command_started_event
91
+ -
92
+ description: "db.coll.watch succeeds after HostNotFound"
93
+ failPoint:
94
+ <<: *failCommand_failPoint
95
+ data: { failCommands: [aggregate], errorCode: 7 }
96
+ operations: [*retryable_operation]
97
+ expectations:
98
+ - *retryable_command_started_event
99
+ - *retryable_command_started_event
100
+ -
101
+ description: "db.coll.watch succeeds after HostUnreachable"
102
+ failPoint:
103
+ <<: *failCommand_failPoint
104
+ data: { failCommands: [aggregate], errorCode: 6 }
105
+ operations: [*retryable_operation]
106
+ expectations:
107
+ - *retryable_command_started_event
108
+ - *retryable_command_started_event
109
+ -
110
+ description: "db.coll.watch succeeds after NetworkTimeout"
111
+ failPoint:
112
+ <<: *failCommand_failPoint
113
+ data: { failCommands: [aggregate], errorCode: 89 }
114
+ operations: [*retryable_operation]
115
+ expectations:
116
+ - *retryable_command_started_event
117
+ - *retryable_command_started_event
118
+ -
119
+ description: "db.coll.watch succeeds after SocketException"
120
+ failPoint:
121
+ <<: *failCommand_failPoint
122
+ data: { failCommands: [aggregate], errorCode: 9001 }
123
+ operations: [*retryable_operation]
124
+ expectations:
125
+ - *retryable_command_started_event
126
+ - *retryable_command_started_event
127
+ -
128
+ description: "db.coll.watch fails after two NotMaster errors"
129
+ failPoint:
130
+ <<: *failCommand_failPoint
131
+ mode: { times: 2 }
132
+ data: { failCommands: [aggregate], errorCode: 10107 }
133
+ operations:
134
+ - &retryable_operation_fails
135
+ <<: *retryable_operation
136
+ error: true
137
+ expectations:
138
+ - *retryable_command_started_event
139
+ - *retryable_command_started_event
140
+ -
141
+ description: "db.coll.watch fails after NotMaster when retryReads is false"
142
+ clientOptions:
143
+ retryReads: false
144
+ failPoint:
145
+ <<: *failCommand_failPoint
146
+ data: { failCommands: [aggregate], errorCode: 10107 }
147
+ operations: [*retryable_operation_fails]
148
+ expectations:
149
+ - *retryable_command_started_event
@@ -0,0 +1,65 @@
1
+ runOn:
2
+ -
3
+ minServerVersion: "4.0"
4
+ topology: ["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
+
15
+ tests:
16
+ -
17
+ description: "db.coll.watch succeeds on first attempt"
18
+ operations:
19
+ - &retryable_operation
20
+ name: watch
21
+ object: collection
22
+ expectations:
23
+ - &retryable_command_started_event
24
+ command_started_event:
25
+ command:
26
+ aggregate: *collection_name
27
+ cursor: {}
28
+ pipeline: [ { $changeStream: { fullDocument: "default" } } ]
29
+ database_name: *database_name
30
+ -
31
+ description: "db.coll.watch succeeds on second attempt"
32
+ failPoint: &failCommand_failPoint
33
+ configureFailPoint: failCommand
34
+ mode: { times: 1 }
35
+ data:
36
+ failCommands:
37
+ - aggregate
38
+ closeConnection: true
39
+ operations: [*retryable_operation]
40
+ expectations:
41
+ - *retryable_command_started_event
42
+ - *retryable_command_started_event
43
+ -
44
+ description: "db.coll.watch fails on first attempt"
45
+ clientOptions:
46
+ retryReads: false
47
+ failPoint: *failCommand_failPoint
48
+ operations:
49
+ - &retryable_operation_fails
50
+ <<: *retryable_operation
51
+ error: true
52
+ expectations:
53
+ - *retryable_command_started_event
54
+ -
55
+ description: "db.coll.watch fails on second attempt"
56
+ failPoint:
57
+ <<: *failCommand_failPoint
58
+ mode: { times: 2 }
59
+ operations: [*retryable_operation_fails]
60
+ expectations:
61
+ - *retryable_command_started_event
62
+ - *retryable_command_started_event
63
+
64
+
65
+
@@ -0,0 +1,153 @@
1
+ runOn:
2
+ -
3
+ minServerVersion: "4.0"
4
+ topology: ["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: "db.watch succeeds after InterruptedAtShutdown"
20
+ failPoint: &failCommand_failPoint
21
+ configureFailPoint: failCommand
22
+ mode: { times: 1 }
23
+ data: { failCommands: [aggregate], errorCode: 11600 }
24
+ operations:
25
+ - &retryable_operation
26
+ name: watch
27
+ object: database
28
+ expectations:
29
+ - &retryable_command_started_event
30
+ command_started_event:
31
+ command:
32
+ aggregate: 1
33
+ cursor: {}
34
+ pipeline: [ { $changeStream: { fullDocument: "default" } } ]
35
+ database_name: *database_name
36
+ - *retryable_command_started_event
37
+ -
38
+ description: "db.watch succeeds after InterruptedDueToStepDown"
39
+ failPoint:
40
+ <<: *failCommand_failPoint
41
+ data: { failCommands: [aggregate], errorCode: 11602 }
42
+ operations: [*retryable_operation]
43
+ expectations:
44
+ - *retryable_command_started_event
45
+ - *retryable_command_started_event
46
+ -
47
+ description: "db.watch succeeds after NotMaster"
48
+ failPoint:
49
+ <<: *failCommand_failPoint
50
+ data: { failCommands: [aggregate], errorCode: 10107 }
51
+ operations: [*retryable_operation]
52
+ expectations:
53
+ - *retryable_command_started_event
54
+ - *retryable_command_started_event
55
+ -
56
+ description: "db.watch succeeds after NotMasterNoSlaveOk"
57
+ failPoint:
58
+ <<: *failCommand_failPoint
59
+ data: { failCommands: [aggregate], errorCode: 13435 }
60
+ operations: [*retryable_operation]
61
+ expectations:
62
+ - *retryable_command_started_event
63
+ - *retryable_command_started_event
64
+ -
65
+ description: "db.watch succeeds after NotMasterOrSecondary"
66
+ failPoint:
67
+ <<: *failCommand_failPoint
68
+ data: { failCommands: [aggregate], errorCode: 13436 }
69
+ operations: [*retryable_operation]
70
+ expectations:
71
+ - *retryable_command_started_event
72
+ - *retryable_command_started_event
73
+ -
74
+ description: "db.watch succeeds after PrimarySteppedDown"
75
+ failPoint:
76
+ <<: *failCommand_failPoint
77
+ data: { failCommands: [aggregate], errorCode: 189 }
78
+ operations: [*retryable_operation]
79
+ expectations:
80
+ - *retryable_command_started_event
81
+ - *retryable_command_started_event
82
+ -
83
+ description: "db.watch succeeds after ShutdownInProgress"
84
+ failPoint:
85
+ <<: *failCommand_failPoint
86
+ data: { failCommands: [aggregate], errorCode: 91 }
87
+ operations: [*retryable_operation]
88
+ expectations:
89
+ - *retryable_command_started_event
90
+ - *retryable_command_started_event
91
+ -
92
+ description: "db.watch succeeds after HostNotFound"
93
+ failPoint:
94
+ <<: *failCommand_failPoint
95
+ data: { failCommands: [aggregate], errorCode: 7 }
96
+ operations: [*retryable_operation]
97
+ expectations:
98
+ - *retryable_command_started_event
99
+ - *retryable_command_started_event
100
+ -
101
+ description: "db.watch succeeds after HostUnreachable"
102
+ failPoint:
103
+ <<: *failCommand_failPoint
104
+ data: { failCommands: [aggregate], errorCode: 6 }
105
+ operations: [*retryable_operation]
106
+ expectations:
107
+ - *retryable_command_started_event
108
+ - *retryable_command_started_event
109
+ -
110
+ description: "db.watch succeeds after NetworkTimeout"
111
+ failPoint:
112
+ <<: *failCommand_failPoint
113
+ data: { failCommands: [aggregate], errorCode: 89 }
114
+ operations: [*retryable_operation]
115
+ expectations:
116
+ - *retryable_command_started_event
117
+ - *retryable_command_started_event
118
+ -
119
+ description: "db.watch succeeds after SocketException"
120
+ failPoint:
121
+ <<: *failCommand_failPoint
122
+ data: { failCommands: [aggregate], errorCode: 9001 }
123
+ operations: [*retryable_operation]
124
+ expectations:
125
+ - *retryable_command_started_event
126
+ - *retryable_command_started_event
127
+ -
128
+ description: "db.watch fails after two NotMaster errors"
129
+ failPoint:
130
+ <<: *failCommand_failPoint
131
+ mode: { times: 2 }
132
+ data: { failCommands: [aggregate], errorCode: 10107 }
133
+ operations:
134
+ - &retryable_operation_fails
135
+ <<: *retryable_operation
136
+ error: true
137
+ expectations:
138
+ - *retryable_command_started_event
139
+ - *retryable_command_started_event
140
+ -
141
+ description: "db.watch fails after NotMaster when retryReads is false"
142
+ clientOptions:
143
+ retryReads: false
144
+ failPoint:
145
+ <<: *failCommand_failPoint
146
+ data: { failCommands: [aggregate], errorCode: 10107 }
147
+ operations: [*retryable_operation_fails]
148
+ expectations:
149
+ - *retryable_command_started_event
150
+
151
+
152
+
153
+
@@ -0,0 +1,61 @@
1
+ runOn:
2
+ -
3
+ minServerVersion: "4.0"
4
+ topology: ["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
+
15
+ tests:
16
+ -
17
+ description: "db.watch succeeds on first attempt"
18
+ operations:
19
+ - &retryable_operation
20
+ name: watch
21
+ object: database
22
+ expectations:
23
+ - &retryable_command_started_event
24
+ command_started_event:
25
+ command:
26
+ aggregate: 1
27
+ cursor: {}
28
+ pipeline: [ { $changeStream: { fullDocument: "default" } } ]
29
+ database_name: *database_name
30
+ -
31
+ description: "db.watch succeeds on second attempt"
32
+ failPoint: &failCommand_failPoint
33
+ configureFailPoint: failCommand
34
+ mode: { times: 1 }
35
+ data:
36
+ failCommands: [aggregate]
37
+ closeConnection: true
38
+ operations: [*retryable_operation]
39
+ expectations:
40
+ - *retryable_command_started_event
41
+ - *retryable_command_started_event
42
+ -
43
+ description: "db.watch fails on first attempt"
44
+ clientOptions:
45
+ retryReads: false
46
+ failPoint: *failCommand_failPoint
47
+ operations:
48
+ - &retryable_operation_fails
49
+ <<: *retryable_operation
50
+ error: true
51
+ expectations:
52
+ - *retryable_command_started_event
53
+ -
54
+ description: "db.watch fails on second attempt"
55
+ failPoint:
56
+ <<: *failCommand_failPoint
57
+ mode: { times: 2 }
58
+ operations: [*retryable_operation_fails]
59
+ expectations:
60
+ - *retryable_command_started_event
61
+ - *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: "Count succeeds after InterruptedAtShutdown"
19
+ failPoint: &failCommand_failPoint
20
+ configureFailPoint: failCommand
21
+ mode: { times: 1 }
22
+ data: { failCommands: [count], errorCode: 11600 }
23
+ operations:
24
+ - &retryable_operation_succeeds
25
+ <<: &retryable_operation
26
+ name: count
27
+ object: collection
28
+ arguments: { filter: { } }
29
+ result: 2
30
+ expectations:
31
+ - &retryable_command_started_event
32
+ command_started_event:
33
+ command:
34
+ count: *collection_name
35
+ database_name: *database_name
36
+ - *retryable_command_started_event
37
+ -
38
+ description: "Count succeeds after InterruptedDueToStepDown"
39
+ failPoint:
40
+ <<: *failCommand_failPoint
41
+ data: { failCommands: [count], errorCode: 11602 }
42
+ operations: [*retryable_operation_succeeds]
43
+ expectations:
44
+ - *retryable_command_started_event
45
+ - *retryable_command_started_event
46
+ -
47
+ description: "Count succeeds after NotMaster"
48
+ failPoint:
49
+ <<: *failCommand_failPoint
50
+ data: { failCommands: [count], errorCode: 10107 }
51
+ operations: [*retryable_operation_succeeds]
52
+ expectations:
53
+ - *retryable_command_started_event
54
+ - *retryable_command_started_event
55
+ -
56
+ description: "Count succeeds after NotMasterNoSlaveOk"
57
+ failPoint:
58
+ <<: *failCommand_failPoint
59
+ data: { failCommands: [count], errorCode: 13435 }
60
+ operations: [*retryable_operation_succeeds]
61
+ expectations:
62
+ - *retryable_command_started_event
63
+ - *retryable_command_started_event
64
+ -
65
+ description: "Count succeeds after NotMasterOrSecondary"
66
+ failPoint:
67
+ <<: *failCommand_failPoint
68
+ data: { failCommands: [count], errorCode: 13436 }
69
+ operations: [*retryable_operation_succeeds]
70
+ expectations:
71
+ - *retryable_command_started_event
72
+ - *retryable_command_started_event
73
+ -
74
+ description: "Count succeeds after PrimarySteppedDown"
75
+ failPoint:
76
+ <<: *failCommand_failPoint
77
+ data: { failCommands: [count], errorCode: 189 }
78
+ operations: [*retryable_operation_succeeds]
79
+ expectations:
80
+ - *retryable_command_started_event
81
+ - *retryable_command_started_event
82
+ -
83
+ description: "Count succeeds after ShutdownInProgress"
84
+ failPoint:
85
+ <<: *failCommand_failPoint
86
+ data: { failCommands: [count], errorCode: 91 }
87
+ operations: [*retryable_operation_succeeds]
88
+ expectations:
89
+ - *retryable_command_started_event
90
+ - *retryable_command_started_event
91
+ -
92
+ description: "Count succeeds after HostNotFound"
93
+ failPoint:
94
+ <<: *failCommand_failPoint
95
+ data: { failCommands: [count], errorCode: 7 }
96
+ operations: [*retryable_operation_succeeds]
97
+ expectations:
98
+ - *retryable_command_started_event
99
+ - *retryable_command_started_event
100
+ -
101
+ description: "Count succeeds after HostUnreachable"
102
+ failPoint:
103
+ <<: *failCommand_failPoint
104
+ data: { failCommands: [count], errorCode: 6 }
105
+ operations: [*retryable_operation_succeeds]
106
+ expectations:
107
+ - *retryable_command_started_event
108
+ - *retryable_command_started_event
109
+ -
110
+ description: "Count succeeds after NetworkTimeout"
111
+ failPoint:
112
+ <<: *failCommand_failPoint
113
+ data: { failCommands: [count], errorCode: 89 }
114
+ operations: [*retryable_operation_succeeds]
115
+ expectations:
116
+ - *retryable_command_started_event
117
+ - *retryable_command_started_event
118
+ -
119
+ description: "Count succeeds after SocketException"
120
+ failPoint:
121
+ <<: *failCommand_failPoint
122
+ data: { failCommands: [count], errorCode: 9001 }
123
+ operations: [*retryable_operation_succeeds]
124
+ expectations:
125
+ - *retryable_command_started_event
126
+ - *retryable_command_started_event
127
+ -
128
+ description: "Count fails after two NotMaster errors"
129
+ failPoint:
130
+ <<: *failCommand_failPoint
131
+ mode: { times: 2 }
132
+ data: { failCommands: [count], errorCode: 10107 }
133
+ operations:
134
+ - &retryable_operation_fails
135
+ <<: *retryable_operation
136
+ error: true
137
+ expectations:
138
+ - *retryable_command_started_event
139
+ - *retryable_command_started_event
140
+ -
141
+ description: "Count fails after NotMaster when retryReads is false"
142
+ clientOptions:
143
+ retryReads: false
144
+ failPoint:
145
+ <<: *failCommand_failPoint
146
+ data: { failCommands: [count], errorCode: 10107 }
147
+ operations: [*retryable_operation_fails]
148
+ expectations:
149
+ - *retryable_command_started_event
150
+