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.
Files changed (128) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/lib/mongo/auth/cr/conversation.rb +1 -1
  5. data/lib/mongo/auth/ldap/conversation.rb +1 -1
  6. data/lib/mongo/auth/scram/conversation.rb +1 -1
  7. data/lib/mongo/auth/x509/conversation.rb +4 -2
  8. data/lib/mongo/client.rb +7 -4
  9. data/lib/mongo/cluster.rb +55 -5
  10. data/lib/mongo/cluster/app_metadata.rb +7 -1
  11. data/lib/mongo/cluster/topology.rb +7 -6
  12. data/lib/mongo/cluster/topology/replica_set.rb +48 -2
  13. data/lib/mongo/cluster/topology/sharded.rb +47 -1
  14. data/lib/mongo/cluster/topology/single.rb +55 -4
  15. data/lib/mongo/cluster/topology/unknown.rb +65 -9
  16. data/lib/mongo/error/invalid_server_preference.rb +3 -1
  17. data/lib/mongo/event.rb +8 -0
  18. data/lib/mongo/event/description_changed.rb +20 -2
  19. data/lib/mongo/event/member_discovered.rb +65 -0
  20. data/lib/mongo/event/primary_elected.rb +3 -1
  21. data/lib/mongo/event/standalone_discovered.rb +1 -1
  22. data/lib/mongo/monitoring.rb +41 -0
  23. data/lib/mongo/monitoring/event.rb +6 -0
  24. data/lib/mongo/monitoring/event/server_closed.rb +46 -0
  25. data/lib/mongo/monitoring/event/server_description_changed.rb +58 -0
  26. data/lib/mongo/monitoring/event/server_opening.rb +46 -0
  27. data/lib/mongo/monitoring/event/topology_changed.rb +46 -0
  28. data/lib/mongo/monitoring/event/topology_closed.rb +41 -0
  29. data/lib/mongo/monitoring/event/topology_opening.rb +41 -0
  30. data/lib/mongo/monitoring/publishable.rb +12 -0
  31. data/lib/mongo/monitoring/sdam_log_subscriber.rb +54 -0
  32. data/lib/mongo/monitoring/server_closed_log_subscriber.rb +30 -0
  33. data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +33 -0
  34. data/lib/mongo/monitoring/server_opening_log_subscriber.rb +30 -0
  35. data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +40 -0
  36. data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +30 -0
  37. data/lib/mongo/server.rb +6 -0
  38. data/lib/mongo/server/connection.rb +1 -1
  39. data/lib/mongo/server/description.rb +23 -3
  40. data/lib/mongo/server/description/inspector.rb +4 -2
  41. data/lib/mongo/server/description/inspector/description_changed.rb +2 -2
  42. data/lib/mongo/server/description/inspector/member_discovered.rb +59 -0
  43. data/lib/mongo/server/description/inspector/primary_elected.rb +2 -0
  44. data/lib/mongo/server_selector.rb +10 -5
  45. data/lib/mongo/server_selector/nearest.rb +1 -1
  46. data/lib/mongo/server_selector/primary_preferred.rb +1 -1
  47. data/lib/mongo/server_selector/secondary.rb +1 -1
  48. data/lib/mongo/server_selector/secondary_preferred.rb +1 -1
  49. data/lib/mongo/server_selector/selectable.rb +24 -12
  50. data/lib/mongo/uri.rb +1 -1
  51. data/lib/mongo/version.rb +1 -1
  52. data/mongo.gemspec +1 -1
  53. data/spec/mongo/auth/cr_spec.rb +6 -1
  54. data/spec/mongo/auth/ldap_spec.rb +6 -1
  55. data/spec/mongo/auth/scram_spec.rb +6 -1
  56. data/spec/mongo/auth/x509/conversation_spec.rb +69 -0
  57. data/spec/mongo/auth/x509_spec.rb +9 -4
  58. data/spec/mongo/client_spec.rb +40 -2
  59. data/spec/mongo/cluster/topology/replica_set_spec.rb +218 -9
  60. data/spec/mongo/cluster/topology/sharded_spec.rb +17 -2
  61. data/spec/mongo/cluster/topology/single_spec.rb +19 -4
  62. data/spec/mongo/cluster/topology/unknown_spec.rb +19 -1
  63. data/spec/mongo/cluster/topology_spec.rb +11 -7
  64. data/spec/mongo/cluster_spec.rb +25 -7
  65. data/spec/mongo/max_staleness_spec.rb +40 -22
  66. data/spec/mongo/monitoring_spec.rb +2 -2
  67. data/spec/mongo/sdam_monitoring_spec.rb +60 -0
  68. data/spec/mongo/sdam_spec.rb +77 -0
  69. data/spec/mongo/server/connection_pool_spec.rb +6 -1
  70. data/spec/mongo/server/connection_spec.rb +6 -1
  71. data/spec/mongo/server/description_spec.rb +90 -1
  72. data/spec/mongo/server_selection_spec.rb +7 -6
  73. data/spec/mongo/server_selector/nearest_spec.rb +7 -7
  74. data/spec/mongo/server_selector/primary_preferred_spec.rb +7 -7
  75. data/spec/mongo/server_selector/primary_spec.rb +4 -4
  76. data/spec/mongo/server_selector/secondary_preferred_spec.rb +6 -6
  77. data/spec/mongo/server_selector/secondary_spec.rb +6 -6
  78. data/spec/mongo/server_selector_spec.rb +8 -0
  79. data/spec/mongo/server_spec.rb +6 -1
  80. data/spec/mongo/uri_spec.rb +4 -4
  81. data/spec/spec_helper.rb +2 -0
  82. data/spec/support/max_staleness/ReplicaSetNoPrimary/Incompatible.yml +4 -4
  83. data/spec/support/max_staleness/ReplicaSetNoPrimary/LastUpdateTime.yml +3 -3
  84. data/spec/support/max_staleness/ReplicaSetNoPrimary/Nearest.yml +3 -3
  85. data/spec/support/max_staleness/ReplicaSetNoPrimary/Nearest2.yml +3 -3
  86. data/spec/support/max_staleness/ReplicaSetNoPrimary/NoKnownServers.yml +15 -0
  87. data/spec/support/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred.yml +1 -1
  88. data/spec/support/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred_tags.yml +3 -3
  89. data/spec/support/max_staleness/ReplicaSetNoPrimary/Secondary.yml +3 -3
  90. data/spec/support/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred.yml +1 -1
  91. data/spec/support/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred_tags.yml +3 -3
  92. data/spec/support/max_staleness/ReplicaSetNoPrimary/ZeroMaxStaleness.yml +23 -0
  93. data/spec/support/max_staleness/ReplicaSetWithPrimary/Incompatible.yml +4 -4
  94. data/spec/support/max_staleness/ReplicaSetWithPrimary/LastUpdateTime.yml +5 -5
  95. data/spec/support/max_staleness/ReplicaSetWithPrimary/{ShortHeartbeartShortMaxStaleness2.yml → LongHeartbeat.yml} +4 -4
  96. data/spec/support/max_staleness/ReplicaSetWithPrimary/{ShortHeartbeartShortMaxStaleness.yml → LongHeartbeat2.yml} +6 -10
  97. data/spec/support/max_staleness/ReplicaSetWithPrimary/MaxStalenessTooSmall.yml +3 -2
  98. data/spec/support/max_staleness/ReplicaSetWithPrimary/MaxStalenessWithModePrimary.yml +2 -2
  99. data/spec/support/max_staleness/ReplicaSetWithPrimary/Nearest.yml +3 -3
  100. data/spec/support/max_staleness/ReplicaSetWithPrimary/Nearest2.yml +3 -3
  101. data/spec/support/max_staleness/ReplicaSetWithPrimary/Nearest_tags.yml +3 -3
  102. data/spec/support/max_staleness/ReplicaSetWithPrimary/PrimaryPreferred.yml +2 -2
  103. data/spec/support/max_staleness/ReplicaSetWithPrimary/PrimaryPreferred_incompatible.yml +3 -3
  104. data/spec/support/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred.yml +1 -1
  105. data/spec/support/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags.yml +3 -3
  106. data/spec/support/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags2.yml +3 -3
  107. data/spec/support/max_staleness/ReplicaSetWithPrimary/Secondary_tags.yml +3 -3
  108. data/spec/support/max_staleness/ReplicaSetWithPrimary/Secondary_tags2.yml +3 -3
  109. data/spec/support/max_staleness/ReplicaSetWithPrimary/ZeroMaxStaleness.yml +7 -11
  110. data/spec/support/max_staleness/Sharded/Incompatible.yml +4 -4
  111. data/spec/support/max_staleness/Sharded/SmallMaxStaleness.yml +10 -2
  112. data/spec/support/max_staleness/Single/Incompatible.yml +4 -4
  113. data/spec/support/max_staleness/Single/SmallMaxStaleness.yml +2 -2
  114. data/spec/support/max_staleness/Unknown/SmallMaxStaleness.yml +14 -0
  115. data/spec/support/sdam/rs/primary_mismatched_me.yml +2 -2
  116. data/spec/support/sdam/rs/secondary_mismatched_me.yml +2 -2
  117. data/spec/support/sdam_monitoring.rb +144 -0
  118. data/spec/support/sdam_monitoring/replica_set_with_no_primary.yml +112 -0
  119. data/spec/support/sdam_monitoring/replica_set_with_primary.yml +111 -0
  120. data/spec/support/sdam_monitoring/replica_set_with_removal.yml +106 -0
  121. data/spec/support/sdam_monitoring/required_replica_set.yml +84 -0
  122. data/spec/support/sdam_monitoring/standalone.yml +70 -0
  123. data/spec/support/server_discovery_and_monitoring.rb +34 -1
  124. data/spec/support/server_selection.rb +14 -11
  125. data/spec/support/shared/server_selector.rb +6 -0
  126. metadata +49 -13
  127. metadata.gz.sig +0 -0
  128. data/spec/mongo/server_discovery_and_monitoring_spec.rb +0 -115
