mongo 2.6.4 → 2.7.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 (832) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/LICENSE +1 -1
  5. data/README.md +1 -1
  6. data/Rakefile +10 -11
  7. data/lib/mongo.rb +3 -1
  8. data/lib/mongo/active_support.rb +17 -0
  9. data/lib/mongo/address.rb +47 -39
  10. data/lib/mongo/address/ipv4.rb +1 -1
  11. data/lib/mongo/address/ipv6.rb +1 -1
  12. data/lib/mongo/address/unix.rb +1 -1
  13. data/lib/mongo/auth.rb +3 -8
  14. data/lib/mongo/auth/cr.rb +2 -2
  15. data/lib/mongo/auth/cr/conversation.rb +4 -4
  16. data/lib/mongo/auth/ldap.rb +2 -2
  17. data/lib/mongo/auth/ldap/conversation.rb +3 -3
  18. data/lib/mongo/auth/roles.rb +1 -1
  19. data/lib/mongo/auth/scram.rb +2 -2
  20. data/lib/mongo/auth/scram/conversation.rb +5 -5
  21. data/lib/mongo/auth/stringprep.rb +1 -1
  22. data/lib/mongo/auth/stringprep/profiles/sasl.rb +1 -1
  23. data/lib/mongo/auth/stringprep/tables.rb +1 -1
  24. data/lib/mongo/auth/user.rb +1 -1
  25. data/lib/mongo/auth/user/view.rb +2 -2
  26. data/lib/mongo/auth/x509.rb +2 -2
  27. data/lib/mongo/auth/x509/conversation.rb +3 -3
  28. data/lib/mongo/bson.rb +1 -1
  29. data/lib/mongo/bulk_write.rb +1 -1
  30. data/lib/mongo/bulk_write/combineable.rb +2 -2
  31. data/lib/mongo/bulk_write/ordered_combiner.rb +1 -1
  32. data/lib/mongo/bulk_write/result.rb +1 -1
  33. data/lib/mongo/bulk_write/result_combiner.rb +1 -1
  34. data/lib/mongo/bulk_write/transformable.rb +2 -2
  35. data/lib/mongo/bulk_write/unordered_combiner.rb +1 -1
  36. data/lib/mongo/bulk_write/validatable.rb +2 -2
  37. data/lib/mongo/client.rb +194 -82
  38. data/lib/mongo/cluster.rb +418 -298
  39. data/lib/mongo/cluster/periodic_executor.rb +10 -3
  40. data/lib/mongo/cluster/reapers/socket_reaper.rb +1 -1
  41. data/lib/mongo/cluster/sdam_flow.rb +481 -0
  42. data/lib/mongo/cluster/topology.rb +37 -16
  43. data/lib/mongo/cluster/topology/base.rb +218 -0
  44. data/lib/mongo/cluster/topology/no_replica_set_options.rb +34 -0
  45. data/lib/mongo/cluster/topology/replica_set_no_primary.rb +168 -0
  46. data/lib/mongo/cluster/topology/replica_set_with_primary.rb +27 -0
  47. data/lib/mongo/cluster/topology/sharded.rb +12 -115
  48. data/lib/mongo/cluster/topology/single.rb +18 -112
  49. data/lib/mongo/cluster/topology/unknown.rb +11 -152
  50. data/lib/mongo/collection.rb +2 -2
  51. data/lib/mongo/collection/view.rb +1 -1
  52. data/lib/mongo/collection/view/aggregation.rb +2 -2
  53. data/lib/mongo/collection/view/builder.rb +1 -1
  54. data/lib/mongo/collection/view/builder/aggregation.rb +1 -1
  55. data/lib/mongo/collection/view/builder/find_command.rb +1 -1
  56. data/lib/mongo/collection/view/builder/flags.rb +2 -2
  57. data/lib/mongo/collection/view/builder/map_reduce.rb +1 -1
  58. data/lib/mongo/collection/view/builder/modifiers.rb +2 -2
  59. data/lib/mongo/collection/view/builder/op_query.rb +1 -1
  60. data/lib/mongo/collection/view/change_stream.rb +4 -3
  61. data/lib/mongo/collection/view/change_stream/retryable.rb +1 -1
  62. data/lib/mongo/collection/view/explainable.rb +2 -2
  63. data/lib/mongo/collection/view/immutable.rb +2 -2
  64. data/lib/mongo/collection/view/iterable.rb +2 -2
  65. data/lib/mongo/collection/view/map_reduce.rb +2 -2
  66. data/lib/mongo/collection/view/readable.rb +3 -3
  67. data/lib/mongo/collection/view/writable.rb +2 -2
  68. data/lib/mongo/cursor.rb +8 -6
  69. data/lib/mongo/cursor/builder.rb +1 -1
  70. data/lib/mongo/cursor/builder/get_more_command.rb +1 -1
  71. data/lib/mongo/cursor/builder/kill_cursors_command.rb +1 -1
  72. data/lib/mongo/cursor/builder/op_get_more.rb +2 -2
  73. data/lib/mongo/cursor/builder/op_kill_cursors.rb +2 -2
  74. data/lib/mongo/database.rb +9 -4
  75. data/lib/mongo/database/view.rb +1 -1
  76. data/lib/mongo/dbref.rb +1 -1
  77. data/lib/mongo/error.rb +15 -2
  78. data/lib/mongo/error/bulk_write_error.rb +17 -1
  79. data/lib/mongo/error/change_stream_resumable.rb +1 -1
  80. data/lib/mongo/error/closed_stream.rb +1 -1
  81. data/lib/mongo/error/extra_file_chunk.rb +1 -1
  82. data/lib/mongo/error/file_not_found.rb +1 -1
  83. data/lib/mongo/error/handshake_error.rb +24 -0
  84. data/lib/mongo/error/insufficient_iteration_count.rb +1 -1
  85. data/lib/mongo/error/invalid_application_name.rb +1 -1
  86. data/lib/mongo/error/invalid_bulk_operation.rb +1 -1
  87. data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -1
  88. data/lib/mongo/error/invalid_collection_name.rb +1 -1
  89. data/lib/mongo/error/invalid_database_name.rb +1 -1
  90. data/lib/mongo/error/invalid_document.rb +1 -1
  91. data/lib/mongo/error/invalid_file.rb +1 -1
  92. data/lib/mongo/error/invalid_file_revision.rb +1 -1
  93. data/lib/mongo/error/invalid_min_pool_size.rb +1 -1
  94. data/lib/mongo/error/invalid_nonce.rb +1 -1
  95. data/lib/mongo/error/invalid_read_option.rb +1 -1
  96. data/lib/mongo/error/invalid_replacement_document.rb +1 -1
  97. data/lib/mongo/error/invalid_server_preference.rb +1 -1
  98. data/lib/mongo/error/invalid_session.rb +1 -1
  99. data/lib/mongo/error/invalid_signature.rb +1 -1
  100. data/lib/mongo/error/invalid_transaction_operation.rb +2 -2
  101. data/lib/mongo/error/invalid_txt_record.rb +1 -1
  102. data/lib/mongo/error/invalid_update_document.rb +1 -1
  103. data/lib/mongo/error/invalid_uri.rb +1 -1
  104. data/lib/mongo/error/invalid_write_concern.rb +1 -1
  105. data/lib/mongo/error/lint_error.rb +1 -1
  106. data/lib/mongo/error/max_bson_size.rb +1 -1
  107. data/lib/mongo/error/max_message_size.rb +1 -1
  108. data/lib/mongo/error/mismatched_domain.rb +1 -1
  109. data/lib/mongo/error/missing_file_chunk.rb +1 -1
  110. data/lib/mongo/error/missing_resume_token.rb +1 -1
  111. data/lib/mongo/error/multi_index_drop.rb +1 -1
  112. data/lib/mongo/error/need_primary_server.rb +1 -1
  113. data/lib/mongo/error/no_server_available.rb +9 -5
  114. data/lib/mongo/error/no_srv_records.rb +1 -1
  115. data/lib/mongo/error/operation_failure.rb +2 -1
  116. data/lib/mongo/error/parser.rb +10 -1
  117. data/lib/mongo/error/session_ended.rb +27 -0
  118. data/lib/mongo/error/socket_error.rb +1 -1
  119. data/lib/mongo/error/socket_timeout_error.rb +1 -1
  120. data/lib/mongo/error/unchangeable_collection_option.rb +1 -1
  121. data/lib/mongo/error/unexpected_chunk_length.rb +1 -1
  122. data/lib/mongo/error/unexpected_response.rb +1 -1
  123. data/lib/mongo/error/unknown_payload_type.rb +1 -1
  124. data/lib/mongo/error/unsupported_array_filters.rb +1 -1
  125. data/lib/mongo/error/unsupported_collation.rb +1 -1
  126. data/lib/mongo/error/unsupported_features.rb +1 -1
  127. data/lib/mongo/error/unsupported_message_type.rb +1 -1
  128. data/lib/mongo/error/write_retryable.rb +1 -1
  129. data/lib/mongo/event.rb +3 -4
  130. data/lib/mongo/event/base.rb +6 -3
  131. data/lib/mongo/event/description_changed.rb +7 -27
  132. data/lib/mongo/event/listeners.rb +1 -1
  133. data/lib/mongo/event/publisher.rb +1 -1
  134. data/lib/mongo/event/subscriber.rb +1 -1
  135. data/lib/mongo/grid.rb +1 -1
  136. data/lib/mongo/grid/file.rb +1 -1
  137. data/lib/mongo/grid/file/chunk.rb +2 -2
  138. data/lib/mongo/grid/file/info.rb +8 -2
  139. data/lib/mongo/grid/fs_bucket.rb +1 -1
  140. data/lib/mongo/grid/stream.rb +1 -1
  141. data/lib/mongo/grid/stream/read.rb +1 -1
  142. data/lib/mongo/grid/stream/write.rb +1 -1
  143. data/lib/mongo/id.rb +64 -0
  144. data/lib/mongo/index.rb +1 -1
  145. data/lib/mongo/index/view.rb +1 -1
  146. data/lib/mongo/lint.rb +44 -5
  147. data/lib/mongo/loggable.rb +1 -1
  148. data/lib/mongo/logger.rb +1 -1
  149. data/lib/mongo/monitoring.rb +34 -10
  150. data/lib/mongo/monitoring/command_log_subscriber.rb +1 -1
  151. data/lib/mongo/monitoring/event.rb +4 -1
  152. data/lib/mongo/monitoring/event/command_failed.rb +1 -1
  153. data/lib/mongo/monitoring/event/command_started.rb +2 -2
  154. data/lib/mongo/monitoring/event/command_succeeded.rb +1 -1
  155. data/lib/mongo/monitoring/event/secure.rb +2 -2
  156. data/lib/mongo/monitoring/event/server_closed.rb +14 -1
  157. data/lib/mongo/monitoring/event/server_description_changed.rb +16 -1
  158. data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +71 -0
  159. data/lib/mongo/monitoring/event/server_heartbeat_started.rb +55 -0
  160. data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +63 -0
  161. data/lib/mongo/monitoring/event/server_opening.rb +8 -4
  162. data/lib/mongo/monitoring/event/topology_changed.rb +9 -6
  163. data/lib/mongo/monitoring/event/topology_closed.rb +14 -1
  164. data/lib/mongo/monitoring/event/topology_opening.rb +8 -4
  165. data/lib/mongo/monitoring/publishable.rb +3 -35
  166. data/lib/mongo/monitoring/sdam_log_subscriber.rb +1 -1
  167. data/lib/mongo/monitoring/server_closed_log_subscriber.rb +1 -1
  168. data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +1 -1
  169. data/lib/mongo/monitoring/server_opening_log_subscriber.rb +1 -1
  170. data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +4 -4
  171. data/lib/mongo/monitoring/topology_closed_log_subscriber.rb +30 -0
  172. data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +2 -2
  173. data/lib/mongo/operation.rb +8 -0
  174. data/lib/mongo/operation/aggregate.rb +3 -20
  175. data/lib/mongo/operation/aggregate/command.rb +1 -1
  176. data/lib/mongo/operation/aggregate/op_msg.rb +4 -30
  177. data/lib/mongo/operation/aggregate/result.rb +2 -2
  178. data/lib/mongo/operation/collections_info.rb +1 -1
  179. data/lib/mongo/operation/collections_info/result.rb +2 -2
  180. data/lib/mongo/operation/command.rb +2 -19
  181. data/lib/mongo/operation/command/command.rb +1 -1
  182. data/lib/mongo/operation/command/op_msg.rb +2 -27
  183. data/lib/mongo/operation/count.rb +2 -19
  184. data/lib/mongo/operation/count/command.rb +1 -1
  185. data/lib/mongo/operation/count/op_msg.rb +2 -11
  186. data/lib/mongo/operation/create.rb +2 -19
  187. data/lib/mongo/operation/create/command.rb +1 -1
  188. data/lib/mongo/operation/create/op_msg.rb +3 -20
  189. data/lib/mongo/operation/create_index.rb +2 -19
  190. data/lib/mongo/operation/create_index/command.rb +1 -1
  191. data/lib/mongo/operation/create_index/op_msg.rb +3 -18
  192. data/lib/mongo/operation/create_user.rb +2 -19
  193. data/lib/mongo/operation/create_user/command.rb +1 -1
  194. data/lib/mongo/operation/create_user/op_msg.rb +3 -18
  195. data/lib/mongo/operation/delete.rb +1 -1
  196. data/lib/mongo/operation/delete/bulk_result.rb +2 -2
  197. data/lib/mongo/operation/delete/command.rb +1 -1
  198. data/lib/mongo/operation/delete/legacy.rb +1 -1
  199. data/lib/mongo/operation/delete/op_msg.rb +5 -23
  200. data/lib/mongo/operation/delete/result.rb +2 -2
  201. data/lib/mongo/operation/distinct.rb +2 -19
  202. data/lib/mongo/operation/distinct/command.rb +1 -1
  203. data/lib/mongo/operation/distinct/op_msg.rb +3 -20
  204. data/lib/mongo/operation/drop.rb +2 -19
  205. data/lib/mongo/operation/drop/command.rb +1 -1
  206. data/lib/mongo/operation/drop/op_msg.rb +3 -20
  207. data/lib/mongo/operation/drop_database.rb +2 -19
  208. data/lib/mongo/operation/drop_database/command.rb +1 -1
  209. data/lib/mongo/operation/drop_database/op_msg.rb +3 -20
  210. data/lib/mongo/operation/drop_index.rb +2 -19
  211. data/lib/mongo/operation/drop_index/command.rb +1 -1
  212. data/lib/mongo/operation/drop_index/op_msg.rb +3 -18
  213. data/lib/mongo/operation/explain.rb +2 -21
  214. data/lib/mongo/operation/explain/command.rb +1 -1
  215. data/lib/mongo/operation/explain/legacy.rb +1 -1
  216. data/lib/mongo/operation/explain/op_msg.rb +4 -30
  217. data/lib/mongo/operation/explain/result.rb +2 -2
  218. data/lib/mongo/operation/find.rb +2 -21
  219. data/lib/mongo/operation/find/command.rb +1 -1
  220. data/lib/mongo/operation/find/legacy.rb +1 -1
  221. data/lib/mongo/operation/find/legacy/result.rb +2 -2
  222. data/lib/mongo/operation/find/op_msg.rb +6 -30
  223. data/lib/mongo/operation/find/result.rb +2 -2
  224. data/lib/mongo/operation/get_more.rb +2 -11
  225. data/lib/mongo/operation/get_more/command.rb +1 -1
  226. data/lib/mongo/operation/get_more/legacy.rb +1 -1
  227. data/lib/mongo/operation/get_more/op_msg.rb +6 -30
  228. data/lib/mongo/operation/get_more/result.rb +2 -2
  229. data/lib/mongo/operation/indexes.rb +2 -21
  230. data/lib/mongo/operation/indexes/command.rb +1 -1
  231. data/lib/mongo/operation/indexes/legacy.rb +1 -1
  232. data/lib/mongo/operation/indexes/op_msg.rb +4 -30
  233. data/lib/mongo/operation/indexes/result.rb +2 -2
  234. data/lib/mongo/operation/insert.rb +1 -1
  235. data/lib/mongo/operation/insert/bulk_result.rb +2 -2
  236. data/lib/mongo/operation/insert/command.rb +1 -1
  237. data/lib/mongo/operation/insert/legacy.rb +1 -1
  238. data/lib/mongo/operation/insert/op_msg.rb +10 -23
  239. data/lib/mongo/operation/insert/result.rb +2 -2
  240. data/lib/mongo/operation/kill_cursors.rb +2 -21
  241. data/lib/mongo/operation/kill_cursors/command.rb +1 -1
  242. data/lib/mongo/operation/kill_cursors/legacy.rb +1 -1
  243. data/lib/mongo/operation/kill_cursors/op_msg.rb +3 -20
  244. data/lib/mongo/operation/list_collections.rb +2 -19
  245. data/lib/mongo/operation/list_collections/command.rb +1 -1
  246. data/lib/mongo/operation/list_collections/op_msg.rb +4 -28
  247. data/lib/mongo/operation/list_collections/result.rb +2 -2
  248. data/lib/mongo/operation/map_reduce.rb +2 -19
  249. data/lib/mongo/operation/map_reduce/command.rb +1 -1
  250. data/lib/mongo/operation/map_reduce/op_msg.rb +4 -30
  251. data/lib/mongo/operation/map_reduce/result.rb +2 -2
  252. data/lib/mongo/operation/op_msg_base.rb +30 -0
  253. data/lib/mongo/operation/parallel_scan.rb +2 -19
  254. data/lib/mongo/operation/parallel_scan/command.rb +1 -1
  255. data/lib/mongo/operation/parallel_scan/op_msg.rb +4 -28
  256. data/lib/mongo/operation/parallel_scan/result.rb +2 -2
  257. data/lib/mongo/operation/remove_user.rb +2 -19
  258. data/lib/mongo/operation/remove_user/command.rb +1 -1
  259. data/lib/mongo/operation/remove_user/op_msg.rb +3 -18
  260. data/lib/mongo/operation/result.rb +14 -2
  261. data/lib/mongo/operation/shared/bypass_document_validation.rb +1 -1
  262. data/lib/mongo/operation/shared/causal_consistency_supported.rb +14 -6
  263. data/lib/mongo/operation/shared/executable.rb +10 -3
  264. data/lib/mongo/operation/shared/executable_no_validate.rb +30 -0
  265. data/lib/mongo/operation/shared/executable_transaction_label.rb +34 -0
  266. data/lib/mongo/operation/shared/idable.rb +1 -1
  267. data/lib/mongo/operation/shared/limited.rb +1 -1
  268. data/lib/mongo/operation/shared/object_id_generator.rb +1 -1
  269. data/lib/mongo/operation/shared/op_msg_or_command.rb +42 -0
  270. data/lib/mongo/operation/shared/op_msg_or_find_command.rb +45 -0
  271. data/lib/mongo/operation/shared/op_msg_or_list_indexes_command.rb +45 -0
  272. data/lib/mongo/operation/shared/polymorphic_lookup.rb +33 -0
  273. data/lib/mongo/operation/shared/polymorphic_result.rb +32 -0
  274. data/lib/mongo/operation/shared/read_preference_supported.rb +1 -1
  275. data/lib/mongo/operation/shared/result/aggregatable.rb +2 -2
  276. data/lib/mongo/operation/shared/sessions_supported.rb +24 -4
  277. data/lib/mongo/operation/shared/specifiable.rb +5 -3
  278. data/lib/mongo/operation/shared/write.rb +1 -1
  279. data/lib/mongo/operation/shared/write_concern_supported.rb +1 -1
  280. data/lib/mongo/operation/update.rb +1 -1
  281. data/lib/mongo/operation/update/bulk_result.rb +2 -2
  282. data/lib/mongo/operation/update/command.rb +1 -1
  283. data/lib/mongo/operation/update/legacy.rb +1 -1
  284. data/lib/mongo/operation/update/legacy/result.rb +2 -2
  285. data/lib/mongo/operation/update/op_msg.rb +5 -23
  286. data/lib/mongo/operation/update/result.rb +2 -2
  287. data/lib/mongo/operation/update_user.rb +2 -19
  288. data/lib/mongo/operation/update_user/command.rb +1 -1
  289. data/lib/mongo/operation/update_user/op_msg.rb +3 -18
  290. data/lib/mongo/operation/users_info.rb +2 -19
  291. data/lib/mongo/operation/users_info/command.rb +1 -1
  292. data/lib/mongo/operation/users_info/op_msg.rb +4 -28
  293. data/lib/mongo/operation/users_info/result.rb +2 -2
  294. data/lib/mongo/options.rb +1 -1
  295. data/lib/mongo/options/mapper.rb +10 -3
  296. data/lib/mongo/options/redacted.rb +1 -1
  297. data/lib/mongo/protocol/bit_vector.rb +1 -1
  298. data/lib/mongo/protocol/compressed.rb +2 -2
  299. data/lib/mongo/protocol/delete.rb +1 -1
  300. data/lib/mongo/protocol/get_more.rb +1 -1
  301. data/lib/mongo/protocol/insert.rb +1 -1
  302. data/lib/mongo/protocol/kill_cursors.rb +1 -1
  303. data/lib/mongo/protocol/message.rb +4 -9
  304. data/lib/mongo/protocol/msg.rb +2 -2
  305. data/lib/mongo/protocol/query.rb +1 -1
  306. data/lib/mongo/protocol/registry.rb +1 -1
  307. data/lib/mongo/protocol/reply.rb +1 -1
  308. data/lib/mongo/protocol/serializers.rb +1 -1
  309. data/lib/mongo/protocol/update.rb +1 -1
  310. data/lib/mongo/retryable.rb +40 -14
  311. data/lib/mongo/semaphore.rb +46 -0
  312. data/lib/mongo/server.rb +159 -44
  313. data/lib/mongo/{cluster → server}/app_metadata.rb +26 -13
  314. data/lib/mongo/server/connectable.rb +9 -13
  315. data/lib/mongo/server/connection.rb +143 -71
  316. data/lib/mongo/server/connection_pool.rb +25 -20
  317. data/lib/mongo/server/connection_pool/queue.rb +163 -46
  318. data/lib/mongo/server/context.rb +13 -13
  319. data/lib/mongo/server/description.rb +93 -48
  320. data/lib/mongo/server/description/features.rb +22 -3
  321. data/lib/mongo/server/monitor.rb +143 -74
  322. data/lib/mongo/server/monitor/app_metadata.rb +34 -0
  323. data/lib/mongo/server/monitor/connection.rb +42 -26
  324. data/lib/mongo/server/round_trip_time_averager.rb +64 -0
  325. data/lib/mongo/server_selector.rb +1 -1
  326. data/lib/mongo/server_selector/nearest.rb +1 -1
  327. data/lib/mongo/server_selector/primary.rb +1 -1
  328. data/lib/mongo/server_selector/primary_preferred.rb +1 -1
  329. data/lib/mongo/server_selector/secondary.rb +1 -1
  330. data/lib/mongo/server_selector/secondary_preferred.rb +1 -1
  331. data/lib/mongo/server_selector/selectable.rb +38 -13
  332. data/lib/mongo/session.rb +189 -40
  333. data/lib/mongo/session/server_session.rb +18 -7
  334. data/lib/mongo/session/session_pool.rb +1 -1
  335. data/lib/mongo/socket.rb +1 -1
  336. data/lib/mongo/socket/ssl.rb +46 -7
  337. data/lib/mongo/socket/tcp.rb +1 -1
  338. data/lib/mongo/socket/unix.rb +1 -1
  339. data/lib/mongo/uri.rb +304 -18
  340. data/lib/mongo/uri/srv_protocol.rb +1 -1
  341. data/lib/mongo/version.rb +2 -2
  342. data/lib/mongo/write_concern.rb +6 -6
  343. data/lib/mongo/write_concern/acknowledged.rb +2 -4
  344. data/lib/mongo/write_concern/{normalizable.rb → base.rb} +5 -6
  345. data/lib/mongo/write_concern/unacknowledged.rb +2 -4
  346. data/mongo.gemspec +1 -1
  347. data/spec/enterprise_auth/kerberos_spec.rb +57 -0
  348. data/spec/integration/bulk_insert_spec.rb +4 -2
  349. data/spec/integration/change_stream_examples_spec.rb +5 -6
  350. data/spec/integration/change_stream_spec.rb +17 -14
  351. data/spec/integration/client_connectivity_spec.rb +38 -0
  352. data/spec/integration/client_construction_spec.rb +94 -0
  353. data/spec/integration/command_monitoring_spec.rb +18 -30
  354. data/spec/integration/connect_single_rs_name_spec.rb +67 -0
  355. data/spec/integration/connection_spec.rb +209 -0
  356. data/spec/integration/cursor_reaping_spec.rb +95 -0
  357. data/spec/integration/docs_examples_spec.rb +6 -5
  358. data/spec/integration/heartbeat_events_spec.rb +116 -0
  359. data/spec/integration/retryable_writes_spec.rb +18 -8
  360. data/spec/integration/sdam_events_spec.rb +47 -0
  361. data/spec/integration/server_description_spec.rb +48 -0
  362. data/spec/integration/time_zone_querying_spec.rb +52 -0
  363. data/spec/lite_spec_helper.rb +74 -19
  364. data/spec/mongo/address_spec.rb +17 -7
  365. data/spec/mongo/auth/cr_spec.rb +8 -5
  366. data/spec/mongo/auth/ldap_spec.rb +9 -6
  367. data/spec/mongo/auth/scram/conversation_spec.rb +4 -1
  368. data/spec/mongo/auth/scram/negotiation_spec.rb +68 -110
  369. data/spec/mongo/auth/scram_spec.rb +8 -5
  370. data/spec/mongo/auth/user/view_spec.rb +5 -5
  371. data/spec/mongo/auth/x509_spec.rb +9 -6
  372. data/spec/mongo/bulk_write_spec.rb +32 -22
  373. data/spec/mongo/client_construction_spec.rb +1164 -0
  374. data/spec/mongo/client_spec.rb +62 -1000
  375. data/spec/mongo/cluster/cursor_reaper_spec.rb +2 -2
  376. data/spec/mongo/cluster/topology/replica_set_spec.rb +186 -251
  377. data/spec/mongo/cluster/topology/sharded_spec.rb +48 -50
  378. data/spec/mongo/cluster/topology/single_spec.rb +62 -22
  379. data/spec/mongo/cluster/topology/unknown_spec.rb +30 -115
  380. data/spec/mongo/cluster/topology_spec.rb +111 -13
  381. data/spec/mongo/cluster_spec.rb +195 -246
  382. data/spec/mongo/collection/view/aggregation_spec.rb +7 -8
  383. data/spec/mongo/collection/view/change_stream_spec.rb +18 -7
  384. data/spec/mongo/collection/view/explainable_spec.rb +1 -1
  385. data/spec/mongo/collection/view/immutable_spec.rb +1 -1
  386. data/spec/mongo/collection/view/map_reduce_spec.rb +7 -8
  387. data/spec/mongo/collection/view/readable_spec.rb +7 -8
  388. data/spec/mongo/collection/view/writable_spec.rb +1 -1
  389. data/spec/mongo/collection/view_spec.rb +2 -5
  390. data/spec/mongo/collection_spec.rb +41 -48
  391. data/spec/mongo/cursor/builder/get_more_command_spec.rb +1 -1
  392. data/spec/mongo/cursor/builder/op_get_more_spec.rb +1 -1
  393. data/spec/mongo/cursor_spec.rb +51 -25
  394. data/spec/mongo/database_spec.rb +25 -37
  395. data/spec/mongo/error/no_server_available_spec.rb +22 -0
  396. data/spec/mongo/error/operation_failure_spec.rb +70 -0
  397. data/spec/mongo/error/parser_spec.rb +44 -10
  398. data/spec/mongo/grid/file/info_spec.rb +3 -3
  399. data/spec/mongo/grid/fs_bucket_spec.rb +18 -53
  400. data/spec/mongo/grid/stream/read_spec.rb +9 -15
  401. data/spec/mongo/grid/stream/write_spec.rb +11 -23
  402. data/spec/mongo/id_spec.rb +35 -0
  403. data/spec/mongo/index/view_spec.rb +11 -72
  404. data/spec/mongo/lint_spec.rb +76 -0
  405. data/spec/mongo/monitoring/event/command_failed_spec.rb +1 -1
  406. data/spec/mongo/monitoring/event/command_started_spec.rb +1 -1
  407. data/spec/mongo/monitoring/event/command_succeeded_spec.rb +1 -1
  408. data/spec/mongo/monitoring/event/secure_spec.rb +1 -1
  409. data/spec/mongo/monitoring/event/server_closed_spec.rb +35 -0
  410. data/spec/mongo/monitoring/event/server_description_changed_spec.rb +38 -0
  411. data/spec/mongo/monitoring/event/server_heartbeat_failed_spec.rb +31 -0
  412. data/spec/mongo/monitoring/event/server_heartbeat_started_spec.rb +31 -0
  413. data/spec/mongo/monitoring/event/server_heartbeat_succeeded_spec.rb +31 -0
  414. data/spec/mongo/monitoring/event/server_opening_spec.rb +35 -0
  415. data/spec/mongo/monitoring/event/topology_changed_spec.rb +41 -0
  416. data/spec/mongo/monitoring/event/topology_closed_spec.rb +35 -0
  417. data/spec/mongo/monitoring/event/topology_opening_spec.rb +35 -0
  418. data/spec/mongo/monitoring_spec.rb +2 -2
  419. data/spec/mongo/operation/aggregate_spec.rb +2 -2
  420. data/spec/mongo/operation/collections_info_spec.rb +2 -2
  421. data/spec/mongo/operation/command_spec.rb +1 -1
  422. data/spec/mongo/operation/create_index_spec.rb +8 -11
  423. data/spec/mongo/operation/create_user_spec.rb +6 -3
  424. data/spec/mongo/operation/delete/bulk_spec.rb +21 -12
  425. data/spec/mongo/operation/delete/command_spec.rb +3 -2
  426. data/spec/mongo/operation/delete/op_msg_spec.rb +32 -17
  427. data/spec/mongo/operation/delete_spec.rb +21 -10
  428. data/spec/mongo/operation/drop_index_spec.rb +5 -2
  429. data/spec/mongo/operation/find/legacy_spec.rb +3 -2
  430. data/spec/mongo/operation/get_more_spec.rb +2 -2
  431. data/spec/mongo/operation/indexes_spec.rb +3 -2
  432. data/spec/mongo/operation/insert/bulk_spec.rb +13 -3
  433. data/spec/mongo/operation/insert/command_spec.rb +3 -2
  434. data/spec/mongo/operation/insert/op_msg_spec.rb +34 -18
  435. data/spec/mongo/operation/insert_spec.rb +7 -6
  436. data/spec/mongo/operation/kill_cursors_spec.rb +2 -2
  437. data/spec/mongo/operation/map_reduce_spec.rb +2 -2
  438. data/spec/mongo/operation/remove_user_spec.rb +6 -2
  439. data/spec/mongo/operation/result_spec.rb +6 -3
  440. data/spec/mongo/operation/update/bulk_spec.rb +3 -3
  441. data/spec/mongo/operation/update/command_spec.rb +8 -7
  442. data/spec/mongo/operation/update/op_msg_spec.rb +36 -21
  443. data/spec/mongo/operation/update_spec.rb +8 -6
  444. data/spec/mongo/operation/update_user_spec.rb +6 -6
  445. data/spec/mongo/protocol/compressed_spec.rb +3 -2
  446. data/spec/mongo/protocol/delete_spec.rb +1 -1
  447. data/spec/mongo/protocol/get_more_spec.rb +1 -1
  448. data/spec/mongo/protocol/insert_spec.rb +1 -1
  449. data/spec/mongo/protocol/kill_cursors_spec.rb +1 -1
  450. data/spec/mongo/protocol/msg_spec.rb +14 -13
  451. data/spec/mongo/protocol/query_spec.rb +1 -1
  452. data/spec/mongo/protocol/update_spec.rb +1 -1
  453. data/spec/mongo/retryable_spec.rb +84 -0
  454. data/spec/mongo/{cluster → server}/app_metadata_spec.rb +15 -3
  455. data/spec/mongo/server/connection_auth_spec.rb +114 -0
  456. data/spec/mongo/server/connection_pool/queue_spec.rb +146 -30
  457. data/spec/mongo/server/connection_pool_spec.rb +11 -12
  458. data/spec/mongo/server/connection_spec.rb +339 -152
  459. data/spec/mongo/server/description_query_methods_spec.rb +288 -0
  460. data/spec/mongo/server/description_spec.rb +63 -240
  461. data/spec/mongo/server/monitor/app_metadata_spec.rb +16 -0
  462. data/spec/mongo/server/monitor/connection_spec.rb +31 -28
  463. data/spec/mongo/server/monitor_spec.rb +61 -32
  464. data/spec/mongo/server/round_trip_time_averager_spec.rb +43 -0
  465. data/spec/mongo/server_selector_spec.rb +106 -1
  466. data/spec/mongo/server_spec.rb +31 -12
  467. data/spec/mongo/session/session_pool_spec.rb +3 -1
  468. data/spec/mongo/session_spec.rb +64 -2
  469. data/spec/mongo/session_transaction_spec.rb +64 -0
  470. data/spec/mongo/socket/ssl_spec.rb +86 -10
  471. data/spec/mongo/uri/srv_protocol_spec.rb +40 -40
  472. data/spec/mongo/uri_spec.rb +74 -38
  473. data/spec/spec_helper.rb +39 -64
  474. data/spec/spec_tests/connection_string_spec.rb +4 -32
  475. data/spec/spec_tests/crud_spec.rb +12 -2
  476. data/spec/{support/change_streams_tests → spec_tests/data/change_streams}/change-streams-errors.yml +0 -0
  477. data/spec/{support/change_streams_tests → spec_tests/data/change_streams}/change-streams.yml +0 -0
  478. data/spec/{support → spec_tests/data}/command_monitoring/bulkWrite.yml +0 -0
  479. data/spec/{support → spec_tests/data}/command_monitoring/command.yml +0 -0
  480. data/spec/{support → spec_tests/data}/command_monitoring/deleteMany.yml +0 -0
  481. data/spec/{support → spec_tests/data}/command_monitoring/deleteOne.yml +0 -0
  482. data/spec/{support → spec_tests/data}/command_monitoring/find.yml +0 -0
  483. data/spec/{support → spec_tests/data}/command_monitoring/insertMany.yml +0 -0
  484. data/spec/{support → spec_tests/data}/command_monitoring/insertOne.yml +0 -0
  485. data/spec/{support → spec_tests/data}/command_monitoring/unacknowledgedBulkWrite.yml +0 -0
  486. data/spec/{support → spec_tests/data}/command_monitoring/updateMany.yml +0 -0
  487. data/spec/{support → spec_tests/data}/command_monitoring/updateOne.yml +0 -0
  488. data/spec/{support/connection_string_tests → spec_tests/data/connection_string}/invalid-uris.yml +0 -0
  489. data/spec/{support/connection_string_tests → spec_tests/data/connection_string}/valid-auth.yml +0 -0
  490. data/spec/{support/connection_string_tests → spec_tests/data/connection_string}/valid-db-with-dotted-name.yml +0 -0
  491. data/spec/{support/connection_string_tests → spec_tests/data/connection_string}/valid-host_identifiers.yml +0 -0
  492. data/spec/{support/connection_string_tests → spec_tests/data/connection_string}/valid-options.yml +0 -0
  493. data/spec/{support/connection_string_tests → spec_tests/data/connection_string}/valid-unix_socket-absolute.yml +0 -0
  494. data/spec/{support/connection_string_tests → spec_tests/data/connection_string}/valid-unix_socket-relative.yml +0 -0
  495. data/spec/{support/connection_string_tests → spec_tests/data/connection_string}/valid-warnings.yml +0 -0
  496. data/spec/{support/crud_tests → spec_tests/data/crud}/read/aggregate-collation.yml +0 -0
  497. data/spec/{support/crud_tests → spec_tests/data/crud}/read/aggregate-out.yml +6 -6
  498. data/spec/{support/crud_tests → spec_tests/data/crud}/read/aggregate.yml +0 -0
  499. data/spec/{support/crud_tests → spec_tests/data/crud}/read/count-collation.yml +0 -0
  500. data/spec/{support/crud_tests → spec_tests/data/crud}/read/count.yml +0 -0
  501. data/spec/{support/crud_tests → spec_tests/data/crud}/read/distinct-collation.yml +0 -0
  502. data/spec/{support/crud_tests → spec_tests/data/crud}/read/distinct.yml +0 -0
  503. data/spec/{support/crud_tests → spec_tests/data/crud}/read/find-collation.yml +0 -0
  504. data/spec/{support/crud_tests → spec_tests/data/crud}/read/find.yml +0 -0
  505. data/spec/{support/crud_tests → spec_tests/data/crud}/write/bulkWrite-arrayFilters.yml +0 -0
  506. data/spec/{support/crud_tests → spec_tests/data/crud}/write/deleteMany-collation.yml +0 -0
  507. data/spec/{support/crud_tests → spec_tests/data/crud}/write/deleteMany.yml +0 -0
  508. data/spec/{support/crud_tests → spec_tests/data/crud}/write/deleteOne-collation.yml +0 -0
  509. data/spec/{support/crud_tests → spec_tests/data/crud}/write/deleteOne.yml +0 -0
  510. data/spec/{support/crud_tests → spec_tests/data/crud}/write/findOneAndDelete-collation.yml +0 -0
  511. data/spec/{support/crud_tests → spec_tests/data/crud}/write/findOneAndDelete.yml +0 -0
  512. data/spec/{support/crud_tests → spec_tests/data/crud}/write/findOneAndReplace-collation.yml +0 -0
  513. data/spec/{support/crud_tests → spec_tests/data/crud}/write/findOneAndReplace-upsert.yml +0 -0
  514. data/spec/{support/crud_tests → spec_tests/data/crud}/write/findOneAndReplace-upsert_pre_2.6.yml +0 -0
  515. data/spec/{support/crud_tests → spec_tests/data/crud}/write/findOneAndReplace.yml +0 -0
  516. data/spec/{support/crud_tests → spec_tests/data/crud}/write/findOneAndUpdate-arrayFilters.yml +0 -0
  517. data/spec/{support/crud_tests → spec_tests/data/crud}/write/findOneAndUpdate-collation.yml +0 -0
  518. data/spec/{support/crud_tests → spec_tests/data/crud}/write/findOneAndUpdate.yml +0 -0
  519. data/spec/{support/crud_tests → spec_tests/data/crud}/write/insertMany.yml +0 -0
  520. data/spec/{support/crud_tests → spec_tests/data/crud}/write/insertOne.yml +0 -0
  521. data/spec/{support/crud_tests → spec_tests/data/crud}/write/replaceOne-collation.yml +0 -0
  522. data/spec/{support/crud_tests → spec_tests/data/crud}/write/replaceOne-pre_2.6.yml +0 -0
  523. data/spec/{support/crud_tests → spec_tests/data/crud}/write/replaceOne-upsert.yml +0 -0
  524. data/spec/{support/crud_tests → spec_tests/data/crud}/write/replaceOne.yml +0 -0
  525. data/spec/{support/crud_tests → spec_tests/data/crud}/write/updateMany-arrayFilters.yml +0 -0
  526. data/spec/{support/crud_tests → spec_tests/data/crud}/write/updateMany-collation.yml +0 -0
  527. data/spec/{support/crud_tests → spec_tests/data/crud}/write/updateMany-pre_2.6.yml +0 -0
  528. data/spec/{support/crud_tests → spec_tests/data/crud}/write/updateMany.yml +0 -0
  529. data/spec/{support/crud_tests → spec_tests/data/crud}/write/updateOne-arrayFilters.yml +0 -0
  530. data/spec/{support/crud_tests → spec_tests/data/crud}/write/updateOne-collation.yml +0 -0
  531. data/spec/{support/crud_tests → spec_tests/data/crud}/write/updateOne-pre_2.6.yml +0 -0
  532. data/spec/{support/crud_tests → spec_tests/data/crud}/write/updateOne.yml +0 -0
  533. data/spec/{support/dns_seedlist_discovery_tests → spec_tests/data/dns_seedlist_discovery}/longer-parent-in-return.yml +0 -0
  534. data/spec/{support/dns_seedlist_discovery_tests → spec_tests/data/dns_seedlist_discovery}/misformatted-option.yml +0 -0
  535. data/spec/{support/dns_seedlist_discovery_tests → spec_tests/data/dns_seedlist_discovery}/no-results.yml +0 -0
  536. data/spec/{support/dns_seedlist_discovery_tests → spec_tests/data/dns_seedlist_discovery}/not-enough-parts.yml +0 -0
  537. data/spec/{support/dns_seedlist_discovery_tests → spec_tests/data/dns_seedlist_discovery}/one-result-default-port.yml +0 -0
  538. data/spec/{support/dns_seedlist_discovery_tests → spec_tests/data/dns_seedlist_discovery}/one-txt-record-multiple-strings.yml +0 -0
  539. data/spec/{support/dns_seedlist_discovery_tests → spec_tests/data/dns_seedlist_discovery}/one-txt-record.yml +0 -0
  540. data/spec/{support/dns_seedlist_discovery_tests → spec_tests/data/dns_seedlist_discovery}/parent-part-mismatch1.yml +0 -0
  541. data/spec/{support/dns_seedlist_discovery_tests → spec_tests/data/dns_seedlist_discovery}/parent-part-mismatch2.yml +0 -0
  542. data/spec/{support/dns_seedlist_discovery_tests → spec_tests/data/dns_seedlist_discovery}/parent-part-mismatch3.yml +0 -0
  543. data/spec/{support/dns_seedlist_discovery_tests → spec_tests/data/dns_seedlist_discovery}/parent-part-mismatch4.yml +0 -0
  544. data/spec/{support/dns_seedlist_discovery_tests → spec_tests/data/dns_seedlist_discovery}/parent-part-mismatch5.yml +0 -0
  545. data/spec/{support/dns_seedlist_discovery_tests → spec_tests/data/dns_seedlist_discovery}/returned-parent-too-short.yml +0 -0
  546. data/spec/{support/dns_seedlist_discovery_tests → spec_tests/data/dns_seedlist_discovery}/returned-parent-wrong.yml +0 -0
  547. data/spec/{support/dns_seedlist_discovery_tests → spec_tests/data/dns_seedlist_discovery}/two-results-default-port.yml +0 -0
  548. data/spec/{support/dns_seedlist_discovery_tests → spec_tests/data/dns_seedlist_discovery}/two-results-nonstandard-port.yml +0 -0
  549. data/spec/{support/dns_seedlist_discovery_tests → spec_tests/data/dns_seedlist_discovery}/two-txt-records.yml +0 -0
  550. data/spec/{support/dns_seedlist_discovery_tests → spec_tests/data/dns_seedlist_discovery}/txt-record-not-allowed-option.yml +0 -0
  551. data/spec/{support/dns_seedlist_discovery_tests → spec_tests/data/dns_seedlist_discovery}/txt-record-with-overridden-ssl-option.yml +0 -0
  552. data/spec/{support/dns_seedlist_discovery_tests → spec_tests/data/dns_seedlist_discovery}/txt-record-with-overridden-uri-option.yml +0 -0
  553. data/spec/{support/dns_seedlist_discovery_tests → spec_tests/data/dns_seedlist_discovery}/txt-record-with-unallowed-option.yml +0 -0
  554. data/spec/{support/dns_seedlist_discovery_tests → spec_tests/data/dns_seedlist_discovery}/uri-with-port.yml +0 -0
  555. data/spec/{support/dns_seedlist_discovery_tests → spec_tests/data/dns_seedlist_discovery}/uri-with-two-hosts.yml +0 -0
  556. data/spec/{support/gridfs_tests → spec_tests/data/gridfs}/delete.yml +0 -0
  557. data/spec/{support/gridfs_tests → spec_tests/data/gridfs}/download.yml +0 -0
  558. data/spec/{support/gridfs_tests → spec_tests/data/gridfs}/download_by_name.yml +0 -0
  559. data/spec/{support/gridfs_tests → spec_tests/data/gridfs}/upload.yml +0 -0
  560. data/spec/{support → spec_tests/data}/max_staleness/ReplicaSetNoPrimary/DefaultNoMaxStaleness.yml +0 -0
  561. data/spec/{support → spec_tests/data}/max_staleness/ReplicaSetNoPrimary/Incompatible.yml +0 -0
  562. data/spec/{support → spec_tests/data}/max_staleness/ReplicaSetNoPrimary/LastUpdateTime.yml +0 -0
  563. data/spec/{support → spec_tests/data}/max_staleness/ReplicaSetNoPrimary/Nearest.yml +0 -0
  564. data/spec/{support → spec_tests/data}/max_staleness/ReplicaSetNoPrimary/Nearest2.yml +0 -0
  565. data/spec/{support → spec_tests/data}/max_staleness/ReplicaSetNoPrimary/NoKnownServers.yml +0 -0
  566. data/spec/{support → spec_tests/data}/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred.yml +0 -0
  567. data/spec/{support → spec_tests/data}/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred_tags.yml +0 -0
  568. data/spec/{support → spec_tests/data}/max_staleness/ReplicaSetNoPrimary/Secondary.yml +0 -0
  569. data/spec/{support → spec_tests/data}/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred.yml +0 -0
  570. data/spec/{support → spec_tests/data}/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred_tags.yml +0 -0
  571. data/spec/{support → spec_tests/data}/max_staleness/ReplicaSetNoPrimary/ZeroMaxStaleness.yml +0 -0
  572. data/spec/{support → spec_tests/data}/max_staleness/ReplicaSetWithPrimary/DefaultNoMaxStaleness.yml +0 -0
  573. data/spec/{support → spec_tests/data}/max_staleness/ReplicaSetWithPrimary/Incompatible.yml +0 -0
  574. data/spec/{support → spec_tests/data}/max_staleness/ReplicaSetWithPrimary/LastUpdateTime.yml +0 -0
  575. data/spec/{support → spec_tests/data}/max_staleness/ReplicaSetWithPrimary/LongHeartbeat.yml +0 -0
  576. data/spec/{support → spec_tests/data}/max_staleness/ReplicaSetWithPrimary/LongHeartbeat2.yml +0 -0
  577. data/spec/{support → spec_tests/data}/max_staleness/ReplicaSetWithPrimary/MaxStalenessTooSmall.yml +0 -0
  578. data/spec/{support → spec_tests/data}/max_staleness/ReplicaSetWithPrimary/MaxStalenessWithModePrimary.yml +0 -0
  579. data/spec/{support → spec_tests/data}/max_staleness/ReplicaSetWithPrimary/Nearest.yml +0 -0
  580. data/spec/{support → spec_tests/data}/max_staleness/ReplicaSetWithPrimary/Nearest2.yml +0 -0
  581. data/spec/{support → spec_tests/data}/max_staleness/ReplicaSetWithPrimary/Nearest_tags.yml +0 -0
  582. data/spec/{support → spec_tests/data}/max_staleness/ReplicaSetWithPrimary/PrimaryPreferred.yml +0 -0
  583. data/spec/{support → spec_tests/data}/max_staleness/ReplicaSetWithPrimary/PrimaryPreferred_incompatible.yml +0 -0
  584. data/spec/{support → spec_tests/data}/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred.yml +0 -0
  585. data/spec/{support → spec_tests/data}/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags.yml +0 -0
  586. data/spec/{support → spec_tests/data}/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags2.yml +0 -0
  587. data/spec/{support → spec_tests/data}/max_staleness/ReplicaSetWithPrimary/Secondary_tags.yml +0 -0
  588. data/spec/{support → spec_tests/data}/max_staleness/ReplicaSetWithPrimary/Secondary_tags2.yml +0 -0
  589. data/spec/{support → spec_tests/data}/max_staleness/ReplicaSetWithPrimary/ZeroMaxStaleness.yml +0 -0
  590. data/spec/{support → spec_tests/data}/max_staleness/Sharded/Incompatible.yml +0 -0
  591. data/spec/{support → spec_tests/data}/max_staleness/Sharded/SmallMaxStaleness.yml +0 -0
  592. data/spec/{support → spec_tests/data}/max_staleness/Single/Incompatible.yml +0 -0
  593. data/spec/{support → spec_tests/data}/max_staleness/Single/SmallMaxStaleness.yml +0 -0
  594. data/spec/{support → spec_tests/data}/max_staleness/Unknown/SmallMaxStaleness.yml +0 -0
  595. data/spec/{support/retryable_writes_tests → spec_tests/data/retryable_writes}/bulkWrite-serverErrors.yml +0 -0
  596. data/spec/{support/retryable_writes_tests → spec_tests/data/retryable_writes}/bulkWrite.yml +0 -0
  597. data/spec/{support/retryable_writes_tests → spec_tests/data/retryable_writes}/deleteOne-serverErrors.yml +0 -0
  598. data/spec/{support/retryable_writes_tests → spec_tests/data/retryable_writes}/deleteOne.yml +0 -0
  599. data/spec/{support/retryable_writes_tests → spec_tests/data/retryable_writes}/findOneAndDelete-serverErrors.yml +0 -0
  600. data/spec/{support/retryable_writes_tests → spec_tests/data/retryable_writes}/findOneAndDelete.yml +0 -0
  601. data/spec/{support/retryable_writes_tests → spec_tests/data/retryable_writes}/findOneAndReplace-serverErrors.yml +0 -0
  602. data/spec/{support/retryable_writes_tests → spec_tests/data/retryable_writes}/findOneAndReplace.yml +0 -0
  603. data/spec/{support/retryable_writes_tests → spec_tests/data/retryable_writes}/findOneAndUpdate-serverErrors.yml +0 -0
  604. data/spec/{support/retryable_writes_tests → spec_tests/data/retryable_writes}/findOneAndUpdate.yml +0 -0
  605. data/spec/{support/retryable_writes_tests → spec_tests/data/retryable_writes}/insertMany-serverErrors.yml +0 -0
  606. data/spec/{support/retryable_writes_tests → spec_tests/data/retryable_writes}/insertMany.yml +0 -0
  607. data/spec/{support/retryable_writes_tests → spec_tests/data/retryable_writes}/insertOne-serverErrors.yml +0 -0
  608. data/spec/{support/retryable_writes_tests → spec_tests/data/retryable_writes}/insertOne.yml +0 -0
  609. data/spec/{support/retryable_writes_tests → spec_tests/data/retryable_writes}/replaceOne-serverErrors.yml +0 -0
  610. data/spec/{support/retryable_writes_tests → spec_tests/data/retryable_writes}/replaceOne.yml +0 -0
  611. data/spec/{support/retryable_writes_tests → spec_tests/data/retryable_writes}/updateOne-serverErrors.yml +0 -0
  612. data/spec/{support/retryable_writes_tests → spec_tests/data/retryable_writes}/updateOne.yml +0 -0
  613. data/spec/{support → spec_tests/data}/sdam/rs/compatible.yml +0 -0
  614. data/spec/spec_tests/data/sdam/rs/compatible_unknown.yml +31 -0
  615. data/spec/{support → spec_tests/data}/sdam/rs/discover_arbiters.yml +0 -0
  616. data/spec/{support → spec_tests/data}/sdam/rs/discover_passives.yml +0 -0
  617. data/spec/{support → spec_tests/data}/sdam/rs/discover_primary.yml +0 -0
  618. data/spec/{support → spec_tests/data}/sdam/rs/discover_secondary.yml +0 -0
  619. data/spec/{support → spec_tests/data}/sdam/rs/discovery.yml +0 -0
  620. data/spec/{support → spec_tests/data}/sdam/rs/equal_electionids.yml +2 -0
  621. data/spec/{support → spec_tests/data}/sdam/rs/ghost_discovered.yml +0 -0
  622. data/spec/{support → spec_tests/data}/sdam/rs/hosts_differ_from_seeds.yml +0 -0
  623. data/spec/spec_tests/data/sdam/rs/incompatible_arbiter.yml +32 -0
  624. data/spec/spec_tests/data/sdam/rs/incompatible_ghost.yml +32 -0
  625. data/spec/spec_tests/data/sdam/rs/incompatible_other.yml +32 -0
  626. data/spec/{support → spec_tests/data}/sdam/rs/ls_timeout.yml +0 -0
  627. data/spec/{support → spec_tests/data}/sdam/rs/member_reconfig.yml +0 -0
  628. data/spec/{support → spec_tests/data}/sdam/rs/member_standalone.yml +0 -0
  629. data/spec/{support → spec_tests/data}/sdam/rs/new_primary.yml +0 -0
  630. data/spec/{support → spec_tests/data}/sdam/rs/new_primary_new_electionid.yml +6 -0
  631. data/spec/{support → spec_tests/data}/sdam/rs/new_primary_new_setversion.yml +6 -0
  632. data/spec/{support → spec_tests/data}/sdam/rs/new_primary_wrong_set_name.yml +0 -0
  633. data/spec/{support → spec_tests/data}/sdam/rs/non_rs_member.yml +0 -0
  634. data/spec/{support → spec_tests/data}/sdam/rs/normalize_case.yml +0 -0
  635. data/spec/{support → spec_tests/data}/sdam/rs/normalize_case_me.yml +0 -0
  636. data/spec/{support → spec_tests/data}/sdam/rs/null_election_id.yml +7 -0
  637. data/spec/spec_tests/data/sdam/rs/primary_becomes_ghost.yml +63 -0
  638. data/spec/spec_tests/data/sdam/rs/primary_becomes_mongos.yml +56 -0
  639. data/spec/{support → spec_tests/data}/sdam/rs/primary_becomes_standalone.yml +0 -0
  640. data/spec/{support → spec_tests/data}/sdam/rs/primary_changes_set_name.yml +0 -0
  641. data/spec/{support → spec_tests/data}/sdam/rs/primary_disconnect.yml +0 -0
  642. data/spec/{support → spec_tests/data}/sdam/rs/primary_disconnect_electionid.yml +10 -0
  643. data/spec/{support → spec_tests/data}/sdam/rs/primary_disconnect_setversion.yml +10 -0
  644. data/spec/{support → spec_tests/data}/sdam/rs/primary_hint_from_secondary_with_mismatched_me.yml +0 -0
  645. data/spec/{support → spec_tests/data}/sdam/rs/primary_mismatched_me.yml +0 -0
  646. data/spec/{support → spec_tests/data}/sdam/rs/primary_reports_new_member.yml +0 -0
  647. data/spec/{support → spec_tests/data}/sdam/rs/primary_to_no_primary_mismatched_me.yml +0 -0
  648. data/spec/{support → spec_tests/data}/sdam/rs/primary_wrong_set_name.yml +0 -0
  649. data/spec/{support → spec_tests/data}/sdam/rs/response_from_removed.yml +0 -0
  650. data/spec/{support → spec_tests/data}/sdam/rs/rsother_discovered.yml +0 -0
  651. data/spec/{support → spec_tests/data}/sdam/rs/sec_not_auth.yml +0 -0
  652. data/spec/{support → spec_tests/data}/sdam/rs/secondary_ignore_ok_0.yml +0 -0
  653. data/spec/{support → spec_tests/data}/sdam/rs/secondary_mismatched_me.yml +0 -0
  654. data/spec/{support → spec_tests/data}/sdam/rs/secondary_wrong_set_name.yml +0 -0
  655. data/spec/{support → spec_tests/data}/sdam/rs/secondary_wrong_set_name_with_primary.yml +0 -0
  656. data/spec/spec_tests/data/sdam/rs/secondary_wrong_set_name_with_primary_second.yml +73 -0
  657. data/spec/{support → spec_tests/data}/sdam/rs/setversion_without_electionid.yml +2 -0
  658. data/spec/{support → spec_tests/data}/sdam/rs/stepdown_change_set_name.yml +0 -0
  659. data/spec/{support → spec_tests/data}/sdam/rs/too_new.yml +0 -0
  660. data/spec/{support → spec_tests/data}/sdam/rs/too_old.yml +0 -0
  661. data/spec/{support → spec_tests/data}/sdam/rs/unexpected_mongos.yml +0 -0
  662. data/spec/{support → spec_tests/data}/sdam/rs/use_setversion_without_electionid.yml +6 -0
  663. data/spec/{support → spec_tests/data}/sdam/rs/wrong_set_name.yml +0 -0
  664. data/spec/{support → spec_tests/data}/sdam/sharded/compatible.yml +0 -0
  665. data/spec/{support → spec_tests/data}/sdam/sharded/ls_timeout_mongos.yml +0 -0
  666. data/spec/{support → spec_tests/data}/sdam/sharded/mongos_disconnect.yml +0 -0
  667. data/spec/{support → spec_tests/data}/sdam/sharded/multiple_mongoses.yml +0 -0
  668. data/spec/{support → spec_tests/data}/sdam/sharded/non_mongos_removed.yml +0 -0
  669. data/spec/{support → spec_tests/data}/sdam/sharded/normalize_uri_case.yml +0 -0
  670. data/spec/{support → spec_tests/data}/sdam/sharded/single_mongos.yml +0 -0
  671. data/spec/{support → spec_tests/data}/sdam/sharded/too_new.yml +0 -0
  672. data/spec/{support → spec_tests/data}/sdam/sharded/too_old.yml +0 -0
  673. data/spec/{support → spec_tests/data}/sdam/single/compatible.yml +0 -0
  674. data/spec/{support → spec_tests/data}/sdam/single/direct_connection_external_ip.yml +0 -0
  675. data/spec/{support → spec_tests/data}/sdam/single/direct_connection_mongos.yml +0 -0
  676. data/spec/{support → spec_tests/data}/sdam/single/direct_connection_rsarbiter.yml +0 -0
  677. data/spec/{support → spec_tests/data}/sdam/single/direct_connection_rsprimary.yml +0 -0
  678. data/spec/{support → spec_tests/data}/sdam/single/direct_connection_rssecondary.yml +0 -0
  679. data/spec/{support → spec_tests/data}/sdam/single/direct_connection_slave.yml +0 -0
  680. data/spec/{support → spec_tests/data}/sdam/single/direct_connection_standalone.yml +0 -0
  681. data/spec/{support → spec_tests/data}/sdam/single/ls_timeout_standalone.yml +0 -0
  682. data/spec/{support → spec_tests/data}/sdam/single/not_ok_response.yml +0 -0
  683. data/spec/{support → spec_tests/data}/sdam/single/standalone_removed.yml +0 -0
  684. data/spec/{support → spec_tests/data}/sdam/single/too_new.yml +0 -0
  685. data/spec/{support → spec_tests/data}/sdam/single/too_old.yml +0 -0
  686. data/spec/{support → spec_tests/data}/sdam/single/unavailable_seed.yml +0 -0
  687. data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +72 -0
  688. data/spec/spec_tests/data/sdam_monitoring/replica_set_other_chain.yml +222 -0
  689. data/spec/spec_tests/data/sdam_monitoring/replica_set_other_change.yml +225 -0
  690. data/spec/spec_tests/data/sdam_monitoring/replica_set_other_seed.yml +233 -0
  691. data/spec/{support → spec_tests/data}/sdam_monitoring/replica_set_with_no_primary.yml +0 -0
  692. data/spec/{support → spec_tests/data}/sdam_monitoring/replica_set_with_primary.yml +0 -0
  693. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_primary_and_secondary.yml +198 -0
  694. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_primary_removal.yml +171 -0
  695. data/spec/{support → spec_tests/data}/sdam_monitoring/replica_set_with_removal.yml +0 -0
  696. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_second_seed_removal.yml +106 -0
  697. data/spec/{support → spec_tests/data}/sdam_monitoring/required_replica_set.yml +23 -0
  698. data/spec/{support → spec_tests/data}/sdam_monitoring/standalone.yml +2 -2
  699. data/spec/spec_tests/data/sdam_monitoring/standalone_repeated.yml +86 -0
  700. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/ReplicaSetNoPrimary/read/Nearest.yml +0 -0
  701. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/ReplicaSetNoPrimary/read/Nearest_multiple.yml +0 -0
  702. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/ReplicaSetNoPrimary/read/Nearest_non_matching.yml +0 -0
  703. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/ReplicaSetNoPrimary/read/PossiblePrimary.yml +0 -0
  704. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/ReplicaSetNoPrimary/read/PossiblePrimaryNearest.yml +0 -0
  705. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/ReplicaSetNoPrimary/read/Primary.yml +0 -0
  706. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/ReplicaSetNoPrimary/read/PrimaryPreferred.yml +0 -0
  707. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml +0 -0
  708. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/ReplicaSetNoPrimary/read/Secondary.yml +0 -0
  709. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/ReplicaSetNoPrimary/read/SecondaryPreferred.yml +0 -0
  710. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml +0 -0
  711. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/ReplicaSetNoPrimary/read/Secondary_multi_tags.yml +0 -0
  712. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/ReplicaSetNoPrimary/read/Secondary_multi_tags2.yml +0 -0
  713. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/ReplicaSetNoPrimary/read/Secondary_non_matching.yml +0 -0
  714. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/ReplicaSetWithPrimary/read/Nearest.yml +0 -0
  715. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/ReplicaSetWithPrimary/read/Nearest_multiple.yml +0 -0
  716. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/ReplicaSetWithPrimary/read/Nearest_non_matching.yml +0 -0
  717. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/ReplicaSetWithPrimary/read/Primary.yml +0 -0
  718. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/ReplicaSetWithPrimary/read/PrimaryPreferred.yml +0 -0
  719. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml +0 -0
  720. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/ReplicaSetWithPrimary/read/Secondary.yml +0 -0
  721. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/ReplicaSetWithPrimary/read/SecondaryPreferred.yml +0 -0
  722. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/ReplicaSetWithPrimary/read/SecondaryPreferred_non_matching.yml +0 -0
  723. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/ReplicaSetWithPrimary/read/SecondaryPreferred_tags.yml +0 -0
  724. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/ReplicaSetWithPrimary/read/Secondary_non_matching.yml +0 -0
  725. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/Sharded/read/Nearest.yml +0 -0
  726. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/Sharded/read/Primary.yml +0 -0
  727. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/Sharded/read/PrimaryPreferred.yml +0 -0
  728. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/Sharded/read/Secondary.yml +0 -0
  729. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/Sharded/read/SecondaryPreferred.yml +0 -0
  730. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/Single/read/SecondaryPreferred.yml +0 -0
  731. data/spec/{support/server_selection/selection → spec_tests/data/server_selection}/Unknown/read/SecondaryPreferred.yml +0 -0
  732. data/spec/{support/server_selection/rtt → spec_tests/data/server_selection_rtt}/first_value.yml +0 -0
  733. data/spec/{support/server_selection/rtt → spec_tests/data/server_selection_rtt}/first_value_zero.yml +0 -0
  734. data/spec/{support/server_selection/rtt → spec_tests/data/server_selection_rtt}/value_test_1.yml +0 -0
  735. data/spec/{support/server_selection/rtt → spec_tests/data/server_selection_rtt}/value_test_2.yml +0 -0
  736. data/spec/{support/server_selection/rtt → spec_tests/data/server_selection_rtt}/value_test_3.yml +0 -0
  737. data/spec/{support/server_selection/rtt → spec_tests/data/server_selection_rtt}/value_test_4.yml +0 -0
  738. data/spec/{support/server_selection/rtt → spec_tests/data/server_selection_rtt}/value_test_5.yml +0 -0
  739. data/spec/{support/transactions_tests → spec_tests/data/transactions}/abort.yml +0 -0
  740. data/spec/{support/transactions_tests → spec_tests/data/transactions}/bulk.yml +0 -0
  741. data/spec/{support/transactions_tests → spec_tests/data/transactions}/causal-consistency.yml +0 -0
  742. data/spec/{support/transactions_tests → spec_tests/data/transactions}/commit.yml +0 -0
  743. data/spec/{support/transactions_tests → spec_tests/data/transactions}/delete.yml +0 -0
  744. data/spec/{support/transactions_tests → spec_tests/data/transactions}/error-labels.yml +0 -0
  745. data/spec/{support/transactions_tests → spec_tests/data/transactions}/errors.yml +0 -0
  746. data/spec/{support/transactions_tests → spec_tests/data/transactions}/findOneAndDelete.yml +0 -0
  747. data/spec/{support/transactions_tests → spec_tests/data/transactions}/findOneAndReplace.yml +0 -0
  748. data/spec/{support/transactions_tests → spec_tests/data/transactions}/findOneAndUpdate.yml +0 -0
  749. data/spec/{support/transactions_tests → spec_tests/data/transactions}/insert.yml +0 -0
  750. data/spec/{support/transactions_tests → spec_tests/data/transactions}/isolation.yml +0 -0
  751. data/spec/{support/transactions_tests → spec_tests/data/transactions}/read-pref.yml +0 -0
  752. data/spec/{support/transactions_tests → spec_tests/data/transactions}/reads.yml +0 -0
  753. data/spec/{support/transactions_tests → spec_tests/data/transactions}/retryable-abort.yml +0 -0
  754. data/spec/{support/transactions_tests → spec_tests/data/transactions}/retryable-commit.yml +0 -0
  755. data/spec/{support/transactions_tests → spec_tests/data/transactions}/retryable-writes.yml +0 -0
  756. data/spec/{support/transactions_tests → spec_tests/data/transactions}/run-command.yml +0 -0
  757. data/spec/{support/transactions_tests → spec_tests/data/transactions}/transaction-options.yml +0 -0
  758. data/spec/{support/transactions_tests → spec_tests/data/transactions}/update.yml +0 -0
  759. data/spec/{support/transactions_tests → spec_tests/data/transactions}/write-concern.yml +0 -0
  760. data/spec/spec_tests/data/transactions_api/callback-aborts.yml +156 -0
  761. data/spec/spec_tests/data/transactions_api/callback-commits.yml +192 -0
  762. data/spec/spec_tests/data/transactions_api/callback-retry.yml +203 -0
  763. data/spec/spec_tests/data/transactions_api/commit-retry.yml +261 -0
  764. data/spec/spec_tests/data/transactions_api/commit-transienttransactionerror-4.2.yml +132 -0
  765. data/spec/spec_tests/data/transactions_api/commit-transienttransactionerror.yml +178 -0
  766. data/spec/spec_tests/data/transactions_api/commit-writeconcernerror.yml +269 -0
  767. data/spec/spec_tests/data/transactions_api/commit.yml +181 -0
  768. data/spec/spec_tests/data/transactions_api/transaction-options.yml +258 -0
  769. data/spec/spec_tests/data/uri_options/auth-options.yml +14 -0
  770. data/spec/spec_tests/data/uri_options/compression-options.yml +48 -0
  771. data/spec/spec_tests/data/uri_options/concern-options.yml +55 -0
  772. data/spec/spec_tests/data/uri_options/connection-options.yml +106 -0
  773. data/spec/spec_tests/data/uri_options/connection-pool-options.yml +26 -0
  774. data/spec/spec_tests/data/uri_options/read-preference-options.yml +42 -0
  775. data/spec/spec_tests/data/uri_options/tls-options.yml +89 -0
  776. data/spec/spec_tests/dns_seedlist_discovery_spec.rb +0 -40
  777. data/spec/spec_tests/gridfs_spec.rb +1 -1
  778. data/spec/spec_tests/max_staleness_spec.rb +21 -8
  779. data/spec/spec_tests/retryable_writes_spec.rb +6 -6
  780. data/spec/spec_tests/sdam_monitoring_spec.rb +38 -20
  781. data/spec/spec_tests/sdam_spec.rb +80 -15
  782. data/spec/spec_tests/server_selection_rtt_spec.rb +6 -63
  783. data/spec/spec_tests/server_selection_spec.rb +18 -3
  784. data/spec/spec_tests/transactions_api_spec.rb +60 -0
  785. data/spec/spec_tests/transactions_spec.rb +20 -13
  786. data/spec/spec_tests/uri_options_spec.rb +94 -0
  787. data/spec/support/authorization.rb +28 -167
  788. data/spec/support/change_streams.rb +7 -7
  789. data/spec/support/change_streams/operation.rb +1 -1
  790. data/spec/support/client_registry.rb +170 -0
  791. data/spec/support/client_registry_macros.rb +14 -0
  792. data/spec/support/cluster_config.rb +49 -0
  793. data/spec/support/command_monitoring.rb +3 -3
  794. data/spec/support/common_shortcuts.rb +12 -0
  795. data/spec/support/connection_string.rb +99 -7
  796. data/spec/support/constraints.rb +24 -13
  797. data/spec/support/crud.rb +9 -97
  798. data/spec/support/crud/read.rb +2 -2
  799. data/spec/support/crud/verifier.rb +98 -0
  800. data/spec/support/crud/write.rb +2 -2
  801. data/spec/support/event_subscriber.rb +25 -13
  802. data/spec/support/gridfs.rb +8 -5
  803. data/spec/support/json_ext_formatter.rb +9 -0
  804. data/spec/support/lite_constraints.rb +27 -1
  805. data/spec/support/monitoring_ext.rb +16 -0
  806. data/spec/support/sdam_formatter_integration.rb +110 -0
  807. data/spec/support/sdam_monitoring.rb +77 -17
  808. data/spec/support/server_discovery_and_monitoring.rb +43 -20
  809. data/spec/support/server_selection.rb +3 -13
  810. data/spec/support/server_selection_rtt.rb +10 -10
  811. data/spec/support/shared/server_selector.rb +13 -41
  812. data/spec/support/shared/session.rb +44 -22
  813. data/spec/support/spec_config.rb +186 -11
  814. data/spec/support/spec_setup.rb +61 -0
  815. data/spec/support/transactions.rb +79 -145
  816. data/spec/support/transactions/operation.rb +53 -14
  817. data/spec/support/transactions/verifier.rb +94 -0
  818. metadata +712 -565
  819. metadata.gz.sig +0 -0
  820. data/lib/mongo/cluster/topology/replica_set.rb +0 -339
  821. data/lib/mongo/event/member_discovered.rb +0 -67
  822. data/lib/mongo/event/primary_elected.rb +0 -55
  823. data/lib/mongo/event/standalone_discovered.rb +0 -53
  824. data/lib/mongo/server/description/inspector.rb +0 -81
  825. data/lib/mongo/server/description/inspector/description_changed.rb +0 -57
  826. data/lib/mongo/server/description/inspector/member_discovered.rb +0 -59
  827. data/lib/mongo/server/description/inspector/primary_elected.rb +0 -60
  828. data/lib/mongo/server/description/inspector/standalone_discovered.rb +0 -56
  829. data/spec/mongo/server/description/inspector/description_changed_spec.rb +0 -78
  830. data/spec/mongo/server/description/inspector/primary_elected_spec.rb +0 -94
  831. data/spec/support/sdam/rs/set_version_without_electionid.yml +0 -69
  832. data/spec/support/travis.rb +0 -14
