[01:31] <wgrant> lifeless: Well, he was told to try it a few hundred times, IIRC.
[01:31] <lifeless> terrible advice
[01:31] <wgrant> Probably, yes.
[01:32] <lifeless> they're all the same, if he's in a rush to merge we could update those translations by hand.
[01:32] <wgrant> I believe there's a question open.
[01:59] <lifeless> [01:59] <lifeless>     Hard / Soft  Page ID
[01:59] <lifeless>     3555 /    0  LoginToken:+accountmerge
[01:59] <lifeless>      298 /   55  Person:+commentedbugs
[01:59] <lifeless>      231 / 6781  Archive:+index
[01:59] <lifeless>       88 /  307  BugTask:+index
[01:59] <lifeless>       13 /   10  Person:+bugs
[01:59] <lifeless>       12 /  101  ProjectGroupSet:CollectionResource:#project_groups
[01:59] <lifeless>       11 /  260  Distribution:+bugtarget-portlet-bugfilters-stats
[01:59] <lifeless>       11 /   29  DistroSeries:+queue
[01:59] <lifeless>        8 /    1  BinaryPackageBuild:+retry
[01:59] <lifeless>        7 /   40  Milestone:+index
[02:53] <StevenK> wgrant: O hai?
[03:06] <wgrant> StevenK: Hi. Sort of here.
[03:06] <wgrant> Exam tomorrow, but distractions are welcome :P
[03:10] <StevenK> wgrant: I'm looking at modelling SourcePackageAncestry -- do you think per-distribution or per-distroseries is the way to go?
[03:11] <wgrant> Hmm.
[03:11] <wgrant> This needs a lot of thought.
[03:12] <StevenK> I've been thinking about it over the weekend, and I'm currently on the distribution side
[03:12] <wgrant> I think so.
[03:12] <wgrant> But what are we modelling?
[03:13] <StevenK> Just the versions present for an SPN in a distribution
[03:13] <wgrant> Including relationships?
[03:15] <wgrant> For what purpose?
[03:15] <wgrant> Determining the shared ancestor?
[03:16] <StevenK> wgrant: They'll be stored in order, with the newest first, for determing shared ancestors, yes
[03:16] <lifeless> well, in-order is a lie with postgresql
[03:16] <lifeless> indexed perhaps
[03:16] <StevenK> It will stored as INTEGER[], which IS ordered
[03:17] <StevenK> Er, TEXT[]
[03:17] <StevenK> Sorry, brainfart
[03:17] <lifeless> an array in a single row?
[03:17] <lifeless> that seems risky
[03:17] <StevenK> lifeless: It does?
[03:18] <wgrant> Oh, I see.
[03:18] <wgrant> That's a bit special.
[03:18] <lifeless> StevenK: yes, if you have more than one mutator
[03:18] <wgrant> I'd like a big brainstorm with everyone before we do anything, I think.
[03:18] <StevenK> wgrant: Special bad, special good or special special?
[03:19] <StevenK> I've spent about 15 minutes on this branch so far, so I'm perfectly willing to throw it away and write it off as a learning exercise
[03:20] <wgrant> Arrays for this sort of thing in a relational database smell bad.
[03:20] <wgrant> Particularly when we model versions already (as SPRs), and have ancestry in bzr.
[03:20] <lifeless> what would be in each cell in the array?
[03:20] <StevenK> lifeless: A version number
[03:21] <wgrant> I think we probably need to store ancestry per (archive, distroseries, spr), but I may be wrong.
[03:22] <StevenK> Per spr seems like a lot of duplicate information to me
[03:24] <wgrant> Why?
[03:25] <StevenK> wgrant: SPR has an version number stored with it, so the 'foo 1.0-1' spr will have ancestry of '1.0-1', '0.9-1', '0.8-1'; and 'foo 1.1-1' will have '1.1-1', '1.0-1', '0.9-1', '0.8-1'
[03:26] <wgrant> StevenK: Hm? 1.0-1 will reference 0.9-1
[03:26] <wgrant> 0.9-1 will reference 0.8-1
[03:27] <wgrant> So we have a map like this:
[03:27] <wgrant> (primary, hardy, 1.0-1) -> 0.9-1
[03:27] <wgrant> (primary, hardy, 0.9-1) -> 0.8-1
[03:27] <wgrant> That is the model that seems intuitive to me.
[03:27] <wgrant> We don't store version strings -- we store SPR references.
[03:27] <StevenK> Which is also quite hard to traverse :-)
[03:28] <wgrant> Not if we drop the distroseries.
[03:28] <wgrant> Which we may be able to do.
[03:28] <lifeless> StevenK: why array's ?
[03:29] <StevenK> lifeless: Because they can be grabbed from the db and pushed into a set, and then it's cheap to the find common ancestors
[03:29] <lifeless> you should probably read all of http://www.postgresql.org/docs/8.4/static/arrays.html
[03:29] <StevenK> I already have
[03:29] <lifeless> StevenK: red flag alert: in postgresql whenever you say 'grab it all from the db', you're almost certainly doing it wrong.
[03:30] <lifeless> StevenK: you can pull the versions from related spr's easily too.
[03:30] <lifeless> that said, I'm not against denormalising here - nor am I for it as such.
[03:30] <lifeless> Have you spoken with stub ?
[03:30] <StevenK> Not yet
[03:30] <lifeless> [by you, I mean the folk doing this design]
[03:30] <StevenK> However, wgrant is starting to convince me
[03:32] <wgrant> Yay.
[03:32] <wgrant> Youknowimright.
[03:32] <StevenK> wgrant: So, your idea is a 'ancestry' column, which links to the previous SPR? And if it's NULL, it's the first one seen?
[03:32] <lifeless> (™)
[03:32] <wgrant> StevenK: We can't do it on SPR itself.
[03:32] <wgrant> StevenK: Since SPRs are shared between distroseries.
[03:32] <StevenK> Perhaps I should argue more, just to deflate wgrant a bit
[03:32] <wgrant> s/distroseries/distros/
[03:33] <wgrant> s/distros/archives/
[03:33] <lifeless> something to bear in mind
[03:33] <lifeless> the data model currently blows up on duplicate uploads
[03:33] <lifeless> we should fix things going boom when that happens. Would that influence this work ?
[03:33] <StevenK> This is a feature
[03:34] <lifeless> StevenK: its very much not.
[03:34] <lifeless> StevenK: it causes two single points of failure, manual recovery, makes person merge of ppas hard.
[03:34] <lifeless> StevenK: Not A Feature.
[03:34] <wgrant> I would object to any person merge with PPAs.
[03:35] <wgrant> There's no need for that in reasonable merge use-cases.
[03:35] <lifeless> wgrant: on principle or technicalities
[03:35] <wgrant> Except maybe team merges, I guess.
[03:35] <wgrant> But then rename.
[03:35] <wgrant> And that would screw up keys and URLs.
[03:35] <wgrant> so block it.
[03:35] <wgrant> block it all.
[03:35] <lifeless> wgrant: hard to do does not imply not worth doing.
[03:35] <StevenK> lifeless: Is this is upload to cocoplum and germanium at the same time bug?
[03:35] <lifeless> StevenK: yes
[03:36] <lifeless> StevenK: which stops us trivially load balancing the two uploaders.
[03:36] <lifeless> StevenK: which means we can't deploy fixes to those servers but once a month.
[03:36] <wgrant> yeah, it sort of fucks up your PPA if you exploit that :P
[03:37] <StevenK> lifeless: Will this work impact that? No, not I can see
[03:37] <wgrant> I don't know how to solve that.
[03:37] <wgrant> It could be made to impact it.
[03:37] <StevenK> Indeed
[03:37] <wgrant> If we stored string versions.
[03:37] <wgrant> That is interesting indeed.
[03:37] <StevenK> lifeless: You do enjoy banging that SPOF drum :-P
[03:38] <spm> good, that he does.
[03:38] <StevenK> I think it can be solved, by changing the upload processor on both cocobanana and germanium to be a daemon process that scans the upload directories, and always talks to the master store
[03:39] <wgrant> StevenK: Doesn't help.
[03:39] <wgrant> We don't have sufficient constraints to forbid duplicate uploads.
[03:39] <StevenK> That can be solved
[03:39] <wgrant> If our model didn't suck, UNIQUE constraints would do it.
[03:39] <StevenK> But it is a thirteen-table join, like you say
[03:39] <wgrant> But I don't think we can model it sanely like that.
[03:39] <wgrant> Right.
[03:40] <spiv> Glancing at https://lpstats.canonical.com/graphs/CodehostingPerformance/ I wonder happened to codehosting 2 days ago?
[03:40] <StevenK> wgrant: Maybe the answer currently is "Yes, we can do it, but it will blow, the database will suck, and you'll hate us" ?
[03:40] <wgrant> bzr downgrade happened around then, maybe?
[03:41] <StevenK> wgrant: Or perhaps we can expect a branch from you on Wednesday that fixes all of our modelling problems? *eg*
[03:41] <spiv> Oh, huh, for the SFTP issue?
[03:42] <wgrant> spiv: I believe so. There's an incident report.
[03:42] <StevenK> wgrant: On a serious note, do you want me to look at your script on dogfood again?
[03:42] <wgrant> StevenK: I don't start for three weeks :P
[03:42] <lifeless> StevenK: enjoy it? no.
[03:43] <lifeless> StevenK: enjoy the *benefits* of banging it?hell yes.
[03:43] <wgrant> StevenK: That would be nice. But I don't know if DF will survive.
[03:43] <StevenK> wgrant: There's no way to make the first query be, err, nicer?
[03:43] <wgrant> I don't think so.
[03:43] <wgrant> But maybe.
[03:44] <wgrant> Remember, though, that the publisher takes hours on DF, but just a few minutes on prod.
[03:44] <wgrant> So DF is special :P
[03:44] <wgrant> Bad special.
[03:45] <StevenK> wgrant: So kick the script off, and wait a few hours, and hide if IS tell me that mawson has exploded and set a few racks and Nafallo on fire?
[03:47] <wgrant> Hopefully he'll be in the other DC at the time.
[03:47] <lifeless> actually, the benefits of the the spofs being fixed.
[03:48] <StevenK> wgrant: Remind me of the script name?
[03:48] <wgrant> StevenK: populate-spr-changelog.py
[03:49] <StevenK> Hah, df has moved on, and canonical.launchpad.database has died, so the script dies
[03:49]  * wgrant disappears for a while.
[03:49] <wgrant> Hah.
[03:50] <StevenK> ARGH, everything this script wants is from canonical.launchpad
[03:50]  * StevenK shakes his fist at wgrant 
[04:29] <wgrant> StevenK: Heh, sorry. I am outdated.
[04:42] <StevenK> wgrant: It's been running for ~ 40 minutes, since I fixed the imports
[04:43] <wgrant> "its
[04:43] <wgrant> my opinion that fixing our data mapping story is the highest leverage
[04:43] <wgrant> item that requires TA input to achieve pervasive implementation and
[04:43] <wgrant> deployment."
[04:43]  * wgrant cries.
[04:43] <lifeless> wgrant: why so sad?
[04:44] <wgrant> lifeless: Highest leverage for achieving pervasive implementation.
[04:44] <lifeless> wgrant: bingo?
[04:44] <lifeless> wgrant: though you've mangled the sentence ther
[04:44] <wgrant> StevenK: Has the query finished?
[04:45] <StevenK> 2010-11-22 04:01:48 DEBUG3  new transaction
[04:45] <wgrant> StevenK: Has London been evacuated?
[04:45] <StevenK> Nope
[04:45] <wgrant> lol
[04:45] <StevenK> Not to my knowledge
[04:45] <wgrant> It is tempting to try that query somewhere else.
[04:45] <wgrant> And see if it sucks less.
[04:46] <wgrant> Otherwise I guess I'll poke around once I have DF access eventually.
[05:00] <lifeless> wgrant: so I'm still confused
[05:01] <lifeless> wgrant: are you crying because it was jingoistic, or because it wasn't $othertask.
[05:02] <spiv> Maybe because you missed one crucial square of his bingo card? ;)
[05:03] <StevenK> Haha
[05:08]  * spiv guesses the it was the "synergy" square.
[05:09] <StevenK> wgrant: That query completed in 68 minutes
[06:13] <StevenK> wgrant: http://pastebin.ubuntu.com/535084/
[06:13] <StevenK> wgrant: Short answer, I killed it
[06:48] <wgrant> StevenK: Yay :/
[06:48] <wgrant> lifeless: The former.
[06:49] <StevenK> wgrant: I've not seen an error like that, but it looks like it updated at least two SPRs :-)
[06:49] <wgrant> StevenK: Indeed.
[06:49] <wgrant> But I wonder if the query performs less atrociously on >mawson. :/
[06:50] <StevenK> wgrant: I suspect we can get a RO counting query going, if you wish
[06:55] <spm> ugh. launchpad_qastaging stop == make build. yay. not.
[06:55] <wgrant> Hah. Fun.
[06:56] <spm> stop should not be doing things like rm'ing directories, and moving stuff around. No. it has just one thing it needs to do and one thing only. terminate the running process. grumble grumble grumble.
[06:57] <spm> orsum. and then the make fails and stop doesn't. this is gold.
[06:57] <wgrant> StevenK: Can you stick your fixed script up somewhere?
[06:57] <wgrant> I seem to have lost mine.
[06:57] <wgrant> I can only find an old version :(
[06:57] <StevenK> http://pastebin.ubuntu.com/535088/
[06:58] <wgrant> Thanks.
[06:58] <StevenK> Ugh, could the gina doctest be any slower
[06:59] <wgrant> It's only a couple of minutes, right? :P
[06:59] <spm> yes. ??
[06:59] <wgrant> What are you doing to the poor creature?
[06:59] <StevenK> wgrant: Having it toss changelogs at the librarian and linking them into the SPRs it creates
[07:00] <wgrant> Ah, great.
[07:00] <wgrant> I didn't get around to that.
[07:00] <wgrant> mumble exams mumble
[07:00] <spm> hah
[07:00] <StevenK> $ bzr di | diffstat | tail -n 1
[07:00] <StevenK>  2 files changed, 13 insertions(+), 6 deletions(-)
[07:00] <StevenK> Is tiny, so far
[07:00] <wgrant> Yep, it should be.
[07:00] <wgrant> But the tests might be amusing.
[07:02] <StevenK> Yes, I'm not looking forward to changing them
[07:02] <wgrant> spm: Could you throw http://paste.ubuntu.com/535089/ at a production slave if you have time, pls?
[07:02] <spm> sure
[07:02] <StevenK> "Sure, but I have no time, so no" ?
[07:03] <wgrant> Heh.
[07:03] <spm> nah. I prefer to leave him in suspense for a few hours. the simple "sure" implies an answer that I'll do his request. but not mention of when. so it works from a bofh perspective. fwiw.
[07:05] <spm> wgrant: https://pastebin.canonical.com/40005/ argh. ffs. wrong paste. one sec.
[07:05] <StevenK> Haha
[07:06] <spm> wgrant: http://paste.ubuntu.com/535090/
[07:06] <StevenK> spm: That works. Yes, I've run the query, but you have to wait a few weeks for the results.
[07:06] <wgrant> spm: Thanks.
[07:06] <spm> I even knew to use the ubuntu one. but auto defaulted to the can pastebin. loltastic at self.
[07:06] <wgrant> StevenK: How long does that same query take on DF?
[07:08] <StevenK> wgrant: http://pastebin.ubuntu.com/535092/
[07:09] <StevenK> lolwut
[07:09] <StevenK> It's *quicker*
[07:09] <wgrant> ... yes.
[07:09] <wgrant> It must have had stuff cached?
[07:09]  * wgrant stabs WADL in the mouth.
[07:09] <StevenK> That's quite possible, since I re-ran it to actually get the paste. Duh.
[07:10] <StevenK> Total runtime: 458.468 ms
[07:10] <StevenK> And the universe makes sense again
[07:10] <wgrant> That's more like it.
[07:10] <wgrant> Now to get a longer one.
[07:11] <wgrant> However this relies on my local appserver starting, which it seems to be reluctant to do.
[07:12] <StevenK> Your machine is hinting that you have study to do
[07:12] <wgrant> Silence.
[07:12] <spm> mv lib/canonical/launchpad/apidoc.tmp lib/canonical/launchpad/apidoc
[07:12] <spm> mv: cannot move `lib/canonical/launchpad/apidoc.tmp' to `lib/canonical/launchpad/apidoc/apidoc.tmp': Directory not empty
[07:12] <spm> make: *** [lib/canonical/launchpad/apidoc/index.html] Error 1
[07:12] <spm> wgrant: ^^ that error?
[07:12] <lifeless> wgrant: how many exams left?
[07:12] <spm> cause that's nicely broken qastaging
[07:12] <StevenK> Oh, fricken apidoc
[07:12] <spm> Ahh mr lifeless ^^
[07:12] <wgrant> spm: ....
[07:12] <wgrant> spm: I got that too.
[07:12] <StevenK> spm: We have that error about once a month
[07:13] <wgrant> spm: That's why I was stabbing WADL in the mouth.
[07:13] <StevenK> On devel, at least
[07:13] <wgrant> lifeless: Just the one.
[07:13] <wgrant> 9am.
[07:13] <StevenK> wgrant: For which subject?
[07:13] <lifeless> spm: if I may be so bold.
[07:13] <lifeless> spm: file a bug
[07:13] <wgrant> StevenK: Theory of Computation
[07:13] <spm> lifeless: was just about to; but was wondering if a known/quickish fix. no worries.
[07:13] <lifeless> spm: note in the bug that a) we need to find the landing that broke things and mark it as bad somehow
[07:14] <spm> nod
[07:14] <lifeless> spm: secondly, would you be able to run 'make clean'
[07:14] <wgrant> spm: Just blow away that dir.
[07:14] <wgrant> Or do that.
[07:14] <lifeless> spm: then make'
[07:14] <StevenK> Hmmm
[07:14] <lifeless> wgrant: nice stuff :)
[07:14] <StevenK> Gina's changelog parser is different from the archives. Fun.
[07:14] <spm> launchpad-rev-11956 would be a guess
[07:14] <lifeless> wgrant: turing equivalence, NDFA etc ?
[07:15] <wgrant> lifeless: Yup.
[07:15] <lifeless> one of my fav subjects at uni
[07:15] <spm> no. would have been before that.
[07:15] <wgrant> One of the few subjects in which I've actually learnt something :/
[07:16] <wgrant> StevenK: Is http://paste.ubuntu.com/535094/ nice and slow on DF?
[07:16] <lifeless> wgrant: its good that you're learning stuff ;)
[07:16] <lifeless> wgrant: it gets harder the older you get :)
[07:16] <StevenK> wgrant: Not excessively, http://pastebin.ubuntu.com/535095/
[07:17] <wgrant> lifeless: Oh, yes, the learning is a good thing. The restricted number of subjects in which it has happened isn't.
[07:17] <wgrant> StevenK: :(
[07:18] <wgrant> StevenK: Could you run the script with LP_DEBUG_SQL=1 and see what's slow?
[07:18] <spm> wgrant: you need to do subjects like I did in CS. ie "How to be an ego ridden dork, who manages to piss off she who will one day be his wife, by having a working program in computer graphics: @3am in the labs; and doing more than was asked for in the assignment"
[07:18] <wgrant> spm: Heh.
[07:19] <spm> amusingly, 20 years later. she still hasn't forgiven me for that. :-D
[07:20] <StevenK> wgrant: http://pastebin.ubuntu.com/535096/
[07:20] <StevenK> That query will spin for ~ an hour if the last run is anything to go by
[07:21] <lifeless> spm: was she competing for marks, or stood up for a date?
[07:22] <wgrant> StevenK: /^troseries/ does not a valid query make.
[07:22] <spm> heh, more like if you do more stuff than required, that tends to force others marks down on assignments. so she was shitty at having to do even more work. given her code wasn't running at that point in time. :-)
[07:23] <StevenK> wgrant: Er, lemme fix that
[07:24] <StevenK> spm: I submitted a 12 page Perl assignment for Systems Administration Programming, and got 95. The lecturer was cranky at me that she couldn't scale the marks, because if she did, the next best assignment would have gotten 60
[07:25] <StevenK> wgrant: http://pastebin.ubuntu.com/535097/
[07:26] <spm> StevenK: \o/
[07:26] <wgrant> StevenK: Could you replace the two %s with 0 and see how long it takes?
[07:27] <lifeless> StevenK: 12 pages of perl... shoulda marked you down
[07:27] <wgrant> I wonder if the overly verbose Storm-generated GROUP BY is being expensive.
[07:27] <wgrant> (I reduced it to a GROUP BY over SourcePackageRelease.id before)
[07:28] <StevenK> lifeless: That only made me chuckle ... what got me laughing so hard was when she reached for Programming Perl and waved at me saying "Do you know how many times I had to refer to this to mark your assignment?!"
[07:29]  * wgrant is glad that LP will be an escape from Perl... except for sbuild.
[07:30] <lifeless> thats a rather crackful query
[07:30] <StevenK> wgrant: Its still going,
[07:30] <wgrant> StevenK: Aha.
[07:30] <wgrant> StevenK: Excellent, thanks.
[07:30] <StevenK> I suspect it will last the full 60-odd minutes
[07:30] <wgrant> lifeless: Oh?
[07:30] <wgrant> StevenK: Kill it pls (with fire, if you see fit)
[07:31] <StevenK> wgrant: And the script?
[07:31] <wgrant> StevenK: Yeah.
[07:31] <StevenK> Oh, I love it when scripts don't listen to Ctrl-C, and instead just echo ^C
[07:32] <spm> yay. qas is back.
[07:32] <wgrant> lifeless: What is crackful about it?
[07:32] <wgrant> Besides the insane groupby?
[07:32] <StevenK> Pity killing the script didn't kill the query
[07:33] <lifeless> whats the 'HAVING COUNT(LibraryFileAlias) = %s' for
[07:33] <StevenK> If I kill a postgres child, will it get cranky?
[07:33] <lifeless> yes
[07:33] <StevenK> lifeless: s/%s/0/ in your head
[07:33] <wgrant> lifeless: The %s is 0.
[07:33] <spm> wgrant: be grateful you're not going from pascal, C and modula-2 @uni to Assembler and Cobol @ $job1. :-)
[07:33] <wgrant> lifeless: It's finding SPRs without expired files.
[07:33] <wgrant> spm: Ahahah.
[07:33] <wgrant> And the query actually performs rather well.
[07:33] <lifeless> I'm surprised it accepts it at all
[07:34] <wgrant> Why?
[07:34] <lifeless> count(TableName)
[07:34] <StevenK> spm: Out of interest, do you have access to mawson?
[07:34] <spm> StevenK: not really. I think we can login and that's about it.
[07:34] <StevenK> Damn it, I want to kill that query
[07:34] <StevenK> Oh well, the load is only 2
[07:34] <lifeless> wgrant: so, 'LEFT JOIN LibraryFileAlias ON LibraryFileAlias.id = SourcePackageReleaseFile.libraryfile AND LibraryFileAlias.content IS NULL'
[07:35] <lifeless> StevenK: there is a pg helper to kill backends cleanly
[07:35] <lifeless> StevenK: or read the docs. IIRC TERM is ok
[07:35] <wgrant> pg_cancel_backend, or something like that.
[07:35] <StevenK> I doubt I have access to the postgres user, sadly
[07:36] <lifeless> StevenK: if you were considering killing it, I assume you had some access :)
[07:36] <StevenK> I wouldn't say no to access, I just like cleaning up after myself
[07:36] <wgrant> StevenK: You must surely have a postgres superuser?
[07:36] <lifeless> wgrant: + a HAVING constraint which implies NOT NULL
[07:36] <lifeless> wgrant: so, it doesn't need to be a LEFT JOIN
[07:37] <StevenK> wgrant: Well, yes, there is one, I just can't actually a shell as it
[07:37] <spm> StevenK: I lie. we have more access than I recalled.
[07:37] <StevenK> spm: Win. Can you switch to postgres?
[07:37] <spm> I can.... :-P
[07:37] <wgrant> StevenK: Don't you need a postgres superuser to run tests?
[07:37] <StevenK> Dogfood doesn't run tests?
[07:37] <wgrant> lifeless: How does the HAVING imply not null?
[07:38] <wgrant> lifeless: HAVING COUNT(LibraryFileAlias) = 0
[07:38] <StevenK> spm: kill -TERM 27507
[07:38] <lifeless> wgrant: count(something that is NULL) -> NULL
[07:38] <lifeless> NULL != 0
[07:38] <lifeless> wgrant: no?
[07:38] <spm> StevenK: that would be an unwise way of doing things; but gist of the request is understood. one sec.
[07:40] <wgrant> lifeless: I don't think so...
[07:40] <spm> StevenK: https://wiki.canonical.com/InformationInfrastructure/OSA/SafelyKillBackendProcess for the record
[07:40] <wgrant> lifeless: http://paste.ubuntu.com/535099/
[07:41] <spm> StevenK: done
[07:42] <wgrant> So I guess I need to pre-select the IDs the turn them into real objects later :(
[07:43] <StevenK> spm: Danke
[07:44] <lifeless> wgrant: 'count(expression)anybigint number of input rows for which the value of expression is not null'
[07:45] <wgrant> lifeless: eparse
[07:48] <lifeless> wgrant: so an SPR without expired files
[07:48] <lifeless> wgrant: is two queries
[07:48] <lifeless> sprs without files
[07:49] <lifeless> (exclude those)
[07:49] <lifeless> and sprs with files that are not expired - that have content)
[07:49] <lifeless> sorry, union them
[07:49] <lifeless> (tired)
[07:50] <poolie> hi lifeless
[07:50] <lifeless> hi poolie
[07:50] <poolie> welcome back(?)
[07:50] <lifeless> heh, haven't been away ;)
[07:50] <lifeless> poolie: just in orlando, still working
[07:50] <poolie> has anyone tried/considered running launchpad in lxc?
[07:51] <poolie> well, physically away
[07:51] <poolie> or are you still there?
[07:52] <lifeless> wgrant: that query wants 0 LFA's which will turn up if no LFA's are found, and we force no-files and files with content to null via the complicated join clause
[07:52] <lifeless> poolie: no, nz now.
[07:53] <wgrant> lifeless: Any SPR in prod without SPRFs is a bug.
[07:53] <lifeless> wgrant: I think I'd write this as an EXISTS then
[07:54] <lifeless> HAVING is forcing it to evaluate all results which you've helpfully inverted to make a negative.
[07:54] <lifeless> but we don't care about the count
[07:54] <lifeless> we care that there is one or more LFA with content.
[07:55] <wgrant> True.
[07:57] <lifeless> wgrant: I suspect it will perform a lot better - but you may need a DISTINCT in the EXISTS select clause
[07:58] <wgrant> lifeless: The performance of the query is not problematic at the moment.
[07:58] <lifeless> wgrant: an hour isn't problematic?!
[07:58] <wgrant> lifeless: Except for the GROUP BY.
[07:58] <wgrant> lifeless: That goes away magically when I write the query manually to group by SPR.id, rather than SPR.*.
[07:59] <lifeless> aggregates are hard :P
[07:59] <wgrant> You'd think pg would be smart enough to notice that there's a PK in there.
[07:59] <lifeless> poolie: no idea
[08:00] <poolie> it may be lighter wait than full virtualization, but still strong
[08:00] <lifeless> ensemble is building around it
[08:00] <lifeless> ok, afk
[08:08] <poolie> jtv: woo!
[08:08] <jtv> poolie: woo?
[08:08] <jtv> woo whom?
[08:08] <poolie> i think that's the first time i've ever had a proposal just land the first time
[08:09] <poolie> well, i guess there was a fizzle in the mp
[08:13] <wgrant> StevenK: Still around?
[08:13] <StevenK> wgrant: Hm?
[08:13] <wgrant> Could you try http://pastebin.ubuntu.com/535106/?
[08:16] <StevenK> wgrant: Running
[08:17] <lifeless> oh ugh
[08:17] <wgrant> StevenK: Less obscenely slowly?
[08:17] <lifeless> launchpad.net/linaro is a package
[08:17] <lifeless> project I mean
[08:17] <wgrant> lifeless: This could be amusing.
[08:17] <lifeless> wgrant: what could be?
[08:18] <wgrant> lifeless: Converting Linaro to a distro.
[08:18] <lifeless> fortunately, NMP.
[08:18] <lifeless> :P
[08:18] <lifeless> 'hi duncan, please reregister. Thanks.'
[08:18] <wgrant> You nasty strategists and architects...
[08:18] <lifeless> we sit around all day playing buzzword bingo
[08:19] <StevenK> wgrant: How long are expecting the new query to take? :-)
[08:19] <wgrant> StevenK: Not long :(
[08:19] <lifeless> wgrant: try an exists, you know you want to
[08:19] <StevenK> lifeless: I'm not sure if non-admins can actually register a distro
[08:20] <wgrant> They can't.
[08:20] <StevenK> Therefore, 'hi duncan, please reregister' is completly pointless
[08:20] <wgrant> lifeless: But I like avoiding subselects :(
[08:20] <lifeless> they aren't always wrong
[08:20] <wgrant> I know.
[08:21] <StevenK> wgrant: 4 minutes, and counting
[08:21] <wgrant> But I like avoiding subselects.
[08:21] <wgrant> StevenK: Bah.
[08:21] <lifeless> 8.4 seems to want DISTINCT a lot
[08:21] <wgrant> Which query? LIMIT 1?
[08:21] <lifeless> wgrant: I'm sure you'll try soon enough
[08:21] <StevenK> wgrant: ENOLPSQLwhatsit
[08:22] <wgrant> StevenK: :(
[08:22] <wgrant> lifeless: We'll see.
[08:22] <StevenK> wgrant: Kill it and run it with the DEBUG?
[08:22] <wgrant> StevenK: Please.
[08:23] <wgrant> Hm.
[08:23] <wgrant> I guess it's probably doing the limit in the wrong place.
[08:23] <wgrant> Sigh, SQL.
[08:23] <stub> lifeless: I think that is a side effect of the short circuiting not happening as often (at all?) in subqueries
[08:23] <lifeless> stub: yeah, I think that too
[08:23] <lifeless> stub: possibly a correctness fix in some corner case. I haven't looked in the changelog to see though
[08:24] <stub> (which might be trading performance for correctness, although the cases I can think of that need the short circuiting disabled should be detectable)
[08:25] <stub> I actually recall removing some distincts before, as they used to slow some queries down
[08:25] <StevenK> wgrant: http://pastebin.ubuntu.com/535109/
[08:25] <lifeless> stub: \o/
[08:25] <stub> (but others used to benefit from its addition too)
[08:25] <stub> At least it is more consistent now ;)
[08:27] <lifeless> wgrant: so we can use a regular JOIN on sourcepackagereleasefile right? if not playing silly buggers with having
[08:28] <wgrant> lifeless: I want to find those SPRs that have no files with LFA.content IS NULL.
[08:28] <wgrant> lifeless: How can I word that in a non-LEFT JOIN?
[08:29] <wgrant> Unless I do an exists.
[08:30] <lifeless> wgrant: Time: 6.897 ms
[08:30] <lifeless> wgrant: the current group by *does not do that*
[08:31] <lifeless> wgrant: the content is NULL clause matches the join, and then the hacing COUNT excludes them
[08:32] <lifeless> or I may be misphrasing. Anyhow, one sec, I'll put that helpful english description into this
[08:32] <wgrant> lifeless: The HAVING doesn't work without the GROUP BY...
[08:33] <jtv> poolie: only thing I had to do about your MP was set a commit message—so that all the metadata except the --no-qa option is in there and test-and-land becomes a very simple command line.  Congratulations, and thanks again for fixing this!
[08:33] <wgrant> StevenK: http://pastebin.ubuntu.com/535111/
[08:33] <lifeless> wgrant: so thats sprs where all their files are not null
[08:34] <lifeless> 15 seconds on a first attempt
[08:35] <lifeless> 11 seconds on hot cache
[08:35] <StevenK> wgrant: Killed and re-running
[08:35] <wgrant> lifeless: Which?
[08:35] <wgrant> StevenK: Thanks.
[08:35] <StevenK> Ooooh, that's MUCH quicker
[08:35] <wgrant> Like actually not slow?
[08:35] <lifeless> wgrant: http://pastebin.com/q6XXG2H0
[08:36] <StevenK> I'm getting confused by the DEBUG
[08:36] <wgrant> I think Foxtel has bought out every bit of Australian ad space.
[08:36] <wgrant> I have not seen a non-Foxtel ad in weeks.
[08:36] <StevenK> adblock FRW
[08:36] <StevenK> *FTW
[08:37] <StevenK> 2010-11-22 08:37:08 DEBUG   Iteration 0 (size 1.0): 1.043 seconds
[08:37] <StevenK> 2010-11-22 08:37:08 DEBUG3  new transaction
[08:37] <wgrant> I used to use it... but I go to so few adful sites that I didn't bother installing it this time.
[08:37] <stub> If this is the pastbin http://pastebin.ubuntu.com/535106/ , I'm confused and the comment on the query doesn't match the query at all (comment is about finding sprf, query is finding sprs)
[08:37] <wgrant> StevenK: Is it expanding the set size?
[08:38] <StevenK> wgrant: http://pastebin.ubuntu.com/535113/
[08:38] <wgrant> stub: The comments used to be interspersed with the relevant bits of the query. Then I rewrote it and moved them all to the top for now.
[08:38] <wgrant> stub: But http://pastebin.ubuntu.com/535111/ is the latest version, which might make more sense.
[08:39] <lifeless> wgrant: the comment and code are confused ;)
[08:40] <wgrant> lifeless: Oh?
[08:40] <lifeless> well it says 'Find any SPRFs that have expired (LFA.content IS NULL'
[08:40] <lifeless> but you sau I want to find those SPRs that have no files with LFA.content IS NULL
[08:40] <stub> I don't know what Count(LibraryFileAlias) actually does, but I suspect nothing useful.
[08:40] <wgrant> lifeless: Have you read the version with the comments not all at the top?
[08:41] <lifeless> http://pastebin.ubuntu.com/535111/
[08:41] <wgrant> stub: Howso? It works fine.
[08:41] <lifeless> wgrant: its unusual, sets of alarums
[08:41] <StevenK> wgrant: This looks like it runs well, kill it?
[08:41] <wgrant> StevenK: Yep, thanks.
[08:42] <StevenK> wgrant: Bill is in the mail
[08:42] <lifeless> wgrant: I'm very confused about whether you want 'expired sprfs' or 'no expired sprfs'
[08:42] <lifeless> wgrant: I can get you expired ones in 6ms.
[08:42] <wgrant> lifeless: I want those SPRs without expired SPRFs.
[08:42] <lifeless> wgrant: why those in particular ?
[08:43] <lifeless> wgrant: and why the specific case of sprs without *any* expired sprfs ?
[08:43] <stub> I see. It is a confusing spelling of COUNT(LibraryFileAlias.id), which excludes NULLs unlike COUNT(*) would
[08:43] <wgrant> lifeless: because I can't extract an SPR without all of its files.
[08:46] <wgrant> stub: It wasn't a deliberate choice, I don't think. Does it make a difference?
[08:47] <stub> COUNT(*) or Count(LibraryFileAlias.*) would match every row. Count(LibraryFileAlias.id) counts rows with a non-null id
[08:49] <wgrant> stub: Hm, but COUNT(LibraryFileAlias) happily returns 0...
[08:50] <stub> In SQL or Storm?
[08:50] <wgrant> Both.
[08:51] <StevenK> size is 2811, but 11244 were read from the file
[08:51]  * StevenK grumbles at gina
[08:52] <StevenK> wgrant: Oh, that script was running fast enough with 5 that I suspect it could be bumped to 20 or so easily
[08:54] <wgrant> StevenK: Yay. Thanks.
[08:55] <stub> http://paste.ubuntu.com/535119/ is the clearest SQL and likely fastest
[08:55] <stub> But if it works
[08:56] <bigjools> morning
[08:56] <StevenK> 'AND SourcePackageRelease.id >= 1) AS Whatever' Haha
[08:57] <adeuring> good morning
[08:58] <wgrant> stub: I tend to avoid EXCEPT when it's easy. But if you say so :)
[08:58] <stub> Its hard to say without benchmarking, and I haven't done that :)
[08:59] <stub> In fact, that limit might have to go inside...
[09:00] <wgrant> Anyway, this script works quickly now, and only has to be run once...
[09:01] <StevenK> Crap, I think I made gina spin
[09:02] <wgrant> stub: Is postgres not smart enough to reduce a 'GROUP BY SourcePackageRelease.id, SourcePackageRelease.foo, SourcePackageRelease.bar' to 'GROUP BY SourcePackageRelease.id'?
[09:02] <StevenK> I thought GROUP BY were never twiddled with
[09:02] <stub> SQL isn't
[09:03] <lifeless> http://pastebin.com/bsCfW3Ya
[09:03] <wgrant> stub: But surely it can see that it's just grouping across real fields, one of which is a PK.
[09:03] <stub> Yes, but the SQL standard wants them listed IIRC
[09:04] <stub> PG could extend the spec here I guess, but hasn't
[09:06] <wgrant> stub: I know that SQL requires that they be listed. But PG also seems to execute them.
[09:06] <wgrant> When it can tell that it's optimisable down to SourcePackageRelease.id.
[09:09] <mrevell> Hi
[09:10] <lifeless>  SELECT SourcePackageRelease.*
[09:10] <lifeless>     FROM SourcePackageRelease
[09:10] <lifeless>     WHERE SourcePackageRelease.id >= 1 and not
[09:10] <lifeless> SourcePackageRelease.id in (SELECT SourcePackageReleaseFile.sourcepackagerelease
[09:10] <lifeless>     FROM SourcePackageReleaseFile, LibraryFileAlias
[09:10] <lifeless>     WHERE SourcePackageReleaseFile.sourcepackagerelease = SourcePackageRelease.id and SourcePackageReleaseFile.libraryfile = LibraryFileAlias.id
[09:10] <lifeless>     AND LibraryFileAlias.content IS NULL
[09:10] <lifeless> ) order by id desc limit 1;
[09:10] <lifeless> stub: wgrant: ^
[09:10] <lifeless> 20ms
[09:12] <wgrant> lifeless: Ah, that's not bad.
[09:12] <lifeless> 420.120 ms to get 55 rows
[09:13] <wgrant> Would a NOT EXISTS be saner, though?
[09:13] <lifeless> seemed to perform worse before
[09:13] <wgrant> :(
[09:13] <lifeless> but it wasn't quite identical
[09:13] <lifeless> lets see
[09:15] <lifeless>  SELECT SourcePackageRelease.*
[09:15] <lifeless>     FROM SourcePackageRelease
[09:15] <lifeless>     WHERE SourcePackageRelease.id >= 1 and not
[09:15] <lifeless> EXISTS (SELECT 1
[09:15] <lifeless>     FROM SourcePackageReleaseFile, LibraryFileAlias
[09:15] <lifeless>     WHERE SourcePackageReleaseFile.sourcepackagerelease = SourcePackageRelease.id and SourcePackageReleaseFile.libraryfile = LibraryFileAlias.id
[09:15] <lifeless>     AND LibraryFileAlias.content IS NULL
[09:15] <lifeless> ) order by id desc limit 1;
[09:15] <lifeless> 11 seconds
[09:15] <lifeless> *yawn*
[09:15] <lifeless> gnight
[09:16] <wgrant> Night.
[09:16] <wgrant> Thanks.
[09:21] <stub> wgrant: http://paste.ubuntu.com/535123/ is 20ms to retrieve approx 55 rows, and for this use we don't care about the approx.
[09:21] <wgrant> stub: Is it worth it?
[09:22] <stub> I have no idea, but you guys seemed to be optimizing it :)
[09:22] <wgrant> We'll be making lots more queries.
[09:22] <wgrant> I don't want to optimise it, lifeless does :P
[09:22] <stub> Is this a run once?
[09:22] <wgrant> Yes.
[09:22] <stub> Don't care then :)
[09:22] <wgrant> Yay.
[09:23] <stub> As long as it runs in days rather than weeks.
[09:23] <wgrant> I just wanted it down from an hour on DF... which was achieved by fixing the GROUP BY.
[09:24] <StevenK> 68 minutes down to about 30 seconds or so
[09:35] <wgrant> bigjools: Have the recent log parser changes actually been tried?
[09:36] <wgrant> I recall a couple of emails to the LOSAs but I never saw a response (although that may have just gone to canonical-launchpad and not me)
[09:37] <jml> morning
[09:37] <jml> this cold is finally getting to be a hassle
[09:38] <bigjools> wgrant: otp, but yes and it DOSed germanium
[09:38] <wgrant> bigjools: Still!?
[09:39] <wgrant> :(
[09:39] <bigjools> still
[09:39] <wgrant> They must have pulled some nice tricks with the librarian one the first time :(
[10:00] <jml> another incident?
[10:01] <bigjools> wgrant: the librarian logs are nowhere near the size of the Apache ones for PPAs
[10:01] <wgrant> bigjools: Ah.
[10:01] <wgrant> Sad.
[10:03] <wgrant> bigjools: Even with the max set?
[10:03] <wgrant> And it no longer reading all the lines in first?
[10:04] <bigjools> wgrant: I don't know the details, I am yet to re-create on DF.
[10:04] <bigjools> mostly because I've not tried to re-create, mind ...
[10:04] <wgrant> I guess I can do that in a couple of weeks.
[10:04] <bigjools> I've got the production logs on it ready to go
[10:04] <wgrant> Ah, great!
[10:04] <wgrant> So it's not entirely hopeless.
[10:04] <bigjools> but I need to fix the 2 thousand soyuz oopses per day first
[10:05] <jml> mrevell: hi
[10:05] <mrevell> Hell jml
[10:05] <jml> That I am :)
[10:05] <wgrant> bigjools: PFOE?
[10:06] <mrevell> heh
[10:06] <bigjools> wgrant: yes
[10:06] <bigjools> wgrant: also stub's change to make log.error generate an OOPS is making me sad
[10:06] <wgrant> bigjools: Yeah, it would :(
[10:07]  * bigjools gets caffeine while waiting for rf-get
[10:08] <stub> You don't want the behaviour, or you don't like what it is telling you?
[10:09] <wgrant> stub: Soyuz is ancient and broken :P
[10:12] <bigjools> stub: the code that logs an error for upload problems doesn't differentiate between what should or should not be an oops (it can be a package problem or a code problem)
[10:12] <bigjools> so I need to fix the code
[10:13] <jml> onwards and upwards!
[10:14] <jml> wgrant: had a look at the distributionmirror_prober recently?
[10:14] <wgrant> jml: We offloaded that to Registry :D
[10:14] <wgrant> NFI why.
[10:14] <wgrant> But it's damn convenient.
[10:15] <bigjools> it's always been registry
[10:15] <wgrant> jml: Why?
[10:15] <jml> wgrant: when you said broken and ancient,  I was reminded of it (or at least its tests)
[10:15] <wgrant> jml: Ah, yes.
[10:15] <bigjools> lol
[10:15] <wgrant> It's possibly even more broken and ancient than most of the rest.
[10:15] <wgrant> Apart from gina.
[10:16] <wgrant> Although gina was refurbished.
[10:16] <wgrant> It still sucks.
[10:16] <StevenK> I know :-(
[10:16] <StevenK> I keep wanting to rip out all of kiko's XXXs
[10:16] <wgrant> And some of the older bits of archivepublisher are fairly nauseating.
[10:16] <wgrant> But one day it will be fixed.
[10:16] <wgrant> Maybe.
[10:16] <jml> about to try to land the branch that changes all of the twisted tests bar the prober ones to use testtools
[10:16] <wgrant> Hah.
[10:16] <wgrant> That bad?
[10:16] <jml> they basically need to be rewritten.
[10:16] <jml> it's not that hard
[10:17] <wgrant> One could say that about 90% of the Soyuz tests...
[10:17] <jml> but it shouldn't block getting this large branch integrated
[10:17] <jml> wgrant: well, these are actually just generally incorrect
[10:17] <wgrant> jml: ... oh.
[10:17] <jml> (*always* return the Deferred!)
[10:18] <wgrant> james_w: What happened to those massive anti-sampledata branches of yours?
[10:26] <bigjools> jml: see, now I understand about always returning the Deferred :)
[10:27] <jml> bigjools: yep :)
[10:28] <wgrant> I really need to learn Twisted properly.
[10:28] <bigjools> wgrant: I would like that
[10:29] <wgrant> Since I don't really completely understand the intricacies of the new buildd-manager. And that could be problematic.
[10:30] <bigjools> wgrant: it's not too hard once you get into it
[10:30] <wgrant> Indeed, I probably just need to do it.
[10:30] <bigjools> but there is a bit of a learning cliff
[10:30] <wgrant> Can't be as bad as Zope's.
[10:30] <wgrant> And I picked that up OK.
[10:31] <bigjools> I tried to document all the gotchas as much as possible, I probably missed a load though
[10:35] <jml> wgrant: Twisted is less abstract than Zope and has fewer grand ideas, imo.
[10:36] <wgrant> Great.
[10:36] <jml> wgrant: also, it has the happy advantage of having primarily XML-hating developers
[10:36] <wgrant> Hah.
[10:36] <wgrant> ZCML's not that bad.
[10:37] <jml> the syntax isn't that bad, I guess
[10:37] <wgrant> I prefer Grok's approach, yes, but it's not that bad.
[10:37] <jml> the action-at-a-distance thing is a bit of a pain.
 ZCML's not that bad.
[11:06] <bigjools> who are you and what did you do with wgrant?
[11:09] <wgrant> bigjools: There are far worse things!
[11:10] <bigjools> like limb loss?
[11:10] <bigjools> having heard that Twisted devs hate xml, I want to become one!
[11:10] <wgrant> For one.
[11:11] <wgrant> A lost limb? An XML? Or a Twisted dev?
[11:46] <bigjools> wgrant: it's that time to remove jaunty's old binaries from the librarian, can you sanity check this for me, it's the same as the one for intrepid.   http://pastebin.ubuntu.com/535163/
[11:50] <wgrant> bigjools: Replace the "- interval '1 week'" with "+ interval '1 week'" and you have a deal.
[11:51] <bigjools> wgrant: well we don't need to add any interval really, the GC has a built in one, which is why we took it *off* in the last query as time/space was tight.
[11:51] <wgrant> bigjools: At which stage is it built in? Does it set the expiry time in the future?
[11:52] <bigjools> no, it adds a week to the timestamp in the query it uses
[11:52] <bigjools> IIRC
[11:53] <wgrant> I'm extremely uncomfortable OKing a query that I know to be buggy (probably insignificantly, but still) when it's not an emergency, and I have an exam in 10 hours.
[11:53] <bigjools> heh
[11:53] <bigjools> go to bed
[11:53] <bigjools> what was buggy last time?
[11:53] <wgrant> We didn't check dateremoved.
[11:54] <bigjools> in the EXCEPT clause?
[11:55] <wgrant> Rght.
[11:55] <wgrant> If we don't exclude unremoved files, p-d-r will cry.
[11:55] <bigjools> right
[11:55]  * bigjools fixors
[11:56] <wgrant> How critical are we for space?
[11:56] <bigjools> 300G
[11:56] <wgrant> It means nothing to me...
[11:56] <bigjools> heh
[11:56] <bigjools> not crtitical but in the time-to-think-about it stage
[11:56] <wgrant> Yep.
[11:57] <wgrant> I'll go through the query properly after my exam, then we can run it without the expiry mangling tomorrow night, then the morning after I will realise another flaw in it, and we will have no blown away the files yet :)
[11:58] <bigjools> http://pastebin.ubuntu.com/535167/
[11:58] <bigjools> :)
[11:58] <wgrant> We've fucked it up somewhat the last three times. Let's not do it again :)
[11:58] <bigjools> the p-d-r thing was the only problem last time
[11:58] <wgrant> Er.
[11:58] <jml> ffs
[11:58] <wgrant> Yeah, looks good.
[11:58] <jml> why does absolutely *every* site that wants my money demand that I create a bleeding account
[11:59] <bigjools> so you can be labelled and tracked
[11:59] <wgrant> jml: Everyone should accept OpenID.
[11:59] <wgrant> *nudge nudge*
[11:59] <jml> these guys *do* accept openid
[11:59] <wgrant> Hah.
[11:59] <jml> but they also need me to make up a password and so forth
[11:59] <wgrant> As many do :(
[12:00] <wgrant> Sounds like Launchpad!
[12:00] <wgrant> Anyway, I should probably sleep.
[12:01] <deryck> Morning, all.
[12:01] <jml> deryck: good morning
[12:02] <wgrant> bigjools: Heh, that query's still bad.
[12:02] <wgrant> I will fix tomorrow.
[12:02] <wgrant> Sigh.
[12:02] <bigjools> sigh
[12:02] <wgrant> This is hard.
[12:02] <bigjools> yes
[12:02] <bigjools> what's up?
[12:02] <wgrant>                 AND bpph.status in (2, 5)
[12:02] <wgrant>                 AND bpph.dateremoved is NULL
[12:03] <wgrant> I think the first one probably wants to be removed.
[12:03] <wgrant> Since the second will clearly be true in all those cases.
[12:03] <bigjools> true
[12:03] <bigjools> but
[12:04] <bigjools> competing p-d-r processes.  Grah
[12:04] <wgrant> Hm?
[12:04] <jml> gror my head
[12:04] <bigjools> basically we need to run this periodically
[12:04] <bigjools> for all obsolete series
[12:05] <bigjools> or, fix p-d-r not to care
[12:05] <wgrant> That and obsolete-series.py itself, yeah.
[12:05] <wgrant> Hm?
[12:05] <wgrant> Why does p-d-r care?
[12:05] <bigjools> the problem last time ...
[12:05] <wgrant> Ah, yes.
[12:05] <wgrant> Or we could forcibly delete all the PPA pubs from obsolete series.
[12:05] <bigjools> no
[12:05] <wgrant> :(
[12:05] <bigjools> some people are using obsolete series
[12:06] <bigjools> they are crackpots, I know
[12:06] <wgrant> Those people are wrong.
[12:08] <wgrant> Anyway, I will recheck that query tomorrow while I am still able, since that will resolve the immediate issue. But I would later like to know these wondrous use-cases for obsolete series, since I'm fairly sure they're insane.
[12:08] <wgrant> Night.
[12:09] <wgrant> It would make obsolete series handling much easier :(
[12:12] <bigjools> nn wgrant, good luck with the exam
[12:21] <jml> crappy crapzor mccrapperton
[13:13] <jml> do we have an existing mechanism to use the librarian as a fixture rather than as a layer?
[13:18] <jml> I guess not, since testSetUp and testTearDown both do something in the librarian layer.
[13:18] <jml> which means getting the log of the librarian during tests is going to be a pain
[14:47] <sinzui> jml ping
[14:47] <jml> sinzui: hi. otp
[14:48]  * sinzui will talk later
[15:11] <henninge> jtv: is your current branch browser code branch pushed?
[15:11] <jtv> henninge: yes.
[15:11] <jtv> Currently going through review for the migration script with Aaron.
[15:11] <henninge> jtv: Does it touch CurrentTranslationMessageView?
[15:12] <jtv> Yes.
[15:12] <jtv> Had to.   :(
[15:12] <henninge> that's ok
[15:13] <henninge> jtv: there are two branches (pre and normal). I guess the one depends on the other?
[15:13] <jtv> Yes.
[15:14] <jtv> The "pre" branch is waiting for review (though I'm keeping our reviewer busy; he found what looks like a serious gotcha in the script)
[15:14] <jtv> If that gets through unscathed, then the regular branch is also ready for review.
[15:18] <jtv> Meanwhile, I guess I'll be adding tests to the migration script and fixing the bug the review turned up.
[15:32] <bigjools> deryck: is it bad that I found it hard to read anything after the line "disable windmill tests" in your last email? :)
[15:34] <deryck> bigjools, I guess not ;)  but yeah, maybe so :-)
[15:54] <mars> abentley, you have another bzr pipeline convert in matsubara :)
[15:57]  * mars tea :) mouse battery recharge :(
[15:57] <mars> wrong macro
[15:59] <abentley> mars: Cool.
[16:05] <jml> sinzui: ping
[16:08] <sinzui> hi jml
[16:39] <lifeless> moin
[16:40] <deryck> morning, lifeless
[16:40] <lifeless> hi deryck
[16:42] <jml> sinzui: 173 oops bugs, 59 timeout bugs
[16:47] <mars> good morning lifeless.  We don't normally see you around at this hour
[16:48] <lifeless> mars: I'm not normally jetlagged either :)
[16:48] <mars> rough.  That's twice in four weeks, isn't it?
[16:48] <lifeless> bigjools: hi
[16:48] <lifeless> bigjools: is https://bugs.launchpad.net/soyuz/+bug/654372 good to go ?
[16:48] <_mup_> Bug #654372: Source domination is inefficient <new-release-cycle-process> <qa-needstesting> <soyuz-publisher> <tech-debt> <Soyuz:Fix Committed by wgrant> <https://launchpad.net/bugs/654372>
[16:49] <bigjools> lifeless: testing it *right now* as it happens :)
[16:49] <lifeless> \o/
[16:49] <bigjools> I've been doing QA all freaking day
[16:51] <bigjools> unfortunately dogfood is slower than anything I can think of a funny idiom for right now
[16:51] <lifeless> than a laser with a fricken shark on its handle?
[16:52] <bigjools> I can think of plenty of really offensive comparisons
[16:55] <lifeless> bdmurray: hi
[16:56] <lifeless> https://bugs.launchpad.net/malone/+bug/594247 - is that gtg on qastaging ?
[16:56] <_mup_> Bug #594247: searchTasks with structural_subscriber times out regularly <dhrb> <overlyprecise> <pg83> <qa-needstesting> <timeout> <Launchpad Bugs:Fix Committed by adeuring> <https://launchpad.net/bugs/594247>
[16:56] <adeuring> lifeless: gtg?
[16:56] <lifeless> good to go
[16:57] <adeuring> lifeless: yes, let me update the tag
[17:37] <jml> lifeless: good morning
[17:39] <lifeless> jml: oh hai
[17:46] <bigjools> good night all
[17:54] <lifeless> jml: I landed a couple of self reviewed branches since the optional review experiment started.
[17:54] <lifeless> jml: could you please review those for me, per the 'robert will review everything except his stuff, jml will review that' bootstrap phase?
[17:55] <jml> lifeless: sure. can you maybe email me the revnos or mps or something?
[17:55] <jml> lifeless: otherwise I'll make a note to figure those out myself.
[17:56]  * jml partly afk assembling whiteboard
[17:57] <lifeless> make a note.
[17:57] <lifeless> If I determine them I will mail you
[18:00] <lifeless> jtv: when moving things to Ubuntu, if you change the projet to null, we won't get more email.
[18:01] <jml> lifeless: btw, I'm getting exactly one failure w/ my testtools branch, it's a 500 response from the librarian. has your recent fixture/layer work made it possible for me to get the librarian log attached to the error?
[18:02] <jml> (I can't seem to reproduce locally with a subset of the tests)
[18:02] <lifeless> there is glue for that in this branch - https://code.launchpad.net/~lifeless/launchpad/librarian/+merge/39013
[18:03] <lifeless> its not landed yet but you might find merging it, running the test with it, to help you
[18:03] <jml> lifeless: ok, thanks.
[18:03] <jml> I'll give that a try.
[18:04] <lifeless> if it blows up you might find grabbing the addDetail change to be easy enough to pull out, but I think the branch is in tolerable shape.
[18:04] <jml> it's also making the fixture a member of the layer, I think. not such a big deal.
[18:07] <lifeless> the reason its not landed is it depends on teh databasefixture layer which is broken in 'make check' (but not bin/test) atm
[18:07] <lifeless> s/layer/branch/
[18:08] <jml> meh. conflicts.
[18:08] <lifeless> :<
[18:08] <jml> too sick/tired to deal with that now.
[18:09] <jml> I guess this branch lands Wednesday at the earliest.
[18:10] <lifeless> go rest
[18:10] <lifeless> get well
[18:10] <lifeless> nothing good comes of working sick
[18:23] <lifeless> fun stuff - http://www.facebook.com/note.php?note_id=76191543919
[18:28] <lifeless> deryck: hi
[18:28] <deryck> hi lifeless
[18:28] <lifeless> deryck: something for consideration in your js landing stuff
[18:28] <deryck> lifeless, sure.  shoot.  Was just replying to your email.
[18:28] <lifeless> I think its easy to end up with measurement bias in assessing the benefits of even terrible tests
[18:29] <lifeless> the problem is in gathering data when there is a filter (the tests) on half the range
[18:30] <deryck> lifeless, ok, I don't know that I fully follow what you mean there.  :-)
[18:30] <lifeless> ok
[18:31] <lifeless> so, we're mentally saying 'gee, I think that <windmill> only sometimes catches failures, so we only sometimes have defects it would catch'
[18:31] <lifeless> but the actual set of failures it catches is 22 times larger than the local-test-failures-one-encounters
[18:32] <lifeless> (we have ~ 22 active coding developers)
[18:32] <lifeless> the tests, terrible as they are, are filtering out failures from all developers, but individually we only perceive the failures we've made ourselves.
[18:32] <deryck> no, I don't think  'gee, I think that <windmill> only sometimes catches failures, so we only sometimes have defects it would catch'
[18:32] <deryck> I wouldn't say it like that
[18:33] <lifeless> deryck: ok
[18:33] <deryck> I do think Windmill catches some failures.  I don't think that means we only sometimes have defects it would catch.
[18:33] <deryck> I'm not sure what that means for your argument :-)
[18:33] <lifeless> I'm not really arguing
[18:34] <lifeless> throwing an issue I struggle with when evaluating the benefit of tests - any tests - into the right for discussion
[18:34] <lifeless> since its part of the risk analysis.
[18:34] <lifeless> s/right/ring/
[18:35] <deryck> ah, right
[18:36] <deryck> so how do we determine the value of these tests?  That's the heart of your analysis, right?
[18:36] <lifeless> its extremely hard to reason about life without any given set of tests, because there are so many places that the filtering effect (filtering out defects) that they offer occurs at.
[18:36] <lifeless> deryck: I think its an input into assessing the value of the tests, yes.
[18:39] <deryck> lifeless, so you're saying that the tests filter defects in ways that we can't know, because we only the past defect the tests did catch.  But we don't know the things they catch they we were never aware of.
[18:39] <deryck> that's hard to type
[18:39] <deryck> it's a bit meta-physical to me. :-)
[18:41] <lifeless> yeah
[18:41] <lifeless> more simply
[18:41] <lifeless> you never see my mistakes that tests caught.
[18:41] <lifeless> *we* never see each others mistakes that tests caught.
[18:42] <deryck> ah, ok
[18:42] <deryck> I know mine, but not yours.
[18:43] <lifeless> but when we remove the tests
[18:43] <deryck> I agree with that.  But that also assumes you write js or windmill.  And well, there ain't that many of us doing it for lp. ;)
[18:43] <lifeless> you will feel many more, perhaps even all, of the mistakes.
[18:43] <lifeless> deryck: ack, as I say - this is a general modelling thing
[18:43] <deryck> lifeless, right, and I completely agree with you in the abstract.
[18:44] <lifeless> deryck: for clarity, I'm ok with what you're proposing, tentatively.
[18:44] <lifeless> I don't think I'll get beyond tentative ;)
[18:45] <deryck> lifeless, fair enough.  I don't think I can make you feel any better about it either :-)
[18:45] <deryck> lifeless, is there anything I need to do because it's "tentative" or can I move ahead, assuming no one else objects.
[18:46] <lifeless> oh, I'm nonblocking as always
[18:46] <lifeless> if I wanted to stop it I would say so very clearly.
[18:46] <lifeless> I'd be happiest if we just fix windmill
[18:46] <lifeless> but you're doing the work - you get to decide on the right path.
[18:47] <lifeless> if I was doing it, i think I'd fix windmill
[18:47] <deryck> fair enough,  thanks!
[18:47] <deryck> I'm replying in email on why I don't think we should do that.  or why I choose not to, rather.
[18:48] <lifeless> thanks
[18:50] <lifeless> flacoste: when did windmill become unmaintained ?
[18:51] <lifeless> statik: we on today?
[18:51] <jml> I think I overreached with this whiteboard
[18:52] <statik> lifeless: sure thing, just wrapping up with IBM
[18:53] <mars> lifeless, by unmaintained, do you mean, when did mikeal leave the project?
[18:53] <lifeless> mars: I don't know what I mean.
[18:53] <mars> lifeless, or do you mean umaintained in LP - no active work
[18:53] <lifeless> mars: see flacostes mail
[18:54] <mars> lifeless, oops, my bad - /me goes to read context first
[18:56] <deryck> I believe unmaintained == mikeal leaving.
[18:56] <deryck> windmill is not under active development anymore, as I understand it.
[18:56] <lifeless> is there any reason to believe that the 512K bug wasn't inherited from Selenium?
[18:57] <deryck> I don't know.  rockstar worked on that bug before and could say, I think.
[18:57] <mars> deryck, well, there are developers, but the project velocity may have slowed a fair bit.  (I haven't been keeping close tabs though)
[18:58] <deryck> yeah, the project web site has a new face lift.  So someone cares about it still.
[18:58] <rockstar> lifeless, I wasn't aware that Windmill inherited anything from Selenium.
[18:59] <lifeless> rockstar: wasn't windmill a fork of selenium, way back when ?
[18:59] <rockstar> lifeless, no, not at all.
[19:00] <lifeless> rockstar: I've been misinformed then. Someone should vote that comment down :)
[19:01] <mars> lifeless, IIRC: Selenium was a complex piece of tech, the windmill devs thought they could have done some parts better - windmill tried a different way
[19:02] <deryck> I don't see much difference myself between selenium 1 and windmill.  Just that windmill is Python.
[19:02] <mars> lifeless, now Selenium 2 apparently has taken the same approach that windmill did.
[19:02] <rockstar> mars, yeah, and the windmill devs hated selenium.
[19:02] <deryck> or maybe it's selenium 2, I'm thinking of ;)
[19:02] <mars> deryck, it was under the hood.  SSL handling, cross-domain requests, etc.  This is messy tech
[19:02] <rockstar> Mikeal said himself "and, for the most part, the things we hated about Selenium are basically fixed now."
[19:02] <deryck> yeah
[19:03] <deryck> I actually have less issue with windmill vs. selenium than the kind of testing we chose to do with windmill.
[19:03] <rockstar> deryck, everyone but the Selenium 2 folks are staying away from Selenium 2.
[19:03] <rockstar> deryck, yeah, me too.
[19:03] <deryck> I think using selenium is better since it's more widely used and because it forces us to think differently about how we test, but I don't think selenium is a magic bullet.
[19:04] <lifeless> statik: ok, skype me when ready?
[19:04] <mars> rockstar, "everyone but the Selenium 2 folks are staying away from Selenium 2" - care to elaborate?
[19:10] <flacoste> deryck: they did made a release last week though
[19:10] <flacoste> windmill 1.4
[19:12] <statik> lifeless: you don't seem to be online in skype
[19:12] <lifeless> fixed
[19:15] <rockstar> flacoste, yes, but no one's really actively working on it.  It's just patches that people send in now.  That release has been on deck for a while now.
[19:16] <rockstar> mars, I don't have many other details, other than Selenium 2's java server stuff is apparently really whack, I guess.
[19:16] <rockstar> mars, this is all speculation, as is everything in our javascript testing story.
[19:17] <rockstar> mars, one thing that is clear is that we need to be careful how we invest in any ship, because if we commit too strongly to something, we'll be sinking far too fast.
[19:17] <rockstar> Er, we may find ourselves on a sinking ship.
[19:18] <mars> Yep.  Always a risk (I've been down this road more than once)
[19:19] <mars> Alas, there is no formula to predict which budding OSS project in a given arena will be best for your needs 2 years from now.
[19:39] <flacoste> deryck: ,/bin/lp-windmill -m firebug jsdir=lib/canonical/launchpad/windmill/jstests http://launchpad.dev:8087/
[19:57] <lifeless> flacoste: hi
[20:05] <wgrant> I'm confused.
[20:05] <wgrant> The lazr-js upgrade triples our JS size?
[20:05] <wgrant> Isn't that a bug?
[20:05] <flacoste> lifeless: finishing off with deryck
[20:05] <lifeless> flacoste: ah, my bad.
[20:05] <lifeless> flacoste: sorry ;)
[20:06] <lifeless> wgrant: I think so.
[20:06] <deryck> yes, it's a bug.
[20:07] <wgrant> If we need more than a megabyte of JS on every page, I think we have a serious problem :/
[20:08] <deryck> I agree it's serious.  hence, my effort to solve it. ;)
[20:08] <wgrant> Great.
[20:08] <thumper> morning
[20:08] <deryck> we don't ever need 1.3 Mb of js for any page.  But we're concat'ing of all yui + lp js + lazr-js for every page.
[20:09] <deryck> and yui is the real beast
[20:09] <deryck> morning, thumper
[20:09] <wgrant> Ahh, I see.
[20:09] <deryck> yui is designed with batteries included like Python, thinking you'll dynamically load the modules you'll need.
[20:10] <deryck> and we've never used it like that
[20:10] <wgrant> Does U1?
[20:11] <wgrant> It seems like U1 has solved this sort of thing.
[20:11] <wgrant> But I can't really see..
[20:11] <deryck> u1 has a smaller base yui, I believe.  but rockstar is working on this for them.  he could say for sure
[20:12] <wgrant> Ah.
[20:39] <salgado> hi thumper
[20:39] <salgado> thumper, I think I remember reading somewhere that you had plans to work on blueprints in the near future.  have you started yet?
[20:40] <thumper> salgado: not really
[20:40] <thumper> salgado: I've done a little yak shaving
[20:40] <thumper> salgado: but not started in earnest
[20:40] <salgado> thumper, did you have any plans to expose them over the API?
[20:40] <thumper> yes
[20:42] <salgado> thumper, then it looks like I have good news for you.  project managers in Linaro need that ASAP, so I'm taking james_w's branch branch which started exposing blueprints over the API and try to nail down the remaining issues to get it landed
[20:43] <thumper> salgado: sounds good
[20:43] <salgado> lp:~james-w/launchpad/safe-blueprints-model is the branch, btw.
[20:53] <rockstar> wgrant, U1 doesn't ship lazr-js, which drastically reduces its footprint.
[20:53] <rockstar> wgrant, also, until recently, we were loading each file separately in U1 (bad).
[21:24] <lifeless> salgado-afk: awesome
[21:25] <lifeless> salgado-afk: one small request
[21:25] <lifeless> salgado-afk: please don't put the blueprints in api/1.0
[21:28] <lifeless> rockstar: hey
[21:28] <lifeless> rockstar: remember at uds you had a features issue in a template
[21:28] <lifeless> rockstar: I would love to know what the problem was
[21:32] <rockstar> lifeless, uds was an eternity ago.
[21:32] <rockstar> :)
[21:32] <rockstar> lifeless, I remember it had something to do with template macros not having the same scope or something.  We were find that it was creating a new WSGI request for each template macro, even if it wasn't actually a net request itself.
[21:33] <rockstar> I don't remember how I fixed it though.
[21:33] <lifeless> ah well
[21:33] <lifeless> thanks
[21:33] <rockstar> lifeless, are you having an issue now?
[21:33] <lifeless> no
[21:33] <lifeless> I wanted to:
[21:33] <lifeless>  - think about root cause fixes
[21:33] <lifeless>  - have the answer handy if someone else encounters it
[21:50] <LPCIBot> Project devel build (237): FAILURE in 4 hr 5 min: https://hudson.wedontsleep.org/job/devel/237/
[22:39] <lifeless> meep
[22:39] <lifeless> n
[22:39] <lifeless> http://news.cnet.com/8301-30685_3-20023535-264.html
[23:01] <lifeless> gmb: isn't it late for you ?