@@ -18,7 +18,7 @@ describe Mongo::ServerSelector::Secondary do
18
18
  context 'when max_staleness is provided' do
19
19
 
20
20
  let(:options) do
21
- { max_staleness: 60 }
21
+ { max_staleness: 100 }
22
22
  end
23
23
 
24
24
  it 'sets the max_staleness option' do
@@ -32,7 +32,7 @@ describe Mongo::ServerSelector::Secondary do
32
32
  context 'when max staleness is the same' do
33
33
 
34
34
  let(:options) do
35
- { max_staleness: 60 }
35
+ { max_staleness: 90 }
36
36
  end
37
37
 
38
38
  let(:other) do
@@ -47,7 +47,7 @@ describe Mongo::ServerSelector::Secondary do
47
47
  context 'when max staleness is different' do
48
48
 
49
49
  let(:other_options) do
50
- { max_staleness: 30 }
50
+ { max_staleness: 95 }
51
51
  end
52
52
 
53
53
  let(:other) do
@@ -96,7 +96,7 @@ describe Mongo::ServerSelector::Secondary do
96
96
  end
97
97
 
98
98
  let(:expected) do
99
- { :mode => 'secondary', maxStalenessMS: 60000 }
99
+ { :mode => 'secondary', maxStalenessSeconds: 60 }
100
100
  end
