mongo 2.13.0.beta1 → 2.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (339) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +1 -5
  4. data/Rakefile +50 -9
  5. data/lib/mongo.rb +13 -2
  6. data/lib/mongo/address.rb +1 -1
  7. data/lib/mongo/address/ipv4.rb +1 -1
  8. data/lib/mongo/address/ipv6.rb +1 -1
  9. data/lib/mongo/auth/aws/request.rb +31 -5
  10. data/lib/mongo/bulk_write.rb +18 -0
  11. data/lib/mongo/caching_cursor.rb +74 -0
  12. data/lib/mongo/client.rb +238 -31
  13. data/lib/mongo/cluster.rb +56 -20
  14. data/lib/mongo/cluster/sdam_flow.rb +13 -10
  15. data/lib/mongo/cluster/topology/replica_set_no_primary.rb +3 -2
  16. data/lib/mongo/cluster/topology/sharded.rb +1 -1
  17. data/lib/mongo/cluster/topology/single.rb +2 -2
  18. data/lib/mongo/collection.rb +66 -24
  19. data/lib/mongo/collection/view.rb +24 -20
  20. data/lib/mongo/collection/view/aggregation.rb +25 -4
  21. data/lib/mongo/collection/view/builder/find_command.rb +38 -18
  22. data/lib/mongo/collection/view/explainable.rb +27 -8
  23. data/lib/mongo/collection/view/iterable.rb +72 -12
  24. data/lib/mongo/collection/view/readable.rb +19 -3
  25. data/lib/mongo/collection/view/writable.rb +55 -5
  26. data/lib/mongo/crypt/encryption_io.rb +6 -6
  27. data/lib/mongo/cursor.rb +16 -3
  28. data/lib/mongo/database.rb +37 -4
  29. data/lib/mongo/database/view.rb +18 -3
  30. data/lib/mongo/distinguishing_semaphore.rb +55 -0
  31. data/lib/mongo/error.rb +5 -0
  32. data/lib/mongo/error/invalid_read_concern.rb +28 -0
  33. data/lib/mongo/error/invalid_server_auth_host.rb +22 -0
  34. data/lib/mongo/error/invalid_session.rb +2 -1
  35. data/lib/mongo/error/operation_failure.rb +11 -5
  36. data/lib/mongo/error/server_certificate_revoked.rb +22 -0
  37. data/lib/mongo/error/sessions_not_supported.rb +35 -0
  38. data/lib/mongo/error/unsupported_option.rb +14 -12
  39. data/lib/mongo/event/base.rb +6 -0
  40. data/lib/mongo/grid/file.rb +5 -0
  41. data/lib/mongo/grid/file/chunk.rb +2 -0
  42. data/lib/mongo/grid/fs_bucket.rb +15 -13
  43. data/lib/mongo/grid/stream/write.rb +9 -3
  44. data/lib/mongo/index/view.rb +3 -0
  45. data/lib/mongo/lint.rb +2 -1
  46. data/lib/mongo/logger.rb +3 -3
  47. data/lib/mongo/monitoring.rb +38 -0
  48. data/lib/mongo/monitoring/command_log_subscriber.rb +10 -2
  49. data/lib/mongo/monitoring/event/command_failed.rb +11 -0
  50. data/lib/mongo/monitoring/event/command_started.rb +37 -2
  51. data/lib/mongo/monitoring/event/command_succeeded.rb +11 -0
  52. data/lib/mongo/monitoring/event/server_closed.rb +1 -1
  53. data/lib/mongo/monitoring/event/server_description_changed.rb +27 -4
  54. data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +9 -2
  55. data/lib/mongo/monitoring/event/server_heartbeat_started.rb +9 -2
  56. data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +9 -2
  57. data/lib/mongo/monitoring/event/server_opening.rb +1 -1
  58. data/lib/mongo/monitoring/event/topology_changed.rb +1 -1
  59. data/lib/mongo/monitoring/event/topology_closed.rb +1 -1
  60. data/lib/mongo/monitoring/event/topology_opening.rb +1 -1
  61. data/lib/mongo/monitoring/publishable.rb +6 -3
  62. data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +9 -1
  63. data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +1 -1
  64. data/lib/mongo/operation.rb +2 -0
  65. data/lib/mongo/operation/aggregate/result.rb +9 -8
  66. data/lib/mongo/operation/collections_info/command.rb +5 -0
  67. data/lib/mongo/operation/collections_info/result.rb +18 -1
  68. data/lib/mongo/operation/delete/bulk_result.rb +2 -0
  69. data/lib/mongo/operation/delete/result.rb +3 -0
  70. data/lib/mongo/operation/explain/command.rb +4 -0
  71. data/lib/mongo/operation/explain/legacy.rb +4 -0
  72. data/lib/mongo/operation/explain/op_msg.rb +6 -0
  73. data/lib/mongo/operation/explain/result.rb +3 -0
  74. data/lib/mongo/operation/find/legacy/result.rb +2 -0
  75. data/lib/mongo/operation/find/result.rb +13 -0
  76. data/lib/mongo/operation/get_more/result.rb +3 -0
  77. data/lib/mongo/operation/indexes/result.rb +5 -0
  78. data/lib/mongo/operation/insert/bulk_result.rb +5 -0
  79. data/lib/mongo/operation/insert/result.rb +5 -0
  80. data/lib/mongo/operation/list_collections/result.rb +5 -0
  81. data/lib/mongo/operation/map_reduce/result.rb +10 -0
  82. data/lib/mongo/operation/parallel_scan/result.rb +4 -0
  83. data/lib/mongo/operation/result.rb +35 -6
  84. data/lib/mongo/operation/shared/bypass_document_validation.rb +1 -0
  85. data/lib/mongo/operation/shared/causal_consistency_supported.rb +1 -0
  86. data/lib/mongo/operation/shared/collections_info_or_list_collections.rb +2 -0
  87. data/lib/mongo/operation/shared/executable.rb +1 -0
  88. data/lib/mongo/operation/shared/idable.rb +2 -1
  89. data/lib/mongo/operation/shared/limited.rb +1 -0
  90. data/lib/mongo/operation/shared/object_id_generator.rb +1 -0
  91. data/lib/mongo/operation/shared/result/aggregatable.rb +1 -0
  92. data/lib/mongo/operation/shared/sessions_supported.rb +1 -0
  93. data/lib/mongo/operation/shared/specifiable.rb +1 -0
  94. data/lib/mongo/operation/shared/write.rb +1 -0
  95. data/lib/mongo/operation/shared/write_concern_supported.rb +1 -0
  96. data/lib/mongo/operation/update/legacy/result.rb +7 -0
  97. data/lib/mongo/operation/update/result.rb +8 -0
  98. data/lib/mongo/operation/users_info/result.rb +3 -0
  99. data/lib/mongo/protocol/message.rb +47 -10
  100. data/lib/mongo/protocol/msg.rb +34 -1
  101. data/lib/mongo/protocol/query.rb +36 -0
  102. data/lib/mongo/protocol/serializers.rb +5 -2
  103. data/lib/mongo/query_cache.rb +242 -0
  104. data/lib/mongo/retryable.rb +8 -1
  105. data/lib/mongo/server.rb +15 -4
  106. data/lib/mongo/server/app_metadata.rb +27 -3
  107. data/lib/mongo/server/connection.rb +4 -4
  108. data/lib/mongo/server/connection_base.rb +38 -12
  109. data/lib/mongo/server/connection_common.rb +2 -2
  110. data/lib/mongo/server/connection_pool.rb +3 -0
  111. data/lib/mongo/server/description.rb +13 -1
  112. data/lib/mongo/server/monitor.rb +76 -44
  113. data/lib/mongo/server/monitor/connection.rb +57 -9
  114. data/lib/mongo/server/pending_connection.rb +14 -4
  115. data/lib/mongo/server/push_monitor.rb +173 -0
  116. data/{spec/runners/transactions/context.rb → lib/mongo/server/push_monitor/connection.rb} +9 -14
  117. data/lib/mongo/server_selector.rb +0 -1
  118. data/lib/mongo/server_selector/base.rb +583 -1
  119. data/lib/mongo/server_selector/nearest.rb +1 -6
  120. data/lib/mongo/server_selector/primary.rb +1 -6
  121. data/lib/mongo/server_selector/primary_preferred.rb +7 -10
  122. data/lib/mongo/server_selector/secondary.rb +1 -6
  123. data/lib/mongo/server_selector/secondary_preferred.rb +1 -7
  124. data/lib/mongo/session.rb +7 -1
  125. data/lib/mongo/socket.rb +26 -12
  126. data/lib/mongo/socket/ocsp_cache.rb +97 -0
  127. data/lib/mongo/socket/ocsp_verifier.rb +368 -0
  128. data/lib/mongo/socket/ssl.rb +46 -25
  129. data/lib/mongo/socket/tcp.rb +1 -1
  130. data/lib/mongo/srv/monitor.rb +7 -13
  131. data/lib/mongo/srv/resolver.rb +14 -10
  132. data/lib/mongo/timeout.rb +2 -0
  133. data/lib/mongo/topology_version.rb +9 -0
  134. data/lib/mongo/uri.rb +21 -390
  135. data/lib/mongo/uri/options_mapper.rb +582 -0
  136. data/lib/mongo/uri/srv_protocol.rb +3 -2
  137. data/lib/mongo/utils.rb +73 -0
  138. data/lib/mongo/version.rb +1 -1
  139. data/spec/NOTES.aws-auth.md +12 -7
  140. data/spec/README.aws-auth.md +2 -2
  141. data/spec/README.md +63 -1
  142. data/spec/integration/awaited_ismaster_spec.rb +28 -0
  143. data/spec/integration/bson_symbol_spec.rb +4 -2
  144. data/spec/integration/bulk_write_spec.rb +67 -0
  145. data/spec/integration/change_stream_examples_spec.rb +6 -2
  146. data/spec/integration/change_stream_spec.rb +1 -1
  147. data/spec/integration/check_clean_slate_spec.rb +16 -0
  148. data/spec/integration/client_authentication_options_spec.rb +92 -28
  149. data/spec/integration/client_construction_spec.rb +1 -0
  150. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +9 -5
  151. data/spec/integration/connect_single_rs_name_spec.rb +5 -2
  152. data/spec/integration/connection_pool_populator_spec.rb +4 -2
  153. data/spec/integration/connection_spec.rb +7 -4
  154. data/spec/integration/crud_spec.rb +4 -4
  155. data/spec/integration/cursor_reaping_spec.rb +54 -18
  156. data/spec/integration/docs_examples_spec.rb +6 -0
  157. data/spec/integration/fork_reconnect_spec.rb +56 -1
  158. data/spec/integration/grid_fs_bucket_spec.rb +48 -0
  159. data/spec/integration/heartbeat_events_spec.rb +4 -23
  160. data/spec/integration/ocsp_connectivity_spec.rb +26 -0
  161. data/spec/integration/ocsp_verifier_cache_spec.rb +188 -0
  162. data/spec/integration/ocsp_verifier_spec.rb +334 -0
  163. data/spec/integration/query_cache_spec.rb +1045 -0
  164. data/spec/integration/query_cache_transactions_spec.rb +190 -0
  165. data/spec/integration/read_concern_spec.rb +1 -1
  166. data/spec/integration/retryable_errors_spec.rb +1 -1
  167. data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +1 -0
  168. data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +4 -2
  169. data/spec/integration/retryable_writes/shared/performs_modern_retries.rb +3 -3
  170. data/spec/integration/retryable_writes/shared/performs_no_retries.rb +2 -2
  171. data/spec/integration/sdam_error_handling_spec.rb +122 -15
  172. data/spec/integration/sdam_events_spec.rb +80 -6
  173. data/spec/integration/sdam_prose_spec.rb +64 -0
  174. data/spec/integration/server_monitor_spec.rb +25 -1
  175. data/spec/integration/server_selection_spec.rb +36 -0
  176. data/spec/integration/size_limit_spec.rb +23 -5
  177. data/spec/integration/srv_monitoring_spec.rb +38 -3
  178. data/spec/integration/srv_spec.rb +56 -0
  179. data/spec/integration/ssl_uri_options_spec.rb +2 -2
  180. data/spec/integration/transactions_examples_spec.rb +17 -7
  181. data/spec/integration/zlib_compression_spec.rb +25 -0
  182. data/spec/lite_spec_helper.rb +20 -9
  183. data/spec/mongo/address_spec.rb +1 -1
  184. data/spec/mongo/auth/aws/request_region_spec.rb +42 -0
  185. data/spec/mongo/auth/aws/request_spec.rb +76 -0
  186. data/spec/mongo/auth/scram_spec.rb +1 -1
  187. data/spec/mongo/auth/user_spec.rb +1 -1
  188. data/spec/mongo/bulk_write_spec.rb +2 -2
  189. data/spec/mongo/caching_cursor_spec.rb +70 -0
  190. data/spec/mongo/client_construction_spec.rb +386 -3
  191. data/spec/mongo/client_encryption_spec.rb +16 -10
  192. data/spec/mongo/client_spec.rb +85 -3
  193. data/spec/mongo/cluster/topology/replica_set_spec.rb +53 -10
  194. data/spec/mongo/cluster/topology/sharded_spec.rb +1 -1
  195. data/spec/mongo/cluster/topology/single_spec.rb +19 -8
  196. data/spec/mongo/cluster/topology/unknown_spec.rb +1 -1
  197. data/spec/mongo/cluster/topology_spec.rb +1 -1
  198. data/spec/mongo/cluster_spec.rb +37 -35
  199. data/spec/mongo/collection/view/change_stream_resume_spec.rb +7 -7
  200. data/spec/mongo/collection/view/explainable_spec.rb +87 -4
  201. data/spec/mongo/collection/view/map_reduce_spec.rb +2 -0
  202. data/spec/mongo/collection/view/readable_spec.rb +36 -0
  203. data/spec/mongo/collection_spec.rb +572 -0
  204. data/spec/mongo/crypt/auto_decryption_context_spec.rb +1 -1
  205. data/spec/mongo/crypt/auto_encryption_context_spec.rb +1 -1
  206. data/spec/mongo/crypt/binary_spec.rb +1 -6
  207. data/spec/mongo/crypt/binding/binary_spec.rb +1 -6
  208. data/spec/mongo/crypt/binding/context_spec.rb +2 -7
  209. data/spec/mongo/crypt/binding/helpers_spec.rb +1 -6
  210. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +2 -7
  211. data/spec/mongo/crypt/binding/status_spec.rb +1 -6
  212. data/spec/mongo/crypt/binding/version_spec.rb +1 -6
  213. data/spec/mongo/crypt/data_key_context_spec.rb +1 -1
  214. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +1 -1
  215. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +1 -1
  216. data/spec/mongo/crypt/status_spec.rb +1 -6
  217. data/spec/mongo/database_spec.rb +353 -8
  218. data/spec/mongo/distinguishing_semaphore_spec.rb +63 -0
  219. data/spec/mongo/error/no_server_available_spec.rb +1 -1
  220. data/spec/mongo/error/operation_failure_spec.rb +40 -0
  221. data/spec/mongo/index/view_spec.rb +148 -2
  222. data/spec/mongo/logger_spec.rb +13 -11
  223. data/spec/mongo/monitoring/event/server_closed_spec.rb +1 -1
  224. data/spec/mongo/monitoring/event/server_description_changed_spec.rb +1 -4
  225. data/spec/mongo/monitoring/event/server_opening_spec.rb +1 -1
  226. data/spec/mongo/monitoring/event/topology_changed_spec.rb +1 -1
  227. data/spec/mongo/monitoring/event/topology_closed_spec.rb +1 -1
  228. data/spec/mongo/monitoring/event/topology_opening_spec.rb +1 -1
  229. data/spec/mongo/operation/delete/op_msg_spec.rb +3 -3
  230. data/spec/mongo/operation/insert/command_spec.rb +2 -2
  231. data/spec/mongo/operation/insert/op_msg_spec.rb +3 -3
  232. data/spec/mongo/operation/read_preference_op_msg_spec.rb +1 -1
  233. data/spec/mongo/operation/update/command_spec.rb +2 -2
  234. data/spec/mongo/operation/update/op_msg_spec.rb +3 -3
  235. data/spec/mongo/protocol/msg_spec.rb +10 -0
  236. data/spec/mongo/query_cache_spec.rb +280 -0
  237. data/spec/mongo/semaphore_spec.rb +51 -0
  238. data/spec/mongo/server/app_metadata_shared.rb +82 -2
  239. data/spec/mongo/server/connection_auth_spec.rb +2 -2
  240. data/spec/mongo/server/connection_pool_spec.rb +7 -3
  241. data/spec/mongo/server/connection_spec.rb +15 -8
  242. data/spec/mongo/server/description_spec.rb +18 -0
  243. data/spec/mongo/server_selector/nearest_spec.rb +23 -23
  244. data/spec/mongo/server_selector/primary_preferred_spec.rb +26 -26
  245. data/spec/mongo/server_selector/primary_spec.rb +9 -9
  246. data/spec/mongo/server_selector/secondary_preferred_spec.rb +22 -22
  247. data/spec/mongo/server_selector/secondary_spec.rb +18 -18
  248. data/spec/mongo/server_selector_spec.rb +6 -6
  249. data/spec/mongo/session_spec.rb +35 -0
  250. data/spec/mongo/socket/ssl_spec.rb +4 -4
  251. data/spec/mongo/socket_spec.rb +1 -1
  252. data/spec/mongo/uri/srv_protocol_spec.rb +64 -33
  253. data/spec/mongo/uri_option_parsing_spec.rb +11 -11
  254. data/spec/mongo/uri_spec.rb +68 -41
  255. data/spec/mongo/utils_spec.rb +39 -0
  256. data/spec/runners/auth.rb +3 -0
  257. data/spec/runners/change_streams/test.rb +3 -3
  258. data/spec/runners/cmap.rb +1 -1
  259. data/spec/runners/command_monitoring.rb +3 -34
  260. data/spec/runners/connection_string.rb +35 -124
  261. data/spec/runners/crud/context.rb +9 -5
  262. data/spec/runners/crud/operation.rb +59 -27
  263. data/spec/runners/crud/spec.rb +0 -8
  264. data/spec/runners/crud/test.rb +1 -1
  265. data/spec/runners/crud/test_base.rb +0 -19
  266. data/spec/runners/sdam.rb +2 -2
  267. data/spec/runners/server_selection.rb +242 -28
  268. data/spec/runners/transactions.rb +12 -12
  269. data/spec/runners/transactions/operation.rb +151 -25
  270. data/spec/runners/transactions/test.rb +62 -18
  271. data/spec/shared/LICENSE +20 -0
  272. data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
  273. data/spec/shared/lib/mrss/constraints.rb +303 -0
  274. data/spec/shared/lib/mrss/lite_constraints.rb +175 -0
  275. data/spec/shared/lib/mrss/spec_organizer.rb +149 -0
  276. data/spec/spec_helper.rb +3 -1
  277. data/spec/spec_tests/cmap_spec.rb +7 -3
  278. data/spec/spec_tests/command_monitoring_spec.rb +22 -12
  279. data/spec/spec_tests/crud_spec.rb +1 -1
  280. data/spec/spec_tests/data/change_streams/change-streams-errors.yml +4 -9
  281. data/spec/spec_tests/data/change_streams/change-streams-resume-whitelist.yml +66 -0
  282. data/spec/spec_tests/data/change_streams/change-streams.yml +0 -1
  283. data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +6 -2
  284. data/spec/spec_tests/data/cmap/pool-create-min-size.yml +3 -0
  285. data/spec/spec_tests/data/connection_string/valid-warnings.yml +24 -0
  286. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/MaxStalenessTooSmall.yml +15 -0
  287. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/NoKnownServers.yml +4 -3
  288. data/spec/spec_tests/data/max_staleness/Unknown/SmallMaxStaleness.yml +1 -0
  289. data/spec/spec_tests/data/sdam_integration/cancel-server-check.yml +96 -0
  290. data/spec/spec_tests/data/sdam_integration/connectTimeoutMS.yml +88 -0
  291. data/spec/spec_tests/data/sdam_integration/find-network-error.yml +83 -0
  292. data/spec/spec_tests/data/sdam_integration/find-shutdown-error.yml +116 -0
  293. data/spec/spec_tests/data/sdam_integration/insert-network-error.yml +86 -0
  294. data/spec/spec_tests/data/sdam_integration/insert-shutdown-error.yml +115 -0
  295. data/spec/spec_tests/data/sdam_integration/isMaster-command-error.yml +168 -0
  296. data/spec/spec_tests/data/sdam_integration/isMaster-network-error.yml +162 -0
  297. data/spec/spec_tests/data/sdam_integration/isMaster-timeout.yml +229 -0
  298. data/spec/spec_tests/data/sdam_integration/rediscover-quickly-after-step-down.yml +87 -0
  299. data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +1 -3
  300. data/spec/spec_tests/data/sdam_monitoring/standalone.yml +2 -2
  301. data/spec/spec_tests/data/sdam_monitoring/standalone_repeated.yml +2 -2
  302. data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +2 -2
  303. data/spec/spec_tests/data/sdam_monitoring/standalone_to_rs_with_me_mismatch.yml +2 -2
  304. data/spec/spec_tests/data/uri_options/auth-options.yml +25 -0
  305. data/spec/spec_tests/data/uri_options/compression-options.yml +6 -3
  306. data/spec/spec_tests/data/uri_options/read-preference-options.yml +24 -0
  307. data/spec/spec_tests/data/uri_options/ruby-connection-options.yml +1 -0
  308. data/spec/spec_tests/data/uri_options/tls-options.yml +160 -4
  309. data/spec/spec_tests/dns_seedlist_discovery_spec.rb +9 -1
  310. data/spec/spec_tests/max_staleness_spec.rb +4 -142
  311. data/spec/spec_tests/retryable_reads_spec.rb +2 -2
  312. data/spec/spec_tests/sdam_integration_spec.rb +13 -0
  313. data/spec/spec_tests/sdam_monitoring_spec.rb +1 -2
  314. data/spec/spec_tests/server_selection_spec.rb +4 -116
  315. data/spec/spec_tests/uri_options_spec.rb +31 -33
  316. data/spec/stress/cleanup_spec.rb +17 -2
  317. data/spec/stress/connection_pool_stress_spec.rb +10 -8
  318. data/spec/stress/fork_reconnect_stress_spec.rb +1 -1
  319. data/spec/support/certificates/atlas-ocsp-ca.crt +28 -0
  320. data/spec/support/certificates/atlas-ocsp.crt +41 -0
  321. data/spec/support/client_registry.rb +1 -0
  322. data/spec/support/client_registry_macros.rb +11 -2
  323. data/spec/support/cluster_config.rb +4 -0
  324. data/spec/support/common_shortcuts.rb +45 -0
  325. data/spec/support/constraints.rb +6 -253
  326. data/spec/support/event_subscriber.rb +123 -33
  327. data/spec/support/keyword_struct.rb +26 -0
  328. data/spec/support/matchers.rb +16 -0
  329. data/spec/support/ocsp +1 -0
  330. data/spec/support/session_registry.rb +52 -0
  331. data/spec/support/shared/server_selector.rb +13 -1
  332. data/spec/support/spec_config.rb +60 -13
  333. data/spec/support/spec_setup.rb +1 -1
  334. data/spec/support/utils.rb +84 -1
  335. metadata +1027 -937
  336. metadata.gz.sig +0 -0
  337. data/lib/mongo/server_selector/selectable.rb +0 -560
  338. data/spec/runners/sdam_monitoring.rb +0 -89
  339. data/spec/support/lite_constraints.rb +0 -141
