Wednesday February 9, 2011

[Time] NameMessage
[00:00] Guthur nvm, something else is wrong actually
[00:25] Guthur ok I notice some weirdness, is there an upper limit to the timeout for Polling?
[00:27] Guthur around 500000 it stops working for me
[00:33] Guthur oh the problem disappears in 2.1
[02:20] bitweiler is the guide the best introduction to zeromq?
[03:20] bitweiler are context's numbers?
[03:29] bitweiler DerGuteMoritz: how you make contexts with zmq?
[06:25] gambi Can I connect multiple taskers to multiple workers with out a broker inbetween if I don't need a reply from a worker? Basically a FIFO that gets filled by the taskers and emptied by the workers.
[06:25] ianbarber not without them all knowing about each other
[06:26] ianbarber you could have each client connect to each worker with PUSH/PULL sockets
[06:26] gambi yeah, i've started with that ... but realized that PUSH blocks the socket
[06:27] ianbarber i would look at using a FORWARDER device, and have that be the stable point in the architecture
[06:27] gambi and the single point of failure :(
[06:27] ianbarber that's a pretty easy fix, have a couple of them (or more!)
[06:27] gambi ok
[06:28] gambi so i do (many tasker) - device forwarder - (many worker) kinda thing?
[06:29] ianbarber yeah
[06:30] gambi if i don't need an reply from the worker and have to have the fastest possible way to talk to the device which pattern socket type should i use? tasker - (PUB/SUB) - dev forwarder (with stream + callback) - PUSH/PULL - worker?
[06:31] ianbarber i would say PUSH PULL in both parts. if you have pub/sub and two forwarders, they'll both get the message, and you'll likely end up with the work done twice
[06:32] ianbarber if you don't want to get stuck in a send() you could use ZMQ_NOBLOCk and catch when it can't send
[06:33] gambi how can I bind multiple PUSH sockets? I thought I can only PUSH from one tasker?
[06:34] ianbarber a single pull socket can have many pushes connected to it
[06:34] gambi ah
[06:34] ianbarber and vice versa
[06:34] gambi didn't know that
[06:34] ianbarber basically your forwarder would bind the pull
[06:35] ianbarber so lets say you had a forwarder on tcp:// and tcp://
[06:35] ianbarber you would then connect() both of those on each of your workers
[06:35] ianbarber sorry, taskers
[06:35] gambi ok
[06:35] ianbarber they would fire tasks at each alternatively, and on the other end the pull would fair queue between all the connected incoming
[06:40] ianbarber you should only need to bind() on the forwarder side
[06:40] ianbarber connect on all the other sides
[06:40] gambi ah
[06:40] gambi omg. lol ... sorry. yes of course
[06:40] gambi i'm new to zeromq
[06:41] ianbarber :)
[06:42] gambi ianbarber: thx for your help. let me try and write that out. :)
[06:42] ianbarber no worries
[08:11] andrewvc I've been getting some weird zmq errs
[08:11] andrewvc I see at some point
[08:11] andrewvc [pid 24407] pipe([14, 15]) = 0
[08:12] andrewvc actually nm
[08:35] skysbird2 hi, buddies, lovely buddies
[08:35] skysbird2 i want to know
[08:36] skysbird2 why i cannot find the zmq_server file after i make install
[08:36] skysbird2 i downloaded from
[08:36] skysbird2 zeromq-2.0.10.tar.gz for POSIX systems
[08:36] skysbird2 this one
[08:38] guido_g migt be because there is no such file
[08:38] guido_g *might
[08:45] skysbird2 guido_g,but i think this file zmq_server is the kernel start up file of zeromq
[08:48] guido_g no it's not
[08:48] guido_g read the guide and the appropriate docs
[09:00] skysbird2 guido_g, i just cannot find appropriate docs, can you recommend one for me?
[09:08] ianbarber skysbird2: try the guide
[09:09] ianbarber zeromq doesn't have a daemon, it's a library
[09:12] skysbird2 ianbarber,oh ,thank you
[09:12] skysbird2 i 've seen some document said it has zmq_server....
[09:12] skysbird2
[09:12] skysbird2 like this
[09:13] guido_g outdated
[09:13] skysbird2 oh
[09:13] ianbarber the hint is at the top "WARNING: This text is deprecated and refers to an old version of ØMQ. It remains here for historical interest. DO NOT USE THIS TO LEARN ØMQ."
[09:15] skysbird2 oh
[09:16] skysbird2 so is there some amq middleware like OpenAMQ build on zeroMQ?
[09:18] ianbarber i would really take a skim through the guide - 0MQ uses a different set of ideas
[09:19] ianbarber as an answer though - there are devices, which are similar, but intetionally simpler, and it's also a lot easier to write your own, so the idea is that you will have several small, specific devices in an architecture rather than one big broker
[09:20] skysbird2 ok i know
[09:20] skysbird2 just distribution
[09:20] skysbird2 because i heard that opemamq will be unsupported
[09:20] skysbird2 by 2011
[09:20] skysbird2 so i just want to find a middleware to replace OpenAMQ
[09:21] guido_g <- for starters
[09:22] ianbarber skysbird2: I would say that take a look at to work out whether 0MQ is right for you - if not then take a look at other AMQP systems like Rabbit I guess.
[09:24] mikko ianbarber: you got up early
[09:34] ianbarber mikko: had a deploy at 6 this morning
[14:00] Guthur Are shareable (between threads) sockets being worked on
[14:00] Guthur it would be a nice to have
[14:01] mikko no, i dont think they are
[14:01] mikko there should be no need for such a thing
[14:01] mikko if you share you need to lock
[14:02] Guthur yeah in general I suppose there isn't much need
[14:05] Guthur curious more than anything
[15:06] CIA-21 zeromq2: 03Martin Sustrik 07master * r80ac398 10/ (14 files in 2 dirs):
[15:06] CIA-21 zeromq2: Initial implementation of reaper thread.
[15:06] CIA-21 zeromq2: Reaper thread destroys the socket asynchronously.
[15:06] CIA-21 zeromq2: zmq_term() can be interrupted by a signal (EINTR).
[15:06] CIA-21 zeromq2: zmq_socket() will return ETERM after zmq_term() was called.
[15:06] CIA-21 zeromq2: Signed-off-by: Martin Sustrik <> -
[15:16] cremes ooh, a reaper thread! just what we need to get rid of the zmq_term blocking behavior
[15:17] cremes glad to see some progress on that piece
[15:20] sustrik cremes: give it a try please
[15:20] sustrik does it solve the Ctrl+C problem?
[15:21] cremes sustrik: i'll try it out in a few hours; i'm in the middle of a refactoring and don't want to interrupt it just yet
[15:21] cremes i'll post my results here
[15:22] sustrik great, thanks
[15:52] andrewvc cremes: around?
[15:53] cremes andrewvc_: yep, but a tad busy... got something quick?
[15:53] andrewvc mmm, just wondering if you've seen nbytes = -1 errors in ffi-rzmq before
[15:53] andrewvc err != -1 I mean
[15:53] andrewvc followed by libzmq quitting
[15:53] cremes yes, i've seen that assertion before...
[15:54] cremes um... are you on latest master or are you using 2.1 release?
[15:54] andrewvc master
[15:54] andrewvc 2.1 release doesn't seem to work with FDs for me
[15:54] cremes interesting... i used to see that assertion on 2.1 release but i upgraded to master about a month ago and forgot about it
[15:55] cremes is it reproducible or is it a heisenbug?
[15:55] cremes also, are you on osx or linux?
[15:55] andrewvc linux
[15:55] andrewvc totally reproduces
[15:55] andrewvc can get it in this one exchange of messages
[15:55] andrewvc always the same message
[15:56] andrewvc I tried changing the message content, no diff
[15:56] cremes put up a gist and i'll try to look at it later; i need to get back to work
[15:57] andrewvc cool, can do
[16:09] andrewvc sustrik around?
[16:20] Guthur When the it says: Never initialize the same zmq_msg_t twice.
[16:20] Guthur does that mean reuse the msg
[16:21] Guthur or does it mean close and then init
[16:24] pieterh Guthur, close followed by init is ok afaics
[16:24] mikko it's ok
[16:24] mikko initing twice without close will leak
[16:24] pieterh Where does it say not to init twice?
[16:24] Guthur pieterh:
[16:24] Guthur second caution
[16:25] pieterh Guthur, ah, it's wrong, afaik, you might want to signal that to Mato or send a patch
[16:26] Guthur pieterh: which part is wrong?
[16:26] Guthur assume it is fine to pass a msg directly from a recv to a send
[16:26] Guthur I assume*
[16:27] andrewvc pieterh, if you can spare a minute. Any idea what would cause a bad file descriptor error followed by nbytes != -1 error in ZMQ
[16:27] pieterh Guthur, it should probably say, "Never initialize the same zmq_msg_t twice without first doing zmq_msg_close."
[16:27] pieterh andrewvc, did you check strerror?
[16:28] pieterh andrewvc, uhm, I guess "bad file descriptor" is the error string?
[16:28] andrewvc yeah
[16:28] andrewvc I have that, followed by
[16:28] pieterh what's the context where you get the error?
[16:29] andrewvc sure, it's right after a send operation
[16:29] Guthur pieterh: ah ok, I'll mention it to mato, then
[16:29] andrewvc I get bad file descriptor, then it complains about mailbox.cpp:241 nbytes != -1
[16:29] andrewvc on the second line
[16:29] Guthur or maybe send a patch
[16:29] andrewvc I straced it as well
[16:29] pieterh andrewvc: possibly a bad bind or connect?
[16:30] pieterh don't really know these internals, sorry
[16:30] andrewvc well, the sockets are all local, on the loopback.
[16:30] andrewvc no worries, thanks though
[16:30] pieterh try replacing with ipc instead of tcp
[16:30] pieterh just to see what happens
[16:30] andrewvc yeah tried that
[16:30] pieterh same error?
[16:30] andrewvc yeah
[16:31] andrewvc actually, I should confirm that I have a mix of sockets, maybe I got the wrong one
[16:31] pieterh sounds something like that
[16:32] pieterh windows or Linux?
[16:32] andrewvc linux
[16:33] pieterh this is where we summon sustrik
[16:33] andrewvc hehe, that'd be awesome, I've been on the trail of this forever
[16:33] pieterh offhand I'd say you're using a socket that failed to bind/connect
[16:34] andrewvc well, the thing is, the app works in a stable manner for a while
[16:34] andrewvc then it just stops
[16:34] andrewvc but it's reproducible
[16:34] andrewvc consistently
[16:34] pieterh are you using assertions on all zmq_ calls?
[16:35] pieterh clearly the socket that zmq is trying to read from is invalid
[16:35] andrewvc hmmm, lemme see, I'm using the ruby zeromq library
[16:35] andrewvc I've got the source open...
[16:35] bitweiler anyone know of any docs that gives examples of how to use chicken's zeromq bindings?
[16:37] pieterh bitweiler, the only docs I know of are at
[16:38] bitweiler thanks I have those, which don't help much
[16:39] pieterh andrewvc, if you can reproduce it consistently, I'd suggest making a stripped-down test case
[16:39] pieterh quite often as you strip it down you'll see what you're doing wrong
[16:39] andrewvc that's the tough part, it's part of a complex app
[16:39] andrewvc and it was working fine
[16:39] pieterh 'was not showing the error'
[16:39] andrewvc then all of a sudden it wasn't, I can fiddle with its inputs to get it to repro
[16:39] sustrik i am sorry, i have to leave now
[16:39] sustrik if there's a problem
[16:39] sustrik just send it to the ML
[16:39] andrewvc no worries, I'll see if I can figure out how to make a minimal case
[16:40] andrewvc maybe I'll record the message flow and make a fake app
[16:40] pieterh yeah
[16:40] pieterh at least follow what's happening on that specific zmq socket
[16:40] mikko can you attach a debugger and check errno on line 241?
[16:41] pieterh mikko: "bad file descriptor", said andrew
[16:41] mikko ah, i just hopped in. reading the buffer
[16:41] andrewvc yeah, it's an inproc socket btw
[16:41] andrewvc I switched it to inproc to help debug
[16:42] andrewvc tried ipc as well, same deal
[16:42] mikko sounds slightly odd
[16:42] andrewvc It's a pub/sub if that matters
[16:42] andrewvc it works for a little while
[16:43] andrewvc I'm not familiar with GDB, but if you don't mind walking me through it
[16:43] mikko can you run it inside valgrind just to see that there is nothing random going on with memory ?
[16:43] andrewvc I would be game. I have strace output already
[16:43] andrewvc mmm, it's a ruby app, not sure if valgrind supports that
[16:43] mikko it does
[16:43] mikko it doesn't understand about ruby
[16:44] mikko i remember seeing this before somewhere
[16:44] andrewvc well, so here's some history
[16:44] andrewvc I used to see it in odd places
[16:44] andrewvc so did cremes
[16:44] andrewvc he also uses ffi-rzmq as a binding
[16:44] andrewvc but lately upgrading to master fixed it
[16:45] andrewvc until yesterday, now it's back with a vengeance on this one app of mine
[16:45] mikko no, i was thinking about the recent new_sndbuf > old_sndbuf (mailbox.cpp:182)
[16:47] pieterh andrewvc, if you're getting this no matter what the transport... then I'd say the zmq socket is in an invalid state
[16:48] pieterh try simply tracing all work you do with that socket
[16:48] andrewvc cool.
[16:48] andrewvc yeah, I've got crazy debugging going on right now :) hopefully I'll have something substantial to work off of
[16:49] andrewvc is there any call to just ask is this socket ok?
[16:49] andrewvc or does it sound like an uncaugh assertion?
[16:53] pieterh andrewvc, well, there is no such call but you could do a sanity test...
[16:53] pieterh e.g. try a non-blocking recv on the socket
[16:53] andrewvc ah, well, it's a PUB socket
[16:53] pieterh hang on
[16:54] pieterh it's a pub socket... so why are you ending up trying to recv from it?
[16:55] andrewvc hmmm, could it be a weird timing thing, maybe some socket is receiving in the background
[16:56] andrewvc and it just happens to be at the same time
[16:56] andrewvc so it's not actually the PUB socket at all. Or maybe it's the SUB receiving?
[16:56] pieterh weird timing things don't usually act reproducibly
[16:56] andrewvc yeah, maybe I should split it into two processes, so the sub is separated
[16:57] andrewvc oh, i'm not trying to receive
[16:57] andrewvc the error is right after a send
[16:58] pieterh well, as sustrik said, send the snippet and error message to zeromq-dev...
[16:58] pieterh he'll be back later
[16:58] andrewvc cool, thanks for your time pieter
[16:58] pieterh np
[16:58] andrewvc something fishy is going on here
[16:58] andrewvc lol
[19:55] mikko good evening
[20:00] Guthur 'evening mikko
[21:27] CIA-21 zeromq2: 03Martin Sustrik 07master * r5b82b1b 10/ (7 files):
[21:27] CIA-21 zeromq2: Reaper thread waits for commands rather them retrieving them periodically
[21:27] CIA-21 zeromq2: Signed-off-by: Martin Sustrik <> -
[21:35] CIA-21 zeromq2: 03Martin Sustrik 07master * re947900 10/ builds/msvc/libzmq/libzmq.vcproj :
[21:35] CIA-21 zeromq2: reaper added to MSVC build
[21:35] CIA-21 zeromq2: Signed-off-by: Martin Sustrik <> -
[21:40] sustrik mikko:
[21:41] sustrik i have no idea whether it's ok or not
[21:41] mikko will check
[21:42] mikko majority of the shared libraries and libtool archives i have installed on my machine have executable bit set
[21:42] mikko static libraries don't
[21:46] mikko commented on the issue
[21:47] Guthur what would be the use case for zmq_msg_move(3)
[21:47] sustrik when you need to move a message payload without copying it?
[21:47] Guthur can you not just use the original msg?
[21:48] sustrik class X
[21:48] sustrik {
[21:48] sustrik message_t msg;
[21:48] sustrik void get_message (message_t *msg_)
[21:48] sustrik {
[21:48] sustrik zmq_msg_move (msg_, &msg);
[21:48] sustrik }
[21:48] sustrik }
[21:48] Guthur oh ok, cheers
[21:49] sustrik :)
[21:49] Guthur I suppose I was wondering it there was any reason I should use it when moving a msg directly from one socket to another
[21:50] sustrik i don't think so
[21:50] sustrik you can pass the original message directly
[21:51] Guthur is there any lag when closing the msg for reuse in a multi part msg
[21:51] Guthur I'm sort of wildly guessing now though
[21:52] sustrik ?
[21:52] mikko close should be fairly predictable operation
[21:52] Guthur Actual release of resources associated with the message object shall be postponed by ØMQ until all users of the message or underlying data buffer have indicated it is no longer required.
[21:53] sustrik yes
[21:53] sustrik the buffer is not deallocated until is it pushed to the network
[21:53] Guthur will that block close, or is it async
[21:54] sustrik it's asyncv
[21:55] sustrik zmq_msg_t is not a message itself
[21:55] sustrik it's just a pointer to message
[21:55] sustrik so what you close is the pointer
[21:55] sustrik the message itself may remain in the memory because it may be used from elsewhere
[21:57] Guthur ah yes, my thinking was getting a bit off there
[22:04] sustrik mikko: btw, any answer from ivan about the AIX build env?
[22:05] mikko sustrik: nope
[22:05] mikko sustrik: not sure how feasible it is behind a proxy
[22:05] sustrik understood
[22:05] sustrik i was just curious whether he replied
[22:06] mikko effectively they would need to hack around the proxy
[22:06] mikko it was very interesting offer as they have HP-UX and AIX
[22:06] sustrik yeah
[22:07] sustrik HP has a free programme to allow you to boot and use HP-UX boxes
[22:07] sustrik DSPP it is called
[22:07] sustrik not sure whether there's a way to do it in regular intervals
[22:09] Rich_Morin I would love to try using ZeroMQ under SketchUp's Ruby. However, I have no idea how to make it work. Any Rubyists around?
[22:09] Rich_Morin The Ruby version (1.8.6, with limited library support) doesn't have sockets, but I've been able to construct a message-based protocol using EM, message files, and WebSockets.
[22:10] mikko Rich_Morin: cremes and andrewvc_ are ruby people
[22:10] mikko i think
[22:10] andrewvc yeah
[22:10] andrewvc 1.8.7 doesn't work right
[22:10] andrewvc the threading model is broken from what I've heard
[22:11] andrewvc I've tried it, it seems to work, then a couple seconds later acts all weird and crashy
[22:11] Rich_Morin Threading isn't really an option, in any case. However, you can set up a periodic timer.
[22:11] andrewvc well, even w/o threading 1.8.7 is weird
[22:12] mikko sustrik: The virtual systems offered span the HP portfolio. Available operating systems include HP-UX, OpenVMS, Microsoft® Windows®, Red Hat Enterprise Linux and Novell SuSE Linux.
[22:12] andrewvc there's a branch of rbzmq by method_missing, that's called 1.8.7 threads. I haven't tried it, not even sure if it's considered usable by anyone
[22:13] sustrik mikko: yep, but i think you have to book the time upfront
[22:13] sustrik not sure whether you can book periodic uptime
[22:14] mikko i guess it wouldn't hurt to ask if anyone has contacts there
[22:14] mikko mailing their customer support and asking might be a lost cause
[22:14] sustrik we have few friends at HP
[22:15] sustrik let me introduce you...
[22:15] mikko OpenVMS and HP-UX are both support iirc
[22:15] mikko by zeromq i mean
[22:15] sustrik yup, but getting hudson work on openvms may be tricky
[22:15] Rich_Morin andrewvc_: Does ZeroMQ support a documented socket protocol? IE, Can I use EM to proxy the messages via a socket?
[22:15] sustrik anyway, i introduce you to the guys doing openvms port
[22:16] sustrik they are both hp engineers
[22:16] sustrik wait a sec
[22:19] sustrik done
[22:19] sustrik Rich_Morin: check zmq_tcp(7)
[22:20] Rich_Morin tnx!
[22:20] chris_st Howdy -- any XCode folks here? I'd like to build in XCode, and use the Objective-C bindings, and am curious how to do it... never built a library in XCode before!
[22:21] mikko sustrik: thanks
[22:22] Rich_Morin chris_st: The Cocoa (etc) bindings are also available in MacRuby.
[22:22] chris_st Rich_Morin: Thanks! That's cool. But I want to build an Obj-C program to use 0MQ.
[22:22] Rich_Morin np
[22:23] drbobbeaty chris_st: I think the best way is to look at the zmq.hpp file and see how they wrap the C calls into C++ objects. It's a simple conversion to Ocj-C methods from there.
[22:24] sustrik there's a objective C binding out there IIRC
[22:24] chris_st drbobbeaty: Thanks for the pointer -- appreciated. I'm going to try JeremyW's code first, since I'm lazy :-)
[22:34] sustrik mikko: that was quick :)
[22:41] mikko sustrik: yeah
[22:42] mikko interesting to see what happens
[22:42] mikko now i gotta sleep, long day tomorrow
[22:42] sustrik cyl
[22:42] mikko good night
[22:56] Rich_Morin sustrik: looks like an interesting possibility. I already have an EM script that proxies between files ans WebSockets; it might be possible to mash my proxy up with zmqmachine.
[23:01] cremes Rich_Morin: you want to run your code on sketchup ruby, right? i'm not familiar with that... is it a "new" runtime from google?
[23:02] Rich_Morin No, it may actually predate Rails. The Ruby version (1.8.6, with limited library support) doesn't have sockets, but I've been able to construct a message-based protocol using EM, message files, and WebSockets.
[23:03] Rich_Morin "want" perhaps overstates the case :-)
[23:03] cremes oh, i see
[23:04] cremes well, zmqmachine is just a thin wrapper around the ffi-rzmq gem which itself is a thin wrapper around libzmq
[23:04] cremes i assume the sketchup runtime can load C extensions if you are playing with EM
[23:04] cremes andrewvc_ has been working on a companion gem to ffi-rzmq so that 0mq sockets can be used from EM
[23:04] Rich_Morin ouch. Even if it's possible, it would be nice to avoid.
[23:05] cremes what ouch?
[23:06] Rich_Morin SketchUp is used by modelers. I'd like to keep things as lightweight as possible.
[23:06] Rich_Morin Thait said, I'm not ruling it out.
[23:06] cremes ok; then you'll need to reimplement 0mq in pure ruby because the existing solutions just wrap the 0mq C lib
[23:07] cremes that's a lot of work
[23:07] Rich_Morin Another possibility would be to hack my EM proxy to speak your socket-based protocol. Any clues here?
[23:08] Rich_Morin The proxy runs under normal Ruby, BTW
[23:10] cremes sorry, no clues... the wire protocol in 0mq is documented but i have no particular insight on how to make it work in your situation
[23:12] Rich_Morin thanks, anyway
[23:34] msch hi, i've got a really strange bug. i've written a very simple zmq setup with PUSH/PULL, the PUSH code seems to work (it exists cleanly) while to PULL code just hangs in socket.recv. anyone care to take a look?
[23:35] Seta00 trying to link to zmq, gcc is giving me "/usr/lib/ could not read symbols: File in wrong format"
[23:35] Seta00 and I've just built it
[23:35] Seta00 everything goes fine
[23:36] Seta00 oh
[23:36] Seta00 -m 32
[23:36] Seta00 damn
[23:42] Seta00 er.. configure is asking me to use --target
[23:42] Seta00 but --target i386 doesn't work
[23:42] Seta00 --target=i386 **