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
@@ -50,7 +50,7 @@ module Mongo
50
50
  # @since 2.7.0
51
51
  # @api experimental
52
52
  def summary
53
- "#<#{self.class.name.sub(/^Mongo::Monitoring::Event::/, '')}" +
53
+ "#<#{short_class_name}" +
54
54
  " address=#{address} topology=#{topology.summary}>"
55
55
  end
56
56
  end
@@ -35,6 +35,13 @@ module Mongo
35
35
  # description.
36
36
  attr_reader :new_description
37
37
 
38
+ # @return [ true | false ] Whether the heartbeat was awaited.
39
+ #
40
+ # @api experimental
41
+ def awaited?
42
+ @awaited
43
+ end
44
+
38
45
  # Create the event.
39
46
  #
40
47
  # @example Create the event.
@@ -44,13 +51,19 @@ module Mongo
44
51
  # @param [ Integer ] topology The topology.
45
52
  # @param [ Server::Description ] previous_description The previous description.
46
53
  # @param [ Server::Description ] new_description The new description.
54
+ # @param [ true | false ] awaited Whether the server description was
55
+ # a result of processing an awaited ismaster response.
47
56
  #
48
57
  # @since 2.4.0
49
- def initialize(address, topology, previous_description, new_description)
58
+ # @api private
59
+ def initialize(address, topology, previous_description, new_description,
60
+ awaited: false
61
+ )
50
62
  @address = address
51
63
  @topology = topology
52
64
  @previous_description = previous_description
53
65
  @new_description = new_description
66
+ @awaited = !!awaited
54
67
  end
55
68
 
56
69
  # Returns a concise yet useful summary of the event.
@@ -62,10 +75,20 @@ module Mongo
62
75
  # @since 2.7.0
63
76
  # @api experimental
64
77
  def summary
65
- "#<#{self.class.name.sub(/^Mongo::Monitoring::Event::/, '')}" +
66
- " address=#{address} topology=#{topology.summary}" +
78
+ "#<#{short_class_name}" +
79
+ " address=#{address}" +
67
80
  # TODO Add summaries to descriptions and use them here
68
- " prev=#{previous_description.inspect} new=#{new_description.inspect}>"
81
+ " prev=#{previous_description.server_type.upcase} new=#{new_description.server_type.upcase}#{awaited_indicator}>"
82
+ end
83
+
84
+ private
85
+
86
+ def awaited_indicator
87
+ if awaited?
88
+ ' [awaited]'
89
+ else
90
+ ''
91
+ end
69
92
  end
70
93
  end
71
94
  end
@@ -36,6 +36,11 @@ module Mongo
36
36
  # Alias of error for SDAM spec compliance.
37
37
  alias :failure :error
38
38
 
39
+ # @return [ true | false ] Whether the heartbeat was awaited.
40
+ def awaited?
41
+ @awaited
42
+ end
43
+
39
44
  # Create the event.
40
45
  #
41
46
  # @example Create the event.
@@ -43,13 +48,15 @@ module Mongo
43
48
  #
44
49
  # @param [ Address ] address The server address.
45
50
  # @param [ Float ] round_trip_time Duration of ismaster call in seconds.
51
+ # @param [ true | false ] awaited Whether the heartbeat was awaited.
46
52
  #
47
53
  # @since 2.7.0
48
54
  # @api private
49
- def initialize(address, round_trip_time, error)
55
+ def initialize(address, round_trip_time, error, awaited: false)
50
56
  @address = address
51
57
  @round_trip_time = round_trip_time
52
58
  @error = error
59
+ @awaited = !!awaited
53
60
  end
54
61
 
55
62
  # Returns a concise yet useful summary of the event.
@@ -61,7 +68,7 @@ module Mongo
61
68
  # @since 2.7.0
62
69
  # @api experimental
63
70
  def summary
64
- "#<#{self.class.name.sub(/^Mongo::Monitoring::Event::/, '')}" +
71
+ "#<#{short_class_name}" +
65
72
  " address=#{address}" +
66
73
  " error=#{error.inspect}>"
67
74
  end
@@ -24,17 +24,24 @@ module Mongo
24
24
  # @return [ Address ] address The server address.
25
25
  attr_reader :address
