mongo 2.4.0.rc1 → 2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -150,6 +150,9 @@ module Mongo
|
|
150
150
|
# @since 2.0.0
|
151
151
|
class Outcome
|
152
152
|
|
153
|
+
# @return [ Array ] events The expected events.
|
154
|
+
attr_reader :events
|
155
|
+
|
153
156
|
# @return [ Hash ] servers The expecations for
|
154
157
|
# server states.
|
155
158
|
attr_reader :servers
|
@@ -169,18 +172,48 @@ module Mongo
|
|
169
172
|
#
|
170
173
|
# @since 2.0.0
|
171
174
|
def initialize(outcome)
|
172
|
-
@servers = process_servers(outcome['servers'])
|
175
|
+
@servers = process_servers(outcome['servers']) if outcome['servers']
|
173
176
|
@set_name = outcome['setName']
|
174
177
|
@topology_type = outcome['topologyType']
|
178
|
+
@events = process_events(outcome['events']) if outcome['events']
|
175
179
|
end
|
176
180
|
|
177
181
|
private
|
178
182
|
|
183
|
+
def process_events(events)
|
184
|
+
events.map do |event|
|
185
|
+
Event.new(event.keys.first, event.values.first)
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
179
189
|
def process_servers(servers)
|
180
190
|
servers.each do |s|
|
181
191
|
SDAM::convert_election_ids([ s[1] ])
|
182
192
|
end
|
183
193
|
end
|
184
194
|
end
|
195
|
+
|
196
|
+
class Event
|
197
|
+
|
198
|
+
MAPPINGS = {
|
199
|
+
'server_closed_event' => Mongo::Monitoring::Event::ServerClosed,
|
200
|
+
'server_description_changed_event' => Mongo::Monitoring::Event::ServerDescriptionChanged,
|
201
|
+
'server_opening_event' => Mongo::Monitoring::Event::ServerOpening,
|
202
|
+
'topology_description_changed_event' => Mongo::Monitoring::Event::TopologyChanged,
|
203
|
+
'topology_opening_event' => Mongo::Monitoring::Event::TopologyOpening
|
204
|
+
}
|
205
|
+
|
206
|
+
attr_reader :name
|
207
|
+
attr_reader :data
|
208
|
+
|
209
|
+
def initialize(name, data)
|
210
|
+
@name = name
|
211
|
+
@data = data
|
212
|
+
end
|
213
|
+
|
214
|
+
def expected
|
215
|
+
MAPPINGS.fetch(name)
|
216
|
+
end
|
217
|
+
end
|
185
218
|
end
|
186
219
|
end
|
@@ -49,11 +49,6 @@ module Mongo
|
|
49
49
|
# @since 2.4.0
|
50
50
|
attr_reader :max_staleness
|
51
51
|
|
52
|
-
# @return [ Array<Hash> ] candidate_servers The candidate servers.
|
53
|
-
#
|
54
|
-
# @since 2.0.0
|
55
|
-
attr_reader :candidate_servers
|
56
|
-
|
57
52
|
# @return [ Array<Hash> ] eligible_servers The eligible servers before the latency
|
58
53
|
# window is taken into account.
|
59
54
|
#
|
@@ -84,13 +79,13 @@ module Mongo
|
|
84
79
|
@test = YAML.load(ERB.new(file.read).result)
|
85
80
|
file.close
|
86
81
|
@description = "#{@test['topology_description']['type']}: #{File.basename(file)}"
|
87
|
-
@heartbeat_frequency = @test['heartbeatFrequencyMS']
|
82
|
+
@heartbeat_frequency = @test['heartbeatFrequencyMS'] / 1000 if @test['heartbeatFrequencyMS']
|
88
83
|
@read_preference = @test['read_preference']
|
89
84
|
@read_preference['mode'] = READ_PREFERENCES[@read_preference['mode']]
|
90
|
-
@max_staleness = @read_preference['
|
85
|
+
@max_staleness = @read_preference['maxStalenessSeconds']
|
91
86
|
@candidate_servers = @test['topology_description']['servers']
|
92
|
-
@suitable_servers = @test['suitable_servers']
|
93
|
-
@in_latency_window = @test['in_latency_window']
|
87
|
+
@suitable_servers = @test['suitable_servers'] || []
|
88
|
+
@in_latency_window = @test['in_latency_window'] || []
|
94
89
|
@type = TOPOLOGY_TYPES[@test['topology_description']['type']]
|
95
90
|
end
|
96
91
|
|
@@ -127,8 +122,7 @@ module Mongo
|
|
127
122
|
#
|
128
123
|
# @since 2.4.0
|
129
124
|
def invalid_max_staleness?
|
130
|
-
@test['error']
|
131
|
-
candidate_servers.any? { |server| server['maxWireVersion'] < 5 }
|
125
|
+
@test['error']
|
132
126
|
end
|
133
127
|
|
134
128
|
# The subset of suitable servers that falls within the allowable latency
|
@@ -149,6 +143,15 @@ module Mongo
|
|
149
143
|
@in_latency_window
|
150
144
|
end
|
151
145
|
|
146
|
+
# The servers a topology would return as candidates for selection.
|
147
|
+
#
|
148
|
+
# @return [ Array<Hash> ] candidate_servers The candidate servers.
|
149
|
+
#
|
150
|
+
# @since 2.0.0
|
151
|
+
def candidate_servers
|
152
|
+
@candidate_servers.select { |s| s['type'] != 'Unknown' }
|
153
|
+
end
|
154
|
+
|
152
155
|
private
|
153
156
|
|
154
157
|
def primary
|
@@ -35,6 +35,12 @@ shared_context 'server selector' do
|
|
35
35
|
let(:secondary) { make_server(:secondary) }
|
36
36
|
let(:options) { { :mode => name, :tag_sets => tag_sets, max_staleness: max_staleness } }
|
37
37
|
let(:selector) { described_class.new(options) }
|
38
|
+
let(:monitoring) do
|
39
|
+
Mongo::Monitoring.new(monitoring: false)
|
40
|
+
end
|
41
|
+
let(:topology) do
|
42
|
+
double('topology')
|
43
|
+
end
|
38
44
|
|
39
45
|
before(:all) do
|
40
46
|
module Mongo
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.4.0
|
4
|
+
version: 2.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tyler Brock
|
@@ -32,7 +32,7 @@ cert_chain:
|
|
32
32
|
EhIn2f8suSc9QAqYt7w4T+PMtjxWTVcXs+Uy2PbDtjhtEBz6ZsP6YSsOpJbrCjCV
|
33
33
|
wZtXjpRUvWz86V5vjhHCTE8fqfEb85aeDwUCckPzpio=
|
34
34
|
-----END CERTIFICATE-----
|
35
|
-
date: 2016-11-
|
35
|
+
date: 2016-11-29 00:00:00.000000000 Z
|
36
36
|
dependencies:
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: bson
|
@@ -40,14 +40,14 @@ dependencies:
|
|
40
40
|
requirements:
|
41
41
|
- - "~>"
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version: 4.2.0
|
43
|
+
version: 4.2.0
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
46
|
version_requirements: !ruby/object:Gem::Requirement
|
47
47
|
requirements:
|
48
48
|
- - "~>"
|
49
49
|
- !ruby/object:Gem::Version
|
50
|
-
version: 4.2.0
|
50
|
+
version: 4.2.0
|
51
51
|
description: A Ruby driver for MongoDB
|
52
52
|
email: mongodb-dev@googlegroups.com
|
53
53
|
executables:
|
@@ -159,6 +159,7 @@ files:
|
|
159
159
|
- lib/mongo/event.rb
|
160
160
|
- lib/mongo/event/description_changed.rb
|
161
161
|
- lib/mongo/event/listeners.rb
|
162
|
+
- lib/mongo/event/member_discovered.rb
|
162
163
|
- lib/mongo/event/primary_elected.rb
|
163
164
|
- lib/mongo/event/publisher.rb
|
164
165
|
- lib/mongo/event/standalone_discovered.rb
|
@@ -182,7 +183,19 @@ files:
|
|
182
183
|
- lib/mongo/monitoring/event/command_started.rb
|
183
184
|
- lib/mongo/monitoring/event/command_succeeded.rb
|
184
185
|
- lib/mongo/monitoring/event/secure.rb
|
186
|
+
- lib/mongo/monitoring/event/server_closed.rb
|
187
|
+
- lib/mongo/monitoring/event/server_description_changed.rb
|
188
|
+
- lib/mongo/monitoring/event/server_opening.rb
|
189
|
+
- lib/mongo/monitoring/event/topology_changed.rb
|
190
|
+
- lib/mongo/monitoring/event/topology_closed.rb
|
191
|
+
- lib/mongo/monitoring/event/topology_opening.rb
|
185
192
|
- lib/mongo/monitoring/publishable.rb
|
193
|
+
- lib/mongo/monitoring/sdam_log_subscriber.rb
|
194
|
+
- lib/mongo/monitoring/server_closed_log_subscriber.rb
|
195
|
+
- lib/mongo/monitoring/server_description_changed_log_subscriber.rb
|
196
|
+
- lib/mongo/monitoring/server_opening_log_subscriber.rb
|
197
|
+
- lib/mongo/monitoring/topology_changed_log_subscriber.rb
|
198
|
+
- lib/mongo/monitoring/topology_opening_log_subscriber.rb
|
186
199
|
- lib/mongo/operation.rb
|
187
200
|
- lib/mongo/operation/commands.rb
|
188
201
|
- lib/mongo/operation/commands/aggregate.rb
|
@@ -281,6 +294,7 @@ files:
|
|
281
294
|
- lib/mongo/server/description/features.rb
|
282
295
|
- lib/mongo/server/description/inspector.rb
|
283
296
|
- lib/mongo/server/description/inspector/description_changed.rb
|
297
|
+
- lib/mongo/server/description/inspector/member_discovered.rb
|
284
298
|
- lib/mongo/server/description/inspector/primary_elected.rb
|
285
299
|
- lib/mongo/server/description/inspector/standalone_discovered.rb
|
286
300
|
- lib/mongo/server/monitor.rb
|
@@ -314,6 +328,7 @@ files:
|
|
314
328
|
- spec/mongo/auth/scram_spec.rb
|
315
329
|
- spec/mongo/auth/user/view_spec.rb
|
316
330
|
- spec/mongo/auth/user_spec.rb
|
331
|
+
- spec/mongo/auth/x509/conversation_spec.rb
|
317
332
|
- spec/mongo/auth/x509_spec.rb
|
318
333
|
- spec/mongo/auth_spec.rb
|
319
334
|
- spec/mongo/bson_spec.rb
|
@@ -404,6 +419,8 @@ files:
|
|
404
419
|
- spec/mongo/protocol/reply_spec.rb
|
405
420
|
- spec/mongo/protocol/update_spec.rb
|
406
421
|
- spec/mongo/retryable_spec.rb
|
422
|
+
- spec/mongo/sdam_monitoring_spec.rb
|
423
|
+
- spec/mongo/sdam_spec.rb
|
407
424
|
- spec/mongo/server/connection_pool/queue_spec.rb
|
408
425
|
- spec/mongo/server/connection_pool_spec.rb
|
409
426
|
- spec/mongo/server/connection_spec.rb
|
@@ -412,7 +429,6 @@ files:
|
|
412
429
|
- spec/mongo/server/description/inspector/primary_elected_spec.rb
|
413
430
|
- spec/mongo/server/description_spec.rb
|
414
431
|
- spec/mongo/server/monitor_spec.rb
|
415
|
-
- spec/mongo/server_discovery_and_monitoring_spec.rb
|
416
432
|
- spec/mongo/server_selection_rtt_spec.rb
|
417
433
|
- spec/mongo/server_selection_spec.rb
|
418
434
|
- spec/mongo/server_selector/nearest_spec.rb
|
@@ -501,14 +517,18 @@ files:
|
|
501
517
|
- spec/support/max_staleness/ReplicaSetNoPrimary/LastUpdateTime.yml
|
502
518
|
- spec/support/max_staleness/ReplicaSetNoPrimary/Nearest.yml
|
503
519
|
- spec/support/max_staleness/ReplicaSetNoPrimary/Nearest2.yml
|
520
|
+
- spec/support/max_staleness/ReplicaSetNoPrimary/NoKnownServers.yml
|
504
521
|
- spec/support/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred.yml
|
505
522
|
- spec/support/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred_tags.yml
|
506
523
|
- spec/support/max_staleness/ReplicaSetNoPrimary/Secondary.yml
|
507
524
|
- spec/support/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred.yml
|
508
525
|
- spec/support/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred_tags.yml
|
526
|
+
- spec/support/max_staleness/ReplicaSetNoPrimary/ZeroMaxStaleness.yml
|
509
527
|
- spec/support/max_staleness/ReplicaSetWithPrimary/DefaultNoMaxStaleness.yml
|
510
528
|
- spec/support/max_staleness/ReplicaSetWithPrimary/Incompatible.yml
|
511
529
|
- spec/support/max_staleness/ReplicaSetWithPrimary/LastUpdateTime.yml
|
530
|
+
- spec/support/max_staleness/ReplicaSetWithPrimary/LongHeartbeat.yml
|
531
|
+
- spec/support/max_staleness/ReplicaSetWithPrimary/LongHeartbeat2.yml
|
512
532
|
- spec/support/max_staleness/ReplicaSetWithPrimary/MaxStalenessTooSmall.yml
|
513
533
|
- spec/support/max_staleness/ReplicaSetWithPrimary/MaxStalenessWithModePrimary.yml
|
514
534
|
- spec/support/max_staleness/ReplicaSetWithPrimary/Nearest.yml
|
@@ -521,13 +541,12 @@ files:
|
|
521
541
|
- spec/support/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags2.yml
|
522
542
|
- spec/support/max_staleness/ReplicaSetWithPrimary/Secondary_tags.yml
|
523
543
|
- spec/support/max_staleness/ReplicaSetWithPrimary/Secondary_tags2.yml
|
524
|
-
- spec/support/max_staleness/ReplicaSetWithPrimary/ShortHeartbeartShortMaxStaleness.yml
|
525
|
-
- spec/support/max_staleness/ReplicaSetWithPrimary/ShortHeartbeartShortMaxStaleness2.yml
|
526
544
|
- spec/support/max_staleness/ReplicaSetWithPrimary/ZeroMaxStaleness.yml
|
527
545
|
- spec/support/max_staleness/Sharded/Incompatible.yml
|
528
546
|
- spec/support/max_staleness/Sharded/SmallMaxStaleness.yml
|
529
547
|
- spec/support/max_staleness/Single/Incompatible.yml
|
530
548
|
- spec/support/max_staleness/Single/SmallMaxStaleness.yml
|
549
|
+
- spec/support/max_staleness/Unknown/SmallMaxStaleness.yml
|
531
550
|
- spec/support/sdam/rs/discover_arbiters.yml
|
532
551
|
- spec/support/sdam/rs/discover_passives.yml
|
533
552
|
- spec/support/sdam/rs/discover_primary.yml
|
@@ -581,6 +600,12 @@ files:
|
|
581
600
|
- spec/support/sdam/single/not_ok_response.yml
|
582
601
|
- spec/support/sdam/single/standalone_removed.yml
|
583
602
|
- spec/support/sdam/single/unavailable_seed.yml
|
603
|
+
- spec/support/sdam_monitoring.rb
|
604
|
+
- spec/support/sdam_monitoring/replica_set_with_no_primary.yml
|
605
|
+
- spec/support/sdam_monitoring/replica_set_with_primary.yml
|
606
|
+
- spec/support/sdam_monitoring/replica_set_with_removal.yml
|
607
|
+
- spec/support/sdam_monitoring/required_replica_set.yml
|
608
|
+
- spec/support/sdam_monitoring/standalone.yml
|
584
609
|
- spec/support/server_discovery_and_monitoring.rb
|
585
610
|
- spec/support/server_selection.rb
|
586
611
|
- spec/support/server_selection/rtt/first_value.yml
|
@@ -635,12 +660,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
635
660
|
version: '0'
|
636
661
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
637
662
|
requirements:
|
638
|
-
- - "
|
663
|
+
- - ">="
|
639
664
|
- !ruby/object:Gem::Version
|
640
|
-
version:
|
665
|
+
version: '0'
|
641
666
|
requirements: []
|
642
667
|
rubyforge_project:
|
643
|
-
rubygems_version: 2.
|
668
|
+
rubygems_version: 2.5.2
|
644
669
|
signing_key:
|
645
670
|
specification_version: 4
|
646
671
|
summary: Ruby driver for MongoDB
|
@@ -656,6 +681,7 @@ test_files:
|
|
656
681
|
- spec/mongo/auth/scram_spec.rb
|
657
682
|
- spec/mongo/auth/user/view_spec.rb
|
658
683
|
- spec/mongo/auth/user_spec.rb
|
684
|
+
- spec/mongo/auth/x509/conversation_spec.rb
|
659
685
|
- spec/mongo/auth/x509_spec.rb
|
660
686
|
- spec/mongo/auth_spec.rb
|
661
687
|
- spec/mongo/bson_spec.rb
|
@@ -746,6 +772,8 @@ test_files:
|
|
746
772
|
- spec/mongo/protocol/reply_spec.rb
|
747
773
|
- spec/mongo/protocol/update_spec.rb
|
748
774
|
- spec/mongo/retryable_spec.rb
|
775
|
+
- spec/mongo/sdam_monitoring_spec.rb
|
776
|
+
- spec/mongo/sdam_spec.rb
|
749
777
|
- spec/mongo/server/connection_pool/queue_spec.rb
|
750
778
|
- spec/mongo/server/connection_pool_spec.rb
|
751
779
|
- spec/mongo/server/connection_spec.rb
|
@@ -754,7 +782,6 @@ test_files:
|
|
754
782
|
- spec/mongo/server/description/inspector/primary_elected_spec.rb
|
755
783
|
- spec/mongo/server/description_spec.rb
|
756
784
|
- spec/mongo/server/monitor_spec.rb
|
757
|
-
- spec/mongo/server_discovery_and_monitoring_spec.rb
|
758
785
|
- spec/mongo/server_selection_rtt_spec.rb
|
759
786
|
- spec/mongo/server_selection_spec.rb
|
760
787
|
- spec/mongo/server_selector/nearest_spec.rb
|
@@ -843,14 +870,18 @@ test_files:
|
|
843
870
|
- spec/support/max_staleness/ReplicaSetNoPrimary/LastUpdateTime.yml
|
844
871
|
- spec/support/max_staleness/ReplicaSetNoPrimary/Nearest.yml
|
845
872
|
- spec/support/max_staleness/ReplicaSetNoPrimary/Nearest2.yml
|
873
|
+
- spec/support/max_staleness/ReplicaSetNoPrimary/NoKnownServers.yml
|
846
874
|
- spec/support/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred.yml
|
847
875
|
- spec/support/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred_tags.yml
|
848
876
|
- spec/support/max_staleness/ReplicaSetNoPrimary/Secondary.yml
|
849
877
|
- spec/support/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred.yml
|
850
878
|
- spec/support/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred_tags.yml
|
879
|
+
- spec/support/max_staleness/ReplicaSetNoPrimary/ZeroMaxStaleness.yml
|
851
880
|
- spec/support/max_staleness/ReplicaSetWithPrimary/DefaultNoMaxStaleness.yml
|
852
881
|
- spec/support/max_staleness/ReplicaSetWithPrimary/Incompatible.yml
|
853
882
|
- spec/support/max_staleness/ReplicaSetWithPrimary/LastUpdateTime.yml
|
883
|
+
- spec/support/max_staleness/ReplicaSetWithPrimary/LongHeartbeat.yml
|
884
|
+
- spec/support/max_staleness/ReplicaSetWithPrimary/LongHeartbeat2.yml
|
854
885
|
- spec/support/max_staleness/ReplicaSetWithPrimary/MaxStalenessTooSmall.yml
|
855
886
|
- spec/support/max_staleness/ReplicaSetWithPrimary/MaxStalenessWithModePrimary.yml
|
856
887
|
- spec/support/max_staleness/ReplicaSetWithPrimary/Nearest.yml
|
@@ -863,13 +894,12 @@ test_files:
|
|
863
894
|
- spec/support/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred.yml
|
864
895
|
- spec/support/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags.yml
|
865
896
|
- spec/support/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags2.yml
|
866
|
-
- spec/support/max_staleness/ReplicaSetWithPrimary/ShortHeartbeartShortMaxStaleness.yml
|
867
|
-
- spec/support/max_staleness/ReplicaSetWithPrimary/ShortHeartbeartShortMaxStaleness2.yml
|
868
897
|
- spec/support/max_staleness/ReplicaSetWithPrimary/ZeroMaxStaleness.yml
|
869
898
|
- spec/support/max_staleness/Sharded/Incompatible.yml
|
870
899
|
- spec/support/max_staleness/Sharded/SmallMaxStaleness.yml
|
871
900
|
- spec/support/max_staleness/Single/Incompatible.yml
|
872
901
|
- spec/support/max_staleness/Single/SmallMaxStaleness.yml
|
902
|
+
- spec/support/max_staleness/Unknown/SmallMaxStaleness.yml
|
873
903
|
- spec/support/sdam/rs/discover_arbiters.yml
|
874
904
|
- spec/support/sdam/rs/discover_passives.yml
|
875
905
|
- spec/support/sdam/rs/discover_primary.yml
|
@@ -923,6 +953,12 @@ test_files:
|
|
923
953
|
- spec/support/sdam/single/not_ok_response.yml
|
924
954
|
- spec/support/sdam/single/standalone_removed.yml
|
925
955
|
- spec/support/sdam/single/unavailable_seed.yml
|
956
|
+
- spec/support/sdam_monitoring/replica_set_with_no_primary.yml
|
957
|
+
- spec/support/sdam_monitoring/replica_set_with_primary.yml
|
958
|
+
- spec/support/sdam_monitoring/replica_set_with_removal.yml
|
959
|
+
- spec/support/sdam_monitoring/required_replica_set.yml
|
960
|
+
- spec/support/sdam_monitoring/standalone.yml
|
961
|
+
- spec/support/sdam_monitoring.rb
|
926
962
|
- spec/support/server_discovery_and_monitoring.rb
|
927
963
|
- spec/support/server_selection/rtt/first_value.yml
|
928
964
|
- spec/support/server_selection/rtt/first_value_zero.yml
|
metadata.gz.sig
CHANGED
Binary file
|
@@ -1,115 +0,0 @@
|
|
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
|
-
|
14
|
-
module Mongo
|
15
|
-
# We monkey-patch the server here, so the monitors do not run and no
|
16
|
-
# real TCP connection is attempted. Thus we can control the server
|
17
|
-
# descriptions per-phase.
|
18
|
-
#
|
19
|
-
# @since 2.0.0
|
20
|
-
class Server
|
21
|
-
|
22
|
-
alias :original_initialize :initialize
|
23
|
-
def initialize(address, cluster, monitoring, event_listeners, options = {})
|
24
|
-
@address = address
|
25
|
-
@cluster = cluster
|
26
|
-
@monitoring = monitoring
|
27
|
-
@options = options.freeze
|
28
|
-
@monitor = Monitor.new(address, event_listeners, options)
|
29
|
-
end
|
30
|
-
|
31
|
-
alias :original_disconnect! :disconnect!
|
32
|
-
def disconnect!; true; end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
# Client is set as an instance variable inside the scope of the spec to
|
37
|
-
# retain its modifications across contexts/phases. Let is no good
|
38
|
-
# here as we have a clean slate for each context/phase.
|
39
|
-
@client = Mongo::Client.new(spec.uri_string)
|
40
|
-
end
|
41
|
-
|
42
|
-
after(:all) do
|
43
|
-
@client.close
|
44
|
-
|
45
|
-
# Return the server implementation to its original for the other
|
46
|
-
# tests in the suite.
|
47
|
-
module Mongo
|
48
|
-
class Server
|
49
|
-
alias :initialize :original_initialize
|
50
|
-
remove_method(:original_initialize)
|
51
|
-
|
52
|
-
alias :disconnect! :original_disconnect!
|
53
|
-
remove_method(:original_disconnect!)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
spec.phases.each_with_index do |phase, index|
|
59
|
-
|
60
|
-
context("Phase: #{index + 1}") do
|
61
|
-
|
62
|
-
phase.responses.each do |response|
|
63
|
-
before do
|
64
|
-
# For each response in the phase, we need to change that server's
|
65
|
-
# description.
|
66
|
-
server = find_server(@client, response.address)
|
67
|
-
server = Mongo::Server.new(
|
68
|
-
Mongo::Address.new(response.address),
|
69
|
-
@client.cluster,
|
70
|
-
@client.instance_variable_get(:@monitoring),
|
71
|
-
@client.cluster.send(:event_listeners),
|
72
|
-
@client.cluster.options
|
73
|
-
) unless server
|
74
|
-
monitor = server.instance_variable_get(:@monitor)
|
75
|
-
description = monitor.inspector.run(server.description, response.ismaster, 0.5)
|
76
|
-
monitor.instance_variable_set(:@description, description)
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
let(:cluster_addresses) do
|
81
|
-
@client.cluster.instance_variable_get(:@servers).
|
82
|
-
collect(&:address).collect(&:to_s).uniq.sort
|
83
|
-
end
|
84
|
-
|
85
|
-
let(:phase_addresses) do
|
86
|
-
phase.outcome.servers.keys.sort
|
87
|
-
end
|
88
|
-
|
89
|
-
it "sets the cluster topology to #{phase.outcome.topology_type}" do
|
90
|
-
expect(@client.cluster).to be_topology(phase.outcome.topology_type)
|
91
|
-
end
|
92
|
-
|
93
|
-
it "sets the cluster replica set name to #{phase.outcome.set_name.inspect}" do
|
94
|
-
expect(@client.cluster.replica_set_name).to eq(phase.outcome.set_name)
|
95
|
-
end
|
96
|
-
|
97
|
-
it "has the expected servers in the cluster" do
|
98
|
-
expect(cluster_addresses).to eq(phase_addresses)
|
99
|
-
end
|
100
|
-
|
101
|
-
phase.outcome.servers.each do |uri, server|
|
102
|
-
|
103
|
-
it "sets #{uri} to #{server['type']}" do
|
104
|
-
expect(find_server(@client, uri)).to be_server_type(server['type'])
|
105
|
-
end
|
106
|
-
|
107
|
-
it "sets #{uri} replica set name to #{server['setName'].inspect}" do
|
108
|
-
expect(find_server(@client, uri).replica_set_name).to eq(server['setName'])
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|