mongo 1.10.0 → 1.10.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a4f4eaa561f3080eb698ae91915d4dfed3688a66
4
- data.tar.gz: 4d7a8a0c5bb407d5433e641206b579bf44baee13
3
+ metadata.gz: 5c4b605a3e5313f94d6b6ea757c823eff8474def
4
+ data.tar.gz: 91e2b48a46fda17e05c59dbec5a2fd8f6ea7ada1
5
5
  SHA512:
6
- metadata.gz: 63f4d172c84188ac600cf15b2a6c2336eb960d08b695725ab9a99234d2bb1023e32c10b56a38a9e907c790b6ec213f317551dfadca0cd2d2e9f2830d40b8e51e
7
- data.tar.gz: 8f7b36deea7ccdd8a72f43864cc15e6bfc0f6f74a01322b506940029a93dad5bb78ff3c7090c72fd473f5dc4430a95e6808a5d3f753b42aa3e87e363f0a5134c
6
+ metadata.gz: 12c90d51b5f44b11721f85e043565238dbfa483301c7448df034516a4facd51aa3c486feb2a4b60e822c9f10f154a2d2ea92bf2aebefa6a33ea8e1c3bf78258f
7
+ data.tar.gz: 9d3ffaa70dec92c43b5dcc43cc14183a9a7537ed0e2f1526f63e4ff9b2e648e99fff7b280828a0bb0e31d1740df86ba76320c33a24a2181a635028d8b8cae6bc
Binary file
data.tar.gz.sig CHANGED
Binary file
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.10.0
1
+ 1.10.1
@@ -62,9 +62,15 @@ module Mongo
62
62
  BAD_VALUE = 2
63
63
  UNKNOWN_ERROR = 8
64
64
  INVALID_BSON = 22
65
- COMMAND_NOT_FOUND = 59
66
65
  WRITE_CONCERN_FAILED = 64
67
66
  MULTIPLE_ERRORS_OCCURRED = 65
67
+
68
+ # mongod/s 2.6 and above return code 59 when a command doesn't exist.
69
+ # mongod versions previous to 2.6 and mongos 2.4.x return no error code
70
+ # when a command does exist.
71
+ # mongos versions previous to 2.4.0 return code 13390 when a command
72
+ # does not exist.
73
+ COMMAND_NOT_FOUND_CODES = [nil, 59, 13390]
68
74
  end
69
75
  end
70
76
 
@@ -1130,7 +1130,7 @@ module Mongo
1130
1130
  cmd = BSON::OrderedHash[:createIndexes, @name, :indexes, [selector]]
1131
1131
  @db.command(cmd)
1132
1132
  rescue Mongo::OperationFailure => ex
1133
- if ex.error_code == Mongo::ErrorCode::COMMAND_NOT_FOUND || ex.error_code.nil?
1133
+ if Mongo::ErrorCode::COMMAND_NOT_FOUND_CODES.include?(ex.error_code)
1134
1134
  selector[:ns] = "#{@db.name}.#{@name}"
1135
1135
  send_write(:insert, nil, selector, false, {:w => 1}, Mongo::DB::SYSTEM_INDEX_COLLECTION)
1136
1136
  else
@@ -139,7 +139,7 @@ module Mongo
139
139
  doc = @cache.shift
140
140
 
141
141
  if doc && (err = doc['errmsg'] || doc['$err']) # assignment
142
- code = doc['code']
142
+ code = doc['code'] || doc['assertionCode']
143
143
 
144
144
  # If the server has stopped being the master (e.g., it's one of a
145
145
  # pair but it has died or something like that) then we close that
@@ -225,7 +225,7 @@ module Mongo
225
225
  # MongoDB 2.4.7 so we assume that a nil error code means the usersInfo
226
226
  # command doesn't exist and we should fall back to the legacy add user code.
227
227
  rescue OperationFailure => ex
228
- raise ex unless ex.error_code == Mongo::ErrorCode::COMMAND_NOT_FOUND || ex.error_code.nil?
228
+ raise ex unless Mongo::ErrorCode::COMMAND_NOT_FOUND_CODES.include?(ex.error_code)
229
229
  return legacy_add_user(username, password, read_only, opts)
