mongo 2.10.5 → 2.11.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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/CONTRIBUTING.md +1 -1
- data/lib/mongo.rb +2 -0
- data/lib/mongo/address.rb +4 -0
- data/lib/mongo/address/validator.rb +99 -0
- data/lib/mongo/auth.rb +7 -2
- data/lib/mongo/auth/user.rb +1 -7
- data/lib/mongo/background_thread.rb +135 -0
- data/lib/mongo/bulk_write/transformable.rb +3 -3
- data/lib/mongo/client.rb +74 -16
- data/lib/mongo/cluster.rb +193 -41
- data/lib/mongo/cluster/periodic_executor.rb +31 -43
- data/lib/mongo/cluster/sdam_flow.rb +26 -3
- data/lib/mongo/cluster/srv_monitor.rb +127 -0
- data/lib/mongo/collection/view/readable.rb +3 -5
- data/lib/mongo/collection/view/writable.rb +3 -3
- data/lib/mongo/cursor/builder/get_more_command.rb +1 -4
- data/lib/mongo/cursor/builder/kill_cursors_command.rb +5 -23
- data/lib/mongo/cursor/builder/op_get_more.rb +2 -2
- data/lib/mongo/cursor/builder/op_kill_cursors.rb +5 -24
- data/lib/mongo/error.rb +1 -0
- data/lib/mongo/error/auth_error.rb +1 -1
- data/lib/mongo/error/connection_check_out_timeout.rb +7 -8
- data/lib/mongo/error/invalid_address.rb +24 -0
- data/lib/mongo/error/notable.rb +2 -2
- data/lib/mongo/error/operation_failure.rb +3 -3
- data/lib/mongo/error/pool_closed_error.rb +11 -4
- data/lib/mongo/event.rb +1 -1
- data/lib/mongo/grid/file.rb +0 -5
- data/lib/mongo/grid/file/chunk.rb +0 -2
- data/lib/mongo/grid/fs_bucket.rb +13 -15
- data/lib/mongo/grid/stream/write.rb +3 -9
- data/lib/mongo/loggable.rb +5 -1
- data/lib/mongo/monitoring.rb +1 -0
- data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +7 -0
- data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +11 -3
- data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +11 -3
- data/lib/mongo/monitoring/event/cmap/pool_closed.rb +11 -3
- data/lib/mongo/monitoring/event/cmap/pool_created.rb +12 -3
- data/lib/mongo/monitoring/unified_sdam_log_subscriber.rb +62 -0
- data/lib/mongo/operation/shared/executable.rb +5 -10
- data/lib/mongo/operation/shared/sessions_supported.rb +1 -5
- data/lib/mongo/protocol/get_more.rb +1 -2
- data/lib/mongo/protocol/kill_cursors.rb +13 -6
- data/lib/mongo/protocol/serializers.rb +4 -20
- data/lib/mongo/retryable.rb +9 -34
- data/lib/mongo/semaphore.rb +1 -1
- data/lib/mongo/server.rb +113 -42
- data/lib/mongo/server/connection.rb +12 -5
- data/lib/mongo/server/connection_pool.rb +250 -40
- data/lib/mongo/server/connection_pool/populator.rb +58 -0
- data/lib/mongo/server/description.rb +9 -2
- data/lib/mongo/server/monitor.rb +68 -93
- data/lib/mongo/server/monitor/connection.rb +2 -0
- data/lib/mongo/server_selector/selectable.rb +13 -5
- data/lib/mongo/session.rb +0 -13
- data/lib/mongo/srv.rb +17 -0
- data/lib/mongo/srv/monitor.rb +96 -0
- data/lib/mongo/srv/resolver.rb +130 -0
- data/lib/mongo/srv/result.rb +126 -0
- data/lib/mongo/srv/warning_result.rb +35 -0
- data/lib/mongo/uri.rb +45 -55
- data/lib/mongo/uri/srv_protocol.rb +89 -42
- data/lib/mongo/version.rb +1 -1
- data/mongo.gemspec +3 -4
- data/spec/README.md +6 -1
- data/spec/enterprise_auth/kerberos_spec.rb +7 -6
- data/spec/integration/change_stream_examples_spec.rb +0 -4
- data/spec/integration/client_construction_spec.rb +14 -2
- data/spec/integration/connect_single_rs_name_spec.rb +2 -2
- data/spec/integration/connection_pool_populator_spec.rb +296 -0
- data/spec/integration/connection_spec.rb +31 -22
- data/spec/integration/cursor_reaping_spec.rb +1 -2
- data/spec/integration/docs_examples_spec.rb +0 -4
- data/spec/integration/heartbeat_events_spec.rb +17 -15
- data/spec/integration/reconnect_spec.rb +144 -1
- data/spec/integration/retryable_writes_errors_spec.rb +0 -4
- data/spec/integration/retryable_writes_spec.rb +36 -36
- data/spec/integration/sdam_error_handling_spec.rb +31 -25
- data/spec/integration/sdam_events_spec.rb +2 -6
- data/spec/integration/server_monitor_spec.rb +28 -0
- data/spec/integration/server_selector_spec.rb +7 -5
- data/spec/integration/srv_monitoring_spec.rb +360 -0
- data/spec/integration/step_down_spec.rb +4 -6
- data/spec/lite_spec_helper.rb +22 -0
- data/spec/mongo/address/validator_spec.rb +51 -0
- data/spec/mongo/auth/cr_spec.rb +1 -29
- data/spec/mongo/auth/ldap_spec.rb +1 -29
- data/spec/mongo/auth/scram/conversation_spec.rb +0 -2
- data/spec/mongo/auth/scram/negotiation_spec.rb +1 -1
- data/spec/mongo/auth/scram_spec.rb +1 -29
- data/spec/mongo/auth/user/view_spec.rb +1 -36
- data/spec/mongo/auth/user_spec.rb +0 -12
- data/spec/mongo/auth/x509_spec.rb +1 -29
- data/spec/mongo/bulk_write_spec.rb +2 -2
- data/spec/mongo/client_construction_spec.rb +56 -15
- data/spec/mongo/client_spec.rb +31 -27
- data/spec/mongo/cluster/periodic_executor_spec.rb +16 -0
- data/spec/mongo/cluster/srv_monitor_spec.rb +214 -0
- data/spec/mongo/cluster/topology/replica_set_spec.rb +16 -11
- data/spec/mongo/cluster/topology/sharded_spec.rb +12 -9
- data/spec/mongo/cluster/topology/single_spec.rb +20 -11
- data/spec/mongo/cluster_spec.rb +45 -29
- data/spec/mongo/collection/view/map_reduce_spec.rb +14 -9
- data/spec/mongo/collection/view/readable_spec.rb +0 -16
- data/spec/mongo/collection_spec.rb +0 -44
- data/spec/mongo/cursor/builder/get_more_command_spec.rb +2 -4
- data/spec/mongo/cursor/builder/op_get_more_spec.rb +2 -4
- data/spec/mongo/cursor_spec.rb +27 -7
- data/spec/mongo/monitoring/event/cmap/connection_checked_in_spec.rb +10 -3
- data/spec/mongo/monitoring/event/cmap/connection_checked_out_spec.rb +10 -3
- data/spec/mongo/monitoring/event/cmap/pool_closed_spec.rb +10 -3
- data/spec/mongo/monitoring/event/cmap/pool_created_spec.rb +10 -3
- data/spec/mongo/operation/delete/op_msg_spec.rb +17 -8
- data/spec/mongo/operation/insert/op_msg_spec.rb +50 -35
- data/spec/mongo/operation/update/op_msg_spec.rb +14 -7
- data/spec/mongo/retryable_spec.rb +52 -31
- data/spec/mongo/server/app_metadata_spec.rb +0 -8
- data/spec/mongo/server/connection_auth_spec.rb +5 -2
- data/spec/mongo/server/connection_pool/populator_spec.rb +101 -0
- data/spec/mongo/server/connection_pool_spec.rb +256 -107
- data/spec/mongo/server/connection_spec.rb +22 -33
- data/spec/mongo/server/description_spec.rb +42 -4
- data/spec/mongo/server/monitor/connection_spec.rb +22 -11
- data/spec/mongo/server/monitor_spec.rb +66 -107
- data/spec/mongo/server_spec.rb +82 -60
- data/spec/mongo/session/session_pool_spec.rb +1 -5
- data/spec/mongo/session_spec.rb +0 -4
- data/spec/mongo/socket/ssl_spec.rb +2 -2
- data/spec/mongo/srv/monitor_spec.rb +211 -0
- data/spec/mongo/srv/result_spec.rb +54 -0
- data/spec/mongo/uri/srv_protocol_spec.rb +30 -15
- data/spec/mongo/uri_spec.rb +125 -4
- data/spec/spec_helper.rb +6 -0
- data/spec/spec_tests/auth_spec.rb +39 -0
- data/spec/spec_tests/cmap_spec.rb +55 -8
- data/spec/spec_tests/connection_string_spec.rb +6 -31
- data/spec/spec_tests/data/auth/connection-string.yml +297 -0
- data/spec/spec_tests/data/cmap/pool-checkout-error-closed.yml +4 -1
- data/spec/spec_tests/data/cmap/pool-create-with-options.yml +1 -0
- data/spec/spec_tests/data/command_monitoring/insertMany.yml +1 -1
- data/spec/spec_tests/data/connection_string/invalid-uris.yml +20 -0
- data/spec/spec_tests/data/connection_string/valid-auth.yml +16 -0
- data/spec/spec_tests/data/connection_string/valid-warnings.yml +26 -30
- data/spec/spec_tests/data/transactions/abort.yml +3 -3
- data/spec/spec_tests/data/transactions/error-labels.yml +3 -3
- data/spec/spec_tests/data/transactions_api/callback-retry.yml +3 -3
- data/spec/spec_tests/data/uri_options/auth-options.yml +1 -1
- data/spec/spec_tests/max_staleness_spec.rb +7 -2
- data/spec/spec_tests/retryable_reads_spec.rb +0 -31
- data/spec/spec_tests/sdam_monitoring_spec.rb +12 -12
- data/spec/spec_tests/sdam_spec.rb +4 -7
- data/spec/spec_tests/server_selection_spec.rb +6 -2
- data/spec/spec_tests/transactions_spec.rb +0 -2
- data/spec/spec_tests/uri_options_spec.rb +4 -2
- data/spec/stress/connection_pool_stress_spec.rb +203 -0
- data/spec/stress/connection_pool_timing_spec.rb +181 -0
- data/spec/support/auth.rb +113 -0
- data/spec/support/background_thread_registry.rb +63 -0
- data/spec/support/client_registry.rb +11 -2
- data/spec/support/cluster_config.rb +65 -46
- data/spec/support/cluster_tools.rb +2 -2
- data/spec/support/cmap.rb +13 -14
- data/spec/support/cmap/verifier.rb +4 -5
- data/spec/support/command_monitoring.rb +0 -5
- data/spec/support/common_shortcuts.rb +101 -1
- data/spec/support/constraints.rb +25 -0
- data/spec/support/dns.rb +13 -0
- data/spec/support/event_subscriber.rb +0 -7
- data/spec/support/json_ext_formatter.rb +5 -1
- data/spec/support/lite_constraints.rb +22 -6
- data/spec/support/local_resource_registry.rb +34 -0
- data/spec/support/sdam_monitoring.rb +115 -0
- data/spec/support/spec_config.rb +20 -6
- data/spec/support/spec_setup.rb +2 -2
- data/spec/support/transactions.rb +1 -1
- data/spec/support/transactions/test.rb +1 -1
- data/spec/support/utils.rb +1 -16
- metadata +685 -659
- metadata.gz.sig +0 -0
- data/lib/mongo/event/description_changed.rb +0 -52
- data/spec/integration/bson_symbol_spec.rb +0 -34
- data/spec/integration/crud_spec.rb +0 -45
- data/spec/integration/get_more_spec.rb +0 -32
- data/spec/integration/grid_fs_bucket_spec.rb +0 -48
- data/spec/integration/retryable_errors_spec.rb +0 -265
- data/spec/integration/size_limit_spec.rb~12e1e9c4f... RUBY-2242 Fix zlib compression (#2021) +0 -98
- data/spec/mongo/cursor/builder/op_kill_cursors_spec.rb +0 -56
- data/spec/runners/sdam/verifier.rb +0 -88
@@ -34,22 +34,34 @@ describe Mongo::Cluster::Topology::ReplicaSetNoPrimary do
|
|
34
34
|
|
35
35
|
let(:mongos) do
|
36
36
|
Mongo::Server.new(address, cluster, monitoring, listeners,
|
37
|
-
SpecConfig.instance.test_options.merge(monitoring_io: false)
|
37
|
+
SpecConfig.instance.test_options.merge(monitoring_io: false)
|
38
|
+
).tap do |server|
|
39
|
+
allow(server).to receive(:description).and_return(mongos_description)
|
40
|
+
end
|
38
41
|
end
|
39
42
|
|
40
43
|
let(:standalone) do
|
41
44
|
Mongo::Server.new(address, cluster, monitoring, listeners,
|
42
|
-
SpecConfig.instance.test_options.merge(monitoring_io: false)
|
45
|
+
SpecConfig.instance.test_options.merge(monitoring_io: false)
|
46
|
+
).tap do |server|
|
47
|
+
allow(server).to receive(:description).and_return(standalone_description)
|
48
|
+
end
|
43
49
|
end
|
44
50
|
|
45
51
|
let(:replica_set) do
|
46
52
|
Mongo::Server.new(address, cluster, monitoring, listeners,
|
47
|
-
SpecConfig.instance.test_options.merge(monitoring_io: false)
|
53
|
+
SpecConfig.instance.test_options.merge(monitoring_io: false)
|
54
|
+
).tap do |server|
|
55
|
+
allow(server).to receive(:description).and_return(replica_set_description)
|
56
|
+
end
|
48
57
|
end
|
49
58
|
|
50
59
|
let(:replica_set_two) do
|
51
60
|
Mongo::Server.new(address, cluster, monitoring, listeners,
|
52
|
-
SpecConfig.instance.test_options.merge(monitoring_io: false)
|
61
|
+
SpecConfig.instance.test_options.merge(monitoring_io: false)
|
62
|
+
).tap do |server|
|
63
|
+
allow(server).to receive(:description).and_return(replica_set_two_description)
|
64
|
+
end
|
53
65
|
end
|
54
66
|
|
55
67
|
let(:mongos_description) do
|
@@ -74,13 +86,6 @@ describe Mongo::Cluster::Topology::ReplicaSetNoPrimary do
|
|
74
86
|
'setName' => 'test', 'ok' => 1 })
|
75
87
|
end
|
76
88
|
|
77
|
-
before do
|
78
|
-
mongos.monitor.instance_variable_set(:@description, mongos_description)
|
79
|
-
standalone.monitor.instance_variable_set(:@description, standalone_description)
|
80
|
-
replica_set.monitor.instance_variable_set(:@description, replica_set_description)
|
81
|
-
replica_set_two.monitor.instance_variable_set(:@description, replica_set_two_description)
|
82
|
-
end
|
83
|
-
|
84
89
|
context 'when a replica set name is provided' do
|
85
90
|
|
86
91
|
let(:topology) do
|
@@ -36,17 +36,26 @@ describe Mongo::Cluster::Topology::Sharded do
|
|
36
36
|
|
37
37
|
let(:mongos) do
|
38
38
|
Mongo::Server.new(address, cluster, monitoring, listeners,
|
39
|
-
SpecConfig.instance.test_options.merge(monitoring_io: false)
|
39
|
+
SpecConfig.instance.test_options.merge(monitoring_io: false)
|
40
|
+
).tap do |server|
|
41
|
+
allow(server).to receive(:description).and_return(mongos_description)
|
42
|
+
end
|
40
43
|
end
|
41
44
|
|
42
45
|
let(:standalone) do
|
43
46
|
Mongo::Server.new(address, cluster, monitoring, listeners,
|
44
|
-
SpecConfig.instance.test_options.merge(monitoring_io: false)
|
47
|
+
SpecConfig.instance.test_options.merge(monitoring_io: false)
|
48
|
+
).tap do |server|
|
49
|
+
allow(server).to receive(:description).and_return(standalone_description)
|
50
|
+
end
|
45
51
|
end
|
46
52
|
|
47
53
|
let(:replica_set) do
|
48
54
|
Mongo::Server.new(address, cluster, monitoring, listeners,
|
49
|
-
SpecConfig.instance.test_options.merge(monitoring_io: false)
|
55
|
+
SpecConfig.instance.test_options.merge(monitoring_io: false)
|
56
|
+
).tap do |server|
|
57
|
+
allow(server).to receive(:description).and_return(replica_set_description)
|
58
|
+
end
|
50
59
|
end
|
51
60
|
|
52
61
|
let(:mongos_description) do
|
@@ -81,12 +90,6 @@ describe Mongo::Cluster::Topology::Sharded do
|
|
81
90
|
|
82
91
|
describe '.servers' do
|
83
92
|
|
84
|
-
before do
|
85
|
-
mongos.monitor.instance_variable_set(:@description, mongos_description)
|
86
|
-
standalone.monitor.instance_variable_set(:@description, standalone_description)
|
87
|
-
replica_set.monitor.instance_variable_set(:@description, replica_set_description)
|
88
|
-
end
|
89
|
-
|
90
93
|
let(:servers) do
|
91
94
|
topology.servers([ mongos, standalone, replica_set ])
|
92
95
|
end
|
@@ -37,19 +37,35 @@ describe Mongo::Cluster::Topology::Single do
|
|
37
37
|
describe '.servers' do
|
38
38
|
|
39
39
|
let(:mongos) do
|
40
|
-
Mongo::Server.new(address, cluster, monitoring, listeners,
|
40
|
+
Mongo::Server.new(address, cluster, monitoring, listeners,
|
41
|
+
SpecConfig.instance.test_options.merge(monitoring_io: false)
|
42
|
+
).tap do |server|
|
43
|
+
allow(server).to receive(:description).and_return(mongos_description)
|
44
|
+
end
|
41
45
|
end
|
42
46
|
|
43
47
|
let(:standalone) do
|
44
|
-
Mongo::Server.new(address, cluster, monitoring, listeners,
|
48
|
+
Mongo::Server.new(address, cluster, monitoring, listeners,
|
49
|
+
SpecConfig.instance.test_options.merge(monitoring_io: false)
|
50
|
+
).tap do |server|
|
51
|
+
allow(server).to receive(:description).and_return(standalone_description)
|
52
|
+
end
|
45
53
|
end
|
46
54
|
|
47
55
|
let(:standalone_two) do
|
48
|
-
Mongo::Server.new(address, cluster, monitoring, listeners,
|
56
|
+
Mongo::Server.new(address, cluster, monitoring, listeners,
|
57
|
+
SpecConfig.instance.test_options.merge(monitoring_io: false)
|
58
|
+
).tap do |server|
|
59
|
+
allow(server).to receive(:description).and_return(standalone_description)
|
60
|
+
end
|
49
61
|
end
|
50
62
|
|
51
63
|
let(:replica_set) do
|
52
|
-
Mongo::Server.new(address, cluster, monitoring, listeners,
|
64
|
+
Mongo::Server.new(address, cluster, monitoring, listeners,
|
65
|
+
SpecConfig.instance.test_options.merge(monitoring_io: false)
|
66
|
+
).tap do |server|
|
67
|
+
allow(server).to receive(:description).and_return(replica_set_description)
|
68
|
+
end
|
53
69
|
end
|
54
70
|
|
55
71
|
let(:mongos_description) do
|
@@ -67,13 +83,6 @@ describe Mongo::Cluster::Topology::Single do
|
|
67
83
|
'setName' => 'testing' })
|
68
84
|
end
|
69
85
|
|
70
|
-
before do
|
71
|
-
mongos.monitor.instance_variable_set(:@description, mongos_description)
|
72
|
-
standalone.monitor.instance_variable_set(:@description, standalone_description)
|
73
|
-
standalone_two.monitor.instance_variable_set(:@description, standalone_description)
|
74
|
-
replica_set.monitor.instance_variable_set(:@description, replica_set_description)
|
75
|
-
end
|
76
|
-
|
77
86
|
let(:servers) do
|
78
87
|
topology.servers([ mongos, standalone, standalone_two, replica_set ])
|
79
88
|
end
|
data/spec/mongo/cluster_spec.rb
CHANGED
@@ -7,9 +7,10 @@ describe Mongo::Cluster do
|
|
7
7
|
end
|
8
8
|
|
9
9
|
let(:cluster_with_semaphore) do
|
10
|
-
|
11
|
-
SpecConfig.instance.
|
12
|
-
|
10
|
+
register_cluster(
|
11
|
+
described_class.new(SpecConfig.instance.addresses, monitoring,
|
12
|
+
SpecConfig.instance.test_options.merge(
|
13
|
+
server_selection_semaphore: Mongo::Semaphore.new)))
|
13
14
|
end
|
14
15
|
|
15
16
|
let(:cluster_without_io) do
|
@@ -19,25 +20,6 @@ describe Mongo::Cluster do
|
|
19
20
|
|
20
21
|
let(:cluster) { cluster_without_io }
|
21
22
|
|
22
|
-
describe 'initialize' do
|
23
|
-
|
24
|
-
context 'when there are duplicate addresses' do
|
25
|
-
|
26
|
-
let(:addresses) do
|
27
|
-
SpecConfig.instance.addresses + SpecConfig.instance.addresses
|
28
|
-
end
|
29
|
-
let(:cluster_with_dup_addresses) do
|
30
|
-
described_class.new(addresses, monitoring, SpecConfig.instance.test_options.merge(
|
31
|
-
server_selection_semaphore: Mongo::Semaphore.new))
|
32
|
-
end
|
33
|
-
|
34
|
-
it 'does not raise an exception' do
|
35
|
-
expect { cluster_with_dup_addresses }.not_to raise_error
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
40
|
-
|
41
23
|
describe '#==' do
|
42
24
|
|
43
25
|
context 'when the other is a cluster' do
|
@@ -167,8 +149,15 @@ describe Mongo::Cluster do
|
|
167
149
|
cluster.instance_variable_get(:@servers)
|
168
150
|
end
|
169
151
|
|
152
|
+
let(:server) { known_servers.first }
|
153
|
+
|
154
|
+
let(:monitor) do
|
155
|
+
double('monitor')
|
156
|
+
end
|
157
|
+
|
170
158
|
before do
|
171
|
-
expect(
|
159
|
+
expect(server).to receive(:monitor).at_least(:once).and_return(monitor)
|
160
|
+
expect(monitor).to receive(:scan!)
|
172
161
|
end
|
173
162
|
|
174
163
|
it 'returns true' do
|
@@ -278,6 +267,27 @@ describe Mongo::Cluster do
|
|
278
267
|
expect(cluster.servers[0].address.seed).to_not eq('a')
|
279
268
|
end
|
280
269
|
end
|
270
|
+
|
271
|
+
context 'topology is Sharded' do
|
272
|
+
|
273
|
+
let(:topology) do
|
274
|
+
Mongo::Cluster::Topology::Single.new({}, cluster)
|
275
|
+
end
|
276
|
+
|
277
|
+
before do
|
278
|
+
cluster.add('a')
|
279
|
+
end
|
280
|
+
|
281
|
+
it 'creates server with nil last_scan' do
|
282
|
+
server = cluster.servers_list.detect do |server|
|
283
|
+
server.address.seed == 'a'
|
284
|
+
end
|
285
|
+
|
286
|
+
expect(server).not_to be nil
|
287
|
+
|
288
|
+
expect(server.last_scan).to be nil
|
289
|
+
end
|
290
|
+
end
|
281
291
|
end
|
282
292
|
|
283
293
|
describe '#disconnect!' do
|
@@ -349,11 +359,11 @@ describe Mongo::Cluster do
|
|
349
359
|
describe '#remove' do
|
350
360
|
|
351
361
|
let(:address_a) do
|
352
|
-
Mongo::Address.new('127.0.0.1:
|
362
|
+
Mongo::Address.new('127.0.0.1:25555')
|
353
363
|
end
|
354
364
|
|
355
365
|
let(:address_b) do
|
356
|
-
Mongo::Address.new('127.0.0.1:
|
366
|
+
Mongo::Address.new('127.0.0.1:25556')
|
357
367
|
end
|
358
368
|
|
359
369
|
let(:monitoring) do
|
@@ -361,11 +371,15 @@ describe Mongo::Cluster do
|
|
361
371
|
end
|
362
372
|
|
363
373
|
let(:server_a) do
|
364
|
-
|
374
|
+
register_server(
|
375
|
+
Mongo::Server.new(address_a, cluster, monitoring, Mongo::Event::Listeners.new,
|
376
|
+
monitor: false))
|
365
377
|
end
|
366
378
|
|
367
379
|
let(:server_b) do
|
368
|
-
|
380
|
+
register_server(
|
381
|
+
Mongo::Server.new(address_b, cluster, monitoring, Mongo::Event::Listeners.new,
|
382
|
+
monitor: false))
|
369
383
|
end
|
370
384
|
|
371
385
|
let(:servers) do
|
@@ -378,7 +392,7 @@ describe Mongo::Cluster do
|
|
378
392
|
|
379
393
|
before do
|
380
394
|
cluster.instance_variable_set(:@servers, servers)
|
381
|
-
cluster.remove('127.0.0.1:
|
395
|
+
cluster.remove('127.0.0.1:25555')
|
382
396
|
end
|
383
397
|
|
384
398
|
it 'removes the host from the list of servers' do
|
@@ -393,7 +407,9 @@ describe Mongo::Cluster do
|
|
393
407
|
describe '#next_primary' do
|
394
408
|
|
395
409
|
let(:cluster) do
|
396
|
-
|
410
|
+
# We use next_primary to wait for server selection, and this is
|
411
|
+
# also the method we are testing.
|
412
|
+
authorized_client.tap { |client| client.cluster.next_primary }.cluster
|
397
413
|
end
|
398
414
|
|
399
415
|
let(:primary_candidates) do
|
@@ -576,13 +576,20 @@ describe Mongo::Collection::View::MapReduce do
|
|
576
576
|
end
|
577
577
|
|
578
578
|
context 'when the server is not a valid for writing' do
|
579
|
+
clean_slate
|
580
|
+
|
581
|
+
before do
|
582
|
+
stop_monitoring(authorized_client)
|
583
|
+
end
|
579
584
|
|
580
585
|
it 'reroutes the operation to a primary' do
|
581
|
-
|
582
|
-
|
583
|
-
expect(
|
586
|
+
RSpec::Mocks.with_temporary_scope do
|
587
|
+
allow(map_reduce).to receive(:valid_server?).and_return(false)
|
588
|
+
expect(Mongo::Logger.logger).to receive(:warn).once do |msg|
|
589
|
+
expect(msg).to include('Rerouting the MapReduce operation to the primary server')
|
590
|
+
end
|
591
|
+
map_reduce.to_a
|
584
592
|
end
|
585
|
-
map_reduce.to_a
|
586
593
|
end
|
587
594
|
|
588
595
|
context 'when the view has a write concern' do
|
@@ -649,12 +656,10 @@ describe Mongo::Collection::View::MapReduce do
|
|
649
656
|
end
|
650
657
|
|
651
658
|
context 'when the server is a valid for writing' do
|
659
|
+
clean_slate
|
660
|
+
|
652
661
|
before do
|
653
|
-
|
654
|
-
# server state is not changed in background due to intermittent
|
655
|
-
# connectivity issues in Evergreen
|
656
|
-
ClientRegistry.instance.close_all_clients
|
657
|
-
authorized_collection.client.cluster.disconnect!
|
662
|
+
stop_monitoring(authorized_client)
|
658
663
|
end
|
659
664
|
|
660
665
|
it 'does not reroute the operation to a primary' do
|
@@ -368,10 +368,6 @@ describe Mongo::Collection::View::Readable do
|
|
368
368
|
|
369
369
|
context 'when the collection has a read preference set' do
|
370
370
|
|
371
|
-
after do
|
372
|
-
client.close(true)
|
373
|
-
end
|
374
|
-
|
375
371
|
let(:client) do
|
376
372
|
# Set a timeout in case the collection read_preference does get used.
|
377
373
|
# Otherwise, the test will hang for 30 seconds.
|
@@ -437,10 +433,6 @@ describe Mongo::Collection::View::Readable do
|
|
437
433
|
context 'when the collection does not have a read preference set' do
|
438
434
|
require_topology :single, :replica_set
|
439
435
|
|
440
|
-
after do
|
441
|
-
client.close(true)
|
442
|
-
end
|
443
|
-
|
444
436
|
let(:client) do
|
445
437
|
authorized_client.with(server_selection_timeout: 1)
|
446
438
|
end
|
@@ -755,10 +747,6 @@ describe Mongo::Collection::View::Readable do
|
|
755
747
|
authorized_collection.insert_many(documents)
|
756
748
|
end
|
757
749
|
|
758
|
-
after do
|
759
|
-
client.close(true)
|
760
|
-
end
|
761
|
-
|
762
750
|
let(:client) do
|
763
751
|
# Set a timeout in case the collection read_preference does get used.
|
764
752
|
# Otherwise, the test will hang for 30 seconds.
|
@@ -818,10 +806,6 @@ describe Mongo::Collection::View::Readable do
|
|
818
806
|
allow(view.collection.client.cluster).to receive(:single?).and_return(false)
|
819
807
|
end
|
820
808
|
|
821
|
-
after do
|
822
|
-
client.close(true)
|
823
|
-
end
|
824
|
-
|
825
809
|
let(:client) do
|
826
810
|
authorized_client.with(server_selection_timeout: 1)
|
827
811
|
end
|
@@ -945,30 +945,6 @@ describe Mongo::Collection do
|
|
945
945
|
it_behaves_like 'a failed operation using a session'
|
946
946
|
end
|
947
947
|
end
|
948
|
-
|
949
|
-
context 'when collation has a strength' do
|
950
|
-
min_server_fcv '3.4'
|
951
|
-
|
952
|
-
let(:band_collection) do
|
953
|
-
described_class.new(database, :bands)
|
954
|
-
end
|
955
|
-
|
956
|
-
before do
|
957
|
-
band_collection.delete_many
|
958
|
-
band_collection.insert_many([{ name: "Depeche Mode" }, { name: "New Order" }])
|
959
|
-
end
|
960
|
-
|
961
|
-
let(:options) do
|
962
|
-
{ collation: { locale: 'en_US', strength: 2 } }
|
963
|
-
end
|
964
|
-
let(:band_result) do
|
965
|
-
band_collection.find({ name: 'DEPECHE MODE' }, options)
|
966
|
-
end
|
967
|
-
|
968
|
-
it 'finds Capitalize from UPPER CASE' do
|
969
|
-
expect(band_result.count_documents).to eq(1)
|
970
|
-
end
|
971
|
-
end
|
972
948
|
end
|
973
949
|
|
974
950
|
describe '#drop' do
|
@@ -1513,10 +1489,6 @@ describe Mongo::Collection do
|
|
1513
1489
|
expect(custom_collection.count).to eq(1)
|
1514
1490
|
end
|
1515
1491
|
|
1516
|
-
after do
|
1517
|
-
custom_client.close(true)
|
1518
|
-
end
|
1519
|
-
|
1520
1492
|
it 'inserts with the custom id' do
|
1521
1493
|
expect(custom_collection.count).to eq(1)
|
1522
1494
|
expect(custom_collection.find.first[:_id]).to eq(1)
|
@@ -1564,10 +1536,6 @@ describe Mongo::Collection do
|
|
1564
1536
|
client[TEST_COLL].insert_many(documents)
|
1565
1537
|
end
|
1566
1538
|
|
1567
|
-
after do
|
1568
|
-
client.close(true)
|
1569
|
-
end
|
1570
|
-
|
1571
1539
|
let(:insert_events) do
|
1572
1540
|
EventSubscriber.started_events.select { |e| e.command_name == 'insert' }
|
1573
1541
|
end
|
@@ -1777,10 +1745,6 @@ describe Mongo::Collection do
|
|
1777
1745
|
custom_collection.insert_one({ name: 'testing' })
|
1778
1746
|
end
|
1779
1747
|
|
1780
|
-
after do
|
1781
|
-
custom_client.close(true)
|
1782
|
-
end
|
1783
|
-
|
1784
1748
|
it 'inserts with the custom id' do
|
1785
1749
|
expect(custom_collection.find.first[:_id]).to eq(1)
|
1786
1750
|
end
|
@@ -2859,10 +2823,6 @@ describe Mongo::Collection do
|
|
2859
2823
|
allow(collection.client.cluster).to receive(:single?).and_return(false)
|
2860
2824
|
end
|
2861
2825
|
|
2862
|
-
after do
|
2863
|
-
client.close(true)
|
2864
|
-
end
|
2865
|
-
|
2866
2826
|
let(:client) do
|
2867
2827
|
authorized_client.with(server_selection_timeout: 0.2)
|
2868
2828
|
end
|
@@ -4011,10 +3971,6 @@ describe Mongo::Collection do
|
|
4011
3971
|
client[TEST_COLL].update_one({ a: 1 }, {'$set' => { 'name' => '1'*16777149 }})
|
4012
3972
|
end
|
4013
3973
|
|
4014
|
-
after do
|
4015
|
-
client.close(true)
|
4016
|
-
end
|
4017
|
-
|
4018
3974
|
let(:update_events) do
|
4019
3975
|
EventSubscriber.started_events.select { |e| e.command_name == 'update' }
|
4020
3976
|
end
|