mongo 1.2.1 → 1.2.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|