=== StevenK changed the topic of #launchpad-dev to: Performance Tuesday | https://dev.launchpad.net/ | firefighting: - | On call reviewer: StevenK | https://code.launchpad.net/launchpad-project/+activereviews === lifeless changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | firefighting: - | On call reviewer: StevenK | https://code.launchpad.net/launchpad-project/+activereviews === matsubara is now known as matsubara-afk [02:06] sinzui: ping [02:06] Project windmill build #91: FAILURE in 1 hr 8 min: https://lpci.wedontsleep.org/job/windmill/91/ [02:45] thats better, [02:45] more closed bugs [02:45] and one more hidden critical unearthed [02:55] * lifeless resists the urge to start at bug oldest and walk forward [02:55] wgrant: ping [02:56] I'm pinging you cause curtis had better be asleep by now :) - where is Cve:+index - is jc still on it, or would it be ok if I pick it up? its our #2 frequency OOPS [02:56] lifeless: He's still on it. [02:56] kk [03:08] wgrant: have you poked at +needs-packaging at all ? [03:08] wgrant: I'm struggling to find top-10 timeouts that are not fixed-undeployed, bugtask:+index, or in-progress by someone [03:10] lifeless: Not at all. [03:11] You seem to love BugTask:+index [03:11] wgrant: Not at all. [03:12] wgrant: the next obvious thing is a paginated message display [03:12] wgrant: which is to big for me: I get called away all over the place. [03:12] wgrant: I mean, making a vertical page-reloading batchnav is easy. [03:13] wgrant: making one that uses js to incrementally pull in new messages and actions and shows the comment form once you read to the bottom - a bit harder. [03:14] Yeah. [03:15] wgrant: so other than ratcheting scaling down a bit more, I'm not likely to really touch it for a bit [03:15] dammit, I need to finish my analysis of deletable bugtasks etc [03:15] * lifeless adds a note to talk to jml about said [03:16] wgrant: (oh, and I'd be delighted for someone else to do the next iteration on bugtask:+index) [03:18] wow [03:18] 400ms overhead per page atm [03:19] just doing traversal [03:19] https://lp-oops.canonical.com/oops.py/?oopsid=1907C1055 [03:19] probably a busy appserver contributing [03:27] i worry a bit sometimes about the minimum time launchpad can produce a page in [03:27] (i think it's quite a while, like 100ms) [03:27] maybe not that bad [03:28] mwhudson: well, the page I'm looking at - 400ms minimum. [03:28] mwhudson: trace the queries down to the session update after traversal [03:29] lifeless: erk [03:29] we're still in phase one though - drive the 99th% percentile down by fixing poor scaling in pages [03:30] oh that's the server machine wgrant is always complaining about isn't it? [03:30] mwhudson: well, its not the hardware. [03:30] It's partly the hardware. [03:30] mwhudson: its a 4-thread appserver with maybe 2-4 additional requests parsed and awaiting handoff [03:30] wgrant: it really isn't :) [03:30] lifeless: soybean has lots of them as well. [03:30] But we see most of our timeouts from the old appservers. [03:31] lifeless: yeah, something smells off about that that's not entirely related to the code in lp:launchpad [03:31] anyhow [03:31] tonight is pounce on the sysadmins night [03:31] Poor sysadmins [03:31] (not nastily) [03:32] just that tom is the guy working this progression [03:34] lifeless: if there's a bug with total crap in it (random text), do we just mark it as incomplete or do we need to get it deleted? [03:36] invalid probably. [03:36] whats the bug #? [03:37] wallyworld_: ^ [03:37] wallyworld_: Sorry, I meant to look at that earlier, but got sorta distracted :/ [03:37] 738023 [03:38] lol - classic - http://programming-motherfucker.com/ [03:38] wallyworld_: that seems to be outside the launchpad project? [03:39] yes [03:39] but it's an open lp question [03:39] ah [03:39] so i thought i'd clean it up since it's clearly a crap bug [03:39] so there is no spam in it [03:39] incomplete leaves it open [03:40] I would make it invalid [03:40] no. just crap [03:40] ok [03:40] thanks [03:47] Why does the series filter on the main pages of PPAs have such huge text? lol [03:47] Someone embedded a form inside a heading, and this was exposed in the recent style unifications. [03:48] H1 is big [04:45] I can has review https://code.launchpad.net/~lifeless/launchpad/bug-722794/+merge/54466 ? [04:51] lifeless: Done, r=me [04:52] thanks [05:36] wgrant: wtf: https://lp-oops.canonical.com/oops.py/?oopsid=1907C2337 [05:37] wgrant: I'm pinging you cause you added the transaction status to the timeline :) [05:40] lifeless: Huh. [05:40] But API timeouts normally work fine :/ [05:41] Although leonardr did change them recently. [05:41] https://bugs.launchpad.net/launchpad/+bug/730396 [05:41] <_mup_> Bug #730396: DistroSeries:EntryResource:getBuildRecords timeouts < https://launchpad.net/bugs/730396 > === jtv is now known as jtv-eat === almaisan-away is now known as al-maisan [05:54] what does BuildFarmJob.status <> 1 OR BuildFarmJob.date_finished IS NOT NULL imply [05:54] not fullybuilt and finished ? [05:54] the query I'm looking at also checks for FAILEDTOBUILD [05:54] can I drop the BuildFarmJob.date_finished IS NOT NULL condition without breaking semantics ? [06:03] thumper: https://bugs.launchpad.net/launchpad/+bug/730396/comments/9 [06:03] <_mup_> Bug #730396: DistroSeries:EntryResource:getBuildRecords timeouts < https://launchpad.net/bugs/730396 > [06:15] lifeless: That query is stupid, yes. For some of the cases you can drop the first BFJ <> AND date_finished IS NOT NULL check, yes. [06:15] lifeless: But we need to keep date_finished IS NOT NULL if status == 1. [06:18] sure [06:18] so over here [06:18] uhm [06:18] if we don't gc builds [06:18] there is no point reading all *FTBFS* rows every time [06:18] full stop [06:18] Hmmm, looks like I didn't kill dogfood [06:19] lifeless: If we move to an incremental model, sure. [06:19] lifeless: But then we'd need to read all recent successes too. [06:19] wgrant: why? [06:20] lifeless: Because we need to be able to remove failures that are no longer failures. [06:20] wgrant: do they get removed from this collection? [06:20] If we're not reading the whole failure collection, we need to read every other collection. [06:23] wgrant: do they get removed from this collection? [06:25] lifeless: Which collection? [06:25] fbtfs [06:25] lifeless: A retried build is not a new build. [06:25] A retried build will disappear from this page. [06:25] (unless it fails again) [06:25] wgrant: so, we do gc [06:25] Pardon? [06:25] or are you asying we reuse the BFJ ? [06:26] We reuse the BFJ. [06:26] * lifeless headdesks [06:26] Yes. [06:26] Someone made this decision 6 years ago, and uh, yeah. [06:26] anyhow [06:26] I'd read all collections incrementally [06:27] that seems cheap and effective as long as you don't shutdown for a month [06:28] wgrant: what rev has leonards change for timeouts ? [06:28] lifeless: It was a lazr.restful upgrade. [06:29] meh, I'll raise a critical [06:29] I'm pretty sure this worked after my changes, although it's clearly somewhat related. === al-maisan is now known as almaisan-away [06:33] https://bugs.launchpad.net/launchpad/+bug/740750 [06:33] <_mup_> Bug #740750: API timeouts broken and returning no useful data... < https://launchpad.net/bugs/740750 > [07:05] big f* jools? [07:11] poolie: ? [07:15] We reuse the BFJ. [07:16] Heh' [07:16] poolie: before his time [07:16] poolie: Build Farm Job [07:17] https://bugs.launchpad.net/launchpad/+bug/740759 might amuse you [07:17] <_mup_> Bug #740759: creating bzrdir on launchpad is slow (BzrDirFormat.initialize_ex_1.16) < https://launchpad.net/bugs/740759 > [08:28] good morning === StevenK changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | firefighting: - | On call reviewer: - | https://code.launchpad.net/launchpad-project/+activereviews === almaisan-away is now known as al-maisan [09:03] stub: hi [09:03] stub: how are you feeling? [09:03] yo [09:03] Better today... slept 13 hours straight last night. === jtv-eat is now known as jtv [09:04] stub: good timing - we tried your live index docs but got the patch number wrong: https://code.launchpad.net/~wgrant/launchpad/fix-patch-57/+merge/54481 is meant to fix it, but wanted to confirm: is the db patch *in the tree* meant to be a .1 patch, or a .0 with the same major as the one done live ? [09:04] I think the numbers have to match./ [09:04] Or it will be reapplied on the next db-deploy and then blow up. [09:04] I think. [09:04] db patch in the tree is supposed to be a 2208-xx-01 (or -02 etc.) patch. The number should match what you inserted into LaunchpadDatabaseRevision on production [09:05] hi [09:05] would i be right in expecting that the qastaging database will be generally faster than lpnet? [09:05] because of less load [09:05] It's a much smaller DB server. [09:06] And the cache will be colder. [09:06] Why this works - Launchpad appservers check LaunchpadDatabaseRevision for patches that have been applied that are not in the local source tree, and for patches in the local source tree that have not been applied. It ignores all patches that are non-zero in the 'patch' field. [09:06] So it's generally slower [09:06] hm [09:07] lifeless, wgrant: So that patch seems correct, and matches what I see on the production db. Did the patch also get applied to launchpad_prod_2 and launchpad_prod_1 ? [09:08] stub: yup [09:08] So it worked out best with id in the first field of the index? [09:08] stub: It was applied as -0 to all three. [09:08] stub: it was a lopsided problem [09:08] I don't see -0 in LaunchpadDatabaseRevision - I only see 57-1 [09:08] stub: Right, we had to fix it when an appserver failed to start. [09:08] stub: we tried a number of permutations on qastaging, and found that a partial index on the queues that are driven to 0 (the NEW and INCOMPLETE) performed very well [09:08] lifeless: NEW and UNAPPROVED [09:09] I thought the index would have worked better with id in the last field, as the ordering would have been done last, but I hadn't checked and wasn't sure. [09:09] stub: As would I. I didn't follow lifeless' trials very closely, though. [09:09] can't do id last [09:09] not without a bunch of headaches [09:09] interesting [09:10] right now we use one query for both: [09:10] - queue processing [09:10] - historical data analsis [09:10] pg won't use the indices we tried with id last, unless the full index sort was given [09:10] archive desc distroseries desc setc [09:11] it *will*, but not for status=0 [or 1 we are pretty sure] [09:11] because its a lopsided data problem [09:11] status | count [09:11] --------+--------- [09:11] 4 | 5777 [09:11] 1 | 182 [09:11] 2 | 47494 [09:11] 3 | 2289831 [09:11] 0 | 40961 [09:12] Um what? [09:12] That's about 41000 more with status 0 than I would expect. [09:12] wgrant: indeed, but not enough to worry the index [09:12] Enough to worry me, though... [09:13] wgrant: sure, separate problem [09:13] *blink* [09:13] Similar on mawson. [09:13] Hmm. [09:14] 0 | 97 | 40877 [09:14] Distroseries 97 [09:14] stub: so the headaches are: we would have to either: split out a separate query for the historical data, if we changed the status 0 case to use archive desc distroseries desc status 0 desc id desc [09:14] karmic [09:15] (because the historical data /wants/ id as the first sort key - and pg does a decent job there today) [09:15] Oh. [09:15] or [09:15] bigjools: Old archive rebuilds :( [09:15] well, no or [09:15] lifeless: Sure. I recall the query. I'm interested in you found it works best with the id in the sort key. I think we have similar cases elsewhere - bugs or bugtask I think. [09:15] basically, there are two totally different use cases in the one table [09:16] stub: only because its essentially a micro-table embedded in the bigger one [09:16] stub: thats why adding a partial index gave good results - -very- fast results once applied [to that particular query] [09:17] wgrant: grar [09:17] bigjools: 2009ish [09:17] let's clear those out [09:17] So long-fixed. [09:17] But yes. [09:17] stub: its possible you can come up with something better [09:17] Also, accepted is pretty big... probably newer copy archives. [09:18] Indeed, the newer copy archives. [09:19] lifeless: If you tried the partial index on (distroseries, archive, id) instead of (id, distroseries, archive), that would be all I'm interested in at the moment. [09:19] stub: but the nice thing here was that the partial index was small - 1280 kB [09:20] lifeless: I think in earlier versions of PG, the index would not have been used at all because the first field in the index was not used until the very end. [09:20] stub: we didn't try that variation, no [09:21] wgrant: we need a way of cleaning out copy archives entirely [09:21] bigjools: Yes. [09:21] wgrant: I want to make derived distros supersede them [09:21] stub: Limit (cost=0.00..104.34 rows=31 width=36) (actual time=0.132..83.965 rows=1 loops=1) [09:21] -> Index Scan Backward using packageupload__distroseries__status__archive__idx on packageupload (cost=0.00..5287.65 rows=1571 width=36) (actual time=0.131..83.961 rows=1 loops=1) [09:21] bigjools: An interesting plan. [09:21] Index Cond: (distroseries = 104) [09:21] Filter: ((archive = ANY ('{1,534}'::integer[])) AND (status = 0)) [09:22] Total runtime: 84.023 ms [09:22] stub: ignore the index name, thats on qastaging where we were experimenting [09:22] wgrant: they're essentially the same thing, but copy archives have a spethial UI [09:22] stub: also - thats *cold* runtime [09:22] bigjools: Indeed. [09:23] lifeless: Right. So in PG 8.4, it might well be more efficient to put the field we are ordering on first, and the ordering and filtering done in one index scan. [09:23] stub: at least sometimes, yeah [09:23] Which is different to how we optimized stuff before elsewhere in the schema. Might be some room for improvement there. [09:25] wgrant: OOPS-1907BUILDMASTER3 .... [09:25] lifeless: Where the live rollout docs good enough for the losas to apply the patch without hiccups? [09:25] bigjools: What about it? [09:25] stub: yup, except we got the patch # wrong [09:26] bigjools: It's annoying, but ordinary and harmless. [09:26] wgrant: it should not be an oops [09:26] bigjools: Sure. [09:27] well, we could see if someone deleted the source [09:27] Someone uploaded one to supersede it. [09:27] or that [09:27] lifeless: Right. Applying a -0 patch live would mean the appservers fail to restart, so wouldn't even be immediately noticeable. [09:27] that oops happened 3 times [09:27] bigjools: Different archs? [09:28] ah might be [09:28] Hm, no. [09:28] Different series. [09:28] https://launchpad.net/~kxstudio-team/+archive/ppa/+packages?field.name_filter=lv2core&field.status_filter=&field.series_filter= [09:28] stub: we only caught it when we tested dropping the appserver name from the lpnet configs and found it broke [09:28] ok [09:28] stub: so the name in db-devel is meant to be -1 ? [09:28] lifeless: Yes. [09:29] cool [09:29] lifeless: Anything non-zero in that field. A non-zero in the 'patch' field means ignore this on runtime checks - it is a minor patch and you shouldn't care if it has been applied or not. Matches our life updates usecase exactly, so yay for prescience. [09:30] stub: kk [09:31] jtv: Hi! [09:31] hi henninge [09:31] jtv: Are your reviewing today? [09:31] henninge: oh, completely forgot about it. :( OTP now. [09:32] np [09:32] lifeless: Hmm.... in fact, I can't see why -1+ patches can't land on launchpad/devel .... [09:32] danilos should be reviewing today, too. ;-) [09:32] stub: that would be great [09:33] Where does that rule get changed now? [09:33] the pqm config [09:33] its out of the tree [09:34] Heh, the first time it's needed a change in almost three years, a month after I argued that it never needed changing... [09:34] :-) [09:36] I think we just need to block *-0.sql from landing on launchpad/devel now. No problems landing updates to the scripts, security.cfg or minor db patches. [09:36] Right. [09:36] Anyone see a problem with that rule? [09:36] Nope. We should also drop the conflict check while we're there, since it doesn't work. [09:36] And is pointless. [09:36] fine with me [09:38] wgrant: Do you want to file an RT explaining that conflict check thing, or do you want to explain the conflict check thing to me so I can file the RT ? [09:39] stub: https://pastebin.canonical.com/45073/ is the current hook. [09:40] MY EYES! [09:40] stub: The second bit (bzr ls -0 [...]) is meant to check for conflicts, but doesn't actually work. I considered removing it when we migrated the check from the tree to PQM, since it seems pretty pointless, but decided to make as few changes as possible. [09:43] So precommit_hook=[ -z "$(bzr status -S database/schema/ | grep '-0.sql$')" ] ?? [09:44] stub: Don't need to protect fti.py or anything? [09:45] wgrant: fti.py is 50/50 - adding a new index could futz things, changing an existing one will not (the column will exist, it just won't have the expected data in it) [09:47] Sounds good, then. [09:47] RT time. [09:47] I guess we should block it - we likely won't change anything there anyway until we know where our search is heading. [09:47] stub: Thanks for the review. [09:55] precommit_hook=[ -z "$(bzr status -S database/schema/ | grep -e '\(-0\.sql\|/fti.py\)$')" ] [09:55] is what I end up with [09:56] Looks sensible, as long as it works. === al-maisan is now known as almaisan-away === almaisan-away is now known as al-maisan === danilos changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | firefighting: - | On call reviewer: danilos | https://code.launchpad.net/launchpad-project/+activereviews [10:55] danilos! ;) [10:55] henninge, :) [10:55] henninge, I don't know what you've been talking about ;) [10:55] danilos: I do, though! Can I please have a review? [10:56] henninge, sure thing [10:56] danilos: diff is only 1075 lines [10:56] https://code.launchpad.net/~henninge/launchpad/devel-605924-hastranslationtemplates/+merge/54470 [10:56] henninge, ha-ha-ha [10:56] henninge, ok, I'll take it [10:56] danilos: thanks === al-maisan is now known as almaisan-away [10:58] henninge, btw, just looking through proposal text, "shortlist" is especially recommended when you expect something to return a short list [10:58] henninge, because then it catches bugs early [10:58] danilos: oh, i thought it was about cutting a list off. [10:59] henninge, no, it throws an OOPS/exception when hard limit is broken [10:59] ah [10:59] so using shortlist is saying "tell me if this ever gets longer than X" [11:00] danilos: thanks, I did not know that. I am happy to put it back in, then. [11:00] henninge, yeah, it's a developer tool :) [11:00] henninge, I don't know in what context did you drop it, so it all depends on that, but just clarifying what shortlist is about [11:01] Project windmill build #92: STILL FAILING in 1 hr 8 min: https://lpci.wedontsleep.org/job/windmill/92/ [11:03] Morning, folks. [11:05] henninge, good job clearing the inter-dependency between template count and uses-translations [11:06] yeah, that was strange to see [11:16] henninge, not yours, but line 226 of the diff: "hidding" === jtv1 is now known as jtv [11:29] henninge, in TranslationTemplatesCollection, I am surprised target_pillar is not used anywhere, but since it's apparently not, good cleanup there as well :) [11:30] danilos: yes, that was only used to access translation_usage in getCurrentTranslationTemplates [11:31] henninge, also, instead of listifying stuff in tests, I suggest you use assertContentEqual instead [11:32] henninge, unless where you want to compare the order as well [11:32] henninge, fwiw, this is probably irrelevant comment when you get shortlist back :) [11:33] henninge, also, I'd rather see test_has_obsolete_translation_templates as 3 separate tests [11:33] henninge, or 4 [11:36] henninge, and also, you probably inserted list() on diff line 116 because you removed the shortlist as well, so that can probably go (and if you decided not to re-insert shortlist, this is where you should use it) [11:38] henninge, r=me [11:38] danilos: yup, that's just because of shortlist. [11:38] danilos: thanks [11:39] henninge, up to you to decide if you want shortlist back or not, not a big deal either way [11:39] danilos: I felt the same about test_translation_templates but I played along with what the rest of the file was doing. [11:39] I may just split up the other tests, too. [11:40] henninge, right, we did write tests that way in the past [11:40] danilos: And I was always the one saying "one assert per test"! [11:40] henninge, that'd be great, but if it gets complex, it might mean a new branch [11:40] * bigjools waves at danilos [11:40] I'll have a look [11:40] henninge, heh, well, that is tricky because we sometimes use asserts to make sure input data is right [11:41] bigjools, hi there [11:41] danilos: ok, that is only a guideline. [11:41] ;-) [11:41] bigjools, I hope you just look forward to hearing my lovely voice :) [11:41] danilos: are you reviewing? I have a short branch [11:41] bigjools, yeah, I do (but I am disappointed ;) [11:41] bigjools, pass it on, just done with henninge's [11:41] danilos: I miss your booming presence on the TL calls :) [11:41] henninge, yep, cheers [11:42] bigjools, ok, now I feel better, thanks :) [11:42] danilos: https://code.launchpad.net/~julian-edwards/launchpad/localdiff-sync-bug-739525/+merge/54496 [11:44] bigjools, branch sounds like a nice feature, but you've got a single lint issue so please fix it (I understand it may not be from your changes :) [11:44] looking at the code now [11:45] :/ [11:45] Project windmill build #93: STILL FAILING in 43 min: https://lpci.wedontsleep.org/job/windmill/93/ [11:45] it was my lint [11:48] bigjools, I am sad to see a message like "The following sources *would have been* synced if..." go from the real UI [11:50] :) [11:50] bigjools: Have you worked out how permissions are going to work? [11:50] no [11:50] Heh [11:50] bigjools, r=me, but I'd also remove the "XXX" from a comment about a thing you are not really going to fix unless it proves to be broken [11:50] ok [11:50] thanks danilos [11:51] wgrant: right now it's launchpad.edit on the series [11:52] bigjools: launchpad.Edit and launchpad.Append (since you need Append to run syncSources) [11:52] right [11:52] this will all fall out in the wash when we start doing intensive testing [11:52] Yeah. [11:52] And then we realise we need queues. [11:53] which Steve is doing tomorrow :) [11:53] And then you have an excuse to fix copying. [11:53] queues would be nice [11:53] I might have to badger flacoste and jml about that [11:53] mushroom! mushroom! [11:53] snaaaaaaaake === matsubara-afk is now known as matsubara === almaisan-away is now known as al-maisan [13:29] jcsackett: I Untriaged bug 740225. The former rosetta team need to explain if this was inteded and why or if it is a regression. The behaviour is correct for Ubuntu so it appears to be by design [13:29] <_mup_> Bug #740225: The differences between New and Translated for upstreams was removed < https://launchpad.net/bugs/740225 > [13:36] Are lp-propose-merge bugs bzr bugs or something else? [13:39] sinzui: understood. [13:42] sinzui: do you remember the issue you helped oem with regarding filing bugs in IE? [13:43] i believe it was an issue with an error popping up on the summary field? i've got an open question about it, and was wondering if there was a bug filed. i can't find one. [13:44] jcsackett: The JS to populate the matches and enable the continue actions does not work in IE. It is impossible to report a bug since the user is forced to use the guided process [13:45] jcsackett: The bug is filed and has many dupes. tag: javascript, text ie or ie8 or ie7 [13:45] ah right, tags! [13:45] * jcsackett never remembers tags when bug searching. [13:46] first match [13:46] I always use tags but I hate the default ANY, I am not sure I have ever used ANY in a search === mrevell is now known as mrevell-lunch [14:02] adeuring1: bzr+ssh://bazaar.launchpad.net/~abentley/launchpad/js-translation [14:03] adeuring1: https://code.launchpad.net/~abentley/launchpad/js-translation/+merge/54067 [14:06] deryck: I'll restart [14:10] adeuring1: do you want to chat in mumble about the template changes? [14:10] abentley: no yet, let me first read a bit more [14:10] adeuring1: okay, ping me whenever. [14:15] danilos, would you take a look at https://code.launchpad.net/~leonardr/lazr.restful/integrate-strict-versioning/+merge/54530 ? [14:16] abentley: so your idea is to always render both variants of "X is configured/not configured" and to make the "wrong" variant invisible via CSS, right? [14:16] adeuring1: right. [14:16] ok, so no need to mess with the menu:overview stuff, i think [14:16] abentley: ^^^ [14:18] adeuring1: Actually, we probably do. [14:18] abentley: why? [14:18] leonardr, after lunch, sorry [14:18] adeuring1: The icon is supposed to vary between "plus" and "edit". [14:18] abentley: ah, right [14:18] adeuring1: Depending on whether there's already a value. [14:19] adeuring1: But that state is frozen when the template is rendered. [14:19] right [14:19] adeuring1: So either we get two plusses or we get two edits. [14:19] yeah [14:19] dear codehosting devs, why is my +junk branch trying to stack on /~sathishmanohar/junk/main [14:20] lp:~jameinel/+junk/one-rev-1 [14:20] ah, stupid me, doing '/junk/" without the + [14:20] jam, right. [14:20] I only noticed because it fails on qastaging because 'junk' doesn't exist === abentley changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | firefighting: - | On call reviewer: danilos, abentley | https://code.launchpad.net/launchpad-project/+activereviews === mrevell-lunch is now known as mrevell [14:26] danilos or abentley: could i request a review of https://code.launchpad.net/~jcsackett/launchpad/set-question-message-visibility/+merge/54408? [14:27] any way to bulk upload attachments? I have 6 attachments I want to add to a bug, and it is a pain to do them one-by-one [14:31] jam: not that I know of; I wonder if a little launchpadlib script would be helpful, but it will take longer to write than just doing the uploads [14:37] jcsackett: sure. [14:38] jcsackett: You say "the branch partially relies on a branch that exposes Question on the webservice". This sounds like a prerequisite branch to me. [14:39] jcsackett: Do you know about prerequisite branches? [14:52] Project windmill build #94: STILL FAILING in 1 hr 9 min: https://lpci.wedontsleep.org/job/windmill/94/ [14:58] abentley: I learnt a thing about the job system today. It uses Python imports as a registry. [14:59] jml: that doesn't parse. [15:00] abentley: as in, it very strongly encourages job sources to be defined as classes that have all of their state on the class so that it can then load these classes using import/module-lookup/getattr-fu in other processes. [15:01] jml: this is true. [15:02] abentley: so in this regard, it's using Python's namespace/import system as a registry of job sources. sort of. [15:03] abentley: I bumped into this because I thought having an instance job source would make testing easier, so I gave it a try. [15:03] jml: Seems like a stretch to me, unless you think that most python functionality uses imports (by which you mean packages/modules?) as a registry. [15:04] abentley: well, maybe it is a stretch. it's just that I can imagine alternative implementations that make as much sense as importing that are more obviously registry-like [15:04] jml: In which case, it doesn't seem worth mentioning. [15:04] e.g. pickling the job source to a known directory and passing the filename through to the child process [15:05] or having a config file that maps names to ways of acquiring job source objects. [15:06] jml: we actually do have a config that maps names to job source classes. [15:07] abentley: class names in Python modules? [15:09] jml: No, when we use cronscripts/run_jobs.py, we pass in a config name, which includes the job source as one of its variables. [15:10] jml: e.g. packaging_translations [15:13] abentley: hmm. that's a more flexible than the TwistedJobRunner. Still assumes a particular mechanism for acquiring the IJobSource object though (it has to be a member of a module, available on import). [15:14] jml: I don't think it's more flexible. I can easily imagine using it with the TwistedJobRunner. [15:14] abentley: you'd have to change TwistedJobRunner first, surely [15:14] jml: what would I need to change? [15:15] abentley: the bit where it figures out the import name based on job_source.__name__ [15:15] jml: why? [15:15] abentley: to use a non-class object as a job source [15:16] jml: I expect an interface to correspond to a class. Don't you? [15:16] abentley: Yes, but that's not what I mean. [15:17] abentley: sorry i missed your comment earlier. i know about prereq branches, but the the prereq branch had other stuff that messed up the diff, as i only brought over the webservice bits. [15:18] abentley: the TwistedJobRunner theoretically expects a job source object that provides ITwistedJobSource. The implementation demands that it is a class that classProvides ITwistedJobSource. [15:18] jml: From an interface, we get a class, from the class, we get job_source.__name__, what's the issue? [15:19] jml: still not following why I'd need to change TwistedJobRunner to make it work with run_jobs. [15:19] oh right. [15:20] abentley: run_jobs takes an arbitrary name to import, TwistedJobRunner infers the name from the passed in job source object (which has to be a class) [15:20] Project devel build #569: FAILURE in 4 hr 52 min: https://lpci.wedontsleep.org/job/devel/569/ [15:23] jml: right, but these conditions are met for all of our job sources, so I don't need to address that in order to use TwistedJobRunner. [15:23] job_source = somethingThatMakesAJobSource(); runner = TwistedJobRunner(job_source, ...); ... will explode unless job_source has a __module__ and __name__ and can be reconstructed by importing "%s.%s" % (job_source.__module__, job_source.__name__) [15:23] jcsackett: set ~jcsackett/launchpad/questions-on-webservice as a dependency of https://code.launchpad.net/~jcsackett/launchpad/set-question-message-visibility/+merge/54408 [15:23] sinzui: ok. [15:24] abentley: of course. I was trying something different and discovered these conditions. [15:25] abentley: I think there is a more fundamental problem with the approach to hide the "wrong"
  • entries via CSS: If no packaging link is set, we can't generate the links "set source branch", "enable translations", "enable auto sync" at all: We don't know which target to use... [15:26] sinzui: is there a way to do that without redoing the proposal? [15:26] adeuring1: I've already addressed that for the branch link. [15:26] jcsackett: You resubmit the proposal. [15:26] let me look... [15:26] adeuring1: It creates an empty link. [15:26] abentley: ah, right! [15:27] jcsackett: you may hate me. We should not export Question.priority. It is unused [15:28] abentley: regarding the icons: I think we always have the pencil icon. So I think we don't have to tinker with the menu: stuff [15:28] sinzui: that's an easy fix. no need for hate. :-) [15:29] adeuring1: that's nice, but it's inconsistent with how we're handling branches. [15:30] deryck: adeuring1 reports that productseries always has an edit icon, never an add icon, unlike branches. Should we make them consistent? [15:34] abentley: I would think consistency would be better, yes. [15:34] benji, i'd like to go over lp:~leonardr/launchpad/explicit-versions with you, both to do review and to bring you up to speed on my changes [15:35] jcsackett: If you base your branch on the other branch, it's much clearer what came from what. Why did you only bring over the webservice bits from the other branch? [15:36] abentley: prereq was based on devel, this is db-devel. didn't want all the changes coming across before pqm brought them over automatically. [15:36] Project windmill build #95: STILL FAILING in 44 min: https://lpci.wedontsleep.org/job/windmill/95/ [15:36] leonardr: sure; I'm deep in something at the moment; how about after lunch (1 ish) [15:36] deryck: Do you want to change branch so it only uses edit, or productseries so it uses add and edit? [15:36] abentley: in retrospect, questions-on-webservice probably should have just been based on db-devel as well. [15:37] o [15:37] k [15:37] abentley: can productseries be none intially? (I assume so) [15:38] abentley: if so, that should behave like branch then. [15:38] deryck: Yes, and this is the most important case. [15:38] abentley: yes, so it should get an add icon to start with, I think. [15:38] adeuring1: ^^ could you do this as part of your work, please? [15:39] deryck. abentley: yes. [15:39] adeuring1: thanks. [15:42] leonardr, looks good, r=me [15:42] great [15:43] jcsackett: I wouldn't worry overmuch about applying the changes before PQM brings them across automatically. You might get a criss-cross merge, but --lca or --weave merge should handle it fine. [15:43] abentley: dig. === al-maisan is now known as almaisan-away [15:43] if you like, i can merge the prereq completely in before you review. [15:44] abentley ^ [15:45] jcsackett: I don't think I need that. It just stuck out as weird, and I didn't want to start reviewing until I understood what was going on. [15:46] abentley: got it. sorry for the oddities.:-) === danilos changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | firefighting: - | On call reviewer: abentley | https://code.launchpad.net/launchpad-project/+activereviews [15:53] jcsackett: For your tests, did you consider using WebServiceTestCase? [15:53] abentley: i did not. i am not aware of WebServiceTestCase [15:54] jcsackett: It allows you to test your code using launchpadlib. [15:55] jcsackett: So you're testing something closer to what users will actually use, and it's closer to native code, too. [15:56] jcsackett: I had a few notes about the branch too. I added them to the MP === deryck is now known as deryck[lunch] [15:58] abentley: seems worth looking at then. :-) [15:59] there are a lot of tests i've seen that could benefit from that. [15:59] jcsackett: it's similar to what you're doing in TestSetCommentVisibility, only generic. [15:59] jcsackett: wgrant. allhands should know about your participation in the 2011 campaign now. [16:01] jcsackett: Why are you testing the XHTML? This seems like your are testing the webservice implementation, not your exports. [16:04] abentley: it looks like even the "clean" diff i pasted in has some noise--if you're looking at TestQuestionRepresentation, that's from the other branch. sorry. [16:05] jcsackett: yes, I was. [16:05] i'm not sure why that made it into the diff i generated. [16:05] abentley: jcsackett: this testing point relates to my experience with anon users and representations. The simple doctests for the representation easily documents what anon users can see [16:06] jcsackett: and about my anon + IQuestionMessage remark on the Mp, may be we do not want them public, see bug 740208 [16:10] jcsackett: Was there a preimplementation discussion? [16:10] yes, sinzui and i have talked a lot about how to go about this. [16:11] * jcsackett sees he skipped that bit in the proposal. [16:12] jcsackett: 1 out of 1 abentleys recommend lp-propose for all your merge-proposing needs. [16:13] abentley: Are lp-propose bugs bzr bugs or some other package? [16:13] stub: bzr, I would say. [16:14] abentley: i have actually used lp-propose before, and while it opens a local editor and then pushes the whole thing to lp, it doesn't do so from a template. is there a config step i missed for that? [16:14] jcsackett: You may be missing the lpreview-body plugin. [16:15] i am indeed. [16:17] jcsackett: try apt-get install bzr-lpreview-body [16:19] i have it now. i'll see if alls well on the next branch. [16:20] jcsackett: cool. === fjlacoste is now known as flacoste [17:07] leonardr: ready when you are [17:08] benji, let's go [17:08] have you read the mp? [17:09] looking at it now === beuno is now known as beuno-lunch [17:12] leonardr: ok, the MP makes sense [17:13] benji: and you understand the basic require_explicit_versions rule, right? [17:13] leonardr: yep, I believe so (its intent if not yet its implementation) [17:14] ok, take a look at apihelpers.py to see how i hack into the implementation [17:14] why did you have to add all the patch_entry_explicit_version calls in _schema_circular_imports? Is it really circular imports or something else? [17:16] benji: it's something else, but it's the same kind of 'patch everything' logic [17:16] i'm ok with moving it though the imports would be a pain [17:17] just I wonder if making a new module and copying over all the imports and then running that through the linter to show unused imports would work well enough to make it worth it [17:18] would those ideally be in the same file where the interface is defined? [17:20] benji: yeah, but if you're going to go through that much trouble it approaches the amount of work necessary to just stop using it [17:21] that makes sense; I'm cool on leaving them where they are. I might try the move-and-lint trick if I get 15 minutes. === deryck[lunch] is now known as deryck [17:56] night folks === beuno-lunch is now known as beuno [18:32] deryck: chat? [18:47] abentley: I can't sorry. Sorry. Having to pull double duty now, since wife just came home sick. Kids need moderate supervision. [18:48] deryck: okay. Will want to chat tormorrow about branch picker and vocabulary context. === Ursinha is now known as Ursinha-lunch [18:50] abentley: sure. we can do it first thing tomorrow. [19:01] jcsackett: mumble? [19:01] sinzui: oh, it is 3. one sec. [19:02] abentley: my earlier mp is updated, both with new diff and comments. [19:03] jcsackett: cool. I'll have a look. [19:16] jcsackett: http://pastebin.ubuntu.com/584448/ [19:46] abentley: ws_object is now used in the test, and your question about endInteraction was answered. [20:14] Project devel build #570: STILL FAILING in 4 hr 53 min: https://lpci.wedontsleep.org/job/devel/570/ === Ursinha-lunch is now known as Ursinha [20:18] gary_poster: hi [20:18] gary_poster: I noticed this - https://bugs.launchpad.net/launchpad/+bug/741234 - by chance when looking at a timeout [20:18] lifeless hi [20:19] gary_poster: I don't know if you want to pick it up or not, I may well be misremembering which squad changed the visibility rules [20:19] <_mup_> Bug #741234: product:+code-index merge proposal queries do not show private bugs visible by assignment < https://launchpad.net/bugs/741234 > [20:19] [I probably am misremembering] [20:19] lifeless, I don't *think* we touched that...it certainly doesn't ring any bells [20:19] gary_poster: de nada :) [20:19] :-) [20:20] lifeless: Red squad will be doing disclosure/visibility once one of the current squads finishes up [20:22] jml: cool [20:22] jml: this was missed during a change in the last few months which is why I mentioned it [20:22] anyhow [20:22] -> dentist [20:22] \o/ [20:32] jcsackett: how goes CVEs? [20:32] https://code.launchpad.net/~jml/launchpad/test-timeout-505913/+merge/54598 – fix for an intermittent failure (I think) [20:33] wgrant: ^^ [20:37] sinzui: i got derailed by a hardware issue, but i think what we chatted about is showing promise. [20:38] i'm having to fight my desire to do something about the nested chain that is the various nomination-rows &c. [20:38] jcsackett: are you working with BugLinksListingView ? [20:40] I see the pairing of the view to the template is broken. That view ensures can_view_bug is available to avoid security checks, but the template ignores it in two cases. I think that view should also use the trick I showed you to change the security checker on the object so subsequent checks are fast [20:44] sinzui: how can you tell it is broken? i recall odd behavior when i was looking at this last which that might explain. [20:44] though i just have the recollection of said behavior, and can't recall exactly what it was. [20:44] * jcsackett needs to take better notes. [20:45] jcsackett: view build a dict of bug info to show. It recovered from an Unauthorized error and adds 'can_view_bug': False. The template does not need to call required:launchpad.View on the bug! [20:50] jcsackett: I am sure the adaption to +bugtasks-and-nominations-table also calls permission checks. Since the view has done the work, we want a fast permission checker on the good ones. We can update the cve-index.pt template to always use can_view_bug [20:52] sinzui: dig. [20:54] jcsackett: I can send you a diff of the changes actually, so you can have an adventure with milestones === almaisan-away is now known as al-maisan === abentley changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | firefighting: - | On call reviewer: - | https://code.launchpad.net/launchpad-project/+activereviews [20:57] sinzui: i'm not sure that's what i would call "adventuring" :-P === al-maisan is now known as almaisan-away [21:02] leonardr: mumble? [21:05] g'night all. [21:09] wallyworld, 1 minute, sorry [21:10] np [21:11] wallyworld, i can hear you [21:11] wallyworld, go ahead and give me your status, i'll try to figure it out [21:11] sinzui: jcsackett: are you talking bug security checks? === matsubara is now known as matsubara-afk [21:11] sinzui: jcsackett: if so there is no need for that now, our searches inject the rules. [21:13] wallyworld: sorry, still not working [21:13] jml: I wrote the fixture you asked for [21:14] lifeless: okay good to know. We could reimplement the oddness in the view [21:16] sinzui: what symptoms are you seeing ? [21:18] No symptoms. The does very odd things to build a dict of bugs, and the template ignores the work the view did hald the time. We have bool in the dict, which must be faster than adaption [21:18] sinzui: any bug task gotten via IBugTaskSet.searchTasks will not trigger security lookups; bugs gotten via other methods that do not indirect to searchTasks should be updated to do so [21:18] sinzui: ok [21:29] lifeless: yeah, I saw, thanks. [21:33] wallyworld_: take a look at lazr.restful.interfaces.IWebBrowserOriginatingRequest [21:33] launchpad defines an adapter from WebServiceLayer (ie. a web service request) to IWebBrowserOriginatingRequest, in webapp/configure.zcml [21:39] in _resource.py, applyChanges, lazr.restful casts the current request to IWebBrowserOriginatingRequest [21:39] if the result is None (because the application never defined an adapter), one thing happens [21:39] if it's not none (because this is launchpad), another thing happens [21:58] jml: ! [21:59] leonardr: thanks! [21:59] np [22:02] huwshimi, hi [22:02] rockstar: Hey [22:03] huwshimi, what particularly about YUI are you struggling with? [22:04] rockstar: Oh, nothing in particular (I've just replied to your email). [22:04] huwshimi, yeah, I saw it. [22:04] rockstar: I just don't like the way it does certain things, but I can get over that and use it anyway [22:05] huwshimi, most of the concerns I've seen from people about YUI (and javascript in general) are because there's something idiomatic that they don't understand. [22:05] huwshimi, what particularly do you not like though? [22:05] (It's quite possible that we are doing it wrong it YUI, and I'd like to help fix it if need be) [22:08] rockstar: I'm not sure exactly. I need to spend some more time with YUI3 to really be able to help you out with that [22:44] wgrant: I think you should block about the private bug as 404 change. Many users are confused by this. They think Lp is broken (making bad links) [22:44] wgrant: s/block/blog/ [22:48] In that case why is it 404 instead of 403? [22:49] cody-somerville: We are moving to deny the existence of private objects, because it is much simpler. :/ [22:49] Private bugs are just about impossible to do sensibly. [22:49] Without 404ing. [22:49] (because of the redirects) [22:49] wgrant: actually, I think switching to NotFound is a bug. We cannot make links that will 404. We need to ensure that the user has permission to see the link we are making [22:50] wgrant: and yes, because of redirects this can be near impossible [22:50] sinzui: We don't make links, AFAIK. [22:50] Hmm. [22:50] what redirects? [22:50] Except perhaps if the bug is referenced in text. [22:50] cody-somerville: /bugs/1 -> /ubuntu/+bug/1 [22:50] <_mup_> Bug #1: Microsoft has a majority market share Bug #1: Microsoft has a majority market share cody-somerville: /otherproject/+bug/1 -> /ubuntu/+bug/1 [22:50] <_mup_> Bug #1: Microsoft has a majority market share Bug #1: Microsoft has a majority market share good thing that line is truncated :) [22:52] wgrant: bug https://bugs.launchpad.net/ubuntu/+source/update-manager/+bug/739380 certainly does link to a private bug. I am sure it shows up in the 404 reports [22:52] <_mup_> Bug #739380: update-manager crashed with AuthorizationFailed in _run(): org.freedesktop.PolicyKit.Error.Failed: ('system-bus-name', {'name': ':1.129'}): org.debian.apt.update-cache < https://launchpad.net/bugs/739380 > [22:53] wgrant: I think this is another case where the is a right way to do something, but it is more fun to creaft your own links and play with interpolation [22:54] sorry about the spelling. I am a wreck. I should end my day [22:54] sinzui: we don't create links to hidden bugs though [22:55] why not just handle this the same way as oh, I dunno... most other websites? :P lol. Sorry to be facetious but LP can't be the first website trying to solve these kinds of problems, can it? :P [22:55] sinzui: (because we filter all hidden bug objects so they don't show up in miletones, search results etc) [22:55] lifeless: But we do https://bugs.launchpad.net/ubuntu/+source/update-manager/+bug/739380 [22:55] <_mup_> Bug #739380: update-manager crashed with AuthorizationFailed in _run(): org.freedesktop.PolicyKit.Error.Failed: ('system-bus-name', {'name': ':1.129'}): org.debian.apt.update-cache < https://launchpad.net/bugs/739380 > [22:55] cody-somerville: this is how other websites handle it [22:55] lifeless: look above the comment box [22:55] the 'Remember, this bug report is a duplicate of bug #710026. ' ? [22:56] sinzui: so, this is related to the disclosure work - remember how you were saying that we shouldn't permit adding tasks outside of visibility zones [22:56] sinzui: same thing - when something is duped on a private bug we need to take disclosure into account [22:56] lifeless: I thought the duplicate warning avoided linking. Maybe only some of them do. [22:57] lifeless: I think this relates to an even older rule I have when reviewing code. Do not craft a link that you are not will to write a test for to verify it behaves like the canonical link code. [22:58] sinzui: sounds plausible to me [22:58] interestingly [22:58] sinzui: I can see that private bug [22:58] your special [22:58] I'm not an admin [22:58] Any more, at least. [22:59] sigh, rub it in :) [22:59] I am just one of the proles. [22:59] I'm in ubuntu-bugcontrol [22:59] If it's apport, your MOTU membership will let you see it. [22:59] wgrant: ah [22:59] k [22:59] Indeed, it is apport. [22:59] sinzui: so you see a link there [22:59] sinzui: and you can't see the master bug [23:00] wgrant: looks to me like apport should have unprivated this [23:00] I see "Remember, this bug report is a duplicate of bug #710026. Comment here only if you think the duplicate status is wrong." [23:00] sinzui: and that is linkified ? [23:00] yes [23:01] lifeless: Indeed, nothing private there. [23:02] wgrant: worth filing a bug about this? [23:03] lifeless: Not sure. [23:06] I think this instance I see is bug. Isn't the reason the oops reports have a NotFound section is to encourage us to not do stupid thinks to frustrate users. [23:07] sinzui: indeed, we shouldn't generate links that break [23:07] we need to teach the linkifier code to rewrite bug references too [23:08] e,g. https://bugs.l.n./foo/+bugs/NNN -> check visibility and don't link otherwise. [23:08] The message I see is wrong. Since the bug is private and I cannot see it, I cannot say I think the duplication was a mistake. I have to know to locate a bug contact for the zero-vector bug I cannot see and ask for it to be make pulic of be subscribed [23:08] which also implies a batch scan-and-check for efficiency [23:08] That is an daunting task for most users [23:08] sinzui: I totally agree. I filed a couple of bugs about usability here earlier this week [23:08] sinzui: let me dig them up [23:10] oh, yes I do realised that my grievance is goes back to when we issued a 403. Users are just more confused since bugs privacy is volatile, unlike team privacy. === salgado is now known as salgado-afk [23:11] thumper: bug 740750 - I think I mailed you. [23:11] <_mup_> Bug #740750: API timeouts broken and returning no useful data... < https://launchpad.net/bugs/740750 > [23:16] bug 334130 [23:16] <_mup_> Bug #334130: misbehaviour in marking duplicates of a private bug < https://launchpad.net/bugs/334130 > [23:16] bug 434733 [23:16] <_mup_> Bug #434733: marking public bug as duplicate of private bug leads to confusing UI < https://launchpad.net/bugs/434733 > [23:16] I can't find the one I thought I filed [23:17] bug 157899 [23:17] lifeless, oh just one more thing [23:17] <_mup_> Bug #157899: Shouldn't need access to private bug report to reverse a public duplicate marking < https://launchpad.net/bugs/157899 > [23:17] bug 136570 [23:17] <_mup_> Bug #136570: Can't unsubscribe from duplicates if dupe is private < https://launchpad.net/bugs/136570 > [23:17] i see people adding new apis for admin use etc [23:20] poolie: yes? [23:21] it seems like it's kind of half-baked without a cli [23:21] i don't want to hold things hostage but i was wondering if people could add things to lptools for admin use [23:21] it shouldn't be much more incremental work [23:21] poolie: I don't think they should [23:21] or, at least, to file a bugtask against lptools [23:21] poolie: following reasons: [23:22] - these apis are not productised; we don't want to have to care about them in the stable api, and lptools is a productised project [23:22] - the api client for them should be the web ui, not a cli [23:23] oh [23:23] I think its fine if a dev things lptools is the best place to do it, but its not where I would encourage them to go with these apis [23:23] are these meant to be internal-use things for ajax only? [23:23] i misunderstood [23:24] poolie: we have /one/ api, it serves both launchpadlib (python) and a yui launchpad object that all the web ui ajax uses [23:24] so theres no clear separation, for right or wrong [23:24] what does "not productised" mean in this context? [23:25] we don't care about API churn [23:25] we'll change them willynilly as needed [23:27] what is the intended client for them? ajax? [23:28] I don't know [23:28] the syadmin request is a button in the ui [23:28] but the work is being done in spare timeslots [23:29] ok [23:29] i was confused because the bug seemed to say "please add an api" [23:29] i'll add lptools bugtasks [23:29] the bug was added to reflect the unit of work, for tracking qa [23:30] poolie: if the api is in devel, which I htink it is, you may not want lptools using it [23:30] poolie: because lptools is a packaged product [23:30] I wouldn't want bugs filed on lp if we change this api [23:30] ok [23:30] better to have the function than not at all though [23:31] poolie: this doesn't seem like a thing that will broadly interest lptools users; I'm confused by your interest in it [23:31] anyhow [23:31] i had the misapprehension that people were adding an api so that other people could write ad hoc scripts to call it [23:31] and in that case i would rather those scripts went into lptools [23:31] lifeless: one of those bugs may be a duplicate of a bug I reported 5 months ago. I would need to see a TB to be certain. Maybe Gary's team will fix the defect before they declare bug subscriptions ready. [23:31] they may be; even if that is the case, why is it appropriate for lptools ? [23:31] it's more the general pattern than the specific case [23:32] sorry i've got to go get a haircut, biab [23:32] poolie: I'm worried about the problem we have with edge and bzr happening here. Talk to you later about it. [23:37] wgrant: https://bugs.launchpad.net/launchpad/+bug/434733/comments/4 [23:37] <_mup_> Bug #434733: marking public bug as duplicate of private bug leads to confusing UI < https://launchpad.net/bugs/434733 > [23:37] wgrant: it happens a lot, I think we need to talk to pitti [23:53] do we still send mail to all duplicates when a master bug is altered, even if the master is privte? [23:53] lifeless: I'm pretty sure not. [23:54] Since only direct subscriptions function for private bugs. [23:55] hmm, then I think I can close one of those bugs off completely [23:55] Oh? [23:55] Which? [23:55] bug 136570 [23:55] <_mup_> Bug #136570: bug mail explaining cause of message has an inaccessible link when the the master is private and the subscription is is via duplicates < https://launchpad.net/bugs/136570 > [23:56] don't need to unsubscribe if you don't get mail [23:57] bug 589878 looks nice, I was thinking of a branch of yours recently I'd love the bug subscribers to all be able to see [23:57] <_mup_> Bug #589878: bzr branches should be private by default if linked to a private bug < https://launchpad.net/bugs/589878 >