mongo 1.12.0.rc1 → 1.12.0.rc2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/VERSION +1 -1
- data/lib/mongo/collection.rb +4 -2
- data/lib/mongo/cursor.rb +9 -6
- data/lib/mongo/db.rb +39 -4
- data/test/functional/collection_test.rb +12 -0
- data/test/functional/cursor_test.rb +17 -17
- data/test/unit/cursor_test.rb +10 -2
- metadata +4 -4
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 07c50e679638684c8277ec5ddd42f271cce1483e
|
4
|
+
data.tar.gz: e64b8dc7593cb392f7b5cbefec0d8a4f3e762579
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 75165e8744c3f9429898d168bbc22a454942511fb6eae921e8191ea851fb4f307a59eab075d4cfc14bbc299e4852a1865be48a6bce40a077f81612f5f4162597
|
7
|
+
data.tar.gz: 78d4dedec4689c70597d4ddaed620e43d57c0fa24fd48a6ea2ea53f182026faebb980dec2dcbfb1ffdc53fc666cae322f377733a18e96e248553bea166371044
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.12.0.
|
1
|
+
1.12.0.rc2
|
data/lib/mongo/collection.rb
CHANGED
@@ -729,7 +729,8 @@ module Mongo
|
|
729
729
|
seed = {
|
730
730
|
:cursor_id => cursor_info['id'],
|
731
731
|
:first_batch => cursor_info['firstBatch'],
|
732
|
-
:pool => pinned_pool
|
732
|
+
:pool => pinned_pool,
|
733
|
+
:ns => cursor_info['ns']
|
733
734
|
}
|
734
735
|
|
735
736
|
return Cursor.new(self, seed.merge!(opts))
|
@@ -901,7 +902,8 @@ module Mongo
|
|
901
902
|
seed = {
|
902
903
|
:cursor_id => cursor_info['cursor']['id'],
|
903
904
|
:first_batch => cursor_info['cursor']['firstBatch'],
|
904
|
-
:pool => pinned_pool
|
905
|
+
:pool => pinned_pool,
|
906
|
+
:ns => cursor_info['ns']
|
905
907
|
}
|
906
908
|
Cursor.new(self, seed.merge!(opts))
|
907
909
|
end
|
data/lib/mongo/cursor.rb
CHANGED
@@ -23,8 +23,7 @@ module Mongo
|
|
23
23
|
include Mongo::ReadPreference
|
24
24
|
|
25
25
|
attr_reader :collection, :selector, :fields,
|
26
|
-
:order, :hint, :snapshot, :timeout,
|
27
|
-
:full_collection_name, :transformer,
|
26
|
+
:order, :hint, :snapshot, :timeout, :transformer,
|
28
27
|
:options, :cursor_id, :show_disk_loc,
|
29
28
|
:comment, :compile_regex, :read, :tag_sets,
|
30
29
|
:acceptable_latency
|
@@ -40,6 +39,7 @@ module Mongo
|
|
40
39
|
@cursor_id = opts.delete(:cursor_id)
|
41
40
|
@db = collection.db
|
42
41
|
@collection = collection
|
42
|
+
@ns = opts.delete(:ns)
|
43
43
|
@connection = @db.connection
|
44
44
|
@logger = @connection.logger
|
45
45
|
|
@@ -83,7 +83,6 @@ module Mongo
|
|
83
83
|
|
84
84
|
batch_size(opts.delete(:batch_size) || 0)
|
85
85
|
|
86
|
-
@full_collection_name = "#{@collection.db.name}.#{@collection.name}"
|
87
86
|
@cache = opts.delete(:first_batch) || []
|
88
87
|
@returned = 0
|
89
88
|
|
@@ -124,6 +123,10 @@ module Mongo
|
|
124
123
|
@cursor_id && @cursor_id != 0
|
125
124
|
end
|
126
125
|
|
126
|
+
def full_collection_name
|
127
|
+
@ns || "#{@collection.db.name}.#{@collection.name}"
|
128
|
+
end
|
129
|
+
|
127
130
|
# Get the next document specified the cursor options.
|
128
131
|
#
|
129
132
|
# @return [Hash, Nil] the next document or Nil if no documents remain.
|
@@ -484,7 +487,7 @@ module Mongo
|
|
484
487
|
|
485
488
|
# Clean output for inspect.
|
486
489
|
def inspect
|
487
|
-
"<Mongo::Cursor:0x#{object_id.to_s(16)} namespace='#{
|
490
|
+
"<Mongo::Cursor:0x#{object_id.to_s(16)} namespace='#{full_collection_name}' " +
|
488
491
|
"@selector=#{@selector.inspect} @cursor_id=#{@cursor_id}>"
|
489
492
|
end
|
490
493
|
|
@@ -580,7 +583,7 @@ module Mongo
|
|
580
583
|
message = BSON::ByteBuffer.new([0, 0, 0, 0])
|
581
584
|
|
582
585
|
# DB name.
|
583
|
-
BSON::BSON_RUBY.serialize_cstr(message,
|
586
|
+
BSON::BSON_RUBY.serialize_cstr(message, full_collection_name)
|
584
587
|
|
585
588
|
# Number of results to return.
|
586
589
|
if @limit > 0
|
@@ -636,7 +639,7 @@ module Mongo
|
|
636
639
|
def construct_query_message
|
637
640
|
message = BSON::ByteBuffer.new("", @connection.max_bson_size + MongoClient::COMMAND_HEADROOM)
|
638
641
|
message.put_int(@options)
|
639
|
-
BSON::BSON_RUBY.serialize_cstr(message,
|
642
|
+
BSON::BSON_RUBY.serialize_cstr(message, full_collection_name)
|
640
643
|
message.put_int(@skip)
|
641
644
|
@batch_size > 1 ? message.put_int(@batch_size) : message.put_int(@limit)
|
642
645
|
if query_contains_special_fields? && @bson # costs two serialize calls
|
data/lib/mongo/db.rb
CHANGED
@@ -289,7 +289,23 @@ module Mongo
|
|
289
289
|
if @client.wire_version_feature?(Mongo::MongoClient::MONGODB_2_8)
|
290
290
|
cmd = BSON::OrderedHash[:listCollections, 1]
|
291
291
|
cmd.merge!(:filter => { :name => coll_name }) if coll_name
|
292
|
-
self.command(cmd)
|
292
|
+
result = self.command(cmd, :cursor => {})
|
293
|
+
if result.key?('cursor')
|
294
|
+
cursor_info = result['cursor']
|
295
|
+
pinned_pool = @client.pinned_pool
|
296
|
+
pinned_pool = pinned_pool[:pool] if pinned_pool.respond_to?(:keys)
|
297
|
+
|
298
|
+
seed = {
|
299
|
+
:cursor_id => cursor_info['id'],
|
300
|
+
:first_batch => cursor_info['firstBatch'],
|
301
|
+
:pool => pinned_pool,
|
302
|
+
:ns => cursor_info['ns']
|
303
|
+
}
|
304
|
+
|
305
|
+
Cursor.new(Collection.new('$cmd', self), seed).to_a
|
306
|
+
else
|
307
|
+
result['collections']
|
308
|
+
end
|
293
309
|
else
|
294
310
|
legacy_collections_info(coll_name).to_a
|
295
311
|
end
|
@@ -493,11 +509,27 @@ module Mongo
|
|
493
509
|
# defining the index.
|
494
510
|
def index_information(collection_name)
|
495
511
|
if @client.wire_version_feature?(Mongo::MongoClient::MONGODB_2_8)
|
496
|
-
result = self.command(:listIndexes => collection_name)
|
512
|
+
result = self.command({ :listIndexes => collection_name }, :cursor => {})
|
513
|
+
if result.key?('cursor')
|
514
|
+
cursor_info = result['cursor']
|
515
|
+
pinned_pool = @client.pinned_pool
|
516
|
+
pinned_pool = pinned_pool[:pool] if pinned_pool.respond_to?(:keys)
|
517
|
+
|
518
|
+
seed = {
|
519
|
+
:cursor_id => cursor_info['id'],
|
520
|
+
:first_batch => cursor_info['firstBatch'],
|
521
|
+
:pool => pinned_pool,
|
522
|
+
:ns => cursor_info['ns']
|
523
|
+
}
|
524
|
+
|
525
|
+
indexes = Cursor.new(Collection.new('$cmd', self), seed).to_a
|
526
|
+
else
|
527
|
+
indexes = result['indexes']
|
528
|
+
end
|
497
529
|
else
|
498
|
-
|
530
|
+
indexes = legacy_list_indexes(collection_name)
|
499
531
|
end
|
500
|
-
|
532
|
+
indexes.reduce({}) do |info, index|
|
501
533
|
info.merge!(index['name'] => index)
|
502
534
|
end
|
503
535
|
end
|
@@ -589,6 +621,9 @@ module Mongo
|
|
589
621
|
end.join('; ')
|
590
622
|
message << ').'
|
591
623
|
code = result['code'] || result['assertionCode']
|
624
|
+
if result['writeErrors']
|
625
|
+
code = result['writeErrors'].first['code']
|
626
|
+
end
|
592
627
|
raise ExecutionTimeout.new(message, code, result) if code == MAX_TIME_MS_CODE
|
593
628
|
raise OperationFailure.new(message, code, result)
|
594
629
|
end
|
@@ -345,6 +345,18 @@ class CollectionTest < Test::Unit::TestCase
|
|
345
345
|
end
|
346
346
|
end
|
347
347
|
|
348
|
+
def test_error_code
|
349
|
+
coll = @db['test-error-code']
|
350
|
+
coll.ensure_index(BSON::OrderedHash[:x, Mongo::ASCENDING], { :unique => true })
|
351
|
+
coll.save(:x => 2)
|
352
|
+
begin
|
353
|
+
coll.save(:x => 2)
|
354
|
+
rescue => ex
|
355
|
+
assert_not_nil ex.error_code
|
356
|
+
end
|
357
|
+
coll.drop
|
358
|
+
end
|
359
|
+
|
348
360
|
def test_aggregation_cursor
|
349
361
|
return unless @version >= '2.5.1'
|
350
362
|
[10, 1000].each do |size|
|
@@ -468,21 +468,19 @@ class CursorTest < Test::Unit::TestCase
|
|
468
468
|
def test_kill_cursors
|
469
469
|
@coll.drop
|
470
470
|
|
471
|
-
client_cursors = @db
|
471
|
+
client_cursors = cursor_count(@db)
|
472
472
|
|
473
473
|
10000.times do |i|
|
474
474
|
@coll.insert("i" => i)
|
475
475
|
end
|
476
476
|
|
477
|
-
assert_equal(client_cursors,
|
478
|
-
@db.command("cursorInfo" => 1)["clientCursors_size"])
|
477
|
+
assert_equal(client_cursors, cursor_count(@db))
|
479
478
|
|
480
479
|
10.times do |i|
|
481
480
|
@coll.find_one()
|
482
481
|
end
|
483
482
|
|
484
|
-
assert_equal(client_cursors,
|
485
|
-
@db.command("cursorInfo" => 1)["clientCursors_size"])
|
483
|
+
assert_equal(client_cursors, cursor_count(@db))
|
486
484
|
|
487
485
|
10.times do |i|
|
488
486
|
a = @coll.find()
|
@@ -490,38 +488,32 @@ class CursorTest < Test::Unit::TestCase
|
|
490
488
|
a.close()
|
491
489
|
end
|
492
490
|
|
493
|
-
assert_equal(client_cursors,
|
494
|
-
@db.command("cursorInfo" => 1)["clientCursors_size"])
|
491
|
+
assert_equal(client_cursors, cursor_count(@db))
|
495
492
|
|
496
493
|
a = @coll.find()
|
497
494
|
a.next_document
|
498
495
|
|
499
|
-
assert_not_equal(client_cursors,
|
500
|
-
@db.command("cursorInfo" => 1)["clientCursors_size"])
|
496
|
+
assert_not_equal(client_cursors, cursor_count(@db))
|
501
497
|
|
502
498
|
a.close()
|
503
499
|
|
504
|
-
assert_equal(client_cursors,
|
505
|
-
@db.command("cursorInfo" => 1)["clientCursors_size"])
|
500
|
+
assert_equal(client_cursors, cursor_count(@db))
|
506
501
|
|
507
502
|
a = @coll.find({}, :limit => 10).next_document
|
508
503
|
|
509
|
-
assert_equal(client_cursors,
|
510
|
-
@db.command("cursorInfo" => 1)["clientCursors_size"])
|
504
|
+
assert_equal(client_cursors, cursor_count(@db))
|
511
505
|
|
512
506
|
@coll.find() do |cursor|
|
513
507
|
cursor.next_document
|
514
508
|
end
|
515
509
|
|
516
|
-
assert_equal(client_cursors,
|
517
|
-
@db.command("cursorInfo" => 1)["clientCursors_size"])
|
510
|
+
assert_equal(client_cursors, cursor_count(@db))
|
518
511
|
|
519
512
|
@coll.find() { |cursor|
|
520
513
|
cursor.next_document
|
521
514
|
}
|
522
515
|
|
523
|
-
assert_equal(client_cursors,
|
524
|
-
@db.command("cursorInfo" => 1)["clientCursors_size"])
|
516
|
+
assert_equal(client_cursors, cursor_count(@db))
|
525
517
|
end
|
526
518
|
|
527
519
|
def test_count_with_fields
|
@@ -680,4 +672,12 @@ class CursorTest < Test::Unit::TestCase
|
|
680
672
|
assert_instance_of(klass, instance)
|
681
673
|
end
|
682
674
|
end
|
675
|
+
|
676
|
+
def cursor_count(db)
|
677
|
+
if @version > '2.6.0'
|
678
|
+
db.command("serverStatus" => 1)["metrics"]["cursor"]["open"]["total"]
|
679
|
+
else
|
680
|
+
db.command("cursorInfo" => 1)["clientCursors_size"]
|
681
|
+
end
|
682
|
+
end
|
683
683
|
end
|
data/test/unit/cursor_test.rb
CHANGED
@@ -138,7 +138,15 @@ class CursorUnitTest < Test::Unit::TestCase
|
|
138
138
|
assert_equal 100, @cursor.batch_size
|
139
139
|
end
|
140
140
|
|
141
|
-
context
|
141
|
+
context 'when an alternate namespace is specified' do
|
142
|
+
|
143
|
+
should 'use the alternate namespace' do
|
144
|
+
cursor = Cursor.new(@collection, :ns => 'other_db.other_collection')
|
145
|
+
assert_equal('other_db.other_collection', cursor.full_collection_name)
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
context "connected to mongos" do
|
142
150
|
setup do
|
143
151
|
@connection.stubs(:mongos?).returns(true)
|
144
152
|
@tag_sets = [{:dc => "ny"}]
|
@@ -211,7 +219,7 @@ class CursorUnitTest < Test::Unit::TestCase
|
|
211
219
|
end
|
212
220
|
end
|
213
221
|
|
214
|
-
context "not
|
222
|
+
context "not connected to mongos" do
|
215
223
|
setup do
|
216
224
|
@connection.stubs(:mongos?).returns(false)
|
217
225
|
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.12.0.
|
4
|
+
version: 1.12.0.rc2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Emily Stolfo
|
@@ -34,7 +34,7 @@ cert_chain:
|
|
34
34
|
JrZM8w8wGbIOeLtoQqa7HB/jOYbTahH7KMNh2LHAbOR93hNIJxVRa4iwxiMQ75tN
|
35
35
|
9WUIAJ4AEtjwRg1Bz0OwDo3aucPCBpx77+/FWhv7JYY=
|
36
36
|
-----END CERTIFICATE-----
|
37
|
-
date: 2014-12-
|
37
|
+
date: 2014-12-19 00:00:00.000000000 Z
|
38
38
|
dependencies:
|
39
39
|
- !ruby/object:Gem::Dependency
|
40
40
|
name: bson
|
@@ -42,14 +42,14 @@ dependencies:
|
|
42
42
|
requirements:
|
43
43
|
- - '='
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: 1.12.0.
|
45
|
+
version: 1.12.0.rc2
|
46
46
|
type: :runtime
|
47
47
|
prerelease: false
|
48
48
|
version_requirements: !ruby/object:Gem::Requirement
|
49
49
|
requirements:
|
50
50
|
- - '='
|
51
51
|
- !ruby/object:Gem::Version
|
52
|
-
version: 1.12.0.
|
52
|
+
version: 1.12.0.rc2
|
53
53
|
description: A Ruby driver for MongoDB. For more information about Mongo, see http://www.mongodb.org.
|
54
54
|
email: mongodb-dev@googlegroups.com
|
55
55
|
executables:
|
metadata.gz.sig
CHANGED
Binary file
|