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
|
@@ -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
|