26
26
 
27
+ # @return [ true | false ] Whether the heartbeat was awaited.
28
+ def awaited?
29
+ @awaited
30
+ end
31
+
27
32
  # Create the event.
28
33
  #
29
34
  # @example Create the event.
30
35
  # ServerHeartbeatStarted.new(address)
31
36
  #
32
37
  # @param [ Address ] address The server address.
38
+ # @param [ true | false ] awaited Whether the heartbeat was awaited.
33
39
  #
34
40
  # @since 2.7.0
35
41
  # @api private
36
- def initialize(address)
42
+ def initialize(address, awaited: false)
37
43
  @address = address
44
+ @awaited = !!awaited
38
45
  end
39
46
 
40
47
  # Returns a concise yet useful summary of the event.
@@ -46,7 +53,7 @@ module Mongo
46
53
  # @since 2.7.0
47
54
  # @api experimental
48
55
  def summary
49
- "#<#{self.class.name.sub(/^Mongo::Monitoring::Event::/, '')}" +
56
+ "#<#{short_class_name}" +
50
57
  " address=#{address}>"
51
58
  end
52
59
  end
@@ -30,6 +30,11 @@ module Mongo
30
30
  # Alias of round_trip_time.
31
31
  alias :duration :round_trip_time
32
32
 
33
+ # @return [ true | false ] Whether the heartbeat was awaited.
34
+ def awaited?
35
+ @awaited
36
+ end
37
+
33
38
  # Create the event.
34
39
  #
35
40
  # @example Create the event.
@@ -37,12 +42,14 @@ module Mongo
37
42
  #
38
43
  # @param [ Address ] address The server address.
39
44
  # @param [ Float ] round_trip_time Duration of ismaster call in seconds.
45
+ # @param [ true | false ] awaited Whether the heartbeat was awaited.
40
46
  #
41
47
  # @since 2.7.0
42
48
  # @api private
43
- def initialize(address, round_trip_time)
49
+ def initialize(address, round_trip_time, awaited: false)
44
50
  @address = address
45
51
  @round_trip_time = round_trip_time
52
+ @awaited = !!awaited
46
53
  end
47
54
 
48
55
  # Returns a concise yet useful summary of the event.
@@ -54,7 +61,7 @@ module Mongo
54
61
  # @since 2.7.0
55
62
  # @api experimental
56
63
  def summary
57
- "#<#{self.class.name.sub(/^Mongo::Monitoring::Event::/, '')}" +
64
+ "#<#{short_class_name}" +
58
65
  " address=#{address}>"
59
66
  end
60
67
  end
@@ -50,7 +50,7 @@ module Mongo
50
50
  # @since 2.7.0
51
51
  # @api experimental
52
52
  def summary
53
- "#<#{self.class.name.sub(/^Mongo::Monitoring::Event::/, '')}" +
53
+ "#<#{short_class_name}" +
54
54
  " address=#{address} topology=#{topology.summary}>"
55
55
  end
56
56
  end
@@ -50,7 +50,7 @@ module Mongo
50
50
  # @since 2.7.0
51
51
  # @api experimental
52
52
  def summary
53
- "#<#{self.class.name.sub(/^Mongo::Monitoring::Event::/, '')}" +
53
+ "#<#{short_class_name}" +
54
54
  " prev=#{previous_topology.summary}" +
55
55
  " new=#{new_topology.summary}>"
56
56
  end
@@ -45,7 +45,7 @@ module Mongo
45
45
  # @since 2.7.0
46
46
  # @api experimental
47
47
  def summary
48
- "#<#{self.class.name.sub(/^Mongo::Monitoring::Event::/, '')}" +
48
+ "#<#{short_class_name}" +
49
49
  " topology=#{topology.summary}>"
50
50
  end
51
51
  end
@@ -45,7 +45,7 @@ module Mongo
45
45
  # @since 2.7.0
46
46
  # @api experimental
47
47
  def summary
48
- "#<#{self.class.name.sub(/^Mongo::Monitoring::Event::/, '')}" +
48
+ "#<#{short_class_name}" +
49
49
  " topology=#{topology.summary}>"
50
50
  end
51
51
  end