@@ -0,0 +1,27 @@
1
+ # Copyright (C) 2018-2019 MongoDB, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module Mongo
16
+ class Cluster
17
+ module Topology
18
+
19
+ # Defines behavior when a cluster is in replica set topology,
20
+ # and is a no primary which has been discovered by the driver.
21
+ #
22
+ # @since 2.7.0
23
+ class ReplicaSetWithPrimary < ReplicaSetNoPrimary
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2014-2018 MongoDB, Inc.
1
+ # Copyright (C) 2014-2019 MongoDB, Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -16,23 +16,17 @@ module Mongo
16
16
  class Cluster
17
17
  module Topology
18
18
 
19
- # Defines behaviour for when a cluster is in sharded topology.
19
+ # Defines behavior for when a cluster is in sharded topology.
20
20
  #
21
21
  # @since 2.0.0
22
- class Sharded
23
- include Monitoring::Publishable
22
+ class Sharded < Base
23
+ include NoReplicaSetOptions
24
24
 
25
25
  # The display name for the topology.
26
26
  #
27
27
  # @since 2.0.0
28
28
  NAME = 'Sharded'.freeze
29
29
 
30
- # @return [ Hash ] options The options.
31
- attr_reader :options
32
-
33
- # @return [ Monitoring ] monitoring The monitoring.
34
- attr_reader :monitoring
35
-
36
30
  # Get the display name.
