mongo 2.4.0.rc1 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/mongo/auth/cr/conversation.rb +1 -1
- data/lib/mongo/auth/ldap/conversation.rb +1 -1
- data/lib/mongo/auth/scram/conversation.rb +1 -1
- data/lib/mongo/auth/x509/conversation.rb +4 -2
- data/lib/mongo/client.rb +7 -4
- data/lib/mongo/cluster.rb +55 -5
- data/lib/mongo/cluster/app_metadata.rb +7 -1
- data/lib/mongo/cluster/topology.rb +7 -6
- data/lib/mongo/cluster/topology/replica_set.rb +48 -2
- data/lib/mongo/cluster/topology/sharded.rb +47 -1
- data/lib/mongo/cluster/topology/single.rb +55 -4
- data/lib/mongo/cluster/topology/unknown.rb +65 -9
- data/lib/mongo/error/invalid_server_preference.rb +3 -1
- data/lib/mongo/event.rb +8 -0
- data/lib/mongo/event/description_changed.rb +20 -2
- data/lib/mongo/event/member_discovered.rb +65 -0
- data/lib/mongo/event/primary_elected.rb +3 -1
- data/lib/mongo/event/standalone_discovered.rb +1 -1
- data/lib/mongo/monitoring.rb +41 -0
- data/lib/mongo/monitoring/event.rb +6 -0
- data/lib/mongo/monitoring/event/server_closed.rb +46 -0
- data/lib/mongo/monitoring/event/server_description_changed.rb +58 -0
- data/lib/mongo/monitoring/event/server_opening.rb +46 -0
- data/lib/mongo/monitoring/event/topology_changed.rb +46 -0
- data/lib/mongo/monitoring/event/topology_closed.rb +41 -0
- data/lib/mongo/monitoring/event/topology_opening.rb +41 -0
- data/lib/mongo/monitoring/publishable.rb +12 -0
- data/lib/mongo/monitoring/sdam_log_subscriber.rb +54 -0
- data/lib/mongo/monitoring/server_closed_log_subscriber.rb +30 -0
- data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +33 -0
- data/lib/mongo/monitoring/server_opening_log_subscriber.rb +30 -0
- data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +40 -0
- data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +30 -0
- data/lib/mongo/server.rb +6 -0
- data/lib/mongo/server/connection.rb +1 -1
- data/lib/mongo/server/description.rb +23 -3
- data/lib/mongo/server/description/inspector.rb +4 -2
- data/lib/mongo/server/description/inspector/description_changed.rb +2 -2
- data/lib/mongo/server/description/inspector/member_discovered.rb +59 -0
- data/lib/mongo/server/description/inspector/primary_elected.rb +2 -0
- data/lib/mongo/server_selector.rb +10 -5
- data/lib/mongo/server_selector/nearest.rb +1 -1
- data/lib/mongo/server_selector/primary_preferred.rb +1 -1
- data/lib/mongo/server_selector/secondary.rb +1 -1
- data/lib/mongo/server_selector/secondary_preferred.rb +1 -1
- data/lib/mongo/server_selector/selectable.rb +24 -12
- data/lib/mongo/uri.rb +1 -1
- data/lib/mongo/version.rb +1 -1
- data/mongo.gemspec +1 -1
- data/spec/mongo/auth/cr_spec.rb +6 -1
- data/spec/mongo/auth/ldap_spec.rb +6 -1
- data/spec/mongo/auth/scram_spec.rb +6 -1
- data/spec/mongo/auth/x509/conversation_spec.rb +69 -0
- data/spec/mongo/auth/x509_spec.rb +9 -4
- data/spec/mongo/client_spec.rb +40 -2
- data/spec/mongo/cluster/topology/replica_set_spec.rb +218 -9
- data/spec/mongo/cluster/topology/sharded_spec.rb +17 -2
- data/spec/mongo/cluster/topology/single_spec.rb +19 -4
- data/spec/mongo/cluster/topology/unknown_spec.rb +19 -1
- data/spec/mongo/cluster/topology_spec.rb +11 -7
- data/spec/mongo/cluster_spec.rb +25 -7
- data/spec/mongo/max_staleness_spec.rb +40 -22
- data/spec/mongo/monitoring_spec.rb +2 -2
- data/spec/mongo/sdam_monitoring_spec.rb +60 -0
- data/spec/mongo/sdam_spec.rb +77 -0
- data/spec/mongo/server/connection_pool_spec.rb +6 -1
- data/spec/mongo/server/connection_spec.rb +6 -1
- data/spec/mongo/server/description_spec.rb +90 -1
- data/spec/mongo/server_selection_spec.rb +7 -6
- data/spec/mongo/server_selector/nearest_spec.rb +7 -7
- data/spec/mongo/server_selector/primary_preferred_spec.rb +7 -7
- data/spec/mongo/server_selector/primary_spec.rb +4 -4
- data/spec/mongo/server_selector/secondary_preferred_spec.rb +6 -6
- data/spec/mongo/server_selector/secondary_spec.rb +6 -6
- data/spec/mongo/server_selector_spec.rb +8 -0
- data/spec/mongo/server_spec.rb +6 -1
- data/spec/mongo/uri_spec.rb +4 -4
- data/spec/spec_helper.rb +2 -0
- data/spec/support/max_staleness/ReplicaSetNoPrimary/Incompatible.yml +4 -4
- data/spec/support/max_staleness/ReplicaSetNoPrimary/LastUpdateTime.yml +3 -3
- data/spec/support/max_staleness/ReplicaSetNoPrimary/Nearest.yml +3 -3
- data/spec/support/max_staleness/ReplicaSetNoPrimary/Nearest2.yml +3 -3
- data/spec/support/max_staleness/ReplicaSetNoPrimary/NoKnownServers.yml +15 -0
- data/spec/support/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred.yml +1 -1
- data/spec/support/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred_tags.yml +3 -3
- data/spec/support/max_staleness/ReplicaSetNoPrimary/Secondary.yml +3 -3
- data/spec/support/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred.yml +1 -1
- data/spec/support/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred_tags.yml +3 -3
- data/spec/support/max_staleness/ReplicaSetNoPrimary/ZeroMaxStaleness.yml +23 -0
- data/spec/support/max_staleness/ReplicaSetWithPrimary/Incompatible.yml +4 -4
- data/spec/support/max_staleness/ReplicaSetWithPrimary/LastUpdateTime.yml +5 -5
- data/spec/support/max_staleness/ReplicaSetWithPrimary/{ShortHeartbeartShortMaxStaleness2.yml → LongHeartbeat.yml} +4 -4
- data/spec/support/max_staleness/ReplicaSetWithPrimary/{ShortHeartbeartShortMaxStaleness.yml → LongHeartbeat2.yml} +6 -10
- data/spec/support/max_staleness/ReplicaSetWithPrimary/MaxStalenessTooSmall.yml +3 -2
- data/spec/support/max_staleness/ReplicaSetWithPrimary/MaxStalenessWithModePrimary.yml +2 -2
- data/spec/support/max_staleness/ReplicaSetWithPrimary/Nearest.yml +3 -3
- data/spec/support/max_staleness/ReplicaSetWithPrimary/Nearest2.yml +3 -3
- data/spec/support/max_staleness/ReplicaSetWithPrimary/Nearest_tags.yml +3 -3
- data/spec/support/max_staleness/ReplicaSetWithPrimary/PrimaryPreferred.yml +2 -2
- data/spec/support/max_staleness/ReplicaSetWithPrimary/PrimaryPreferred_incompatible.yml +3 -3
- data/spec/support/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred.yml +1 -1
- data/spec/support/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags.yml +3 -3
- data/spec/support/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags2.yml +3 -3
- data/spec/support/max_staleness/ReplicaSetWithPrimary/Secondary_tags.yml +3 -3
- data/spec/support/max_staleness/ReplicaSetWithPrimary/Secondary_tags2.yml +3 -3
- data/spec/support/max_staleness/ReplicaSetWithPrimary/ZeroMaxStaleness.yml +7 -11
- data/spec/support/max_staleness/Sharded/Incompatible.yml +4 -4
- data/spec/support/max_staleness/Sharded/SmallMaxStaleness.yml +10 -2
- data/spec/support/max_staleness/Single/Incompatible.yml +4 -4
- data/spec/support/max_staleness/Single/SmallMaxStaleness.yml +2 -2
- data/spec/support/max_staleness/Unknown/SmallMaxStaleness.yml +14 -0
- data/spec/support/sdam/rs/primary_mismatched_me.yml +2 -2
- data/spec/support/sdam/rs/secondary_mismatched_me.yml +2 -2
- data/spec/support/sdam_monitoring.rb +144 -0
- data/spec/support/sdam_monitoring/replica_set_with_no_primary.yml +112 -0
- data/spec/support/sdam_monitoring/replica_set_with_primary.yml +111 -0
- data/spec/support/sdam_monitoring/replica_set_with_removal.yml +106 -0
- data/spec/support/sdam_monitoring/required_replica_set.yml +84 -0
- data/spec/support/sdam_monitoring/standalone.yml +70 -0
- data/spec/support/server_discovery_and_monitoring.rb +34 -1
- data/spec/support/server_selection.rb +14 -11
- data/spec/support/shared/server_selector.rb +6 -0
- metadata +49 -13
- metadata.gz.sig +0 -0
- data/spec/mongo/server_discovery_and_monitoring_spec.rb +0 -115
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe 'Server Discovery and Monitoring' do
|
|
4
|
+
include Mongo::SDAM
|
|
5
|
+
|
|
6
|
+
SERVER_DISCOVERY_TESTS.each do |file|
|
|
7
|
+
|
|
8
|
+
spec = Mongo::SDAM::Spec.new(file)
|
|
9
|
+
|
|
10
|
+
context(spec.description) do
|
|
11
|
+
|
|
12
|
+
before(:all) do
|
|
13
|
+
Mongo::Client.new(spec.uri_string).tap do |client|
|
|
14
|
+
@client = client.with(connect_timeout: 0.1, heartbeat_frequency: 100)
|
|
15
|
+
end.close
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
after(:all) do
|
|
19
|
+
@client.close
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
spec.phases.each_with_index do |phase, index|
|
|
23
|
+
|
|
24
|
+
context("Phase: #{index + 1}") do
|
|
25
|
+
|
|
26
|
+
before(:all) do
|
|
27
|
+
phase.responses.each do |response|
|
|
28
|
+
server = find_server(@client, response.address)
|
|
29
|
+
server ||= Mongo::Server.new(
|
|
30
|
+
Mongo::Address.new(response.address),
|
|
31
|
+
@client.cluster,
|
|
32
|
+
@client.instance_variable_get(:@monitoring),
|
|
33
|
+
@client.cluster.send(:event_listeners),
|
|
34
|
+
@client.cluster.options
|
|
35
|
+
)
|
|
36
|
+
monitor = server.instance_variable_get(:@monitor)
|
|
37
|
+
description = monitor.inspector.run(server.description, response.ismaster, 0.5)
|
|
38
|
+
monitor.instance_variable_set(:@description, description)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
let(:cluster_addresses) do
|
|
43
|
+
@client.cluster.instance_variable_get(:@servers).
|
|
44
|
+
collect(&:address).collect(&:to_s).uniq.sort
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
let(:phase_addresses) do
|
|
48
|
+
phase.outcome.servers.keys.sort
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "sets the cluster topology to #{phase.outcome.topology_type}" do
|
|
52
|
+
expect(@client.cluster).to be_topology(phase.outcome.topology_type)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it "sets the cluster replica set name to #{phase.outcome.set_name.inspect}" do
|
|
56
|
+
expect(@client.cluster.replica_set_name).to eq(phase.outcome.set_name)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it "has the expected servers in the cluster" do
|
|
60
|
+
expect(cluster_addresses).to eq(phase_addresses)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
phase.outcome.servers.each do |uri, server|
|
|
64
|
+
|
|
65
|
+
it "sets #{uri} to #{server['type']}" do
|
|
66
|
+
expect(find_server(@client, uri)).to be_server_type(server['type'])
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "sets #{uri} replica set name to #{server['setName'].inspect}" do
|
|
70
|
+
expect(find_server(@client, uri).replica_set_name).to eq(server['setName'])
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
@@ -11,15 +11,20 @@ describe Mongo::Server::ConnectionPool do
|
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
let(:monitoring) do
|
|
14
|
-
Mongo::Monitoring.new
|
|
14
|
+
Mongo::Monitoring.new(monitoring: false)
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
let(:listeners) do
|
|
18
18
|
Mongo::Event::Listeners.new
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
+
let(:topology) do
|
|
22
|
+
double('topology')
|
|
23
|
+
end
|
|
24
|
+
|
|
21
25
|
let(:cluster) do
|
|
22
26
|
double('cluster').tap do |cl|
|
|
27
|
+
allow(cl).to receive(:topology).and_return(topology)
|
|
23
28
|
allow(cl).to receive(:app_metadata).and_return(app_metadata)
|
|
24
29
|
end
|
|
25
30
|
end
|
|
@@ -7,7 +7,7 @@ describe Mongo::Server::Connection do
|
|
|
7
7
|
end
|
|
8
8
|
|
|
9
9
|
let(:monitoring) do
|
|
10
|
-
Mongo::Monitoring.new
|
|
10
|
+
Mongo::Monitoring.new(monitoring: false)
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
let(:listeners) do
|
|
@@ -20,10 +20,15 @@ describe Mongo::Server::Connection do
|
|
|
20
20
|
|
|
21
21
|
let(:cluster) do
|
|
22
22
|
double('cluster').tap do |cl|
|
|
23
|
+
allow(cl).to receive(:topology).and_return(topology)
|
|
23
24
|
allow(cl).to receive(:app_metadata).and_return(app_metadata)
|
|
24
25
|
end
|
|
25
26
|
end
|
|
26
27
|
|
|
28
|
+
let(:topology) do
|
|
29
|
+
double('topology')
|
|
30
|
+
end
|
|
31
|
+
|
|
27
32
|
let(:server) do
|
|
28
33
|
Mongo::Server.new(address, cluster, monitoring, listeners, TEST_OPTIONS)
|
|
29
34
|
end
|
|
@@ -32,11 +32,16 @@ describe Mongo::Server::Description do
|
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
let(:monitoring) do
|
|
35
|
-
Mongo::Monitoring.new
|
|
35
|
+
Mongo::Monitoring.new(monitoring: false)
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
+
let(:topology) do
|
|
39
|
+
double('topology')
|
|
40
|
+
end
|
|
41
|
+
|
|
38
42
|
let(:cluster) do
|
|
39
43
|
double('cluster').tap do |cl|
|
|
44
|
+
allow(cl).to receive(:topology).and_return(topology)
|
|
40
45
|
allow(cl).to receive(:app_metadata).and_return(app_metadata)
|
|
41
46
|
end
|
|
42
47
|
end
|
|
@@ -546,6 +551,90 @@ describe Mongo::Server::Description do
|
|
|
546
551
|
end
|
|
547
552
|
end
|
|
548
553
|
|
|
554
|
+
describe '#server_type' do
|
|
555
|
+
|
|
556
|
+
context 'when the server is an arbiter' do
|
|
557
|
+
|
|
558
|
+
let(:description) do
|
|
559
|
+
described_class.new(address, { 'arbiterOnly' => true, 'setName' => 'test' })
|
|
560
|
+
end
|
|
561
|
+
|
|
562
|
+
it 'returns :arbiter' do
|
|
563
|
+
expect(description.server_type).to eq(:arbiter)
|
|
564
|
+
end
|
|
565
|
+
end
|
|
566
|
+
|
|
567
|
+
context 'when the server is a ghost' do
|
|
568
|
+
|
|
569
|
+
let(:description) do
|
|
570
|
+
described_class.new(address, { 'isreplicaset' => true })
|
|
571
|
+
end
|
|
572
|
+
|
|
573
|
+
it 'returns :ghost' do
|
|
574
|
+
expect(description.server_type).to eq(:ghost)
|
|
575
|
+
end
|
|
576
|
+
end
|
|
577
|
+
|
|
578
|
+
context 'when the server is a mongos' do
|
|
579
|
+
|
|
580
|
+
let(:config) do
|
|
581
|
+
{ 'msg' => 'isdbgrid', 'ismaster' => true }
|
|
582
|
+
end
|
|
583
|
+
|
|
584
|
+
let(:description) do
|
|
585
|
+
described_class.new(address, config)
|
|
586
|
+
end
|
|
587
|
+
|
|
588
|
+
it 'returns :sharded' do
|
|
589
|
+
expect(description.server_type).to eq(:sharded)
|
|
590
|
+
end
|
|
591
|
+
end
|
|
592
|
+
|
|
593
|
+
context 'when the server is a primary' do
|
|
594
|
+
|
|
595
|
+
let(:description) do
|
|
596
|
+
described_class.new(address, replica)
|
|
597
|
+
end
|
|
598
|
+
|
|
599
|
+
it 'returns :primary' do
|
|
600
|
+
expect(description.server_type).to eq(:primary)
|
|
601
|
+
end
|
|
602
|
+
end
|
|
603
|
+
|
|
604
|
+
context 'when the server is a secondary' do
|
|
605
|
+
|
|
606
|
+
let(:description) do
|
|
607
|
+
described_class.new(address, { 'secondary' => true, 'setName' => 'test' })
|
|
608
|
+
end
|
|
609
|
+
|
|
610
|
+
it 'returns :secondary' do
|
|
611
|
+
expect(description.server_type).to eq(:secondary)
|
|
612
|
+
end
|
|
613
|
+
end
|
|
614
|
+
|
|
615
|
+
context 'when the server is standalone' do
|
|
616
|
+
|
|
617
|
+
let(:description) do
|
|
618
|
+
described_class.new(address, { 'ismaster' => true, 'ok' => 1 })
|
|
619
|
+
end
|
|
620
|
+
|
|
621
|
+
it 'returns :standalone' do
|
|
622
|
+
expect(description.server_type).to eq(:standalone)
|
|
623
|
+
end
|
|
624
|
+
end
|
|
625
|
+
|
|
626
|
+
context 'when the description has no configuration' do
|
|
627
|
+
|
|
628
|
+
let(:description) do
|
|
629
|
+
described_class.new(address)
|
|
630
|
+
end
|
|
631
|
+
|
|
632
|
+
it 'returns :unknown' do
|
|
633
|
+
expect(description.server_type).to eq(:unknown)
|
|
634
|
+
end
|
|
635
|
+
end
|
|
636
|
+
end
|
|
637
|
+
|
|
549
638
|
describe '#unknown?' do
|
|
550
639
|
|
|
551
640
|
context 'when the description has no configuration' do
|
|
@@ -10,12 +10,12 @@ describe 'Server Selection' do
|
|
|
10
10
|
|
|
11
11
|
context(spec.description) do
|
|
12
12
|
|
|
13
|
-
let(:
|
|
14
|
-
|
|
13
|
+
let(:monitoring) do
|
|
14
|
+
Mongo::Monitoring.new(monitoring: false)
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
let(:
|
|
18
|
-
|
|
17
|
+
let(:topology) do
|
|
18
|
+
spec.type.new({}, monitoring)
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
let(:listeners) do
|
|
@@ -28,6 +28,7 @@ describe 'Server Selection' do
|
|
|
28
28
|
allow(c).to receive(:single?).and_return(topology.single?)
|
|
29
29
|
allow(c).to receive(:sharded?).and_return(topology.sharded?)
|
|
30
30
|
allow(c).to receive(:replica_set?).and_return(topology.replica_set?)
|
|
31
|
+
allow(c).to receive(:unknown?).and_return(topology.unknown?)
|
|
31
32
|
allow(c).to receive(:app_metadata).and_return(app_metadata)
|
|
32
33
|
end
|
|
33
34
|
end
|
|
@@ -36,7 +37,7 @@ describe 'Server Selection' do
|
|
|
36
37
|
spec.candidate_servers.collect do |server|
|
|
37
38
|
address = Mongo::Address.new(server['address'])
|
|
38
39
|
Mongo::Server.new(address, cluster, monitoring, listeners, TEST_OPTIONS).tap do |s|
|
|
39
|
-
allow(s).to receive(:average_round_trip_time).and_return(server['avg_rtt_ms'])
|
|
40
|
+
allow(s).to receive(:average_round_trip_time).and_return(server['avg_rtt_ms'] / 1000.0)
|
|
40
41
|
allow(s).to receive(:tags).and_return(server['tags'])
|
|
41
42
|
allow(s).to receive(:secondary?).and_return(server['type'] == 'RSSecondary')
|
|
42
43
|
allow(s).to receive(:primary?).and_return(server['type'] == 'RSPrimary')
|
|
@@ -49,7 +50,7 @@ describe 'Server Selection' do
|
|
|
49
50
|
spec.in_latency_window.collect do |server|
|
|
50
51
|
address = Mongo::Address.new(server['address'])
|
|
51
52
|
Mongo::Server.new(address, cluster, monitoring, listeners, TEST_OPTIONS).tap do |s|
|
|
52
|
-
allow(s).to receive(:average_round_trip_time).and_return(server['avg_rtt_ms'])
|
|
53
|
+
allow(s).to receive(:average_round_trip_time).and_return(server['avg_rtt_ms'] / 1000.0)
|
|
53
54
|
allow(s).to receive(:tags).and_return(server['tags'])
|
|
54
55
|
allow(s).to receive(:connectable?).and_return(true)
|
|
55
56
|
end
|
|
@@ -18,7 +18,7 @@ describe Mongo::ServerSelector::Nearest do
|
|
|
18
18
|
context 'when max_staleness is provided' do
|
|
19
19
|
|
|
20
20
|
let(:options) do
|
|
21
|
-
{ max_staleness:
|
|
21
|
+
{ max_staleness: 95 }
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
it 'sets the max_staleness option' do
|
|
@@ -32,7 +32,7 @@ describe Mongo::ServerSelector::Nearest do
|
|
|
32
32
|
context 'when max staleness is the same' do
|
|
33
33
|
|
|
34
34
|
let(:options) do
|
|
35
|
-
{ max_staleness:
|
|
35
|
+
{ max_staleness: 95 }
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
let(:other) do
|
|
@@ -47,7 +47,7 @@ describe Mongo::ServerSelector::Nearest do
|
|
|
47
47
|
context 'when max staleness is different' do
|
|
48
48
|
|
|
49
49
|
let(:other_options) do
|
|
50
|
-
{ max_staleness:
|
|
50
|
+
{ max_staleness: 100 }
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
let(:other) do
|
|
@@ -100,11 +100,11 @@ describe Mongo::ServerSelector::Nearest do
|
|
|
100
100
|
context 'max staleness provided' do
|
|
101
101
|
|
|
102
102
|
let(:max_staleness) do
|
|
103
|
-
|
|
103
|
+
100
|
|
104
104
|
end
|
|
105
105
|
|
|
106
106
|
let(:expected) do
|
|
107
|
-
{ :mode => 'nearest',
|
|
107
|
+
{ :mode => 'nearest', maxStalenessSeconds: 100 }
|
|
108
108
|
end
|
|
109
109
|
|
|
110
110
|
it 'returns a read preference formatted for mongos' do
|
|
@@ -246,8 +246,8 @@ describe Mongo::ServerSelector::Nearest do
|
|
|
246
246
|
end
|
|
247
247
|
|
|
248
248
|
context 'high latency servers' do
|
|
249
|
-
let(:far_primary) { make_server(:primary, :average_round_trip_time => 113, address: default_address) }
|
|
250
|
-
let(:far_secondary) { make_server(:secondary, :average_round_trip_time => 114, address: default_address) }
|
|
249
|
+
let(:far_primary) { make_server(:primary, :average_round_trip_time => 0.113, address: default_address) }
|
|
250
|
+
let(:far_secondary) { make_server(:secondary, :average_round_trip_time => 0.114, address: default_address) }
|
|
251
251
|
|
|
252
252
|
context 'single candidate' do
|
|
253
253
|
|
|
@@ -18,7 +18,7 @@ describe Mongo::ServerSelector::PrimaryPreferred do
|
|
|
18
18
|
context 'when max_staleness is provided' do
|
|
19
19
|
|
|
20
20
|
let(:options) do
|
|
21
|
-
{ max_staleness:
|
|
21
|
+
{ max_staleness: 95 }
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
it 'sets the max_staleness option' do
|
|
@@ -32,7 +32,7 @@ describe Mongo::ServerSelector::PrimaryPreferred do
|
|
|
32
32
|
context 'when max staleness is the same' do
|
|
33
33
|
|
|
34
34
|
let(:options) do
|
|
35
|
-
{ max_staleness:
|
|
35
|
+
{ max_staleness: 95 }
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
let(:other) do
|
|
@@ -47,7 +47,7 @@ describe Mongo::ServerSelector::PrimaryPreferred do
|
|
|
47
47
|
context 'when max staleness is different' do
|
|
48
48
|
|
|
49
49
|
let(:other_options) do
|
|
50
|
-
{ max_staleness:
|
|
50
|
+
{ max_staleness: 100 }
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
let(:other) do
|
|
@@ -93,11 +93,11 @@ describe Mongo::ServerSelector::PrimaryPreferred do
|
|
|
93
93
|
context 'max staleness provided' do
|
|
94
94
|
|
|
95
95
|
let(:max_staleness) do
|
|
96
|
-
|
|
96
|
+
100
|
|
97
97
|
end
|
|
98
98
|
|
|
99
99
|
let(:expected) do
|
|
100
|
-
{ :mode => 'primaryPreferred',
|
|
100
|
+
{ :mode => 'primaryPreferred', maxStalenessSeconds: 100 }
|
|
101
101
|
end
|
|
102
102
|
|
|
103
103
|
it 'returns a read preference formatted for mongos' do
|
|
@@ -244,8 +244,8 @@ describe Mongo::ServerSelector::PrimaryPreferred do
|
|
|
244
244
|
end
|
|
245
245
|
|
|
246
246
|
context 'high latency servers' do
|
|
247
|
-
let(:far_primary) { make_server(:primary, :average_round_trip_time => 100, address: default_address) }
|
|
248
|
-
let(:far_secondary) { make_server(:secondary, :average_round_trip_time => 113, address: default_address) }
|
|
247
|
+
let(:far_primary) { make_server(:primary, :average_round_trip_time => 0.100, address: default_address) }
|
|
248
|
+
let(:far_secondary) { make_server(:secondary, :average_round_trip_time => 0.113, address: default_address) }
|
|
249
249
|
|
|
250
250
|
context 'single candidate' do
|
|
251
251
|
|
|
@@ -16,7 +16,7 @@ describe Mongo::ServerSelector::Primary do
|
|
|
16
16
|
context 'when max_staleness is provided' do
|
|
17
17
|
|
|
18
18
|
let(:options) do
|
|
19
|
-
{ max_staleness:
|
|
19
|
+
{ max_staleness: 100 }
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
it 'raises an exception' do
|
|
@@ -66,7 +66,7 @@ describe Mongo::ServerSelector::Primary do
|
|
|
66
66
|
context 'max staleness provided' do
|
|
67
67
|
|
|
68
68
|
let(:max_staleness) do
|
|
69
|
-
|
|
69
|
+
100
|
|
70
70
|
end
|
|
71
71
|
|
|
72
72
|
it 'raises an error' do
|
|
@@ -112,8 +112,8 @@ describe Mongo::ServerSelector::Primary do
|
|
|
112
112
|
end
|
|
113
113
|
|
|
114
114
|
context 'high latency candidates' do
|
|
115
|
-
let(:far_primary) { make_server(:primary, :average_round_trip_time => 100, address: default_address) }
|
|
116
|
-
let(:far_secondary) { make_server(:secondary, :average_round_trip_time => 120, address: default_address) }
|
|
115
|
+
let(:far_primary) { make_server(:primary, :average_round_trip_time => 0.100, address: default_address) }
|
|
116
|
+
let(:far_secondary) { make_server(:secondary, :average_round_trip_time => 0.120, address: default_address) }
|
|
117
117
|
|
|
118
118
|
context 'single candidate' do
|
|
119
119
|
|
|
@@ -18,7 +18,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
|
|
|
18
18
|
context 'when max_staleness is provided' do
|
|
19
19
|
|
|
20
20
|
let(:options) do
|
|
21
|
-
{ max_staleness:
|
|
21
|
+
{ max_staleness: 95 }
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
it 'sets the max_staleness option' do
|
|
@@ -32,7 +32,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
|
|
|
32
32
|
context 'when max staleness is the same' do
|
|
33
33
|
|
|
34
34
|
let(:options) do
|
|
35
|
-
{ max_staleness:
|
|
35
|
+
{ max_staleness: 90 }
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
let(:other) do
|
|
@@ -47,7 +47,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
|
|
|
47
47
|
context 'when max staleness is different' do
|
|
48
48
|
|
|
49
49
|
let(:other_options) do
|
|
50
|
-
{ max_staleness:
|
|
50
|
+
{ max_staleness: 100 }
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
let(:other) do
|
|
@@ -100,7 +100,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
|
|
|
100
100
|
end
|
|
101
101
|
|
|
102
102
|
let(:expected) do
|
|
103
|
-
{ :mode => 'secondaryPreferred',
|
|
103
|
+
{ :mode => 'secondaryPreferred', maxStalenessSeconds: 60 }
|
|
104
104
|
end
|
|
105
105
|
|
|
106
106
|
it 'returns a read preference formatted for mongos' do
|
|
@@ -243,8 +243,8 @@ describe Mongo::ServerSelector::SecondaryPreferred do
|
|
|
243
243
|
end
|
|
244
244
|
|
|
245
245
|
context 'high latency servers' do
|
|
246
|
-
let(:far_primary) { make_server(:primary, :average_round_trip_time => 100, address: default_address) }
|
|
247
|
-
let(:far_secondary) { make_server(:secondary, :average_round_trip_time => 113, address: default_address) }
|
|
246
|
+
let(:far_primary) { make_server(:primary, :average_round_trip_time => 0.100, address: default_address) }
|
|
247
|
+
let(:far_secondary) { make_server(:secondary, :average_round_trip_time => 0.113, address: default_address) }
|
|
248
248
|
|
|
249
249
|
context 'single candidate' do
|
|
250
250
|
|