101
101
 
102
102
  it 'returns a read preference formatted for mongos' do
@@ -207,8 +207,8 @@ describe Mongo::ServerSelector::Secondary do
207
207
  end
208
208
 
209
209
  context 'high latency servers' do
210
- let(:far_primary) { make_server(:primary, :average_round_trip_time => 100, address: default_address) }
211
- let(:far_secondary) { make_server(:secondary, :average_round_trip_time => 113, address: default_address) }
210
+ let(:far_primary) { make_server(:primary, :average_round_trip_time => 0.100, address: default_address) }
211
+ let(:far_secondary) { make_server(:secondary, :average_round_trip_time => 0.113, address: default_address) }
212
212
 
213
213
  context 'single candidate' do
214
214
 
@@ -150,9 +150,11 @@ describe Mongo::ServerSelector do
150
150
 
151
151
  let(:cluster) do
152
152
  double('cluster').tap do |c|
153
+ allow(c).to receive(:topology).and_return(topology)
153
154
  allow(c).to receive(:servers).and_return(servers)
154
155
  allow(c).to receive(:single?).and_return(false)
155
156
  allow(c).to receive(:sharded?).and_return(false)
157
+ allow(c).to receive(:unknown?).and_return(false)
156
158
  allow(c).to receive(:scan!).and_return(true)