37
31
  #
38
32
  # @example Get the display name.
@@ -42,21 +36,17 @@ module Mongo
42
36
  #
43
37
  # @since 2.0.0
44
38
  def display_name
45
- NAME
39
+ self.class.name.gsub(/.*::/, '')
46
40
  end
47
41
 
48
- # Elect a primary server within this topology.
49
- #
50
- # @example Elect a primary server.
51
- # topology.elect_primary(description, servers)
42
+ # @note This method is experimental and subject to change.
52
43
  #
53
- # @param [ Server::Description ] description The description of the
54
- # elected primary.
55
- # @param [ Array<Server> ] servers The list of known servers to the
56
- # cluster.
57
- #
58
- # @return [ Sharded ] The topology.
59
- def elect_primary(description, servers); self; end
44
+ # @api experimental
45
+ # @since 2.7.0
46
+ def summary
47
+ details = server_descriptions.keys.join(',')
48
+ "#{display_name}[#{details}]"
49
+ end
60
50
 
61
51
  # Determine if the topology would select a readable server for the
62
52
  # provided candidates and read preference.
@@ -86,21 +76,6 @@ module Mongo
86
76
  # @since 2.4.0
87
77
  def has_writable_server?(cluster); true; end
88
78
 
89
- # Initialize the topology with the options.
90
- #
91
- # @example Initialize the topology.
92
- # Sharded.new(options)
93
- #
94
- # @param [ Hash ] options The options.
95
- # @param [ Monitoring ] monitoring The monitoring.
96
- # @param [ Array<String> ] seeds The seeds.
97
- #
98
- # @since 2.0.0
99
- def initialize(options, monitoring, seeds = [])
100
- @options = options
101
- @monitoring = monitoring
102
- end
103
-
104
79
  # A sharded topology is not a replica set.
