mongo 1.10.1-java → 1.10.2-java
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/VERSION +1 -1
- data/lib/mongo/bulk_write_collection_view.rb +8 -1
- data/lib/mongo/connection/pool_manager.rb +52 -57
- data/mongo.gemspec +1 -1
- data/test/functional/bulk_write_collection_view_test.rb +74 -0
- data/test/replica_set/refresh_test.rb +18 -0
- data/test/unit/pool_manager_test.rb +0 -31
- metadata +6 -6
- metadata.gz.sig +2 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f60da78d5d8323ce4794fe5f3daed3383ee6b8b2
|
4
|
+
data.tar.gz: aec0cd5d5273cd94fa6a27d2bcf5c53ea4fa3278
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f3e8d6a2738d5a5ab569bb36148fecb823526fedcccc71c4d8d8a216badadd3f11b0ba9fc4d53906bdc8b34438bd2e2f91777967a120da9f6ff04c4a1805dd6d
|
7
|
+
data.tar.gz: 0b900d45b9abad604db1e473dadaf125b2fac5000f50bc92a246918462199f741a1590f9123726de6105a231ba1673a2700a3e1658a1359deadadf65aedb2b40
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.10.
|
1
|
+
1.10.2
|
@@ -294,9 +294,16 @@ module Mongo
|
|
294
294
|
elsif op_type == :update
|
295
295
|
n_upserted = 0
|
296
296
|
if (upserted = response.fetch("upserted", nil)) # assignment
|
297
|
-
upserted = [{"_id" => upserted}] if upserted.class
|
297
|
+
upserted = [{"_id" => upserted}] if upserted.class != Array # OP_UPDATE non-array
|
298
298
|
n_upserted = upserted.size
|
299
299
|
concat(result, "upserted", merge_indexes(upserted, exchange))
|
300
|
+
elsif (response["updatedExisting"] == false && n == 1)
|
301
|
+
# workaround for DRIVERS-151 (non-ObjectID _id fields in pre-2.6 servers)
|
302
|
+
op = exchange[:batch][0]
|
303
|
+
missing_id = op[:u].fetch(:_id, op[:q][:_id]) # _id in update document takes precedence
|
304
|
+
upserted = [ { "_id" => missing_id, "index" => 0 } ]
|
305
|
+
n_upserted = n
|
306
|
+
concat(result, "upserted", merge_indexes(upserted, exchange))
|
300
307
|
end
|
301
308
|
tally(result, "nUpserted", n_upserted) if n_upserted > 0
|
302
309
|
tally(result, "nMatched", n - n_upserted)
|
@@ -17,6 +17,11 @@ module Mongo
|
|
17
17
|
include ThreadLocalVariableManager
|
18
18
|
|
19
19
|
attr_reader :client,
|
20
|
+
:hosts,
|
21
|
+
:pools,
|
22
|
+
:secondaries,
|
23
|
+
:secondary_pools,
|
24
|
+
:arbiters,
|
20
25
|
:primary,
|
21
26
|
:primary_pool,
|
22
27
|
:seeds,
|
@@ -36,12 +41,12 @@ module Mongo
|
|
36
41
|
@client = client
|
37
42
|
@seeds = seeds
|
38
43
|
|
44
|
+
initialize_immutable_state
|
45
|
+
initialize_mutable_state
|
46
|
+
|
39
47
|
@pools = Set.new
|
40
48
|
@primary = nil
|
41
49
|
@primary_pool = nil
|
42
|
-
@secondaries = Set.new
|
43
|
-
@secondary_pools = []
|
44
|
-
@hosts = Set.new
|
45
50
|
@members = Set.new
|
46
51
|
@refresh_required = false
|
47
52
|
@max_bson_size = DEFAULT_MAX_BSON_SIZE
|
@@ -70,6 +75,7 @@ module Mongo
|
|
70
75
|
thread_local[:locks][:connecting_manager] = false
|
71
76
|
end
|
72
77
|
end
|
78
|
+
clone_state
|
73
79
|
end
|
74
80
|
|
75
81
|
def refresh!(additional_seeds)
|
@@ -140,47 +146,6 @@ module Mongo
|
|
140
146
|
read_pool.host_port
|
141
147
|
end
|
142
148
|
|
143
|
-
def hosts
|
144
|
-
@connect_mutex.synchronize do
|
145
|
-
@hosts.nil? ? nil : @hosts.clone
|
146
|
-
end
|
147
|
-
end
|
148
|
-
|
149
|
-
def pools
|
150
|
-
@connect_mutex.synchronize do
|
151
|
-
@pools.nil? ? nil : @pools.clone
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
155
|
-
def secondaries
|
156
|
-
@connect_mutex.synchronize do
|
157
|
-
@secondaries.nil? ? nil : @secondaries.clone
|
158
|
-
end
|
159
|
-
end
|
160
|
-
|
161
|
-
def secondary_pools
|
162
|
-
@connect_mutex.synchronize do
|
163
|
-
@secondary_pools.nil? ? nil : @secondary_pools.clone
|
164
|
-
end
|
165
|
-
end
|
166
|
-
|
167
|
-
def arbiters
|
168
|
-
@connect_mutex.synchronize do
|
169
|
-
@arbiters.nil? ? nil : @arbiters.clone
|
170
|
-
end
|
171
|
-
end
|
172
|
-
|
173
|
-
def state_snapshot
|
174
|
-
@connect_mutex.synchronize do
|
175
|
-
{ :pools => @pools.nil? ? nil : @pools.clone,
|
176
|
-
:secondaries => @secondaries.nil? ? nil : @secondaries.clone,
|
177
|
-
:secondary_pools => @secondary_pools.nil? ? nil : @secondary_pools.clone,
|
178
|
-
:hosts => @hosts.nil? ? nil : @hosts.clone,
|
179
|
-
:arbiters => @arbiters.nil? ? nil : @arbiters.clone
|
180
|
-
}
|
181
|
-
end
|
182
|
-
end
|
183
|
-
|
184
149
|
private
|
185
150
|
|
186
151
|
def update_max_sizes
|
@@ -203,7 +168,7 @@ module Mongo
|
|
203
168
|
|
204
169
|
# For any existing members, close and remove any that are unhealthy or already closed.
|
205
170
|
def disconnect_old_members
|
206
|
-
@
|
171
|
+
@pools_mutable.reject! {|pool| !pool.healthy? }
|
207
172
|
@members.reject! {|node| !node.healthy? }
|
208
173
|
end
|
209
174
|
|
@@ -243,13 +208,13 @@ module Mongo
|
|
243
208
|
def initialize_pools(members)
|
244
209
|
@primary_pool = nil
|
245
210
|
@primary = nil
|
246
|
-
@
|
247
|
-
@
|
248
|
-
@
|
211
|
+
@secondaries_mutable.clear
|
212
|
+
@secondary_pools_mutable.clear
|
213
|
+
@hosts_mutable.clear
|
249
214
|
|
250
215
|
members.each do |member|
|
251
216
|
member.last_state = nil
|
252
|
-
@
|
217
|
+
@hosts_mutable << member.host_string
|
253
218
|
if member.primary?
|
254
219
|
assign_primary(member)
|
255
220
|
elsif member.secondary?
|
@@ -258,13 +223,13 @@ module Mongo
|
|
258
223
|
end
|
259
224
|
end
|
260
225
|
|
261
|
-
@
|
226
|
+
@arbiters_mutable = members.first.arbiters
|
262
227
|
end
|
263
228
|
|
264
229
|
def assign_primary(member)
|
265
230
|
member.last_state = :primary
|
266
231
|
@primary = member.host_port
|
267
|
-
if existing = @
|
232
|
+
if existing = @pools_mutable.detect {|pool| pool.node == member }
|
268
233
|
@primary_pool = existing
|
269
234
|
else
|
270
235
|
@primary_pool = Pool.new(self.client, member.host, member.port,
|
@@ -272,23 +237,23 @@ module Mongo
|
|
272
237
|
:timeout => self.client.pool_timeout,
|
273
238
|
:node => member
|
274
239
|
)
|
275
|
-
@
|
240
|
+
@pools_mutable << @primary_pool
|
276
241
|
end
|
277
242
|
end
|
278
243
|
|
279
244
|
def assign_secondary(member)
|
280
245
|
member.last_state = :secondary
|
281
|
-
@
|
282
|
-
if existing = @
|
283
|
-
@
|
246
|
+
@secondaries_mutable << member.host_port
|
247
|
+
if existing = @pools_mutable.detect {|pool| pool.node == member }
|
248
|
+
@secondary_pools_mutable << existing
|
284
249
|
else
|
285
250
|
pool = Pool.new(self.client, member.host, member.port,
|
286
251
|
:size => self.client.pool_size,
|
287
252
|
:timeout => self.client.pool_timeout,
|
288
253
|
:node => member
|
289
254
|
)
|
290
|
-
@
|
291
|
-
@
|
255
|
+
@secondary_pools_mutable << pool
|
256
|
+
@pools_mutable << pool
|
292
257
|
end
|
293
258
|
end
|
294
259
|
|
@@ -321,5 +286,35 @@ module Mongo
|
|
321
286
|
end
|
322
287
|
members
|
323
288
|
end
|
289
|
+
|
290
|
+
def initialize_immutable_state
|
291
|
+
@hosts = Set.new.freeze
|
292
|
+
@pools = Set.new.freeze
|
293
|
+
@secondaries = Set.new.freeze
|
294
|
+
@secondary_pools = [].freeze
|
295
|
+
@arbiters = [].freeze
|
296
|
+
end
|
297
|
+
|
298
|
+
def initialize_mutable_state
|
299
|
+
@hosts_mutable = Set.new
|
300
|
+
@pools_mutable = Set.new
|
301
|
+
@secondaries_mutable = Set.new
|
302
|
+
@secondary_pools_mutable = []
|
303
|
+
@arbiters_mutable = []
|
304
|
+
end
|
305
|
+
|
306
|
+
def clone_state
|
307
|
+
@hosts = @hosts_mutable.clone
|
308
|
+
@pools = @pools_mutable.clone
|
309
|
+
@secondaries = @secondaries_mutable.clone
|
310
|
+
@secondary_pools = @secondary_pools_mutable.clone
|
311
|
+
@arbiters = @arbiters_mutable.clone
|
312
|
+
|
313
|
+
@hosts.freeze
|
314
|
+
@pools.freeze
|
315
|
+
@secondaries.freeze
|
316
|
+
@secondary_pools.freeze
|
317
|
+
@arbiters.freeze
|
318
|
+
end
|
324
319
|
end
|
325
320
|
end
|
data/mongo.gemspec
CHANGED
@@ -339,6 +339,16 @@ class BulkWriteCollectionViewTest < Test::Unit::TestCase
|
|
339
339
|
end
|
340
340
|
end
|
341
341
|
|
342
|
+
# ----- REPLACE -----
|
343
|
+
|
344
|
+
should "raise an error when we attempt to use replace" do
|
345
|
+
assert_raise NoMethodError do
|
346
|
+
bulk = @collection.initialize_ordered_bulk_op
|
347
|
+
bulk.find({:a => 2}).replace({:a => 1})
|
348
|
+
bulk.execute
|
349
|
+
end
|
350
|
+
end
|
351
|
+
|
342
352
|
# ----- REPLACE_ONE -----
|
343
353
|
|
344
354
|
should "check arg for replacement, set :update, :u, :multi, terminate and return view for #replace_one" do
|
@@ -501,6 +511,27 @@ class BulkWriteCollectionViewTest < Test::Unit::TestCase
|
|
501
511
|
end
|
502
512
|
end
|
503
513
|
|
514
|
+
should "count nUpserted correctly when _id is not an ObjectId (upsert-update)" do
|
515
|
+
with_write_commands_and_operations(@db.connection) do |wire_version|
|
516
|
+
@collection.remove
|
517
|
+
|
518
|
+
bulk = @collection.initialize_unordered_bulk_op
|
519
|
+
bulk.find({:_id => 3}).upsert.update({"$set" => {:b => 3}})
|
520
|
+
result = bulk.execute
|
521
|
+
assert_match_document(
|
522
|
+
{
|
523
|
+
"ok" => 1,
|
524
|
+
"n" => 1,
|
525
|
+
"nMatched" => 0,
|
526
|
+
"nUpserted" => 1,
|
527
|
+
"nModified" => batch_commands?(wire_version) ? 0 : nil,
|
528
|
+
"upserted" => [
|
529
|
+
{ "_id" => 3, "index" => 0 }
|
530
|
+
]
|
531
|
+
}, result, "wire_version:#{wire_version}")
|
532
|
+
end
|
533
|
+
end
|
534
|
+
|
504
535
|
# ----- UPSERT-UPDATE_ONE -----
|
505
536
|
|
506
537
|
should "#upsert a document without affecting non-upsert update_ones" do
|
@@ -544,6 +575,27 @@ class BulkWriteCollectionViewTest < Test::Unit::TestCase
|
|
544
575
|
end
|
545
576
|
end
|
546
577
|
|
578
|
+
|
579
|
+
should "count nUpserted correctly when _id is not an ObjectId (upsert-update_one)" do
|
580
|
+
with_write_commands_and_operations(@db.connection) do |wire_version|
|
581
|
+
@collection.remove
|
582
|
+
bulk = @collection.initialize_ordered_bulk_op
|
583
|
+
bulk.find({:_id => 2}).upsert.update_one({"$set" => {:x => 2}})
|
584
|
+
result = bulk.execute
|
585
|
+
assert_match_document(
|
586
|
+
{
|
587
|
+
"ok" => 1,
|
588
|
+
"n" => 1,
|
589
|
+
"nMatched" => 0,
|
590
|
+
"nUpserted" => 1,
|
591
|
+
"nModified" => batch_commands?(wire_version) ? 0 : nil,
|
592
|
+
"upserted" => [
|
593
|
+
{"_id" => 2, "index" => 0 }
|
594
|
+
]
|
595
|
+
}, result, "wire_version:#{wire_version}")
|
596
|
+
end
|
597
|
+
end
|
598
|
+
|
547
599
|
# ----- UPSERT-REPLACE_ONE -----
|
548
600
|
|
549
601
|
should "not affect non-upsert replace_ones in same batch as #upsert-replace_one" do
|
@@ -598,6 +650,28 @@ class BulkWriteCollectionViewTest < Test::Unit::TestCase
|
|
598
650
|
assert_equal({"nM" => nil}, nil_tally_responses([{"nM" => 1}, {"nM" => nil}, {"nM" => 3}], "nM"))
|
599
651
|
end
|
600
652
|
|
653
|
+
|
654
|
+
should "count nUpserted correctly when _id is not an ObjectId (upsert-replace_one)" do
|
655
|
+
with_write_commands_and_operations(@db.connection) do |wire_version|
|
656
|
+
@collection.remove
|
657
|
+
bulk = @collection.initialize_unordered_bulk_op
|
658
|
+
bulk.find({:a => 1}).upsert.replace_one({:_id => 2})
|
659
|
+
result = bulk.execute
|
660
|
+
assert_match_document(
|
661
|
+
{
|
662
|
+
"ok" => 1,
|
663
|
+
"n" => 1,
|
664
|
+
"nMatched" => 0,
|
665
|
+
"nUpserted" => 1,
|
666
|
+
"nModified" => batch_commands?(wire_version) ? 0 : nil,
|
667
|
+
"upserted" => [
|
668
|
+
{ "_id" => 2, "index" => 0 }
|
669
|
+
]
|
670
|
+
}, result, "wire_version:#{wire_version}")
|
671
|
+
assert_equal 1, @collection.count
|
672
|
+
end
|
673
|
+
end
|
674
|
+
|
601
675
|
# ----- MIXED OPS, ORDERED -----
|
602
676
|
|
603
677
|
should "execute, return result and reset @ops for #execute" do
|
@@ -123,6 +123,24 @@ class ReplicaSetRefreshTest < Test::Unit::TestCase
|
|
123
123
|
end
|
124
124
|
end
|
125
125
|
|
126
|
+
|
127
|
+
def test_manager_recursive_locking
|
128
|
+
# See RUBY-775
|
129
|
+
# This tests that there isn't recursive locking when a pool manager reconnects
|
130
|
+
# to all replica set members. The bug in RUBY-775 occurred because the same lock
|
131
|
+
# acquired in order to connect the pool manager was used to read the pool manager's
|
132
|
+
# state.
|
133
|
+
client = MongoReplicaSetClient.new(@rs.repl_set_seeds)
|
134
|
+
|
135
|
+
cursor = client[TEST_DB]['rs-refresh-test'].find
|
136
|
+
client.stubs(:receive_message).raises(ConnectionFailure)
|
137
|
+
client.manager.stubs(:refresh_required?).returns(true)
|
138
|
+
client.manager.stubs(:check_connection_health).returns(true)
|
139
|
+
assert_raise ConnectionFailure do
|
140
|
+
cursor.next
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
126
144
|
=begin
|
127
145
|
def test_automated_refresh_with_removed_node
|
128
146
|
client = MongoReplicaSetClient.new(@rs.repl_set_seeds,
|
@@ -106,37 +106,6 @@ class PoolManagerUnitTest < Test::Unit::TestCase
|
|
106
106
|
assert_equal [['localhost', 27020]], manager.arbiters
|
107
107
|
end
|
108
108
|
|
109
|
-
should "return clones of pool lists" do
|
110
|
-
|
111
|
-
@db.stubs(:command).returns(
|
112
|
-
# First call to get a socket.
|
113
|
-
@ismaster.merge({'ismaster' => true}),
|
114
|
-
|
115
|
-
# Subsequent calls to configure pools.
|
116
|
-
@ismaster.merge({'ismaster' => true}),
|
117
|
-
@ismaster.merge({'secondary' => true, 'maxBsonObjectSize' => 500}),
|
118
|
-
@ismaster.merge({'secondary' => true, 'maxMessageSizeBytes' => 700}),
|
119
|
-
@ismaster.merge({'arbiterOnly' => true})
|
120
|
-
)
|
121
|
-
|
122
|
-
seeds = [['localhost', 27017], ['localhost', 27018]]
|
123
|
-
manager = Mongo::PoolManager.new(@client, seeds)
|
124
|
-
@client.stubs(:local_manager).returns(manager)
|
125
|
-
manager.connect
|
126
|
-
|
127
|
-
assert_not_equal manager.instance_variable_get(:@arbiters).object_id, manager.arbiters.object_id
|
128
|
-
assert_not_equal manager.instance_variable_get(:@secondaries).object_id, manager.secondaries.object_id
|
129
|
-
assert_not_equal manager.instance_variable_get(:@secondary_pools).object_id, manager.secondary_pools.object_id
|
130
|
-
assert_not_equal manager.instance_variable_get(:@hosts).object_id, manager.hosts.object_id
|
131
|
-
assert_not_equal manager.instance_variable_get(:@pools).object_id, manager.pools.object_id
|
132
|
-
|
133
|
-
assert_not_equal manager.instance_variable_get(:@arbiters).object_id, manager.state_snapshot[:arbiters].object_id
|
134
|
-
assert_not_equal manager.instance_variable_get(:@secondaries).object_id, manager.state_snapshot[:secondaries].object_id
|
135
|
-
assert_not_equal manager.instance_variable_get(:@secondary_pools).object_id, manager.state_snapshot[:secondary_pools].object_id
|
136
|
-
assert_not_equal manager.instance_variable_get(:@hosts).object_id, manager.state_snapshot[:hosts].object_id
|
137
|
-
assert_not_equal manager.instance_variable_get(:@pools).object_id, manager.state_snapshot[:pools].object_id
|
138
|
-
end
|
139
|
-
|
140
109
|
end
|
141
110
|
|
142
111
|
end
|
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: 1.10.
|
4
|
+
version: 1.10.2
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Emily Stolfo
|
@@ -34,20 +34,20 @@ cert_chain:
|
|
34
34
|
JrZM8w8wGbIOeLtoQqa7HB/jOYbTahH7KMNh2LHAbOR93hNIJxVRa4iwxiMQ75tN
|
35
35
|
9WUIAJ4AEtjwRg1Bz0OwDo3aucPCBpx77+/FWhv7JYY=
|
36
36
|
-----END CERTIFICATE-----
|
37
|
-
date: 2014-
|
37
|
+
date: 2014-06-16 00:00:00.000000000 Z
|
38
38
|
dependencies:
|
39
39
|
- !ruby/object:Gem::Dependency
|
40
40
|
name: bson
|
41
41
|
version_requirements: !ruby/object:Gem::Requirement
|
42
42
|
requirements:
|
43
|
-
- -
|
43
|
+
- - '='
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: 1.10.
|
45
|
+
version: 1.10.2
|
46
46
|
requirement: !ruby/object:Gem::Requirement
|
47
47
|
requirements:
|
48
|
-
- -
|
48
|
+
- - '='
|
49
49
|
- !ruby/object:Gem::Version
|
50
|
-
version: 1.10.
|
50
|
+
version: 1.10.2
|
51
51
|
prerelease: false
|
52
52
|
type: :runtime
|
53
53
|
description: A Ruby driver for MongoDB. For more information about Mongo, see http://www.mongodb.org.
|
metadata.gz.sig
CHANGED
@@ -1,3 +1,2 @@
|
|
1
|
-
|
2
|
-
��
|
3
|
-
����`Iw�Qm�%��lm��$�Ñyf��F���QG�t��G����7i�q�M2��HRF�#KzǣIR�&�)W�Fx� ��hߟ�]����Ǭ�I�0&�`����Q��$���+�.L�o����G����
|
1
|
+
��6y��GN�N
|
2
|
+
j��
|