Wednesday September 14, 2011

[Time] NameMessage
[06:46] khigia mysql
[06:47] khigia hi, sorry, typed in wrong window.
[07:26] CIA-121 rbzmq: 03Brian Buchanan 07master * rce2f948 10/ rbzmq.c : Merge pull request #12 from skaes/silence ...
[07:27] CIA-121 rbzmq: 03Brian Buchanan 07master * r2534629 10/ zmq.gemspec : gem version 2.1.4 -
[08:05] MickeM I am trying to implement the lazy pirate pattern, but for some strange reason I get no reply in my client... everything works fine and the queue process the request, send it off to the work, gets it back and then send it to the client... but the client never gets anything...
[08:05] MickeM anyone have any ideas on where to start?
[08:05] MickeM to me it looks correct, right address and everything...
[08:06] MickeM but I am unsure how the client actually "subscribes" but maybe theat is automagic?
[08:46] sustrik MickeM: what socket types are you using?
[08:53] MickeM tcp
[08:53] MickeM for the client I mean... using inproc for workers though...
[08:56] MickeM (one might add that the poller "returns" directly if I set a timeout, but I assumed that was related to some bug, if I set timeout to -1 it hangs "forever")
[09:34] sustrik i meant, what socket type
[09:34] sustrik pub/sub?
[09:34] sustrik req/rep?
[09:48] MickeM aha, same as in the sample Client is so should be req/rep... "client" is ZMQ_REQ and "server" is ZMQ_XREP...
[10:20] sustrik MickeM: try to create a mimimal test case to reproduce the problem
[10:20] sustrik then post it on gist (or similar) and ask here
[10:21] sustrik alteratively, ask on the mailing list
[10:33] MickeM sustrik: ok... but is there some method to debug issues like this?
[10:33] MickeM ie.can I see where a message goes and/or if there are messages waiting somwhere or something like that?
[10:33] MickeM so I am more trying to understand how to figour out what the problem is then a solution...
[10:34] sustrik right
[10:34] sustrik you can check the network traffic using tcpdump for example
[10:34] sustrik to see whether the message crosses the network
[10:35] MickeM ok... but no "logging" or something like that in zeromq?
[10:36] sustrik you mean like logging every outgoing message?
[10:48] MickeM sustrik: that would be one option, another would be to logg all "missing messages" ie. messages which gets "lost"...
[10:52] sustrik how would you know which message is missing?
[10:54] MickeM sustrik: presumably zeromq would know that right? (so I was looking for some debug zeromq feature which could help)
[10:54] sustrik how can it possibly know?
[10:55] sustrik you can timeout
[10:55] sustrik that's best that you can do
[10:55] sustrik if no message is received in 10 secs, then consider it lost
[10:55] sustrik that, obviously, doesn't mean you aren't going to get it one second later
[10:55] MickeM sustrik: well, this was a debuggning feature ie... have zeromq stdout "whoops, got a message noone subscribe to: this will be discarded".. or something like that...
[10:56] sustrik ah, i see
[10:56] sustrik no, there's no such logging
[10:56] sustrik you can add it though
[10:56] sustrik let me check the code
[10:56] sustrik which version are you using?
[10:57] MickeM sustrik: 2.1.9 and an old 2.0.something.. I guess 2.1.9 is the interesting one...
[10:57] sustrik ok
[10:57] sustrik wait a sec
[10:57] MickeM sure...
[10:58] sustrik you can add a printf at src/xsub.cpp:118
[11:00] MickeM ahh, cool... thank you....
[12:23] CIA-121 libzmq: 03Martin Sustrik 07master * r42737f0 10/ .gitignore : test_invlid_rep added to .gitignore ...
[12:36] CIA-121 libzmq: 03Martin Sustrik 07master * rcf499ee 10/ src/dist.cpp : Bug in message distribution algorithm fixed (issue 251) ...
[13:17] CIA-121 libzmq: 03Martin Sustrik 07master * r78b02d1 10/ src/dist.cpp : Minor optimisation in message distribution algorithm ...
[14:43] someone-noone1 hello! I'm trying to write 0mq binding on c++ for some framework where is impossible to use lib0mq. And i have some protocol questions:
[14:45] someone-noone1 Basically, i'm running ZMQ_REP hello_world server that is sending "hello world" on every received request. (This part is for testing and using lib0mq)
[14:46] someone-noone1 Now, i'm connecting to this server from another application. And my steps are next: send greeting, send test message
[14:47] someone-noone1 i've read this rfc and don't understand how to fill greeting correct
[14:49] someone-noone1 what value should be socket_type? Why there is "more flag" in the end of challenge?
[14:49] someone-noone1 Can anyone help with this?
[14:55] someone-noone i'm here for now..
[15:02] sustrik someone-noone: what version of 0mq are you using?
[15:03] someone-noone sustrik: hm... how can i check it? I was installing it from ports...
[15:03] sustrik look at zmq.h
[15:04] sustrik it's there
[15:04] sustrik also, there's a zmq_version() function
[15:04] someone-noone kk, 1 min
[15:07] someone-noone sustrik: major, minor, patch: 2, 0, 10 (zmq_version)
[15:08] sustrik ok
[15:09] sustrik the doc you've referenced is wrong
[15:09] sustrik there's no version in the protocol
[15:09] sustrik simply send an empty message as a greeting from each side
[15:10] sustrik and then you can exchange request and replies as normal
[15:10] someone-noone thanks
[15:11] someone-noone sustrik: uint8_t empty_msg[2]; empty_msg[0] = 1; empty_msg[1] =0;
[15:11] someone-noone is this an empty msg?
[15:12] sustrik yes
[15:12] someone-noone sustrik: thanks, a lot. I will go and play with it
[15:12] sustrik sure
[15:13] sustrik feel free to ask if you run into a problem
[15:13] someone-noone thanks
[15:29] someone-noone sustrik: i'm gettin assertion viloation ( fetched (rep.cpp:232) ) when i'm sending empty packet and string packet after it. If i send only empty packet everything seems to be ok. Here is a code of how i'm doing it:
[15:30] sustrik let me check
[15:32] sustrik ok, i see
[15:33] sustrik the thing is that req/rep has a routeback stack in the messages
[15:34] sustrik here's the explanation:
[15:34] someone-noone thanks *reading*
[15:35] sustrik however, if what you aim at is simple req/rep with no intermediate nodes
[15:35] someone-noone my aim is to make a basic req/rep and then extend it for intemediate nodes and so on
[15:35] someone-noone untils my boss will tell that it's enough :)
[15:35] sustrik simply prepend both request and reply with empty message part with MORE flag set and followed by the actuall message body
[15:36] sustrik the whole thing would look like this:
[15:36] sustrik when sending a request, prepend it by empty message part
[15:37] sustrik when receiving a request, store all the initial message parts up to the empty message part -- what follows is the body
[15:37] sustrik when sending a reply, attach the stored message parts to the reply
[15:37] sustrik when receiving a reply, strip the initial empty message part
[15:37] sustrik that's it
[15:39] someone-noone thanks, let me think about it
[15:40] sustrik btw, what are you working on?
[15:40] sustrik some kind of native client?
[15:41] someone-noone i want to add 0mq support for crtmpserver... this framework has own event-subsytem and single-threaded
[15:43] someone-noone basically i want to proof a concept... and then we will see if there any reason to complete full compability or just only some features
[15:48] sustrik i see
[15:51] shales someone-noone: if you can give crtmpserver's event-subsystem an FD to wait for it to become readable then you can probably use libzmq
[15:52] someone-noone shales: does libzmq single-threaded?
[15:53] shales It starts at least one io thread
[15:53] shales Can you have no threads at all, or do you just want an API that doesn't block?
[15:54] someone-noone shales: i must work only in 1 thread for whole application. If i don't this, i will break idealogy of crtmpserver
[15:55] someone-noone shales: so i can use with libzmq only if i will control sending\recving data from epoll and friends
[15:56] someone-noone and after that sending it to libzmq. But, afaik, it's impossible
[15:56] shales maybe I misunderstand the requirements of crtmpserver, but I think it could work
[15:57] someone-noone shales: definetely, it could. But the question is: can it be done without spawning additional threads?
[15:58] shales yeah, none of the code you write rungs on libzmq's io thread. The zmq context you create is associated with your one crtmpserver main thread and all calls the libzmq are made on this thread. Inside it will pass the messages to the IO thread where they are actually send. The io thread sends events back to the context's thread (your main thread) through a pipe.
[15:59] shales You can add that pipe read side's FD to your epoll so that you know when to do a non-blocking send or recv on the 0mq socket
[15:59] shales rungs = runs
[16:01] someone-noone shales: Sounds promising. I'm sorry, but my work-day ended hour ago. Can we continue this talk tomorrow?
[16:01] shales look at the ZMQ_FD and ZMQ_EVENTS options of zmq_getsockopt
[16:01] someone-noone okay, i will do that
[16:01] someone-noone sounds really promising
[16:01] shales sure
[16:02] someone-noone shales,sustrik: good bye, thanks for help!
[16:03] sustrik see you
[16:03] shales bye
[16:07] shales zedas: incidentally, have you seen the eventlet fork trying to fix the race conditions integrating with 0mq without polling?
[16:08] zedas shales: i think i wrote that.
[16:08] shales ya :) I meant the patch I posted about on the eventletdev list
[16:09] shales trying to support multiple senders and receivers
[16:09] zedas shales: nope i'm not on the list. i only use eventlet at work. got a link?
[16:11] shales ya, I'll forward you the email I sent to the list if you don't mind
[16:50] calvin If I update my server to version 3.0 do I need to update my client as well? Is there any backwards compatibility?
[16:51] pieterh calvin_: you need to upgrade all peers, 2.1 and 3.0 don't interoperate
[16:53] calvin Do you know if there's a C# binding that uses 3.0? I don't see a clrzmq3 and the README in clrzmq2 is blank
[16:54] calvin I'm guessing I could just have clrzmq2 use a 3.0 version of libzmq but i'm not sure if that's supported behavior
[17:05] pieterh calvin_: the binding will probably need some changes to work with 3.0
[17:05] pieterh the version of the binding is NOT the version of 0MQ it supports
[17:05] pieterh this was simply the second C# binding
[17:05] calvin hmmm ok
[17:22] calvin hmm yeah it seems like it hasn't been updated since may
[17:30] calvin is there a way to know if there's a plan to update the binding for 3.0?
[17:33] calvin i could do it myself but i want to make sure it isn't already in progress
[17:38] cremes calvin_: post a question to the ML and ask here; that's probably all u can do
[18:27] mikko jamon serrano <3
[20:09] MickeM Sorry for bothering you again... But I am giving this one more go...
[20:09] MickeM I have a req/rep setup ala lazy pirate: C => Q => W. But nothing gets sent from the queue back to the client. (but works, from client to queue to worker and back to queue, then send "does nothing")
[20:09] MickeM have checked with ethernet sniffer and send(frontend) does NOT send anything...
[20:09] MickeM any ideas on how to debug would be aprechiated...
[21:44] MickeM Is there a reason for all the ...just silently ignore the message ?