105
80
  #
106
81
  # @example Is the topology a replica set?
@@ -111,16 +86,6 @@ module Mongo
111
86
  # @since 2.0.0
112
87
  def replica_set?; false; end
113
88
 
114
- # Sharded topologies have no replica set name.
115
- #
116
- # @example Get the replica set name.
117
- # sharded.replica_set_name
118
- #
119
- # @return [ nil ] Always nil.
120
- #
121
- # @since 2.0.0
122
- def replica_set_name; nil; end
123
-
124
89
  # Select appropriate servers for this topology.
125
90
  #
126
91
  # @example Select the servers.
@@ -135,50 +100,6 @@ module Mongo
135
100
  servers.select{ |server| server.mongos? }
136
101
  end
137
102
 
138
- # Whether a server description's hosts may be added to the cluster.
139
- #
140
- # @example Check if a description's hosts may be added to the cluster.
141
- # topology.add_hosts?(description, servers)
142
- #
143
- # @param [ Mongo::Server::Description ] description The description.
144
- # @param [ Array<Mongo::Server> ] servers The cluster servers.
145
- #
146
- # @return [ false ] A description's hosts are never added to a
147
- # sharded cluster.
148
- #
149
- # @since 2.0.6
150
- def add_hosts?(description, servers); false; end
151
-
152
- # Whether a description can be used to remove hosts from the cluster.
153
- #
154
- # @example Check if a description can be used to remove hosts from
155
- # the cluster.
156
- # topology.remove_hosts?(description)
157
- #
158
- # @param [ Mongo::Server::Description ] description The description.
159
- #
160
- # @return [ true ] A description can always be used to remove hosts
161
- # from a sharded cluster.
162
- #
163
- # @since 2.0.6
164
- def remove_hosts?(description); true; end
165
-
166
- # Whether a specific server in the cluster can be removed, given a description.
167
- #
168
- # @example Check if a specific server can be removed from the cluster.
169
- # topology.remove_server?(description, server)
170
- #
171
- # @param [ Mongo::Server::Description ] description The description.
172
- # @param [ Mongo::Serve ] server The server in question.
173
- #
174
- # @return [ true, false ] Whether the server can be removed from the cluster.
175
- #
176
- # @since 2.0.6
177
- def remove_server?(description, server)
178
- remove_self?(description, server) ||
179
- !(server.mongos? || server.unknown?)
180
- end
181
-
182
103
  # A sharded topology is sharded.