230
230
  end
231
231
 
@@ -246,7 +246,7 @@ module Mongo
246
246
  begin
247
247
  command(:dropUser => username)
248
248
  rescue OperationFailure => ex
249
- raise ex unless ex.error_code == Mongo::ErrorCode::COMMAND_NOT_FOUND || ex.error_code.nil?
249
+ raise ex unless Mongo::ErrorCode::COMMAND_NOT_FOUND_CODES.include?(ex.error_code)
250
250
  response = self[SYSTEM_USER_COLLECTION].remove({:user => username}, :w => 1)
251
251
  response.key?('n') && response['n'] > 0 ? response : false
252
252
  end
@@ -125,6 +125,12 @@ module Mongo
125
125
  :wtimeoutms => lambda { |arg| arg.to_i }
126
126
  }
127
127
 
128
+ OPT_CASE_SENSITIVE = [ :authsource,
129
+ :gssapiservicename,
130
+ :replicaset,
131
+ :w
132
+ ]
133
+
128
134
  attr_reader :auths,
129
135
  :authmechanism,
130
136
  :authsource,
@@ -348,7 +354,8 @@ module Mongo
348
354
 
349
355
  opts = CGI.parse(string_opts).inject({}) do |memo, (key, value)|
350
356
  value = value.first
351
- memo[key.downcase.to_sym] = value.strip.downcase
357
+ key_sym = key.downcase.to_sym
358
+ memo[key_sym] = OPT_CASE_SENSITIVE.include?(key_sym) ? value.strip : value.strip.downcase
352
359
  memo
353
360
  end
354
361
 
@@ -471,7 +471,8 @@ module Mongo
471
471
  end
472
472
 
473
473
  def max_write_batch_size
474
- local_manager && local_manager.primary_pool && local_manager.primary_pool.node.max_write_batch_size
474
+ local_manager && local_manager.primary_pool && local_manager.primary_pool.node.max_write_batch_size ||
475
+ DEFAULT_MAX_WRITE_BATCH_SIZE
475
476
  end
476
477
 
477
478
  private
@@ -100,7 +100,7 @@ module Mongo
100
100
  if error && error.include?("not master")
101
101
  close
102
102
  raise ConnectionFailure.new(docs[0]['code'].to_s + ': ' + error, docs[0]['code'], docs[0])
103
- elsif (note = docs[0]['jnote'] || docs[0]['wnote']) # assignment
103
+ elsif (!error.nil? && note = docs[0]['jnote'] || docs[0]['wnote']) # assignment
104
104
  code = docs[0]['code'] || Mongo::ErrorCode::BAD_VALUE # as of server version 2.5.5
105
105
  raise WriteConcernError.new(code.to_s + ': ' + note, code, docs[0])
106
106
  elsif error
@@ -3,7 +3,7 @@ Gem::Specification.new do |s|
3
3
 
4
4
  s.version = File.read(File.join(File.dirname(__FILE__), 'VERSION'))
5
5
  s.platform = Gem::Platform::RUBY
6
- s.authors = ['Tyler Brock', 'Gary Murakami', 'Emily Stolfo', 'Brandon Black', 'Durran Jordan']
6
+ s.authors = ['Emily Stolfo', 'Durran Jordan', 'Gary Murakami', 'Tyler Brock', 'Brandon Black']
7
7
  s.email = 'mongodb-dev@googlegroups.com'
8
8
  s.homepage = 'http://www.mongodb.org'
9
9
  s.summary = 'Ruby driver for MongoDB'
@@ -22,6 +22,11 @@ Gem::Specification.new do |s|
22
22
  s.files += ['README.md', 'Rakefile', 'bin/mongo_console']
23
23
  s.files += ['lib/mongo.rb'] + Dir['lib/mongo/**/*.rb']
24
24
 
25
+ if RUBY_PLATFORM =~ /java/
26
+ s.platform = 'java'
27
+ s.files << 'ext/jsasl/target/jsasl.jar'
28
+ end
29
+
25
30
  s.test_files = Dir['test/**/*.rb'] - Dir['test/bson/*']
