[Time] Name | Message |
[00:07] Seta00
|
forgot to install g++-multilib
|
[00:07] Seta00
|
:P
|
[07:37] suzan_shakya
|
hi all, can anybody explain me why a single context should be used in a process ?
|
[07:42] Guthur
|
suzan_shakya, you can use multiple contexts in a process
|
[07:42] Guthur
|
with you want to use inproc transport the sockets need to be created by the same context though
|
[07:43] Guthur
|
with/if
|
[07:46] suzan_shakya
|
Guthur: thanks
|
[07:46] guido_g
|
but is not the canonical way to have more then one context per process
|
[09:54] mikko
|
sustrik: http://build.valokuva.org/job/ZeroMQ2-core-master_mingw32-win7/79/console
|
[09:55] mikko
|
started failing after reaper changes
|
[10:20] mikko
|
man you are fast pieter_hintjens
|
[10:21] pieter_hintjens
|
mikko: huh?
|
[10:21] mikko
|
pieter_hintjens: the "What happens when push socket is closed"
|
[10:21] pieterh
|
:-)
|
[10:21] mikko
|
i had barely read the message and already gmail indicated response from you
|
[10:22] pieterh
|
4 minutes is still pretty high latency
|
[10:22] pieterh
|
I need to find a way to get alerts on 0MQ list traffic...
|
[14:46] mikko
|
pieterh: https://build.valokuva.org/job/zfl-master_ZeroMQ2-master_mingw32/9/console
|
[14:46] mikko
|
zfl mingw32 running now
|
[14:47] pieterh
|
mikko, nice... there are still a few glitches but most of it builds
|
[14:48] mikko
|
fails
|
[15:02] pieterh
|
mikko: I've committed further fixes, send me a log of the errors and I'll check them out
|
[15:05] mikko
|
pieterh: you should be able to init build on hudson
|
[15:05] mikko
|
if you still have your username and pass
|
[15:05] pieterh
|
mikko: I have too many pots boiling :-)
|
[15:06] mikko
|
https://gist.github.com/73dae202027903631905
|
[15:06] mikko
|
looks like include issue
|
[15:07] mikko
|
path missing or something
|
[15:07] mikko
|
https://github.com/mkoppanen/zfl/commit/b54ea4c22956818f435ee085d01847bb5f6c9335
|
[15:07] mikko
|
this is some old fix i did
|
[15:07] mikko
|
not sure how relevant that still is
|
[15:10] pieterh
|
ah... the errors from zfl_prelude.h are because that file thinks it's building on a Unix box and is looking for Unix include files
|
[15:11] pieterh
|
I've not used ming32 for a really long time, so don't recall what's needed here
|
[15:11] mikko
|
not fully true
|
[15:11] mikko
|
you wouldn't include using '\' on unix ?
|
[15:11] pieterh
|
indeed
|
[15:11] pieterh
|
:-)
|
[15:11] mikko
|
zfl_prelude.h:255 is inside windows defs
|
[15:12] pieterh
|
it thinks it's both __MSDOS__ and __UNIX__
|
[15:13] mikko
|
regarding the build issue on freebsd someone mailed about
|
[15:13] mikko
|
i think a switch in configure would be nice "--with-libzmq=" or so
|
[15:13] pieterh
|
well, zfl is by definition dependent on zmq
|
[15:13] mikko
|
that could use pkg-config to check the prefix and required flags
|
[15:14] mikko
|
it also currently depending on user to specify CFLAGS and LDFLAGS for non-standard location
|
[15:14] pieterh
|
right
|
[15:14] pieterh
|
mikko, i'm going to leave this to settle for a while and come back to it later
|
[15:14] mikko
|
--with-libzmq=/opt/i/installed/libzmq/here style
|
[15:14] mikko
|
ok
|
[15:14] pieterh
|
may install mingw32 if needed
|
[15:15] mikko
|
i can look into patching this
|
[15:15] pieterh
|
have gotten the thing to compile on MSVC and almost link successfully...
|
[15:15] mikko
|
i'll send you a mail if i got time to look into it today
|
[15:15] pieterh
|
that earns me lunch, in any timezone :-)
|
[15:15] mikko
|
true
|
[15:15] pieterh
|
cyl
|
[15:16] mikko
|
later
|
[16:07] andrewvc
|
sustrik: If you're around I have an strace that shows where that nbytes error is I believe
|
[16:07] andrewvc
|
https://gist.github.com/820779
|
[16:07] andrewvc
|
basically, it looks like close is called on FD 22
|
[16:11] cremes
|
andrewvc: fyi, i found (and fixed) a bug in ffi-rzmq
|
[16:11] andrewvc
|
oh?
|
[16:12] cremes
|
sometimes when a recv failed with rc = -1, eagain is *false* but it was still acting like it was a successful read
|
[16:12] cremes
|
i'll push the patch in a minute
|
[16:12] andrewvc
|
oh, good catch
|
[16:12] andrewvc
|
cool, I'll test it, I wonder if that was related, it sounds like it could have been
|
[16:12] cremes
|
i need to do a code clean up... some of my logic is too hard to follow
|
[16:12] cremes
|
simpler is better
|
[16:13] andrewvc
|
agreed, but don't bash your code, I've found it pretty clear ):
|
[16:13] andrewvc
|
:)
|
[16:14] cremes
|
andrewvc: you are too kind!
|
[16:14] cremes
|
ok, pushed
|
[16:15] andrewvc
|
cool, I've got my test suite all up already
|
[16:15] cremes
|
give it a try and see if it makes a difference
|
[16:15] cremes
|
btw, at the same time i found an error in zmqmachine related to the same thing
|
[16:15] cremes
|
i'll push that too
|
[16:16] andrewvc
|
sadly, not related
|
[16:17] andrewvc
|
i mean, that patch didn't fix this bug
|
[16:17] cremes
|
bummer
|
[16:17] cremes
|
it's likely a 0mq flaw
|
[16:17] andrewvc
|
yeah, I was just about to post to the list
|
[16:17] cremes
|
do you have a gist you can share? i have an hour or so today where i can poke at this
|
[16:18] andrewvc
|
yep
|
[16:18] andrewvc
|
well, so this is interesting in and of itself I guess
|
[16:18] andrewvc
|
https://gist.github.com/820779
|
[16:18] andrewvc
|
that's an strace to start with, I'll post the ruby code in a sec
|
[16:18] andrewvc
|
FD 22 is closed
|
[16:18] andrewvc
|
then recvfrom is called on it again later on
|
[16:19] andrewvc
|
I think that's the bug, unless I'm missing something, I'm a little shaky on low level syscall semantics
|
[16:20] andrewvc
|
FD22 being a unix domain socket, but one that was opened internally, as the ZMQ sockets are all tcp
|
[16:20] andrewvc
|
lemme upload the ruby code actually, right now it needs RBX or 1.9.2 to run. I'm working on jruby support (kicking Thin out)
|
[16:20] cremes
|
i wonder if FD 22 has some special meaning? i don't have a lot of knowledge about this lower level stuff
|
[16:20] cremes
|
cool, i use both
|
[16:21] mikko
|
no, it shouldn't have
|
[16:22] andrewvc
|
It's opened higher up with 116809 [pid 11284] socketpair(PF_FILE, SOCK_STREAM, 0, [21, 22]) = 0
|
[16:23] andrewvc
|
if you want to give the ruby code a shot cremes I can set you up pretty quick, lemme just push a couple things
|
[16:24] cremes
|
sure
|
[16:26] andrewvc
|
ok, so just a few things, you need either rbx or 1.9.2. then....
|
[16:26] andrewvc
|
gem install dripdrop
|
[16:26] andrewvc
|
then clone this somewhere git://github.com/andrewvc/socket-motor.git
|
[16:27] andrewvc
|
then, inside the socket-motor dir: ruby bin/socket-motor
|
[16:28] andrewvc
|
oh you also need: gem install sinatra haml
|
[16:28] andrewvc
|
inside socket-motor's example dir, run ./run.sh
|
[16:29] andrewvc
|
finally visit localhost:3000 and try putting a message in the chat entry box and hitting send. that'll cause the bin/socket-motor process to die
|
[16:29] andrewvc
|
phew
|
[16:29] andrewvc
|
yeah, I've been trying to communicate this via strace because the setup is a bit cumbersome
|
[16:34] cremes
|
needs hashie/mash too
|
[16:35] andrewvc
|
ah crap
|
[16:35] cremes
|
andrewvc: another require error, but this one doesn't look like a gem
|
[16:35] cremes
|
<internal:lib/rubygems/custom_require>:29:in `require': no such file to load -- socket-motor/messages/req_rep_message (LoadError)
|
[16:35] andrewvc
|
gem install hashie
|
[16:35] andrewvc
|
oh, forgot to check that in damnit
|
[16:36] andrewvc
|
wait, hmm it is there
|
[16:37] cremes
|
probably a path issue
|
[16:37] andrewvc
|
I've been running it with -I lib/ in the socket motor dir
|
[16:37] andrewvc
|
yeah
|
[16:38] andrewvc
|
this is bin/socket-motor yeah
|
[16:39] cremes
|
so, what's the right command? ruby -l lib bin/socket-motor doesn't work
|
[16:39] andrewvc
|
I start it with ruby -I lib/ bin/socket-motor
|
[16:39] cremes
|
ruby -I lib bin/socket-motor works (where -I is an "eye")
|
[16:40] andrewvc
|
yep
|
[16:40] cremes
|
now i'm getting an in6_addr error (invalid address)
|
[16:40] cremes
|
do you have some addresses hard coded?
|
[16:40] cremes
|
or ipv6 stuff?
|
[16:40] andrewvc
|
nope
|
[16:41] andrewvc
|
I disabled it actually
|
[16:41] cremes
|
https://gist.github.com/820848
|
[16:41] cremes
|
i'm on osx... don't know if that should matter
|
[16:41] andrewvc
|
oh, it uses resolv to do a hostname lookup, weird lemme disable that whole block
|
[16:42] andrewvc
|
right now it doesn't do anything, it just looks for the first ipv4 addr
|
[16:42] andrewvc
|
for a given host
|
[16:43] andrewvc
|
prolly an OSX vs linux thing
|
[16:44] cremes
|
how can i disable it locally in your code?
|
[16:44] andrewvc
|
gem install dripdrop should fix it
|
[16:44] andrewvc
|
well hold on one sec
|
[16:44] andrewvc
|
pushing...
|
[16:44] cremes
|
heh
|
[16:44] andrewvc
|
ok pushed, dripdrop 0.9.6 should do it
|
[16:46] cremes
|
success
|
[16:46] andrewvc
|
nice!
|
[16:47] andrewvc
|
basically, this is a websocket <-> ZMQ <-> HTTP <-> Rack bridge
|
[16:47] cremes
|
andrewvc: new error: https://gist.github.com/820863
|
[16:48] andrewvc
|
hmm, that's a new one
|
[16:48] cremes
|
i'm looking at config.ru... do i need some /swf and /js dirs somewhere?
|
[16:48] andrewvc
|
yeah, they're in public
|
[16:49] cremes
|
ah, so they are
|
[16:49] andrewvc
|
not sure about thin, hmmm
|
[16:49] cremes
|
is thin 1.2.7 the right one?
|
[16:50] andrewvc
|
oh, I just got it as well, it's a 1.9.2 vs rbx issue hold on lemme pin it down
|
[16:51] andrewvc
|
ah, here we go
|
[16:51] andrewvc
|
thin -R config.ru start
|
[16:51] andrewvc
|
I was using old style syntax, apparently RBX doesn't mind weirdly
|
[16:52] cremes
|
okay, i get the crash
|
[16:52] cremes
|
there are a *lot* of moving parts here... this is going to be tough
|
[16:53] andrewvc
|
yeah, that's the thing
|
[16:53] cremes
|
do you also see the EM crash from run.sh?
|
[16:53] andrewvc
|
ohh yeah, now I do, this is the first time i've run it in 1.9.2 in a while, I guess rbx has been shielding me
|
[16:53] andrewvc
|
interesting
|
[16:54] cremes
|
i'm going to let you chase this a little bit more... :)
|
[16:54] andrewvc
|
yeah
|
[16:54] andrewvc
|
good find
|
[16:54] cremes
|
i find that i fix a *lot* of bugs by running my code across all 3 of the major runtimes
|
[16:54] andrewvc
|
i mean, if they're synchronized, that opens up a whole new world
|
[16:54] cremes
|
some are more forgiving than others
|
[16:55] cremes
|
you might also try MRI 1.8.7p-<whatever is latest> just for giggles
|
[16:55] andrewvc
|
hehe
|
[16:55] andrewvc
|
yeah, well here's the crazy thing, I've been running socket-motor in rbx and 1.9.2
|
[16:55] andrewvc
|
just never thought to run the rack app in it
|
[16:55] cremes
|
i know the bindings don't really have support for it, but it might shed some light
|
[16:56] cremes
|
heh
|
[16:56] andrewvc
|
I'm looking forward to jruby support in dripdrop, that's around the corner, thin wasn't a great choice
|
[16:56] andrewvc
|
thanks for shedding light on this though
|
[16:57] andrewvc
|
I guess I should still submit the strace zmq dev, prolly is a zmq bug, shouldn't be possible anyway right?
|
[16:57] cremes
|
well, it depends
|
[16:57] cremes
|
is your rack app sending a 0mq packet in the right wire format?
|
[16:58] cremes
|
i.e. are you using a 0mq socket from rack or something else?
|
[16:58] andrewvc
|
nope, it doesn't speak 0mq, it speaks http. Dripdrop lets you drop HTTP in for a req/rep
|
[16:58] andrewvc
|
so, I'm guessing EM is going crazy, and terminating strangely
|
[16:59] cremes
|
ok, then i don't know
|
[16:59] cremes
|
don't you just love bug hunts?
|
[16:59] andrewvc
|
yeah, well, the HTTP message gets turned into ZMQ xreq/xrep, then comes back as HTTP
|
[16:59] andrewvc
|
hah
|
[17:00] andrewvc
|
Ummm, I woke up at 4am yesterday with an idea to fix it, went back to sleep at 4:30. grumpy
|
[17:00] cremes
|
so funny... i was just telling my partner that i went to bed at midnight, laid awake for 2 hours and started coding again at 2 until 3
|
[17:01] cremes
|
i'm a bit grumpy today myself :)
|
[17:01] cremes
|
sometimes it's impossible to turn off my brain
|
[17:01] andrewvc
|
lol
|
[17:01] andrewvc
|
same
|
[17:01] andrewvc
|
btw, apparently that error was unrelated
|
[17:02] andrewvc
|
I wasn't handling an HTTP response, so EM died, handled it, now it lives but zmq still dies, I'm gonna send this off to the list
|
[17:03] andrewvc
|
my hunch is there's a bug in my app code, and EM is handling an exception strangely, and ZMQ is dying. I have no proof of this, but that's my feeling
|
[17:04] cremes
|
andrewvc: any idea what line of code in dripdrop that this dies on?
|
[17:05] cremes
|
have you narrowed that piece down yet?
|
[17:05] andrewvc
|
I think that's a red herring, I traced all the way through to ffi-rzmq
|
[17:05] andrewvc
|
to right before libzmq send
|
[17:05] andrewvc
|
but it's dying trying to recv from a socket
|
[17:05] andrewvc
|
according to strace
|
[17:05] andrewvc
|
a tried changing up the message being sent, allocating a new one
|
[17:06] cremes
|
is the socket that it is sending on the same as the one libzmq is recv on?
|
[17:06] andrewvc
|
I tried checking ZMQ::EVENTS in a debugger right before the call as well, making sure it was writable
|
[17:06] andrewvc
|
nah, it's a pub socket
|
[17:06] cremes
|
ok
|
[17:06] andrewvc
|
tcp vs inprocess vs ipc makes no diff either
|
[17:06] cremes
|
i bet this is some internal FD that the lib uses for talking amongst itself
|
[17:07] andrewvc
|
yeah, it uses a unix socket for that weird FD no matter which protocols I use
|
[17:07] cremes
|
you need to catch this in gdb
|
[17:08] cremes
|
run it like; gdb --args ruby -I lib bin/socket-motor
|
[17:08] cremes
|
when it dies, you can print the zmq backtrace
|
[17:08] andrewvc
|
awesome, I know nothing about GDB
|
[17:09] cremes
|
i know enough to be dangerous
|
[17:09] andrewvc
|
lol
|
[17:09] cremes
|
i have it in gdb... now i need sustrik or mato to tell me what they need to figure this out
|
[17:10] andrewvc
|
btw, I fixed the rack client
|
[17:10] cremes
|
https://gist.github.com/820902 the backtrace in gdb
|
[17:10] andrewvc
|
if you pull socket motor thin won't keep dying
|
[17:11] cremes
|
it didn't die when i caught the error in gdb
|
[17:11] andrewvc
|
that's good and bad
|
[17:11] cremes
|
it died when i exited gdb though
|
[17:11] andrewvc
|
interesting
|
[17:12] andrewvc
|
zmq acts weird in general when you ctrl-C
|
[17:12] cremes
|
andrewvc: which line in ffi-rzmq does it execute before choking?
|
[17:12] andrewvc
|
lemme dig it up
|
[17:12] cremes
|
yeah, the new reaper thread stuff is supposed to solve that
|
[17:13] andrewvc
|
socket.rb line 260
|
[17:13] andrewvc
|
yeah, I just pulled this morning
|
[17:13] andrewvc
|
no luck there, as far as the new reaper stuff
|
[17:13] andrewvc
|
well, it used to die there
|
[17:14] andrewvc
|
maybe not anymore
|
[17:14] cremes
|
any flags?
|
[17:14] cremes
|
NOBLOCK?
|
[17:14] andrewvc
|
yeah, I tried messing with those as well, it's a two part PUB messages, topic + body
|
[17:14] andrewvc
|
yeah, noblock
|
[17:14] cremes
|
ok, so NOBLOCK & SNDMORE
|
[17:14] andrewvc
|
i tried it with no flags as well
|
[17:14] cremes
|
ok
|
[17:15] cremes
|
how are you constructing the message? is message.address valid?
|
[17:15] cremes
|
i.e. maybe there is garbage in the message and 0mq is choking on that somehow
|
[17:16] andrewvc
|
https://github.com/andrewvc/dripdrop/blob/master/lib/dripdrop/handlers/zeromq.rb#L44
|
[17:16] cremes
|
is the message freshly allocated with Message.new? or is it sourced from elsewhere?
|
[17:16] andrewvc
|
is how it's constructed
|
[17:16] andrewvc
|
I tried firing up a debugger, allocating a new message, and sending that, right before it died
|
[17:16] andrewvc
|
so I used to be able to time it, like, it'd send 4 messages, and die on # 4
|
[17:17] andrewvc
|
so I stepped through the first 3, and inserted a new message right before zmq_send to test that out
|
[17:17] andrewvc
|
no luck there either
|
[17:17] cremes
|
are you sure this line is correct?
|
[17:17] cremes
|
https://github.com/andrewvc/dripdrop/blob/master/lib/dripdrop/handlers/zeromq.rb#L51
|
[17:17] cremes
|
generally you OR flags together, not add them
|
[17:18] cremes
|
e.g. flags = (i + 1 < num_parts ? ZMQ::SNDMORE : 0) | ZMQ::NOBLOCK
|
[17:18] andrewvc
|
oye, crap good catch
|
[17:18] andrewvc
|
*pacepalm
|
[17:18] andrewvc
|
*face palm
|
[17:18] andrewvc
|
lemme try that
|
[17:18] cremes
|
still crashes
|
[17:20] andrewvc
|
yep
|
[17:20] andrewvc
|
I think this is in libzmq, I mean, it shouldn't ever reach there anyway
|
[17:20] andrewvc
|
no matter how inept I am :)
|
[17:21] andrewvc
|
that socket is used for a remote logger, so it's not critical to the app. If I disable it, it runs fairly well
|
[17:21] cremes
|
still looking...
|
[17:21] andrewvc
|
well, aside from all the other bugs in it, that I haven't had time to deal with as I've tracked down this.
|
[17:22] andrewvc
|
brb
|
[17:26] cremes
|
andrewvc: found something
|
[17:30] cremes
|
andrewvc: nope, false alarm
|
[17:33] andrewvc
|
back
|
[17:33] andrewvc
|
the amount of time I've dumped into this is a bit ridiculous at this point, hopefully the mailing list will have an answer
|
[17:33] Rich_Morin
|
Zed Shaw gave a very nice talk last night at the Bay Area Python group, talking about how he used ZeroMQ on assorted projects.
|
[17:33] andrewvc
|
my last hope is finishing jruby dripdrop support
|
[17:34] andrewvc
|
and seeing if jruby gives a better error
|
[17:36] andrewvc
|
that, or running git bisect on libzmq on a lazy saturday
|
[17:37] andrewvc
|
course, I guess I need a known good rev for that
|
[17:40] alexbOrsova
|
im having an issue with zeromq on ubuntu 10.04.1. I downloaded the library for posix, did "./configure", "make", "sudo make install". Then I complied one of the examples and tried to run it and I got "error while loading shared libraries: libzmq.so.0"
|
[17:40] alexbOrsova
|
any suggestions?
|
[17:42] alexbOrsova
|
nevermind, it was a bug in the makefile, "/sbin/ldconfig" should probably be called as part of the "make install" process...
|
[18:03] Rich_Morin
|
Hi, guys. Should we try for a SUSS session this Sunday?
|
[18:03] mikko
|
what is a SUSS session ?
|
[18:05] Rich_Morin
|
Sorry, wrong channel :-/
|
[18:05] Rich_Morin
|
SketchUp Sunday Social
|
[19:11] bitweiler
|
is ZMQ_REQ and ZMQ_REP still use in library or should one use ZMQ_PULL & ZMQ_PUSH?
|
[19:17] Seta00
|
bitweiler, PUSH and PULL aren't replacements to REQ and REP
|
[19:19] andrewvc
|
cremes: I think I figured it out
|
[19:20] andrewvc
|
thanks for all the help, I mean it's still most likely a ZMQ bug I think, but it looks like ZMQ::EVENTS is the cause
|
[19:20] cremes
|
andrewvc: good deal
|
[19:20] andrewvc
|
so, thanks for GDB, that narrowed it down to getsockopt
|
[19:20] cremes
|
bitweiler: REQ/REP and PUSH/PULL are different kinds of sockets
|
[19:21] cremes
|
bitweiler: PUSH/PULL used to have different names that were deprecated; i forget what they were
|
[19:21] andrewvc
|
and ZMQ::EVENTS would get checked by my em-zeromq library, and it'd work for a while, then kaput
|
[19:21] cremes
|
andrewvc: race condition in getsockopt you think?
|
[19:21] andrewvc
|
I think what may be happening still is, ruby is generating some kind of exception but ZMQ is dying first.
|
[19:22] andrewvc
|
the ZMQ::EVENTS calls aren't necessary strictly, as far as I can tell, commenting them out in em-zeromq just results in recv or send being called, and those can fail and be handled
|
[19:23] andrewvc
|
so, I can't speak to it being a race condition, but that sounds right to me
|
[19:26] cremes
|
interesting
|
[19:26] cremes
|
you should post your observations to the ML
|
[19:26] andrewvc
|
I'm going to for sure
|
[19:29] andrewvc
|
if you have some time chuck: https://github.com/andrewvc/em-zeromq/blob/master/lib/em-zeromq/connection.rb
|
[19:29] andrewvc
|
I just removed the calls to ZMQ::EVENTS
|
[19:30] andrewvc
|
I mean, if I just attempt to send or recv and it fails, that works, I can see how it could be slower depending on the ZMQ internals, since those FDs are kind of blunt instruments
|
[19:30] andrewvc
|
could use a second pair of more experienced eyes
|
[19:31] cremes
|
looking...
|
[19:33] andrewvc
|
I think it may just be calling ZMQ::EVENTS on writable sockets
|
[19:34] andrewvc
|
it may even just be PUB sockets, since that's what it is in this case, leaving ZMQ::EVENTS enabled for readables doesn't trigger it
|
[19:34] andrewvc
|
though, this is obviously all new, and perhaps further testing will reveal problems there as well
|
[19:35] cremes
|
andrewvc: not sure about the purpose of #deregister_writable; it just sets a flag that isn't used anywhere
|
[19:36] andrewvc
|
oh, that's used by eventmachine
|
[19:36] andrewvc
|
so, it tells EM to regard or disregard activity on the FD
|
[19:37] andrewvc
|
yeah, it's a bit funky looking, could use a comment
|
[19:37] andrewvc
|
same thing in notify_readable
|
[19:37] cremes
|
ok
|
[19:37] cremes
|
nothing major jumps out at me; looks good
|
[19:38] andrewvc
|
cool. Well, I've got to get back to other stuff, but I'll be posting gdb traces and other goodness on the list tonight
|
[19:38] cremes
|
ok
|
[19:38] andrewvc
|
thanks a bunch, if you hadn't brought out GDB I think I'd still be stuck
|
[19:38] sysgears
|
hi guys, i'm trying to extend zmq termination, so that messages at the receiving pipe were all fetched before ZMQ terminates
|
[19:38] cremes
|
it's nice to have multiple tools in your toolbag
|
[19:39] cremes
|
sysgears: take a look at ZMQ_LINGER
|
[19:41] sysgears
|
cremes, what for? I'm trying to not loose any messages at receiver end, ZMQ_LINGER is to set TTL for messages, its a different thing I think
|
[19:43] cremes
|
ZMQ_LINGER prevents the socket from closing until it has flushed all messages OR until the timeout has expired
|
[19:43] cremes
|
there is no TTL in 0mq
|
[19:43] cremes
|
and it isn't possible to not lose messages at receiver end unless you do an explicit ACK/reply
|
[19:43] cremes
|
for each message
|
[19:43] sysgears
|
Cremes, this is true for sending end
|
[19:44] sysgears
|
I know it is not possible now, thats why I'm patching ZMQ
|
[19:44] cremes
|
ok
|
[19:44] cremes
|
are you creating a new socket type?
|
[19:45] sysgears
|
nope, I want that recv fetched all the messages it has before it will return ETERM
|
[19:46] sysgears
|
currently it returns ETERM right after it detects ctx_terminated is on
|
[19:46] cremes
|
do you plan to make that a socket option?
|
[19:47] Seta00
|
I'm having difficulties to track down the reason I'm hitting this assertion: nbytes == sizeof (command_t) (mailbox.cpp:244)
|
[19:47] cremes
|
Seta00: what os?
|
[19:47] Seta00
|
Linux
|
[19:47] Seta00
|
Ubuntu 10.10
|
[19:48] cremes
|
you might want to look at modifying some sysctls; the command_t's use some of those buffers for ipc/tcp/udp
|
[19:48] sysgears
|
I plan to extend zmq_term semantics - it will not only flush all messages to be sent before termination it will also recv all messages that are currently in its buffers before termination.
|
[19:48] cremes
|
search the ML for sysctl and see what comes up
|
[19:49] Seta00
|
the ML?
|
[19:49] cremes
|
mailing list
|
[19:49] Seta00
|
oh
|
[19:49] Seta00
|
lol
|
[19:49] Seta00
|
don't use ANU's
|
[19:49] Seta00
|
(Acronyms Nobody Understand)
|
[19:50] cremes
|
yessir
|
[19:51] andrewvc
|
ANU's are fine so long as they're TLA's
|
[19:51] cremes
|
andrewvc: hey, get back to work!
|
[19:51] andrewvc
|
lol
|
[20:00] Guthur
|
i have the scenario where requests come in on individual threads the reply to each comes back async on other threads, my solution is to use 0MQ, is it overkill and normal thread constructs more suited?
|
[20:00] Seta00
|
tried this: http://www.mail-archive.com/zeromq-dev@lists.zeromq.org/msg06901.html
|
[20:00] Seta00
|
didn't work
|
[20:03] cremes
|
Guthur: that's a great use-case for the inproc transport
|
[20:03] kaib
|
hi all. are there any other native implementation of zeromq than the reference c++ implementation?
|
[20:03] cremes
|
kaib: not that i know of
|
[20:04] cremes
|
Seta00: hmm... are there are sysctl's for ipc?
|
[20:04] cremes
|
i'm pretty sure the command mailboxes are using ipc or something similar internal to the library
|
[20:04] kaib
|
are they actively discouraged or just haven't happened yet? the protocol seems like a great little language interoperability system.
|
[20:05] cremes
|
(though i could definitely be wrong)
|
[20:05] cremes
|
kaib: no one has come along to take a whack at it yet; you could be the first
|
[20:05] cremes
|
i've never seen the imatix guys discourage anybody from hacking on the lib or attempting a port
|
[20:05] Guthur
|
cremes, that's my thought as well
|
[20:06] Guthur
|
trying to convince the team lead at work is proofing a challenge
|
[20:06] Guthur
|
he seems to think normal threading constructs and a global store are an 'easy' solution
|
[20:07] Guthur
|
it's funny though, this easy solution still does work right yet
|
[20:07] cremes
|
well, one way to discuss it is in terms of future scalability
|
[20:07] Guthur
|
does/doesn't
|
[20:07] cremes
|
what might be a thread today could easily be a separate process (or on a separate box) tomorrow
|
[20:07] cremes
|
and the only thing you need to change is the transport string: inproc -> tcp
|
[20:08] Guthur
|
yeah, the flexibility is a real seller for me personally
|
[20:08] Guthur
|
that and the whole message passing concept
|
[20:09] kaib
|
cremes: so the transports add some framing, do the sockets add any framing of their own?
|
[20:09] Guthur
|
I just have to keep plugging a way at work to try and convince others
|
[20:09] kaib
|
cremes: i've been trying to figure out the exact wire format.
|
[20:09] kaib
|
Guthur: what is the problem you are trying to solve, i logged on just past your description..
|
[20:09] Guthur
|
kaib i have the scenario where requests come in on individual threads the reply to each comes back async on other threads, my solution is to use 0MQ, is it overkill and normal thread constructs more suited?
|
[20:11] kaib
|
ok, so are the original threads that received the request the ones that transmit out the response?
|
[20:12] kaib
|
Guthur: ie. Client -> Thread0 -> async backend -> Thread1 -> Thread0 -> Client
|
[20:13] Seta00
|
hmm, it has something to do with the way I'm killing the socket on disconnect
|
[20:17] Guthur
|
sorry i disco'd
|
[20:17] Guthur
|
kaib yeah that's the scenario
|
[20:17] Guthur
|
multiple client requests as well
|
[20:17] Guthur
|
concurrent requests
|
[20:17] cremes
|
kaib: wire format documented here: http://api.zeromq.org/zmq_tcp.html
|
[20:18] Guthur
|
I actually have it solved with ZMQ
|
[20:18] Guthur
|
but just can't get the buy in from my team lead to include the dependency
|
[20:19] Guthur
|
very frustrating
|
[20:19] cremes
|
Guthur: show your team lead how you can now break it up into multiple processes without changing any of the message queueing code
|
[20:19] cremes
|
that's a pretty big win in my opinion
|
[20:19] kaib
|
cremes: that's the wire protocol for tcp, i'm reading the code and it seems like there is some other framing going on as well. there is talk about "data batches"
|
[20:20] cremes
|
kaib: not sure then; i haven't heard the term "data batches" come up before
|
[20:23] kaib
|
Guthur: when you fire off the request to the async backend do you have any chance of deciding which thread gets the response? or even which pool of threads?
|
[20:24] Guthur
|
kaib:nope its pretty opaque, the scenario is a request to a process running a quickFIX app
|
[20:24] Guthur
|
the requesting thread send off a, QuoteRequest FIX message, this will then return a Quote async on another thread
|
[20:27] kaib
|
Guthur: ok, your team lead might be trying to avoid extra dependencies on external projects... ie. if you guys can get it to work with a simpler approach you will be good for a while.
|
[20:27] cremes
|
s/simpler/more familiar/
|
[20:28] kaib
|
Guthur: i would benchmark your implementation. that gives you data to go on when the discussion resurfaces later..
|
[20:28] kaib
|
cremes: that's true. much can be said for believing in the familiar.. :-)
|
[20:28] cremes
|
kaib: don't i know it! :)
|
[20:29] kaib
|
cremes: in zmq_encoder.cpp, talking about batches.
|
[20:29] cremes
|
kaib: you need to chat with sustrik (primary dev) or drop a note to the mailing list
|
[20:30] cremes
|
i only dig into the internals when i have a showstopper bug
|
[20:30] kaib
|
cremes: thanks.
|
[20:30] cremes
|
so far, i have somehow avoided the encoder stuff
|
[20:30] kaib
|
sustrik: ping?
|
[20:30] cremes
|
you are welcome
|
[20:30] cremes
|
kaib: i think most of the devs are GMT+3
|
[20:30] Guthur
|
I think it is telling how no one has actually implemented the a solution using the 'easy' global data approach
|
[20:32] kaib
|
Guthur: heh.. well, you need to come well armed. working code and good political connections go a long way. :-)
|
[20:32] kaib
|
cremes: oh, well i'm gmt+2, they seem to drop off awfully early.. :-)
|
[20:32] Guthur
|
well I have the first,
|
[20:33] Guthur
|
The half working solution they currently have takes the same time to do one quote as mine does to 60
|
[20:33] Guthur
|
to do 60*
|
[20:34] Guthur
|
That performance measurement has only became available to me this evening
|
[20:34] Guthur
|
though they are using HTTP for the remoting
|
[20:35] Guthur
|
so it will improve some when they can move a fast protocol
|
[20:35] Guthur
|
faster*
|
[20:36] Guthur
|
though it will need to be considerably faster than that, 5 secs per quote is just not going to cut it at all
|
[20:43] cremes
|
Guthur: i do *way* faster than that in *ruby*
|
[21:21] chmod700
|
so I just grabbed 0mq+python bindings for v2.0.10 and am trying to get https://github.com/imatix/zguide/blob/master/examples/Python/mtserver.py to work, can someone tell me what I should be sending to get the "World" response back?
|
[21:24] chmod700
|
all I see on my connection to port 5555 is '\x01\x00'
|
[21:25] ianbarber
|
are you connecting with 0mq?
|
[21:26] ianbarber
|
on both sides
|
[21:28] chmod700
|
ianbarber: no I was just using telnet to connect
|
[21:29] chmod700
|
I guess I missed something in the docs :), how does one go about layering their wire-format stuff on top of that XREP device?
|
[21:30] ianbarber
|
0mq pretty much does all the wire level stuff, you send your own format in the messages
|
[21:31] ianbarber
|
its very little overhead
|
[21:32] chmod700
|
ianbarber: so why doesn't telnet work (or wget, or a browser) when hitting the XREP port?
|
[22:11] ianbarber
|
there is still a wire protocol, so you need to be able to understand that
|
[22:11] ianbarber
|
in general zmq is designed for people using the library at both ends
|
[22:14] chmod700
|
ianbarber: thanks, so for HTTP for instance, do I need to stand up my own HTTP server and then forward requests through a zmq socket to workers?
|
[22:15] chmod700
|
or is there some magic http zmq device?
|
[22:15] Skaag
|
the first.
|
[22:16] Skaag
|
there is no direct relation between http and zmq
|
[22:16] Skaag
|
if with java, you can use something like jetty to expose some kind of rest/json/xml interface, then pass the messages to a thread that publishes messages
|
[22:18] Guthur
|
are select_t, poll_t, epoll_t, devpoll_t and kqueue_t all essentially doing the same thing except with different raw connections
|
[22:19] ianbarber
|
chmod700: mongrel2 is quite good for doing a webserver with 0MQ transport to the backend
|
[22:19] ianbarber
|
but in general, yeah, that's the kind of thing
|
[22:21] Skaag
|
ianbarber: any samples of such a setup with mongrel2?
|
[22:21] Skaag
|
would love to play around with it
|
[22:21] ianbarber
|
Skaag: look at the mongrel2 book, 0MQ is the only way you can do dynamic content with it
|
[22:22] Skaag
|
they have that as a sample? :)
|
[22:22] ianbarber
|
basically it binds a push socket, and sends the headers, path, and some other bits and pieces over it
|
[22:22] ianbarber
|
yeah, download mongrel2 and look in the examples dir
|
[22:23] Skaag
|
awesome
|
[22:23] Skaag
|
will do that now
|
[22:24] ianbarber
|
if you just need one way comms, take a look at mikko's httpush https://github.com/mkoppanen/httpush
|
[22:24] ianbarber
|
that's great if you want to do network logging over http or similar
|
[22:41] Skaag
|
that's one way, towards the client side, I assume?
|
[22:42] Skaag
|
damn -17Ë outside... not daring to go out.
|
[22:42] Skaag
|
celcius.
|
[23:58] eut
|
hello
|
[23:59] eut
|
when using zmq_xrep sockets how are the three message pieces (identity, delimiter, and body) supposed to be separated?
|