183
104
  #
184
105
  # @example Is the topology sharded?
@@ -208,30 +129,6 @@ module Mongo
208
129
  #
209
130
  # @since 2.0.0
210
131
  def unknown?; false; end
211
-
212
- # Notify the topology that a standalone was discovered.
213
- #
214
- # @example Notify the topology that a standalone was discovered.
215
- # topology.standalone_discovered
216
- #
217
- # @return [ Topology::Sharded ] Always returns self.
218
- #
219
- # @since 2.0.6
220
- def standalone_discovered; self; end
221
-
222
- # Notify the topology that a member was discovered.
223
- #
224
- # @example Notify the cluster that a member was discovered.
225
- # topology.member_discovered
226
- #
227
- # @since 2.4.0
228
- def member_discovered; end;
229
-
230
- private
231
-
232
- def remove_self?(description, server)
233
- description.is_server?(server) && !(description.mongos? || description.unknown?)
234
- end
235
132
  end
236
133
  end
237
134
  end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2014-2018 MongoDB, Inc.
1
+ # Copyright (C) 2014-2019 MongoDB, Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -16,26 +16,16 @@ module Mongo
16
16
  class Cluster
17
17
  module Topology
18
18
 
19
- # Defines behaviour for when a cluster is in single topology.
19
+ # Defines behavior for when a cluster is in single topology.
20
20
  #
