RUBY-261 Cursor#close hits secondary when appropriate.
This commit is contained in:
parent
cb54c6b295
commit
604d0f60ed
|
@ -391,7 +391,7 @@ module Mongo
|
||||||
if safe
|
if safe
|
||||||
@connection.send_message_with_safe_check(Mongo::Constants::OP_UPDATE, message, @db.name, nil, safe)
|
@connection.send_message_with_safe_check(Mongo::Constants::OP_UPDATE, message, @db.name, nil, safe)
|
||||||
else
|
else
|
||||||
@connection.send_message(Mongo::Constants::OP_UPDATE, message, nil)
|
@connection.send_message(Mongo::Constants::OP_UPDATE, message)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -874,7 +874,7 @@ module Mongo
|
||||||
if safe
|
if safe
|
||||||
@connection.send_message_with_safe_check(Mongo::Constants::OP_INSERT, message, @db.name, nil, safe)
|
@connection.send_message_with_safe_check(Mongo::Constants::OP_INSERT, message, @db.name, nil, safe)
|
||||||
else
|
else
|
||||||
@connection.send_message(Mongo::Constants::OP_INSERT, message, nil)
|
@connection.send_message(Mongo::Constants::OP_INSERT, message)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
documents.collect { |o| o[:_id] || o['_id'] }
|
documents.collect { |o| o[:_id] || o['_id'] }
|
||||||
|
|
|
@ -381,15 +381,36 @@ module Mongo
|
||||||
# @param [Integer] operation a MongoDB opcode.
|
# @param [Integer] operation a MongoDB opcode.
|
||||||
# @param [BSON::ByteBuffer] message a message to send to the database.
|
# @param [BSON::ByteBuffer] message a message to send to the database.
|
||||||
#
|
#
|
||||||
|
# @option opts [Symbol] :connection (:writer) The connection to which
|
||||||
|
# this message should be sent. Valid options are :writer and :reader.
|
||||||
|
#
|
||||||
# @return [Integer] number of bytes sent
|
# @return [Integer] number of bytes sent
|
||||||
def send_message(operation, message, log_message=nil)
|
def send_message(operation, message, opts={})
|
||||||
|
if opts.is_a?(String)
|
||||||
|
warn "Connection#send_message no longer takes a string log message. " +
|
||||||
|
"Logging is now handled within the Collection and Cursor classes."
|
||||||
|
opts = {}
|
||||||
|
end
|
||||||
|
|
||||||
|
connection = opts.fetch(:connection, :writer)
|
||||||
|
|
||||||
begin
|
begin
|
||||||
add_message_headers(message, operation)
|
add_message_headers(message, operation)
|
||||||
packed_message = message.to_s
|
packed_message = message.to_s
|
||||||
|
|
||||||
|
if connection == :writer
|
||||||
socket = checkout_writer
|
socket = checkout_writer
|
||||||
|
else
|
||||||
|
socket = checkout_reader
|
||||||
|
end
|
||||||
|
|
||||||
send_message_on_socket(packed_message, socket)
|
send_message_on_socket(packed_message, socket)
|
||||||
ensure
|
ensure
|
||||||
|
if connection == :writer
|
||||||
checkin_writer(socket)
|
checkin_writer(socket)
|
||||||
|
else
|
||||||
|
checkin_reader(socket)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -284,7 +284,7 @@ module Mongo
|
||||||
message.put_int(1)
|
message.put_int(1)
|
||||||
message.put_long(@cursor_id)
|
message.put_long(@cursor_id)
|
||||||
@logger.debug("MONGODB cursor.close #{@cursor_id}") if @logger
|
@logger.debug("MONGODB cursor.close #{@cursor_id}") if @logger
|
||||||
@connection.send_message(Mongo::Constants::OP_KILL_CURSORS, message, nil)
|
@connection.send_message(Mongo::Constants::OP_KILL_CURSORS, message, :connection => :reader)
|
||||||
end
|
end
|
||||||
@cursor_id = 0
|
@cursor_id = 0
|
||||||
@closed = true
|
@closed = true
|
||||||
|
|
|
@ -31,7 +31,7 @@ class ReplicaSetQuerySecondariesTest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_query_secondaries
|
def test_query_secondaries
|
||||||
@coll = @db.collection("test-sets", :safe => {:w => 3, :wtimeout => 10000})
|
@coll = @db.collection("test-sets", :safe => {:w => 3, :wtimeout => 20000})
|
||||||
@coll.save({:a => 20})
|
@coll.save({:a => 20})
|
||||||
@coll.save({:a => 30})
|
@coll.save({:a => 30})
|
||||||
@coll.save({:a => 40})
|
@coll.save({:a => 40})
|
||||||
|
@ -70,7 +70,7 @@ class ReplicaSetQuerySecondariesTest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_kill_secondary
|
def test_kill_secondary
|
||||||
@coll = @db.collection("test-sets", {:safe => {:w => 3, :wtimeout => 10000}})
|
@coll = @db.collection("test-sets", {:safe => {:w => 3, :wtimeout => 20000}})
|
||||||
@coll.save({:a => 20})
|
@coll.save({:a => 20})
|
||||||
@coll.save({:a => 30})
|
@coll.save({:a => 30})
|
||||||
assert_equal 2, @coll.find.to_a.length
|
assert_equal 2, @coll.find.to_a.length
|
||||||
|
@ -90,7 +90,19 @@ class ReplicaSetQuerySecondariesTest < Test::Unit::TestCase
|
||||||
assert_equal 2, length
|
assert_equal 2, length
|
||||||
end
|
end
|
||||||
new_read_pool_port = @conn.read_pool.port
|
new_read_pool_port = @conn.read_pool.port
|
||||||
assert old_read_pool != new_read_pool
|
assert old_read_pool_port != new_read_pool_port
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_write_lots_of_data
|
||||||
|
@coll = @db.collection("test-sets", {:safe => {:w => 2}})
|
||||||
|
|
||||||
|
6000.times do |n|
|
||||||
|
@coll.save({:a => n})
|
||||||
|
end
|
||||||
|
|
||||||
|
cursor = @coll.find()
|
||||||
|
cursor.next
|
||||||
|
cursor.close
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -23,8 +23,8 @@ class ReplSetManager
|
||||||
@path = File.join(File.expand_path(File.dirname(__FILE__)), "data")
|
@path = File.join(File.expand_path(File.dirname(__FILE__)), "data")
|
||||||
|
|
||||||
@arbiter_count = opts[:arbiter_count] || 2
|
@arbiter_count = opts[:arbiter_count] || 2
|
||||||
@secondary_count = opts[:secondary_count] || 1
|
@secondary_count = opts[:secondary_count] || 2
|
||||||
@passive_count = opts[:passive_count] || 1
|
@passive_count = opts[:passive_count] || 0
|
||||||
@primary_count = 1
|
@primary_count = 1
|
||||||
|
|
||||||
@count = @primary_count + @passive_count + @arbiter_count + @secondary_count
|
@count = @primary_count + @passive_count + @arbiter_count + @secondary_count
|
||||||
|
@ -41,7 +41,7 @@ class ReplSetManager
|
||||||
system("killall mongod")
|
system("killall mongod")
|
||||||
|
|
||||||
n = 0
|
n = 0
|
||||||
(@primary_count + @secondary_count).times do |n|
|
(@primary_count + @secondary_count).times do
|
||||||
init_node(n)
|
init_node(n)
|
||||||
n += 1
|
n += 1
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue