mongo 1.2.1 → 1.2.2
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.
- data/docs/HISTORY.md +6 -0
- data/docs/REPLICA_SETS.md +1 -1
- data/lib/mongo.rb +1 -1
- data/lib/mongo/connection.rb +1 -1
- data/lib/mongo/repl_set_connection.rb +8 -4
- data/lib/mongo/util/pool.rb +2 -2
- data/test/replica_sets/query_secondaries.rb +13 -2
- data/test/replica_sets/rs_test_helper.rb +1 -1
- metadata +11 -7
data/docs/HISTORY.md
CHANGED
data/docs/REPLICA_SETS.md
CHANGED
@@ -63,7 +63,7 @@ The Ruby driver (>= 1.1.5) includes unit tests for verifying replica set behavio
|
|
63
63
|
rake test:rs
|
64
64
|
|
65
65
|
The suite will set up a five-node replica set by itself and ensure that driver behaves correctly even in the face
|
66
|
-
of individual node failures.
|
66
|
+
of individual node failures. Note that the `mongod` executable must be in the search path for this to work.
|
67
67
|
|
68
68
|
### Further Reading
|
69
69
|
|
data/lib/mongo.rb
CHANGED
data/lib/mongo/connection.rb
CHANGED
@@ -795,7 +795,7 @@ module Mongo
|
|
795
795
|
begin
|
796
796
|
message = new_binary_string
|
797
797
|
socket.read(length, message)
|
798
|
-
raise ConnectionFailure, "connection closed" unless message.length > 0
|
798
|
+
raise ConnectionFailure, "connection closed" unless message && message.length > 0
|
799
799
|
if message.length < length
|
800
800
|
chunk = new_binary_string
|
801
801
|
while message.length < length
|
@@ -119,8 +119,10 @@ module Mongo
|
|
119
119
|
BSON::BSON_CODER.update_max_bson_size(self)
|
120
120
|
else
|
121
121
|
if @secondary_pools.empty?
|
122
|
+
close # close any existing pools and sockets
|
122
123
|
raise ConnectionFailure, "Failed to connect any given host:port"
|
123
124
|
else
|
125
|
+
close # close any existing pools and sockets
|
124
126
|
raise ConnectionFailure, "Failed to connect to primary node."
|
125
127
|
end
|
126
128
|
end
|
@@ -136,7 +138,7 @@ module Mongo
|
|
136
138
|
#
|
137
139
|
# @return [Boolean]
|
138
140
|
def read_primary?
|
139
|
-
!@read_pool
|
141
|
+
!@read_pool
|
140
142
|
end
|
141
143
|
alias :primary? :read_primary?
|
142
144
|
|
@@ -194,9 +196,13 @@ module Mongo
|
|
194
196
|
|
195
197
|
check_set_name(config, socket)
|
196
198
|
rescue OperationFailure, SocketError, SystemCallError, IOError => ex
|
197
|
-
|
199
|
+
# It's necessary to rescue here. The #connect method will keep trying
|
200
|
+
# until it has no more nodes to try and raise a ConnectionFailure if
|
201
|
+
# it can't connect to a primary.
|
198
202
|
ensure
|
203
|
+
socket.close if socket
|
199
204
|
@nodes_tried << node
|
205
|
+
|
200
206
|
if config
|
201
207
|
nodes = []
|
202
208
|
nodes += config['hosts'] if config['hosts']
|
@@ -208,8 +214,6 @@ module Mongo
|
|
208
214
|
@logger.warn("MONGODB #{config['msg']}")
|
209
215
|
end
|
210
216
|
end
|
211
|
-
|
212
|
-
socket.close if socket
|
213
217
|
end
|
214
218
|
|
215
219
|
config
|
data/lib/mongo/util/pool.rb
CHANGED
@@ -76,7 +76,7 @@ module Mongo
|
|
76
76
|
socket = TCPSocket.new(@host, @port)
|
77
77
|
socket.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
|
78
78
|
rescue => ex
|
79
|
-
raise ConnectionFailure, "Failed to connect
|
79
|
+
raise ConnectionFailure, "Failed to connect to host #{@host} and port #{@port}: #{ex}"
|
80
80
|
end
|
81
81
|
|
82
82
|
# If any saved authentications exist, we want to apply those
|
@@ -146,7 +146,7 @@ module Mongo
|
|
146
146
|
|
147
147
|
if socket
|
148
148
|
|
149
|
-
# This
|
149
|
+
# This calls all procs, in order, scoped to existing sockets.
|
150
150
|
# At the moment, we use this to lazily authenticate and
|
151
151
|
# logout existing socket connections.
|
152
152
|
@socket_ops[socket].reject! do |op|
|
@@ -17,8 +17,10 @@ class ReplicaSetQuerySecondariesTest < Test::Unit::TestCase
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def test_read_primary
|
20
|
-
|
21
|
-
|
20
|
+
rescue_connection_failure do
|
21
|
+
assert !@conn.read_primary?
|
22
|
+
assert !@conn.primary?
|
23
|
+
end
|
22
24
|
end
|
23
25
|
|
24
26
|
def test_con
|
@@ -59,6 +61,12 @@ class ReplicaSetQuerySecondariesTest < Test::Unit::TestCase
|
|
59
61
|
# Should still be able to read immediately after killing master node
|
60
62
|
RS.kill_primary
|
61
63
|
assert_equal 2, @coll.find.to_a.length
|
64
|
+
rescue_connection_failure do
|
65
|
+
@coll.save({:a => 50}, :safe => {:w => 2, :wtimeout => 10000})
|
66
|
+
end
|
67
|
+
RS.restart_killed_nodes
|
68
|
+
@coll.save({:a => 50}, :safe => {:w => 2, :wtimeout => 10000})
|
69
|
+
assert_equal 4, @coll.find.to_a.length
|
62
70
|
end
|
63
71
|
|
64
72
|
def test_kill_secondary
|
@@ -71,6 +79,7 @@ class ReplicaSetQuerySecondariesTest < Test::Unit::TestCase
|
|
71
79
|
RS.kill(read_node)
|
72
80
|
|
73
81
|
# Should fail immediately on next read
|
82
|
+
old_read_pool_port = @conn.read_pool.port
|
74
83
|
assert_raise ConnectionFailure do
|
75
84
|
@coll.find.to_a.length
|
76
85
|
end
|
@@ -80,6 +89,8 @@ class ReplicaSetQuerySecondariesTest < Test::Unit::TestCase
|
|
80
89
|
length = @coll.find.to_a.length
|
81
90
|
assert_equal 2, length
|
82
91
|
end
|
92
|
+
new_read_pool_port = @conn.read_pool.port
|
93
|
+
assert old_read_pool != new_read_pool
|
83
94
|
end
|
84
95
|
|
85
96
|
end
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 27
|
5
|
+
prerelease:
|
5
6
|
segments:
|
6
7
|
- 1
|
7
8
|
- 2
|
8
|
-
-
|
9
|
-
version: 1.2.
|
9
|
+
- 2
|
10
|
+
version: 1.2.2
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Jim Menard
|
@@ -16,7 +17,7 @@ autorequire:
|
|
16
17
|
bindir: bin
|
17
18
|
cert_chain: []
|
18
19
|
|
19
|
-
date: 2011-02-
|
20
|
+
date: 2011-02-15 00:00:00 -05:00
|
20
21
|
default_executable:
|
21
22
|
dependencies:
|
22
23
|
- !ruby/object:Gem::Dependency
|
@@ -27,11 +28,12 @@ dependencies:
|
|
27
28
|
requirements:
|
28
29
|
- - ">="
|
29
30
|
- !ruby/object:Gem::Version
|
31
|
+
hash: 27
|
30
32
|
segments:
|
31
33
|
- 1
|
32
34
|
- 2
|
33
|
-
-
|
34
|
-
version: 1.2.
|
35
|
+
- 2
|
36
|
+
version: 1.2.2
|
35
37
|
type: :runtime
|
36
38
|
version_requirements: *id001
|
37
39
|
description: A Ruby driver for MongoDB. For more information about Mongo, see http://www.mongodb.org.
|
@@ -153,6 +155,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
153
155
|
requirements:
|
154
156
|
- - ">="
|
155
157
|
- !ruby/object:Gem::Version
|
158
|
+
hash: 3
|
156
159
|
segments:
|
157
160
|
- 0
|
158
161
|
version: "0"
|
@@ -161,13 +164,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
161
164
|
requirements:
|
162
165
|
- - ">="
|
163
166
|
- !ruby/object:Gem::Version
|
167
|
+
hash: 3
|
164
168
|
segments:
|
165
169
|
- 0
|
166
170
|
version: "0"
|
167
171
|
requirements: []
|
168
172
|
|
169
173
|
rubyforge_project:
|
170
|
-
rubygems_version: 1.
|
174
|
+
rubygems_version: 1.4.1
|
171
175
|
signing_key:
|
172
176
|
specification_version: 3
|
173
177
|
summary: Ruby driver for the MongoDB
|