21
21
  # @since 2.0.0
22
- class Single
23
- include Monitoring::Publishable
22
+ class Single < Base
24
23
 
25
24
  # The display name for the topology.
26
25
  #
27
26
  # @since 2.0.0
28
27
  NAME = 'Single'.freeze
29
28
 
30
- # @return [ Hash ] options The options.
31
- attr_reader :options
32
-
33
- # @return [ String ] seed The seed address.
34
- attr_reader :seed
35
-
36
- # @return [ monitoring ] monitoring the monitoring.
37
- attr_reader :monitoring
38
-
39
29
  # Get the display name.
40
30
  #
41
31
  # @example Get the display name.
@@ -45,21 +35,17 @@ module Mongo
45
35
  #
46
36
  # @since 2.0.0
47
37
  def display_name
48
- NAME
38
+ self.class.name.gsub(/.*::/, '')
49
39
  end
50
40
 
51
- # Elect a primary server within this topology.
52
- #
53
- # @example Elect a primary server.
54
- # topology.elect_primary(description, servers)
55
- #
56
- # @param [ Server::Description ] description The description of the
57
- # elected primary.
58
- # @param [ Array<Server> ] servers The list of known servers to the
59
- # cluster.
41
+ # @note This method is experimental and subject to change.
60
42
  #
