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