157
159
  allow(c).to receive(:options).and_return(server_selection_timeout: 0.1)
158
160
  end
@@ -179,9 +181,11 @@ describe Mongo::ServerSelector do
179
181
 
180
182
  let(:cluster) do
181
183
  double('cluster').tap do |c|
184
+ allow(c).to receive(:topology).and_return(topology)
182
185
  allow(c).to receive(:servers).and_return(servers)
183
186
  allow(c).to receive(:single?).and_return(false)
184
187
  allow(c).to receive(:sharded?).and_return(false)
188
+ allow(c).to receive(:unknown?).and_return(false)
185
189
  allow(c).to receive(:scan!).and_return(true)
186
190
  allow(c).to receive(:options).and_return(server_selection_timeout: 0)
187
191
  end
@@ -220,9 +224,11 @@ describe Mongo::ServerSelector do
220
224
 
221
225
  let(:cluster) do
222
226
  double('cluster').tap do |c|
227
+ allow(c).to receive(:topology).and_return(topology)
223
228
  allow(c).to receive(:servers).and_return(servers)
224
229
  allow(c).to receive(:single?).and_return(false)
225
230
  allow(c).to receive(:sharded?).and_return(false)
231
+ allow(c).to receive(:unknown?).and_return(false)
226
232
  allow(c).to receive(:scan!).and_return(true)
227
233
  allow(c).to receive(:options).and_return(local_threshold: 0.050)
228
234
  end
@@ -248,9 +254,11 @@ describe Mongo::ServerSelector do
248
254
 
249
255
  let(:cluster) do
250
256
  double('cluster').tap do |c|
257
+ allow(c).to receive(:topology).and_return(topology)
251
258
  allow(c).to receive(:servers).and_return(servers)
252
259
  allow(c).to receive(:single?).and_return(single)
253
260
  allow(c).to receive(:sharded?).and_return(sharded)
261
+ allow(c).to receive(:unknown?).and_return(false)
254
262
  allow(c).to receive(:scan!).and_return(true)
255
263
  allow(c).to receive(:options).and_return(server_selection_timeout: 0.1)
256
264
  end
@@ -2,8 +2,13 @@ require 'spec_helper'
2
2
 
3
3
  describe Mongo::Server do
4
4
 
5
+ let(:topology) do
6
+ double('topology')
7
+ end
8
+
5
9
  let(:cluster) do
6
10
  double('cluster').tap do |cl|
11
+ allow(cl).to receive(:topology).and_return(topology)
7
12
  allow(cl).to receive(:app_metadata).and_return(app_metadata)
8
13
  end
9
14
  end
@@ -13,7 +18,7 @@ describe Mongo::Server do
13
18
  end
14
19
 
15
20
  let(:monitoring) do
16
- Mongo::Monitoring.new
21
+ Mongo::Monitoring.new(monitoring: false)
17
22
  end
18
23
 
19
24
  let(:address) do
@@ -541,7 +541,7 @@ describe Mongo::URI do
541
541
  context 'read preference max staleness option provided' do
542
542
 
543
543
  let(:options) do
544
- 'readPreference=Secondary&maxStalenessMS=120000'
544
+ 'readPreference=Secondary&maxStalenessSeconds=120'
545
545
  end
546
546
 
547
547
  let(:read) do
@@ -561,7 +561,7 @@ describe Mongo::URI do
561
561
  context 'when max staleness is combined with read preference mode primary' do
562
562
 
563
563
  let(:options) do
564
- 'readPreference=primary&maxStalenessMS=120000'
564
+ 'readPreference=primary&maxStalenessSeconds=120'
565
565
  end
