-
Notifications
You must be signed in to change notification settings - Fork 2
Open
Description
On OSX 10.8.2, with the latest xcode, and the latest ruby-1.9.3-p327, a simple connect with zkruby 3.4.3 fails:
looking for zookeeper path /zkgctest
E, [2012-12-04 12:52:13 #83484] ERROR -- ZooKeeper::RubyIO::Binding: (ZooKeeper::RubyIO::Binding) Exception in session thread: uninitialized constant ZooKeeper::RubyIO::Connection::SOL_TCP:
/usr/local/rvm/gems/ruby-1.9.3-p327@zkgc/gems/zkruby-3.4.3/lib/zkruby/rubyio.rb:52:in `initialize'
/usr/local/rvm/gems/ruby-1.9.3-p327@zkgc/gems/zkruby-3.4.3/lib/zkruby/rubyio.rb:210:in `new'
/usr/local/rvm/gems/ruby-1.9.3-p327@zkgc/gems/zkruby-3.4.3/lib/zkruby/rubyio.rb:210:in `connect'
/usr/local/rvm/gems/ruby-1.9.3-p327@zkgc/gems/zkruby-3.4.3/lib/zkruby/session.rb:212:in `reconnect'
/usr/local/rvm/gems/ruby-1.9.3-p327@zkgc/gems/zkruby-3.4.3/lib/zkruby/session.rb:132:in `start'
/usr/local/rvm/gems/ruby-1.9.3-p327@zkgc/gems/zkruby-3.4.3/lib/zkruby/rubyio.rb:192:in `block (2 levels) in start'
/usr/local/rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
/usr/local/rvm/gems/ruby-1.9.3-p327@zkgc/gems/zkruby-3.4.3/lib/zkruby/rubyio.rb:192:in `block in start'
/usr/local/rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/thread.rb:71:in `sleep': deadlock detected (fatal)
from /usr/local/rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/thread.rb:71:in `wait'
from /usr/local/rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/monitor.rb:110:in `wait'
from /usr/local/rvm/gems/ruby-1.9.3-p327@zkgc/gems/zkruby-3.4.3/lib/zkruby/rubyio.rb:299:in `block in wait_value'
from /usr/local/rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
from /usr/local/rvm/gems/ruby-1.9.3-p327@zkgc/gems/zkruby-3.4.3/lib/zkruby/rubyio.rb:298:in `wait_value'
from /usr/local/rvm/gems/ruby-1.9.3-p327@zkgc/gems/zkruby-3.4.3/lib/zkruby/protocol.rb:164:in `value'
from /usr/local/rvm/gems/ruby-1.9.3-p327@zkgc/gems/zkruby-3.4.3/lib/zkruby/client.rb:516:in `synchronous_call'
from /usr/local/rvm/gems/ruby-1.9.3-p327@zkgc/gems/zkruby-3.4.3/lib/zkruby/client.rb:352:in `exists'
from ./test.rb:14:in `create_zookeeper_path'
from ./test.rb:41:in `<main>'
which complains about https://github.com/lwoggardner/zkruby/blob/master/lib/zkruby/rubyio.rb#L52 which uses SOL_TCP.
Looking at http://www.ruby-doc.org/stdlib-1.9.3/libdoc/socket/rdoc/Socket/AncillaryData.html, I see no SOL_TCP, but I do see Socket::IPPROTO_TCP and others. So I tried this:
--- /usr/local/rvm/gems/ruby-1.9.3-p327@zkgc/gems/zkruby-3.4.3/lib/zkruby/rubyio.rb.orig 2012-12-04 12:55:16.000000000 +0000
+++ /usr/local/rvm/gems/ruby-1.9.3-p327@zkgc/gems/zkruby-3.4.3/lib/zkruby/rubyio.rb 2012-12-04 12:55:52.000000000 +0000
@@ -49,7 +49,7 @@
addr = Socket.getaddrinfo(host, nil)
sock = Socket.new(Socket.const_get(addr[0][0]), Socket::SOCK_STREAM, 0)
sock.setsockopt(SOL_SOCKET, SO_LINGER, [0,-1].pack("ii"))
- sock.setsockopt(SOL_TCP, TCP_NODELAY,[0].pack("i_"))
+ sock.setsockopt(::Socket::IPPROTO_TCP, TCP_NODELAY,[0].pack("i_"))
sockaddr = Socket.pack_sockaddr_in(port, addr[0][3])
begin
sock.connect_nonblock(sockaddr)
and that appears to work.
Metadata
Metadata
Assignees
Labels
No labels