mongo 1.8.0 → 1.8.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/README.md +14 -29
- data/VERSION +1 -1
- data/lib/mongo.rb +3 -0
- data/lib/mongo/collection.rb +99 -49
- data/lib/mongo/cursor.rb +17 -17
- data/lib/mongo/db.rb +30 -14
- data/lib/mongo/gridfs/grid.rb +5 -3
- data/lib/mongo/gridfs/grid_file_system.rb +5 -3
- data/lib/mongo/gridfs/grid_io.rb +5 -3
- data/lib/mongo/legacy.rb +9 -2
- data/lib/mongo/mongo_client.rb +100 -72
- data/lib/mongo/mongo_replica_set_client.rb +46 -60
- data/lib/mongo/mongo_sharded_client.rb +5 -66
- data/lib/mongo/networking.rb +2 -1
- data/lib/mongo/util/node.rb +41 -42
- data/lib/mongo/util/pool.rb +15 -43
- data/lib/mongo/util/pool_manager.rb +16 -65
- data/lib/mongo/util/read_preference.rb +82 -0
- data/lib/mongo/util/sharding_pool_manager.rb +0 -86
- data/lib/mongo/util/ssl_socket.rb +2 -1
- data/lib/mongo/util/support.rb +8 -18
- data/lib/mongo/util/tcp_socket.rb +5 -4
- data/lib/mongo/util/thread_local_variable_manager.rb +29 -0
- data/lib/mongo/util/unix_socket.rb +23 -0
- data/lib/mongo/util/uri_parser.rb +31 -18
- data/lib/mongo/util/write_concern.rb +7 -2
- data/mongo.gemspec +1 -1
- data/test/auxillary/repl_set_auth_test.rb +2 -2
- data/test/bson/bson_test.rb +1 -1
- data/test/bson/byte_buffer_test.rb +24 -26
- data/test/bson/hash_with_indifferent_access_test.rb +11 -1
- data/test/functional/collection_test.rb +16 -16
- data/test/functional/connection_test.rb +1 -4
- data/test/functional/db_api_test.rb +14 -10
- data/test/functional/pool_test.rb +23 -31
- data/test/functional/timeout_test.rb +3 -5
- data/test/functional/uri_test.rb +10 -5
- data/test/replica_set/basic_test.rb +3 -8
- data/test/replica_set/client_test.rb +47 -31
- data/test/replica_set/complex_connect_test.rb +12 -10
- data/test/replica_set/connection_test.rb +8 -151
- data/test/replica_set/count_test.rb +9 -5
- data/test/replica_set/cursor_test.rb +17 -27
- data/test/replica_set/insert_test.rb +5 -10
- data/test/replica_set/query_test.rb +4 -9
- data/test/replica_set/read_preference_test.rb +200 -0
- data/test/replica_set/refresh_test.rb +54 -65
- data/test/replica_set/replication_ack_test.rb +16 -14
- data/test/sharded_cluster/basic_test.rb +30 -0
- data/test/test_helper.rb +33 -15
- data/test/threading/basic_test.rb +79 -0
- data/test/tools/mongo_config.rb +62 -22
- data/test/unit/client_test.rb +36 -14
- data/test/unit/collection_test.rb +23 -0
- data/test/unit/connection_test.rb +30 -14
- data/test/unit/cursor_test.rb +137 -7
- data/test/unit/db_test.rb +17 -4
- data/test/unit/grid_test.rb +2 -2
- data/test/unit/node_test.rb +2 -1
- data/test/unit/pool_manager_test.rb +29 -1
- data/test/unit/read_test.rb +15 -15
- data/test/unit/safe_test.rb +4 -4
- data/test/unit/write_concern_test.rb +4 -4
- metadata +134 -143
- data/examples/admin.rb +0 -43
- data/examples/capped.rb +0 -22
- data/examples/cursor.rb +0 -48
- data/examples/gridfs.rb +0 -44
- data/examples/index_test.rb +0 -126
- data/examples/info.rb +0 -31
- data/examples/queries.rb +0 -74
- data/examples/replica_set.rb +0 -26
- data/examples/simple.rb +0 -25
- data/examples/strict.rb +0 -35
- data/examples/types.rb +0 -36
- data/examples/web/thin/load.rb +0 -23
- data/examples/web/unicorn/load.rb +0 -25
- data/test/support/hash_with_indifferent_access.rb +0 -186
- data/test/support/keys.rb +0 -45
- data/test/threading/threading_with_large_pool_test.rb +0 -90
@@ -16,11 +16,6 @@ class ReplicaSetCountTest < Test::Unit::TestCase
|
|
16
16
|
@client.close if @conn
|
17
17
|
end
|
18
18
|
|
19
|
-
def self.shutdown
|
20
|
-
@@cluster.stop
|
21
|
-
@@cluster.clobber
|
22
|
-
end
|
23
|
-
|
24
19
|
def test_correct_count_after_insertion_reconnect
|
25
20
|
@coll.insert({:a => 20}, :w => 2, :wtimeout => 10000)
|
26
21
|
assert_equal 1, @coll.count
|
@@ -43,4 +38,13 @@ class ReplicaSetCountTest < Test::Unit::TestCase
|
|
43
38
|
count_after = @primary['admin'].command({:serverStatus => 1})['opcounters']['command']
|
44
39
|
assert_equal 2, count_after - count_before
|
45
40
|
end
|
41
|
+
|
42
|
+
def test_count_with_read
|
43
|
+
@coll.insert({:a => 20}, :w => 2, :wtimeout => 10000)
|
44
|
+
count_before = @primary['admin'].command({:serverStatus => 1})['opcounters']['command']
|
45
|
+
assert_equal 1, @coll.count(:read => :secondary)
|
46
|
+
assert_equal 1, @coll.find({}, :read => :secondary).count()
|
47
|
+
count_after = @primary['admin'].command({:serverStatus => 1})['opcounters']['command']
|
48
|
+
assert_equal 1, count_after - count_before
|
49
|
+
end
|
46
50
|
end
|
@@ -6,37 +6,29 @@ class ReplicaSetCursorTest < Test::Unit::TestCase
|
|
6
6
|
ensure_cluster(:rs)
|
7
7
|
end
|
8
8
|
|
9
|
-
def self.shutdown
|
10
|
-
@@cluster.stop
|
11
|
-
@@cluster.clobber
|
12
|
-
end
|
13
|
-
|
14
9
|
def test_cursors_get_closed
|
15
10
|
setup_client
|
16
11
|
assert_cursor_count
|
17
12
|
end
|
18
13
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
14
|
+
def test_cursors_get_closed_secondary
|
15
|
+
setup_client(:secondary)
|
16
|
+
assert_cursor_count
|
17
|
+
end
|
23
18
|
|
24
19
|
private
|
25
20
|
|
26
21
|
def setup_client(read=:primary)
|
27
22
|
# Setup ReplicaSet Connection
|
28
|
-
@client = MongoReplicaSetClient.new(
|
29
|
-
@rs.repl_set_seeds,
|
30
|
-
:read => read
|
31
|
-
)
|
23
|
+
@client = MongoReplicaSetClient.new(@rs.repl_set_seeds, :read => read)
|
32
24
|
|
33
25
|
@db = @client.db(MONGO_TEST_DB)
|
34
26
|
@db.drop_collection("cursor_tests")
|
35
27
|
@coll = @db.collection("cursor_tests")
|
36
28
|
|
37
|
-
@coll.insert({:a => 1}, :w =>
|
38
|
-
@coll.insert({:b => 2}, :w =>
|
39
|
-
@coll.insert({:c => 3}, :w =>
|
29
|
+
@coll.insert({:a => 1}, :w => 2)
|
30
|
+
@coll.insert({:b => 2}, :w => 2)
|
31
|
+
@coll.insert({:c => 3}, :w => 2)
|
40
32
|
|
41
33
|
# Pin reader
|
42
34
|
@coll.find_one
|
@@ -55,21 +47,19 @@ class ReplicaSetCursorTest < Test::Unit::TestCase
|
|
55
47
|
end
|
56
48
|
|
57
49
|
def assert_cursor_count
|
58
|
-
|
59
|
-
|
60
|
-
|
50
|
+
before_primary_cursor = cursor_count(@primary)
|
51
|
+
before_read_cursor = cursor_count(@read)
|
52
|
+
before_read_query = query_count(@read)
|
61
53
|
|
62
54
|
@coll.find.limit(2).to_a
|
63
|
-
sleep(1)
|
64
55
|
|
65
|
-
|
66
|
-
|
67
|
-
|
56
|
+
after_primary_cursor = cursor_count(@primary)
|
57
|
+
after_read_cursor = cursor_count(@read)
|
58
|
+
after_read_query = query_count(@read)
|
68
59
|
|
69
|
-
assert_equal
|
70
|
-
assert_equal
|
71
|
-
assert_equal 1,
|
60
|
+
assert_equal before_primary_cursor, after_primary_cursor
|
61
|
+
assert_equal before_read_cursor, after_read_cursor
|
62
|
+
assert_equal 1, after_read_query - before_read_query
|
72
63
|
end
|
73
64
|
|
74
65
|
end
|
75
|
-
|
@@ -14,24 +14,19 @@ class ReplicaSetInsertTest < Test::Unit::TestCase
|
|
14
14
|
@client.close if @conn
|
15
15
|
end
|
16
16
|
|
17
|
-
def self.shutdown
|
18
|
-
@@cluster.stop
|
19
|
-
@@cluster.clobber
|
20
|
-
end
|
21
|
-
|
22
17
|
def test_insert
|
23
18
|
@coll.save({:a => 20}, :w => 2)
|
24
19
|
|
25
20
|
@rs.primary.stop
|
26
21
|
|
27
22
|
rescue_connection_failure do
|
28
|
-
@coll.save({:a => 30}, :w =>
|
23
|
+
@coll.save({:a => 30}, :w => 1)
|
29
24
|
end
|
30
25
|
|
31
|
-
@coll.save({:a => 40}, :w =>
|
32
|
-
@coll.save({:a => 50}, :w =>
|
33
|
-
@coll.save({:a => 60}, :w =>
|
34
|
-
@coll.save({:a => 70}, :w =>
|
26
|
+
@coll.save({:a => 40}, :w => 1)
|
27
|
+
@coll.save({:a => 50}, :w => 1)
|
28
|
+
@coll.save({:a => 60}, :w => 1)
|
29
|
+
@coll.save({:a => 70}, :w => 1)
|
35
30
|
|
36
31
|
# Restart the old master and wait for sync
|
37
32
|
@rs.start
|
@@ -14,15 +14,10 @@ class ReplicaSetQueryTest < Test::Unit::TestCase
|
|
14
14
|
@client.close if @conn
|
15
15
|
end
|
16
16
|
|
17
|
-
def self.shutdown
|
18
|
-
@@cluster.stop
|
19
|
-
@@cluster.clobber
|
20
|
-
end
|
21
|
-
|
22
17
|
def test_query
|
23
|
-
@coll.save({:a => 20}, :w =>
|
24
|
-
@coll.save({:a => 30}, :w =>
|
25
|
-
@coll.save({:a => 40}, :w =>
|
18
|
+
@coll.save({:a => 20}, :w => 2)
|
19
|
+
@coll.save({:a => 30}, :w => 2)
|
20
|
+
@coll.save({:a => 40}, :w => 2)
|
26
21
|
results = []
|
27
22
|
@coll.find.each {|r| results << r}
|
28
23
|
[20, 30, 40].each do |a|
|
@@ -48,7 +43,7 @@ class ReplicaSetQueryTest < Test::Unit::TestCase
|
|
48
43
|
# primary, where it does not exist.
|
49
44
|
# def test_secondary_getmore
|
50
45
|
# 200.times do |i|
|
51
|
-
# @coll.save({:a => i}, :w =>
|
46
|
+
# @coll.save({:a => i}, :w => 2)
|
52
47
|
# end
|
53
48
|
# as = []
|
54
49
|
# # Set an explicit batch size, in case the default ever changes.
|
@@ -0,0 +1,200 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ReadPreferenceTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
ensure_cluster(:rs, :replicas => 2, :arbiters => 0)
|
7
|
+
|
8
|
+
# Insert data
|
9
|
+
primary = @rs.primary
|
10
|
+
conn = Connection.new(primary.host, primary.port)
|
11
|
+
db = conn.db(MONGO_TEST_DB)
|
12
|
+
coll = db.collection("test-sets")
|
13
|
+
coll.save({:a => 20}, {:w => 2})
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_read_primary
|
17
|
+
conn = make_connection
|
18
|
+
rescue_connection_failure do
|
19
|
+
assert conn.read_primary?
|
20
|
+
assert conn.primary?
|
21
|
+
end
|
22
|
+
|
23
|
+
conn = make_connection(:primary_preferred)
|
24
|
+
rescue_connection_failure do
|
25
|
+
assert conn.read_primary?
|
26
|
+
assert conn.primary?
|
27
|
+
end
|
28
|
+
|
29
|
+
conn = make_connection(:secondary)
|
30
|
+
rescue_connection_failure do
|
31
|
+
assert !conn.read_primary?
|
32
|
+
assert !conn.primary?
|
33
|
+
end
|
34
|
+
|
35
|
+
conn = make_connection(:secondary_preferred)
|
36
|
+
rescue_connection_failure do
|
37
|
+
assert !conn.read_primary?
|
38
|
+
assert !conn.primary?
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_connection_pools
|
43
|
+
conn = make_connection
|
44
|
+
assert conn.primary_pool, "No primary pool!"
|
45
|
+
assert conn.read_pool, "No read pool!"
|
46
|
+
assert conn.primary_pool.port == conn.read_pool.port,
|
47
|
+
"Primary port and read port are not the same!"
|
48
|
+
|
49
|
+
conn = make_connection(:primary_preferred)
|
50
|
+
assert conn.primary_pool, "No primary pool!"
|
51
|
+
assert conn.read_pool, "No read pool!"
|
52
|
+
assert conn.primary_pool.port == conn.read_pool.port,
|
53
|
+
"Primary port and read port are not the same!"
|
54
|
+
|
55
|
+
conn = make_connection(:secondary)
|
56
|
+
assert conn.primary_pool, "No primary pool!"
|
57
|
+
assert conn.read_pool, "No read pool!"
|
58
|
+
assert conn.primary_pool.port != conn.read_pool.port,
|
59
|
+
"Primary port and read port are the same!"
|
60
|
+
|
61
|
+
conn = make_connection(:secondary_preferred)
|
62
|
+
assert conn.primary_pool, "No primary pool!"
|
63
|
+
assert conn.read_pool, "No read pool!"
|
64
|
+
assert conn.primary_pool.port != conn.read_pool.port,
|
65
|
+
"Primary port and read port are the same!"
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_read_routing
|
69
|
+
prepare_routing_test
|
70
|
+
|
71
|
+
# Test that reads are going to the right members
|
72
|
+
assert_query_route(@primary, @primary_direct)
|
73
|
+
assert_query_route(@primary_preferred, @primary_direct)
|
74
|
+
assert_query_route(@secondary, @secondary_direct)
|
75
|
+
assert_query_route(@secondary_preferred, @secondary_direct)
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_read_routing_with_primary_down
|
79
|
+
prepare_routing_test
|
80
|
+
|
81
|
+
# Test that reads are going to the right members
|
82
|
+
assert_query_route(@primary, @primary_direct)
|
83
|
+
assert_query_route(@primary_preferred, @primary_direct)
|
84
|
+
assert_query_route(@secondary, @secondary_direct)
|
85
|
+
assert_query_route(@secondary_preferred, @secondary_direct)
|
86
|
+
|
87
|
+
# Kill the primary so only a single secondary exists
|
88
|
+
@rs.primary.kill
|
89
|
+
|
90
|
+
# Test that reads are going to the right members
|
91
|
+
assert_raise_error ConnectionFailure do
|
92
|
+
@primary[MONGO_TEST_DB]['test-sets'].find_one
|
93
|
+
end
|
94
|
+
assert_query_route(@primary_preferred, @secondary_direct)
|
95
|
+
assert_query_route(@secondary, @secondary_direct)
|
96
|
+
assert_query_route(@secondary_preferred, @secondary_direct)
|
97
|
+
|
98
|
+
# Restore set
|
99
|
+
@rs.restart
|
100
|
+
sleep(1)
|
101
|
+
@repl_cons.each { |con| con.refresh }
|
102
|
+
sleep(1)
|
103
|
+
@primary_direct = Connection.new(
|
104
|
+
@rs.config['host'],
|
105
|
+
@primary.read_pool.port
|
106
|
+
)
|
107
|
+
|
108
|
+
# Test that reads are going to the right members
|
109
|
+
assert_query_route(@primary, @primary_direct)
|
110
|
+
assert_query_route(@primary_preferred, @primary_direct)
|
111
|
+
assert_query_route(@secondary, @secondary_direct)
|
112
|
+
assert_query_route(@secondary_preferred, @secondary_direct)
|
113
|
+
end
|
114
|
+
|
115
|
+
def test_read_routing_with_secondary_down
|
116
|
+
prepare_routing_test
|
117
|
+
|
118
|
+
# Test that reads are going to the right members
|
119
|
+
assert_query_route(@primary, @primary_direct)
|
120
|
+
assert_query_route(@primary_preferred, @primary_direct)
|
121
|
+
assert_query_route(@secondary, @secondary_direct)
|
122
|
+
assert_query_route(@secondary_preferred, @secondary_direct)
|
123
|
+
|
124
|
+
# Kill the secondary so that only primary exists
|
125
|
+
@rs.secondaries.first.kill
|
126
|
+
|
127
|
+
# Test that reads are going to the right members
|
128
|
+
assert_query_route(@primary, @primary_direct)
|
129
|
+
assert_query_route(@primary_preferred, @primary_direct)
|
130
|
+
assert_raise_error ConnectionFailure do
|
131
|
+
@secondary[MONGO_TEST_DB]['test-sets'].find_one
|
132
|
+
end
|
133
|
+
assert_query_route(@secondary_preferred, @primary_direct)
|
134
|
+
|
135
|
+
# Restore set
|
136
|
+
@rs.restart
|
137
|
+
sleep(1)
|
138
|
+
@repl_cons.each { |con| con.refresh }
|
139
|
+
sleep(1)
|
140
|
+
@secondary_direct = Connection.new(
|
141
|
+
@rs.config['host'],
|
142
|
+
@secondary.read_pool.port,
|
143
|
+
:slave_ok => true
|
144
|
+
)
|
145
|
+
|
146
|
+
# Test that reads are going to the right members
|
147
|
+
assert_query_route(@primary, @primary_direct)
|
148
|
+
assert_query_route(@primary_preferred, @primary_direct)
|
149
|
+
assert_query_route(@secondary, @secondary_direct)
|
150
|
+
assert_query_route(@secondary_preferred, @secondary_direct)
|
151
|
+
end
|
152
|
+
|
153
|
+
def test_write_lots_of_data
|
154
|
+
@conn = make_connection(:secondary_preferred)
|
155
|
+
@db = @conn[MONGO_TEST_DB]
|
156
|
+
@coll = @db.collection("test-sets", {:w => 2})
|
157
|
+
|
158
|
+
6000.times do |n|
|
159
|
+
@coll.save({:a => n})
|
160
|
+
end
|
161
|
+
|
162
|
+
cursor = @coll.find()
|
163
|
+
cursor.next
|
164
|
+
cursor.close
|
165
|
+
end
|
166
|
+
|
167
|
+
private
|
168
|
+
|
169
|
+
def prepare_routing_test
|
170
|
+
# Setup replica set connections
|
171
|
+
@primary = make_connection(:primary)
|
172
|
+
@primary_preferred = make_connection(:primary_preferred)
|
173
|
+
@secondary = make_connection(:secondary)
|
174
|
+
@secondary_preferred = make_connection(:secondary_preferred)
|
175
|
+
@repl_cons = [@primary, @primary_preferred, @secondary, @secondary_preferred]
|
176
|
+
|
177
|
+
# Setup direct connections
|
178
|
+
@primary_direct = Connection.new(@rs.config['host'], @primary.read_pool.port)
|
179
|
+
@secondary_direct = Connection.new(@rs.config['host'], @secondary.read_pool.port, :slave_ok => true)
|
180
|
+
end
|
181
|
+
|
182
|
+
def make_connection(mode = :primary, opts = {})
|
183
|
+
opts.merge!({:read => mode})
|
184
|
+
MongoReplicaSetClient.new(@rs.repl_set_seeds, opts)
|
185
|
+
end
|
186
|
+
|
187
|
+
def query_count(connection)
|
188
|
+
connection['admin'].command({:serverStatus => 1})['opcounters']['query']
|
189
|
+
end
|
190
|
+
|
191
|
+
def assert_query_route(test_connection, expected_target)
|
192
|
+
#puts "#{test_connection.read_pool.port} #{expected_target.read_pool.port}"
|
193
|
+
queries_before = query_count(expected_target)
|
194
|
+
assert_nothing_raised do
|
195
|
+
test_connection['MONGO_TEST_DB']['test-sets'].find_one
|
196
|
+
end
|
197
|
+
queries_after = query_count(expected_target)
|
198
|
+
assert_equal 1, queries_after - queries_before
|
199
|
+
end
|
200
|
+
end
|
@@ -7,147 +7,136 @@ class ReplicaSetRefreshTest < Test::Unit::TestCase
|
|
7
7
|
ensure_cluster(:rs)
|
8
8
|
end
|
9
9
|
|
10
|
-
def self.shutdown
|
11
|
-
@@cluster.stop
|
12
|
-
@@cluster.clobber
|
13
|
-
end
|
14
|
-
|
15
10
|
def test_connect_and_manual_refresh_with_secondaries_down
|
16
11
|
@rs.secondaries.each{|s| s.stop}
|
12
|
+
client = MongoReplicaSetClient.new(@rs.repl_set_seeds, :refresh_mode => false)
|
17
13
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
assert_equal [], @client.secondaries
|
23
|
-
assert @client.connected?
|
24
|
-
assert_equal @client.read_pool, @client.primary_pool
|
14
|
+
assert_equal Set.new, client.secondaries
|
15
|
+
assert client.connected?
|
16
|
+
assert_equal client.read_pool, client.primary_pool
|
25
17
|
|
26
18
|
# Refresh with no change to set
|
27
|
-
|
28
|
-
assert_equal
|
29
|
-
assert
|
30
|
-
assert_equal
|
19
|
+
client.refresh
|
20
|
+
assert_equal Set.new, client.secondaries
|
21
|
+
assert client.connected?
|
22
|
+
assert_equal client.read_pool, client.primary_pool
|
31
23
|
|
32
24
|
# Test no changes after restart until manual refresh
|
33
25
|
@rs.restart
|
34
|
-
assert_equal
|
35
|
-
assert
|
36
|
-
assert_equal
|
26
|
+
assert_equal Set.new, client.secondaries
|
27
|
+
assert client.connected?
|
28
|
+
assert_equal client.read_pool, client.primary_pool
|
37
29
|
|
38
30
|
# Refresh and ensure state
|
39
|
-
|
40
|
-
assert_equal
|
41
|
-
|
31
|
+
client.refresh
|
32
|
+
assert_equal client.read_pool, client.primary_pool
|
33
|
+
assert_equal 1, client.secondaries.length
|
42
34
|
end
|
43
35
|
|
44
36
|
def test_automated_refresh_with_secondaries_down
|
45
37
|
@rs.secondaries.each{|s| s.stop}
|
46
|
-
|
47
|
-
|
48
|
-
@client = MongoReplicaSetClient.new(@rs.repl_set_seeds,
|
49
|
-
:refresh_interval => 1, :refresh_mode => :sync, :read => :secondary_preferred)
|
50
|
-
end
|
38
|
+
client = MongoReplicaSetClient.new(@rs.repl_set_seeds,
|
39
|
+
:refresh_interval => 1, :refresh_mode => :sync, :read => :secondary_preferred)
|
51
40
|
|
52
41
|
# Ensure secondaries not available and read from primary
|
53
|
-
assert_equal
|
54
|
-
assert
|
55
|
-
|
56
|
-
old_refresh_version =
|
42
|
+
assert_equal Set.new, client.secondaries
|
43
|
+
assert client.connected?
|
44
|
+
assert client.manager.pools.member?(client.manager.read_pool)
|
45
|
+
old_refresh_version = client.refresh_version
|
57
46
|
|
58
47
|
# Restart nodes and ensure refresh interval has passed
|
59
48
|
@rs.restart
|
60
49
|
sleep(2)
|
61
50
|
|
62
|
-
assert
|
51
|
+
assert client.refresh_version == old_refresh_version,
|
63
52
|
"Refresh version has changed."
|
64
53
|
|
65
54
|
# Trigger synchronous refresh
|
66
|
-
|
55
|
+
client['foo']['bar'].find_one
|
67
56
|
|
68
|
-
assert
|
57
|
+
assert client.refresh_version > old_refresh_version,
|
69
58
|
"Refresh version hasn't changed."
|
70
|
-
assert
|
59
|
+
assert client.secondaries.length == 1,
|
71
60
|
"No secondaries have been added."
|
72
|
-
assert
|
61
|
+
assert client.manager.read_pool != client.manager.primary,
|
73
62
|
"Read pool and primary pool are identical."
|
74
63
|
end
|
75
64
|
|
76
65
|
def test_automated_refresh_when_secondary_goes_down
|
77
|
-
|
66
|
+
client = MongoReplicaSetClient.new(@rs.repl_set_seeds,
|
78
67
|
:refresh_interval => 1, :refresh_mode => :sync)
|
79
68
|
|
80
|
-
num_secondaries =
|
81
|
-
old_refresh_version =
|
69
|
+
num_secondaries = client.secondary_pools.length
|
70
|
+
old_refresh_version = client.refresh_version
|
82
71
|
|
83
|
-
@rs.
|
84
|
-
sleep(
|
72
|
+
@rs.kill_secondary
|
73
|
+
sleep(1)
|
85
74
|
|
86
|
-
assert
|
75
|
+
assert client.refresh_version == old_refresh_version,
|
87
76
|
"Refresh version has changed."
|
88
77
|
|
89
|
-
|
78
|
+
client['foo']['bar'].find_one
|
90
79
|
|
91
|
-
assert
|
80
|
+
assert client.refresh_version > old_refresh_version,
|
92
81
|
"Refresh version hasn't changed."
|
93
|
-
assert_equal num_secondaries - 1,
|
94
|
-
assert_equal num_secondaries - 1,
|
82
|
+
assert_equal num_secondaries - 1, client.secondaries.length
|
83
|
+
assert_equal num_secondaries - 1, client.secondary_pools.length
|
95
84
|
|
96
85
|
@rs.start
|
97
86
|
sleep(2)
|
98
87
|
|
99
|
-
|
88
|
+
client['foo']['bar'].find_one
|
100
89
|
|
101
|
-
assert_equal num_secondaries,
|
102
|
-
assert_equal num_secondaries,
|
90
|
+
assert_equal num_secondaries, client.secondaries.length
|
91
|
+
assert_equal num_secondaries, client.secondary_pools.length
|
103
92
|
end
|
104
93
|
=begin
|
105
94
|
def test_automated_refresh_with_removed_node
|
106
|
-
|
95
|
+
client = MongoReplicaSetClient.new(@rs.repl_set_seeds,
|
107
96
|
:refresh_interval => 1, :refresh_mode => :sync)
|
108
97
|
|
109
|
-
num_secondaries =
|
110
|
-
old_refresh_version =
|
98
|
+
num_secondaries = client.secondary_pools.length
|
99
|
+
old_refresh_version = client.refresh_version
|
111
100
|
|
112
101
|
n = @rs.repl_set_remove_node(2)
|
113
102
|
sleep(2)
|
114
103
|
|
115
104
|
rescue_connection_failure do
|
116
|
-
|
105
|
+
client['foo']['bar'].find_one
|
117
106
|
end
|
118
107
|
|
119
|
-
assert
|
108
|
+
assert client.refresh_version > old_refresh_version,
|
120
109
|
"Refresh version hasn't changed."
|
121
|
-
assert_equal num_secondaries - 1,
|
122
|
-
assert_equal num_secondaries - 1,
|
110
|
+
assert_equal num_secondaries - 1, client.secondaries.length
|
111
|
+
assert_equal num_secondaries - 1, client.secondary_pools.length
|
123
112
|
|
124
113
|
#@rs.add_node(n)
|
125
114
|
end
|
126
115
|
|
127
116
|
def test_adding_and_removing_nodes
|
128
|
-
|
117
|
+
client = MongoReplicaSetClient.new(build_seeds(3),
|
129
118
|
:refresh_interval => 2, :refresh_mode => :sync)
|
130
119
|
|
131
120
|
@rs.add_node
|
132
121
|
sleep(4)
|
133
|
-
|
122
|
+
client['foo']['bar'].find_one
|
134
123
|
|
135
124
|
@conn2 = MongoReplicaSetClient.new(build_seeds(3),
|
136
125
|
:refresh_interval => 2, :refresh_mode => :sync)
|
137
126
|
|
138
|
-
assert @conn2.secondaries.sort ==
|
127
|
+
assert @conn2.secondaries.sort == client.secondaries.sort,
|
139
128
|
"Second connection secondaries not equal to first."
|
140
|
-
assert_equal 3,
|
141
|
-
assert_equal 3,
|
129
|
+
assert_equal 3, client.secondary_pools.length
|
130
|
+
assert_equal 3, client.secondaries.length
|
142
131
|
|
143
|
-
config =
|
132
|
+
config = client['admin'].command({:ismaster => 1})
|
144
133
|
|
145
134
|
@rs.remove_secondary_node
|
146
135
|
sleep(4)
|
147
|
-
config =
|
136
|
+
config = client['admin'].command({:ismaster => 1})
|
148
137
|
|
149
|
-
assert_equal 2,
|
150
|
-
assert_equal 2,
|
138
|
+
assert_equal 2, client.secondary_pools.length
|
139
|
+
assert_equal 2, client.secondaries.length
|
151
140
|
end
|
152
141
|
=end
|
153
142
|
end
|