566
566
 
567
567
  it 'raises an exception when read preference is accessed on the client' do
@@ -571,10 +571,10 @@ describe Mongo::URI do
571
571
  end
572
572
  end
573
573
 
574
- context 'when the max staleness value is not at least twice heartbeat frequency' do
574
+ context 'when the max staleness value is too small' do
575
575
 
576
576
  let(:options) do
577
- 'readPreference=secondary&maxStalenessMS=1'
577
+ 'readPreference=secondary&maxStalenessSeconds=89'
578
578
  end
579
579
 
580
580
  it 'does not raise an exception until the read preference is used' do
@@ -2,6 +2,7 @@ TEST_SET = 'ruby-driver-rs'
2
2
  COVERAGE_MIN = 90
3
3
  CURRENT_PATH = File.expand_path(File.dirname(__FILE__))
4
4
  SERVER_DISCOVERY_TESTS = Dir.glob("#{CURRENT_PATH}/support/sdam/**/*.yml")
5
+ SDAM_MONITORING_TESTS = Dir.glob("#{CURRENT_PATH}/support/sdam_monitoring/*.yml")
5
6
  SERVER_SELECTION_RTT_TESTS = Dir.glob("#{CURRENT_PATH}/support/server_selection/rtt/*.yml")
6
7
  SERVER_SELECTION_TESTS = Dir.glob("#{CURRENT_PATH}/support/server_selection/selection/**/*.yml")
7
8
  MAX_STALENESS_TESTS = Dir.glob("#{CURRENT_PATH}/support/max_staleness/**/*.yml")
@@ -31,6 +32,7 @@ require 'support/authorization'
31
32
  require 'support/server_discovery_and_monitoring'
32
33
  require 'support/server_selection_rtt'
33
34
  require 'support/server_selection'
35
+ require 'support/sdam_monitoring'
34
36
  require 'support/crud'
35
37
  require 'support/command_monitoring'
36
38
  require 'support/connection_string'
@@ -1,6 +1,6 @@
1
- # During server selection,
2
- # clients (drivers or mongos) MUST raise an error if ``maxStalenessMS`` is not zero or null,
3
- # and any server's ``maxWireVersion`` is less than 5 (`SERVER-23893`_).
1
+ # During server selection, clients (drivers or mongos) MUST raise an error if
2
+ # maxStalenessSeconds is defined and not -1 and any server's ``maxWireVersion``
3
+ # is less than 5 (`SERVER-23893`_).
4
4
  ---
5
5
  topology_description:
6
6
  type: ReplicaSetNoPrimary
@@ -21,5 +21,5 @@ topology_description:
21
21
  lastWrite: {lastWriteDate: {$numberLong: "1"}}
22
22
  read_preference:
23
23
  mode: Nearest
24
- maxStalenessMS: 120000
24
+ maxStalenessSeconds: 120
25
25
  error: true
@@ -7,14 +7,14 @@ topology_description:
7
7
  type: RSSecondary
8
8
  avg_rtt_ms: 5
9
9
  lastUpdateTime: 1
10
- lastWrite: {lastWriteDate: {$numberLong: "25002"}}
10
+ lastWrite: {lastWriteDate: {$numberLong: "125002"}}
11
11
  maxWireVersion: 5
12
12
  - &2
13
13
  address: b:27017
14
14
  type: RSSecondary
15
15
  avg_rtt_ms: 50 # Too far.
16
16
  lastUpdateTime: 25002 # Not used when there's no primary.
17
- lastWrite: {lastWriteDate: {$numberLong: "2"}} # 25 sec stale + 25 sec heartbeat <= 50 sec maxStaleness.
17
+ lastWrite: {lastWriteDate: {$numberLong: "2"}} # 125 sec stale + 25 sec heartbeat <= 150 sec maxStaleness.
18
18
  maxWireVersion: 5
19
19
  - &3
20
20
  address: c:27017
@@ -25,7 +25,7 @@ topology_description:
25
25
  maxWireVersion: 5
26
26
  read_preference:
27
27
  mode: Nearest