@@ -32,7 +32,7 @@ module Mongo
32
32
  def publish_sdam_event(topic, event)
33
33
  return unless monitoring?
34
34
 
35
- log_debug("EVENT: #{event.summary}")
35
+ #log_debug("EVENT: #{event.summary}")
36
36
  monitoring.succeeded(topic, event)
37
37
  end
38
38
 
@@ -45,13 +45,16 @@ module Mongo
45
45
  private
46
46
 
47
47
  def command_started(address, operation_id, payload,
48
- socket_object_id: nil, connection_id: nil, connection_generation: nil
48
+ socket_object_id: nil, connection_id: nil, connection_generation: nil,
49
+ server_connection_id: nil
49
50
  )
50
51
  monitoring.started(
51
52
  Monitoring::COMMAND,
52
53
  Event::CommandStarted.generate(address, operation_id, payload,
53
54
  socket_object_id: socket_object_id, connection_id: connection_id,
54
- connection_generation: connection_generation)
55
+ connection_generation: connection_generation,
56
+ server_connection_id: server_connection_id,
57
+ )
55
58
  )
56
59
  end
57
60
 
@@ -25,9 +25,17 @@ module Mongo
25
25
  def log_event(event)
26
26
  log_debug(
27
27
  "Server description for #{event.address} changed from " +
28
- "'#{event.previous_description.server_type}' to '#{event.new_description.server_type}'."
28
+ "'#{event.previous_description.server_type}' to '#{event.new_description.server_type}'#{awaited_indicator(event)}."
29
29
  )
30
30
  end
31
+
32
+ def awaited_indicator(event)
33
+ if event.awaited?
34
+ ' [awaited]'
35
+ else
36
+ ''
37
+ end
38
+ end
31
39
  end
32
40
  end
33
41
  end
@@ -23,7 +23,7 @@ module Mongo
23
23
  private
24
24
 
25
25
  def log_event(event)