61
- # @return [ Single ] The topology.
62
- def elect_primary(description, servers); self; end
43
+ # @api experimental
44
+ # @since 2.7.0
45
+ def summary
46
+ details = server_descriptions.keys.join(',')
47
+ "#{display_name}[#{details}]"
48
+ end
63
49
 
64
50
  # Determine if the topology would select a readable server for the
65
51
  # provided candidates and read preference.
@@ -89,22 +75,6 @@ module Mongo
89
75
  # @since 2.4.0
90
76
  def has_writable_server?(cluster); true; end
91
77
 
92
- # Initialize the topology with the options.
93
- #
94
- # @example Initialize the topology.
95
- # Single.new(options)
96
- #
97
- # @param [ Hash ] options The options.
98
- # @param [ Monitoring ] monitoring The monitoring.
99
- # @param [ Array<String> ] seeds The seeds.
100
- #
101
- # @since 2.0.0
102
- def initialize(options, monitoring, seeds = [])
103
- @options = options
104
- @monitoring = monitoring
105
- @seed = seeds.first
106
- end
107
-
108
78
  # A single topology is not a replica set.
109
79
  #
110
80
  # @example Is the topology a replica set?
@@ -115,16 +85,6 @@ module Mongo
115
85
  # @since 2.0.0
116
86
  def replica_set?; false; end