@@ -0,0 +1,86 @@
1
+ # Test SDAM error handling.
2
+ runOn:
3
+ # failCommand appName requirements
4
+ - minServerVersion: "4.4"
5
+
6
+ database_name: &database_name "sdam-tests"
7
+ collection_name: &collection_name "insert-network-error"
8
+
9
+ data: &data
10
+ - {_id: 1}
11
+ - {_id: 2}
12
+
13
+ tests:
14
+ - description: Reset server and pool after network error on insert
15
+ failPoint:
16
+ configureFailPoint: failCommand
17
+ mode: { times: 1 }
18
+ data:
19
+ failCommands: ["insert"]
20
+ closeConnection: true
21
+ appName: insertNetworkErrorTest
22
+ clientOptions:
23
+ retryWrites: false
24
+ appname: insertNetworkErrorTest
25
+ operations:
26
+ - name: insertMany
27
+ object: collection
28
+ arguments:
29
+ documents:
30
+ - _id: 3
31
+ - _id: 4
32
+ error: true
33
+ - name: waitForEvent
34
+ object: testRunner
35
+ arguments:
36
+ event: ServerMarkedUnknownEvent
37
+ count: 1
38
+ - name: waitForEvent
39
+ object: testRunner
40
+ arguments:
41
+ event: PoolClearedEvent
42
+ count: 1
43
+ # Perform another operation to ensure the node is rediscovered.
44
+ - name: insertMany
45
+ object: collection
46
+ arguments:
47
+ documents:
48
+ - _id: 5
49
+ - _id: 6
50
+ # Assert the server was marked Unknown and pool was cleared exactly once.
51
+ - name: assertEventCount
52
+ object: testRunner
53
+ arguments:
54
+ event: ServerMarkedUnknownEvent
55
+ count: 1
56
+ - name: assertEventCount
57
+ object: testRunner
58
+ arguments:
59
+ event: PoolClearedEvent
60
+ count: 1
61
+
62
+ expectations:
63
+ - command_started_event:
64
+ command:
65
+ insert: *collection_name
66
+ documents:
67
+ - _id: 3
68
+ - _id: 4
69
+ command_name: insert
70
+ database_name: *database_name
71
+ - command_started_event:
72
+ command:
73
+ insert: *collection_name
74
+ documents:
75
+ - _id: 5
76
+ - _id: 6
77
+ command_name: insert
78
+ database_name: *database_name
79
+
80
+ outcome:
81
+ collection:
82
+ data:
83
+ - {_id: 1}
84
+ - {_id: 2}
85
+ - {_id: 5}
86
+ - {_id: 6}
@@ -0,0 +1,115 @@
1
+ # Test SDAM error handling.
2
+ runOn:
3
+ # failCommand appName requirements
4
+ - minServerVersion: "4.4"
5
+
6
+ database_name: &database_name "sdam-tests"
7
+ collection_name: &collection_name "insert-shutdown-error"
8
+
9
+ data: []
10
+
11
+ tests:
12
+ - description: Concurrent shutdown error on insert
13
+ clientOptions:
14
+ retryWrites: false
15
+ heartbeatFrequencyMS: 500
16
+ appname: shutdownErrorInsertTest
17
+ operations:
18
+ # Perform an operation to ensure the node is discovered.
19
+ - name: insertOne
20
+ object: collection
21
+ arguments:
22
+ document:
23
+ _id: 1
24
+ # Configure the next two inserts to fail with a non-timeout shutdown
25
+ # errors. Block the connection for 500ms to ensure both operations check
26
+ # out connections from the same pool generation.
27
+ - name: configureFailPoint
28
+ object: testRunner
29
+ arguments:
30
+ failPoint:
31
+ configureFailPoint: failCommand
32
+ mode: { times: 2 }
33
+ data:
34
+ failCommands: ["insert"]
35
+ appName: shutdownErrorInsertTest
36
+ errorCode: 91
37
+ blockConnection: true
38
+ blockTimeMS: 500
39
+ # Start threads.
40
+ - name: startThread
41
+ object: testRunner
42
+ arguments:
43
+ name: thread1
44
+ - name: startThread
45
+ object: testRunner
46
+ arguments:
47
+ name: thread2
48
+ # Perform concurrent insert operations. Both fail with shutdown errors.
49
+ - name: runOnThread
50
+ object: testRunner
51
+ arguments:
52
+ name: thread1
53
+ operation:
54
+ name: insertOne
55
+ object: collection
56
+ arguments:
57
+ document:
58
+ _id: 2
59
+ error: true
60
+ - name: runOnThread
61
+ object: testRunner
62
+ arguments:
63
+ name: thread2
64
+ operation:
65
+ name: insertOne
66
+ object: collection
67
+ arguments:
68
+ document:
69
+ _id: 3
70
+ error: true
71
+ # Stop threads.
72
+ - name: waitForThread
73
+ object: testRunner
74
+ arguments:
75
+ name: thread1
76
+ - name: waitForThread
77
+ object: testRunner
78
+ arguments:
79
+ name: thread2
80
+ # The first shutdown error should mark the server Unknown and then clear
81
+ # the pool.
82
+ - name: waitForEvent
83
+ object: testRunner
84
+ arguments:
85
+ event: ServerMarkedUnknownEvent
86
+ count: 1
87
+ - name: waitForEvent
88
+ object: testRunner
89
+ arguments:
90
+ event: PoolClearedEvent
91
+ count: 1
92
+ # Perform an operation to ensure the node is rediscovered.
93
+ - name: insertOne
94
+ object: collection
95
+ arguments:
96
+ document:
97
+ _id: 4
98
+ # Assert the server was marked Unknown and pool was cleared exactly once.
99
+ - name: assertEventCount
100
+ object: testRunner
101
+ arguments:
102
+ event: ServerMarkedUnknownEvent
103
+ count: 1
104
+ - name: assertEventCount
105
+ object: testRunner
106
+ arguments:
107
+ event: PoolClearedEvent
108
+ count: 1
109
+
110
+ # Order of operations is non-deterministic so we cannot check events.
111
+ outcome:
112
+ collection:
113
+ data:
114
+ - {_id: 1}
115
+ - {_id: 4}
@@ -0,0 +1,168 @@
1
+ # Test SDAM error handling.
2
+ runOn:
3
+ # failCommand appName requirements
4
+ - minServerVersion: "4.4"
5
+
6
+ database_name: &database_name "sdam-tests"
7
+ collection_name: &collection_name "isMaster-command-error"
8
+
9
+ data: []
10
+
11
+ tests:
12
+ - description: Command error on Monitor handshake
13
+ # Configure the initial handshake to fail with a command error.
14
+ # Use times: 2 so that the RTT isMaster fails as well.
15
+ failPoint:
16
+ configureFailPoint: failCommand
17
+ mode: { times: 2 }
18
+ data:
19
+ failCommands: ["isMaster"]
20
+ appName: commandErrorHandshakeTest
21
+ closeConnection: false
22
+ errorCode: 91 # ShutdownInProgress
23
+ clientOptions:
24
+ retryWrites: false
25
+ connectTimeoutMS: 250
26
+ heartbeatFrequencyMS: 500
27
+ appname: commandErrorHandshakeTest
28
+ operations:
29
+ # The command error on the initial handshake should mark the server
30
+ # Unknown (emitting a ServerDescriptionChangedEvent) and clear the pool.
31
+ - name: waitForEvent
32
+ object: testRunner
33
+ arguments:
34
+ event: ServerMarkedUnknownEvent
35
+ count: 1
36
+ # https://jira.mongodb.org/browse/DRIVERS-1314
37
+ # - name: waitForEvent
38
+ # object: testRunner
39
+ # arguments:
40
+ # event: PoolClearedEvent
41
+ # count: 1
42
+ # Perform an operation to ensure the node is discovered.
43
+ - name: insertMany
44
+ object: collection
45
+ arguments:
46
+ documents:
47
+ - _id: 1
48
+ - _id: 2
49
+ # We cannot assert the server was marked Unknown and pool was cleared an
50
+ # exact number of times because the RTT isMaster may or may not have
51
+ # triggered this failpoint as well.
52
+ # - name: assertEventCount
53
+ # object: testRunner
54
+ # arguments:
55
+ # event: ServerMarkedUnknownEvent
56
+ # count: 1
57
+ # - name: assertEventCount
58
+ # object: testRunner
59
+ # arguments:
60
+ # event: PoolClearedEvent
61
+ # count: 1
62
+
63
+ expectations:
64
+ - command_started_event:
65
+ command:
66
+ insert: *collection_name
67
+ documents:
68
+ - _id: 1
69
+ - _id: 2
70
+ command_name: insert
71
+ database_name: *database_name
72
+
73
+ outcome:
74
+ collection:
75
+ data:
76
+ - {_id: 1}
77
+ - {_id: 2}
78
+
79
+ - description: Command error on Monitor check
80
+ clientOptions:
81
+ retryWrites: false
82
+ connectTimeoutMS: 1000
83
+ heartbeatFrequencyMS: 500
84
+ appname: commandErrorCheckTest
85
+ operations:
86
+ # Perform an operation to ensure the node is discovered.
87
+ - name: insertMany
88
+ object: collection
89
+ arguments:
90
+ documents:
91
+ - _id: 1
92
+ - _id: 2
93
+ # Configure the next streaming isMaster check to fail with a command
94
+ # error.
95
+ # Use times: 2 so that the RTT isMaster is blocked as well.
96
+ - name: configureFailPoint
97
+ object: testRunner
98
+ arguments:
99
+ failPoint:
100
+ configureFailPoint: failCommand
101
+ mode: { times: 2 }
102
+ data:
103
+ failCommands: ["isMaster"]
104
+ appName: commandErrorCheckTest
105
+ closeConnection: false
106
+ blockConnection: true
107
+ blockTimeMS: 750
108
+ errorCode: 91 # ShutdownInProgress
109
+ # The command error on the next check should mark the server Unknown and
110
+ # clear the pool.
111
+ - name: waitForEvent
112
+ object: testRunner
113
+ arguments:
114
+ event: ServerMarkedUnknownEvent
115
+ # Ruby driver marks server unknown for each fail point hit
116
+ count: 2
117
+ # Ruby driver normally produces 2 pool clears, but sometimes only 1
118
+ # - name: waitForEvent
119
+ # object: testRunner
120
+ # arguments:
121
+ # event: PoolClearedEvent
122
+ # count: 1
123
+ # Perform an operation to ensure the node is rediscovered.
124
+ - name: insertMany
125
+ object: collection
126
+ arguments:
127
+ documents:
128
+ - _id: 3
129
+ - _id: 4
130
+ # Assert the server was marked Unknown and pool was cleared exactly once.
131
+ - name: assertEventCount
132
+ object: testRunner
133
+ arguments:
134
+ event: ServerMarkedUnknownEvent
135
+ # Ruby driver marks server unknown for each fail point hit
136
+ count: 2
137
+ # Ruby driver normally produces 2 pool clears, but sometimes only 1
138
+ # - name: waitForEvent
139
+ # object: testRunner
140
+ # arguments:
141
+ # event: PoolClearedEvent
142
+ # count: 1
143
+
144
+ expectations:
145
+ - command_started_event:
146
+ command:
147
+ insert: *collection_name
148
+ documents:
149
+ - _id: 1
150
+ - _id: 2
151
+ command_name: insert
152
+ database_name: *database_name
153
+ - command_started_event:
154
+ command:
155
+ insert: *collection_name
156
+ documents:
157
+ - _id: 3
158
+ - _id: 4
159
+ command_name: insert
160
+ database_name: *database_name
161
+
162
+ outcome:
163
+ collection:
164
+ data:
165
+ - {_id: 1}
166
+ - {_id: 2}
167
+ - {_id: 3}
168
+ - {_id: 4}
@@ -0,0 +1,162 @@
1
+ # Test SDAM error handling.
2
+ runOn:
3
+ # failCommand appName requirements
4
+ - minServerVersion: "4.4"
5
+
6
+ database_name: &database_name "sdam-tests"
7
+ collection_name: &collection_name "isMaster-network-error"
8
+
9
+ data: []
10
+
11
+ tests:
12
+ - description: Network error on Monitor handshake
13
+ # Configure the initial handshake to fail with a network error.
14
+ # Use times: 2 so that the RTT isMaster fails as well.
15
+ failPoint:
16
+ configureFailPoint: failCommand
17
+ mode: { times: 2 }
18
+ data:
19
+ failCommands: ["isMaster"]
20
+ appName: networkErrorHandshakeTest
21
+ closeConnection: true
22
+ clientOptions:
23
+ retryWrites: false
24
+ connectTimeoutMS: 250
25
+ heartbeatFrequencyMS: 500
26
+ appname: networkErrorHandshakeTest
27
+ operations:
28
+ # The network error on the initial handshake should mark the server
29
+ # Unknown (emitting a ServerDescriptionChangedEvent) and clear the pool.
30
+ - name: waitForEvent
31
+ object: testRunner
32
+ arguments:
33
+ event: ServerMarkedUnknownEvent
34
+ count: 1
35
+ # https://jira.mongodb.org/browse/DRIVERS-1314
36
+ # - name: waitForEvent
37
+ # object: testRunner
38
+ # arguments:
39
+ # event: PoolClearedEvent
40
+ # count: 1
41
+ # Perform an operation to ensure the node is discovered.
42
+ - name: insertMany
43
+ object: collection
44
+ arguments:
45
+ documents:
46
+ - _id: 1
47
+ - _id: 2
48
+ # We cannot assert the server was marked Unknown and pool was cleared an
49
+ # exact number of times because the RTT isMaster may or may not have
50
+ # triggered this failpoint as well.
51
+ # - name: assertEventCount
52
+ # object: testRunner
53
+ # arguments:
54
+ # event: ServerMarkedUnknownEvent
55
+ # count: 1
56
+ # - name: assertEventCount
57
+ # object: testRunner
58
+ # arguments:
59
+ # event: PoolClearedEvent
60
+ # count: 1
61
+
62
+ expectations:
63
+ - command_started_event:
64
+ command:
65
+ insert: *collection_name
66
+ documents:
67
+ - _id: 1
68
+ - _id: 2
69
+ command_name: insert
70
+ database_name: *database_name
71
+
72
+ outcome:
73
+ collection:
74
+ data:
75
+ - {_id: 1}
76
+ - {_id: 2}
77
+
78
+ - description: Network error on Monitor check
79
+ clientOptions:
80
+ retryWrites: false
81
+ connectTimeoutMS: 250
82
+ heartbeatFrequencyMS: 500
83
+ appname: networkErrorCheckTest
84
+ operations:
85
+ # Perform an operation to ensure the node is discovered.
86
+ - name: insertMany
87
+ object: collection
88
+ arguments:
89
+ documents:
90
+ - _id: 1
91
+ - _id: 2
92
+ # Configure the next streaming isMaster check to fail with a non-timeout
93
+ # network error. Use times: 2 to ensure that the the Monitor check fails
94
+ # since the RTT isMaster may trigger this failpoint as well.
95
+ - name: configureFailPoint
96
+ object: testRunner
97
+ arguments:
98
+ failPoint:
99
+ configureFailPoint: failCommand
100
+ mode: { times: 2 }
101
+ data:
102
+ failCommands: ["isMaster"]
103
+ appName: networkErrorCheckTest
104
+ closeConnection: true
105
+ # The network error on the next check should mark the server Unknown and
106
+ # clear the pool.
107
+ - name: waitForEvent
108
+ object: testRunner
109
+ arguments:
110
+ event: ServerMarkedUnknownEvent
111
+ count: 1
112
+ - name: waitForEvent
113
+ object: testRunner
114
+ arguments:
115
+ event: PoolClearedEvent
116
+ count: 1
117
+ # Perform an operation to ensure the node is rediscovered.
118
+ - name: insertMany
119
+ object: collection
120
+ arguments:
121
+ documents:
122
+ - _id: 3
123
+ - _id: 4
124
+ # We cannot assert the server was marked Unknown and pool was cleared an
125
+ # exact number of times because the RTT isMaster may or may not have
126
+ # triggered this failpoint as well.
127
+ # - name: assertEventCount
128
+ # object: testRunner
129
+ # arguments:
130
+ # event: ServerMarkedUnknownEvent
131
+ # count: 1
132
+ # - name: assertEventCount
133
+ # object: testRunner
134
+ # arguments:
135
+ # event: PoolClearedEvent
136
+ # count: 1
137
+
138
+ expectations:
139
+ - command_started_event:
140
+ command:
141
+ insert: *collection_name
142
+ documents:
143
+ - _id: 1
144
+ - _id: 2
145
+ command_name: insert
146
+ database_name: *database_name
147
+ - command_started_event:
148
+ command:
149
+ insert: *collection_name
150
+ documents:
151
+ - _id: 3
152
+ - _id: 4
153
+ command_name: insert
154
+ database_name: *database_name
155
+
156
+ outcome:
157
+ collection:
158
+ data:
159
+ - {_id: 1}
160
+ - {_id: 2}
161
+ - {_id: 3}
162
+ - {_id: 4}