[00:43] <mwhudson> hm
[00:44] <jelmer> hmm indeed!
[00:44] <mwhudson> there is a LOT of crack in canonical.launchpad.webapp :(
[00:46] <mwhudson> is read only mode officially dead now?  can we just nuke the relevant code from orbit yet?
[00:46] <mwhudson> lifeless: ^ ?
[00:46]  * mwhudson settles for nuking 6 year old crack instead
[01:06] <wgrant> mwhudson: There is, yes :(
[01:06] <wgrant> mwhudson: We're preserving RO-mode for a few months.
[01:06] <wgrant> Just in case.
[01:06] <mwhudson> ok
[01:06] <wgrant> The rest of canonical.* is nearly cleaned out, but canonical.launchpad.webapp is particularly bad and mostly untouched.
[01:07] <mwhudson> wgrant: i just pushed a branch called i-dont-believe-for-a-minute-that-steveIsFixingThis
[01:07] <wgrant> Heh.
[01:08] <wgrant> Hey, it's not yet 7 years old.
[01:09] <mwhudson> it was hilariously old and stale _when i started working on launchpad_ though
[01:09] <wgrant> Yes.
[01:09] <wgrant> There's lots of that :)
[01:09] <wgrant> Every couple of weeks I spend a few hours cleaning up canonical.*... eventually the maintenance squads will do that, I suppose, but it's a very long-term "eventually".
[01:11] <mwhudson> luckily i don't have the constraint of being paid to work on lp :-)
[01:11] <lifeless> mwhudson: not quite dead yet
[01:11] <wgrant> lifeless: You're not here -- go away.
[01:11] <lifeless> mwhudson: but yeah, I just need to tweak mthaddon a bit about it :)
[01:11] <mwhudson> lifeless: ok
[01:11] <lifeless> wgrant: I had a 6 hour unexpected medical thing yesterday
[01:11] <lifeless> wgrant: so I'm partly here
[01:11] <wgrant> Ah.
[01:11] <wgrant> Carry on, then.
[01:12] <mwhudson> wgrant: if you have a spare minute, can you search for 'thread_locals' in canonical.launchpad.webapp.publication?
[01:12] <mwhudson> i think it's complete crack and don't see at all why it's stored on a thread locals object
[01:12] <mwhudson> ... unless publications are process global or something...
[01:13] <wgrant> Used by publication and servers. This can't be anything good.
[01:13] <wgrant> Oh, thread_locals is only publication.
[01:14] <mwhudson> wgrant: i think the one in servers is different
[01:14] <wgrant> Yes.
[01:14] <mwhudson> and is there because of zope crack rather than old pointless crack
[01:14] <mwhudson> (i think)
[01:14] <wgrant> Yeah.
[01:14] <wgrant> I don't think the publication is actually per-request.
[01:15] <mwhudson> i think it is :-)
[01:15] <mwhudson> the only way i can imagine checking is a print statement though :/
[01:16] <wgrant> It's been several years since I last dealt with this stuff. I forget how it is stuck together.
[01:16] <mwhudson> yeah fair enough
[01:16] <wgrant> (this was before LP was open)
[01:16] <mwhudson> don't waste too much time on it
[01:17] <wgrant> Ewww canonical_url constructs its own request.
[01:17] <wgrant> Forgot about that bit.
[01:17] <mwhudson> haha\
[01:17] <mwhudson> yes that is particularly terrible
[01:17] <mwhudson> (i found that earlier too)
[01:19] <wgrant> Hmm, so you're right, the publication is normally per-request.
[01:20] <wgrant> But then why do most of its methods take a request...
[01:22] <lifeless> the word baroque comes to mind
[01:22] <mwhudson> oh my yes
[01:23] <mwhudson> i wish the person who came up with all this was a bit less able to cope with complexity
[01:23] <mwhudson> aaaaaaa
[01:23] <mwhudson> wgrant: i'm not sure publications _are_ request local
[01:24] <mwhudson>         publication = self._publication_cache.get(publication_class)
[01:24] <mwhudson>         if publication is None:
[01:24] <mwhudson>             publication = publication_class(self._db)
[01:24] <mwhudson>             self._publication_cache[publication_class] = publication
[01:24] <mwhudson> (this is in zope.app.publication.httpfactory)
[01:24] <wgrant> mwhudson: But the RequestPublicationFactories take the class as a factory...
[01:24] <wgrant> Are they lying?
[01:25] <mwhudson> "sort of"
[01:27] <wgrant> Stuff like this is why I've been focusing more on the layer above. The cruft that integrates with our Zope integration cruft.
[01:27] <wgrant> Not our Zope integration cruft itself.
[01:27] <mwhudson> yeah fair enough
[01:27] <wgrant> Because that is messy and awful :(
[01:33] <mwhudson> wgrant: do you want to do the honours? https://code.launchpad.net/~mwhudson/launchpad/i-dont-believe-for-a-minute-that-steveIsFixingThis/+merge/79047
[01:34] <wgrant> mwhudson: Done.
[01:36] <mwhudson> wgrant: :-)
[01:38] <StevenK> mwhudson: I came across that code the week I started on LP ... it was unsettling
[01:49] <huwshimi> anyone else getting an oops when visiting https://code.launchpad.net/~launchpad-pqm/launchpad/devel/+activereviews ?
[01:50] <StevenK> NotOneError: one() used with more than one result available
[01:50] <StevenK> Whee
[01:50] <wgrant> That may be from the staticdiff migration...
[01:50] <wgrant> But I don't see how.
[01:50] <StevenK> huwshimi: https://code.launchpad.net/launchpad-project/+activereviews
[01:50] <wgrant> They've been on the OOPS reports for a couple of weeks.
[01:50] <wgrant> But https://code.launchpad.net/launchpad/+activereviews still works.
[01:51] <StevenK> wgrant: You said you didn't agree with Julian's meta-lp-deps change?
[01:51] <wgrant> StevenK: Correct. But he hasn't withdrawn it yet.
[01:51] <StevenK> I think I agree with you, it's unnecessary
[01:52] <huwshimi> wgrant, StevenK: I got that link from: https://code.launchpad.net/~launchpad-pqm/launchpad/devel and then clicking on "56 branches proposed for merging into this one."
[01:52] <StevenK> huwshimi: Bug
[01:52] <wgrant> There may already be a bug for it.
[01:52] <wgrant> It's been on the OOPS reports for ages.
[01:52]  * StevenK waits for wgrant's celeberal LP link to fire up.
[01:53] <mwhudson> it means there are diffs that are linked to by more than one mp?
[01:53] <StevenK> cerebral, even
[01:53] <wgrant> It's somewhat concerning that PreviewDiff.branch_merge_proposal is meant to be a single object, but there's apparently no UNIQUE constraint on the table.
[01:55] <wgrant> There are 35 offending diffs.
[01:56] <wgrant> 33 have two references, 2 have 3.
[01:56] <StevenK> But we dropped them all
[01:56] <wgrant> Our changes couldn't have caused this.
[01:56] <StevenK> Ah
[01:57] <lifeless> 3 failures. 2 are doctests. -nearly- there.
[01:58] <wgrant> lifeless: oops-tools?
[01:59] <lifeless> yes
[01:59] <lifeless> then its just purging / getting an ack on bundled code
[01:59] <lifeless> and we're done. muahahahahahhahahahahaa
[01:59] <lifeless> hahhaa
[02:00] <lifeless> hahahah
[02:00] <lifeless> hahahahahahaha
[02:01] <lifeless> and the errors finally all fit in my terminal scrollback
[02:05] <wgrant> StevenK: Actually, I think it may have been the staticdiff dropping that did it :(
[02:06] <StevenK> Oh?
[02:07] <wgrant> There's an undeclared uniqueness requirement on BranchMergeProposal.preview_diff
[02:07] <wgrant> Whereas I believe staticdiffs were meant to be shared if they were between the same revisions.
[02:08] <StevenK> This is upsetting.
[02:08] <wgrant> So we will have converted a single shared staticdiff into a single shared previewdiff.
[02:08] <wgrant> Which is illegal, although permitted by the DB.
[02:09] <StevenK> Perhaps we should purge the illegalness and toss up a DB patch to add a UNIQUE constraint
[02:10] <lifeless> wgrant: did you and sinzui talk about private N-pillar bug tasks ?
[02:10] <wgrant> lifeless: A little, but the call was cut short.
[02:11] <wgrant> lifeless: He intends to talk to stakeholders tomorrow about eliminating them.
[02:12] <lifeless> ack
[02:13] <lifeless> 1 test
[02:14] <lifeless> at the loss of a little test coverage. Sob, don't know how ai shall cope
[02:14] <lifeless> (no, I didn't just rm the test ..)
[02:15] <StevenK> Ah, so you commented it out instead
[02:17] <lifeless> I trimmed the sample data rather vigorously
[02:17] <lifeless> the report has a lot less to show now:)
[02:54] <poolie> lifeless: just for my education, could we cluster bugaffectsuser by user?
[02:55] <poolie> to make the paging behaviour better?
[02:55] <poolie> i guess the main objection would be if it commonly is queried by bug?
[02:55] <lifeless> offhand - yes
[02:55] <poolie> but i think not, or only to generate the counts
[02:55] <lifeless> no, that wouldnt be an objection
[02:55] <poolie> oh, why not?
[02:55] <lifeless> generally indices are what matters
[02:56] <lifeless> its only in rare cases (perhaps like this) that the table page order matters
[02:56] <lifeless> currently there is no clustering
[02:57] <lifeless> if you mean 'an alternative cluster would be by bug' - well yes
[02:57] <lifeless> poolie: but clustering is a one-off in psql
[02:58] <poolie> you mean it's not automatically maintained? i read that.
[02:59] <poolie> so to try this i could: ask stub to on staging make the per-person index be clustered, and then reorder the table to cluster, and then see if it's faster?
[03:00] <lifeless> well, on the next downtime
[03:00] <lifeless> and we'd need to test on staging to see how long it takes, but it should be fast.
[03:00] <poolie> right, but we could test it on staging fairly freely?
[03:01] <lifeless> then you'd need to wait for a cold cache, and then you could try
[03:01] <lifeless> yes
[03:01] <poolie> it wouldn't need a particular downtime window to do it there?
[03:01] <lifeless> its ok to tie staging up for a few minutes
[03:03] <poolie> obviously the timing is pretty noisy, but if it's worth doing hopefully the effect would stand out from the noise
[03:05] <lifeless> poolie: whats the current query you run? I want to check its plan
[03:05] <poolie> it's in bug 866100
[03:05] <_mup_> Bug #866100: bug search with affects_me=on times out <affectsmetoo> <bugs> <qa-ok> <timeout> <Launchpad itself:Fix Committed by mbp> < https://launchpad.net/bugs/866100 >
[03:08] <poolie> that's a paste of the actual sql generated by my updated branch
[03:08] <poolie> ok, so it seems affected_user_count is maintained redundantly (as it should be)
[03:09] <poolie> well, not that it probably matters
[03:09] <lifeless> poolie: so you have a problem
[03:10] <lifeless> ignore the times for now
[03:10] <lifeless> http://paste.ubuntu.com/706443/
[03:10] <lifeless> different plans for user 2 and user 16
[03:10] <lifeless> using different indices
[03:11] <lifeless> clustering by person won't help for user 2 - that plan uses the bug,person index
[03:11] <lifeless> well, won't help - it won't align completely.
[03:11] <lifeless> it will mean the backing table data is in one place, but the index pages will still be scattered all over
[03:13] <poolie> just looking at that query i'm a bit surprised
[03:15] <poolie> i was mostly working on the 'affecting bugs in a product' but that query is all bugs for a user
[03:15] <poolie> which is fine
[03:15] <poolie> just thought i pasted for the other one
[03:15] <poolie> so why a different plan for different users?
[03:15] <lifeless> I've clustered staging and qastaging on bugaffectsperson__person__idx for testing purposes
[03:15] <poolie> perhaps because it thinks selecting only bugs affecting user 2 won't reduce it much?
[03:16] <poolie> it seems like a poor choice
[03:16] <lifeless> it may be. This is where checking the stats targets may influence things
[03:16] <lifeless> we can get more info out of new pg's as well - the explain/analyze stuff got sexy in 9.x
[03:17] <poolie> is it on the roadmap for lp to switch to that?
[03:18] <lifeless> yes
[03:18] <poolie> are the stats going to be reasonably up to date on qas?
[03:19] <lifeless> before the cluster yes
[03:19] <lifeless> I need to updat ethem, one sec
[03:20] <poolie> so https://bugs.qastaging.launchpad.net/~gz/+affectingbugs with 42 results, works ok in 2.66s
[03:20] <poolie> ah, you and i work now too, though perhaps it's just warmed up
[03:21] <poolie> btw did you read of http://www.thumbtack.com/engineering/googlebot-makes-post-requests-via-ajax/
[03:21] <lifeless> win!
[03:24] <lifeless> poolie: yes, its warm
[03:24] <poolie> right, and mpt for instance fails once then works
[03:24] <lifeless> poolie: it seems faster when hot, though there are confounding issues (clustering also compresses pages, which reduces bloat, which itself helps with performance - less parsing of data structures)
[03:25] <poolie> it seems at the moment to consistently work first go on users with small lists
[03:25] <lifeless> poolie: I would wait and see how your thing goes on prod
[03:25] <poolie> https://bugs.qastaging.launchpad.net/~silbs/+affectingbugs  :)
[03:25] <poolie> https://bugs.qastaging.launchpad.net/~sabdfl/+affectingbugs - only 40!
[03:25] <poolie> ok
[03:26] <lifeless> note that fully *half* of the poor performance on me cold is in bugtask:
[03:26] <lifeless>                      ->  Index Scan Backward using bugtask_importance_idx on bugtask  (cost=0.00..153181.30 rows=341880 width=161) (actual time=189.469..46810.549 rows=5993 loops=1)
[03:26] <lifeless>                            Filter: ((status = 10) OR (status = ANY ('{15,13,14}'::integer[])) OR (status = 20) OR (status = 21) OR (status = 22) OR (status = 25))
[03:26] <lifeless>  46 seconds walking bugtask backwards by importance
[03:27] <poolie> well, that would be very big, right?
[03:27] <lifeless> 6000 rows
[03:27] <poolie> that's going to be pulling out ~500,000 rows?
[03:27] <poolie> oh, why so few?
[03:27] <lifeless> LIMIT 8 OFFSET
[03:27] <lifeless> 0
[03:28] <lifeless> apparently I have 8 open affecting me bugs in the last 5993 filed bugs
[03:28] <poolie> huh, i wonder how that got in there
[03:28] <lifeless> if we raise that 8 (launchpad.dev) to 75 (launchpad)
[03:29] <lifeless> we may see different plans etc
[03:29] <lifeless> yeah, limit 75 switches the plan to the same as the original one for user 16
[03:29] <lifeless> pg is pretty smart ;)
[03:30] <poolie> i'm a bit confused why my code running on dev would have put a 'limit 8' into the query
[03:30] <poolie> how would it know there are 8
[03:31] <lifeless> the batch code does a count(*)
[03:31] <lifeless> and if < limits to match
[03:31] <lifeless> abel's work helps stop this crazy behaviour, but we have to roll it out over each collection individually
[03:32] <poolie> wow, i see
[03:33] <lifeless> anyhow, just a thing to watch for when copying test plans around :)
[03:33] <poolie> so it really seems to me it ought to be using bugaffectsperson__person__idx
[03:33] <lifeless> it does for user=2 with limit 75 offset 0
[03:33] <poolie> even for you, that should cut down the bugtask table quite a lot
[03:33] <lifeless> but not for limit 8 offset 0
[03:34] <lifeless> its going to be assessing linear IO costs in there vs random
[03:34] <lifeless> I think we need to do some benching and tweaking of these params
[03:36] <poolie> ok, so, like you suggest i'll just wait for it on prod
[03:37] <poolie> and - should we do anything further on clustering, or just if it's passing on prod leave it alone?
[03:38] <lifeless> if it works don't touch it
[03:38] <lifeless> :)
[03:38] <poolie> :) yeah
[03:39] <poolie> i have more context to understand abel's mail now, thanks
[03:39] <poolie> so if this does time out, one thing i could try is to make that update in the bug list pages
[03:44] <poolie> ok i might take a break, thanks
[03:45] <wgrant> [A3
[03:46] <poolie> +1
[06:01] <lifeless> wgrant: you know stderr is meant for non-exceptional stuff :)
[06:01] <lifeless> wgrant: per POSIX :)
[06:02] <wgrant> lifeless: Meh.
[06:03] <StevenK> It's Launchpad. Everything is non-exceptional because it's all NORMAL. :-(
[06:03] <lifeless> wgrant: explicitly even.
[06:04] <lifeless> StevenK: actually this is referring to apt-ftparchive
[06:04] <StevenK> Sigh.
[06:04] <StevenK> Bring on NMAF
[06:04] <lifeless> StevenK: which does progress chatter on stderr (which is ok, but it should have a -q to get it to bare bones)
[06:04] <lifeless> wgrant: (and btw, did you file a bug upstream ?)
[06:05] <wgrant> lifeless: I didn't. It may be silencable.
[06:05] <wgrant> (this is what was already done for the publisher, it just needed to be done for generate-contents-files too)
[06:05] <lifeless>   -q    Quiet
[06:05] <StevenK> -qq --shut-the-hell-up
[06:05] <lifeless> from its help :)
[06:20] <nigelb> Who's orange team?
[06:20] <nigelb> The bug list mocks up look... WOW
[06:25] <StevenK> nigelb: Deryck and the rest of the mafia
[06:25] <nigelb> StevenK: heh
[06:25] <nigelb> StevenK: I guess Teal is the assasin squad, seeing the amount of code you kill :P
[06:26] <StevenK> Hahaha
[06:26] <StevenK> I shall have to propose that to Curtis
[06:26] <nigelb> heh
[06:27] <nigelb> StevenK: "The Teal Assasins"
[06:28] <StevenK> Yes, I was thinking that
[06:28]  * G joins the group "Save the Ducks" and starts protesting :)
[06:28] <StevenK> nigelb: "Assassinating bad code, one line at a time."
[06:29] <nigelb> StevenK: bwahaha, I <3 it.
[06:29] <nigelb> wgrant: ^^
[06:29] <wgrant> Heh
[06:29] <StevenK> G: You like duck typing?
[06:30] <G> StevenK: no, but I happen to like all ducks, Teals included, not keen on the idea of assassinating them :)
[06:30] <StevenK> wgrant: globalErrorUtility is defined in errorlog, and not exported :-(
[06:31] <G> StevenK: in fact, the server that my irssi connection is located on, is named after the brown teal (Pateke)
[06:31] <wgrant> StevenK: You're not meant to use getUtility(IErrorReportingUtility)?
[06:31] <StevenK> wgrant: I have no idea :-(
[06:32] <StevenK> G: I name my machines after things that can befall them that make them stop working
[06:32] <StevenK> G: My mail server is 'mangled', my desktop is 'liquified'
[06:32] <nigelb> You work machine is 'deleted'? :P
[06:32] <G> heh, subconciously all my VPS' have been named after ducks :)
[06:33] <nigelb> *your
[06:33] <StevenK> nigelb: No, I do my work on liquified
[06:33] <nigelb> StevenK: ha :)
[06:34] <StevenK> liquified might prove to be true, sadly.
[06:34] <StevenK> I think the lone fan needs a clean
[06:34] <G> StevenK: you are going to put in water-cooling?
[06:34] <StevenK> No, I'm just commenting that it is running a little too hot at the moment.
[06:39] <wallyworld_> anyone tried to create_initialised_view(some_person, name='some_view') and got a LocationError: 'link-display-name-id'?
[07:02] <wgrant> Bah.
[07:02] <wgrant> Unity stole my text editor
[07:02] <wgrant> It is still running, but nowhere to be found.
[07:48] <jtv> wgrant: want to take this question?  https://answers.launchpad.net/launchpad/+question/173985
[07:52] <wgrant> jtv: Julian should be here in 10, right?
[07:58] <wallyworld_> wgrant: what's the easiest way to get a mp on qas that i can play around with?
[07:59] <wgrant> wallyworld_: Create one fresh.
[07:59] <wallyworld_> ok. i think last time i tried it didn't work but i'll try again
[08:00] <wgrant> It should work OK, but you might need to get the runner run manually if you want a diff.
[08:00] <wallyworld_> ah, i think i remember - i never get a diff
[08:01] <wallyworld_> what's the runner script called?
[08:01] <wgrant> Should be merge-proposal-jobs.py
[08:01] <wallyworld_> thanks
[08:02] <jtv> wgrant: yes
[08:03]  * StevenK grumbles at the existance of cronscripts/run_jobs.py and cronscripts/process-job-source.py
[08:07] <adeuring> good morning
[08:07] <lifeless> bigjools: lp:python-oops-amqp :)
[08:07] <bigjools> good morning
[08:07] <jelmer> g'morning
[08:08] <bigjools> :)
[08:08] <bigjools> lifeless: someone's been busy
[08:08] <lifeless> bigjools: things are coming together
[08:11] <lifeless> bigjools: I'm going to do a spool-from-disk module for oops-datedir-repo, and then we can use that as the backing store when rabbit is down
[08:11] <lifeless> bigjools: at which point, it will be time to land it all in LP trunk :)
[08:12] <bigjools> lifeless: backing store?
[08:12] <lifeless> fallback
[08:12] <lifeless> if rabbit is awol and an oops is raised, what should happen...
[08:12] <bigjools> depends what raises the oops
[08:13] <lifeless> (answer: we write it to disk, and we have a separate mini task that picks it up from disk and sends it to amqp when amqp comes back)
[08:13] <bigjools> oh wait - you're talking about pushing OOPSes down to rabbit?!
[08:13] <jtv> danilos: I think I saw movement from your direction.  Want to review a very small translations change?  https://code.launchpad.net/~jtv/launchpad/bug-872646/+merge/79053
[08:13] <lifeless> bigjools: its configurable (just depends on what publishers we setup), but this seems like a sane setup for all our services/scripts to me
[08:13] <lifeless> bigjools: yes !
[08:14] <bigjools> lifeless: ah! I thought you mean picking up rabbit problems and filing an oops
[08:14] <lifeless> bigjools: no, though that is needed too
[08:14] <lifeless> bigjools: that wouldn't get a generic name though :)
[08:25] <wallyworld_> wgrant: sadly, running the job got rid of the "Updating Diff" message but no diff has been created
[08:26] <wgrant> wallyworld_: Are the source and target branches in place?
[08:27] <wallyworld_> not sure. the target branch is lp trunk, the source is one i did a few weeks ago
[08:27] <wgrant> LP trunk probably isn't there.
[08:27] <rvba> wallyworld_: if it's similar to what happens locally, you need to run the script *twice* to get a diff.
[08:29] <wallyworld_> rvba: hi! twice? could be, although i suspect it's more due to qas not having the source and/or target branches available
[08:35] <danilos> jtv, r=me, as for the expiration period, 6 months is fine (we can certainly go lower, but doesn't really matter imho)
[08:36] <jtv> danilos: that was my thinking too.  Thanks.
[08:36] <jtv> Thought I might as well grab you as long as I still can.  :)
[08:38] <danilos> jtv, heh, yeah, good point, I am also making a point of fixing some of the important translations issues :)
[08:40] <danilos> bigjools, hi, do you happen to know if there are actual reasons for +configure-translations page to have builder-related stuff? (see https://translations.launchpad.net/ubuntu/+configure-translations)
[08:41] <jtv> danilos: saw that, including the policy change on approval permissions.  Good news.
[08:41] <jtv> danilos: bigjools & I are otop atm  :-P
[08:41] <danilos> jtv, ask him if configuring arm builders is part of translations settings then :P
[08:41] <bigjools> danilos: there is no reason at all for those 2 options
[08:41] <danilos> bigjools, cool, thanks, I'll remove them from that page
[08:41] <bigjools> danilos: ubuntu uses non-virt, everyone else virtual
[09:54] <jtv> Pending team membership requests don't ever expire, do they?
[09:54] <wgrant> No.
[09:54] <jtv> Shouldn't they?
[09:55] <wgrant> Why?
[09:55] <jtv> I'd like to answer that in 2 ways.
[09:55] <StevenK> "Here, let me your question with another question." ?
[09:55] <jtv> 1. Why should they?  → Because if a request hasn't been reviewed after, say, a year, that amounts to “no you can't join.”
[09:56] <jtv> 2. Why do you ask?  → Because we've got teams with eternally pending membership requests, caused by problem with person merger, that currently can't be got rid of.
[09:56] <jtv> That wasn't so bad, was it?
[09:57] <jtv> I know, I know, we should fix person merger.  But that's marked as Low.  We'll never have time for it unless it becomes super-urgent.
[09:58] <jtv> It also won't help people who are affected by this problem already.
[10:06] <poolie> "here, let me answer your question with unicode glyphs"
[10:07] <jtv> poolie: oh ☣ off
[10:11] <nigelb> ....
[10:11] <nigelb> Never a dull moment in this channel
[10:13] <nigelb> jtv: As a team admin, I'd want to set a limit of number of days. If a person isn't approved within that time, they're not getting approved.
[10:13] <nigelb> 1 year sounds arbitary
[10:13] <nigelb> Oh, just saw your m/l post. /me will reply to it.
[10:18] <jtv> nigelb: thanks for thinking about it though.
[10:19] <nigelb> :)
[10:47] <adeuring> danilos: fancy a review of a trivial MP: https://code.launchpad.net/~adeuring/launchpad/feature-flag-for-custom-bug-listings/+merge/79103 ?
[10:48] <danilos> adeuring, r=me ;)
[10:48] <adeuring> danilos: thanks :)
[10:50] <G> jtv: btw, I was looking at the person merger, and I might take a stab at it?
[10:51] <StevenK> We have a person merger :-P
[10:51] <jtv> G: you mean fixing the bug itself?  That'd be great, but it looks like it could get complicated.
[10:52] <bigjools> awesome, generate-contents-files is producing 646 oopses a day
[10:52] <jtv> For example: person A is in team X, and person B is in team Y, and team Y is in team X, and you mere A & B.  What happens to each of the TeamParticipations?
[10:52] <jtv> What happens when A and B are in the same team, but with different statuses?
[10:52] <jtv> Etc.
[10:53] <G> and yeah, I agree w/ nigelb that groups should set the expiration period per group, but really, shouldn't the default be more like 4-6 months, anything longer kind of implies an inactive group (or I guess indecision)
[10:54] <G> jtv: a valid point, but is there actually any harm for the merged user to be a member in both groups?
[10:55] <nigelb> jtv: Perefect interview question ;)
[10:55] <nigelb> *perfect (oh the irony)
[10:55] <jtv> G: Teams.  I would expect it to be simply impossible; it would probably violate a database constraint.
[10:55] <jtv> nigelb: does sound like it, doesn't it?
[10:56] <G> err yeah teams, sorry
[10:56] <nigelb> It sounds like a fun problem to solve, because its non-trivial.
[10:56] <jtv> Meanwhile, person A departs Manchester in a train heading towards London, where person B…
[10:56] <nigelb> lol
[10:56] <jtv> There can be especially nasty bugs if you delete one record; update another; move on; and later hit a database error when the two changes get flushed to the database in the wrong order.
[10:57] <nigelb> ah. replication.
[10:57] <G> as far as A & B in the same group w/ different status' shouldn't the higher status be the one kept? After all they'd have that access anyway
[10:57] <G> ooooh yeah, replication
[10:58] <jtv> nigelb: careful—replication is a different matter altogether.  I'm talking about a different layer of caching, within the ORM itself.
[10:58] <jtv> The replication machinery won't make that mistka.e
[10:58] <jtv> *mistake
[10:58] <jtv> (speaking of irony)
[10:59] <bigjools> bug 860245
[10:59] <_mup_> Bug #860245: generate-contents-files.py should be a LaunchpadCronScript <qa-ok> <Launchpad itself:Fix Released by wgrant> < https://launchpad.net/bugs/860245 >
[10:59] <bigjools> that ^^ is causing 1000+ oops a day
[10:59] <nigelb> jtv: Oh right. I didn't realize ther was an ORM layer of caching
[11:00] <jtv> bigjools: the bug is, or the fix is?
[11:00] <bigjools> the fix
[11:00] <jtv> Ouch.
[11:00] <bigjools> the script logs at WARNING
[11:00] <bigjools> sigh
[11:00] <jtv> Ah that.
[11:00] <wgrant> bigjools, jtv: Fix landed a couple of hours ago.
[11:00] <jtv> You say critical, I say cheap karma.
[11:01] <bigjools> wgrant: ah, good.  What's the bug?  I just filed a dupe
[11:01] <nigelb> ~>
[11:01] <nigelb> ~>
[11:01] <wgrant> It was a 5-character fix so I didn't file one :P
[11:01] <bigjools> :/
[11:07] <G> jtv: hmmm I certainly get what you are saying, might try and think of a way to counter it
[11:08] <jtv> G: looking at the bug again, I'm not even sure if there are TeamParticipations for these particular membership records.  It seems such a simple problem, but…
[11:08] <G> jtv: yeah, I haven't looked at the code, my checked out branch is a few weeks old, so I'm just updating it now
[11:09] <nigelb> jtv: It may depend in which directions the accounts are merged wouldn't it?
[11:09] <G> now if only postgres had a databasediff tool :P
[11:09] <nigelb> (I'm guessing this is merging imported automatically created accounts with real ones)
[11:09] <jtv> nigelb: probably, too.  Lots of choices to be made.  Sometimes you just have to start coding to find out what the choices are, and then you have to be willing to throw away your code and start over if need be.
[11:09] <nigelb> jtv: Or start writing tests :)
[11:09] <jtv> G: it's not perfect but you can create two dumps and diff them.
[11:10] <G> jtv: yeah, thats what I was thinking
[11:10] <nigelb> G: use meld to do the diffing
[11:10] <jtv> nigelb: point taken—but what I said about choices is also about behaviours to test for.  :)
[11:10] <nigelb> ah. RIght.
[11:10] <G> nigelb: ewwwwww
[11:10] <G> (and yes, I've used that before)
[11:10] <nigelb> G: It is *good* for diffing launchpad db dumps
[11:11] <nigelb> I've used it.
[11:11] <jtv> nigelb: did you follow up to my email?  If so, I'm not seeing your reply.
[11:11] <G> nigelb: I'll just stick to diff -y :)
[11:11] <nigelb> jtv: not yet. composing and multitasking
[11:11] <jtv> Ah OK, no worries then.
[11:11] <G> but yeah, I'm going to have a poke at the underlying bug
[11:12] <jtv> G: cool!  There's always the chance that it's not as bad as it seems.
[11:13] <G> jtv: one can only hope :)
[11:13] <jtv> Where there's hope, there's code.
[11:13] <G> I'm in a particularly bughunting mood this week
[11:16] <G> jtv: in re: to your second e-mail, what about just a button, "Expire requests over [   ]  [days|weeks|months|years] old
[11:17] <G> (and maybe in addition to that, a disabled by default option so it doesn't disrupt anyone)
[11:17] <jtv> G: that's one of the worst words in software development: "just."  As in, “why don't you just implement […]” :)
[11:17] <jtv> See, you're already piling on features.  Great stuff, but every idea you add reduces the chances of anyone actually getting around to completing ig.
[11:18] <jtv> *it
[11:19] <nigelb> Unless you do it yourself.
[11:19] <jtv> I don't know why I'm trying to rain on everyone's parade today.  Sorry about that!  I just mean: sometimes the most effective thing to put your creativity towards is how to minimize the change so as to optimize its chances of it getting done.
[11:20] <jtv> I've often managed to sabotage myself by making things too pretty.
[11:20] <G> jtv: sorry yeah, I was thinking a way of doing it simply, and then a future way that could implement your main suggestion, with code reuse and not stepping on anyone's toes
[11:20] <jtv> This is going to be a fun thread on the list.  :-)
[11:21] <nigelb> heh
[11:21] <nigelb> BUt its launchpad, I've seen sensible heads prevail almost always.
[11:22] <jtv> It's not a bad project, really!  But I wasn't being ironic.  I really enjoy seeing people think about this problem already.
[11:23] <nigelb> Should. Resist. Temptation. To. Volunteer.
[13:01] <deryck> Morning, all.
[13:15] <bigjools> benji: I've got the corrupted launchpadlib password thing again (hence get a traceback), can you remind me where to reset it please?
[13:17] <benji> bigjools: I don't remember last time very clearly.  It's either in a keyring (Gnome or KDE) or a file in ~/.launchpadlib
[13:17] <benji> if you show me the traceback I can probably narrow it down
[13:18] <bigjools> benji: thanks: http://pastebin.ubuntu.com/706700/
[13:19] <bigjools> benji: funny thing is that it was working, then suddenly went bad :(
[13:21] <benji> bigjools: that's really odd. That should be one of the ~/.launchpadlib directories, probably api.launchpad.net if you're using prod; if you would, tar it up and send it to me (there might be private things in there, so I wouldn't just put it on a bug report) then you can just rm -rf that directory and you'll have to reauthenticate but you should be back in business
[13:21] <bigjools> benji: I removed ~/.launchpadlib already... :)
[13:22] <benji> pfft
[13:22] <benji> and you're still getting the error?
[13:22] <bigjools> benji: AHA, I found it in kwallet
[13:22] <bigjools> it threw me because it was in the gnome-keyring beforehand but I think oneiric has fixed that bug
[13:22]  * benji tries to remember why in the world we're storing ini-formatted data in a keyring
[13:23] <bigjools> and how does it get corrupted
[13:23] <benji> we really need a bug for this (if there isn't one already)
[13:23] <bigjools> I'll file it
[13:23] <benji> is there any chance you ran two scripts at the same time?
[13:24] <bigjools> ummm don't *think* so
[13:24] <benji> We handle concurrency so poorly it was the first thing I though of.
[13:25] <bigjools> bug 872853
[13:25] <_mup_> Bug #872853: Crash due to corrupted password in keyring <launchpadlib :Triaged> < https://launchpad.net/bugs/872853 >
[13:27] <bigjools> thanks for the help benji
[13:27] <benji> bigjools: my pleasure; thanks for the bug
[13:36] <bigjools> benji: so I am getting consistent corruption on consecutive uses :(
[13:36] <bigjools> however the data looks ok in the wallet
[13:36] <benji> "looks ok in the wallet"?
[13:37] <benji> well, at least it's reproducable, that's a start
[13:37] <bigjools> the contents of the "password" look ok
[13:46] <bigjools> deryck: is this bug of interest to you guys, ref. the new bug page? https://bugs.launchpad.net/launchpad/+bug/872848
[13:46] <_mup_> Bug #872848: List of remote bug watches is hard to find <ui> <Launchpad itself:New> < https://launchpad.net/bugs/872848 >
[13:47]  * deryck looks
[13:47] <deryck> bigjools, no, not for this project.
[13:47] <bigjools> ok thanks
[13:49] <deryck> Thank you. :)
[14:02] <deryck> adeuring, http://people.canonical.com/~deryck/new-bugs-form.png
[14:02] <adeuring> deryck: thanks
[14:02] <deryck> adeuring, I'm making some notes for you too about this.
[14:03] <dobey> hey guys
[14:03] <dobey> anyone have any idea why a private bug would be viewable by someone, but the bug display would not show the task table area for the task, preventing them from changing the status/importance/etc?
[14:05] <Daviey> bigjools: do you have a moment?
[14:06] <bigjools> Daviey: OTP
[14:06] <Daviey> bigjools: ok, thanks
[14:06] <bigjools> will ping later
[14:06] <dobey> http://ubuntuone.com/4Sl9zWfR83MC0x1s0b7hNm <- like this
[14:07] <Daviey> bigjools: raising a bug, will PM it to you.
[14:09] <Daviey> bigjools: when you have a moment, https://bugs.launchpad.net/launchpad/+bug/872870
[14:40] <jcsackett> dobey: it's a currently in progress bug. (bug 865467). there's a workaround for now in the description.
[14:40] <_mup_> Bug #865467: bug task missing from affects table because bug supervisor is not subscribed <disclosure> <regression> <Launchpad itself:In Progress by jcsackett> < https://launchpad.net/bugs/865467 >
[14:41] <dobey> jcsackett: ah, thanks.
[14:41] <jcsackett> sinzui: got a few moments to mumble?
[15:19] <bigjools> Daviey: hey, I saw the bug
[15:19] <sinzui> jcsackett, sorry, I was in conversation
[15:19] <sinzui> jcsackett, I can mumble
[15:20] <bigjools> thanks for triaging his bug sinzui
[15:20] <jcsackett> sinzui: no worries.
[15:21] <nigelb> dobey: they don't havve rights for the project perhaps?
[15:21] <nigelb> dobey: Oh. that looks weird.
[15:22] <Daviey> bigjools: yeah, wasn't as bad as i thought it was.  I thought it was odd, because it was a bug i thought i raised :)
[15:22] <bigjools> indeed
[15:22] <bigjools> Daviey: I removed the branch link so you can see it now
[15:23] <Daviey> bigjools: thanks :)
[16:39] <nigelb> heh
[16:39] <nigelb> github just got a slightly new design
[16:39] <nigelb> the tabs remind me of old launchpad
[17:01] <bigjools> GitHub - Yesterdays Technology, Tomorrow
[18:53] <lifeless> moin
[20:08] <mwhudson> grr why didn't permit_timeout_from_features-on-participation-bug-861510 land
[20:10] <mwhudson> NonZeroExitCode: Test process died with exit code 2, but no tests failed.
[20:10] <mwhudson> what does this mean?
[20:11] <mwhudson> ah Exception: RabbitMQ server is not running.
[20:26] <lifeless> -> allergy shot, bbiaf
[22:27] <StevenK> sinzui: https://code.launchpad.net/~stevenk/launchpad/soft-oops-on-private-team-disclosure/+merge/79066
[22:29] <sinzui> StevenK, This is how I read my oopses: less `ls /var/tmp//lperr/2011-10-04/* -t1 | sed '1!d'`
[22:48] <sinzui> wallyworld, bug 1342
[22:48] <_mup_> Bug #1342: Can't delete spurious "Affects" lines (bugtasks) from bug reports <canonical-losa-lp> <lp-bugs> <Launchpad itself:Triaged> < https://launchpad.net/bugs/1342 >
[22:49] <sinzui> I am sure that 4 digit number make you happy
[23:36] <StevenK> wgrant: What did you suggest for the feature flag?
[23:37] <wgrant> StevenK: disclosure.log_private_team_leaks, perhaps.
[23:42] <poolie> huwshimi: http://www.codinghorror.com/blog/2008/02/the-ultimate-unit-test-failure.html
[23:42] <poolie> > "We are not very important because we don't cut code." (A boo and hiss from the audience.)
[23:44] <huwshimi> poolie: Interesting. Makes me happy that our feature development has moved to a design first model :)
[23:45] <poolie> did you read that thing about amazon soa?
[23:45] <huwshimi> poolie: I don't think so
[23:46] <huwshimi> poolie: Link?
[23:46] <poolie> join canonical-tech :)
[23:47] <poolie> http://buu700.com/steverant
[23:47] <poolie> > Jeff Bezos is an infamous micro-manager. He micro-manages every single pixel of Amazon's retail site. He hired Larry Tesler, Apple's Chief Scientist and probably the very most famous and respected human-computer interaction expert in the entire world, and then ignored every goddamn thing Larry said for three years until Larry finally -- wisely -- left the company. Larry would do these big usability studies and demonstrate beyond any shred
[23:47] <poolie>  of doubt that nobody can understand that frigging website, but Bezos just couldn't let go of those pixels, all those millions of semantics-packed pixels on the landing page. They were like millions of his own precious children. So they're all still there, and Larry is not.
[23:47] <poolie> :)
[23:49] <StevenK> But he's wrong. amazon.com recently changed
[23:49] <StevenK> (And IMO, it looks better)
[23:49] <huwshimi> poolie: Oh I am actually subscribed. I didn't read that one though
[23:49] <StevenK> Because it isn't a post, but a novel?
[23:50] <StevenK> wgrant: Did you have any other issues with my branch aside from 1) The flag name, and 2) the lack of tests?
[23:51] <poolie> StevenK: well, he's out of date
[23:51] <poolie> their new stuff, like some of the kindle pages, certainly looks remarkably better
[23:51]  * poolie checks
[23:51] <StevenK> The front page has changed is what I was refering to
[23:51] <wgrant> StevenK: Not really. As long as it gives a good traceback and contains the pageid and URL and user and stuff.
[23:51] <StevenK> Certainly the top has
[23:52] <StevenK> wgrant: Right, excellent. I've fixed the flag name, now to write a test
[23:53] <poolie> even ebay is not quite such a ridiculous mess as it used to be
[23:53] <poolie> but still awfully noisy