26
31
  s.executables = ['mongo_console']
27
32
  s.require_paths = ['lib']
@@ -855,11 +855,12 @@ class CollectionTest < Test::Unit::TestCase
855
855
  end
856
856
  end
857
857
 
858
- def test_wnote_raises_exception
858
+ def test_wnote_raises_exception_with_err_not_nil
859
859
  ex = assert_raise Mongo::WriteConcernError do
860
860
  @@test.insert({:foo => 1}, :w => 2)
861
861
  end
862
862
  result = ex.result
863
+ assert_not_nil result["err"]
863
864
  assert_true result.has_key?("wnote")
864
865
  end
865
866
  end
@@ -189,7 +189,7 @@ class DBTest < Test::Unit::TestCase
189
189
  @@db.command(command)
190
190
  rescue => ex
191
191
  raised = true
192
- assert ex.message.include?("forced error"),
192
+ assert ex.message.include?("forced error") || ex.result.has_key?("assertion") && ex.result["assertion"].include?("forced error"),
193
193
  "error message does not contain 'forced error'"
194
194
  assert_equal 10038, ex.error_code
195
195
 
@@ -319,16 +319,18 @@ class DBTest < Test::Unit::TestCase
319
319
  end
320
320
 
321
321
  should "return profiling info" do
322
- @db.profiling_level = :all
323
- @coll.find()
324
- @db.profiling_level = :off
325
-
326
- info = @db.profiling_info
327
- assert_kind_of Array, info
328
- assert info.length >= 1
329
- first = info.first
330
- assert_kind_of Time, first['ts']
331
- assert_kind_of Numeric, first['millis']
322
+ if @@version >= "2.2"
323
+ @db.profiling_level = :all
324
+ @coll.find()
325
+ @db.profiling_level = :off
326
+
327
+ info = @db.profiling_info
328
+ assert_kind_of Array, info
329
+ assert info.length >= 1
330
+ first = info.first
331
+ assert_kind_of Time, first['ts']
332
+ assert_kind_of Numeric, first['millis']
333
+ end
332
334
  end
333
335
 
334
336
  should "validate collection" do
@@ -327,4 +327,16 @@ class URITest < Test::Unit::TestCase
327
327
  assert_equal true, parser.auths.first[:extra][:canonicalize_host_name]
328
328
  end
329
329
 
330
+ def test_opts_case_sensitivity
331
+ # options gssapiservicename, authsource, replicaset, w should be case sensitive
332
+ uri = "mongodb://localhost?gssapiServiceName=MongoDB;" +
333
+ "authSource=FooBar;" +
334
+ "replicaSet=Foo;" +
335
+ "w=Majority"
336
+ parser = Mongo::URIParser.new(uri)
337
+ assert_equal 'MongoDB', parser.gssapiservicename
338
+ assert_equal 'FooBar', parser.authsource
339
+ assert_equal 'Foo', parser.replicaset
340
+ assert_equal :Majority, parser.w
341
+ end
330
342
  end
@@ -306,6 +306,13 @@ class Test::Unit::TestCase
306
306
  def batch_commands?(wire_version)
307
307
  wire_version >= Mongo::MongoClient::BATCH_COMMANDS
308
308
  end
309
+
310
+ def subject_to_server_4754?(client)
311
+ # Until SERVER-4754 is resolved, profiling info is not collected
312
+ # when mongod is started with --auth in versions < 2.2
313
+ cmd_line_args = client['admin'].command({ :getCmdLineOpts => 1 })['parsed']
314
+ client.server_version < '2.2' && cmd_line_args.include?('auth')
315
+ end
309
316
  end
310
317
 
311
318
  # Before and after hooks for the entire test run
@@ -100,6 +100,20 @@ class ReplicaSetBasicTest < Test::Unit::TestCase
100
100
  end
101
101
  end
102
102
 
