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,154 @@
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
+ - {_id: 4, x: 44}
17
+ - {_id: 5, x: 55}
18
+
19
+ tests:
20
+ -
21
+ description: "FindOne succeeds after InterruptedAtShutdown"
22
+ failPoint: &failCommand_failPoint
23
+ configureFailPoint: failCommand
24
+ mode: { times: 1 }
25
+ data: { failCommands: [find], errorCode: 11600 }
26
+ operations:
27
+ - &retryable_operation_succeeds
28
+ <<: &retryable_operation
29
+ name: findOne
30
+ object: collection
31
+ arguments:
32
+ filter: {_id: 1}
33
+ result: {_id: 1, x: 11}
34
+ expectations:
35
+ - &retryable_command_started_event
36
+ command_started_event:
37
+ command:
38
+ find: *collection_name
39
+ filter: {_id: 1}
40
+ database_name: *database_name
41
+ - *retryable_command_started_event
42
+ -
43
+ description: "FindOne succeeds after InterruptedDueToStepDown"
44
+ failPoint:
45
+ <<: *failCommand_failPoint
46
+ data: { failCommands: [find], errorCode: 11602 }
47
+ operations: [*retryable_operation_succeeds]
48
+ expectations:
49
+ - *retryable_command_started_event
50
+ - *retryable_command_started_event
51
+ -
52
+ description: "FindOne succeeds after NotMaster"
53
+ failPoint:
54
+ <<: *failCommand_failPoint
55
+ data: { failCommands: [find], errorCode: 10107 }
56
+ operations: [*retryable_operation_succeeds]
57
+ expectations:
58
+ - *retryable_command_started_event
59
+ - *retryable_command_started_event
60
+ -
61
+ description: "FindOne succeeds after NotMasterNoSlaveOk"
62
+ failPoint:
63
+ <<: *failCommand_failPoint
64
+ data: { failCommands: [find], errorCode: 13435 }
65
+ operations: [*retryable_operation_succeeds]
66
+ expectations:
67
+ - *retryable_command_started_event
68
+ - *retryable_command_started_event
69
+ -
70
+ description: "FindOne succeeds after NotMasterOrSecondary"
71
+ failPoint:
72
+ <<: *failCommand_failPoint
73
+ data: { failCommands: [find], errorCode: 13436 }
74
+ operations: [*retryable_operation_succeeds]
75
+ expectations:
76
+ - *retryable_command_started_event
77
+ - *retryable_command_started_event
78
+ -
79
+ description: "FindOne succeeds after PrimarySteppedDown"
80
+ failPoint:
81
+ <<: *failCommand_failPoint
82
+ data: { failCommands: [find], errorCode: 189 }
83
+ operations: [*retryable_operation_succeeds]
84
+ expectations:
85
+ - *retryable_command_started_event
86
+ - *retryable_command_started_event
87
+ -
88
+ description: "FindOne succeeds after ShutdownInProgress"
89
+ failPoint:
90
+ <<: *failCommand_failPoint
91
+ data: { failCommands: [find], errorCode: 91 }
92
+ operations: [*retryable_operation_succeeds]
93
+ expectations:
94
+ - *retryable_command_started_event
95
+ - *retryable_command_started_event
96
+ -
97
+ description: "FindOne succeeds after HostNotFound"
98
+ failPoint:
99
+ <<: *failCommand_failPoint
100
+ data: { failCommands: [find], errorCode: 7 }
101
+ operations: [*retryable_operation_succeeds]
102
+ expectations:
103
+ - *retryable_command_started_event
104
+ - *retryable_command_started_event
105
+ -
106
+ description: "FindOne succeeds after HostUnreachable"
107
+ failPoint:
108
+ <<: *failCommand_failPoint
109
+ data: { failCommands: [find], errorCode: 6 }
110
+ operations: [*retryable_operation_succeeds]
111
+ expectations:
112
+ - *retryable_command_started_event
113
+ - *retryable_command_started_event
114
+ -
115
+ description: "FindOne succeeds after NetworkTimeout"
116
+ failPoint:
117
+ <<: *failCommand_failPoint
118
+ data: { failCommands: [find], errorCode: 89 }
119
+ operations: [*retryable_operation_succeeds]
120
+ expectations:
121
+ - *retryable_command_started_event
122
+ - *retryable_command_started_event
123
+ -
124
+ description: "FindOne succeeds after SocketException"
125
+ failPoint:
126
+ <<: *failCommand_failPoint
127
+ data: { failCommands: [find], errorCode: 9001 }
128
+ operations: [*retryable_operation_succeeds]
129
+ expectations:
130
+ - *retryable_command_started_event
131
+ - *retryable_command_started_event
132
+ -
133
+ description: "FindOne fails after two NotMaster errors"
134
+ failPoint:
135
+ <<: *failCommand_failPoint
136
+ mode: { times: 2 }
137
+ data: { failCommands: [find], errorCode: 10107 }
138
+ operations:
139
+ - &retryable_operation_fails
140
+ <<: *retryable_operation
141
+ error: true
142
+ expectations:
143
+ - *retryable_command_started_event
144
+ - *retryable_command_started_event
145
+ -
146
+ description: "FindOne fails after NotMaster when retryReads is false"
147
+ clientOptions:
148
+ retryReads: false
149
+ failPoint:
150
+ <<: *failCommand_failPoint
151
+ data: { failCommands: [find], errorCode: 10107 }
152
+ operations: [*retryable_operation_fails]
153
+ expectations:
154
+ - *retryable_command_started_event
@@ -0,0 +1,68 @@
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
+ - {_id: 4, x: 44}
17
+ - {_id: 5, x: 55}
18
+
19
+ tests:
20
+ -
21
+ description: "FindOne succeeds on first attempt"
22
+ operations:
23
+ - &retryable_operation_succeeds
24
+ <<: &retryable_operation
25
+ name: findOne
26
+ object: collection
27
+ arguments: {filter: {_id: 1 }}
28
+ result: {_id: 1, x: 11}
29
+ expectations:
30
+ - &retryable_command_started_event
31
+ command_started_event:
32
+ command:
33
+ find: *collection_name
34
+ filter: {_id: 1}
35
+ database_name: *database_name
36
+ -
37
+ description: "FindOne succeeds on second attempt"
38
+ failPoint: &failCommand_failPoint
39
+ configureFailPoint: failCommand
40
+ mode: { times: 1 }
41
+ data:
42
+ failCommands: [find]
43
+ closeConnection: true
44
+ operations: [*retryable_operation_succeeds]
45
+ expectations:
46
+ - *retryable_command_started_event
47
+ - *retryable_command_started_event
48
+ -
49
+ description: "FindOne fails on first attempt"
50
+ clientOptions:
51
+ retryReads: false
52
+ failPoint: *failCommand_failPoint
53
+ operations:
54
+ - &retryable_operation_fails
55
+ <<: *retryable_operation
56
+ error: true
57
+ expectations:
58
+ - *retryable_command_started_event
59
+ -
60
+ description: "FindOne fails on second attempt"
61
+ failPoint:
62
+ <<: *failCommand_failPoint
63
+ mode: { times: 2 }
64
+ operations: [*retryable_operation_fails]
65
+ expectations:
66
+ - *retryable_command_started_event
67
+ - *retryable_command_started_event
68
+
@@ -0,0 +1,173 @@
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
+ bucket_name: "fs"
11
+
12
+ data:
13
+ fs.files:
14
+ -
15
+ _id: { $oid : "000000000000000000000001" }
16
+ length: 1
17
+ chunkSize: 4
18
+ uploadDate: { $date : "1970-01-01T00:00:00.000Z" }
19
+ filename: abc
20
+ metadata: {}
21
+ fs.chunks:
22
+ - { _id: { $oid: "000000000000000000000002" }, files_id: { $oid: "000000000000000000000001" }, n: 0, data: { $binary: { base64: "EQ==", subType: "00" } } }
23
+
24
+ tests:
25
+ -
26
+ description: "Download succeeds after InterruptedAtShutdown"
27
+ failPoint: &failCommand_failPoint
28
+ configureFailPoint: failCommand
29
+ mode: { times: 1 }
30
+ data: { failCommands: [find], errorCode: 11600 }
31
+ operations:
32
+ - &retryable_operation
33
+ name: download
34
+ object: gridfsbucket
35
+ arguments: { id: { "$oid" : "000000000000000000000001" } }
36
+ expectations:
37
+ - &retryable_command_started_event
38
+ command_started_event:
39
+ command:
40
+ find: fs.files
41
+ filter: { _id: {$oid : "000000000000000000000001" }}
42
+ database_name: *database_name
43
+ - *retryable_command_started_event
44
+ - &find_chunks_command_started_event
45
+ command_started_event:
46
+ command:
47
+ find: fs.chunks
48
+ filter: { files_id: {$oid : "000000000000000000000001" }}
49
+ sort: { n: 1 }
50
+ database_name: *database_name
51
+ -
52
+ description: "Download succeeds after InterruptedDueToStepDown"
53
+ failPoint:
54
+ <<: *failCommand_failPoint
55
+ data: { failCommands: [find], errorCode: 11602 }
56
+ operations: [*retryable_operation]
57
+ expectations:
58
+ - *retryable_command_started_event
59
+ - *retryable_command_started_event
60
+ - *find_chunks_command_started_event
61
+ -
62
+ description: "Download succeeds after NotMaster"
63
+ failPoint:
64
+ <<: *failCommand_failPoint
65
+ data: { failCommands: [find], errorCode: 10107 }
66
+ operations: [*retryable_operation]
67
+ expectations:
68
+ - *retryable_command_started_event
69
+ - *retryable_command_started_event
70
+ - *find_chunks_command_started_event
71
+ -
72
+ description: "Download succeeds after NotMasterNoSlaveOk"
73
+ failPoint:
74
+ <<: *failCommand_failPoint
75
+ data: { failCommands: [find], errorCode: 13435 }
76
+ operations: [*retryable_operation]
77
+ expectations:
78
+ - *retryable_command_started_event
79
+ - *retryable_command_started_event
80
+ - *find_chunks_command_started_event
81
+ -
82
+ description: "Download succeeds after NotMasterOrSecondary"
83
+ failPoint:
84
+ <<: *failCommand_failPoint
85
+ data: { failCommands: [find], errorCode: 13436 }
86
+ operations: [*retryable_operation]
87
+ expectations:
88
+ - *retryable_command_started_event
89
+ - *retryable_command_started_event
90
+ - *find_chunks_command_started_event
91
+ -
92
+ description: "Download succeeds after PrimarySteppedDown"
93
+ failPoint:
94
+ <<: *failCommand_failPoint
95
+ data: { failCommands: [find], errorCode: 189 }
96
+ operations: [*retryable_operation]
97
+ expectations:
98
+ - *retryable_command_started_event
99
+ - *retryable_command_started_event
100
+ - *find_chunks_command_started_event
101
+ -
102
+ description: "Download succeeds after ShutdownInProgress"
103
+ failPoint:
104
+ <<: *failCommand_failPoint
105
+ data: { failCommands: [find], errorCode: 91 }
106
+ operations: [*retryable_operation]
107
+ expectations:
108
+ - *retryable_command_started_event
109
+ - *retryable_command_started_event
110
+ - *find_chunks_command_started_event
111
+ -
112
+ description: "Download succeeds after HostNotFound"
113
+ failPoint:
114
+ <<: *failCommand_failPoint
115
+ data: { failCommands: [find], errorCode: 7 }
116
+ operations: [*retryable_operation]
117
+ expectations:
118
+ - *retryable_command_started_event
119
+ - *retryable_command_started_event
120
+ - *find_chunks_command_started_event
121
+ -
122
+ description: "Download succeeds after HostUnreachable"
123
+ failPoint:
124
+ <<: *failCommand_failPoint
125
+ data: { failCommands: [find], errorCode: 6 }
126
+ operations: [*retryable_operation]
127
+ expectations:
128
+ - *retryable_command_started_event
129
+ - *retryable_command_started_event
130
+ - *find_chunks_command_started_event
131
+ -
132
+ description: "Download succeeds after NetworkTimeout"
133
+ failPoint:
134
+ <<: *failCommand_failPoint
135
+ data: { failCommands: [find], errorCode: 89 }
136
+ operations: [*retryable_operation]
137
+ expectations:
138
+ - *retryable_command_started_event
139
+ - *retryable_command_started_event
140
+ - *find_chunks_command_started_event
141
+ -
142
+ description: "Download succeeds after SocketException"
143
+ failPoint:
144
+ <<: *failCommand_failPoint
145
+ data: { failCommands: [find], errorCode: 9001 }
146
+ operations: [*retryable_operation]
147
+ expectations:
148
+ - *retryable_command_started_event
149
+ - *retryable_command_started_event
150
+ - *find_chunks_command_started_event
151
+ -
152
+ description: "Download fails after two NotMaster errors"
153
+ failPoint:
154
+ <<: *failCommand_failPoint
155
+ mode: { times: 2 }
156
+ data: { failCommands: [find], errorCode: 10107 }
157
+ operations:
158
+ - &retryable_operation_fails
159
+ <<: *retryable_operation
160
+ error: true
161
+ expectations:
162
+ - *retryable_command_started_event
163
+ - *retryable_command_started_event
164
+ -
165
+ description: "Download fails after NotMaster when retryReads is false"
166
+ clientOptions:
167
+ retryReads: false
168
+ failPoint:
169
+ <<: *failCommand_failPoint
170
+ data: { failCommands: [find], errorCode: 10107 }
171
+ operations: [*retryable_operation_fails]
172
+ expectations:
173
+ - *retryable_command_started_event
@@ -0,0 +1,79 @@
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
+ bucket_name: "fs"
11
+
12
+ data:
13
+ fs.files:
14
+ -
15
+ _id: { $oid : "000000000000000000000001" }
16
+ length: 1
17
+ chunkSize: 4
18
+ uploadDate: { $date : "1970-01-01T00:00:00.000Z" }
19
+ filename: abc
20
+ metadata: {}
21
+ fs.chunks:
22
+ - { _id: { $oid: "000000000000000000000002" }, files_id: { $oid: "000000000000000000000001" }, n: 0, data: { $binary: { base64: "EQ==", subType: "00" } } }
23
+
24
+ tests:
25
+ -
26
+ description: "Download succeeds on first attempt"
27
+ operations:
28
+ - &retryable_operation
29
+ name: download
30
+ object: gridfsbucket
31
+ arguments: { id: { "$oid" : "000000000000000000000001" } }
32
+ expectations:
33
+ - &retryable_command_started_event
34
+ command_started_event:
35
+ command:
36
+ find: fs.files
37
+ filter: { _id: {$oid : "000000000000000000000001" }}
38
+ database_name: *database_name
39
+ - &find_chunks_command_started_event
40
+ command_started_event:
41
+ command:
42
+ find: fs.chunks
43
+ filter: { files_id: {$oid : "000000000000000000000001" }}
44
+ sort: { n: 1 }
45
+ database_name: *database_name
46
+ -
47
+ description: "Download succeeds on second attempt"
48
+ failPoint: &failCommand_failPoint
49
+ configureFailPoint: failCommand
50
+ mode: { times: 1 }
51
+ data:
52
+ failCommands: [find]
53
+ closeConnection: true
54
+ operations: [*retryable_operation]
55
+ expectations:
56
+ - *retryable_command_started_event
57
+ - *retryable_command_started_event
58
+ - *find_chunks_command_started_event
59
+ -
60
+ description: "Download fails on first attempt"
61
+ clientOptions:
62
+ retryReads: false
63
+ failPoint: *failCommand_failPoint
64
+ operations:
65
+ - &retryable_operation_fails
66
+ <<: *retryable_operation
67
+ error: true
68
+ expectations:
69
+ - *retryable_command_started_event
70
+ -
71
+ description: "Download fails on second attempt"
72
+ failPoint:
73
+ <<: *failCommand_failPoint
74
+ mode: { times: 2 }
75
+ operations: [*retryable_operation_fails]
76
+ expectations:
77
+ - *retryable_command_started_event
78
+ - *retryable_command_started_event
79
+