--- Log opened Fri Feb 22 00:00:08 2013 --- Day changed Fri Feb 22 2013 00:00 <@isaacs> yeah 00:00 <@isaacs> like, changing the message doesn't automatically update the stack trace 00:00 <@isaacs> kinda ruins our AssertionError class 00:02 <@isaacs> ohh... it's like this.message is read-only or something 00:06 <@isaacs> oh, no 00:06 <@isaacs> it's that the stack getter doens't call the toString getter 00:06 <@isaacs> er, the toSTring function 00:16 <@isaacs> trevnorris: https://github.com/isaacs/node/tree/v8-3.16.14 00:16 <@isaacs> or tjfontaine 00:17 <@isaacs> whoever asked for that. you guys look the same on irc 00:17 < trevnorris> freaka whoot! 00:17 < trevnorris> tjfontaine: i know you've been around a lot longer than I have and all, but you need to change your nick. ;-) 00:18 < tjfontaine> haha 00:18 < tjfontaine> trevnorris: in irc age I'm much older than you even know :P 00:19 < trevnorris> lol. yeah, I got kind of a late start. 00:20 < bnoordhuis> i think isaacs has the same nick color script i have... 00:21 < tjfontaine> people with good clients should have a problem with us 3, since our lengths are all the same :) 00:21 < TNorris> there, better? 00:21 < tjfontaine> haha 00:21 < tjfontaine> :P 00:22 < trevnorris> was using that for a while, until i figured it would confuse everyone not having the same nick as my github. 00:22 < tjfontaine> thank god, finally got multiarch builds working 00:24 < MI6> joyent/node: bnoordhuis created branch issue4808 - http://git.io/PmtBAw 00:24 < bnoordhuis> ^ someone LGTM that pretty please? 00:25 < tjfontaine> lgtm :) 00:25 < bnoordhuis> merci :) 00:25 < MI6> joyent/node: Ben Noordhuis v0.8 * 22d3eff : doc: add note about child process line buffering Fixes #4808. - http://git.io/bqfs4w 00:30 <@isaacs> hmmm... this is odd. apparently there's some issue with V8 3.16 when stdout is a file 00:31 < trevnorris> typeof null === 'object' <- wtf? i knew this, but why oh why? 00:36 < bnoordhuis> trevnorris: what else? 00:39 < trevnorris> bnoordhuis: hm? 00:40 <@isaacs> ok, so, this is weird 00:40 <@isaacs> on 3.16, i'm seeing a timeout (timeout!) from simple/test-stdout-to-file 00:41 <@isaacs> it seems like it's spending many seconds on the data = new Buffer(data, encoding) in fs.SyncWriteStream 00:41 <@isaacs> super strange 00:41 <@isaacs> when i do those same operations in a test file, it takes zero time 00:44 <@isaacs> oh, ok, i can reproduce it in a standalone file 00:44 < trevnorris> isaacs: just fyi, here's a bug I filed about isolates: http://code.google.com/p/v8/issues/detail?id=2487 00:45 < trevnorris> i can't tell if that means the old isolate api is already deprecated in 3.16 or not. 00:45 <@isaacs> hm 00:47 <@isaacs> it happens super fast on the repl, but not in a script 00:48 < tjfontaine> it presents super fast in repl? 00:48 < bnoordhuis> tjfontaine: i can't land that tap pr just yet, i'm 99% it'll break the windows build 00:48 < bnoordhuis> trevnorris: it's deprecated in 3.17 00:49 < bnoordhuis> i was actually working on upgrading to 3.17 00:49 < trevnorris> coolio. i like that idea. 00:49 < tjfontaine> bnoordhuis: at the very least we could drop tap_output = 0; at the top of runner-win.c? 00:50 < bnoordhuis> tjfontaine: i guess that moving `int tap_output` to runner.c would fix it 00:50 <@isaacs> yeah, definitely. String::Utf8Length() got way way slower. 00:50 <@isaacs> that sucks 00:51 < bnoordhuis> how much slower is way way slower? 00:54 < tjfontaine> bnoordhuis: force-pushed with `int tap_output = 0;` at the top of runner.c 00:54 < tjfontaine> should there be a space between vars there? 00:54 <@isaacs> this looks mostly nice, though: https://gist.github.com/5009914 00:55 < bnoordhuis> tjfontaine: ../../test/run-tests.c: In function ‘maybe_run_test’: 00:55 < bnoordhuis> ../../test/run-tests.c:158: error: too few arguments to function ‘run_test’ 00:55 < bnoordhuis> ../../test/run-tests.c:159: warning: control reaches end of non-void function 00:55 < bnoordhuis> same for run-benchmarks.c 00:55 < tjfontaine> oh oh 00:55 < tjfontaine> lemme fixor this 00:55 < bnoordhuis> oh, also long lines in test/runner.c 00:55 < bnoordhuis> wrap at 80 columns 00:56 < tjfontaine> ah run_test itself is too long, ok 01:01 < tjfontaine> bnoordhuis: a single indent in, or line up with first arg? 01:08 <@isaacs> d'oh. i broke lint. 01:08 <@isaacs> weird that the tests didn't catch it 01:09 <@isaacs> i swear sometimes that thing is just fickle 01:09 < tjfontaine> I don't get pgrep on smartos 01:12 < tjfontaine> ah, pr_psargs is too small to capture what I'm looking for 01:16 < bnoordhuis> tjfontaine: line up (as in: arguments should line up) 01:17 < tjfontaine> ok 01:55 < bnoordhuis> hm, v8 3.17.2 has some rather spectacular performance regressions 01:55 < bnoordhuis> http/cluster.js type=bytes length=102400 c=50: 5.3300 01:56 < bnoordhuis> that's ~630x slower than 3.15 01:56 < bnoordhuis> with c=500 it doesn't even finish in any reasonable amount of time 02:01 <@TooTallNate> not good... 02:06 < bnoordhuis> mraleph: ^ take heed 02:17 < bnoordhuis> some nice speedups on other benchmarks though 02:17 < bnoordhuis> the http thing seems to be a regression in string consing / flattening? 02:18 < bnoordhuis> something to look into tomorrow 02:18 < bnoordhuis> sleep tight people 02:22 <@isaacs> bnoordhuis: way slower = many thousands of times slower. 02:22 <@isaacs> bnoordhuis: from ms to minutes, on a string 1024*1024 in length 02:34 <@isaacs> Here's what's crazy freaky, though... Buffer.byteLength *ISNT* slower in teh repl. 02:35 <@isaacs> only in non-repl contexts. 02:35 <@isaacs> ! 02:35 <@isaacs> 02:35 <@isaacs> !? 02:37 < Raynos> isaacs: https://github.com/joyent/node/issues/4816#issuecomment-13925530 03:28 <@isaacs> Raynos: it's fine: https://gist.github.com/5010496 03:50 < Raynos> isaacs: let me check for objectMode :p 03:50 < Raynos> oh god I have to build master >_< 03:54 < Raynos> is there an easier way to run an individual test yet? 03:55 <@isaacs> Raynos: ./node path/to/test.js 03:55 <@isaacs> Raynos: or python tools/test.py simple/test-stream* 03:55 <@isaacs> Raynos: keep master and v0.8 checked out in two separate folders. 03:55 <@isaacs> makes swithcing easier 03:55 <@isaacs> ok, i'm out 03:55 * isaacs & 03:55 < LOUDBOT> YOU DO, YOU REALLY REALLY DO 03:56 < Raynos> isaacs: https://gist.github.com/Raynos/b61f1c7d5f0534e33931 04:12 -!- mode/#libuv [+o TooTallNate] by ChanServ 13:43 < MI6> joyent/libuv: Ben Noordhuis master * da0b84d : unix: auto-unref spawn handle on process exit Consistent, for better or - http://git.io/xUpXGw 13:44 < bnoordhuis> saghul: ^ 13:46 < `3rdEden> bnoordhuis: http://cl.ly/image/3U3q381R0b0z 13:46 < bnoordhuis> what will i see when i click on that link? 13:46 < `3rdEden> that your site is down 13:46 < `3rdEden> or goats 13:46 < bnoordhuis> ah 13:46 < bnoordhuis> wfm 13:47 < `3rdEden> Just thought id let you know :) 13:47 < bnoordhuis> yes, thanks. odd though, curl wfm too 13:49 < `3rdEden> bnoordhuis: ye seems to be up again 13:49 < saghul> bnoordhuis great, thanks a lot! 13:49 <@indutny> morning 13:49 < `3rdEden> might have been a small disruption in cloud flare 13:49 <@indutny> wfm 13:49 <@indutny> too 14:23 < bnoordhuis> v8 is pretty flaky lately 14:24 < bnoordhuis> i'm trying to run the linux-tick-processor but d8 crashes during a gc cycle 14:24 < bnoordhuis> both with 3.16 and 3.17 14:25 < bnoordhuis> and of course it doesn't happen with debug builds... 14:26 < bnoordhuis> 41670 99.9% 99.9% syscall <- umm... 15:15 < bnoordhuis> 95.73% perf [unknown] [.] 0x00000000007a219b <- that's not really helping... 15:22 < bnoordhuis> for some reason, the perf regressions from last night has disappeared... 15:23 < bnoordhuis> without anything changing 15:25 < bnoordhuis> http/cluster.js type=bytes length=102400 c=50: 2438.2 <- that was 5.3 last night 15:28 < bnoordhuis> hm, maybe something did change - but in node, not v8. i see a couple of streams2 patches landed 16:15 < MI6> joyent/libuv: Ben Noordhuis master * c98083e : unix: short-circuit on no-op io watcher changes Don't add the io watcher - http://git.io/kiWqBw 16:18 < mmalecki> bnoordhuis: hey 16:20 <@isaacs> Raynos: that's not what i'm seeing on master. 16:21 < mmalecki> so Bert is sleeping by a pool, any idea what joke can I pull on him? 16:24 <@isaacs> Raynos: but, it's not actually calling read(0) unless it needs readable, so that only happens once. hrm. 16:26 <@indutny> mmalecki: sell him as slave 16:31 <@isaacs> bnoordhuis: what's your opinion about v8 versions to ship 0.10 with? 16:31 < mmalecki> indutny: it's illegal 16:31 <@isaacs> bnoordhuis: 16 or 17 16:31 <@indutny> mmalecki: ok, just sell his return ticket and buy one to russia 16:31 <@indutny> i'll sell him there 16:31 <@indutny> its illegal too 16:32 <@indutny> but... you know 16:32 <@indutny> isaacs: are we currently using 16? 16:32 <@isaacs> indutny: we're currently using 15 16:32 <@isaacs> but 16 would be rad 16:32 <@indutny> ok 16:32 <@indutny> yep 16:33 <@indutny> what about tests? 16:33 <@isaacs> i've got 16 passing 16:33 <@indutny> are they passing for both 16 and 17? 16:33 <@isaacs> but there's this weird Buffer.byteLength() taking forever issue. 16:33 <@indutny> oh 16:33 <@isaacs> going to try to create a reduced test case for V8 today 16:33 <@isaacs> it's not slow in the repl, only in a script 16:33 <@isaacs> weird, right? 16:33 <@indutny> yes 16:34 <@indutny> may be it happens because of closure? 16:34 <@indutny> models are rning in clousre 16:43 <@isaacs> hm. 16:44 <@isaacs> maybe, i don't know 16:44 <@isaacs> indutny: fwiw, it's the same with NODE_MODULE_CONTEXTS=1 16:44 <@indutny> oh 16:44 <@indutny> even that 16:46 <@isaacs> with NMC, it's not run in a closure, it's run in a separate context, like the repl 17:15 <@isaacs> hm. ok, the program is spending 92s in ConsStringIteratorOp 17:15 < tjfontaine> 92 seconds, jeepers 17:18 <@isaacs> yeah, fer realsies 17:18 <@isaacs> it'd take less time to just walk the string and do it manually in js 17:21 <@isaacs> hm. ConsStringIteratorOp::Search does have a while(true) in it, so this is probably got a bug somewhere. 17:49 <@isaacs> indutny: http://code.google.com/p/v8/issues/detail?id=2551&thanks=2551&ts=1361555104 17:49 <@indutny> great 17:49 <@isaacs> indutny: (if you're curious) 17:49 <@indutny> starred 17:50 <@isaacs> we definitely cannot release v0.10 with that bug, so if it's fixed soon, we can upgrade to v8 3.16.14, and if not, i guess just go out with 3.15 like w ehave now, and probably update to 3.17 in 0.12 17:51 <@isaacs> bnoordhuis: ^ 17:51 < tjfontaine> we could float a patch if we fix it first though, right? 17:52 <@isaacs> sure 17:52 <@isaacs> or even if they fix it, and don't backport, or something 17:52 <@isaacs> but 3.16 is their current stable branch, so it'll probably get landed relatively quickly 17:53 < tjfontaine> nod 18:22 < creationix> hmm, can't create an ArrayBuffer in node 0.8.20 18:22 < creationix> new ArrayBuffer(1024*1024) 18:22 < creationix> using official node binary for OSX 18:22 < trevnorris> wtf? how'd that get dropped. 18:22 < creationix> smaller values work 18:23 < creationix> I can create a node Buffer that size no problem 18:24 < trevnorris> hm, just tried in linux. worked. 18:24 < creationix> strange 18:24 < creationix> I'm away from home, I can't test on my other machines 18:24 < creationix> does V8 not have it's own typed array implementation? or is that part of webkit 18:25 < creationix> ok, the large values does eventually work in osx node, it's just really slow (~10 seconds) 18:26 < creationix> hmm, or maybe that's inspect that's killing me 18:26 < creationix> Buffer has a custom inspect 18:27 < creationix> yep, write a dummy ArrayBuffer.prototype.inspect and it's fast 18:27 < creationix> sorry for the noise 18:27 < creationix> I wonder if we could add custom .inspect methods to the the typed array family 18:28 <@isaacs> creationix: sure, ++ for master/unstable, sure 18:28 <@isaacs> creationix: not high priority, though. patch welcome etc. 18:28 < creationix> or at least, make the offsets not enumerable to match the browser 18:28 <@isaacs> or that 18:28 < creationix> isaacs: yeah, who uses typed arrays in node anyway 18:28 < trevnorris> isaacs: you gotta get a faster machine man. righty - done in 0.00001067s. ;-) 18:28 <@isaacs> hahh 18:28 < creationix> I do but because I'm writing browser code I want to test using node 18:28 <@isaacs> trevnorris: you've got one of those new joyent macbooks 18:29 <@isaacs> trevnorris: when my 3.0ghz comes in, i'll be flyin 18:29 <@isaacs> oh, wait, you're trevnorris not tjfontaine 18:29 <@isaacs> hahah 18:29 < tjfontaine> :) 18:29 * isaacs actual honest mistake ^ 18:29 <@isaacs> not making jokes 18:30 < creationix> isaacs: btw, what did you think of asm.js. I couldn't tell how much you were being sarcastic on twitter 18:34 <@isaacs> creationix: no, i really think it'd be nice to have a very explicit way to say "Write your code like this and you can have things go very fast, and not have toworry about gc pauses, etc." 18:34 < creationix> I'm just not sure how this would work for JS code 18:34 < trevnorris> isaacs: oh, freak. on master righty - 0.00001067s; 3.16.14 - 0.040659s 18:34 <@isaacs> creationix: i didn't realize at first that there's no way to deal with strings or arbitrary struct datas 18:35 < creationix> all data structures have to be re-implemented in the heap 18:35 < creationix> right 18:35 <@isaacs> creationix: i mean, i'm sure that the browserid folks LOVE this :) 18:35 < creationix> which for me is acceptable since I'm writing a new VM anyway 18:35 < creationix> but for someone wanting to write faster JS, we need something else I think 18:35 <@isaacs> yeah 18:35 < trevnorris> isaacs: that's 3810x's slower... 18:35 < creationix> though maybe parts of node could be implemented in asm.js. I wonder how fast asm.js md5 would be 18:36 <@isaacs> trevnorris: what about lefty? 18:36 < creationix> my pure js version is already faster than node's bindings because of the C++ tax 18:36 <@isaacs> creationix: right, but it's only faster whne you run it a bazillion times 18:36 <@isaacs> creationix: if you run it once, then the JS tax kills you 18:36 < creationix> true, JITs are faster when hot 18:36 < creationix> but asm.js could AOT 18:37 < creationix> not that MD5 is a bottleneck for anyone 18:37 <@isaacs> creationix: we could also rejigger it so that we create a buffer, call the openssl stuff with the buffer, then read the data out of it when it's done, without ever actually taking the result from C++ to JS 18:37 < creationix> though RSA may be 18:37 < trevnorris> isaacs: still running... 18:37 < creationix> isaacs: heh, that's what my fast md5 does actually, just in all js 18:37 < creationix> creating the buffer is super slow 18:38 < trevnorris> though, what's the likelihood of v8 supporting asm.js? 18:39 < trevnorris> and still running..... 18:40 < trevnorris> this thing's going to burn through my battery before it finishes. 18:41 -!- mode/#libuv [+o TooTallNate] by ChanServ 18:41 < creationix> trevnorris: well, even if they ignore the pragma and don't write a special AOT compiler, the style is code that can be optimized. I imagine V8 optimizes it some. 18:41 < creationix> except we're using our own implementation of typed arrays that V8 doesn't know much about 18:41 < creationix> so that could be a problem 18:43 < trevnorris> creationix: but there are better optimizations for v8. (e.g. ((n % 8) / 8) is way way faster than ~~(n / 8)) 18:43 < trevnorris> or (n/8)|0 or whatever their spec uses. 18:43 < creationix> I see 18:44 < creationix> I know mraleph didn't seem to excited about the asm.js spec 18:44 < trevnorris> creationix: the asm.js spec was created w/ emscripten specifically in mind. 18:44 <@isaacs> creationix: he just wasn't so sure that it'd be super useful for node 18:44 < creationix> I do like the idea of implementing my own data structures on top of a "heap" 18:44 < creationix> my new language semantics don't match lua or js semantics 18:45 < creationix> so I'll essentially skip the native stuff and write my own GC 18:45 < creationix> hopefully it won't be too slow 18:45 < trevnorris> isaacs: left master - 0.000010956; 3.16.14 - 348.98; that's 31,852,866x's slower. 18:46 <@isaacs> trevnorris: wow, that's even a bigger diff than i'm seeing 18:46 < trevnorris> yeah... 18:46 <@isaacs> so, for the time being, i guess we're staying with 3.15 18:47 < trevnorris> until that's fixed, um yeah. 18:47 < trevnorris> isaacs: also, it was using ~100MB ram while doing that operation. 18:47 < trevnorris> but the string was only 1MB is size. 18:48 <@isaacs> trevnorris: yeah, something is busted there. 18:48 <@isaacs> indutny: feel like digging into some c++? ;) 19:09 < Raynos> Isaac's: its definitely a bug. Ill pr a broken test. What branch should I pr into? 19:17 <@isaacs> Raynos: master 19:17 <@isaacs> Raynos: i have a patch that might be relevant 19:18 <@isaacs> https://gist.github.com/5015824 19:18 <@isaacs> Raynos: ^ 19:20 < tjfontaine> well this test-cluster-disconnect test seems to have been racey on smartos for a while (back into .8 days) but in .9 it seems the ECONNRESET stuff makes it die in a more predictable manner 19:20 <@isaacs> tjfontaine: interesting 19:21 < tjfontaine> isaacs: in .8 world when things go wrong it would hang, assuming it's waiting for the listening event, in .9 the handle just isnt there or we get the reset error (which I presume means destory already removed the handle) 19:22 < tjfontaine> there's not a particualrly good reason for this test to be racey as far as I can tell though 19:25 <@isaacs> Raynos: btw, there is no more lowWaterMark 19:25 <@isaacs> lowWaterMark no longer exists. 19:30 <@isaacs> Raynos: https://github.com/joyent/node/pull/4833 19:30 <@isaacs> TooTallNate: ^ 19:31 <@isaacs> Raynos: push() triggers a read(0) *on nexttick) 19:31 <@isaacs> Raynos: so, if you push(), push(), push(), that's fine. 19:31 <@isaacs> Raynos: if you push() nexttick(push()), not so fine 19:38 <@isaacs> TooTallNate: ok, the leak test still is fine with this chnage. 19:38 <@isaacs> i'm gonna land on v0.8 19:38 <@isaacs> since we have to do a new one for the EINPROGRESS bs anyway 19:38 <@TooTallNate> isaacs: cool, sgtm 19:39 < MI6> joyent/node: isaacs v0.8 * f9a0140 : http: Handle hangup writes more gently - http://git.io/j6GDUg 19:41 <@isaacs> TooTallNate: how do you feel about the "preemptively read up to hwm" change? 19:43 <@TooTallNate> isaacs: seems fine to me, as long as Raynos is happy 19:49 <@isaacs> Raynos: ? 19:49 <@isaacs> ^ 19:49 <@isaacs> bbiab 19:49 * isaacs & 19:49 < LOUDBOT> INTERESTS FROM VIRGINIA NORTHWARD TO NEW ENGLAND SHOULD MONITOR THE PROGRESS OF EARL. 19:49 < Raynos> Good to me 19:50 < Raynos> Preemptive upto hwm is ideal. 19:52 < Raynos> Isaacs: maybe also change defualt high water mark when objectMode is true 19:52 <@indutny> isaacs: sure 19:52 <@indutny> isaacs: what's up? 19:52 <@indutny> that v8 stuff? 19:54 < tjfontaine> more than likely 20:43 < trevnorris> indutny: yeah, the perf regression shown in http://code.google.com/p/v8/issues/detail?id=2551 20:44 < trevnorris> ok, in dns.js there's a variable called "resolver" in exports.resolve that gets assigned a function, but there's also an external function called "resolver". 20:44 < trevnorris> that doesn't seem right... 20:57 <@indutny> ok, looks like I'm just too tired 20:58 <@indutny> with translation of all that papers for tax service 20:58 <@indutny> ttyl guys 20:58 * indutny & 20:58 < LOUDBOT> THEN WHY DID YOU WANT ME TO PRODUCE SOMETHING CONTAINING HALF OF YOUR GENETIC CODE 21:09 * CoverSlide remembers to never left-concatenate anything ever 21:30 -!- mode/#libuv [+o TooTallNate] by ChanServ 21:40 < tjfontaine> bnoordhuis: btw I did push those style changes for tap this morning 21:40 < tjfontaine> well and the build fix for benchmarks 21:52 < bnoordhuis> tjfontaine: i'll look at it in a few 21:52 < bnoordhuis> working through the github notifications as we speak 21:52 < tjfontaine> k take your time, I just wanted to update you 21:56 < tjfontaine> I'm seeing this weird race in test-cluster-disconnect, where getServers gets a tcpSelf with a null ._handle, but if I change the worker count to 1 I can't get it to reproduce, and seems slightly related to the econnreset changes (but it was definitely racey on v0.8 as well) 21:58 < joyent-jenkins> Project nodejs-v0.8 » x64,godfrey build #7: SUCCESS in 8 min 44 sec: https://jenkins.joyent.us/job/nodejs-v0.8/./DESTCPU=x64,label=godfrey/7/ 22:10 < joyent-jenkins> Project nodejs-v0.8 » ia32,godfrey build #7:SUCCESS in 20 min: https://jenkins.joyent.us/job/nodejs-v0.8/./DESTCPU=ia32,label=godfrey/7/ 22:10 < tjfontaine> you're weird jenkins, turning on colors makes you lose spaces 22:11 < MI6> joyent/libuv: Timothy J Fontaine master * bfe269b : test: add tap output Given UV_TAP_OUTPUT being set, test result output s - http://git.io/huqqCw 22:13 < tjfontaine> bnoordhuis: thanks 22:14 < bnoordhuis> np 22:14 < tjfontaine> oh you wanted run_tests even more different 22:14 * tjfontaine makes note of style intention 22:15 < bnoordhuis> tjfontaine: if you look around the files in src/ you'll get a feel of the libuv style 22:15 < tjfontaine> I will do that more yes 22:15 < bnoordhuis> though admittedly uv-unix and uv-win differ sometimes 22:16 < bnoordhuis> but when in doubt, go with the uv-unix style - it's provably superior 22:16 < tjfontaine> indeed 22:18 < bnoordhuis> the 3.17 perf regression is back... 22:18 < bnoordhuis> this is spooky, someone hold me 22:20 < tjfontaine> hm a control char must be still leaking through the LOG stuff 22:21 < bnoordhuis> 99.04% node node [.] v8::internal::ConsStringIteratorOp::Search(unsigned int*, int*, unsigned int*) 22:21 < tjfontaine> oh 22:21 < bnoordhuis> what. the. hell? 22:21 < tjfontaine> ya that's what isaacs was seeing as well 22:21 < tjfontaine> he says there's a while(true) in that 22:22 < bnoordhuis> not sure if it's actually an infinite loop 22:22 < bnoordhuis> but i'll find out 22:23 < tjfontaine> I did miss a piece in this that I didn't see in the console but see in the jenkins output, rewind_cursor 22:42 <@isaacs> tjfontaine: joyent-jenkins!! 22:42 <@isaacs> tjfontaine: nice! 22:43 <@isaacs> bnoordhuis: it's definitely not an *infinite* loop 22:43 <@isaacs> bnoordhuis: but it's a "way way way longer than it should be" loop 22:44 <@isaacs> bnoordhuis: it finishes, just ~36M times slower than 3.15.11.15 22:44 < bnoordhuis> yes, i can confirm that 22:44 <@TooTallNate> what's joyent-jenkins 22:44 <@TooTallNate> ? 22:44 < bnoordhuis> it's our own skynet 22:44 < tjfontaine> isaacs: ya, right now it's tuned for "only when shit breaks" but the tap plugin atm isn't properly failing the build when tests fail 22:44 <@isaacs> tjfontaine: well, it's a while true, but with return statements in a few places. 22:47 <@isaacs> bnoordhuis: yes. the proof is that it runs on unix. 22:47 <@isaacs> oh, was scrolled back :) 22:48 <@isaacs> (re: uv-unix being provably superior) 22:49 <@isaacs> TooTallNate: you're +1 on preemptive buffering up to hwm? 22:49 <@TooTallNate> isaacs: yes 22:50 <@isaacs> k, landing 22:50 < MI6> joyent/node: isaacs master * 27d1bab : streams: Pre-emptively buffer readables up to the highWaterMark Also, th - http://git.io/YEzV1A 22:51 <@isaacs> Raynos: send a PR for objectMode default hwm setting 22:51 < Raynos> is 100 a sensible thing? 22:52 <@isaacs> Raynos: also, i think that objectMode: false should mean "never ever object mode; just throw on non-stringish data" 22:52 < Raynos> blargh it depends how big objects are 22:52 < Raynos> isaacs: I think auto conversion into objectMode can be binned 22:52 <@isaacs> k, i'm cool with that 22:53 < Raynos> but you may want to talk to dominictarr, substack about that 22:54 < Raynos> i pinged them :P 22:54 < Raynos> its upto them to get involved if they care now 23:02 <@isaacs> Raynos: i'm kind of thinking that if you opt into objectMode, then that's an advanced use case, and you should set your highWaterMark intelligently 23:02 <@isaacs> and it should not happen automatically. tha'ts too clever. 23:02 <@isaacs> and these debugger tests are already frustrating me, so i'm going to write that up and PR it. 23:03 < Raynos> isaacs: this.highWaterMark = (hwm || hwm === 0) ? hwm : (objectMode ? 100 : 16 * 1024); 23:03 <@isaacs> meh. 23:04 <@isaacs> what if you really wnat 16K objects? 23:04 <@isaacs> what if they're {x:1} 23:04 <@isaacs> that's not very big 23:05 <@isaacs> or if they're all references to the SAME object, even 23:05 < Raynos> isaacs: I dont know what a good default is 23:05 < Raynos> But bh 23:05 < dominictarr> isaacs: you should never do that 23:05 < dominictarr> that is abuse 23:05 < Raynos> isaacs: actually one thing that would be useful 23:05 < Raynos> is to have a transform have the same hwm as what ever source is piped into it 23:06 < dominictarr> streams are about serialization, but it's okay to send something that isn't serialized, if it COULD be 23:06 <@isaacs> i think node streams should assume buffer/string usage, but not enforce that. 23:06 <@isaacs> in order to not enforce it, we need to have this objectMode flag, but i think YOU should set that 23:06 <@isaacs> node shouldn't. 23:06 < Raynos> I agree 23:06 <@isaacs> if i do fsStream.write({not: "a stringish"}) then it should be a bug 23:06 <@isaacs> and should emit an error 23:06 < Raynos> so if I have an objectMode source (like a mongodb cursor stream) 23:06 < Raynos> it knows what a sensible hwm is 23:06 <@isaacs> the hwm, as well, i mean.. if you're setting non-default stuff, then just set it to a different default. 23:07 <@isaacs> right 23:07 <@isaacs> be sensible 23:07 <@isaacs> it might be 5 23:07 < Raynos> but what about the transform 23:07 <@isaacs> it migth be 5M 23:07 <@isaacs> who knows? 23:07 < Raynos> source.pipe(someTransform()) 23:07 < Raynos> how does the transform know what a good hwm is 23:07 <@isaacs> it also takes a highWaterMark arg 23:07 <@isaacs> all duplexes do 23:07 < Raynos> true 23:07 <@isaacs> so, the transform should know what's right for the transform 23:07 < Raynos> but then its source.pipe(someTransform({ highWaterMark: source._readableState.highWaterMark }) 23:07 <@isaacs> back to libertarian unix style principles. 23:08 < Raynos> if its an arbitrary transform 23:08 <@isaacs> from each according to his stdout, to each according to his stdin 23:08 < Raynos> then it can work on small and big objects 23:08 <@isaacs> Raynos: well, look, you're creating these things. so give it an argument. 23:08 < Raynos> also note that with pre-emptive reads a chain of pipe calls effectively pipelines data transformations 23:08 <@isaacs> if you want it to be different, say so. 23:08 <@isaacs> if you want the default, then trust that it knows a good default for itslef. 23:09 <@isaacs> node is going to have sensible defaults for piping buffers and strings around. 23:09 <@isaacs> but all this is changeable. 23:09 < Raynos> isaacs: true. 23:09 < Raynos> i think im worrying too much 23:10 < dominictarr> isaacs: Raynos I think the problem here is that you are trying to write one baseclass that fits too many cases 23:10 < dominictarr> most transforms don't even need water marks 23:10 < dominictarr> from what people actually use… 23:11 < dominictarr> implementing compression streams is a special case. 23:12 < Raynos> dominictarr: anything that needs buffering needs watermark 23:12 < Raynos> through is a transform that buffers 23:12 < Raynos> its just that through has a hwm of 0 23:13 < dominictarr> I disagree. 23:13 < dominictarr> make the ends smart 23:13 < dominictarr> FS.ReadStream is smart about buffering 23:14 < dominictarr> and let the through streams in the middle just propagate their pause state rapidly 23:14 < dominictarr> (currently it takes several chunks to get the pause state all the way back up the chain) 23:14 < Raynos> thats a different approach 23:15 < tjfontaine> bnoordhuis: what are your thoughts for what might cause tcpSelf._handle in cluster._getServer (specifically in tcpSelf.once('listening')) to end up being null? what should I be looking for here, a worker that is closing the handle? 23:15 < Raynos> if each transform had a hwm you could effectively build a pipeline 23:15 < Raynos> but maybe your right 23:15 < Raynos> through should just set hwm to 0 23:16 < bnoordhuis> tjfontaine: um, is 'no idea' an acceptable answer? 23:16 < tjfontaine> certainly, because that's where I am 23:20 < tjfontaine> with NODE_DEBUG=net this is what I get https://gist.github.com/tjfontaine/5017342 23:28 < trevnorris> bnoordhuis: mentioned you're checking out the v8 regression is from? 23:30 < trevnorris> bnoordhuis: also noticed that while it's 3e6x's slower, it also was using 90+ MB ram while doing it. 23:36 < bnoordhuis> trevnorris: https://code.google.com/p/v8/issues/detail?id=2551#c2 23:37 < bnoordhuis> i'm kind of disappointed with the v8 people that they let something like this slip through 23:37 < tjfontaine> that's crazy 23:37 < tjfontaine> it has to be hitting them somewhere else 23:38 < bnoordhuis> yeah. i can't imagine where the only ones that use Utf8Length() :) 23:39 < bnoordhuis> *we're 23:40 < bnoordhuis> tjfontaine: re test/simple/test-cluster-disconnect.js, is that a sporadic thing or ? 23:41 < tjfontaine> bnoordhuis: it's non-existent on linux and osx, but I can hit some form of it every 3 or 5 runs, sometimes quite a few in a row fail 23:41 < tjfontaine> bnoordhuis: sometimes I'll get a ECONNRESET or an ECONNREFUSED 23:43 < bnoordhuis> oh, only on smartos you mean? 23:43 < tjfontaine> yes 23:43 < bnoordhuis> i so not want to log onto a smartos machine right now :/ 23:43 < tjfontaine> I put assert(tcpSelf._handle) in once('listening') 23:43 < bnoordhuis> truth be told, i'm not sure what machine i'm supposed to be using nowadays 23:44 < tjfontaine> I'm not sure either really, I'm on one in some lab somewhere 23:45 < tjfontaine> https://gist.github.com/tjfontaine/5017342/raw/9f876059c6aa04bf7ff29cf2ab59e2ad3bac2c2c/few-runs.txt 23:45 < tjfontaine> with the assert 23:46 < tjfontaine> if I change workers to 1 in the test I never get a failure, but in other tests increasing the amount of workers doesn't seem to break them 23:46 < bnoordhuis> logging onto umcats, one sec 23:46 < tjfontaine> k 23:47 <@isaacs> bnoordhuis: btw, umcats is kind of a wimpy machine 23:47 <@isaacs> bnoordhuis: you should log into the smartos machine 23:47 < tjfontaine> oh correction, I am getting it with `workers = 1` I must just have been lucky the last time I tried it 23:47 <@isaacs> bnoordhuis: ssh smartos.nodejs.org 23:47 < trevnorris> bnoordhuis: looks like you can also do a v8::Utf8Length(String, Isolate), or is that just for internal use? 23:49 < bnoordhuis> isaacs: what machine / address is that? 23:49 <@isaacs> bnoordhuis: it's 67.188.180.100 23:49 <@isaacs> bnoordhuis: you have root on it 23:50 * bnoordhuis updates .ssh/config 23:51 < bnoordhuis> trevnorris: i think that's an internal one (just logged out of the machine i was testing on) 23:51 < trevnorris> bnoordhuis: yeah, you're right. not in v8.h 23:52 <@isaacs> bnoordhuis: does dns not find that machine for you at smartos.nodejs.org? 23:52 < trevnorris> nice job btw. that issue is insane 23:56 <@ryah> 0.10 is going to be great 23:58 < bnoordhuis> isaacs: it does now, it seems --- Log closed Sat Feb 23 00:00:20 2013