mongo 2.2.0 → 2.2.1
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
- data/lib/csasl/csasl.bundle +0 -0
- data/lib/mongo.rb +1 -0
- data/lib/mongo/bson.rb +32 -0
- data/lib/mongo/cursor.rb +8 -2
- data/lib/mongo/error/operation_failure.rb +3 -1
- data/lib/mongo/protocol/message.rb +17 -3
- data/lib/mongo/retryable.rb +6 -1
- data/lib/mongo/server/connectable.rb +1 -1
- data/lib/mongo/server/connection.rb +1 -1
- data/lib/mongo/server/monitor/connection.rb +12 -12
- data/lib/mongo/version.rb +1 -1
- data/spec/mongo/bson_spec.rb +11 -0
- data/spec/mongo/cursor_spec.rb +27 -5
- data/spec/mongo/protocol/reply_spec.rb +11 -0
- data/spec/support/server_discovery_and_monitoring.rb +1 -1
- metadata +8 -26
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- 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: 70bb36aedc302fa28a3103c1216e865448733b54
|
4
|
+
data.tar.gz: 05f39ba3e498bd4763f89ca4ac7b30d9d5b3537f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 704bcf79dd037eeb329fd5e9120d9ead72b80f8bf4897e9260e2b624afad5c280feb0300228cee83b8ff639f97ef288e9dcf4ea7d6aa86b519e2e6f15853e688
|
7
|
+
data.tar.gz: c25ecaaee43f90ee59c501712aa8632802a31136deebc90cebaa6bb31ba419be5ba44ad9ad5f5f1c721bf36c722c6828e65bf340fdf34b41f967a91f0414e7bd
|
Binary file
|
data/lib/mongo.rb
CHANGED
data/lib/mongo/bson.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# Copyright (C) 2015 MongoDB, Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
# Patch for allowing deprecated symbols to be used.
|
16
|
+
#
|
17
|
+
# @since 2.2.1
|
18
|
+
class Symbol
|
19
|
+
|
20
|
+
# Overrides the default BSON type to use the symbol type instead of a
|
21
|
+
# string type.
|
22
|
+
#
|
23
|
+
# @example Get the bson type.
|
24
|
+
# :test.bson_type
|
25
|
+
#
|
26
|
+
# @return [ String ] The charater 14.
|
27
|
+
#
|
28
|
+
# @since 2.2.1
|
29
|
+
def bson_type
|
30
|
+
BSON::Symbol::BSON_TYPE
|
31
|
+
end
|
32
|
+
end
|
data/lib/mongo/cursor.rb
CHANGED
@@ -33,9 +33,11 @@ module Mongo
|
|
33
33
|
class Cursor
|
34
34
|
extend Forwardable
|
35
35
|
include Enumerable
|
36
|
+
include Retryable
|
36
37
|
|
37
38
|
def_delegators :@view, :collection, :limit
|
38
39
|
def_delegators :collection, :client, :database
|
40
|
+
def_delegators :@server, :cluster
|
39
41
|
|
40
42
|
# @return [ Collection::View ] view The collection view.
|
41
43
|
attr_reader :view
|
@@ -157,7 +159,9 @@ module Mongo
|
|
157
159
|
end
|
158
160
|
|
159
161
|
def get_more
|
160
|
-
|
162
|
+
read_with_retry do
|
163
|
+
process(get_more_operation.execute(@server.context))
|
164
|
+
end
|
161
165
|
end
|
162
166
|
|
163
167
|
def get_more_operation
|
@@ -169,7 +173,9 @@ module Mongo
|
|
169
173
|
end
|
170
174
|
|
171
175
|
def kill_cursors
|
172
|
-
|
176
|
+
read_with_retry do
|
177
|
+
kill_cursors_operation.execute(@server.context)
|
178
|
+
end
|
173
179
|
end
|
174
180
|
|
175
181
|
def kill_cursors_operation
|
@@ -32,10 +32,12 @@ module Mongo
|
|
32
32
|
"can't connect",
|
33
33
|
'no master',
|
34
34
|
'not master',
|
35
|
+
'could not contact primary',
|
35
36
|
'connect failed',
|
36
37
|
'error querying',
|
37
38
|
'could not get last error',
|
38
|
-
'connection attempt failed'
|
39
|
+
'connection attempt failed',
|
40
|
+
'interrupted at shutdown'
|
39
41
|
].freeze
|
40
42
|
|
41
43
|
# Can the operation that caused the error be retried?
|
@@ -67,6 +67,11 @@ module Mongo
|
|
67
67
|
# @since 2.2.0
|
68
68
|
Q = 'q'.freeze
|
69
69
|
|
70
|
+
# Default max message size of 48MB.
|
71
|
+
#
|
72
|
+
# @since 2.2.1
|
73
|
+
MAX_MESSAGE_SIZE = 50331648.freeze
|
74
|
+
|
70
75
|
# Returns the request id for the message
|
71
76
|
#
|
72
77
|
# @return [Fixnum] The request id for this message
|
@@ -100,10 +105,19 @@ module Mongo
|
|
100
105
|
|
101
106
|
# Deserializes messages from an IO stream
|
102
107
|
#
|
103
|
-
# @param
|
104
|
-
# @
|
105
|
-
|
108
|
+
# @param [ Integer ] max_message_size The max message size.
|
109
|
+
# @param [ IO ] io Stream containing a message
|
110
|
+
#
|
111
|
+
# @return [ Message ] Instance of a Message class
|
112
|
+
def self.deserialize(io, max_message_size = MAX_MESSAGE_SIZE)
|
106
113
|
length = deserialize_header(BSON::ByteBuffer.new(io.read(16))).first
|
114
|
+
|
115
|
+
# Protection from potential DOS man-in-the-middle attacks. See
|
116
|
+
# DRIVERS-276.
|
117
|
+
if length > max_message_size
|
118
|
+
raise Error::MaxMessageSize.new(max_message_size)
|
119
|
+
end
|
120
|
+
|
107
121
|
buffer = BSON::ByteBuffer.new(io.read(length - 16))
|
108
122
|
message = allocate
|
109
123
|
fields.each do |field|
|
data/lib/mongo/retryable.rb
CHANGED
@@ -24,6 +24,11 @@ module Mongo
|
|
24
24
|
# @since 2.1.0
|
25
25
|
NOT_MASTER = 'not master'.freeze
|
26
26
|
|
27
|
+
# Could not contact primary error message, seen on stepdowns
|
28
|
+
#
|
29
|
+
# @since 2.2.0
|
30
|
+
COULD_NOT_CONTACT_PRIMARY = 'could not contact primary'.freeze
|
31
|
+
|
27
32
|
# Execute a read operation with a retry.
|
28
33
|
#
|
29
34
|
# @api private
|
@@ -83,7 +88,7 @@ module Mongo
|
|
83
88
|
begin
|
84
89
|
block.call
|
85
90
|
rescue Error::OperationFailure => e
|
86
|
-
if e.message.include?(NOT_MASTER)
|
91
|
+
if e.message.include?(NOT_MASTER) || e.message.include?(COULD_NOT_CONTACT_PRIMARY)
|
87
92
|
retry_operation(&block)
|
88
93
|
else
|
89
94
|
raise e
|
@@ -168,7 +168,7 @@ module Mongo
|
|
168
168
|
def ping
|
169
169
|
ensure_connected do |socket|
|
170
170
|
socket.write(PING_BYTES)
|
171
|
-
reply = Protocol::Reply.deserialize(socket)
|
171
|
+
reply = Protocol::Reply.deserialize(socket, max_message_size)
|
172
172
|
reply.documents[0][Operation::Result::OK] == 1
|
173
173
|
end
|
174
174
|
end
|
@@ -57,18 +57,6 @@ module Mongo
|
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
60
|
-
# Get the connection timeout.
|
61
|
-
#
|
62
|
-
# @example Get the connection timeout.
|
63
|
-
# connection.timeout
|
64
|
-
#
|
65
|
-
# @return [ Float ] The connection timeout in seconds.
|
66
|
-
#
|
67
|
-
# @since 2.0.0
|
68
|
-
def timeout
|
69
|
-
@timeout ||= options[:connect_timeout] || CONNECT_TIMEOUT
|
70
|
-
end
|
71
|
-
|
72
60
|
# Tell the underlying socket to establish a connection to the host.
|
73
61
|
#
|
74
62
|
# @example Connect to the host.
|
@@ -128,6 +116,18 @@ module Mongo
|
|
128
116
|
@socket = nil
|
129
117
|
@pid = Process.pid
|
130
118
|
end
|
119
|
+
|
120
|
+
# Get the connection timeout.
|
121
|
+
#
|
122
|
+
# @example Get the connection timeout.
|
123
|
+
# connection.timeout
|
124
|
+
#
|
125
|
+
# @return [ Float ] The connection timeout in seconds.
|
126
|
+
#
|
127
|
+
# @since 2.0.0
|
128
|
+
def timeout
|
129
|
+
@timeout ||= options[:connect_timeout] || CONNECT_TIMEOUT
|
130
|
+
end
|
131
131
|
end
|
132
132
|
end
|
133
133
|
end
|
data/lib/mongo/version.rb
CHANGED
data/spec/mongo/cursor_spec.rb
CHANGED
@@ -61,13 +61,35 @@ describe Mongo::Cursor do
|
|
61
61
|
authorized_collection.delete_many
|
62
62
|
end
|
63
63
|
|
64
|
-
|
65
|
-
|
64
|
+
context 'when a getmore gets a socket error' do
|
65
|
+
|
66
|
+
let(:op) do
|
67
|
+
double('operation')
|
68
|
+
end
|
69
|
+
|
70
|
+
before do
|
71
|
+
expect(cursor).to receive(:get_more_operation).and_return(op).ordered
|
72
|
+
expect(op).to receive(:execute).and_raise(Mongo::Error::SocketError).ordered
|
73
|
+
expect(cursor).to receive(:get_more_operation).and_call_original.ordered
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'iterates the documents' do
|
77
|
+
cursor.each do |doc|
|
78
|
+
expect(doc).to have_key('field')
|
79
|
+
end
|
80
|
+
end
|
66
81
|
end
|
67
82
|
|
68
|
-
|
69
|
-
|
70
|
-
|
83
|
+
context 'when no errors occur' do
|
84
|
+
|
85
|
+
it 'returns the correct amount' do
|
86
|
+
expect(cursor.to_a.count).to eq(102)
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'iterates the documents' do
|
90
|
+
cursor.each do |doc|
|
91
|
+
expect(doc).to have_key('field')
|
92
|
+
end
|
71
93
|
end
|
72
94
|
end
|
73
95
|
end
|
@@ -86,6 +86,17 @@ describe Mongo::Protocol::Reply do
|
|
86
86
|
|
87
87
|
describe '#deserialize' do
|
88
88
|
|
89
|
+
context 'when the message size is greater than the max message size' do
|
90
|
+
|
91
|
+
let(:length) { Mongo::Protocol::Message::MAX_MESSAGE_SIZE + 1 }
|
92
|
+
|
93
|
+
it 'raises a max message size error' do
|
94
|
+
expect {
|
95
|
+
reply
|
96
|
+
}.to raise_error(Mongo::Error::MaxMessageSize)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
89
100
|
describe 'response flags' do
|
90
101
|
|
91
102
|
context 'no flags' do
|
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: 2.2.
|
4
|
+
version: 2.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tyler Brock
|
@@ -9,30 +9,8 @@ authors:
|
|
9
9
|
- Durran Jordan
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
|
-
cert_chain:
|
13
|
-
-
|
14
|
-
-----BEGIN CERTIFICATE-----
|
15
|
-
MIIDfDCCAmSgAwIBAgIBATANBgkqhkiG9w0BAQUFADBCMRQwEgYDVQQDDAtkcml2
|
16
|
-
ZXItcnVieTEVMBMGCgmSJomT8ixkARkWBTEwZ2VuMRMwEQYKCZImiZPyLGQBGRYD
|
17
|
-
Y29tMB4XDTE1MTIwNzE1MTcyNloXDTE2MTIwNjE1MTcyNlowQjEUMBIGA1UEAwwL
|
18
|
-
ZHJpdmVyLXJ1YnkxFTATBgoJkiaJk/IsZAEZFgUxMGdlbjETMBEGCgmSJomT8ixk
|
19
|
-
ARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFdSAa8fRm1
|
20
|
-
bAM9za6Z0fAH4g02bqM1NGnw8zJQrE/PFrFfY6IFCT2AsLfOwr1maVm7iU1+kdVI
|
21
|
-
IQ+iI/9+E+ArJ+rbGV3dDPQ+SLl3mLT+vXjfjcxMqI2IW6UuVtt2U3Rxd4QU0kdT
|
22
|
-
JxmcPYs5fDN6BgYc6XXgUjy3m+Kwha2pGctdciUOwEfOZ4RmNRlEZKCMLRHdFP8j
|
23
|
-
4WTnJSGfXDiuoXICJb5yOPOZPuaapPSNXp93QkUdsqdKC32I+KMpKKYGBQ6yisfA
|
24
|
-
5MyVPPCzLR1lP5qXVGJPnOqUAkvEUfCahg7EP9tI20qxiXrR6TSEraYhIFXL0EGY
|
25
|
-
u8KAcPHm5KkCAwEAAaN9MHswCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0O
|
26
|
-
BBYEFFt3WbF+9JpUjAoj62cQBgNb8HzXMCAGA1UdEQQZMBeBFWRyaXZlci1ydWJ5
|
27
|
-
QDEwZ2VuLmNvbTAgBgNVHRIEGTAXgRVkcml2ZXItcnVieUAxMGdlbi5jb20wDQYJ
|
28
|
-
KoZIhvcNAQEFBQADggEBAL/5shZXBvCGGJcJqXyD2CJieOOH4EGUt/UKvSZ58lMz
|
29
|
-
QkW5aKG22GJbXesMq+dMm/+gzUB2ea9TzttBEE5ZM/eNvoxyf7yNUcFyLQ365S6P
|
30
|
-
rtQOj1Ms7ud5ffrhZJn1o7ayfY2ljQU0xLI2Yoyzl9XJq8U0TztS6Vk5wYIoLwUX
|
31
|
-
NWGRSbETPJyR4mtUEbgI5A+N7pakJPUKKK1zXzADflsx51jjP5rZJJltnoVsBBgN
|
32
|
-
EhIn2f8suSc9QAqYt7w4T+PMtjxWTVcXs+Uy2PbDtjhtEBz6ZsP6YSsOpJbrCjCV
|
33
|
-
wZtXjpRUvWz86V5vjhHCTE8fqfEb85aeDwUCckPzpio=
|
34
|
-
-----END CERTIFICATE-----
|
35
|
-
date: 2015-12-07 00:00:00.000000000 Z
|
12
|
+
cert_chain: []
|
13
|
+
date: 2015-12-16 00:00:00.000000000 Z
|
36
14
|
dependencies:
|
37
15
|
- !ruby/object:Gem::Dependency
|
38
16
|
name: bson
|
@@ -59,6 +37,7 @@ files:
|
|
59
37
|
- README.md
|
60
38
|
- Rakefile
|
61
39
|
- bin/mongo_console
|
40
|
+
- lib/csasl/csasl.bundle
|
62
41
|
- lib/mongo.rb
|
63
42
|
- lib/mongo/address.rb
|
64
43
|
- lib/mongo/address/ipv4.rb
|
@@ -76,6 +55,7 @@ files:
|
|
76
55
|
- lib/mongo/auth/user/view.rb
|
77
56
|
- lib/mongo/auth/x509.rb
|
78
57
|
- lib/mongo/auth/x509/conversation.rb
|
58
|
+
- lib/mongo/bson.rb
|
79
59
|
- lib/mongo/bulk_write.rb
|
80
60
|
- lib/mongo/bulk_write/combineable.rb
|
81
61
|
- lib/mongo/bulk_write/ordered_combiner.rb
|
@@ -304,6 +284,7 @@ files:
|
|
304
284
|
- spec/mongo/auth/user_spec.rb
|
305
285
|
- spec/mongo/auth/x509_spec.rb
|
306
286
|
- spec/mongo/auth_spec.rb
|
287
|
+
- spec/mongo/bson_spec.rb
|
307
288
|
- spec/mongo/bulk_write/ordered_combiner_spec.rb
|
308
289
|
- spec/mongo/bulk_write/unordered_combiner_spec.rb
|
309
290
|
- spec/mongo/bulk_write_spec.rb
|
@@ -568,7 +549,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
568
549
|
version: '0'
|
569
550
|
requirements: []
|
570
551
|
rubyforge_project:
|
571
|
-
rubygems_version: 2.4.
|
552
|
+
rubygems_version: 2.4.5.1
|
572
553
|
signing_key:
|
573
554
|
specification_version: 4
|
574
555
|
summary: Ruby driver for MongoDB
|
@@ -586,6 +567,7 @@ test_files:
|
|
586
567
|
- spec/mongo/auth/user_spec.rb
|
587
568
|
- spec/mongo/auth/x509_spec.rb
|
588
569
|
- spec/mongo/auth_spec.rb
|
570
|
+
- spec/mongo/bson_spec.rb
|
589
571
|
- spec/mongo/bulk_write/ordered_combiner_spec.rb
|
590
572
|
- spec/mongo/bulk_write/unordered_combiner_spec.rb
|
591
573
|
- spec/mongo/bulk_write_spec.rb
|
checksums.yaml.gz.sig
DELETED
Binary file
|
data.tar.gz.sig
DELETED
Binary file
|
metadata.gz.sig
DELETED
Binary file
|