/srv/irclogs.ubuntu.com/2012/10/25/#launchpad-dev.txt

StevenKwgrant: https://code.launchpad.net/~stevenk/launchpad/db-destroy-potmsgset-potemplate/+merge/13129400:05
StevenKwallyworld, wgrant: https://code.launchpad.net/~stevenk/launchpad/deal-with-unsynched-bugwatch-comments/+merge/13129300:05
wallyworldStevenK: shouldn't test_can_delete_watch() test that the bug watch has been deleted?00:11
StevenKHow do you suggest I test that something is deleted? :-)00:12
wallyworldask the db if it is there00:13
wallyworldthe doc test did it00:13
wallyworldalso, what about that bug which requires the Not()00:13
wallyworldit seems the Not() is removed now00:13
StevenKThat bug is marked as Fix Released00:16
wallyworldah ok00:16
wallyworldthat's a problem in general - bugs get marked as fixed but the xxxs stay in the code00:17
wallyworldmaybe the bugs should have the xxxs listed00:17
StevenKwallyworld: http://pastebin.ubuntu.com/1303889/00:17
wallyworldthat works i think, thanks00:18
* StevenK fixes it so it actually works00:18
StevenKwallyworld: I like http://pastebin.ubuntu.com/1303891/ much better00:19
wallyworldStevenK: my brain is dumb today - how does the branch fix the issue? it seems the same query is run as before the branch?00:19
StevenKwallyworld: Today? :-P00:19
wallyworldwell, more than usual00:19
wallyworldthe second attempt is better yes00:20
mwhudsonhuh00:20
mwhudsonhttps://dev.launchpad.net/CleaningUpOurCode talks about make xxxreport00:20
mwhudsonwhich is a Makefile rule that exists00:20
mwhudsonbut doesn't work00:20
* wallyworld didn't know about that report00:20
StevenKwallyworld: Right, so before the view code was using IBugWatch.getImportedBugMessages() which wanted both BugMessage.bugwatch == self and BugMessage.remote_content_id != None. The new method is IBugWatch.getBugMessages() which only checks BugMessage.bugwatch == self.00:21
mwhudsonwallyworld: you reviewed the branch that deleted it :-)00:21
StevenKwallyworld: As a bonus, I refactored IBugWatch.getImportedBugMessages() to call IBugWatch.getBugMessages() to save LoC.00:21
wallyworldmwhudson: oh, right. i didn't look at the contents. the file was just moved to lp-dev-utils00:22
wallyworldStevenK: ok, thanks. obvious now. r=me00:23
StevenKwallyworld, mwhudson: I've done a drive-by to drop that Makefile target in the branch00:24
StevenKwallyworld: In the one you just reviewed, if you don't mind much00:24
wallyworldsure, np. i didn't realise the makefile target was there. curtis just said to move the files across to lp-dev-utils which i did00:25
wallyworldi'll update the wiki00:26
mwhudsonThere are 5244 XXX comments in revno: 16183.00:29
StevenKYou're a little out of date00:31
mwhudsononly a couple of days i thought?00:31
StevenKOnly 5 revs, so like yesterday00:31
StevenKSorry, 6 revs00:32
sinzuimwhudson, I think the page is somewhat outdated. I was given instructions to make it obsolete by tying all the XXXs there were about bugs to real bugs in Lp, then stop using the script00:41
sinzuiThat was 3 years ago I think00:42
mwhudsonsinzui: yes, it all looks a bit stale00:42
StevenKwgrant: Can haz db review?01:17
wgrantStevenK: Sure01:18
StevenKwgrant: https://code.launchpad.net/~stevenk/launchpad/db-destroy-potmsgset-potemplate/+merge/13129401:18
StevenKwgrant: Should I hold off landing that until tonight?01:27
wgrantStevenK: Please do01:28
wgrantThere's a bit of a queue01:28
StevenKWhere a bit is 2 :-P01:28
wgrantAnd no rush on this01:28
StevenKhttps://oops.canonical.com/oops/?oopsid=OOPS-d79b482989c5e4175a55160a8e1aee5c01:31
StevenK5 second translations SQL statement, and I can't work out which bit of the code is doing it01:31
lifelessStevenK: you've got the backtrace01:32
lifelesssure01:32
lifelessly01:32
wgrantNot if it's from a resultset that's lazily evaluated later01:33
StevenKI've found the method that is directly respsonsible, anyway01:33
StevenKITranslationsPerson.suggestReviewableTranslationFiles()01:33
lifelesswgrant: ugh true. Another reason to dislike such.01:33
StevenKYay Storm01:34
StevenK... This query is disgusting01:35
StevenKwgrant: http://pastebin.ubuntu.com/1303986/01:41
StevenKThat's with it hot, cold is something like 116 seconds01:42
mwhudsonis something in there a view?  that seems surprisingly horrible01:43
* mwhudson is just waiting for a backup to finish before disappearing, don'01:44
* mwhudson is just waiting for a backup to finish before disappearing, don't let me distract you01:44
StevenKmwhudson: Yeah, pulled in via TranslationsPerson:+index01:44
wgrantNot that sort of view :)01:44
mwhudsonStevenK: i mean database view :)01:44
StevenKOh, no.01:45
=== _mup__ is now known as _mup_
StevenKThankfully01:45
mwhudsonalso what happened here?01:45
mwhudsonORDER BY POFile.date_changed; > 0uched >= '2012-03-16 06:00:00+00:00'tor.transla01:45
StevenKThat would be readline01:45
StevenKhttp://pastebin.ubuntu.com/1303993/ better01:47
mwhudsonah01:47
mwhudsonthe query in the oops looks more horrible :)01:47
mwhudsonor indeed, that one01:47
StevenKwgrant: So how do I start to work out what is causing the slowness instead of 'the whole thing' ?01:49
wgrantWell01:49
wgrantThe whole thing01:49
wgrantWork out what the query is being used for01:49
wgrantMake sure Launchpad never thinks of doing it again01:49
StevenKIt's a table of suggestions they could work on01:50
StevenK'alsa-utils needs 1 string review in Spanish01:50
wgrantStevenK: First step is to get a version of that query that doesn't make one wish to be blind01:52
wgrantie. indent it nicely01:52
StevenKwgrant: http://pastebin.ubuntu.com/1304003/01:53
wgrantIt burns01:53
wgrantOh god01:53
wgrantIt burns01:53
wgrantThat's not indented, that's deindented.01:54
StevenKYou can blame sqlformat for that01:54
mwhudsonhttp://www.dpriver.com/pp/sqlformat.htm appears to do a better job01:55
wgranthttp://pastebin.ubuntu.com/1304010/01:56
wgrantAlthough mwhudson's link isn't bad01:57
StevenKhttp://pastebin.ubuntu.com/1304014/01:57
wgrantStevenK: So, what's the query trying to do?02:00
StevenKwgrant: It is trying to return a list of up to 9 projects/packages that the person could review strings on.02:02
wgrantRight02:02
StevenKwgrant: So, now that I've had lunch02:43
wgrantStevenK: Indeed02:54
StevenKwgrant: So I'm not comfortable just ripping out the functionality, but it only caused 21 OOPSes yesterday02:58
wgrantStevenK: I'd see if the query performs reasonably for any people at all02:58
StevenKwgrant: Based on the bug, it is only used if you load up your own +translations page02:59
wgrantSure03:00
wgrantBut more than that one person loads up their own +translations pages03:00
StevenK3501ms for me, since I know my DB ID03:01
StevenKSo, "No." ?03:01
StevenK              ->  Index Scan using pofiletranslator__person__pofile__key on pofiletranslator  (cost=0.00..0.97 rows=1 width=4) (never executed)03:01
StevenKIs that postgres' way of saying that I have no pofiles and so it doesn't need to index scan?03:02
wgrantWell, it never got to a point where it needed to do that scan03:02
StevenK                                       ->  Materialize  (cost=8940.46..12479.23 rows=24747 width=16) (actual time=4.288..25.864 rows=24756 loops=42)03:03
wgrantPossibly because all the pofiles were already filtered out by that point03:03
StevenKHm, haven't seen that one before03:03
wgrantStevenK: It's used when a join can use a reasonable (ie. fits in memory) subset of a table more efficiently than the whole one03:04
wgrantSo it'll fetch that subset into an automatic temporary table in RAM03:05
wgrantOnce, usually03:05
wgrantThen the join can loop over that subset more efficiently03:05
wgrantSo it's like a seqscan, except over a subset of the table03:06
StevenKAh03:06
StevenKSo, the whole thing is a mess, and looks like it performs horribly no matter who the person is03:07
wgrantRight03:07
wgrantI'm not sure how much better we can actually make it03:07
wgrantGiven that what it's doing is fairly hideous03:07
StevenKYeah, 3546 ms for lifeless, since his ID is so trivial03:07
StevenKwgrant: I should /+daily-builds it?03:08
lifelessit should be better than it was :)03:08
wgrantOnly marginally03:08
StevenKlifeless: Yeah, I think this query is so terrible that it doesn't matter who we ask it about03:10
wgrantStevenK: Are you sure you got the right method?03:15
wgrantI don't think it's the one you mentioned03:16
StevenKLooks right to me, based on the call chain and the query03:16
wgrantStevenK: I think it's getReviewableTranslationFiles, not suggestReviewableTranslationFiles03:17
wgrantIndeed, the traceback confirms it's _review_targets03:19
StevenKHmmmm03:22
StevenKI wonder if I've deleted too much03:22
StevenKwgrant: Is this where you say "Impossible!" ?03:26
wgrantNo03:29
wgrantThis is very possible03:29
wgrantThere's one big simplification in getReviewableTranslationFiles03:29
wgrantWhich makes things much easier03:29
* StevenK calls revert a lot03:30
StevenKwgrant: Now, share?03:31
wgrantIt's trying to find suggestions that the user can review, as you say03:31
wgrantBut, more specifically, the relevance is based on whether they've translated in them recently03:32
wgrantThe last join is a big win03:32
wgrantAs it restricts the set to those pofiles for which there is a recent pofiletranslator for the person03:32
StevenKThe method doesn't do that already?03:34
wgrantIt does.03:34
lifelessbut if you did it earlier, it might work better03:42
StevenKwgrant: Oh, you're saying we shouldn't do that join?03:42
StevenKThis code isn't particularly clear to me, and my blocked sinuses are not helping matters.03:42
wgrantWhat lifeless said03:44
wgrantPeople generally translate fewer POFiles than there are POFiles in all of Launchpad03:45
wgrants/People/A single person/03:45
StevenKIE, a CTE?03:45
wgrantSo it's likely to be more efficient to work from the list of recently translated pofiles03:45
wgrantThat would be a good start03:45
wgrantIt'll probably require a bit more fiddling03:45
wgrantAs there's a lot of joins, so it's not necessarily going to be able to optimise very well03:46
wgrantBut I'd start by trying to coerce it into starting from POFileTranslator03:46
StevenKGiven the function brings together the query via calling functions, this is going to be ... fun03:46
wgrant(this time I don't have a <20ms solution yet)03:46
StevenKHaha03:46
StevenKOh ugh, trying to pull out TeamParticipation makes it all unravel, because that's JOINed via TranslationGroup which is pulled in via Project/Distribution and then POTemplate03:49
wgrantStevenK: Yeah03:51
wgrantIt's a bit ugly03:51
StevenKI can see how starting from POFileTranslator.person and Translator.translator is a win, but I can't quite work out how to do that03:53
wgrantPull it out bit by bit until it works03:54
wgrantThen try to compress it back into something that's not hideous03:54
wgrantBut still works relatively quickly03:54
wgrantAt this point we know the sort of plan we want03:55
wgrantWe just need to convince postgres of it03:55
StevenKwgrant: http://pastebin.ubuntu.com/1304155/03:58
wgrantI have a 15ms query that mostly works04:01
wgrantBy "mostly works" I mean "returns some similar results but isn't actually the same thing and I haven't worked out why yet"04:01
wgrantAlso it's pretty fugly04:01
StevenKwgrant: http://pastebin.ubuntu.com/1304156/ is as far as I've gotten, but it's still 3150ms04:03
StevenKSo better, but still terrible04:03
wgrantOh04:07
wgrantIt helps if I use productseries rather than distroseries twice04:07
wgrantBut still, 30ms and it seems correct04:08
wgrantI have four CTEs: recent_pofiles, reviewable_groups, reviewable_distroseries, reviewable_productseries04:08
StevenKwgrant: Are you going to share, or do I need to rewrite my query until it matches? :-)04:12
wgrantJust checking some stuff04:13
wgranteg. performance for other people04:13
wgrantStevenK: http://paste.ubuntu.com/1304165/04:14
StevenK(POTemplate.productseries, POFile.language) IN (SELECT * FROM translatable_productseries)04:15
StevenKThat's pretty awesome04:15
StevenKAnd sneaky04:15
wgrantI try.04:15
StevenKHeh, it's as slow as the old hot query when it's cold.04:16
StevenKIf that sentence makes sense.04:16
StevenKHm, it seq scans both distroseries and distribution04:17
StevenKBut they aren't large04:17
wgrantIt can be indexed if needed, but those tables are so small it probably wouldn't use them04:18
StevenKThe SubPlan 5 and 6 are the above awesomeness I pasted?04:18
wgrantYeah04:19
StevenK Total runtime: 0.543 ms04:19
StevenKFor me04:19
wgrantRight, because pofiletranslator will have nothing for you04:20
StevenKYeah, and it just skips large parts of the query04:20
wgrantNote that pofiletranslator isn't even properly indexed, but people rarely have more than 5000 rows so it's still fast04:20
StevenK                 ->  Bitmap Index Scan on pofiletranslator__person__pofile__key  (cost=0.00..5.43 rows=128 width=0) (actual time=0.056..0.056 rows=14 loops=1)04:21
StevenK                       Index Cond: (person = 6874)04:21
StevenKLooks indexed?04:21
wgrantIt's indexed *enough*04:21
wgrantBut it's not indexed properly04:21
StevenKAh ha04:22
wgrant           ->  Bitmap Heap Scan on pofiletranslator  (cost=5.43..480.97 rows=6 width=4) (actual time=0.422..2.305 rows=215 loops=1)04:22
wgrant                 Recheck Cond: (person = 1780257)04:22
wgrant                 Filter: (date_last_touched >= '2012-03-16 06:00:00'::timestamp without time zone)04:22
wgrantIt finds all the pofiletranslator rows for the person, then filters them by date_last_touched04:22
wgrantWhen it would save a couple of ms to have an index on (person, date_last_touched)04:23
wgrantAnd if we were on 9.2, it'd be even faster with (person, date_last_touched, pofile)04:23
StevenKRight04:23
wgrantThe precise query formulation is going to become a *lot* more important when we upgrade to 9.204:23
wgrantThere's a lot of opportunity for big big wins04:23
StevenKIndex only scans have you salivating?04:24
wgrantOnly salivating? You underestimate me.04:24
StevenKHaha04:24
StevenKI'll leave the dirty jokes to wallyworld, he's better at them.04:24
wallyworldno i'm not04:25
wallyworldwhat does 9.2 offer?04:26
StevenKMainly, index only scans04:26
StevenKIE, don't even hit the table, just pull the data straight from the index04:26
wallyworldoh very cool04:27
wgrantRight04:28
wgrantIt'll make teamparticipation/APG/etc particularly fast04:28
wgrantBut also lots of other things, with a bit of query tweaking04:29
wallyworldbring it on then04:29
=== almaisan-away is now known as al-maisan
=== al-maisan is now known as almaisan-away
StevenKwgrant: Holy crap, I'm down to 2 failures.05:18
StevenKAND POFileTranslator.date_last_touched >= None)05:21
StevenKHahahaha05:21
wgrantStevenK: There were failures? :(05:23
StevenK  Ran 23 tests with 0 failures and 0 errors in 20.290 seconds.05:23
StevenKwgrant: Yeah, but they were all due to my Stormification of the query05:24
wgrantAh05:24
* StevenK tries to work out how to drag ITranslationsPerson.suggestReviewableTranslationFiles() into line05:28
StevenKThe queries are virtually identical, the ORDER BY is different, and it uses a LEFT JOIN rather than a JOIN on POFileTranslator with the added condition of POFileTranslator.id == None05:29
StevenKAh, no, it's a LEFT JOIN rather than a JOIN, and the TRUE that was in the guts of the old query is POFileTranslator.id == None05:32
wgrantRight, it's an antijoin05:32
StevenKExcept that we've CTE'd the query within an inch of its life05:33
StevenKwgrant: I think my CTE antijoin doesn't quite work05:44
wgrantStevenK: Well, do you have a plan that should be fast?05:44
StevenKwgrant: I'm using the four CTEs of Doom with the LEFT JOIN change etc, but two tests fail, so it isn't quite right05:46
wgrantStevenK: Remember that my query is based around the assumption that there a user contributes to only a tiny subset of the full set of pofiles.05:46
StevenKwgrant: http://pastebin.ubuntu.com/1304235/05:52
StevenKMy guess is the LEFT JOIN in recent_pofiles is what is wrong05:53
wgrantRight, it's wrong, but even if it was right it would probably be *extremely* slow05:54
wgrantBecause you'd be asking it to build a list of all pofiles that you haven't contributed to05:54
wgrantWhich is not a tiny subset of the full set of pofiles05:54
StevenKAt the moment, it's incredibly fast :-)05:54
wgrantSo the premise of my original restructured query is broken05:54
StevenKRight, so pulling ITranslationsPerson.suggestReviewableTranslationFiles() into line is harder than I thought05:55
wgrantWhat's it used for?05:56
wgrantCan you see an optimisation strategy similar to the one we used for getReviewableTranslationFiles?05:56
StevenKIt is used in a view to find random translation targets for review05:57
StevenKThat the user hasn't contributed to05:58
wgrantRight06:00
wgrantThat last line is the key06:00
wgrantWe were able to heavily optimise the previous query because we could restrict the search early to just a few thousand pofiles.06:00
wgrantWith this query we don't have that luxury.06:00
StevenKIndeed06:01
StevenKLet me revert the suggest bit06:01
wgrantSo attempting to reuse the optimisations that worked for the last query is perhaps slightly unwise06:01
wgrantSince the base assumption of the optimisation strategy does not hold here06:01
rick_h_benji___: ping07:05
=== benji___ is now known as benji
benjirick_h_: hi (I didn't hear your ping, for some reason my laptop does not beep when on battery)07:17
rick_h_benji: np, nvm though. Was going to go through and run the tests for lpsetup but wanted to check how much of my systemit would take over and should I setup a virtualenv07:19
rick_h_but going through the readme see what's up07:19
StevenKdpm: O hai, can you look at staging? The stats should be fine07:19
dpmmorning StevenK, cool. Give me a minute and I'll have a look07:19
benjirick_h_: yeah, the unit tests are safe; there is a functional test that is more intrusive, but it isn't run by default07:32
rick_h_yea, the unit tests all pass fine07:32
czajkowskimorning07:54
StevenKdpm: No news is good news?08:03
=== almaisan-away is now known as al-maisan
dpmStevenK, sorry, I was on the phone, looking at it now08:20
dpmStevenK, the stats are not 100% identical, but that's fine, as I guess there has been some translation activity in quantal in the meantime. So all looks good to me except for one thing: it seems the Contributors column hasn't been updated along with the other statistics, and it's empty08:24
wgrantThe near-daily ScrubPOFileTranslator job should take care of that after a few days, I believe08:26
wgrantBut we can't sensibly run that in full on staging due to resource constraints08:27
dpmin that case, it all looks good to me08:29
StevenKdpm: Excellent, thank you. I'm not really fan of running the job on prod tomorrow, how does Monday sound to you?08:42
dpmStevenK, sounds perfect to me, I wouldn't consider this to be urgent08:43
StevenKdpm: Oh, sure, but I'd like to get it off my plate. :-)08:43
dpmabsolutely :)08:43
cjwatsonwgrant: I've fixed the problem you spotted in redirect-release-uploads now; do you need to re-review?09:05
wgrantcjwatson: Looks good, thanks09:09
wgrantadeuring: Hi, will you have time to QA bug #1069826 today?09:09
_mup_Bug #1069826: privacy aware security adapter for IProjectGroupMilestone <qa-needstesting> <Launchpad itself:Fix Committed by adeuring> < https://launchpad.net/bugs/1069826 >09:09
adeuringwgrant: doing it right now :)09:10
wgrantLovely, thanks09:10
cjwatsonwgrant: Thanks.09:14
abentleyderyck: Could you please review lp:~abentley/launchpad/beta-banner ?09:26
cjwatsonabentley: I think https://code.launchpad.net/~cjwatson/lazr.jobrunner/userErrorTypes/+merge/131248 probably needs either you or adeuring to review it, ideally, since you're the owners on PyPI?09:27
abentleycjwatson: be with you in a few minutes.09:28
cjwatsonThanks09:28
abentleycjwatson: Wow, took me a while to understand why we did that.  r=me.10:06
cjwatsonThanks.  I doubt I can land and release it. :-)10:07
cjwatson(It'll presumably want to go into lp-sourcedeps after release, too.)10:08
abentleycjwatson: You can certainly land it.  I or abel would have to release it, though.10:17
abentleycjwatson: I'll go ahead and do it all, this time.10:18
cjwatsonOh, do such things just go through PQM?10:22
cjwatsonThe trunk commit history all seems to be direct commits.10:22
cjwatsonAh, I'm in ~canonical-launchpad-branches.  Fair enough.10:23
cjwatsonThanks.10:23
abentleycjwatson: np10:41
abentleycjwatson: But I'm having trouble getting tests to pass, so the release may take a while.  You can generate your own tarball for now, if you want to keep hacking.10:42
cjwatsonNo rush, I have plenty of other stuff to do.  Just wanted to make sure it wasn't blocked on me.10:43
=== al-maisan is now known as almaisan-away
cjwatsonEek, I broke buildbot.  (I.  Hate.  Doctests.)  Could I have a review of https://code.launchpad.net/~cjwatson/launchpad/redirect-release-uploads-2/+merge/131383 so that I can land a testfix?11:56
cjwatsonIt's a one-liner.11:57
* cjwatson trolls for a review of one-liner testfix https://code.launchpad.net/~cjwatson/launchpad/redirect-release-uploads-2/+merge/131383 in case the vagaries of the UDS network mean that more people can see it now12:19
jmlcjwatson: approved.12:25
cjwatsonjml: thanks12:28
cjwatsonjcsackett: Are you likely to be able to manage your QA today?  I'm hoping that I might be able to get the branch currently working its way through buildbot deployed a bit later.12:43
=== almaisan-away is now known as al-maisan
=== Ursinha-afk is now known as Ursinha
abentleycjwatson: new release at http://pypi.python.org/pypi/lazr.jobrunner14:07
jcsackettsinzui: can you send me testemail.py?14:39
=== jcsackett changed the topic of #launchpad-dev to: http://dev.launchpad.net/ | On call reviewer: jcsackett | Firefighting: - | Critical bugs: ~240
sinzuijcsackett, I will when qastaging is running. the schema needs patching14:39
jcsackettsinzui: aaah.14:39
=== al-maisan is now known as almaisan-away
jcsackettsinzui: nm, i found it in my mountains of email.14:52
jcsackettof course, still waiting on qa server.14:52
sinzuijcsackett, qastaging is back14:54
jcsackettoh sweet.14:54
sinzuijcsackett, my provider wont let me send. If you get that message, mark it qa-untestible14:56
jcsackettsinzui: yeah, i'm having the same issue.15:00
jcsackettok, qa-untestable it is.15:00
rick_h_jcsackett: for your eyeballs if you get a sec. Kind of small https://code.launchpad.net/~rharding/launchpad/limit_product_types_1066904/+merge/13136815:26
cjwatsonCould somebody add lazr.jobrunner 0.11 to download-cache?15:33
=== matsubara is now known as matsubara-lunch
=== matsubara-lunch is now known as matsubara
=== yofel_ is now known as yofel
=== jcsackett changed the topic of #launchpad-dev to: http://dev.launchpad.net/ | On call reviewer: - | Firefighting: - | Critical bugs: ~240
wgrantcjwatson: Did someone get around to that download-cache change?23:49
cjwatsonwgrant: No23:50
wgrantcjwatson: I don't see 0.11 on LP23:53
wgrantI guess I'll grab it from PyPI23:53
wallyworld_wgrant: why weren't packaging components, ie universe, multiverse etc, done as a enumerated type? the code is littered with string literals 'multiverse' etc23:54
wgrantwallyworld_: Because they're not an enum, they're distro-specific config data23:54
wgrantLaunchpad unfortunately retains lots of hardcoded rules for Ubuntu because it was never done properly23:54
wgrantHence the hardcoded strings.23:54
wallyworld_ok, thanks23:54
wallyworld_i'm looking at soyuz code for the first time23:55
cjwatsonone of these days ...23:55
wgrantI'm sorry for your loss.23:55
wallyworld_well, if i can understand enough to fix the bug, i'll be happy23:55
cjwatson(aka UE is not desperately keen on it being this way either, but not upset enough to demand it be fixed :-) )23:56
wgrants/distro-specific/distroseries-specific/, even23:56
cjwatsonif we ever get much further down the archive reorg then it might matter23:57
wgrantIndeed.23:58
wgrantcjwatson: lazr.jobrunner 0.11 is in download-cache23:58
cjwatsonThanks23:59

Generated by irclog2html.py 2.7 by Marius Gedminas - find it at mg.pov.lt!