28
- maxStalenessMS: 50000
28
+ maxStalenessSeconds: 150
29
29
  suitable_servers:
30
30
  - *1
31
31
  - *2
@@ -7,14 +7,14 @@ topology_description:
7
7
  type: RSSecondary
8
8
  avg_rtt_ms: 5
9
9
  lastUpdateTime: 0
10
- lastWrite: {lastWriteDate: {$numberLong: "25002"}}
10
+ lastWrite: {lastWriteDate: {$numberLong: "125002"}}
11
11
  maxWireVersion: 5
12
12
  - &2
13
13
  address: b:27017
14
14
  type: RSSecondary
15
15
  avg_rtt_ms: 50 # Too far.
16
16
  lastUpdateTime: 0
17
- lastWrite: {lastWriteDate: {$numberLong: "2"}} # 25 sec stale + 25 sec heartbeat <= 50 sec maxStaleness.
17
+ lastWrite: {lastWriteDate: {$numberLong: "2"}} # 125 sec stale + 25 sec heartbeat <= 150 sec maxStaleness.
18
18
  maxWireVersion: 5
19
19
  - &3
20
20
  address: c:27017
@@ -25,7 +25,7 @@ topology_description:
25
25
  maxWireVersion: 5
26
26
  read_preference:
27
27
  mode: Nearest
28
- maxStalenessMS: 50000
28
+ maxStalenessSeconds: 150
29
29
  suitable_servers:
30
30
  - *1
31
31
  - *2
@@ -7,14 +7,14 @@ topology_description:
7
7
  type: RSSecondary
8
8
  avg_rtt_ms: 50 # Too far.
9
9
  lastUpdateTime: 0
10
- lastWrite: {lastWriteDate: {$numberLong: "25002"}}
10
+ lastWrite: {lastWriteDate: {$numberLong: "125002"}}
11
11
  maxWireVersion: 5
12
12
  - &2
13
13
  address: b:27017
14
14
  type: RSSecondary
15
15
  avg_rtt_ms: 5
16
16
  lastUpdateTime: 0
17
- lastWrite: {lastWriteDate: {$numberLong: "2"}} # 25 sec stale + 25 sec heartbeat <= 50 sec maxStaleness.
17
+ lastWrite: {lastWriteDate: {$numberLong: "2"}} # 125 sec stale + 25 sec heartbeat <= 150 sec maxStaleness.
18
18
  maxWireVersion: 5
19
19
  - &3
20
20
  address: c:27017
@@ -25,7 +25,7 @@ topology_description:
25
25
  maxWireVersion: 5
26
26
  read_preference:
27
27
  mode: Nearest
28
- maxStalenessMS: 50000
28
+ maxStalenessSeconds: 150
29
29
  suitable_servers:
30
30
  - *1
31
31
  - *2
@@ -0,0 +1,15 @@
1
+ # maxStalenessSeconds must be at least 90 seconds, even with no known servers.
2
+ ---
3
+ topology_description:
4
+ type: ReplicaSetNoPrimary
5
+ servers:
6
+ - &1
7
+ address: a:27017
8
+ type: Unknown
9
+ - &2
10
+ address: b:27017
11
+ type: Unknown
12
+ read_preference:
13
+ mode: Nearest
14
+ maxStalenessSeconds: 1 # Too small.
15
+ error: true
@@ -20,7 +20,7 @@ topology_description:
20
20
  lastWrite: {lastWriteDate: {$numberLong: "1"}} # Very stale.
21
21
  read_preference:
22
22
  mode: PrimaryPreferred
23
- maxStalenessMS: 50000
23
+ maxStalenessSeconds: 90
24
24
  suitable_servers:
25
25
  - *1
26
26
  in_latency_window:
@@ -1,4 +1,4 @@
1
- # maxStalenessMS is applied before tag sets. With tag sets
1
+ # maxStalenessSeconds is applied before tag sets. With tag sets
2
2
  # [{data_center: nyc}, {data_center: tokyo}], if the only node in NYC is stale
3
3
  # then use Tokyo.
4
4
  ---