117
87
 
118
- # Single topologies have no replica set name.
119
- #
120
- # @example Get the replica set name.
121
- # single.replica_set_name
122
- #
123
- # @return [ nil ] Always nil.
124
- #
125
- # @since 2.0.0
126
- def replica_set_name; nil; end
127
-
128
88
  # Select appropriate servers for this topology.
129
89
  #
130
90
  # @example Select the servers.
@@ -139,47 +99,6 @@ module Mongo
139
99
  [ servers.detect { |server| !server.unknown? } ]
140
100
  end
141
101
 
142
- # Whether a server description's hosts may be added to the cluster.
143
- #
144
- # @example Check if a description's hosts may be added to the cluster.
145
- # topology.add_hosts?(description, servers)
146
- #
147
- # @param [ Mongo::Server::Description ] description The description.
148
- # @param [ Array<Mongo::Server> ] servers The cluster servers.
149
- #
150
- # @return [ false ] A description's hosts are never added to a
151
- # cluster of Single topology.
152
- #
153
- # @since 2.0.6
154
- def add_hosts?(description, servers); false; end
155
-
156
- # Whether a description can be used to remove hosts from the cluster.
157
- #
158
- # @example Check if a description can be used to remove hosts from
159
- # the cluster.
160
- # topology.remove_hosts?(description)
161
- #
162
- # @param [ Mongo::Server::Description ] description The description.
163
- #
164
- # @return [ true ] A description can never be used to remove hosts
165
- # from a cluster of Single topology.
166
- #
167
- # @since 2.0.6
168
- def remove_hosts?(description); false; end
169
-
170
- # Whether a specific server in the cluster can be removed, given a description.
171
- #
172
- # @example Check if a specific server can be removed from the cluster.
173
- # topology.remove_server?(description, server)
174
- #
175
- # @param [ Mongo::Server::Description ] description The description.
176
- # @param [ Mongo::Serve ] server The server in question.
177
- #
178
- # @return [ false ] A server is never removed from a cluster of Single topology.
179
- #
180
- # @since 2.0.6
181
- def remove_server?(description, server); false; end
182
-
183
102
  # A single topology is not sharded.
184
103
  #
185
104
  # @example Is the topology sharded?
@@ -210,27 +129,14 @@ module Mongo
210
129
  # @since 2.0.0
211
130
  def unknown?; false; end
212
131
 
213
- # Notify the topology that a standalone was discovered.
214
- #
215
- # @example Notify the topology that a standalone was discovered.
216
- # topology.standalone_discovered
217
- #
218
- # @return [ Topology::Single ] Always returns self.
219
- #
220
- # @since 2.0.6
221
- def standalone_discovered; self; end
132
+ private
222
133
 
223
- # Publish that a member of this topology was discovered.
224
- #
225
- # @example Publish that a member was discovered.
226
- # topology.member_discovered
227
- #
228
- # @since 2.4.0
229
- def member_discovered
230
- publish_sdam_event(
231
- Monitoring::TOPOLOGY_CHANGED,
232
- Monitoring::Event::TopologyChanged.new(self, self)
233
- )
134
+ def validate_options(options, cluster)
135
+ if cluster.servers_list.length > 1
136
+ raise ArgumentError, 'Cannot instantiate a single topology with more than one server in the cluster'
137
+ end
138
+
139
+ super(options, cluster)
234
140
  end
235
141
  end
236
142
  end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2015-2018 MongoDB, Inc.
1
+ # Copyright (C) 2015-2019 MongoDB, Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -16,24 +16,17 @@ module Mongo
16
16
  class Cluster
17
17
  module Topology
18
18
 
19
- # Defines behaviour for when a cluster is in an unknown state.
19
+ # Defines behavior for when a cluster is in an unknown state.
20
20
  #
21
21
  # @since 2.0.0
22
- class Unknown
23
- include Loggable
24
- include Monitoring::Publishable
22
+ class Unknown < Base
23
+ include NoReplicaSetOptions
25
24
 
26
25
  # The display name for the topology.
27
26
  #
28
27
  # @since 2.0.0
29
28
  NAME = 'Unknown'.freeze
30
29
 
31
- # @return [ Hash ] options The options.
32
- attr_reader :options
33
-
34
- # @return [ Monitoring ] monitoring The monitoring.
35
- attr_reader :monitoring
36
-
37
30
  # Get the display name.
38
31
  #
39
32
  # @example Get the display name.
@@ -43,28 +36,16 @@ module Mongo
43
36
  #
44
37
  # @since 2.0.0
45
38
  def display_name
46
- NAME
39
+ self.class.name.gsub(/.*::/, '')
47
40
  end
48
41
 
49
- # Elect a primary server within this topology.
50
- #
51
- # @example Elect a primary server.
52
- # topology.elect_primary(description, servers)
42
+ # @note This method is experimental and subject to change.
53
43
  #
54
- # @param [ Server::Description ] description The description of the
55
- # elected primary.
56
- # @param [ Array<Server> ] servers The list of known servers to the
57
- # cluster.
58
- #
59
- # @return [ Sharded, ReplicaSet ] The new topology.
60
- def elect_primary(description, servers)
61
- if description.mongos?
62
- sharded = Sharded.new(options, monitoring)
63
- topology_changed(sharded)
64
- sharded
65
- else
66
- initialize_replica_set(description, servers)
67
- end
44
+ # @api experimental
45
+ # @since 2.7.0
46
+ def summary
47
+ details = server_descriptions.keys.join(',')
48
+ "#{display_name}[#{details}]"
68
49
  end
69
50
 
70
51
  # Determine if the topology would select a readable server for the
@@ -95,22 +76,6 @@ module Mongo
95
76
  # @since 2.4.0
96
77
  def has_writable_server?(cluster); false; end
97
78
 
98
- # Initialize the topology with the options.
99
- #
100
- # @example Initialize the topology.
101
- # Unknown.new(options)
102
- #
103
- # @param [ Hash ] options The options.
104
- # @param [ Monitoring ] monitoring The monitoring.
105
- # @param [ Array<String> ] seeds The seeds.
106
- #
107
- # @since 2.0.0
108
- def initialize(options, monitoring, seeds = [])
109
- @options = options
110
- @monitoring = monitoring
111
- @seeds = seeds
112
- end
113
-
114
79
  # An unknown topology is not a replica set.
115
80
  #
116
81
  # @example Is the topology a replica set?
@@ -121,16 +86,6 @@ module Mongo
121
86
  # @since 2.0.0
122
87
  def replica_set?; false; end
123
88
 
124
- # Unknown topologies have no replica set name.
125
- #
126
- # @example Get the replica set name.
127
- # unknown.replica_set_name
128
- #
129
- # @return [ nil ] Always nil.
130
- #
131
- # @since 2.0.0
132
- def replica_set_name; nil; end
133
-
134
89
  # Select appropriate servers for this topology.
135
90
  #
136
91
  # @example Select the servers.
@@ -175,102 +130,6 @@ module Mongo
175
130
  #
176
131
  # @since 2.0.0
177
132
  def unknown?; true; end
178
-
179
- # Whether a server description's hosts may be added to the cluster.
180
- #
181
- # @example Check if a description's hosts may be added to the cluster.
182
- # topology.add_hosts?(description, servers)
183
- #
184
- # @param [ Mongo::Server::Description ] description The description.
185
- # @param [ Array<Mongo::Server> ] servers The cluster servers.
186
- #
187
- # @return [ true, false ] Whether a description's hosts may be added.
188
- #
189
- # @since 2.0.6
190
- def add_hosts?(description, servers)
191
- !(description.unknown? || description.ghost?)
192
- end
193
-
194
- # Whether a description can be used to remove hosts from the cluster.
195
- #
196
- # @example Check if a description can be used to remove hosts from the cluster.
197
- # topology.remove_hosts?(description)
198
- #
199
- # @param [ Mongo::Server::Description ] description The description.
200
- #
201
- # @return [ true, false ] Whether hosts may be removed from the cluster.
202
- #
203
- # @since 2.0.6
204
- def remove_hosts?(description)
205
- description.standalone?
206
- end
207
-
208
- # Whether a specific server in the cluster can be removed, given a description.
209
- #
210
- # @example Check if a specific server can be removed from the cluster.
211
- # topology.remove_server?(description, server)
212
- #
213
- # @param [ Mongo::Server::Description ] description The description.
214
- # @param [ Mongo::Serve ] server The server in question.
215
- #
216
- # @return [ true, false ] Whether the server can be removed from the cluster.
217
- #
218
- # @since 2.0.6
219
- def remove_server?(description, server)
220
- description.standalone? && description.is_server?(server)
221
- end
222
-
223
- # Notify the topology that a standalone was discovered.
224
- #
225
- # @example Notify the topology that a standalone was discovered.
226
- # topology.standalone_discovered
227
- #
228
- # @return [ Topology::Unknown, Topology::Single ] Either self or a
229
- # new Single topology.
230
- #
231
- # @since 2.0.6
232
- def standalone_discovered
233
- if @seeds.size == 1
234
- single = Single.new(options, monitoring, @seeds)
235
- topology_changed(single)
236
- single
237
- else
238
- self
239
- end
240
- end
241
-
242
- # Notify the topology that a member was discovered.
243
- #
244
- # @example Notify the topology that a member was discovered.
245
- # topology.member_discovered
246
- #
247
- # @since 2.4.0
248
- def member_discovered
249
- publish_sdam_event(
250
- Monitoring::TOPOLOGY_CHANGED,
251
- Monitoring::Event::TopologyChanged.new(self, self)
252
- )
253
- end
254
-
255
- private
256
-
257
- def initialize_replica_set(description, servers)
258
- servers.each do |server|
259
- if server.standalone? && server.address != description.address
260
- server.description.unknown!
261
- end
262
- end
263
- replica_set = ReplicaSet.new(options.merge(:replica_set => description.replica_set_name), monitoring)
264
- topology_changed(replica_set)
265
- replica_set
266
- end
267
-
268
- def topology_changed(new_topology)
269
- publish_sdam_event(
270
- Monitoring::TOPOLOGY_CHANGED,
271
- Monitoring::Event::TopologyChanged.new(self, new_topology)
272
- )
273
- end
274
133
  end
275
134
  end
276
135
  end