[00:00] <wgrant> Hmm, how many tests do we have?
[00:00] <lifeless> how many would you like?
[00:00] <wgrant> Since this run just finished in less than three hours.
[00:01] <wgrant> 11369 tests.
[00:01] <lifeless> nice
[00:01] <wgrant> Not sure how long it should take on this machine, so I guess it could be right.
[00:01] <lifeless> cleaner layering ?
[00:02] <wgrant> Three errors left to fix, then could you throw it at EC2?
[00:02] <lifeless> delighted to
[00:07] <wgrant> lifeless: PgTestSetup only respects LP_TEST_INSTANCE if it matches the value in BaseLayer. But TestPgTestSetup is layerless, so BaseLayer is unconfigured.
[00:07] <wgrant> I suppose I could just call BaseLayer.setUp.
[00:07] <wgrant> Or mvoe TestPgTestSetup into BaseLayer...
[00:08] <wgrant> Ah, it already calls BaseLayer.setUp in other places. I guess I'll do that.
[00:08] <lifeless> ahm
[00:08] <lifeless> I see
[00:09] <lifeless> I the dynamic stuff is only part polished - that is, it works.
[00:09] <wgrant> Yep.
[00:09] <lifeless> but we should get rid of the support for static instances altogether (again, have to remove the persistent helper support)
[00:09] <wgrant> Maybe once the librarian doesn't take 8 seconds to start.
[00:10] <lifeless> zcml.
[00:10] <lifeless> I keep saying I want to nuke it; I really am serious :)
[00:10] <lifeless> well
[00:10] <lifeless> I want to remove the global nature of it
[00:10] <lifeless> we shouldn't pay to import all of lp to run 300 lines of code
[00:12] <wgrant> Sure.
[00:18] <wgrant> lifeless: Why is LP_TEST_INSTANCE an envvar?
[00:19] <wgrant> It presumably won't be crossing process boundaries...
[00:19] <lifeless> helpers
[00:19] <wgrant> Hm?
[00:19] <lifeless> librarian etc
[00:19] <lifeless> gnerally we'll want to set a config section up
[00:19] <wgrant> Don't they use LPCONFIG?
[00:20] <lifeless> but it can be useful to introspect
[00:20] <lifeless> also
[00:20] <lifeless> the reinvoke logic
[00:20] <lifeless> which reinvokes the runner
[00:21] <wgrant> So, at the moment PgTestSetup respects LP_TEST_INSTANCE. But it only does that when BaseLayer is set up, and BaseLayer sets LP_TEST_INSTANCE to the PID.
[00:21] <wgrant> So the two tests that PgTestSetup respects the var are a little wrong.
[00:21] <lifeless> hang on
[00:21] <lifeless> why do you say 'But it only does that when BaseLayer is set up,'
[00:22] <lifeless> thats now how I read the code in lib/canonical/ftests/pgsql.py
[00:22] <lifeless> s/now/not/
[00:22] <wgrant> In PgTestSetup.__init__, the end of the PgTestSetup.dynamic branch checks that the instance name matches BaseLayer.
[00:23] <lifeless> to call config.reloadConfig()
[00:23] <wgrant> If it matches, it uses the calculated name. If not, it reverts to the old one.
[00:23] <jml> lifeless: I have some more pictures
[00:23] <lifeless> jml: cool
[00:23] <jml> lifeless: http://people.canonical.com/~jml/lpstats/good-and-bad.png
[00:23] <jml> lifeless: http://people.canonical.com/~jml/lpstats/good-and-bad-by-time.png
[00:23] <jml> and then different versions of the same data...
[00:23] <wgrant> Ah, nice.
[00:24] <jml> http://people.canonical.com/~jml/lpstats/how-many-tests-are-slow.png
[00:24] <jml> http://people.canonical.com/~jml/lpstats/good-and-bad-by-time-bar.png
[00:24] <jml> subunit-ls + openoffice
[00:24] <lifeless> jml: do you have one with the area
[00:25] <lifeless> test time per test * tests in that bucket
[00:25] <jml> lifeless: yes, that's what good-and-bad-by-time is
[00:25] <jml> lifeless: it's the sum of the times of tests in that bracket
[00:25] <lifeless> cool
[00:25] <lifeless> so, start on the 100s tests?!
[00:26] <jml> lifeless: yeah, exactly
[00:26] <jml> I also like that we actually have six orders of magnitude of test run times
[00:27] <jml> the sole 1000s test is actually ~200s
[00:27] <lifeless> you could drop the first 3 off without loss of usefulness
[00:27] <jml> I guess I could have been more strictly logarithmic
[00:27] <wgrant> jml: Not the 120s Windmill test that I just found?
[00:27] <wgrant> Or does that count as 100s?
[00:27] <jml> wgrant: subunit-ls
[00:27] <jml> sorry...
[00:28] <lifeless> wgrant: that may be the same one, machine variation.
[00:28] <wgrant> lifeless: Indeed.
[00:28] <wgrant> But most of it is sleeping.
[00:28] <wgrant> So...
[00:28] <jml> gzip -dc some-run.subunit.gz | subunit-ls --times | awk '{ print $2 " " $1 }' | sort -n | tail
[00:28] <lifeless> jml: I'd like a leverage graph
[00:28] <jml> wgrant: not-found-traversal.txt used to be mostly sleeping
[00:29] <lifeless> jml: http://people.canonical.com/~jml/lpstats/good-and-bad-by-time.png scaled down by tests-per-bucket
[00:29] <jml> as in, the more tests the wider the bar, say?
[00:30] <lifeless> jml: or less height
[00:30] <wgrant> jml: Yeah, test_inline_subscriber is indeed the longest test.
[00:30] <lifeless> jml: 'time spent running those tests / count(those tests)'
[00:30] <jml> right
[00:30] <wgrant> Followed by two Soyuz ones /o\
[00:30] <jml> was just typing that
[00:30] <jml> lifeless: easy enough to do
[00:31] <lifeless> I think that that would show the buckets with the most return - amount of time saved per test fixed in that bucket (on average)
[00:31] <jml> I might also shift to be log(run_time) rather than n s.t. 10**(n-1) < run_time <= 10**n
[00:31] <jml> int(log(run_time)), of course
[00:32] <lifeless> wgrant: so I'm confused
[00:32] <lifeless> wgrant: this branch was spread over 2?3?months
[00:32] <jml> lifeless: btw
[00:33] <lifeless> and more tz changes than is desirable.
[00:33] <wgrant> Heh.
[00:33] <jml> lifeless: my last two blog posts link to paste bins with subunit scripts
[00:33] <lifeless> jml: yes, I saw ;)
[00:33] <jml> lifeless: in my ideal world, someone would make them better and upstream them.
[00:34] <wgrant> lifeless: Do you see what I mean about the BaseLayer thing?
[00:34] <wgrant> At the end of the PgTestSetup.dynamic branch.
[00:34] <lifeless> wgrant: I'm trying to remember *why*
[00:34] <wgrant> Ahh.
[00:35] <lifeless> wgrant: do what makes sense to you
[00:35] <wgrant> Apart from that one there are only three Twisted-ish tests failing, all of which have an 'error' but no error message.
[00:35] <lifeless> if all the tests pass, we can land this devilish branch
[00:35] <wgrant> Which is a little disturbing.
[00:35] <lifeless> and iterate later
[00:35] <lifeless> its already had plenty of skew issues with trunk.
[00:35] <wgrant> Yep.
[00:36] <lifeless> jml: I think that would be ideal too
[00:36] <wgrant> I'll just make it set up BaseLayer and use the PID instead of 'xx'.
[00:36] <wgrant> For now;
[00:36] <jml> lifeless: it'll be a little while before I move on to subunit hacking though. still have a chunk of testtools stuff that I want to get done
[00:37] <jml> lifeless: I'm most of the way through a draft of testtools manual for test authors
[00:38] <lifeless> cool
[00:39] <jml> it's making me realize there's stuff I want to be able to say but can't yet
[00:42] <wgrnat> Any ideas on how to debug http://paste.ubuntu.com/537289/? Three errors left in the branch, but no error message.
[00:42] <wgrnat> I've not seen this before...
[00:43] <lifeless> isn't that what henninge was seeing?
[00:43] <lifeless> perhaps merge devel
[00:44] <wgrnat> lifeless: Hah, true, it's on devel too.
[00:45] <lifeless> still?
[00:45] <wgrnat> Yeah.
[00:45] <lifeless> :<
[00:45] <lifeless> buildbot is clean
[00:45] <wgrnat> As is Hudson.
[00:45] <lifeless> ><
[00:45] <wgrnat> But it's reproducible on three machines here.
[00:45] <wgrnat> All Maverick, though.
[00:46] <lifeless> >,
[00:46] <lifeless> ok
[00:46] <lifeless> push
[00:46] <lifeless> me pull
[00:46] <lifeless> we ec2
[00:46] <wgrant> Pushing...
[00:47] <wgrant> Done.
[00:49] <lifeless> its with ec2 now
[00:50] <wgrant> Thanks.
[00:50] <lifeless> the lib/lp/registry/tests/test_mlists.py was fugly
[00:50] <wgrant> Did you change it?
[00:50] <lifeless> we shouldn't need to use popen directly  - or at least have a helper for passing the right LPCONFIG around.
[00:51] <wgrant> This one was sort of special, since it needs the appserver config.
[00:51] <lifeless> still
[00:51] <wgrant> I removed the other LPCONFIG stuff.
[00:51] <lifeless> no i didn't
[00:53] <lifeless> librarian next?
[00:53] <wgrant> Just waiting for it to merge.
[00:53] <wgrant> Come on LP...
[01:02] <lifeless> I love the way the upstream/downstream linking is coming together
[01:06] <wgrant> lifeless: --parallel is rather silent.
[01:07] <lifeless> wgrant: feel free to slap any reporter you want on it
[01:07] <wgrant> lifeless: No idea whatsoever how to do that!
[01:07] <lifeless> wgrant: the easiest way is --subunit | subunit2pyunit
[01:07] <wgrant> It seems to be working, as postgres is going crazy.
[01:07] <wgrant> Aha.
[01:08] <wgrant> Thanks.
[01:08] <lifeless> or --subunit | tribunal -
[01:09] <jml> lifeless: http://people.canonical.com/~jml/lpstats/duration-over-count.png
[01:09] <lifeless> jml: interesting
[01:09] <lifeless> thanks
[01:10] <jml> lifeless: np
[01:10] <jml> basically, there are "only" ~250 tests that are between 10s and 100s long
[01:11] <jml> whereas all the other categories are between ~800 and ~5000
[01:12] <jml> if I could do SQL on subunit streams, I could probably get a per-layer thing fairly easily
[01:14] <lifeless> that would be nice
[01:14] <lifeless> though time-in-layer isn't very intereseting to me
[01:15] <jml> I guess not
[01:15] <jml> I'd like to break things down by package a bit more too
[01:15] <jml> but that involves still more Python that I can't be bothered writing
[01:18]  * jml off
[01:19] <lifeless> ciao
[03:00] <lifeless> [03:00] <lifeless>     Hard / Soft  Page ID
[03:00] <lifeless>      115 / 5419  Archive:+index
[03:00] <lifeless>       92 /  233  BugTask:+index
[03:00] <lifeless>       23 /  244  Distribution:+bugs
[03:00] <lifeless>       13 /  134  ProjectGroupSet:CollectionResource:#project_groups
[03:00] <lifeless>       11 /    4  Cve:+index
[03:00] <lifeless>        7 /   12  DistroSeriesLanguage:+index
[03:00] <lifeless>        6 /  282  Distribution:+bugtarget-portlet-bugfilters-stats
[03:00] <lifeless>        6 /  188  POFile:+translate
[03:00] <lifeless>        6 /    4  NullBugTask:+index
[03:00] <lifeless>        6 /    3  Person:+bugs
[04:49] <lifeless> wgrant: zomg
[06:14] <lifeless> wgrant: pqm bailed, dunno why
[06:14] <lifeless> have forwarded you the mail
[06:14] <lifeless> oh, I do know why
[06:14] <lifeless> it thinks a schema patch is there, I think
[06:25] <lifeless> sent to db-devel instead
[07:04] <wgrant> lifeless: Ah, of course, I had to change fti.py :/
[08:23] <lifeless> and its landed
[08:24] <wgrant> Some time ago.
[08:24] <wgrant> And Hudson hasn't blown up yet.
[08:28] <wgrant> lifeless: librarian branch seems to be fairly happy. Just a few hardcoded URLs to sort out.
[08:28] <wgrant> And an odd localhost/launchpad.dev conflict in URL generation.
[08:28] <lifeless> wgrant: cool
[08:29] <lifeless> wgrant: jml cherrypicked an early subsection of my work to debug some issues with librarian tests
[11:48] <jml> lifeless: oh yeah, I forgot to tell you about that
[14:05] <nigelb> heh, only now I saw the lp repo, love the "<kiko> we are changing the world, one commit at a time"
[17:00]  * maxb chuckles at discovering /srv/importd.launchpad.net/production/launchpad-rev-11887-sigh/ in logs :-)
[17:24] <lifeless> jml: :)
[17:25] <jml> lifeless: I've got to head out now, but I'd appreciate it if you could look at the new & updated testtools MPs
[17:26] <lifeless> shure
[17:26] <lifeless> jml: did you see
[17:26] <lifeless> https://code.launchpad.net/~lifeless/launchpad/subunit/+merge/42023
[17:26] <jml> lifeless: I did, but not the details.
[17:26] <jml> lifeless: it's good stuff :)
[17:26] <lifeless> jml: https://code.launchpad.net/~jml/testtools/unexpected-success-2/+merge/42050 looks wrong
[17:27] <lifeless> oh
[17:27] <lifeless> its an incremental diff
[17:27] <lifeless> I think that needs to be called out
[17:27] <lifeless> or something
[17:27] <jml> it's still a beta feature. file bugs.
[17:27]  * jml really does have to go
[17:27] <jml> lifeless: thanks for looking
[22:54]  * thumper calmly walks away from the laptop to avoid putting his fist through the screen
[22:54] <thumper> mwhudson: do you have a minute to talk?
[23:01]  * thumper lunchinates
[23:12] <mwhudson> thumper: in general, yes
[23:24] <StevenK> wgrant: O hai
[23:27] <wgrant> StevenK: Hi.
[23:28] <StevenK> wgrant: What do you think of https://code.edge.launchpad.net/~stevenk/launchpad/db-spph-ancestry/+merge/41943 ?
[23:29] <wgrant> StevenK: 'The previous release of this source package.'
[23:29] <wgrant> It's not always.
[23:29] <wgrant> It could be a previous override.
[23:30] <wgrant> Also, have you checked that we can sanely populate it, in all locations that create SPPHs?
[23:30] <wgrant> Also, in the case of a copy, it will be in another archive.
[23:30] <StevenK> wgrant: I've been checking that we can actually populate it for existing data
[23:38] <wgrant> I'd quite like to add a creator field at the same time.
[23:38] <wgrant> It would mean that we had actual proper copying histories.
[23:55] <StevenK> wgrant: This would work much better if I actually knew all the places SPPHs were created :-)
[23:56] <wgrant> StevenK: Search for all invocations of SourcePackagePublishingHistory and newSourcePackagePublishingHistory?
[23:56] <lifeless> wgrant: so, reckon on fixing Archive:+index today
[23:56] <wgrant> Ah, yeah, got distracted by parallel testing.
[23:57] <lifeless> a good distraction to be sure