103
+ def test_wnote_does_not_raise_exception_with_err_nil
104
+ @client = MongoReplicaSetClient.new(@rs.repl_set_seeds, :name => @rs.repl_set_name)
105
+ if @client.server_version < '2.5.5'
106
+ @coll = @client[TEST_DB]['test-wnote']
107
+ begin
108
+ result = @coll.remove({:foo => 1}, :w => 2)
109
+ rescue => ex
110
+ assert(false, "should not raise an exception for a wnote response field from a remove that does not match any documents")
111
+ end
112
+ assert_nil result["err"]
113
+ assert_true result.has_key?("wnote")
114
+ end
115
+ end
116
+
103
117
  context "Socket pools" do
104
118
  context "checking out writers" do
105
119
  setup do
@@ -206,7 +206,11 @@ class ReplicaSetClientTest < Test::Unit::TestCase
206
206
  assert ['localhost:29999'] != @client.primary
207
207
  assert !@client.secondaries.include?('localhost:29999')
208
208
  ensure
209
- Process.kill("KILL", hung_node.pid) if hung_node
209
+ begin
210
+ Process.kill("KILL", hung_node.pid) if hung_node
211
+ rescue
212
+ # the process ended, was killed already, or the system doesn't support nc
213
+ end
210
214
  end
211
215
  end
212
216
 
@@ -132,6 +132,7 @@ class ReplicaSetCursorTest < Test::Unit::TestCase
132
132
  # batch from send_initial_query is 101 documents
133
133
  # check that you get n_docs back from the query, with the same port
134
134
  def cursor_get_more_test(read=:primary)
135
+ return if subject_to_server_4754?(@client)
135
136
  set_read_client_and_tag(read)
136
137
  10.times do
137
138
  # assert that the query went to the correct member
@@ -152,6 +153,7 @@ class ReplicaSetCursorTest < Test::Unit::TestCase
152
153
 
153
154
  # batch from get_more can be huge, so close after send_initial_query
154
155
  def kill_cursor_test(read=:primary)
156
+ return if subject_to_server_4754?(@client)
155
157
  set_read_client_and_tag(read)
156
158
  10.times do
157
159
  # assert that the query went to the correct member
@@ -171,6 +173,7 @@ class ReplicaSetCursorTest < Test::Unit::TestCase
171
173
  end
172
174
 
173
175
  def assert_cursors_on_members(read=:primary)
176
+ return if subject_to_server_4754?(@client)
174
177
  set_read_client_and_tag(read)
175
178
  # assert that the query went to the correct member
176
179
  route_query(read)
@@ -141,5 +141,11 @@ class MaxValuesTest < Test::Unit::TestCase
141
141
  @client.local_manager.primary_pool.node.stubs(:max_write_batch_size).returns(999)
142
142
  assert_equal 999, @client.max_write_batch_size
143
143
  end
144
+
145
+ def test_max_write_batch_size_no_manager
146
+ # Simulate no local manager being set yet - RUBY-759
147
+ @client.stubs(:local_manager).returns(nil)
148
+ assert_equal Mongo::MongoClient::DEFAULT_MAX_WRITE_BATCH_SIZE, @client.max_write_batch_size
149
+ end
144
150
  end
145
151
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongo
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.10.0
4
+ version: 1.10.1
5
5
  platform: ruby
6
6
  authors:
7
- - Tyler Brock
8
- - Gary Murakami
9
7
  - Emily Stolfo
10
- - Brandon Black
11
8
  - Durran Jordan
9
+ - Gary Murakami
10
+ - Tyler Brock
11
+ - Brandon Black
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain:
@@ -34,7 +34,7 @@ cert_chain:
34
34
  JrZM8w8wGbIOeLtoQqa7HB/jOYbTahH7KMNh2LHAbOR93hNIJxVRa4iwxiMQ75tN
35
35
  9WUIAJ4AEtjwRg1Bz0OwDo3aucPCBpx77+/FWhv7JYY=
36
36
  -----END CERTIFICATE-----
37
- date: 2014-04-03 00:00:00.000000000 Z
37
+ date: 2014-05-16 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.10.0
45
+ version: 1.10.1
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.10.0
52
+ version: 1.10.1
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