mongo 2.2.0.rc0 → 2.2.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/address.rb +14 -0
- data/lib/mongo/cluster.rb +42 -0
- data/lib/mongo/dbref.rb +2 -2
- data/lib/mongo/grid/file/chunk.rb +1 -1
- data/lib/mongo/protocol/bit_vector.rb +8 -6
- data/lib/mongo/protocol/serializers.rb +34 -24
- data/lib/mongo/server.rb +15 -1
- data/lib/mongo/server/connection_pool.rb +0 -15
- data/lib/mongo/server/description.rb +2 -1
- data/lib/mongo/version.rb +1 -1
- data/mongo.gemspec +1 -1
- data/spec/mongo/collection_spec.rb +1 -1
- data/spec/mongo/database_spec.rb +1 -1
- data/spec/mongo/server/connection_pool_spec.rb +17 -13
- data/spec/mongo/server/connection_spec.rb +61 -13
- data/spec/mongo/server_spec.rb +15 -19
- data/spec/spec_helper.rb +9 -0
- data/spec/support/sdam/rs/rsother_discovered.yml +24 -3
- data/spec/support/sdam/rs/stepdown_change_set_name.yml +59 -0
- metadata +16 -15
- metadata.gz.sig +0 -0
- data/lib/csasl/csasl.bundle +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0b03a2e7ce5246f9d38690f731f53d29a5469d30
|
4
|
+
data.tar.gz: aaca95e6f570d466155c87d4c549a4f3c5bc0341
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f6fa180a5c94bcb5d7a809d170c8ec12ec28d0d6035575ef0cc677b9f4c68ec81c26411948f071945b2b2d829b192e0312f29416d2c3a589830c5ee40f90b133
|
7
|
+
data.tar.gz: fce85899375de257592434225cd1db4e3d3971e8b85b6ec111ef30c967e0fa0e817569b843dc0f3c342d7e58749c259a8111cc2b9d741ef321dc335a1ad08bab
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/lib/mongo/address.rb
CHANGED
@@ -63,6 +63,20 @@ module Mongo
|
|
63
63
|
host == other.host && port == other.port
|
64
64
|
end
|
65
65
|
|
66
|
+
# Check equality for hashing.
|
67
|
+
#
|
68
|
+
# @example Check hashing equality.
|
69
|
+
# address.eql?(other)
|
70
|
+
#
|
71
|
+
# @param [ Object ] other The other object.
|
72
|
+
#
|
73
|
+
# @return [ true, false ] If the objects are equal.
|
74
|
+
#
|
75
|
+
# @since 2.2.0
|
76
|
+
def eql?(other)
|
77
|
+
self == other
|
78
|
+
end
|
79
|
+
|
66
80
|
# Calculate the hash value for the address.
|
67
81
|
#
|
68
82
|
# @example Calculate the hash value.
|
data/lib/mongo/cluster.rb
CHANGED
@@ -106,12 +106,34 @@ module Mongo
|
|
106
106
|
@options = options.freeze
|
107
107
|
@topology = Topology.initial(seeds, options)
|
108
108
|
@update_lock = Mutex.new
|
109
|
+
@pool_lock = Mutex.new
|
109
110
|
|
110
111
|
subscribe_to(Event::STANDALONE_DISCOVERED, Event::StandaloneDiscovered.new(self))
|
111
112
|
subscribe_to(Event::DESCRIPTION_CHANGED, Event::DescriptionChanged.new(self))
|
112
113
|
subscribe_to(Event::PRIMARY_ELECTED, Event::PrimaryElected.new(self))
|
113
114
|
|
114
115
|
seeds.each{ |seed| add(seed) }
|
116
|
+
ObjectSpace.define_finalizer(self, self.class.finalize(pools))
|
117
|
+
end
|
118
|
+
|
119
|
+
# Finalize the cluster for garbage collection. Disconnects all the scoped
|
120
|
+
# connection pools.
|
121
|
+
#
|
122
|
+
# @example Finalize the cluster.
|
123
|
+
# Cluster.finalize(pools)
|
124
|
+
#
|
125
|
+
# @param [ Hash<Address, Server::ConnectionPool> ] pools The connection
|
126
|
+
# pools.
|
127
|
+
#
|
128
|
+
# @return [ Proc ] The Finalizer.
|
129
|
+
#
|
130
|
+
# @since 2.2.0
|
131
|
+
def self.finalize(pools)
|
132
|
+
proc do
|
133
|
+
pools.values.each do |pool|
|
134
|
+
pool.disconnect!
|
135
|
+
end
|
136
|
+
end
|
115
137
|
end
|
116
138
|
|
117
139
|
# Get the nicer formatted string for use in inspection.
|
@@ -168,6 +190,22 @@ module Mongo
|
|
168
190
|
options[:max_read_retries] || MAX_READ_RETRIES
|
169
191
|
end
|
170
192
|
|
193
|
+
# Get the scoped connection pool for the server.
|
194
|
+
#
|
195
|
+
# @example Get the connection pool.
|
196
|
+
# cluster.pool(server)
|
197
|
+
#
|
198
|
+
# @param [ Server ] server The server.
|
199
|
+
#
|
200
|
+
# @return [ Server::ConnectionPool ] The connection pool.
|
201
|
+
#
|
202
|
+
# @since 2.2.0
|
203
|
+
def pool(server)
|
204
|
+
@pool_lock.synchronize do
|
205
|
+
pools[server.address] ||= Server::ConnectionPool.get(server)
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
171
209
|
# Get the interval, in seconds, in which a mongos read operation is
|
172
210
|
# retried.
|
173
211
|
#
|
@@ -339,6 +377,10 @@ module Mongo
|
|
339
377
|
!@topology.single? || direct_connection?(address)
|
340
378
|
end
|
341
379
|
|
380
|
+
def pools
|
381
|
+
@pools ||= {}
|
382
|
+
end
|
383
|
+
|
342
384
|
def servers_list
|
343
385
|
@update_lock.synchronize do
|
344
386
|
@servers.reduce([]) do |servers, server|
|
data/lib/mongo/dbref.rb
CHANGED
@@ -79,7 +79,7 @@ module Mongo
|
|
79
79
|
# @example Convert the DBRef to raw BSON.
|
80
80
|
# dbref.to_bson
|
81
81
|
#
|
82
|
-
# @param [ String ]
|
82
|
+
# @param [ String ] buffer The encoded BSON buffer to append to.
|
83
83
|
#
|
84
84
|
# @return [ String ] The raw BSON.
|
85
85
|
#
|
@@ -92,7 +92,7 @@ module Mongo
|
|
92
92
|
|
93
93
|
# Deserialize the hash from BSON, converting to a DBRef if appropriate.
|
94
94
|
#
|
95
|
-
# @param [
|
95
|
+
# @param [ String ] buffer The bson representing a hash.
|
96
96
|
#
|
97
97
|
# @return [ Hash, DBRef ] The decoded hash or DBRef.
|
98
98
|
#
|
@@ -128,7 +128,7 @@ module Mongo
|
|
128
128
|
# @example Convert the chunk to BSON.
|
129
129
|
# chunk.to_bson
|
130
130
|
#
|
131
|
-
# @param [ String ]
|
131
|
+
# @param [ String ] buffer The encoded data buffer to append to.
|
132
132
|
#
|
133
133
|
# @return [ String ] The raw BSON data.
|
134
134
|
#
|
@@ -24,7 +24,7 @@ module Mongo
|
|
24
24
|
|
25
25
|
# Initializes a BitVector with a layout
|
26
26
|
#
|
27
|
-
# @param layout [Array<Symbol>] the array of fields in the bit vector
|
27
|
+
# @param layout [ Array<Symbol> ] the array of fields in the bit vector
|
28
28
|
def initialize(layout)
|
29
29
|
@masks = {}
|
30
30
|
layout.each_with_index do |field, index|
|
@@ -34,9 +34,10 @@ module Mongo
|
|
34
34
|
|
35
35
|
# Serializes vector by encoding each symbol according to its mask
|
36
36
|
#
|
37
|
-
# @param buffer [
|
38
|
-
# @param value [Array<Symbol>] Array of flags to encode
|
39
|
-
#
|
37
|
+
# @param buffer [ String ] Buffer to receive the serialized vector
|
38
|
+
# @param value [ Array<Symbol> ] Array of flags to encode
|
39
|
+
#
|
40
|
+
# @return [ String ] Buffer that received the serialized vector
|
40
41
|
def serialize(buffer, value)
|
41
42
|
bits = 0
|
42
43
|
value.each { |flag| bits |= @masks[flag] }
|
@@ -45,8 +46,9 @@ module Mongo
|
|
45
46
|
|
46
47
|
# Deserializes vector by decoding the symbol according to its mask
|
47
48
|
#
|
48
|
-
# @param
|
49
|
-
#
|
49
|
+
# @param [ String ] buffer Buffer containing the vector to be deserialized.
|
50
|
+
#
|
51
|
+
# @return [ Array<Symbol> ] Flags contained in the vector
|
50
52
|
def deserialize(buffer)
|
51
53
|
vector = buffer.get_int32
|
52
54
|
flags = []
|
@@ -46,17 +46,19 @@ module Mongo
|
|
46
46
|
|
47
47
|
# Serializes the header value into the buffer
|
48
48
|
#
|
49
|
-
# @param buffer [String] Buffer to receive the serialized value.
|
50
|
-
# @param value [String] Header value to be serialized.
|
51
|
-
#
|
49
|
+
# @param buffer [ String ] Buffer to receive the serialized value.
|
50
|
+
# @param value [ String ] Header value to be serialized.
|
51
|
+
#
|
52
|
+
# @return [ String ] Buffer with serialized value.
|
52
53
|
def self.serialize(buffer, value)
|
53
54
|
buffer.put_bytes(value.pack(HEADER_PACK))
|
54
55
|
end
|
55
56
|
|
56
57
|
# Deserializes the header value from the IO stream
|
57
58
|
#
|
58
|
-
# @param
|
59
|
-
#
|
59
|
+
# @param [ String ] buffer Buffer containing the message header.
|
60
|
+
#
|
61
|
+
# @return [ Array<Fixnum> ] Array consisting of the deserialized
|
60
62
|
# length, request id, response id, and op code.
|
61
63
|
def self.deserialize(buffer)
|
62
64
|
buffer.get_bytes(16).unpack(HEADER_PACK)
|
@@ -70,9 +72,10 @@ module Mongo
|
|
70
72
|
|
71
73
|
# Serializes a C style string into the buffer
|
72
74
|
#
|
73
|
-
# @param buffer [String] Buffer to receive the serialized CString.
|
74
|
-
# @param value [String] The string to be serialized.
|
75
|
-
#
|
75
|
+
# @param buffer [ String ] Buffer to receive the serialized CString.
|
76
|
+
# @param value [ String ] The string to be serialized.
|
77
|
+
#
|
78
|
+
# @return [ String ] Buffer with serialized value.
|
76
79
|
def self.serialize(buffer, value)
|
77
80
|
buffer.put_cstring(value)
|
78
81
|
end
|
@@ -85,9 +88,10 @@ module Mongo
|
|
85
88
|
|
86
89
|
# Serializes a 32-bit Zero into the buffer
|
87
90
|
#
|
88
|
-
# @param buffer [String] Buffer to receive the serialized Zero.
|
89
|
-
# @param value [Fixnum] Ignored value.
|
90
|
-
#
|
91
|
+
# @param buffer [ String ] Buffer to receive the serialized Zero.
|
92
|
+
# @param value [ Fixnum ] Ignored value.
|
93
|
+
#
|
94
|
+
# @return [ String ] Buffer with serialized value.
|
91
95
|
def self.serialize(buffer, value)
|
92
96
|
buffer.put_int32(ZERO)
|
93
97
|
end
|
@@ -100,8 +104,9 @@ module Mongo
|
|
100
104
|
|
101
105
|
# Serializes a fixnum to a 4-byte 32-bit integer
|
102
106
|
#
|
103
|
-
# @param buffer [String] Buffer to receive the serialized Int32.
|
104
|
-
# @param value [Fixnum] 32-bit integer to be serialized.
|
107
|
+
# @param buffer [ String ] Buffer to receive the serialized Int32.
|
108
|
+
# @param value [ Fixnum ] 32-bit integer to be serialized.
|
109
|
+
#
|
105
110
|
# @return [String] Buffer with serialized value.
|
106
111
|
def self.serialize(buffer, value)
|
107
112
|
buffer.put_int32(value)
|
@@ -109,8 +114,9 @@ module Mongo
|
|
109
114
|
|
110
115
|
# Deserializes a 32-bit Fixnum from the IO stream
|
111
116
|
#
|
112
|
-
# @param
|
113
|
-
#
|
117
|
+
# @param [ String ] buffer Buffer containing the 32-bit integer
|
118
|
+
#
|
119
|
+
# @return [ Fixnum ] Deserialized Int32
|
114
120
|
def self.deserialize(buffer)
|
115
121
|
buffer.get_int32
|
116
122
|
end
|
@@ -123,16 +129,18 @@ module Mongo
|
|
123
129
|
|
124
130
|
# Serializes a fixnum to an 8-byte 64-bit integer
|
125
131
|
#
|
126
|
-
# @param buffer [String] Buffer to receive the serialized Int64.
|
127
|
-
# @param value [Fixnum] 64-bit integer to be serialized.
|
128
|
-
#
|
132
|
+
# @param buffer [ String ] Buffer to receive the serialized Int64.
|
133
|
+
# @param value [ Fixnum ] 64-bit integer to be serialized.
|
134
|
+
#
|
135
|
+
# @return [ String ] Buffer with serialized value.
|
129
136
|
def self.serialize(buffer, value)
|
130
137
|
buffer.put_int64(value)
|
131
138
|
end
|
132
139
|
|
133
140
|
# Deserializes a 64-bit Fixnum from the IO stream
|
134
141
|
#
|
135
|
-
# @param
|
142
|
+
# @param [ String ] buffer Buffer containing the 64-bit integer.
|
143
|
+
#
|
136
144
|
# @return [Fixnum] Deserialized Int64.
|
137
145
|
def self.deserialize(buffer)
|
138
146
|
buffer.get_int64
|
@@ -146,9 +154,10 @@ module Mongo
|
|
146
154
|
|
147
155
|
# Serializes a document into the buffer
|
148
156
|
#
|
149
|
-
# @param buffer [String] Buffer to receive the BSON encoded document.
|
150
|
-
# @param value [Hash] Document to serialize as BSON.
|
151
|
-
#
|
157
|
+
# @param buffer [ String ] Buffer to receive the BSON encoded document.
|
158
|
+
# @param value [ Hash ] Document to serialize as BSON.
|
159
|
+
#
|
160
|
+
# @return [ String ] Buffer with serialized value.
|
152
161
|
def self.serialize(buffer, value, max_bson_size = nil)
|
153
162
|
start_size = buffer.length
|
154
163
|
value.to_bson(buffer)
|
@@ -159,8 +168,9 @@ module Mongo
|
|
159
168
|
|
160
169
|
# Deserializes a document from the IO stream
|
161
170
|
#
|
162
|
-
# @param
|
163
|
-
#
|
171
|
+
# @param [ String ] buffer Buffer containing the BSON encoded document.
|
172
|
+
#
|
173
|
+
# @return [ Hash ] The decoded BSON document.
|
164
174
|
def self.deserialize(buffer)
|
165
175
|
BSON::Document.from_bson(buffer)
|
166
176
|
end
|
data/lib/mongo/server.rb
CHANGED
@@ -120,6 +120,19 @@ module Mongo
|
|
120
120
|
monitor.stop! and true
|
121
121
|
end
|
122
122
|
|
123
|
+
# When the server is flagged for garbage collection, stop the monitor
|
124
|
+
# thread.
|
125
|
+
#
|
126
|
+
# @example Finalize the object.
|
127
|
+
# Server.finalize(monitor)
|
128
|
+
#
|
129
|
+
# @param [ Server::Monitor ] monitor The server monitor.
|
130
|
+
#
|
131
|
+
# @since 2.2.0
|
132
|
+
def self.finalize(monitor)
|
133
|
+
proc { monitor.stop! }
|
134
|
+
end
|
135
|
+
|
123
136
|
# Instantiate a new server object. Will start the background refresh and
|
124
137
|
# subscribe to the appropriate events.
|
125
138
|
#
|
@@ -145,6 +158,7 @@ module Mongo
|
|
145
158
|
@monitor = Monitor.new(address, event_listeners, options)
|
146
159
|
monitor.scan!
|
147
160
|
monitor.run!
|
161
|
+
ObjectSpace.define_finalizer(self, self.class.finalize(monitor))
|
148
162
|
end
|
149
163
|
|
150
164
|
# Get a pretty printed server inspection.
|
@@ -168,7 +182,7 @@ module Mongo
|
|
168
182
|
#
|
169
183
|
# @since 2.0.0
|
170
184
|
def pool
|
171
|
-
@pool ||=
|
185
|
+
@pool ||= cluster.pool(self)
|
172
186
|
end
|
173
187
|
|
174
188
|
# Determine if the provided tags are a subset of the server's tags.
|
@@ -23,9 +23,6 @@ module Mongo
|
|
23
23
|
class ConnectionPool
|
24
24
|
include Loggable
|
25
25
|
|
26
|
-
# Used for synchronization of pools access.
|
27
|
-
MUTEX = Mutex.new
|
28
|
-
|
29
26
|
# @return [ Hash ] options The pool options.
|
30
27
|
attr_reader :options
|
31
28
|
|
@@ -131,22 +128,10 @@ module Mongo
|
|
131
128
|
#
|
132
129
|
# @since 2.0.0
|
133
130
|
def get(server)
|
134
|
-
MUTEX.synchronize do
|
135
|
-
pools[server.address] ||= create_pool(server)
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
private
|
140
|
-
|
141
|
-
def create_pool(server)
|
142
131
|
ConnectionPool.new(server.options) do
|
143
132
|
Connection.new(server, server.options)
|
144
133
|
end
|
145
134
|
end
|
146
|
-
|
147
|
-
def pools
|
148
|
-
@pools ||= {}
|
149
|
-
end
|
150
135
|
end
|
151
136
|
end
|
152
137
|
end
|
@@ -364,7 +364,8 @@ module Mongo
|
|
364
364
|
#
|
365
365
|
# @since 2.0.0
|
366
366
|
def other?
|
367
|
-
!primary? && !secondary? && !passive? && !arbiter?
|
367
|
+
(!primary? && !secondary? && !passive? && !arbiter?) ||
|
368
|
+
(hidden? && !replica_set_name.nil?)
|
368
369
|
end
|
369
370
|
|
370
371
|
# Will return true if the server is passive.
|
data/lib/mongo/version.rb
CHANGED
data/mongo.gemspec
CHANGED
data/spec/mongo/database_spec.rb
CHANGED
@@ -180,7 +180,7 @@ describe Mongo::Database do
|
|
180
180
|
end
|
181
181
|
end
|
182
182
|
|
183
|
-
context 'when the user is not authorized',
|
183
|
+
context 'when the user is not authorized', if: auth_enabled? do
|
184
184
|
|
185
185
|
let(:database) do
|
186
186
|
described_class.new(unauthorized_client, TEST_DB)
|
@@ -18,10 +18,14 @@ describe Mongo::Server::ConnectionPool do
|
|
18
18
|
Mongo::Event::Listeners.new
|
19
19
|
end
|
20
20
|
|
21
|
+
let(:cluster) do
|
22
|
+
double('cluster')
|
23
|
+
end
|
24
|
+
|
21
25
|
describe '#checkin' do
|
22
26
|
|
23
27
|
let(:server) do
|
24
|
-
Mongo::Server.new(address,
|
28
|
+
Mongo::Server.new(address, cluster, monitoring, listeners, options)
|
25
29
|
end
|
26
30
|
|
27
31
|
let!(:pool) do
|
@@ -29,6 +33,7 @@ describe Mongo::Server::ConnectionPool do
|
|
29
33
|
end
|
30
34
|
|
31
35
|
after do
|
36
|
+
expect(cluster).to receive(:pool).with(server).and_return(pool)
|
32
37
|
server.disconnect!
|
33
38
|
end
|
34
39
|
|
@@ -55,7 +60,7 @@ describe Mongo::Server::ConnectionPool do
|
|
55
60
|
describe '#checkout' do
|
56
61
|
|
57
62
|
let(:server) do
|
58
|
-
Mongo::Server.new(address,
|
63
|
+
Mongo::Server.new(address, cluster, monitoring, listeners, options)
|
59
64
|
end
|
60
65
|
|
61
66
|
let!(:pool) do
|
@@ -103,27 +108,24 @@ describe Mongo::Server::ConnectionPool do
|
|
103
108
|
describe '#disconnect!' do
|
104
109
|
|
105
110
|
let(:server) do
|
106
|
-
Mongo::Server.new(address,
|
111
|
+
Mongo::Server.new(address, cluster, monitoring, listeners, options)
|
107
112
|
end
|
108
113
|
|
109
114
|
let!(:pool) do
|
110
115
|
described_class.get(server)
|
111
116
|
end
|
112
117
|
|
113
|
-
after do
|
114
|
-
server.disconnect!
|
115
|
-
end
|
116
|
-
|
117
118
|
it 'disconnects the queue' do
|
118
|
-
expect(
|
119
|
-
pool.disconnect!
|
119
|
+
expect(cluster).to receive(:pool).with(server).and_return(pool)
|
120
|
+
expect(pool.send(:queue)).to receive(:disconnect!).once.and_call_original
|
121
|
+
server.disconnect!
|
120
122
|
end
|
121
123
|
end
|
122
124
|
|
123
125
|
describe '.get' do
|
124
126
|
|
125
127
|
let(:server) do
|
126
|
-
Mongo::Server.new(address,
|
128
|
+
Mongo::Server.new(address, cluster, monitoring, listeners, options)
|
127
129
|
end
|
128
130
|
|
129
131
|
let!(:pool) do
|
@@ -131,18 +133,19 @@ describe Mongo::Server::ConnectionPool do
|
|
131
133
|
end
|
132
134
|
|
133
135
|
after do
|
136
|
+
expect(cluster).to receive(:pool).with(server).and_return(pool)
|
134
137
|
server.disconnect!
|
135
138
|
end
|
136
139
|
|
137
140
|
it 'returns the pool for the server' do
|
138
|
-
expect(pool).
|
141
|
+
expect(pool).to_not be_nil
|
139
142
|
end
|
140
143
|
end
|
141
144
|
|
142
145
|
describe '#inspect' do
|
143
146
|
|
144
147
|
let(:server) do
|
145
|
-
Mongo::Server.new(address,
|
148
|
+
Mongo::Server.new(address, cluster, monitoring, listeners, options)
|
146
149
|
end
|
147
150
|
|
148
151
|
let!(:pool) do
|
@@ -150,6 +153,7 @@ describe Mongo::Server::ConnectionPool do
|
|
150
153
|
end
|
151
154
|
|
152
155
|
after do
|
156
|
+
expect(cluster).to receive(:pool).with(server).and_return(pool)
|
153
157
|
server.disconnect!
|
154
158
|
end
|
155
159
|
|
@@ -165,7 +169,7 @@ describe Mongo::Server::ConnectionPool do
|
|
165
169
|
describe '#with_connection' do
|
166
170
|
|
167
171
|
let(:server) do
|
168
|
-
Mongo::Server.new(address,
|
172
|
+
Mongo::Server.new(address, cluster, monitoring, listeners, options)
|
169
173
|
end
|
170
174
|
|
171
175
|
let!(:pool) do
|
@@ -14,27 +14,26 @@ describe Mongo::Server::Connection do
|
|
14
14
|
Mongo::Event::Listeners.new
|
15
15
|
end
|
16
16
|
|
17
|
+
let(:cluster) do
|
18
|
+
double('cluster')
|
19
|
+
end
|
20
|
+
|
17
21
|
let(:server) do
|
18
|
-
Mongo::Server.new(address,
|
22
|
+
Mongo::Server.new(address, cluster, monitoring, listeners, TEST_OPTIONS)
|
23
|
+
end
|
24
|
+
|
25
|
+
let(:pool) do
|
26
|
+
double('pool')
|
19
27
|
end
|
20
28
|
|
21
29
|
after do
|
30
|
+
expect(cluster).to receive(:pool).with(server).and_return(pool)
|
31
|
+
expect(pool).to receive(:disconnect!).and_return(true)
|
22
32
|
server.disconnect!
|
23
33
|
end
|
24
34
|
|
25
35
|
describe '#connectable?' do
|
26
36
|
|
27
|
-
# context 'when the connection is connectable' do
|
28
|
-
|
29
|
-
# let(:connection) do
|
30
|
-
# described_class.new(server)
|
31
|
-
# end
|
32
|
-
|
33
|
-
# it 'returns true' do
|
34
|
-
# expect(connection).to be_connectable
|
35
|
-
# end
|
36
|
-
# end
|
37
|
-
|
38
37
|
context 'when the connection is not connectable' do
|
39
38
|
|
40
39
|
let(:bad_address) do
|
@@ -42,7 +41,7 @@ describe Mongo::Server::Connection do
|
|
42
41
|
end
|
43
42
|
|
44
43
|
let(:bad_server) do
|
45
|
-
Mongo::Server.new(bad_address,
|
44
|
+
Mongo::Server.new(bad_address, cluster, monitoring, listeners, TEST_OPTIONS)
|
46
45
|
end
|
47
46
|
|
48
47
|
let(:connection) do
|
@@ -240,6 +239,55 @@ describe Mongo::Server::Connection do
|
|
240
239
|
end
|
241
240
|
end
|
242
241
|
|
242
|
+
context 'when the message exceeds the max size' do
|
243
|
+
|
244
|
+
context 'when the message is an insert' do
|
245
|
+
|
246
|
+
before do
|
247
|
+
allow(connection).to receive(:max_message_size).and_return(200)
|
248
|
+
end
|
249
|
+
|
250
|
+
let(:documents) do
|
251
|
+
[{ 'name' => 'testing' } ] * 10
|
252
|
+
end
|
253
|
+
|
254
|
+
let(:reply) do
|
255
|
+
connection.dispatch([ insert ])
|
256
|
+
end
|
257
|
+
|
258
|
+
it 'checks the size against the max message size' do
|
259
|
+
expect {
|
260
|
+
reply
|
261
|
+
}.to raise_exception(Mongo::Error::MaxMessageSize)
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
265
|
+
context 'when the message is a command' do
|
266
|
+
|
267
|
+
before do
|
268
|
+
allow(connection).to receive(:max_bson_object_size).and_return(100)
|
269
|
+
end
|
270
|
+
|
271
|
+
let(:selector) do
|
272
|
+
{ :getlasterror => '1' }
|
273
|
+
end
|
274
|
+
|
275
|
+
let(:command) do
|
276
|
+
Mongo::Protocol::Query.new(TEST_DB, '$cmd', selector, :limit => -1)
|
277
|
+
end
|
278
|
+
|
279
|
+
let(:reply) do
|
280
|
+
connection.dispatch([ command ])
|
281
|
+
end
|
282
|
+
|
283
|
+
it 'checks the size against the max bson size' do
|
284
|
+
expect {
|
285
|
+
reply
|
286
|
+
}.to raise_exception(Mongo::Error::MaxBSONSize)
|
287
|
+
end
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
243
291
|
context 'when a network or socket error occurs' do
|
244
292
|
|
245
293
|
let(:socket) do
|
data/spec/mongo/server_spec.rb
CHANGED
@@ -18,6 +18,10 @@ describe Mongo::Server do
|
|
18
18
|
Mongo::Address.new('127.0.0.1:27017')
|
19
19
|
end
|
20
20
|
|
21
|
+
let(:pool) do
|
22
|
+
Mongo::Server::ConnectionPool.get(server)
|
23
|
+
end
|
24
|
+
|
21
25
|
describe '#==' do
|
22
26
|
|
23
27
|
let(:server) do
|
@@ -25,6 +29,7 @@ describe Mongo::Server do
|
|
25
29
|
end
|
26
30
|
|
27
31
|
after do
|
32
|
+
expect(cluster).to receive(:pool).with(server).and_return(pool)
|
28
33
|
server.disconnect!
|
29
34
|
end
|
30
35
|
|
@@ -81,6 +86,10 @@ describe Mongo::Server do
|
|
81
86
|
server.disconnect!
|
82
87
|
end
|
83
88
|
|
89
|
+
before do
|
90
|
+
expect(cluster).to receive(:pool).with(server).and_return(pool)
|
91
|
+
end
|
92
|
+
|
84
93
|
it 'returns true' do
|
85
94
|
expect(server).to be_connectable
|
86
95
|
end
|
@@ -97,6 +106,7 @@ describe Mongo::Server do
|
|
97
106
|
end
|
98
107
|
|
99
108
|
before do
|
109
|
+
expect(cluster).to receive(:pool).with(server).and_return(pool)
|
100
110
|
server.disconnect!
|
101
111
|
end
|
102
112
|
|
@@ -117,6 +127,7 @@ describe Mongo::Server do
|
|
117
127
|
end
|
118
128
|
|
119
129
|
after do
|
130
|
+
expect(cluster).to receive(:pool).with(server).and_return(pool)
|
120
131
|
server.disconnect!
|
121
132
|
end
|
122
133
|
|
@@ -133,6 +144,7 @@ describe Mongo::Server do
|
|
133
144
|
|
134
145
|
it 'stops the monitor instance' do
|
135
146
|
expect(server.instance_variable_get(:@monitor)).to receive(:stop!).and_return(true)
|
147
|
+
expect(cluster).to receive(:pool).with(server).and_return(pool)
|
136
148
|
server.disconnect!
|
137
149
|
end
|
138
150
|
end
|
@@ -150,6 +162,7 @@ describe Mongo::Server do
|
|
150
162
|
end
|
151
163
|
|
152
164
|
after do
|
165
|
+
expect(cluster).to receive(:pool).with(server).and_return(pool)
|
153
166
|
server.disconnect!
|
154
167
|
end
|
155
168
|
|
@@ -166,25 +179,6 @@ describe Mongo::Server do
|
|
166
179
|
end
|
167
180
|
end
|
168
181
|
|
169
|
-
describe '#pool' do
|
170
|
-
|
171
|
-
let(:server) do
|
172
|
-
described_class.new(address, cluster, monitoring, listeners, TEST_OPTIONS)
|
173
|
-
end
|
174
|
-
|
175
|
-
let(:pool) do
|
176
|
-
server.pool
|
177
|
-
end
|
178
|
-
|
179
|
-
after do
|
180
|
-
server.disconnect!
|
181
|
-
end
|
182
|
-
|
183
|
-
it 'returns the connection pool for the server' do
|
184
|
-
expect(pool).to be_a(Mongo::Server::ConnectionPool)
|
185
|
-
end
|
186
|
-
end
|
187
|
-
|
188
182
|
describe '#scan!' do
|
189
183
|
|
190
184
|
let(:server) do
|
@@ -192,6 +186,7 @@ describe Mongo::Server do
|
|
192
186
|
end
|
193
187
|
|
194
188
|
after do
|
189
|
+
expect(cluster).to receive(:pool).with(server).and_return(pool)
|
195
190
|
server.disconnect!
|
196
191
|
end
|
197
192
|
|
@@ -211,6 +206,7 @@ describe Mongo::Server do
|
|
211
206
|
end
|
212
207
|
|
213
208
|
after do
|
209
|
+
expect(cluster).to receive(:pool).with(server).and_return(pool)
|
214
210
|
server.disconnect!
|
215
211
|
end
|
216
212
|
|
data/spec/spec_helper.rb
CHANGED
@@ -171,6 +171,15 @@ def failing_delete_doc
|
|
171
171
|
{ que: { field: 'test' } }
|
172
172
|
end
|
173
173
|
|
174
|
+
# Try running a command on the admin database to see if the mongod was started with auth.
|
175
|
+
#
|
176
|
+
# @since 2.2.0
|
177
|
+
def auth_enabled?
|
178
|
+
$mongo_client ||= initialize_scanned_client!
|
179
|
+
begin; $mongo_client.use(:admin).command(getCmdLineOpts: 1); rescue; return true; end
|
180
|
+
false
|
181
|
+
end
|
182
|
+
|
174
183
|
# Initializes a basic scanned client to do an ismaster check.
|
175
184
|
#
|
176
185
|
# @since 2.0.0
|
@@ -7,12 +7,21 @@ phases: [
|
|
7
7
|
{
|
8
8
|
responses: [
|
9
9
|
|
10
|
+
["a:27017", {
|
11
|
+
|
12
|
+
ok: 1,
|
13
|
+
ismaster: false,
|
14
|
+
secondary: true,
|
15
|
+
hidden: true,
|
16
|
+
hosts: ["c:27017", "d:27017"],
|
17
|
+
setName: "rs"
|
18
|
+
}],
|
10
19
|
["b:27017", {
|
11
20
|
|
12
21
|
ok: 1,
|
13
22
|
ismaster: false,
|
14
23
|
secondary: false,
|
15
|
-
hosts: ["
|
24
|
+
hosts: ["c:27017", "d:27017"],
|
16
25
|
setName: "rs"
|
17
26
|
}]
|
18
27
|
],
|
@@ -23,14 +32,26 @@ phases: [
|
|
23
32
|
|
24
33
|
"a:27017": {
|
25
34
|
|
26
|
-
type: "
|
27
|
-
setName:
|
35
|
+
type: "RSOther",
|
36
|
+
setName: "rs"
|
28
37
|
},
|
29
38
|
|
30
39
|
"b:27017": {
|
31
40
|
|
32
41
|
type: "RSOther",
|
33
42
|
setName: "rs"
|
43
|
+
},
|
44
|
+
|
45
|
+
"c:27017": {
|
46
|
+
|
47
|
+
type: "Unknown",
|
48
|
+
setName:
|
49
|
+
},
|
50
|
+
|
51
|
+
"d:27017": {
|
52
|
+
|
53
|
+
type: "Unknown",
|
54
|
+
setName:
|
34
55
|
}
|
35
56
|
},
|
36
57
|
|
@@ -0,0 +1,59 @@
|
|
1
|
+
description: "Primary becomes a secondary with wrong setName"
|
2
|
+
|
3
|
+
uri: "mongodb://a/?replicaSet=rs"
|
4
|
+
|
5
|
+
phases: [
|
6
|
+
|
7
|
+
# Primary is discovered normally.
|
8
|
+
{
|
9
|
+
responses: [
|
10
|
+
|
11
|
+
["a:27017", {
|
12
|
+
|
13
|
+
ok: 1,
|
14
|
+
ismaster: true,
|
15
|
+
hosts: ["a:27017"],
|
16
|
+
setName: "rs"
|
17
|
+
}]
|
18
|
+
],
|
19
|
+
|
20
|
+
outcome: {
|
21
|
+
|
22
|
+
servers: {
|
23
|
+
|
24
|
+
"a:27017": {
|
25
|
+
|
26
|
+
type: "RSPrimary",
|
27
|
+
setName: "rs"
|
28
|
+
}
|
29
|
+
},
|
30
|
+
|
31
|
+
topologyType: "ReplicaSetWithPrimary",
|
32
|
+
setName: "rs"
|
33
|
+
}
|
34
|
+
},
|
35
|
+
|
36
|
+
# Primary changes its setName and becomes secondary.
|
37
|
+
# Remove it and change the topologyType.
|
38
|
+
{
|
39
|
+
responses: [
|
40
|
+
|
41
|
+
["a:27017", {
|
42
|
+
|
43
|
+
ok: 1,
|
44
|
+
ismaster: false,
|
45
|
+
secondary: true,
|
46
|
+
hosts: ["a:27017"],
|
47
|
+
setName: "wrong"
|
48
|
+
}]
|
49
|
+
],
|
50
|
+
|
51
|
+
outcome: {
|
52
|
+
|
53
|
+
servers: {},
|
54
|
+
|
55
|
+
topologyType: "ReplicaSetNoPrimary",
|
56
|
+
setName: "rs"
|
57
|
+
}
|
58
|
+
}
|
59
|
+
]
|
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.2.0
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tyler Brock
|
@@ -14,7 +14,7 @@ cert_chain:
|
|
14
14
|
-----BEGIN CERTIFICATE-----
|
15
15
|
MIIDfDCCAmSgAwIBAgIBATANBgkqhkiG9w0BAQUFADBCMRQwEgYDVQQDDAtkcml2
|
16
16
|
ZXItcnVieTEVMBMGCgmSJomT8ixkARkWBTEwZ2VuMRMwEQYKCZImiZPyLGQBGRYD
|
17
|
-
|
17
|
+
Y29tMB4XDTE1MTIwNzE1MTcyNloXDTE2MTIwNjE1MTcyNlowQjEUMBIGA1UEAwwL
|
18
18
|
ZHJpdmVyLXJ1YnkxFTATBgoJkiaJk/IsZAEZFgUxMGdlbjETMBEGCgmSJomT8ixk
|
19
19
|
ARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFdSAa8fRm1
|
20
20
|
bAM9za6Z0fAH4g02bqM1NGnw8zJQrE/PFrFfY6IFCT2AsLfOwr1maVm7iU1+kdVI
|
@@ -25,14 +25,14 @@ cert_chain:
|
|
25
25
|
u8KAcPHm5KkCAwEAAaN9MHswCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0O
|
26
26
|
BBYEFFt3WbF+9JpUjAoj62cQBgNb8HzXMCAGA1UdEQQZMBeBFWRyaXZlci1ydWJ5
|
27
27
|
QDEwZ2VuLmNvbTAgBgNVHRIEGTAXgRVkcml2ZXItcnVieUAxMGdlbi5jb20wDQYJ
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
28
|
+
KoZIhvcNAQEFBQADggEBAL/5shZXBvCGGJcJqXyD2CJieOOH4EGUt/UKvSZ58lMz
|
29
|
+
QkW5aKG22GJbXesMq+dMm/+gzUB2ea9TzttBEE5ZM/eNvoxyf7yNUcFyLQ365S6P
|
30
|
+
rtQOj1Ms7ud5ffrhZJn1o7ayfY2ljQU0xLI2Yoyzl9XJq8U0TztS6Vk5wYIoLwUX
|
31
|
+
NWGRSbETPJyR4mtUEbgI5A+N7pakJPUKKK1zXzADflsx51jjP5rZJJltnoVsBBgN
|
32
|
+
EhIn2f8suSc9QAqYt7w4T+PMtjxWTVcXs+Uy2PbDtjhtEBz6ZsP6YSsOpJbrCjCV
|
33
|
+
wZtXjpRUvWz86V5vjhHCTE8fqfEb85aeDwUCckPzpio=
|
34
34
|
-----END CERTIFICATE-----
|
35
|
-
date: 2015-
|
35
|
+
date: 2015-12-07 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.0
|
43
|
+
version: '4.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.0
|
50
|
+
version: '4.0'
|
51
51
|
description: A Ruby driver for MongoDB
|
52
52
|
email: mongodb-dev@googlegroups.com
|
53
53
|
executables: []
|
@@ -59,7 +59,6 @@ files:
|
|
59
59
|
- README.md
|
60
60
|
- Rakefile
|
61
61
|
- bin/mongo_console
|
62
|
-
- lib/csasl/csasl.bundle
|
63
62
|
- lib/mongo.rb
|
64
63
|
- lib/mongo/address.rb
|
65
64
|
- lib/mongo/address/ipv4.rb
|
@@ -493,6 +492,7 @@ files:
|
|
493
492
|
- spec/support/sdam/rs/secondary_mismatched_me.yml
|
494
493
|
- spec/support/sdam/rs/secondary_wrong_set_name.yml
|
495
494
|
- spec/support/sdam/rs/secondary_wrong_set_name_with_primary.yml
|
495
|
+
- spec/support/sdam/rs/stepdown_change_set_name.yml
|
496
496
|
- spec/support/sdam/rs/unexpected_mongos.yml
|
497
497
|
- spec/support/sdam/rs/wrong_set_name.yml
|
498
498
|
- spec/support/sdam/sharded/mongos_disconnect.yml
|
@@ -563,12 +563,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
563
563
|
version: '0'
|
564
564
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
565
565
|
requirements:
|
566
|
-
- - "
|
566
|
+
- - ">="
|
567
567
|
- !ruby/object:Gem::Version
|
568
|
-
version:
|
568
|
+
version: '0'
|
569
569
|
requirements: []
|
570
570
|
rubyforge_project:
|
571
|
-
rubygems_version: 2.4.
|
571
|
+
rubygems_version: 2.4.8
|
572
572
|
signing_key:
|
573
573
|
specification_version: 4
|
574
574
|
summary: Ruby driver for MongoDB
|
@@ -774,6 +774,7 @@ test_files:
|
|
774
774
|
- spec/support/sdam/rs/secondary_mismatched_me.yml
|
775
775
|
- spec/support/sdam/rs/secondary_wrong_set_name.yml
|
776
776
|
- spec/support/sdam/rs/secondary_wrong_set_name_with_primary.yml
|
777
|
+
- spec/support/sdam/rs/stepdown_change_set_name.yml
|
777
778
|
- spec/support/sdam/rs/unexpected_mongos.yml
|
778
779
|
- spec/support/sdam/rs/wrong_set_name.yml
|
779
780
|
- spec/support/sdam/sharded/mongos_disconnect.yml
|
metadata.gz.sig
CHANGED
Binary file
|
data/lib/csasl/csasl.bundle
DELETED
Binary file
|