[00:05] <LPCIBot> Project devel build (473): STILL FAILING in 5 hr 24 min: https://hudson.wedontsleep.org/job/devel/473/
[00:05] <LPCIBot> * Launchpad Patch Queue Manager: [testfix][r=jml, leonardr][bug=251685,
[00:05] <LPCIBot> 586695] An implementation of the Poppy FTP server using Twisted.
[00:05] <LPCIBot> * Launchpad Patch Queue Manager: [r=henninge][no-qa] Replace DistroSeries/SourcePackageName with
[00:05] <LPCIBot> SourcePackage in translationsharinginfo.
[00:05] <LPCIBot> * Launchpad Patch Queue Manager: [r=leonardr][ui=none][bug=721784][no-qa] [no-qa]
[00:05] <LPCIBot> [r=leonardr][bug=721784] Add ec2 list command to list running ec2 instances
[00:05] <LPCIBot> and test status
[00:10] <wgrant> Any other reviewers around?
[00:10] <wgrant> sinzui: ^^?
[00:11] <lifeless> sinzui: thanks, was otp
[00:12] <lifeless> wgrant: is that the right way around?
[00:12] <lifeless> shouldn't it be 'is not None' ?
[00:13] <lifeless> sinzui: trying it now
[00:13] <wgrant> lifeless: Yes.
[00:13] <wgrant> So, then, why does it work.
[00:14] <lifeless> wgrant: because its not none so it leaves it installed
[00:15] <lifeless> wgrant: you're testing the external contract 'do not warn on this case' - but thats not comprehensive ;)
[00:15] <lifeless> sinzui: ><
[00:15] <lifeless>   File "/home/robertc/launchpad/lp-branches/working/lib/canonical/launchpad/browser/launchpad.py", line 283, in makeBreadcrumbForRequestedPage
[00:15] <lifeless>     if view.__name__ != default_view_name:
[00:15] <lifeless> AttributeError: 'Branch' object has no attribute '__name__'
[00:16] <lifeless>             request = make_fake_request(
[00:16] <lifeless>                 'http://code.launchpad.dev/~%s/%s/%s/+index' % (branch.owner.name, product.name, branch.name),
[00:16] <lifeless>                     [branch.owner, product, branch])
[00:16] <lifeless>             view = create_initialized_view(branch, '+index', request=request, principal=branch.owner)
[00:16] <lifeless>             view.render()
[00:17] <wgrant> lifeless: Heh, what this shows is that the synchronizer can just be registered at startup.
[00:18] <wgrant> It doesn't matter if it's removed any more, because with Storm there is only ever one.
[00:18] <wgrant> Will investigate later.
[00:19] <lifeless> you're inverting the if for now ?
[00:19] <wgrant> Yes.
[00:19] <wgrant> Just testing that it behaves properly in the app.
[00:20] <wgrant> It does.
[00:21] <wgrant> lifeless: DOne.
[00:23] <lifeless> approved
[00:24] <wgrant> Thanks.
[00:44] <lifeless> sinzui: something really odd is going on here
[00:44] <lifeless> in pdb I get this:
[00:45] <lifeless> (Pdb) self
[00:45] <lifeless> <zope.browserpage.metaconfigure.SimpleViewClass from /home/robertc/launchpad/lp-branches/working/lib/lp/code/browser/../../app/templates/launchpad-hierarchy.pt object at 0x7879450>
[00:45] <lifeless> (Pdb) view
[00:45] <lifeless> <zope.browserpage.metaconfigure.SimpleViewClass from /home/robertc/launchpad/lp-branches/working/lib/lp/code/browser/../templates/branch-index.pt object at 0x2f409d0>
[00:45] <lifeless> but in the test, the second is the branch /object/
[00:45] <lifeless> not the view
[00:47] <lifeless> ah
[00:47] <lifeless> sinzui:
[00:47] <lifeless> (Pdb) self.request.traversed_objects[4]
[00:47] <lifeless> <zope.browserpage.metaconfigure.SimpleViewClass from /home/robertc/launchpad/lp-branches/working/lib/lp/code/browser/../templates/branch-index.pt object at 0x402a9d0>
[00:48] <lifeless> sinzui: I think create_initialized_view should poke that in
[01:00] <lifeless> fingers crossed!
[01:06] <lifeless> sinzui: so I made it work, but its showing a query count of 19, which is implausibly small
[01:07] <lifeless> sinzui: http://pastebin.com/nB3ZSn2t for your reference, I'm going to use getUserBrowser now
[01:11] <lifeless> sinzui: getUserBrowser finds - Difference: queries do not match: 50 is >= 53
[01:36] <lifeless> wgrant: have you landed that webapp session cache preloading yet ?
[01:36] <wgrant> lifeless: It's in ec2.
[01:36] <wgrant> Windmill killed it last night.
[01:37] <lifeless> its new matcher time, baby
[01:37] <wgrant> Oh?
[01:38] <lifeless> rewriting assert_milestone_page_query_count as a matcher for reuse
[01:42] <wgrant> Excellent.
[01:45] <wgrant> 0 tests run in 3:51:18.052785, 0 failures, 0 errors
[01:46] <wgrant> Ah, windmill.
[01:46] <lifeless> .,
[01:46] <wgrant> Die Windmill die.
[01:46] <wgrant> OK, I am going to lunch and then beat Windmill to death with a few ec2 instances.
[02:04] <lifeless> wgrant: are you cleaning up test_milestone in that change?
[02:06] <lifeless> lp:~lifeless/launchpad/bug-710685 if anyone is interested
[02:25] <wgrant> lifeless: What needs cleaning up?
[02:25] <lifeless> wgrant: accomdations for the session issue
[02:25] <lifeless> I have a test in there that does a request to seed it
[02:25] <wgrant> Ah.
[02:25] <lifeless> may be others scattered around the code base
[02:26] <wgrant> I have two unexplained failures that *appear* to be fallout, but look fairly irrelevant, and only show up on ec2. I am sorting them out first.
[02:26] <wgrant> +opstats OOPSes unexpectedly :/
[02:26] <wgrant> But this is in PageTestLayer...
[02:26] <lifeless> http://pastebin.com/f6xQ1J8L
[02:26] <lifeless> ^- thats what writing scaling tests is down to now ;)
[02:26] <lifeless> +opstats - whats the oops ?
[02:26] <wgrant> Not sure yet.
[02:27] <wgrant> Cannot reproduce locally.
[02:27] <lifeless> ><
[02:27] <lifeless> it runs w/o a db
[02:27] <wgrant> But it's slightly crazy, since PageTestLayer runs an appserver in a subprocess...
[02:27] <wgrant> Ah, hm.
[02:27] <james_w`> do you not get the oops in the subunit stream now?
[02:27] <wgrant> True.
[02:27] <wgrant> james_w`: Not this one :/
[02:27] <james_w`> damn
[02:27] <wgrant> It's a doctest, which may be relevant.
[02:27] <lifeless> james_w`: only if the generator is in the same process
[02:28] <lifeless> wgrant: this is xx-oops.txt ?
[02:28] <wgrant> lifeless: xx-opstats.txt
[02:28] <lifeless> wgrant: cause I saw an ec2 failure with it, but I made sure it passed locally before submitting
[02:28] <lifeless> bah, thats the one I meant
[02:28] <wgrant> Also librarian.txt failed.
[02:28] <lifeless> wgrant: thats in-process FWIW, but its a doctest
[02:28] <wgrant> But not on a second run.
[02:29] <wgrant> I guess I will run just those tests in devel on ec2.
[02:30] <wgrant> Interestingly they passed yesterday.
[02:30] <wgrant> All I've changed since it loading bzr plugins.
[02:30] <wgrant> So perhaps they are yet more wonderful spurious failures for me to crush this afternoon.
[02:32]  * lifeless facepalms
[02:32] <lifeless>     @cachedproperty
[02:32] <lifeless>     def linked_bugs(self):
[02:32] <lifeless>         """Return a list of DecoratedBugs linked to the branch."""
[02:32] <lifeless>         bugs = self.context.linked_bugs
[02:32] <lifeless>         if self.context.is_series_branch:
[02:32] <lifeless>             bugs = [
[02:32] <lifeless>                 bug for bug in bugs
[02:32] <lifeless>                 if bug.bugtask.status in UNRESOLVED_BUGTASK_STATUSES]
[02:32] <lifeless>         return bugs
[02:32] <wgrant> Hahahah
[02:32] <wgrant> That's been done before.
[02:32] <lifeless> there are two bugs here.
[02:33] <wgrant> Not cached if it's not a series branch, and lots of queries if it is.
[02:33] <lifeless> yes!
[02:33] <lifeless> well, not -quite-
[02:33] <lifeless> because its a DecoratedBranch
[02:33] <lifeless> which needs to be unwound and pushed down
[02:34] <wgrant> utilities/ec2 list is great.
[02:37] <lifeless> yep, both cases scale poorly
[02:37] <wgrant> Heh
[02:38] <wgrant> lifeless: Nice Matcher.
[02:39] <lifeless> wgrant: thanks
[02:42] <lifeless> UI check
[02:42] <lifeless> currently the menu shows
[02:42] <lifeless> 'Link to another bug report'
[02:43] <lifeless> or 'Link to a bug report'
[02:43] <lifeless> depending on - you guessed it - a query
[02:43] <wgrant> Nice.
[02:43] <wgrant> Drop it.
[02:43] <lifeless> which doesn't matches the is_series_branch change
[02:43] <lifeless> *check*
[02:43] <lifeless> so, its a) broken.
[02:43] <wgrant> b) pointless
[02:43] <lifeless> yeah.
[02:43] <lifeless> 'Link a bug report' is how I'd like to phrase it
[02:43] <wgrant> Yeah.
[02:43] <james_w`> The tags applied to this bug. Web service: The list of tags is whitespace delimited. Launchpadlib: The list of tags is represented as a sequence of strings.
[02:44] <wgrant> james_w`: huwshimi has a branch for that.
[02:44] <james_w`> great
[02:44] <wgrant> Also, you seem to have a parasite.
[02:45]  * lifeless sobs
[02:45] <lifeless> isBugBadgeVisible
[02:46] <wgrant> Hah.
[02:46] <wgrant> Nice.
[02:46] <lifeless> not when you conside rthat context is a decorated branch
[02:46] <lifeless> which means that this requires /all/ the bugs to evaluate
[02:46] <lifeless> regardless of what it claims
[02:49] <lifeless> hmm
[02:49] <lifeless> the linked_bugs api call probably takes forever on these branches too
[02:50] <lifeless> because its not eager loading anything, it will do just-in-time permission checks for every bug
[02:51] <lifeless> *meep*
[02:51] <lifeless> related_bugs
[02:51] <lifeless> repeatedly queries the target branch bug list for every bug in the source branch
[02:51] <thumper> that kinda sucks
[02:52] <thumper> I'm sure that wasn't the intention :)
[02:52] <lifeless> I'm sure it wasn't either
[02:52] <huwshimi> wgrant: Just sending that off to land now :)
[02:52] <thumper> given that I wrote it :)
[02:52] <wgrant> huwshimi: Good luck with that...
[02:52] <huwshimi> wgrant: Is stuff still not working?
[02:52] <lifeless> its a symptom of us not having a persistence layer and data access being mixed with business logic as python code
[02:52] <wgrant> lifeless: Confirmed xx-opstats.txt occasionally shows up on devel... but only on ec2.
[02:52] <wgrant> huwshimi: ec2 land is still a bit broken.
[02:52] <wgrant> pqm-submitting the branch now.
[02:52] <lifeless> wgrant: I'd lke to see the error
[02:53] <huwshimi> wgrant: Should I just wait for Monday
[02:53] <huwshimi> ?
[02:53] <lifeless> thumper: I know you spent a lot of time on this, its really tricky with the tools we /had/ and still pretty darn tricky
[02:53] <lifeless> thumper: https://bugs.launchpad.net/launchpad/+bug/710685 is the bug I'm chasing
[02:53] <_mup_> Bug #710685: Branch:+index timeouts - 3 queries triggered per linked bug <timeout> <Launchpad itself:Triaged> < https://launchpad.net/bugs/710685 >
[02:53] <wgrant> huwshimi: 40 minutes should do it.
[02:54] <huwshimi> wgrant: Oh awesome
[02:54]  * thumper sighs
[02:54] <wgrant> lifeless: Forwarded.
[02:54] <lifeless> thumper: http://pastebin.com/uf0FCV1G is my work in progress - currently that test shows 58 new queries in the second assert - for both the series and nonseries case.
[02:54] <wgrant> lifeless: That's plain devel except for my fixed ec2test-remote.py
[02:55] <wgrant> Can't reproduce the librarian failure anyway, but it only showed up in one of the three runs.
[02:55] <huwshimi> wgrant: I assume these errors are related to those issues? http://paste.ubuntu.com/572017/
[02:55] <wgrant> So it's probably old and spurious too.
[02:55] <lifeless> the good news is we squashed nearly 200 timeouts since last week
[02:55] <huwshimi> wgrant: From another branch
[02:55] <lifeless> 600 overnight vs 800
[02:55] <wgrant> huwshimi: That's fixed now.
[02:55] <lifeless> wgrant: your mua sucks
[02:55] <wgrant> lifeless: Oh?
[02:56] <lifeless> wgrant: I got a .eml attachment with base64 encoded internal structure + headers
[02:56] <wgrant> lifeless: I use Thunderbird on my desktop and Evolution on my laptop, and they both suck.
[02:56] <huwshimi> wgrant: Is that just related to landing the branch? As in, can I just manually land that branch or do I need to resubmit for testing?
[02:56] <wgrant> huwshimi: I'd lp-land that.
[02:57] <wgrant> No point retesting.
[02:57] <huwshimi> wgrant: Great, thanks.
[02:57] <wgrant> The fact that the original change got through in the first place shows that there are no tests.
[02:58] <wgrant> buildbot approaches the moment of truth...
[02:58] <wgrant> It is past it!
[02:59] <wgrant> Windmill did not blow up!
[03:00] <wgrant> lifeless: Were you able to read the attachment?
[03:00] <wgrant> Or shall I forward with Evo instead?
[03:01] <wgrant> And add Thunderbird to my list of things to eliminate after Windmill and xx-opstats.txt
[03:02] <StevenK> Hmmm. Can someone try to click the diff link on https://code.launchpad.net/~wgrant/launchpad/secret-query-count-determinism and then try and close the diff popup?
[03:03] <thumper> anyone seeing ec2 errors on xx-opstats.txt ?
[03:03] <StevenK> I thought wgrant just mentioned that
[03:03] <lifeless> wgrant: not without more futzing than I have mental space for right now
[03:04] <StevenK> [13:52] < wgrant> lifeless: Confirmed xx-opstats.txt occasionally shows up on devel... but only on ec2.
[03:04] <wgrant> StevenK: Yes, broken here too.
[03:04] <wgrant> thumper: When did you first see that.
[03:04] <wgrant> StevenK: (the diff popup, that is)
[03:04] <StevenK> wgrant: Excellent. Let me file a bug
[03:04] <thumper> now
[03:04] <thumper> well, on the ec2 run that just finished
[03:04] <wgrant> thumper: Which rev of devel?
[03:04] <thumper> works locally now though
[03:04]  * thumper checks the email
[03:04] <wgrant> thumper: It always works locally.
[03:04] <thumper> r12457
[03:05] <wgrant> But fails around half the time on ec2.
[03:05] <wgrant> Thanks.
[03:05] <thumper> half?
[03:05] <wallyworld> anyone want to claim a review? https://code.launchpad.net/~wallyworld/launchpad/recipe-request-build-partial-success/+merge/50873
[03:05] <lifeless> thumper: hi
[03:05] <lifeless> thumper: question for you about linked bugs
[03:05] <lifeless> thumper: which bugtask do we /intend/ to show ?
[03:05] <thumper> lifeless: shoot
[03:05] <thumper> lifeless: it should be the bugtask relating to the target of the branch
[03:06] <lifeless> tal:define="bugtask bug/bugtask
[03:06] <thumper> sometimes it is linked to a bug that doesn't have a task for that
[03:06] <lifeless> is the lookup
[03:06] <thumper> in which case, we get the first
[03:06] <lifeless> I can't find a bugtask attribute on bug
[03:06] <thumper> is it on the annotated bug?
[03:06] <lifeless> ah
[03:07] <lifeless> DecoratedBug
[03:07] <lifeless> right
[03:07] <lifeless> is branch.target the context of the branch
[03:07] <lifeless> e.g. the product/sourcepackage ?
[03:08] <thumper> it is a BranchTarget object
[03:08] <wgrant> lifeless: Can I blame you?
[03:08] <wgrant> I think I might.
[03:08] <lifeless> thumper: I'm sure you considered this, but what about linking to bugtask ? It would push this complexity to where we add links, but we wouldn't pay it after
[03:08] <lifeless> wgrant: it might be me
[03:09] <lifeless> wgrant: pastebin it
[03:09] <wgrant> lifeless: I'm thinking that your profiling stuff is suspicious.
[03:09] <wgrant> But I still can't repro locally.
[03:09] <thumper> lifeless: it was considered but just not done, we could also link revisions as fixes
[03:10] <wgrant> lifeless: http://paste.ubuntu.com/572027/
[03:11] <StevenK> Ew, doctest diffs
[03:12] <wgrant> I guess I will add some getLastOops stuff to it and rerun.
[03:12] <wgrant> Because it does not want to happen locally.
[03:12] <wgrant> Has anyone seen it before r12457?
[03:13] <wgrant> Confirmed.
[03:13] <wgrant> +opstats OOPSes on launchpad.dev
[03:13] <lifeless> its throwing a 503
[03:14] <wgrant> Hm, not 500?
[03:14] <lifeless> wgrant: thanks for finding and digging
[03:14] <lifeless> + 503s:1@1298603161
[03:14] <lifeless> + 5XXs:1@1298603161
[03:14] <wgrant> Oh.
[03:14] <lifeless> and there is one error higher up
[03:14] <wgrant> +opstats explodes when you are authenticated regardless.
[03:14] <lifeless> yes
[03:14] <wgrant> 503... it times out?
[03:30] <wgrant> lifeless: Can you check how many BugSubscriptionFilters staging and qastaging have?
[03:30] <wgrant> We added them manually on production, so I think they may be missing on the stagings.
[03:30] <wgrant> Which would explain the quick query.
[03:31] <wgrant> The plan suggests that there are very fwe.
[03:33] <lifeless> 4
[03:33] <wgrant> Hah.
[03:33] <wgrant> So the plan is completely invalid.
[03:33] <wgrant> That would do it.
[03:40] <lifeless> how many filters does prod have?
[03:41] <lifeless> wgrant: ^ ballpark
[03:41] <wgrant> lifeless: SELECT COUNT(*) StructuralSubscription
[03:41] <wgrant> It has one for every strucsub.
[03:41] <lifeless> wgrant: that was the conversion thing ?
[03:42] <lifeless> so, unknown number. did you happen to see the actual row count inserted ?
[03:42] <wgrant> lifeless: Yes, we added a no-op filter for every subscription.
[03:42] <wgrant> Yes.
[03:42] <lifeless> [yes unknown?]
[03:42] <wgrant> INSERT 0 24056
[03:46] <wgrant> lifeless: I have a traceback for you.
[03:46] <wgrant> http://paste.ubuntu.com/572033/
[03:46] <wgrant> It is *timing out* in the flag check.
[03:48] <wgrant> Ah.
[03:48] <wgrant> I see.
[03:48] <wgrant> The tests override the timeouts.
[03:48] <wgrant> This wasn't a problem before because there was no DB access.
[03:49] <wgrant> But now it checks the timeout before it can raise a DisallowedStore.
[03:49] <wgrant> Impressive.
[03:51] <lifeless> the flag layer checks the timeout
[03:51] <lifeless> because if you just query and get timed out by the db - in other tests - you end up with a doomed transaction
[03:52] <lifeless> which is a world of pain when that happens *in the error handler*
[03:52] <wgrant> Ah, right.
[03:52] <lifeless> however
[03:52] <wgrant> Have you filed a bug, or shall I?
[03:52] <lifeless> its passing that (not timed out), then doing the query, and is slow enough it has then timed out
[03:53] <lifeless> wgrant: if you would
[03:53] <lifeless> that would be great
[03:53] <wgrant> lifeless: But there should be a DisallowedStore in there somewhere, right?
[03:53] <wgrant> Before it gets to the query.
[03:55] <lifeless> I would have expected that, yes.
[03:55] <lifeless> except
[03:55] <lifeless> uhm
[03:55] <lifeless> it probably hasn't traversed to +opstts yet
[03:55] <lifeless> *+opstats* yet.
[03:56] <wgrant> Ha ha ha.
[03:56] <wgrant> Nice.
[03:56] <wgrant> Bug #724718
[03:56] <_mup_> Bug #724718: xx-opstats.txt failing occasionally <spurious-test-failure> <Launchpad itself:Triaged> < https://launchpad.net/bugs/724718 >
[03:59] <lifeless> those tests are basically bong
[03:59] <wgrant> Almost all of our tests are basically bong.
[03:59] <lifeless> every time I change instrumentation gathering, or things like features, I meet them again.
[04:06] <lifeless> wgrant: uhm, it may be we need to patch into zope publication more and switch to a 'straight after traversal before callObject' point
[04:06] <lifeless> wgrant: and/or call out from right after the dbpolicy is installed
[04:06] <lifeless> which would be a shame, because traversal is nonfree
[04:06] <wgrant> Yes :(
[04:07] <wgrant> Anyway, sounds like we may want to roll it back, or possibly just mangle the test a bit.
[04:08] <wgrant> lifeless: +1 on your structuralsubscription suggestion.
[04:08] <lifeless> wgrant: do what you think best; I think pushing the timeout up -just a little- will probably make it reliable
[04:09] <lifeless> thumper: so whats the branch target for a junk branch? I'm very confused about the difference between a branch target and a bugtask target
[04:09] <thumper> lifeless: it is a PersonTarget
[04:09] <wgrant> lifeless: It looks like the timeout-causing views will adapt themselves to the configured timeout values.
[04:10] <thumper> lifeless: BranchTaget objects are found in lp.code.model.branchtarget
[04:10] <wgrant> Which is handy, albeit in a "I think I'm going to be sick" way.
[04:11] <lifeless> thumper: interesting thing
[04:12] <lifeless> thumper: linked bugs show *no* bugtask if the task is on a different context
[04:12] <lifeless> thumper: so I can just push that down to the bug search
[04:12] <thumper> lifeless: that seems wrong...
[04:12] <lifeless> lib/lp/code/browser/decorations.py
[04:12] <lifeless> the bugtask property returns
[04:13] <lifeless> the result of getBugTask
[04:13] <lifeless> which looks for an exact match and on failure returns None
[04:14] <lifeless> which is excellent, I can push this all down to the db
[04:14] <lifeless> refactor to return tasks not bugs
[04:14] <lifeless> \o/
[04:15] <wgrant> lifeless: OTOH I can fix this permanently by popping the config before requesting +opstats
[04:15] <wgrant> I might do that.
[04:15] <lifeless> wgrant: \o/
[04:20] <lifeless> lets see how badly I've broken this
[04:24] <lifeless> thumper: ah, I see what its doing; I will preserve it. Some epic confusion is possible here ;)
[04:26]  * wgrant narrows eyes at Windmill.
[04:27] <wgrant> --layer=WindmillLayer has passed 5 times on ec2 so far.
[04:27] <wgrant> Bad Windmill.
[04:28] <wgrant> lifeless: https://code.launchpad.net/~wgrant/launchpad/bump-opstats-test-timeouts/+merge/51249
[04:29] <thumper> wgrant: passed or failed?
[04:30] <wgrant> thumper: passed.
[04:30] <wgrant> thumper: I want it to fail so I can minimise the problem from "the whole test suite"
[04:30] <wgrant> Because it's much quicker to run WindmillLayer than everything.
[04:31] <wgrant> In fact it takes only 46 minutes.
[04:31] <wgrant> lifeless: Thanks.
[04:32] <thumper> wgrant: comments welcome https://code.launchpad.net/~thumper/launchpad/inline-recipe-name-edit/+merge/51248
[04:34]  * thumper lands self reviewed branch
[04:35] <thumper> https://code.launchpad.net/~thumper/launchpad/recipe-heading-overlap/+merge/51250 in case anyone cares...
[04:35] <thumper> fixes bug 721134
[04:35] <_mup_> Bug #721134: Description and Recipe Text heading overlap when logged out <recipe> <regression> <ui> <Launchpad itself:In Progress by thumper> < https://launchpad.net/bugs/721134 >
[04:37]  * thumper EODs
[04:37] <thumper> I'll check in later on ec2 test runs
[04:38] <wgrant> lifeless: It has the usual line editor glitches, but apart from that looks great.
[04:38] <wgrant> Er.
[04:38] <wgrant> thumper: ^^
[04:38] <lifeless> wgrant: what does ?
[04:39] <thumper> wgrant: what line editor glitches?
[04:39] <wgrant> thumper: Clicking the edit link next to the name shifts the whole page down slightly.
[04:39] <thumper> wgrant: file a bug and I'll fix it
[04:39] <thumper> wgrant: I did fix the multi-line editor 1px down-shift
[04:40] <thumper> wgrant: that it got on hover
[04:40] <thumper> wgrant: those are the sort of bugs that most people never notice, but once you have, it annoys the shit out of you
[04:40] <wgrant> thumper: The single-line editor one is really obvious.
[04:41] <wgrant> Have you seen it?
[04:41] <thumper> wgrant: not focused on it
[04:42] <wgrant> thumper: lazr-js or launchpad?
[04:42] <thumper> wgrant: both?
[04:43] <thumper> I fixed the multiline in lazr-js
[04:45] <wgrant> thumper: Bug #724727
[04:45] <_mup_> Bug #724727: Single-line inline editor causes page to shift when editing <javascript> <ui> <Launchpad itself:Triaged> < https://launchpad.net/bugs/724727 >
[04:45] <thumper> wgrant: ta
[04:51]  * StevenK peers at dogfood
[04:51] <wgrant> StevenK: Oh, are you doing stuff to it?
[04:52] <wgrant> I am testing the trio of poppys.
[04:52] <StevenK> KeyError: 'request_daily_build'<br />
[04:52] <wgrant> StevenK: New templates, old code?
[04:52] <wgrant> Well, what is the full traceback?
[04:52] <StevenK> Could be. Unsure
[04:53] <StevenK> wgrant: Let me dig up the OOPS
[04:53] <wgrant> StevenK: Shall I restart the appserver?
[04:53] <StevenK> wgrant: 17471.DF5 in the usual place
[04:54] <wgrant> Ja, needs appserver restart.
[04:54]  * wgrant restarts the appserver.
[04:55] <StevenK> wgrant: I'm worried that Julian is no longer testing Zope's poppy
[04:56] <wgrant> StevenK: I just did.
[04:56] <wgrant> Still works.
[04:56] <StevenK> wgrant: Er, sorry. That due to his changes the testsuite no longer is.
[04:56] <wgrant> Ah/
[04:56] <wgrant> Maybe.
[04:56] <StevenK> Has the appserver restarted?
[04:57] <wgrant> No.
[04:57] <wgrant> Still building the WADL so it can stop.
[04:57] <StevenK> Fail
[04:58] <wgrant> Is down.
[04:58] <wgrant> Coming back up.
[04:58] <StevenK> Yes, he no longer is.
[04:58] <wgrant> :(
[04:59] <lifeless> \o/ down to one bugtask query
[05:00] <lifeless> 2 related lookups to squash
[05:00] <StevenK> wgrant: I'm not sure when Julian plans to kill the Zope FTP server, though, so it could be a non-issue
[05:01] <StevenK> wgrant: I take it by the lack of make processes, the appserver is back?
[05:02] <wgrant> StevenK: It should be.
[05:02] <wgrant> I cannot auth to poppy-sftp, though :(
[05:02] <wgrant> Hm.
[05:02] <wgrant> Appserver did not come back up.
[05:02] <wgrant> Did Julian pull db-devel?
[05:02] <wgrant> Probably.
[05:02] <wgrant> wut
[05:03] <StevenK> wgrant: That reminds me. When I was in Adelaide there was one wireless network in range of where I was staying. The ESSID was 'lolwut'
[05:04] <StevenK> wgrant: Usually when the appserver fails like this, dogfood-nohup.out fills with tracebacks
[05:05] <wgrant> StevenK: It did.
[05:05] <wgrant> The 'wut' was at a very strange error.
[05:05] <wgrant> But I was looking in development-nohup.out instead.
[05:05] <wgrant> dogfood-nohup.out has the usual patch failure.
[05:05] <wgrant> Faking it now...
[05:09] <wgrant> StevenK: We're back.
[05:10] <lifeless> lp:~lifeless/launchpad/bug-710685 handles products properly now, still have productseries and distroseries to capture
[05:10] <StevenK> wgrant: Confirmed, thanks.
[05:13] <huwshimi> wgrant: Any luck with ec2 land or still working on it?
[05:13] <StevenK> huwshimi: The fix landed, merge devel
[05:14] <huwshimi> StevenK: Awesome thanks.
[05:15]  * StevenK grumbles at the lack of logtailing on dogfood buildds
[05:16] <wgrant> Ah, poppy-sftp works better when it's not using the former production xmlrpc server.
[05:16] <wgrant> StevenK: Do it manually.
[05:16] <StevenK> Heh, former production?
[05:16] <StevenK> wgrant: I don't know how :-(
[05:16] <wgrant> StevenK: It was still using xmlrpc.lp.internal:8097, which died a couple of months ago.
[05:17] <wgrant> StevenK: import xmlrpclib; xmlrpclib.ServerProxy('http://something.buildd:8221/rpc').status()
[05:19] <StevenK> Which says IDLE
[05:19] <wgrant> That would suggest idleness.
[05:20] <StevenK> Clearly, but the build page itself and /builders disagrees.
[05:20] <StevenK> Now it says building. WTF
[05:21] <wgrant> Could have been resuming.
[05:22] <wgrant> Or just being shit.
[05:22] <StevenK> I did say karmic, it could have been digging out a chroot tarball
[05:22] <wgrant> Indeed.
[05:25] <wgrant> StevenK: I am done with mawson.
[05:25] <wgrant> all three poppys work!
[05:25] <LPCIBot> Project devel build (474): STILL FAILING in 5 hr 20 min: https://hudson.wedontsleep.org/job/devel/474/
[05:25] <LPCIBot> * Launchpad Patch Queue Manager: [testfix][r=jml][no-qa] Fix test failures in
[05:25] <LPCIBot> devscripts.ec2test.tests.test_remote
[05:25] <LPCIBot> * Launchpad Patch Queue Manager: [r=lifeless][no-qa] Allow overriding the profiling_allowed config
[05:25] <LPCIBot> entry via a feature flag.
[05:25] <LPCIBot> * Launchpad Patch Queue Manager: [r=jtv][no-qa] Work around Storm ClassAlias bug more cleanly.
[05:25] <StevenK> wgrant: As am I. Incidently, you'll get some mail.
[05:26] <wgrant> Which mail?
[05:26] <wgrant> I got two more disappointing ec2 successes.
[05:27] <wgrant> But is there anything else?
[05:27] <StevenK> I changed some bug statues
[05:27] <StevenK> *statuses
[05:28] <wgrant> :( short months make me sad.
[05:29] <StevenK> wgrant: Oh?
[05:30] <StevenK> wgrant: Based on your experience do you think bug 579870 can be nailed shut?
[05:30] <_mup_> Bug #579870: Packages built from daily builds say 'No signer' <lp-soyuz> <recipe> <Launchpad itself:Triaged> < https://launchpad.net/bugs/579870 >
[05:30] <wgrant> StevenK: Yes, it's fixed.
[05:30] <wgrant> StevenK: Less time to fix bugs.
[05:30] <wgrant> The milestone is looking rather sad, yet we are a week from release.
[05:31] <StevenK> wallyworld: O hai?
[05:32] <wallyworld> StevenK: de ho
[05:33] <StevenK> wallyworld: We were going to add a button "Build right now" to daily built recipes, were you working on that?
[05:34] <wgrant> It's done.
[05:34] <wgrant> Will be deployed in 4 hours.
[05:34] <StevenK> Ah, what's the bug number, I haz dupe
[05:34]  * wallyworld looks
[05:34] <wgrant> bug 687623
[05:34] <_mup_> Bug #687623: No ability to manually trigger a build 'like the daily build system' <lp-code> <qa-ok> <recipe> <Launchpad itself:Fix Committed by wallyworld> < https://launchpad.net/bugs/687623 >
[05:35]  * wallyworld unlooks
[05:35] <StevenK> So marked, thanks
[05:35] <StevenK> 3 bugs knocked off
[05:35] <wallyworld> there's also some enhancements to that stuff waiting for review https://code.launchpad.net/~wallyworld/launchpad/recipe-request-build-partial-success/+merge/50873
[05:37] <wgrant> wallyworld: I also filed bug 724679 earlier.
[05:37] <_mup_> Bug #724679: Not obvious why "Build now" button is missing <recipe> <ui> <Launchpad itself:Triaged> < https://launchpad.net/bugs/724679 >
[05:38] <wallyworld> wgrant: you reall think that's a bug?
[05:38] <wallyworld> pbkbac
[05:38] <wallyworld> :-P
[05:38] <wgrant> wallyworld: It had me confused for a while.
[05:38] <wallyworld> wgrant: i'm not sure what we can do about it though
[05:38] <wgrant> wallyworld: Problem Between Keyboard And Blood Alcohol Content?
[05:39] <wallyworld> wgrant: you should know by now i can't type :-)
[05:40] <StevenK> lifeless: What you want to do with bug 721460?
[05:40] <_mup_> Bug #721460: Cannot use 'lp:bzr' as a branch in a recipe <recipe> <Launchpad itself:Incomplete> < https://launchpad.net/bugs/721460 >
[05:41] <StevenK> wgrant: Thoughts on bug 515918?
[05:41] <_mup_> Bug #515918: package_name and suite not passed to dailydeb <lp-soyuz> <recipe> <Launchpad itself:Triaged> < https://launchpad.net/bugs/515918 >
[05:42] <wgrant> wallyworld: I put some concrete suggestions in the bug... do you have any thoughts?
[05:42]  * wallyworld looks at the bug
[05:43] <wgrant> StevenK: I'm not sure.
[05:43] <wgrant> StevenK: That needs testing.
[05:44] <wallyworld> wgrant: it's not quite that simple. there are other reasons why the build now link won't show, besides the recipe being stale
[05:44] <wallyworld> wgrant: eg if the user doesn't have upload permissions to the archive
[05:44] <wgrant> wallyworld: Right, but one of those already has a warning at the top of the page.
[05:44] <wgrant> And the other is a bug.
[05:45] <wallyworld> hmmmm. if you can convince thumper to assign it to me, i'll do it :-) he had some definite ideas about how he wanted that to work
[05:45] <wgrant> I only know of two other cases it won't show:
[05:46] <wgrant>  1) No permissions, for which there is already a big warning at the top of the page.
[05:46] <wgrant>  2) Not a daily build, for which we should show the link.
[05:46] <wgrant> Because that's still useful even for non-daily builds.
[05:47] <wgrant> eg. when updating stuff in the ~launchpad PPA... we don't want daily builds, but a single-click build request would be wonderful.
[05:47] <wgrant> In fact, you are more likely to want the "Build now" button if you are not a daily build.
[05:47] <wallyworld> there's already a "request builds" link for adhoc builds
[05:47] <wgrant> But that is a more complex issue than merely presenting it better for daily builds.
[05:47] <wgrant> wallyworld: Right, but these aren't ad-hoc builds.
[05:47] <wallyworld> the daily "Build now" link has a specific purpose
[05:47] <StevenK> wgrant: http://pastebin.ubuntu.com/572056/ from Hudson
[05:48] <wgrant> wallyworld: Right, and I want that purpose.
[05:48] <wallyworld> and you get it, no? but not if the recipe isn't stale
[05:48] <wallyworld> which is what the requirement stated
[05:48] <wgrant> StevenK: Which revs is that?
[05:49] <wallyworld> so for the case "when updating stuff in the ~launchpad PPA,....", you wouls just use the "Request Builds" link?
[05:49] <StevenK> wgrant: r12458
[05:49] <wgrant> wallyworld: But it's already preconfigured.
[05:49] <wgrant> StevenK: Are you sure?
[05:49] <wgrant> That could have plausibly been introduced by r12460
[05:50] <StevenK> wgrant: Er, a little
[05:50] <wgrant> But it passes here.
[05:50] <wallyworld> wgrant: by "it's", you mean the "Build now" link is already configured to do the same thing as a daily build would if it were to run?
[05:51] <wgrant> wallyworld: The ~launchpad recipes want the same functionality as a daily build, except on request.
[05:51] <LPCIBot> Project devel build (475): ABORTED in 25 min: https://hudson.wedontsleep.org/job/devel/475/
[05:51] <LPCIBot> * Launchpad Patch Queue Manager: [r=allenap][no-qa] Implement splitting Package/Product translations
[05:51] <LPCIBot> * Launchpad Patch Queue Manager: [r=thumper][bug=724004][no-qa][incr] Rename LP.client.cache and
[05:51] <LPCIBot> LP.client.links to LP.cache and LP.links in preparation of
[05:51] <LPCIBot> LP.client becoming a YUI module.
[05:51] <LPCIBot> * Launchpad Patch Queue Manager: [r=mbp,
[05:51] <LPCIBot> wgrant][ui=sinzui][bug=591274] Modified the bug tag field width so
[05:51] <LPCIBot> that it is a more appropriate length for the content.
[05:51] <LPCIBot> * Launchpad Patch Queue Manager: [r=jml][bug=724039, 724232][no-qa] Prepopulate the cookie secret cache,
[05:51] <LPCIBot> preventing tests from seeing an extra query when they are the first
[05:51] <LPCIBot> in a layer. Also unbreak ec2 land and silence the import fascist.
[05:51] <LPCIBot> * Launchpad Patch Queue Manager: [r=lifeless][bug=724522] Make clear_request_started() work when
[05:51] <LPCIBot> called twice in a row, unbreaking request retrying.
[05:51] <LPCIBot> * Launchpad Patch Queue Manager: [r=leonardr][bug=712329,
[05:51] <LPCIBot> 712331] Add extra recipe methods to the web service.
[05:51] <wgrant> wallyworld: Daily builds get to build daily, but they also now get this nice single-click button to do everything.
[05:51] <StevenK> Sorry for the spam, I'm upgrading to Jenkins
[05:51] <wallyworld> wgrant: and you get that but not if the recipe isn't stale :-)
[05:51] <wallyworld> wgrant: so your issue is you want to request a daily build even if the recipe isn;t stale?
[05:52] <wgrant> wallyworld: Even if it's not configured to build daily?
[05:53] <wallyworld> ah, so when it's configured as " build on request", you want to trigger the build_daily() method
[05:53] <wallyworld> ?
[05:53] <wgrant> wallyworld: Yes.
[05:53] <wallyworld> that's confusing perhaps?
[05:53] <wgrant> The name is confusing, but the action is not.
[05:53] <wgrant> I guess I don't understand why only daily builds get the one-click functionality.
[05:54] <wallyworld> so the problem scope is larger then since the naming of the boolean choices for "build daily/build on request" would need rework etc
[05:54] <wgrant> Right.
[05:54] <wgrant> That's why I separated it from the daily build status issue.
[05:54] <wgrant> Mostly.
[05:54] <wallyworld> wgrant: i only came to recipes late so haven't got all the history of the requirements discussions etc
[05:55] <wallyworld> so i can't really tell you for sure why certain decisions were made
[05:55] <wallyworld> i can follow up with thumper
[05:55] <wgrant> I was only really involved in the backend stuff, not the later frontend development :(
[05:56] <wallyworld> sure, but here we're talking about the semantics of a recipe attribute
[05:57] <thumper> wgrant: it is my suggestion, but I'm about to take the girls out to watch the rugby
[05:57] <wgrant> thumper: What is your suggestion?
[05:58] <lifeless> StevenK: I think its invalid
[05:58] <wgrant> Won't Fix, if anything.
[05:58] <wgrant> It is very valid.
[05:58] <lifeless> StevenK: its definitely confusing on qastaging
[06:00]  * StevenK waits for aptitude
[06:00] <StevenK> Sigh, the jenkins package conflicts with hudson
[06:01] <StevenK> This is not convincing me of a pain-free upgrade process
[06:18] <StevenK> wgrant: You know, I think that rabbitmq install error is due to DEBCONF_FRONTEND=noninteractive
[06:18] <wgrant> StevenK: That rabbitmq install error?
[06:19] <StevenK> wgrant: When Jenkins installs rabbitmq on a slave it errors
[06:19] <lifeless> :(
[06:19] <wgrant> Ah.
[06:19] <lifeless> StevenK: I have a branch using rabbit
[06:19] <lifeless> so thats probably important to fix ;)
[06:19] <wgrant> lifeless: It's not quite that easy to get rid of the buildd secret, sadly.
[06:19] <wgrant> lifeless: apt still needs it.
[06:19] <wgrant> Even if lp-buildd does not.
[06:20] <lifeless> wgrant: theres an alternative anyhow.
[06:20] <huwshimi> Have a nice friday everyone
[06:20] <lifeless> wgrant: add and subscriber 'buildd' to all private ppas
[06:20] <wgrant> Night huwshimi.
[06:20] <wgrant> lifeless: Yeah.
[06:21] <wgrant> lifeless: Do we have to use config-manager in PQM?
[06:21] <wgrant> Can't we just use the precommit hook to pull download-cache?"
[06:21] <wgrant> Without c-m it doesn't have to redownload the whole tree.
[06:21] <StevenK> lifeless: It actually drops files on disk, the postinst fails
[06:21] <wgrant> And it takes about 10 seconds instead of 20 minutes.
[06:22] <lifeless> wgrant: yes
[06:22] <StevenK> And I think it's because of noninteractive
[06:22] <lifeless> wgrant: why wouldn't it need the whole tree?
[06:22] <wgrant> lifeless: It already has the whole tree.
[06:22] <wgrant> lifeless: eg. look at shipit merges.
[06:22] <lifeless> wgrant: after the rm -rf  ?
[06:22] <wgrant> lifeless: Why would it rm -rf?
[06:22] <lifeless> because it doesn't trust the build before
[06:23] <lifeless> it might have been hostile
[06:23] <wgrant> shipit merges have most of the history, and take like 2 minutes.
[06:23] <wgrant> Ah, not 2 minutes, 25 seconds!
[06:23] <wgrant> 25 second PQM!
[06:24] <lifeless> config-manager can do a lightweight checkout
[06:25] <lifeless> the thing thats slow is grabbing the whole history because *make check* uses bzr operations
[06:25] <lifeless> fix *that* and we can switch to lightweight checkouts
[06:26] <wgrant>         [ `PYTHONPATH= bzr status -S database/schema/ | \
[06:26] <wgrant>                 grep -v "\(^P\|pending\|security.cfg\|Makefile\|unautovacuumable\|_pythonpath.py\)" | wc -l` -eq 0 ]
[06:26] <wgrant> That's the only bzr operation I can see.
[06:26] <lifeless> right
[06:26] <lifeless> it opens the tree
[06:26] <lifeless> the tree opens the branch
[06:26] <lifeless> the branch opens the repo
[06:26] <wgrant> And the lightweight checkout works.
[06:26] <lifeless> it wants the pending head revision to show the last commit
[06:26] <lifeless> wgrant: not once you chroot
[06:27] <lifeless> wgrant: the ssh key for lp being outside the chroot
[06:27] <lifeless> (and likewise the local disk copy in ~/archives/rocketfuel being outside the chroot)
[06:27] <wgrant> lifeless: :(
[06:27] <spiv> lifeless: I'm late to this discussion, and have to hit the road in a sec, but stacked commit would help there.
[06:27] <wgrant> lifeless: We could still make it approximately lots of times faster by just cping the tree across...
[06:28] <lifeless> wgrant: except we don't start from a known good treee and we don't have any operation to give us one reliably.
[06:28] <StevenK> But the local disk might be hostile!
[06:28] <wgrant> lifeless: Hm? The on-disk copy is good.
[06:28] <lifeless> spiv: stacked branches still open the parent
[06:28] <lifeless> wgrant: I thought you meant the build tree
[06:28] <wgrant> lifeless: If PQM's checkout outside the chroot is fucked, we are all fucked.
[06:28] <spiv> Hmm, even for 'bzr status'?  That might be fixable.
[06:28] <lifeless> wgrant: because we're not lightweighting it, *all* of sourcecode is copied.
[06:28] <wgrant> lifeless: Right. And if we can't lightweight it, then we should just cp -a the tree into the chroot.
[06:29] <lifeless> spiv: mixed blessing to change that
[06:29] <wgrant> Then we can stop running buildout.
[06:29] <wgrant> And have 30s PQM.
[06:29] <lifeless> wgrant: its more complex than that; its in a shared repo
[06:29] <wgrant> lifeless: That can be fixed.
[06:29] <wgrant> Or the shared repo can be copied.
[06:29] <lifeless> wgrant: and we don't want information leakage of embargoed revisions if someone gets smart
[06:29] <lifeless> wgrant: its really a lot simpler to stop calling into bzr
[06:30] <wgrant> lifeless: You know...
[06:30] <wgrant> We don't need to chroot, really.
[06:30] <wgrant> We don't need buildout.
[06:30] <wgrant> We don't need to run any code from the tree.
[06:30] <wgrant> We just need to run bzr st, check that no DB stuff is modified, and grep for conflict markers.
[06:30] <wgrant> That's all check_merge does now.
[06:31] <lifeless> so
[06:31] <lifeless> change pqm
[06:31] <lifeless> it does all of that except the db check
[06:31] <wgrant> Just need to change the config, even.
[06:31] <lifeless> add a feature to exclude changes to a subtree, add that to the config for devel, done.
[06:31] <wgrant> We could just add the grep to the precommit hook.
[06:32] <wgrant> It's sitting in Makefile at the moment.
[06:32] <lifeless> wgrant: thats possible too
[06:32] <lifeless> wgrant: and the pqm precommit hook runs outside the chroot
[06:32] <wgrant> lifeless: Exactly.
[06:32] <wgrant> No PQM code change required.
[06:32] <wgrant> But no chroot required.
[06:32] <LPCIBot> Project db-devel build (394): STILL FAILING in 2 min 9 sec: https://hudson.wedontsleep.org/job/db-devel/394/
[06:32] <wgrant> And no config-manager required.
[06:32] <wgrant> So no half-hour required!
[06:33] <wgrant> I'm not sure if we want the conflict marker test still.
[06:34]  * StevenK peers at Jenkins
[06:34] <wgrant> We would lose the guarantee that buildout works.
[06:34] <wgrant> But I think that is a reasonable sacrifice for 60x faster landing.
[06:35] <lifeless> buildbot will tell us that
[06:35] <StevenK> Uhhh
[06:35] <StevenK> $ bzr branch http://bazaar.launchpad.net/~launchpad-pqm/launchpad/db-devel /mnt/test/launchpad/workspace/db-devel
[06:35] <StevenK> bzr: ERROR: http://bazaar.launchpad.net/~launchpad-pqm/launchpad/db-devel/.bzr/repository/packs/09fb66d3dfb9df78e2bb1ca7b6c7aac9.pack is redirected to https://launchpad.net
[06:35] <StevenK> ERROR: Failed to clone http://bazaar.launchpad.net/~launchpad-pqm/launchpad/db-devel
[06:35] <lifeless> \o/
[06:35] <lifeless> also wtf
[06:35] <lifeless> i guess its a 404
[06:36] <StevenK> It works now ...
[06:36] <lifeless> so you hit a repack
[06:36] <lifeless> (during a)
[06:36] <lifeless> file a bug
[06:36] <spiv> StevenK: what lifeless said
[06:36] <spiv> StevenK: especially \o/
[06:36] <StevenK> It was repacking while downloading?
[06:36] <lifeless> pqm did it, yes
[06:36] <spiv> StevenK: concurrent push while you pulled
[06:37] <StevenK> It's a bzr bug or codehosting?
[06:37] <spiv> I'd say both :)
[06:37] <lifeless> codehosting
[06:37] <spiv> Mainly codehostin
[06:38] <lifeless> bzr can't really sensible handle a redirect there
[06:38] <lifeless> because it points at not-a-pack
[06:39] <spiv> But I think it would be ok for bzr to understand that a redirect while reading a pack indicates "probably not there"; if bzr has gotten as far as trying to read packs it's already successfully fetched a bunch of other stuff under .bzr/
[06:39] <lifeless> spiv: 'ewww'
[06:39] <spiv> It might be too nasty to code though.
[06:39]  * lifeless puts on the http nazi hat
[06:40] <StevenK> lifeless: https://bugs.launchpad.net/launchpad/+bug/724750
[06:40] <_mup_> Bug #724750: repacking during checkout results in wierd error <Launchpad itself:New> < https://launchpad.net/bugs/724750 >
[06:40] <lifeless> StevenK: go on, triage it.
[06:40] <StevenK> Bah, sorry, forget to set status and importance
[06:40] <lifeless> :)
[06:40] <lifeless> StevenK: jinx
[06:41] <StevenK> Triaged/Low. Not sure if you agree
[06:41] <lifeless> https://code.launchpad.net/~lifeless/launchpad/bug-710685/+merge/51258
[06:41] <lifeless> StevenK: I agree
[06:42] <lifeless> ^ thats I can has review, plox
[06:43] <StevenK> Waiting for diff
[06:44] <wgrant> What.
[06:44] <StevenK> wgrant: Hm?
[06:44] <wgrant> lib/lp/tests/test_no_conflict_marker.py
[06:44] <wgrant> 49 lines of Python wrapped in two of make wrapped in one of shell.
[06:44] <wgrant> To run one line of shell.
[06:45] <StevenK> EEEEEK
[06:46] <StevenK> lifeless: You stop importing TestCase in lib/lp/testing/tests/test_matchers.py and one class still bases off it?
[06:47] <StevenK> lifeless: Your multi imports require ( and )
[06:49] <StevenK> lifeless: You didn't drop the unittest import from lib/lp/code/browser/tests/test_branch.py
[06:51] <StevenK> As well as lib/lp/code/browser/decorations.py
[06:52] <StevenK> I'm not sure about the move into setupBrowserForUser(), but I'm willing to humour you
[07:05] <wgrant> https://pastebin.canonical.com/43935/
[07:05] <wgrant> I think that does the same as we do now, except without the test that buildout works, because I hate buildout.
[07:08] <lifeless> StevenK: I don't stop importing TestCase
[07:08] <StevenK> Ah. Fix your imports anyway
[07:08] <StevenK> :-)
[07:10] <lifeless> where are you saying () is needed ?
[07:10] <lifeless> I've removed the two useless imports of unittest
[07:11] <lifeless> StevenK: ^
[07:11] <StevenK> lifeless: from lp.testing import TestCase, TestCaseWithFactory , for instance.
[07:12] <lifeless> blah
[07:12] <lifeless> I *actually* intended that to be ok when I argued about this
[07:12] <lifeless> but the nuance got lost somewhere
[07:12] <lifeless> changed
[07:13] <StevenK> Just run the import formatter and stress less
[07:22] <lifeless> StevenK: anything else ?
[07:23] <StevenK> lifeless: Not that I can think of right now
[07:26] <lifeless> man, oracle are really not dealing with hudson stuff well
[07:26] <wgrant> Oh?
[07:26] <StevenK> Oh?
[07:26] <wgrant> What have they broken now?
[07:28] <lifeless> the long thread with charles rhys
[07:30] <wgrant> lifeless: So, any flaws in my PQM plan?
[07:30] <wgrant> I admit to not knowing PQM very well at all.
[07:31] <lifeless> wgrant: pqm already rejects conflicts
[07:31] <wgrant> lifeless: Sure, but people sometimes commit them.
[07:32] <wgrant> I've seen them in MPs :/
[07:32] <wgrant> But we could probably drop that check, true.
[07:32] <lifeless> other than that, it seems fine
[07:33] <lifeless> while you're at it
[07:33] <lifeless> care to look at why prod config landings take an hour
[07:33] <wgrant> Same reason.
[07:33] <wgrant> They grab and build LP, then verify all of the configs against the schema.
[07:33] <wgrant> We could probably install lazr.config on prasé and do it without using the tree, though.
[07:34] <wgrant> Let's see how easy that would be.
[07:34] <StevenK> lifeless: You missed the imports in lib/lp/registry/browser/tests/test_milestone.py
[07:35] <wgrant> Mmm, not really feasible.
[07:35] <wgrant> We may have to live with long prod configs for a while :(
[07:35] <lifeless> StevenK: which imports
[07:35] <StevenK> from testtools.matchers import LessThan, Matcher ; from lp.testing.matchers import HasQueryCount, BrowsesWithQueryLimit
[07:36]  * wgrant foods.
[07:36] <wgrant> I will return and request a deploy to finish off that incident.
[07:36] <wgrant> Unless buildbot chokes on Windmill again, in which case I will be tempted to rs=me disablement of WindmillLayer.
[07:37] <StevenK> Haha
[07:37] <lifeless> StevenK: thanks
[07:37] <StevenK> lifeless: If you've made that change, r=me
[07:37] <lifeless> I have
[07:38] <lifeless> needs a non-* review
[07:38] <StevenK> Indeed
[07:38] <StevenK> Can't help you, sadly
[07:45] <lifeless> oh, there is a stub
[07:46] <lifeless> https://code.launchpad.net/~lifeless/launchpad/bug-710685/+merge/51258
[07:55] <wgrant> Yay.
[07:59] <lifeless> stub: could I get a review of https://code.launchpad.net/~lifeless/launchpad/bug-710685/+merge/51258
[07:59] <stub> lifeless: yer - looking already.
[07:59] <lifeless> stub: cool, thanks
[08:00] <stub> lifeless: I don't particularly like how you are having to sniff params.linked_branches for type in model code (browser code I could forgive when things are coming from HTML forms).
[08:01] <lifeless> stub: it doesn't make sense to have a different parameter
[08:01] <lifeless> stub: I don't like the sniff either, but the original linked_branches code was bong
[08:01] <lifeless> it should have used not(None) and None with a normal searchbuilder right from the get go.
[08:03] <lifeless> stub: we can fix that up separately
[08:03] <stub> lifeless: So what is zope_isinstance(params.linked_branches, (any, all, int)) doing? any and all are builtin functions
[08:04] <lifeless> stub: not here they aren't
[08:04] <lifeless> canonical.launchpad.searchbuilder
[08:04] <lifeless> this is the standard way for passing in constraints to bug searches
[08:05] <stub> I see now.
[08:06] <stub> Might be better to use a namespace since we are overriding builtins (searchbuilder.any)
[08:07] <lifeless> stub: perhaps; its used bare /throughout/ bugtask.py though
[08:08] <lifeless> stub: what I mean is, it wouldn't reduce the burden of that override at all to do different here
[08:08] <stub> yup. Just thinking about 'best practice', and if it really matters (they may be builtins, but does anyone use 'em?)
[08:08] <lifeless> and it would be inconsistent
[08:08] <lifeless> I think we should improve it - perhaps move to Any rather than any, as a separate, large mechanical change.
[08:09] <stub> lifeless: Ok. Better sooner than later though, as people will start cargo culting this code.
[08:09] <lifeless> ah, the use of it in browser code I can change easily.
[08:09] <lifeless> and will do so now
[08:10] <lifeless> done
[08:12] <stub> lifeless: line 139 of the diff, you should use shortlist rather than list
[08:12] <lifeless> stub: doesn't that blow up at 1000
[08:13] <stub> (Not that I'm sure why you need to materialize the result set apart from doing what the docstring says)
[08:13] <stub> lifeless: It should emit warnings for smaller lists than that.
[08:13] <lifeless> stub: we're doing this because we have bugs with 400+ bugs
[08:13] <stub> lifeless: But if we are materializing large lists, we have a different problem.
[08:13] <lifeless> branches with 400_ bugs
[08:14] <lifeless> stub: yah, I'm wondering about paginating these
[08:14] <lifeless> I can put shortlist in there
[08:14] <stub> lifeless: You can specify the expected sane limit
[08:14] <lifeless> where does it live?
[08:15] <stub> canonical.launchpad.helpers (for now...)
[08:16] <lifeless> I'll run with the default
[08:16] <lifeless> an oops will be no worse than the current timeouts
[08:17] <stub> lifeless: So 'linked_bugtasks' has a docstring stating it returns DecoratedBugs
[08:17] <lifeless> oh, shall fix.
[08:18] <lifeless> I got kindof mired in the restructuring mess here - was tired at the end
[08:18] <stub> lifeless: And further down, you do 'for bugtask in self.branch.linked_bugs'
[08:18] <lifeless> hah - UserWarning: shortlist() should not be used here. It's meant to listify sequences with no more than 15 items.  There were 36 items.
[08:19] <stub> shortlist should be emitting soft oopses now soft oopses exist.
[08:19] <stub> But the goal is good :)
[08:19] <lifeless> i've given it a 1000 expected length.
[08:20] <lifeless> thats a great point.
[08:21] <lifeless> fixing that bugrask in linked_bugs code -   http://pastebin.com/bw7Cv4UM
[08:21] <lifeless> it is late evaluation
[08:22] <lifeless> but AFAICT that code path isn't actually used anymore
[08:22] <lifeless> I just haven't tracked down every case to be sure of it.
[08:23] <stub> that looks fine
[08:25] <stub> What does self.assertThat(branch, browses_under_limit) actually check? I'm not sure how a branch can be used to check a query limit.
[08:25] <lifeless> it renders the default view for the branch
[08:25] <lifeless> and checks the queries made doing that
[08:25] <lifeless> it uses userBrowser
[08:25] <lifeless> so we get the full stack, all the portlets etc
[08:26] <lifeless> see the matcher, its new in the branch - it wraps a QueryCollector + HasQueryCounts
[08:28] <jtv> hi folks
[08:30] <stub> jtv: Yo. I need you to better describe how you want those tests to look so I can land that branch.
[08:31] <jtv> stub: you could have a pruner that takes a list of ids for its constructor… makes it easy to create pruners that will or won't clean up specific objects.  Or you could do it on some other specific attribute value.
[08:32] <jtv> Then you can do things like "create 3 objects that will get cleaned up; run one pruner iteration with a batch size of 2; now 2 are gone but one's still there."
[08:33] <jtv> Presto: no reliance on sample data.
[08:33] <stub> I'm not relying on sample data
[08:33] <jtv> I thought you were?
[08:33] <jtv> The IrcID thingies?
[08:34] <stub> Last iteration changed. Instead of using a random table with some arbitrary data (IrcId), I create a new table with some arbitrary data (FooSomething)
[08:34] <jtv> Oh cool
[08:34] <jtv> (Meanwhile, I'm browsing to the MP)
[08:34] <stub> The data never mattered - I just needed a table with some data in it (> chunksize items actually)
[08:36] <stub> lifeless: we probably can do the 'filter unnecessary bugtasks' in SQL, but I doubt it will be much of a win over the current approach. Not dealing with large numbers of items to prune here.
[08:36] <jtv> Wow that's a large indentation.  Wasn't it easier to put the method body in a separate method, and wrap the call to that method in a try/finally?
[08:36] <lifeless> stub: i think we should leave that for a later iteration
[08:36] <lifeless> stub: *but* - some bugs have 100's of tasks
[08:36] <lifeless> pathological ones to be sure
[08:36] <stub> lifeless: Yes. I'm suggesting that later iteration might never happen.
[08:37] <stub> Outliers, that are probably indicative of another bug (something is wrong if a bug has 100's of tasks)
[08:37] <lifeless> stub: indeed. Lets be guided by data :)
[08:37] <lifeless> stub: yes, something is wrong... we have users
[08:38] <stub> Status: 666 (Electrocute Luser)
[08:38] <lifeless> in fact looking at this I see another possible bug, Should we really show 'wontfix', 'invalid' and 'opinion' bugs
[08:38] <lifeless> (we do currently, but it seems like an easy way to deal with these pathological bugs, just don't bring back those tasks.
[08:38] <stub> lifeless: This is model code, so you really shouldn't be making decisions for the browser code here.
[08:39] <lifeless> stub: the browser code passes the filter in
[08:39] <lifeless> stub: I'm saying the filter may be bong
[08:39] <lifeless> I've preserved the behaviour, but its not necessarily defined correctly to start with
[08:39] <stub> Ok. So different, existing bug :)
[08:40] <jtv> stub: big improvement in that you no longer rely on pre-existing items… is it safe to make BulkFoo a non-temp table?
[08:41] <stub> jtv: Yes, as the test suite will clean everything up. But I can't see why I can't use a temporary table in any case.
[08:41] <jtv> stub: that's the thing—you're not using a temp table
[08:42] <lifeless> temp table would be faster to test with
[08:42] <jtv> Typo?
[08:42] <stub> I know. By double negative was attempting to say I can change that without ill effects.
[08:42] <jtv> Ah sorry
[08:43] <jtv> Seems cleaner to make it a temp table and have cleanUp drop it.
[08:45] <jtv> If the base class didn't do the query, this would be easy to unit-test without a table; you could just pass a list.
[08:46] <stub> jtv: I need a table so I can define a Storm class so I can add it as an attribute to the BulkPruner
[08:47] <jtv> Ah, the bulkpruner also does the delete in SQL of course.  Stupid of me.
[08:47] <jtv> I'll have a coffee after this.
[08:47] <stub> Get me one too please. My eyes blur over when I look at lifeless's filter code.
[08:48] <jtv> For that, I recommend beer.
[08:48] <jtv> (Any other religions we can offend with simple beverages?)
[08:49] <stub> ok. I see why it is done that way and how it works now.
[08:49] <stub> I don't need props to offend religions
[08:49]  * stub is naturally offensive
[08:49] <jtv> Plus, you have a T-shirt!
[08:54] <adeuring> good morning
[08:56] <jtv> stub: I still think it'd help to break that test down into chunks that prove separate things.  "isDone initially returns zero."  "A run with a batch size of 2 removes exactly 2 objects."  "Iterating until isDone() clears up everything."  (I don't see why there are two of those bits in the test.)
[08:58] <stub> jtv: I don't think the test is particularly large or unwieldy, and I know every test is going to take about 1.5 seconds as the database will need to be reset. But I can change that if you insist.
[08:58] <stub> lifeless: approved
[08:58] <lifeless> stub: thanks
[09:00] <jtv> stub: that long?
[09:00] <jtv> Where does the time go?
[09:01] <stub> Last I checked. dropdb, createdb --template (in a loop, waiting for dropdb to complete and pg to complete)
[09:02] <stub> Although if I use a temporary table, I can tell the test suite the db isn't dirty and avoid that
[09:02] <lifeless> stub: you can use a temp table with storm
[09:02] <stub> So yes, we can split the tests without time increases with a little magic.
[09:02] <jtv> Maybe try the timing with the temp table first.  :)
[09:02] <stub> lifeless: Yes, but I'm defining a Storm subclass to access it.
[09:03] <lifeless> stub: sure, I don't understand why that implies any trauma
[09:03] <stub> lifeless: Ideally I could create a Storm class on the fly but I don't know if I can.
[09:03] <lifeless> stub: you can - curry it in your test
[09:03] <jtv> AFAIR you can
[09:03] <lifeless> [not that you need to, but you definitely can]
[09:04] <stub> I mean easily. temporary_table = StormTempTable("SELECT * FROM FooBar WHERE wibble IS FALSE")
[09:04] <lifeless> I was thinking - definte the temp class once
[09:04] <lifeless> do store.execute() once in the test to create the temp table
[09:05] <stub> lifeless: That is what I'm doing. I just need to add 'TEMPORARY' to my 'CREATE TABLE' statement in the test.
[09:05] <lifeless> cool
[09:05] <lifeless> doesn't sound magic then :)
[09:30] <mrevell> hi
[09:34] <jtv> hi mrevell!
[09:44] <lifeless> \o/ profiling on qastaging. -win-
[09:44] <wgrant> lifeless: Do they go somewhere useful now?
[09:44] <jtv> lifeless: don't play with our feelings… seriously?
[09:44] <lifeless> wgrant: I suspect the rsync isn't in cron or whatever yet
[09:45] <lifeless> wgrant: will worry about that when losas are not sprinting
[09:45] <jtv> Do we still need to get the config swizzled in order to use them?
[09:45] <lifeless> jtv: no
[09:45] <lifeless> jtv: just need to be in team launchpad
[09:45] <jtv> \o/
[09:45] <lifeless> jtv: it will still lock every other concurrent request out
[09:45] <jtv> so not something we're going to do in production then
[09:45] <lifeless> (or it should anyhow...) - but thats a profiling limitation
[09:45] <lifeless> we could actually, once we're single threaded in production
[09:46] <jtv> eh :)
[09:46] <lifeless> thats coming with the new servers
[09:46] <lifeless> and haproxy reconfiguration
[09:47] <lifeless> jtv: anyhow - https://bugs.qastaging.launchpad.net/++profile++show/ubuntu/+bug/1
[09:47] <_mup_> Bug #1: Microsoft has a majority market share <iso-testing> <ubuntu> <Clubdistro:Confirmed> <Computer Science Ubuntu:Invalid by compscibuntu-bugs> <EasyPeasy Overview:Invalid by ramvi> <GNOME Screensaver:Won't Fix> <Ichthux:Invalid by raphink> <JAK LINUX:Invalid> <The Linux OS Project:In Progress> <metacity:In Progress> <OpenOffice:In Progress by lh-maviya> <Tabuntu:Invalid by tinarussell> <Tivion:Invalid by shakaran> <Tv-Player:New> <Ubuntu:I
[09:47] <stub> jtv: This really isn't better. I've replaced a simple, linear test with several less simple tests for a net increase in complexity and decrease in readability
[09:48] <jtv> stub: oh well, at least you gave it a try.  Thanks for that—I won't hold you up any longer.
[09:49] <lifeless> wow, 1/3 of a second in 0.3811      0.0110   +storm.references:133(__get__)
[09:50] <jtv> lifeless: yes, they're expensive even when they come out of the cache.
[09:50] <lifeless> jtv: I knew that in principle, but I didn't have data to support it
[09:51] <lifeless> this isn't conclusive yet either because it may still be lazy loading on that page
[09:51] <jtv> You could have asked.  :)  I fixed a timeout recently that was largely based on that.
[09:51] <lifeless> jtv: I remember the review, I forget the page id
[09:52] <jtv> So do I, unfortunately—but IIRC it was more or less two consecutive lines in the code, with ridiculous time spent python-side without queries.
[09:53] <jtv> Sometimes I wonder if it'd be worthwhile to have per-request caches in front of the object-info dict in storm.
[09:53] <wgrant> lifeless: OK, ++show is extremely awesome.
[09:53] <jtv> What's that do?
[09:53] <lifeless> jtv: click on the url I linked before
[09:53] <lifeless> wgrant: that was gary's magic
[09:54] <lifeless> I'll let everyone know about this and the improving scaling count helper on monday
[09:54] <jtv> Oh wait I've seen this before
[09:55] <jtv> Didn't realize you got the page underneath as well though.  Awesome!
[09:56] <jtv> I wonder if I could hack up my browser to add a "profile this request" link to all my LP pages…
[09:59] <wgrant> jtv: You were getting 502s from that error, right?
[09:59] <stub> jtv: Can you push the relevant buttons on https://code.launchpad.net/~stub/launchpad/garbo/+merge/50595 to keep ec2 land happy?
[10:00] <jtv> wgrant: from what error, sorry?
[10:00] <wgrant> jtv: The one you're discussing in #launchpad
[10:00] <jtv> stub:  I was in the process of doing that, actually.
[10:00] <jtv> wgrant: ah, they were getting those non-oops "can't connect to Launchpad server" errors.
[10:00] <jtv> stub: see?  It's people like wgrant keeping me from approving your work.
[10:00] <wgrant> jtv: Yeah, the 502s. They're fixed now.
[10:01] <jtv> Great!
[10:01] <wgrant> But they do indicate an IntegrityError.
[10:01] <jtv> Which is exactly what I currently have a fix in EC2 for.  And thanks for fixing "ec2 land" btw.  :)
[10:01] <wgrant> It finally landed.
[10:01] <wgrant> After Windmill kicked it out twice.
[10:01] <jtv> Grr
[10:02] <wgrant> and a new spurious failure (now fixed) kicked it out a third time.
[10:22] <wgrant> r12426 started creating the no-op filters.
[10:24] <wgrant> r12435 is the only rev since that affects bug notifications.
[10:26] <lifeless> night all
[11:01] <wgrant> adeuring: Hi.
[11:01] <adeuring> hi wgrant
[11:01] <wgrant> adeuring: https://code.launchpad.net/~wgrant/launchpad/remove-canonical.widgets/+merge/51277 should be a nice quick one.
[11:01] <wgrant> If you could.
[11:01] <adeuring> wgrant: I'll look
[11:13] <adeuring> wgrant: r=me.
[11:14] <wgrant> adeuring, jml: Thanks.
[11:58] <jml> jelmer: thanks for the email.
[11:59] <jelmer> jml: np. Let's get this show on the road :)
[12:03] <LPCIBot> Project devel build (476): STILL FAILING in 5 hr 44 min: https://hudson.wedontsleep.org/job/devel/476/
[12:07] <deryck> Morning, all.
[12:08]  * jml is off for a bit, last driving lesson in a while, I hope.
[12:21] <jtv> good luck jml, good morning deryck
[12:21] <jtv> Ahhhh an empty translations import queue for once.  Lovely.
[12:32] <danilo> stub, hi, just one q re your review of https://code.launchpad.net/~danilo/launchpad/bug-720826-db/+merge/51146
[12:33] <danilo> stub, we are mostly going to do joins through bugnotification, is _pkey as you suggest going to be enough for that?
[12:33] <stub> danilo: yes
[12:34] <danilo> stub, (fwiw, we might not even need the index on bug_subscription_filter, so how bad for the DB is it to add it "just in case"?)
[12:35] <danilo> stub, ah, interesting, so the BTREE index on a tuple will be a BTREE on the first element of the tuple "first"?
[12:35] <stub> there is a good chance we won't need it, as the primary key index should be usable going in that direction too.
[12:35] <stub> but it will be faster, and just in case.
[12:36] <stub> danilo: I don't know the details of the structure.
[12:36] <danilo> stub, well, what I am saying that we are not going to be joining through this table from the direction of a bugsubscriptionfilter (iow, we won't be taking a set of bugsubscriptionfilters and look for all bugnotifications that it caused; at least not for now)
[12:37] <stub> So that is two reasons we might not need it :) I just put it there because your patch had it too.
[12:38] <danilo> stub, right, I just put it in for "just in case" (i.e. we might want to do that when we start trying to estimate how much mails is each filter generating)
[12:39] <danilo> stub, but I wonder if it is a drag on the DB and we shouldn't create such indexes "just in case" (iow, I am asking how bad is it to have an index that's not used?)
[12:40] <stub> It slows down inserts and chews some disk space, apart from that not much.
[12:40] <danilo> stub, right, thanks
[12:40] <danilo> stub, I think I'll leave this one in
[12:40] <stub> If the filters can be removed, we want the index.
[12:40] <LPCIBot> Project db-devel build (395): STILL FAILING in 5 hr 50 min: https://hudson.wedontsleep.org/job/db-devel/395/
[12:46] <danilo> stub, right, good point
[12:47]  * jtv wants hypothetical indexes
[12:58] <danilo> jtv, I want a hypothetical database ("if you need it, it'll be there" :)
[12:58] <jtv> Go buy hardware
[12:59] <danilo> jtv, hypothetical hardware?
[12:59] <jtv> hypotheticall, yes
[13:01] <danilo> jtv, there's not enough "all" for what we might need :)
[13:16] <LPCIBot> Project devel build (477): ABORTED in 1 hr 12 min: https://hudson.wedontsleep.org/job/devel/477/
[13:16] <LPCIBot> * Launchpad Patch Queue Manager: [r=thumper][bug=721134] Fix the heading alignment for the multi-line
[13:16] <LPCIBot> editors on the recipe index page.
[13:17] <bac> hi adeuring
[13:18] <adeuring> morning bac
[14:15] <bigjools> adeuring or bac, no rush, but I have a branch up for review if one of you can take it please
[14:15] <adeuring> bigjools: I'll look
[14:16] <bigjools> thank you
[14:37] <sinzui> So begins another day where the first 1.5 hours is spent working natty bugs
[14:40] <bigjools> natty is not yet released, right? :)
[14:45] <sinzui> I do not think people will be happy if it were released today
[14:47] <jcsackett> sinzui: you free to mumble about the messages stuff in about half an hour?
[14:48] <sinzui> sure
[14:48] <sinzui> if mumble/pulse works
[14:48] <sinzui> I had to fix the mic again this morning
[14:48] <adeuring> bigjools: PoppyAnonymousShell.openForWriting() has a "catch-all" except. I think we do not want to catch KeyboardInterrupt and SystemExit. And I think we should log an error for other exceptions.
[14:49] <adeuring> otherwise, the branch looks good, I think
[14:50] <bigjools> adeuring: that was cargo-culted from the parent class... I wasn't sure what to do about it TBH
[14:51] <jcsackett> sinzui: dig. i think all meeting plans these days involve a "natty-errors" fudge factor. :-P
[14:51] <adeuring> bigjools: admittedly, I am not familiar with twisted, so I am not sure about KBInterrupt and SystemExit. But nevertheless I think we should log other exceptions.
[14:53] <adeuring> "eating" exceptions simply scares me ;)
[14:53] <bigjools> adeuring: yeah
[14:54] <bigjools> adeuring: so I'll re-raise KeyboardInterrupt and SystemExit
[14:54] <bigjools> adeuring: oh wait
[14:55] <bigjools> adeuring: yes twisted has confused us both momentarily - the defer.fail() is effectively the same as re-raising the exception, it gets dealt with later
[14:56] <adeuring> bigjools: intersting. So,  IOError and OSError are re-raised too?
[14:56] <adeuring> ah, no, there no fail() call
[14:56] <bigjools> adeuring: no, they are converted to ftp errors
[14:57] <bigjools> ftp.errnoToFailure will return a defer.fail
[14:57] <adeuring> bigjools: right, thanks for the explanation, so r=me. But perhaps a small comment that twisted properly deals with the exceptions? (just to avoid the same question I asked again)?
[14:57] <bigjools> adeuring: yup, will do, thanks for the review
[14:58] <bigjools> I am blocked on landing this right now anyway
[14:59] <bigjools> talking of which, does it matter if we lay our own eggs in lieu of a proper Twisted release?
[15:08] <jml> gary_poster: hi
[15:18] <gary_poster> jml, hi on call but maybe will postpone call if your conversation will change the tenor of the call :-)  what is your topic?
[15:19] <jml> gary_poster: general mgmt stuff. It can wait.
[15:19] <gary_poster> ok cool will ping jml thanks
[15:19] <jml> gary_poster: np
[15:19]  * jml fetches tea & chocolate.
[15:34] <gary_poster> jml, ping?
[15:34] <jml> gary_poster: hi.
[15:34] <jml> gary_poster: skype? (mumble's broken for me atm)
[15:34] <gary_poster> hey.  Skype or mumble?
[15:34] <gary_poster> ok
[15:36] <abentley> jkakar: I'd like to be notified via a Zope event whenever objects of a particular type are removed from the store.  It looks like Storm does emit an event then, but I can't find any documentation of how that works.
[15:36] <abentley> jkakar: Do you have any pointers?
[15:37] <jkakar> Hmm, let me look at some code, one sec.
[15:43] <jkakar> abentley: Okay, so the only thing I can recommend is not really part of the public Storm library.
[15:43] <jkakar> abentley: I wouldn't rely on it not changing under you.
[15:44] <jkakar> abentley: Anyway, Storm has an internal event system which it uses to keep track of things.  You can hook into it, but as I said, it's not recommended.
[15:45] <abentley> jkakar: understood.  I already have a 95% solution, by overriding Foo.destroySelf.  Maybe that's enough.
[15:45] <jkakar> abentley: That's what I was going to recommend... providing a wrapper/hook on the public API.
[15:47] <abentley> jkakar: Yeah, it just wouldn't surprise me if someone did Store.remove instead of destroySelf at some point.
[15:47] <abentley> jkakar: It's more Storm-y.
[15:47] <jcsackett> sinzui: mumble?
[15:49] <jkakar> abentley: Right.
[15:49] <abentley> jkakar: Perhaps you could put a docstring in storm.event that says it's for internal use only?
[15:50] <jkakar> abentley: That's a good idea.  We desperately need to improve our documentation system... no one has taken up the charge to do it, though... I've made some small starts, but haven't managed to push through.
[16:34] <benji> anyone done a rockefuel-get lately and then not been able to make?  SyntaxError: invalid syntax (shipit.py, line 51)
[16:39] <benji> hmm, conflict markers in the file, trying to see if it's just a local problem or not
[16:40] <henninge> adeuring, bac: It would be great if either of you could look at my branch! It's UI work.
[16:40] <henninge> https://code.launchpad.net/~henninge/launchpad/devel-705176-sharing-info-on-page/+merge/51283
[16:41] <henninge> sinzui: Can you do a UI review on that, please? ^
[16:41] <sinzui> okay
[16:41] <adeuring> henninge: I'll look
[16:42] <henninge> adeuring, sinzui: thanks. I gotta run out now for 30 min but will be back to answer any questions ... ;-)
[17:21]  * henninge is back
[17:37] <henninge> adeuring: are you still reviewing?
[17:37] <adeuring> henninge: nearly done, give me five more minutes
[17:37]  * henninge sets count down on watch ;)
[17:37] <henninge> adeuring: cool, thanks ;)
[17:40] <adeuring> henninge: r=me with a few nitpicks
[17:40] <danilo> allenap, hey, sorry for missing out on that bit of extra review you asked for, had a nice, wild day — +1 for ignoring my lazy ass :)
[17:41] <allenap> danilo: :)
[17:43] <henninge> adeuring: Danke! Schönes Wochenende!
[17:43] <danilo> allenap, fwiw, if you run into problems, you can always change the user to be defined as group=launchpad when it inherits all the permissions of the "launchpad" user (though, you might know that already, but I am just saying :)
[17:44] <adeuring> henninge: Dir auch auch ein schönes Wochenede!
[18:19] <lifeless> moin
[18:21] <sinzui> looks like I win. I get to try a bug import
[18:24] <LPCIBot> Project db-devel build #396: STILL FAILING in 5 hr 7 min: https://hudson.wedontsleep.org/job/db-devel/396/
[18:55]  * jml has to go
[19:37] <jcsackett> are we still having ec2 problems? i just got back three ec2 runs which seem to have taken the full time, but show 0 tests run, 0 errors, 0 failures. log looks like everything actually ran.
[19:37]  * jcsackett is confused.
[19:41] <lifeless> jcsackett: hi
[19:41] <lifeless> jcsackett: windmill
[19:42] <jcsackett> lifeless: oh goodie.
[19:42] <jcsackett> (ah, the problems with splitpanes)
[19:43] <lifeless> I prefer F16's myself
[19:43]  * jcsackett laughs.
[19:43] <jcsackett> so, we're having windmill issues in the tree, still, or i have somehow blown up windmill in my branch?
[19:43] <lifeless> bit from column A
[19:43] <lifeless> bit from column B
[19:44] <jcsackett> righto.
[19:44] <lifeless> shiny: http://caniuse.com/
[19:52] <lifeless> sinzui: ping
[19:52] <sinzui> hi lifeless
[19:52] <lifeless> hi
[19:52] <lifeless> I'd like to mark bug 719182 wontfix
[19:52] <_mup_> Bug #719182: boolean interpretation for feature flags <feature-flags> <Launchpad itself:In Progress by sinzui> < https://launchpad.net/bugs/719182 >
[19:52] <lifeless> but I just noticed you're working on it
[19:52] <lifeless> and I don't want to be a nuisance
[19:53] <lifeless> the problem statement at the top is false: we don't have varying interpretations for booleans; that all got cleaned up by wgrants work
[19:53] <LPCIBot> Project devel build #478: STILL FAILING in 5 hr 52 min: https://hudson.wedontsleep.org/job/devel/478/
[19:54] <sinzui> fab
[19:54] <lifeless> thats ok with you ?
[19:54] <sinzui> Indeed it is.
[19:54] <lifeless> cool. I'll twiddle the knobs.
[19:55] <gary_poster> lifeless do you happen to know if there is a way to use the WITH statement in Storm?  Mucking about with SQL, I can get the 1200-1500ms query from bug 723999 down to 180ms simply, and if I can use the WITH statement somehow I can get it down to 50ms.
[19:55] <_mup_> Bug #723999: BugNomination:+edit-form structural subscriptions taking 4.8 seconds during nomination editing POST <story-better-bug-notification> <timeout> <Launchpad itself:Triaged by yellow> < https://launchpad.net/bugs/723999 >
[19:56] <lifeless> gary_poster: thats a decent improvement :)
[19:56] <gary_poster> :-)
[19:57] <lifeless> gary_poster: The short answer is 'probably not'
[19:57] <gary_poster> :-(
[19:57] <gary_poster> oh well
[19:57] <gary_poster> 180 is the big improvement, so I'll run with that
[19:57] <gary_poster> thanks
[19:57] <lifeless> storms compiler will put the SELECT at the start
[19:58] <gary_poster> :-/
[19:58] <lifeless> so we'd need to hack into that to actually support with (or similar) directly.
[19:58] <lifeless> you could use a temp table explicitly
[19:58] <gary_poster> how would I do that?
[19:58] <gary_poster> (pointing to an example or telling me what to grep for would be great)
[19:59] <lifeless> have you seen gavins hack to do distinct on ?
[19:59] <gary_poster> I don't think so
[19:59] <lifeless> SQL("distinct on foo 0 as ignore")
[19:59] <gary_poster> it didn't stivk with me if so
[19:59] <lifeless> and use that as the first thing in the select clause
[19:59] <lifeless> store.find((SQL("distinct on foo 0 as ignore"), Foo, Bar), ...)
[19:59] <lifeless> for _, foo, bar in result:
[20:00] <gary_poster> not entirely sure I follow but will grep to see if that helps
[20:00] <lifeless> you can probably inject a INTO TEMPORARY TABLE (I forget the syntax offhand ...) in the same way
[20:00] <lifeless> however
[20:00] <gary_poster> ah ok
[20:00]  * gary_poster waits for however ;-)
[20:00] <lifeless> then you've make the temp table, and use it in followups
[20:01] <lifeless> oh the however: 180*4=720ms, which is tolerable for a month or two
[20:01] <gary_poster> sure
[20:01] <gary_poster> since I'm focusing on it I want to see if I can get it down
[20:01] <gary_poster> 'cause 200ms is even better ;-)
[20:02] <lifeless> I am a little scared by the size of query, and if you have any concerns about the modelling that you inherited with this project, I stand ready to consult
[20:02] <lifeless> yeah, 200ms is even better
[20:02] <lifeless> if the same basic temp table is used by all 4 queries
[20:02] <gary_poster> the query is down to, say, 25 lines lifeless.  no worries there
[20:02] <lifeless> then a temp table can be an even bigger win than with - make it once, use it 4 times
[20:02] <gary_poster> (25 nicely formatted lines)
[20:03] <lifeless> gary_poster: \o/ that will be a significant benefit all of its own.
[20:03] <gary_poster> yeah
[20:03] <gary_poster> ok, I'll read up on temporary tables; I didn't realize you could use them within a transaction
[20:04] <lifeless> oh yeah, they are awesome
[20:04] <lifeless> variables FTW
[20:04] <gary_poster> :-)
[20:04] <abentley> deryck: could you have a look at https://code.launchpad.net/~abentley/launchpad/refactor-merge-job/+merge/51359 ?  I may have used too much magic.
[20:04] <gary_poster> ok thank you very much lifeless.  I'll dig, and come back up for air with you if I encounter confusion.
[20:05] <lifeless> cool
[20:05] <deryck> abentley, sure.  I'll take a look.
[20:05] <abentley> deryck: thanks.
[20:17] <abentley> bac: Could you please review https://code.launchpad.net/~abentley/launchpad/refactor-merge-job/+merge/51359 ?
[20:22] <lifeless> jcsackett: you wanted to talk about spam
[20:23] <jcsackett> yes, but i think it's no longer necessary.
[20:23] <lifeless> ?
[20:23] <jcsackett> you were concerned about performance implications for pushing the visible attr down into imessage and having multiple message systems use it, yeah?
[20:23] <lifeless> yes
[20:24] <lifeless> message is fat, link tables are pretty darn narrow
[20:24] <lifeless> we probably need an overhaul on message
[20:24] <lifeless> e.g. drop the fti index
[20:24] <jcsackett> right. i'm thinking as far as not having to rewrite code too much, going for an IHideable or similar, and having shared rules there. it means some reimplemenation, but at least reliably linked.
[20:25] <bac> abentley: yes
[20:25] <jcsackett> rather than questions being entirely different from bugs, and so forth.
[20:25] <lifeless> jcsackett: bugmessage is 188MB, message is 2.4GB
[20:26] <abentley> bac: thanks!
[20:26] <lifeless> jcsackett: postgresql has to read every row that indexes say *might* be a match, because the liveness of the row is only in the row
[20:30] <jcsackett> lifeless: right.
[20:31] <lifeless> jcsackett: this doesn't mean we /can't/ put it on message, but it does mean we need to try the migration, measure the impact
[20:31] <lifeless> jcsackett: it -might- be faster than it is now. It might be slower.
[20:31] <jcsackett> lifeless: yeah, i'm going to give it a try.
[20:31] <lifeless> jcsackett: what I know *for sure* is that we have issues in this area, and we doing things that are hard to undo (e.g. schema schanges) should be done with care.
[20:32] <lifeless> jcsackett: as a test case, i give you http://bugs.launchpad.net/bugs/1
[20:32] <lifeless> oops
[20:32] <_mup_> Bug #1: Microsoft has a majority market share <iso-testing> <ubuntu> <Clubdistro:Confirmed> <Computer Science Ubuntu:Invalid by compscibuntu-bugs> <EasyPeasy Overview:Invalid by ramvi> <GNOME Screensaver:Won't Fix> <Ichthux:Invalid by raphink> <JAK LINUX:Invalid> <The Linux OS Project:In Progress> <metacity:In Progress> <OpenOffice:In Progress by lh-maviya> <Tabuntu:Invalid by tinarussell> <Tivion:Invalid by shakaran> <Tv-Player:New> <Ubuntu:I
[20:32] <lifeless> jcsackett: https://bugs.launchpad.net/ubuntu/+bug/1?comments=all
[20:32] <_mup_> Bug #1: Microsoft has a majority market share <iso-testing> <ubuntu> <Clubdistro:Confirmed> <Computer Science Ubuntu:Invalid by compscibuntu-bugs> <EasyPeasy Overview:Invalid by ramvi> <GNOME Screensaver:Won't Fix> <Ichthux:Invalid by raphink> <JAK LINUX:Invalid> <The Linux OS Project:In Progress> <metacity:In Progress> <OpenOffice:In Progress by lh-maviya> <Tabuntu:Invalid by tinarussell> <Tivion:Invalid by shakaran> <Tv-Player:New> <Ubuntu:I
[20:33] <lifeless> jcsackett: that url is (now) (largely) driven by messaging system performance
[20:33] <jcsackett> i'm still impressed the non-all comments version renders, btw. :-P
[20:33] <lifeless> jcsackett: actually, thats a little unfair of me : we're looking at pagination - but still - the count(*) in a batchnavigator isn't free
[20:33] <jcsackett> no indeed.
[20:34] <jcsackett> i'll probably getting into that stuff more on monday. today has been hunting down permissions stuff, since the visible attribute being used for culling spam on bug comments is admin only, and we would like registry to be able to deal with it.
[20:34] <lifeless> jcsackett: its not reliable yet, I need to keep pushing it
[20:38] <bac> abentley: why do you use a staticmethod for _register_subclass instead of a classmethod?
[20:39] <abentley> bac: it had to be invoked in TranslationPackagingJob, and that didn't work with a classmethod.
[20:40] <abentley> bac: There's no syntax for "invoke this class's classmethod, but with this other class as the first parameter."
[20:40]  * bac looks
[20:41] <lifeless> that would be a definitional problem - unless the otherclass is a subclass
[20:57] <abentley> lifeless: otherclass is indeed a subclass.
[20:58] <lifeless> abentley: does it define its own version of that method ?
[20:58] <abentley> lifeless: yes.
[20:58] <lifeless> ah
[20:58] <lifeless> that will indeed be tricky
[21:02] <abentley> bac: The follow-on is here: https://code.launchpad.net/~abentley/launchpad/translation-splitting-job/+merge/51371
[21:02] <abentley> bac: You can see that these refactorings make the actual definition of TranslationSplitJob very small.
[21:08] <abentley> bac: just noticed schedule_merge needed to be deleted.  Pushed now.
[21:27] <abentley> bac: thanks for your review.  Updates pushed.
[22:27] <lifeless> also, I hate sample data
[22:27] <lifeless> lib/lp/soyuz/doc/closing-bugs-from-changelogs.txt is going boom because of the dsp.currentrelease change to not pick a crazy random package.
[22:28] <jcsackett> lifeless: sample data is the devil. kill the doctest--you have solid unittests.
[22:29] <lifeless> jcsackett: we do? kill the whole thing?
[22:29]  * jcsackett considers.
[22:29] <jcsackett> i *thought* we did.
[22:29] <jcsackett> perhaps do a check, and then kill it.
[22:29] <lifeless> where would I find the unit tests?
[22:31] <jcsackett> crap, i don't actually see a test that exactly handles that.
[22:31] <jcsackett> sorry for the false hope.
[22:32] <jcsackett> fair bit of that does look to me like it would be better covered by unit tests, but i imagine you don't really want to write a ton more tests if you can just update the doc.
[22:33] <jcsackett> sinzui: are we doing standup this evening?
[22:35] <sinzui> jcsackett: yes.
[22:49] <lifeless> wgrant: while you're around, whats the easiest way in a doctest of doing an upload to the currentseries of ubuntu - see the error i've just forwarded you
[22:50] <wgrant> lifeless: Use the factory.
[22:50] <wgrant> Or maybe SoyuzTestPublisher.
[22:50] <wgrant> Depending on what exactly you want.
[22:50] <lifeless> wgrant: well, thats why I'm asking :)
[22:50] <lifeless> I had tw oissues in my branch to nuke Distro.getCurrentSourceReleases()
[22:50] <wgrant> Aha.
[22:50] <wgrant> I see now.
[22:50] <lifeless> one was a type items() rather than values()
[22:50] <lifeless> thats fixed
[22:51] <lifeless> the closing bugs upload one however is epic fail sample data
[22:51] <lifeless> this isn't a critical bug, I want to sweep it under the carpet for later polish
[22:52] <lifeless> so I was figuring that if I do a new upload of cdrkit to hoary
[22:52] <lifeless> it will work
[22:53] <wgrant> lifeless: Try just using factory.makeSourcePackageRelease
[22:53] <wgrant> It may need more than that.
[22:53] <wgrant> But we'll see.
[22:53] <lifeless> is there a global factory in doctests?
[22:53]  * lifeless doesn't do doc tests :)
[23:00] <wgrant> lifeless: I think 'factory' may be a factory.
[23:00] <wgrant> But not entirely sure.
[23:00] <wgrant> I don't write new ones.