@@ -11,7 +11,7 @@ topology_description:
11
11
  type: RSSecondary
12
12
  avg_rtt_ms: 5
13
13
  lastUpdateTime: 0
14
- lastWrite: {lastWriteDate: {$numberLong: "25002"}}
14
+ lastWrite: {lastWriteDate: {$numberLong: "125002"}}
15
15
  maxWireVersion: 5
16
16
  tags:
17
17
  data_center: tokyo # Matches second tag set.
@@ -26,7 +26,7 @@ topology_description:
26
26
  data_center: nyc
27
27
  read_preference:
28
28
  mode: PrimaryPreferred
29
- maxStalenessMS: 50000
29
+ maxStalenessSeconds: 150
30
30
  tag_sets:
31
31
  - data_center: nyc
32
32
  - data_center: tokyo
@@ -10,7 +10,7 @@ topology_description:
10
10
  avg_rtt_ms: 5
11
11
  lastUpdateTime: 0
12
12
  maxWireVersion: 5
13
- lastWrite: {lastWriteDate: {$numberLong: "25002"}}
13
+ lastWrite: {lastWriteDate: {$numberLong: "125002"}}
14
14
  tags:
15
15
  data_center: tokyo # No match, but its lastWriteDate is used in estimate.
16
16
  - &2
@@ -19,7 +19,7 @@ topology_description:
19
19
  avg_rtt_ms: 5
20
20
  lastUpdateTime: 0
21
21
  maxWireVersion: 5
22
- lastWrite: {lastWriteDate: {$numberLong: "2"}} # 25 sec stale + 25 sec heartbeat <= 50 sec maxStaleness.
22
+ lastWrite: {lastWriteDate: {$numberLong: "2"}} # 125 sec stale + 25 sec heartbeat <= 150 sec maxStaleness.
23
23
  tags:
24
24
  data_center: nyc
25
25
  - &3
@@ -42,7 +42,7 @@ topology_description:
42
42
  data_center: tokyo # No match.
43
43
  read_preference:
44
44
  mode: Secondary
45
- maxStalenessMS: 50000
45
+ maxStalenessSeconds: 150
46
46
  tag_sets:
47
47
  - data_center: nyc
48
48
  suitable_servers:
@@ -19,7 +19,7 @@ topology_description:
19
19
  lastWrite: {lastWriteDate: {$numberLong: "1"}} # Very stale.
20
20
  read_preference:
21
21
  mode: SecondaryPreferred
22
- maxStalenessMS: 120000
22
+ maxStalenessSeconds: 120
23
23
  suitable_servers:
24
24
  - *1
25
25
  in_latency_window:
@@ -10,7 +10,7 @@ topology_description:
10
10
  avg_rtt_ms: 5
11
11
  lastUpdateTime: 0
12
12
  maxWireVersion: 5
13
- lastWrite: {lastWriteDate: {$numberLong: "25002"}}
13
+ lastWrite: {lastWriteDate: {$numberLong: "125002"}}
14
14
  tags:
15
15
  data_center: tokyo # No match, but its lastWriteDate is used in estimate.
16
16
  - &2
@@ -19,7 +19,7 @@ topology_description:
19
19
  avg_rtt_ms: 5
20
20
  lastUpdateTime: 0
21
21
  maxWireVersion: 5
22
- lastWrite: {lastWriteDate: {$numberLong: "2"}} # 25 sec stale + 25 sec heartbeat <= 50 sec maxStaleness.
22
+ lastWrite: {lastWriteDate: {$numberLong: "2"}} # 125 sec stale + 25 sec heartbeat <= 150 sec maxStaleness.
23
23
  tags:
24
24
  data_center: nyc
25
25
  - &3
@@ -42,7 +42,7 @@ topology_description:
42
42
  data_center: tokyo # No match.
43
43
  read_preference:
44
44
  mode: SecondaryPreferred
45
- maxStalenessMS: 50000
45
+ maxStalenessSeconds: 150
46
46
  tag_sets:
47
47
  - data_center: nyc
48
48
  suitable_servers:
@@ -0,0 +1,23 @@
1
+ # maxStalenessSeconds=0 is prohibited.
2
+ ---
3
+ topology_description:
4
+ type: ReplicaSetNoPrimary
5
+ servers:
6
+ - &1
7
+ address: a:27017
8
+ type: RSSecondary
9
+ avg_rtt_ms: 5
10
+ lastUpdateTime: 0
11
+ maxWireVersion: 5
12
+ lastWrite: {lastWriteDate: {$numberLong: "2"}}
13
+ - &2
14
+ address: b:27017
15
+ type: RSSecondary
16
+ avg_rtt_ms: 5
17
+ lastUpdateTime: 0
18
+ maxWireVersion: 4 # Incompatible.
19
+ lastWrite: {lastWriteDate: {$numberLong: "1"}}
20
+ read_preference:
21
+ mode: Nearest
22
+ maxStalenessSeconds: 0
23
+ error: true
@@ -1,6 +1,6 @@
1
- # During server selection,
2
- # clients (drivers or mongos) MUST raise an error if ``maxStalenessMS`` is not zero or null,
3
- # and any server's ``maxWireVersion`` is less than 5 (`SERVER-23893`_).
1
+ # During server selection, clients (drivers or mongos) MUST raise an error if
2
+ # maxStalenessSeconds is defined and not -1 and any server's ``maxWireVersion``
3
+ # is less than 5 (`SERVER-23893`_).
4
4
  ---
5
5
  topology_description:
6
6
  type: ReplicaSetWithPrimary
@@ -21,5 +21,5 @@ topology_description:
21
21
  lastWrite: {lastWriteDate: {$numberLong: "1"}}
22
22
  read_preference:
23
23
  mode: Nearest
24
- maxStalenessMS: 120000
24
+ maxStalenessSeconds: 120
25
25
  error: true
@@ -13,21 +13,21 @@ topology_description:
13
13
  address: b:27017
14
14
  type: RSSecondary
15
15
  avg_rtt_ms: 5
16
- lastUpdateTime: 25001
17
- # Updated 25 sec after primary, so 25 sec stale.
18
- # 25 sec stale + 25 sec heartbeat <= 50 sec maxStaleness.
16
+ lastUpdateTime: 125001
17
+ # Updated 125 sec after primary, so 125 sec stale.
18
+ # 125 sec stale + 25 sec heartbeat <= 150 sec maxStaleness.
19
19
  lastWrite: {lastWriteDate: {$numberLong: "2"}}
20
20
  maxWireVersion: 5
21
21
  - &3
22
22
  address: c:27017
23
23
  type: RSSecondary
24
24
  avg_rtt_ms: 5
25
- lastUpdateTime: 25001
25
+ lastUpdateTime: 125001
26
26
  lastWrite: {lastWriteDate: {$numberLong: "1"}} # Too stale.
27
27
  maxWireVersion: 5
28
28
  read_preference:
29
29
  mode: Nearest
30
- maxStalenessMS: 50000
30
+ maxStalenessSeconds: 150
31
31
  suitable_servers:
32
32
  - *1
33
33
  - *2
@@ -1,7 +1,7 @@
1
- # Users can configure a shorter ``heartbeatFrequencyMS`` than the default to
2
- # allow a smaller ``maxStalenessMS`` with replica sets.
1
+ # If users configure a longer ``heartbeatFrequencyMS`` than the default,
2
+ # ``maxStalenessSeconds`` might have a larger minimum.
3
3
  ---
4
- heartbeatFrequencyMS: 1000 # 1 second.
4
+ heartbeatFrequencyMS: 120000 # 120 seconds.
5
5
  topology_description:
6
6
  type: ReplicaSetWithPrimary
7
7
  servers:
@@ -21,7 +21,7 @@ topology_description:
21
21
  lastWrite: {lastWriteDate: {$numberLong: "1"}}
22
22
  read_preference:
23
23
  mode: Nearest
24
- maxStalenessMS: 2000 # 2 seconds, permitted.
24
+ maxStalenessSeconds: 130 # OK, must be 120 + 10 = 130 seconds.
25
25
  suitable_servers:
26
26
  - *1
27
27
  - *2