26
- if event.previous_topology != event.new_topology
26
+ if event.previous_topology.class != event.new_topology.class
27
27
  log_debug(
28
28
  "Topology type '#{event.previous_topology.display_name}' changed to " +
29
29
  "type '#{event.new_topology.display_name}'."
@@ -50,6 +50,8 @@ require 'mongo/operation/create_index'
50
50
  require 'mongo/operation/drop_index'
51
51
 
52
52
  module Mongo
53
+
54
+ # @api private
53
55
  module Operation
54
56
 
55
57
  # The q field constant.
@@ -14,25 +14,24 @@
14
14
 
15
15
  module Mongo
16
16
  module Operation
17
-
18
- # Aggregate result wrapper.
19
- #
20
- # @since 2.0.0
21
17
  class Aggregate
22
18
 
23
19
  # Defines custom behavior of results in an aggregation context.
24
20
  #
25
21
  # @since 2.0.0
22
+ # @api semiprivate
26
23
  class Result < Operation::Result
27
24
 
28
25
  # The field name for the aggregation explain information.
29
26
  #
30
27
  # @since 2.0.5
28
+ # @api private
31
29
  EXPLAIN = 'stages'.freeze
32
30
 
33
31
  # The legacy field name for the aggregation explain information.
34
32
  #
35
33
  # @since 2.0.5
34
+ # @api private
36
35
  EXPLAIN_LEGACY = 'serverPipeline'.freeze
37
36
 
38
37
  # Get the cursor id for the result.
@@ -48,6 +47,7 @@ module Mongo
48
47
  # @return [ Integer ] The cursor id.
49
48
  #
50
49
  # @since 2.0.0
50
+ # @api private
51
51
  def cursor_id
52
52
  cursor_document ? cursor_document[CURSOR_ID] : 0
53
53
  end
@@ -62,8 +62,8 @@ module Mongo
62
62
  end
63
63
 
64
64
  # Get the documents for the aggregation result. This is either the
65
- # first document's 'result' field, or if a cursor option was selected,
66
- # it is the 'firstBatch' field in the 'cursor' field of the first
65
+ # first document's 'result' field, or if a cursor option was selected,
66
+ # it is the 'firstBatch' field in the 'cursor' field of the first
67
67
  # document returned. Otherwise, it is an explain document.
68
68
  #
69
69
  # @example Get the documents.
@@ -72,10 +72,11 @@ module Mongo
72
72
  # @return [ Array<BSON::Document> ] The documents.
73
73
  #
74
74
  # @since 2.0.0
75
+ # @api public
75
76
  def documents
76
- docs = reply.documents[0][RESULT]
77
+ docs = reply.documents[0][RESULT]
77
78
  docs ||= cursor_document[FIRST_BATCH] if cursor_document
78
- docs ||= explain_document
79
+ docs ||= explain_document
79
80
  docs
80
81
  end
81
82
 
@@ -27,6 +27,11 @@ module Mongo
27
27
 
28
28
  private
29
29
 
30
+ def get_result(connection, client, options = {})
31
+ # This is a Mongo::Operation::CollectionsInfo::Result
32
+ Result.new(*dispatch_message(connection, client), db_name)
33
+ end
34
+
30
35
  def selector(connection)
31
36
  {}
32
37
  end
@@ -20,8 +20,24 @@ module Mongo
20
20
  # collection.
21
21
  #
22
22
  # @since 2.1.0
23
+ # @api semiprivate
23
24
  class Result < Operation::Result
24
25
 
26
+ # Initialize a new result.
27
+ #
28
+ # @param [ Array<Protocol::Message> | nil ] replies The wire protocol replies, if any.
29
+ # @param [ Server::Description ] connection_description
30
+ # Server description of the server that performed the operation that
31
+ # this result is for.
32
+ # @param [ String ] database_name The name of the database that the
33
+ # query was sent to.
34
+ #
35
+ # @api private
36
+ def initialize(replies, connection_description, database_name)
37
+ super(replies, connection_description)
38
+ @database_name = database_name
39
+ end
40
+
25
41
  # Get the namespace for the cursor.
26
42
  #
27
43
  # @example Get the namespace.
@@ -30,8 +46,9 @@ module Mongo
30
46
  # @return [ String ] The namespace.
31
47
  #
32
48
  # @since 2.1.0
49
+ # @api private
33
50
  def namespace
34
- Database::NAMESPACES
51
+ "#{@database_name}.#{Database::NAMESPACES}"
35
52
  end
36
53
  end
37
54
  end
@@ -19,6 +19,7 @@ module Mongo
19
19
  # Defines custom behavior of results for a delete when part of a bulk write.
20
20
  #
21
21
  # @since 2.0.0
22
+ # @api semiprivate
22
23
  class BulkResult < Operation::Result
23
24
  include Aggregatable
24
25
 
@@ -30,6 +31,7 @@ module Mongo
30
31
  # @return [ Integer ] The number of documents deleted.
31
32
  #
32
33
  # @since 2.0.0
34
+ # @api public
33
35
  def n_removed
34
36
  return 0 unless acknowledged?
35
37
  @replies.reduce(0) do |n, reply|
@@ -19,6 +19,7 @@ module Mongo
19
19
  # Defines custom behavior of results for a delete.
20
20
  #
21
21
  # @since 2.0.0
22
+ # @api semiprivate
22
23
  class Result < Operation::Result
23
24
 
24
25
  # Get the number of documents deleted.
@@ -29,10 +30,12 @@ module Mongo
29
30
  # @return [ Integer ] The deleted count.
30
31
  #
31
32
  # @since 2.0.0
33
+ # @api public
32
34
  def deleted_count
33
35
  n
34
36
  end
35
37
 
38
+ # @api public
36
39
  def bulk_result
37
40
  BulkResult.new(@replies, connection_description)
38
41
  end
@@ -30,6 +30,10 @@ module Mongo
30
30
 
31
31
  private
32
32
 
33
+ def selector(connection)
34
+ super.merge(spec[:explain])
35
+ end
36
+
33
37
  def message(connection)
34
38
  Protocol::Query.new(db_name, Database::COMMAND, command(connection), options(connection))
35
39
  end
@@ -29,6 +29,10 @@ module Mongo
29
29
 
30
30
  private
31
31
 
32
+ def selector(connection)
33
+ super.merge(spec[:explain])
34
+ end
35
+
32
36
  def message(connection)
33
37
  Protocol::Query.new(db_name, coll_name, command(connection), options(connection))
34
38
  end