[00:21] <wgrant> abentley: https://code.launchpad.net/~abentley/launchpad/duplicate-msgid/+merge/62697 seems a bit heavy-handed.
[00:22] <wgrant> abentley: I can understand skipping duplicate messages to the same place... but not to all of Launchpad.
[00:22] <wgrant> abentley: (that includes mailing lists, so you can no longer send an email both to a bug and a mailing list)
[00:23] <lifeless> huh
[00:23] <lifeless> the preview diff is empty :(
[00:23] <wgrant> r13139
[00:28] <lifeless> hmm
[00:28] <lifeless> I agree
[00:28] <lifeless> duplicate message ids are normal across the system
[00:29] <lifeless> only abnormal in one context - same list, or same bug etc
[00:29] <wgrant> Exactly.
[00:29] <wgrant> Shall I roll it back?
[00:29] <lifeless> its 7:30 pm for Aaron
[00:29] <lifeless> yes, I think it needs rollback
[00:29] <lifeless> we can't deploy with it
[00:30] <lifeless> but
[00:30] <lifeless> lets check just a little more
[00:30] <wgrant> Sure.
[00:31] <lifeless> so the error encountered is a duplicate msgid on one bug
[00:31] <lifeless> when the notification for it is being raised
[00:31] <wgrant> Well, adding the duplicate message results in a DB exception.
[00:31] <lifeless> bug 595166
[00:32] <_mup_> Bug #595166: IntegrityError raised filing a bug using the email interface <easy> <email> <lp-bugs> <oops> <Launchpad itself:In Progress by abentley> < https://launchpad.net/bugs/595166 >
[00:32] <wgrant> That's the one.
[00:32] <lifeless> its raised when *notifying* tha the second message was added
[00:32] <wgrant> Only because that's when the flush occurs.
[00:32] <wgrant> Oh.
[00:33] <lifeless> no, *really* when notifying
[00:33] <wgrant> That's not the OOPS I"ve seen before.
[00:33] <wgrant> The one I saw violated bugmessage__bug__message__key
[00:33] <lifeless> thats on a link to message
[00:33] <lifeless> not to two messages with the same msgid
[00:34] <wgrant> Hmm?
[00:34] <lifeless> OTOH so is the notification one
[00:34] <wgrant> Two emails with same msgid and same content => one Message row
[00:34] <lifeless> sure
[00:34] <lifeless> this check isn't complete though
[00:34] <lifeless> which is the other issue
[00:38] <lifeless> aieee
[00:38] <lifeless> other broken code
[00:38] <lifeless> for email_addr in addresses:
[00:38] <wgrant> Oh?
[00:38] <lifeless> discards all but the last handler found
[00:38] <wgrant> Heh
[00:38] <lifeless> see the end of handle_one_mail
[00:39] <lifeless> looks like using cc: can make our mail handling do some interesting and odd stuff
[00:39] <lifeless> anyhoo
[00:39] <lifeless> *blinkers*
[00:39] <wgrant> Why would it be using To or Cc?
[00:40] <wgrant> It should be using X-Launchpad-To
[00:40] <lifeless> shoo. Go read.
[00:40] <wgrant> Which is the envelope sender.
[00:40] <lifeless> thou shalt be blind. And don't say I didn't warn thee.
[00:40] <wgrant> So, yes, it uses X-Launchpad-To unless it's not present.
[00:40] <wgrant> Not that bad.
[00:41] <lifeless> well
[00:41] <lifeless> we've some funky in our mail pipeline and we haven't identified it
[00:41] <wgrant> Well, we fixed some of it two weeks ago.
[00:54] <lifeless> ok please rollback
[00:54] <lifeless> I have written up a hopefully helpful explanation for abentley
[00:55] <lifeless> if you've other or better suggestions for how to tackle it, please say so
[00:59] <wgrant> lifeless: Done, thanks/
[01:01] <lifeless> thank you
[01:14] <LPCIBot> Project windmill-db-devel build #347: STILL FAILING in 1 hr 5 min: https://lpci.wedontsleep.org/job/windmill-db-devel/347/
[01:50] <wgrant> lifeless: The security hole is this: using a crafted or predicted msgid an attacker can cause Launchpad to generate a link to a mail that was sent to a private bug or mailing list when they have no such permission.
[01:50] <wgrant> lifeless: I thought so too.
[01:50] <wgrant> But it's not the case.
[01:50] <wgrant> I investigated when I looked at trying to fix this bug a few weeks back.
[01:51] <wgrant> It grabs all the Messages with the right Message-ID, and compares the content.
[01:51] <wgrant> You can possibly obtain attachments if you know all the textual content, I guess.
[01:52] <lifeless> wgrant: fromMessage is fine
[01:52] <lifeless> wgrant: aarons patch wasn't
[01:55] <wgrant> lifeless: I don't see a new security bug. The returned message isn't used for anything. It just returns None to exit the handler, right?
[01:57] <lifeless> wgrant: if the patch were changed to call the handlers using the result of messageset.get(rfc822id), it would open a security hole.
[01:57] <wgrant> lifeless: Yes.
[01:57] <lifeless> (not to mention still crashing in the same way)
[01:57] <lifeless> wgrant: thats what I meant.
[01:58] <lifeless> the usage of messageset.get(rfc822id) is not sufficient to determine 'same email' nor 'can see the email'
[01:59] <wgrant> Ah, it helps if I read your entire reply.
[01:59] <lifeless> *snort*
[02:00] <wgrant> It was long, and my initial skim revealed a statement that I knew to be false!
[02:00] <lifeless> feel free to reply and editorialise
[02:24] <LPCIBot> Project windmill-devel build #155: STILL FAILING in 1 hr 10 min: https://lpci.wedontsleep.org/job/windmill-devel/155/
[02:28] <poolie> hi all
[02:31] <lifeless> hi poolie
[02:31] <lifeless> poolie: random question for you
[02:32] <lifeless> if the lp bzr+ssh/sftp codehosting project were a separate tree, do you think your team would do anything interesting with it ?
[02:37] <spiv> lifeless: hmm.  Occasionally users ask about how to run a bzr server with some access control and/or authentication that isn't easily satisfied by using authorized_keys directives and filesystem permissions
[02:38] <spiv> lifeless: so I guess having a less intimidating tree to extract that from, or at least learn from, might be helpful to someone.
[02:39] <poolie> hi lifeless
[02:39] <lifeless> spiv: tim has extracted the code but adapted it to a uni hosting solution
[02:39] <poolie> well
[02:39] <lifeless> so one of the candidate services - and I think a low hanging fruit - is one that still talks xmlrpc
[02:39] <poolie> you know there was john's forking lp server project
[02:39] <poolie> that would probably have needed to touch only that code
[02:39] <poolie> and landing it has been pretty hard
[02:40] <poolie> partly just because of bugs that appeared under heavy load; and those would have needed to be solved anyhow
[02:40] <lifeless> right
[02:40] <poolie> but, i think it would certainly have made it easier
[02:40] <lifeless> I was going to say
[02:40] <poolie> for instance easier to run up an ec2 instance and hammer it
[02:40] <lifeless> poolie: really?
[02:40] <lifeless> 'ec2 demo'; wait; hammer it.
[02:40] <poolie> hm
[02:41] <poolie> i wonder if jam tried that
[02:41] <poolie> perhaps not actually any easier
[02:41] <lifeless> spivs comment is more interesting :)
[02:41] <poolie> anyhow i guess there are two questions here
[02:41] <lifeless> the friction-to-change-in-lp aspect is well covered I think
[02:41] <poolie> :-P
[02:41] <lifeless> I'm curious about other interesting things
[02:42] <poolie> i don't think this would really directly satisfy those users
[02:42] <lifeless> like - adopt it for bzr's on server (make some of the policies pluggable, for instance)
[02:42] <poolie> it might be a step towards having a common codebase
[02:42] <lifeless> *own*
[02:43] <poolie> hm, there is an _apparent_ contradiction here with wanting to make codebrowse more folded into launcphad
[02:43] <lifeless> how so ?
[02:43] <lifeless> actually
[02:43] <poolie> at any rate there is a kind of precedent there for having one program that is used both by lp and externally
[02:43] <lifeless> contractors here
[02:43] <lifeless> I will be back in a bit
[02:43] <lifeless> ah no
[02:43] <lifeless> false alarum
[02:45] <poolie> a few dimensions:
[02:45] <poolie> - would this make it easier to make changes on codehosting in lp.net
[02:45] <poolie> - are we actually likely to want to make any changes to it
[02:45] <poolie> - would it make it easier to reuse externally
[02:47] <lifeless> so cool interesting things is actually what I wanted to ask about :)
[02:47] <lifeless> you could say no to all your three things there and still do something cool or interesting with it
[02:48] <lifeless> I merely mean to encourage out-of-box stuff
[02:48] <poolie> it could well do
[02:48] <poolie> hm
[02:51] <poolie> could well do
[02:52] <poolie> i may be inside the box but it seems like they would still be gated by needing to actually get run somewhere
[02:52] <poolie> either deployed on lp or run by other people
[02:53] <lifeless> sure
[02:53] <lifeless> perhaps saying to to /all 3/ isn't plausible :)
[02:54] <poolie> at the moment i feel those 3 dimensions all get a weak yes at the moment
[02:54] <poolie> i'm trying to think of things that would make sense to do in there but not in standalone bzr serve
[02:54] <poolie> perhaps structured audit logs or notifications?
[02:58] <lifeless> it implements ssh
[02:58] <lifeless> so user management
[02:58] <lifeless> multiplexing onto one account
[02:59] <poolie> mm
[02:59] <poolie> oh, easy deployment on windows?
[02:59] <poolie> fsvo easy :) assuming you have to install twisted and everything
[02:59] <lifeless> brb
[03:00] <poolie> it would be an interesting case where you'd like to provide a fake/simple implementation of the other side of the services it uses
[03:00] <poolie> the registry type things read by xmlrpc
[03:25] <lifeless> yes
[04:12] <lifeless> wow
[04:12] <lifeless> only 2 failures
[04:18] <wgrant> lifeless: On?
[04:22] <lifeless> mailed you for your edification
[04:23] <wgrant> Ah, that bug.
[04:23] <lifeless> hmm
[04:23] <lifeless> person.join(team) and team.addMember are asymmetric
[04:23] <lifeless> I suspect this will cause issues
[04:24] <lifeless> however
[04:24] <lifeless> I shall close my eyes and go bravely forward.
[04:25] <lifeless> (specifically team.join doesn't honour admin or owner rights)
[04:25] <lifeless> it prefilters, wrongly
[04:28] <lifeless> hah
[04:28] <lifeless> it goes deeper though
[04:28] <lifeless> getDirectAdministrators includes the owner
[04:28] <lifeless> I'll leave that for now
[04:28] <wgrant> The bug says that.
[04:31] <lifeless> bah so it does
[04:33] <lifeless> actually
[04:33] <lifeless> I'm going to exclude that
[04:34] <lifeless> there is a (reasonable) argument that owner implies admin
[04:34] <lifeless> (or that our admin stuff is not granular enough)
[04:34] <lifeless> mmm, but then it might be confusing.
[04:35] <lifeless> it would be odd for an owner to have to join the team to rename it or change its metadata
[04:35] <lifeless> so - excluding admin for now
[04:48] <lifeless> why does the sample data have someone called 'dumper' ? ><
[04:49] <wgrant> Same reason as mark is there, I guess.
[04:49] <wgrant> Renamed to avoid pings.
[04:49] <lifeless> ah
[04:56] <lifeless> wgrant: do you have any ideas about the first failure there ?
[04:56] <lifeless> its got me a little flummoxed
[05:00] <lifeless> mark has a row for membership in ~admins
[05:02] <lifeless> hah
[05:02] <lifeless> I wonder if we have naffed sample data
[05:02] <lifeless>     mark.inTeam(getUtility(ILaunchpadCelebrities).admin)
[05:02] <lifeless> False
[05:03] <LPCIBot> Project windmill-db-devel build #348: STILL FAILING in 1 hr 5 min: https://lpci.wedontsleep.org/job/windmill-db-devel/348/
[05:13] <wgrant> lifeless: Hah. Probably.
[05:13] <wgrant> lifeless: There's a script for that.
[05:19] <lifeless> its more subtle than that
[05:19] <lifeless> can_edit_team is returning False
[05:20] <lifeless> also its checking the way-bong side of the equation but thats a different discussion
[05:20] <wgrant> Hm, TP seems consistent.
[05:20] <wgrant> :(
[05:23] <lifeless> eah
[05:24] <lifeless> s/^/y
[05:29] <lifeless> ok its true at the start
[05:29] <lifeless> something in this test script corrupts it
[05:30] <lifeless> bsearch time
[05:31] <lifeless> and looks like we manually expire mark from admins
[05:31] <wgrant> Yay
[05:31] <lifeless> line 612
[05:32] <lifeless> this test was only working because mark owns ~admins in the sample data
[05:32] <wgrant> Awesome.
[05:33] <lifeless> which is what I'm changing
[05:37] <lifeless> ok now its just weird
[05:37] <lifeless> admin_person *is* an admin
[05:37] <lifeless> but its still throwing a security proxy error
[05:42] <wgrant> inTeam cache busted?
[05:42] <lifeless> I tried disabling that
[05:42] <lifeless> its not reach inTeam
[05:42] <lifeless> so a cached security assertion or something
[05:54] <wallyworld_> lifeless: is there a pattern we use to bulk load (eager fetch) fields of type CollectionField? rather than just single object references
[05:55] <lifeless> yes, see lp.services.database.bulk.load_referenced
[05:55] <wallyworld_> thanks
[05:57] <wallyworld_> lifeless: you mean load_referencing? i'm using that and it's not preventing db hits
[05:57] <wgrant> You need to make it a cachedproperty.
[05:58] <lifeless> wallyworld_: that gets the data, it won't seed it for traversals.
[05:58] <wallyworld_> bugger
[05:59] <wallyworld_> it's not worht making it a cachedproperty since the field is only referenced once for each object
[05:59] <wallyworld_> i guess there's no way to bulk load *and* seed the traversals?
[06:01] <lifeless> why do you say its not worth it ?
[06:01] <lifeless> also which types are we talking about ?
[06:02] <lifeless> wgrant: >< its still using 'mark' for some -bizarre- reason
[06:02]  * lifeless tries to figure it out
[06:04] <wallyworld_> lifeless: there's a list of 6 people. we display irc nick. we only have to access the irc nic collection field once per rendering per person
[06:04] <wallyworld_> but that does one query per person
[06:04] <lifeless> right, you want a cached property.
[06:04] <lifeless> totally appropriate
[06:04] <lifeless> see the other use of load_referencing
[06:06] <wallyworld_> in this case, the irc nic is only defined as a class field of type SQLMultipleJoin. so i will need to introduce a new property?
[06:06] <lifeless> yes
[06:07] <lifeless> you need to move the join attribute to a private attribute
[06:07] <wallyworld_> ok
[06:08] <lifeless> add a cached property with the same name as the current join attribute
[06:08] <lifeless> seed it appropriately and deal with fallout
[06:08] <wgrant> Do you need the join attribute?
[06:09] <lifeless> well, perhaps not.
[06:09] <wgrant> Just Stormify it.
[06:09] <wgrant> In the cachedproperty.
[06:09] <wgrant> Return a list of a Stormified query.
[06:09] <lifeless> wgrant: Reference is storm :P
[06:09] <wgrant> Less SQLObject, better for the world :)
[06:09] <wgrant> SQLMultipleJoin is not.
[06:09] <lifeless> true
[06:10] <lifeless> but stormify != remove join attribute
[06:10] <lifeless> anyhow
[06:10] <lifeless> wtf
[06:10] <lifeless> pasting you a snippet
[06:10] <wgrant> k, I am intrigued.
[06:10] <wallyworld_> also - Person.preferredemail is a cachedproperty. but it hits the database once per person cause it does a query inside the property getter. and no luck so far seeding the data
[06:10] <wgrant> lifeless: Hm? I meant create a Stormified query.
[06:10] <wgrant> Not Stormify the class.
[06:10] <wgrant> wallyworld_: Which name are you seeding?
[06:10] <lifeless> wgrant: yes, you could also just use a storm Reference directly.
[06:11] <wgrant> ReferenceSet, possibly, yes.
[06:11] <wgrant> Hmm.
[06:11] <wgrant> How is admin_person set there?
[06:11] <wallyworld_> perhaps i'm not doing the seeding correctly
[06:11] <wallyworld_> bulk.load_referencing(EmailAddress, persons, ['personID'])
[06:11] <lifeless> wgrant: >>> admin_person = personset.getByEmail(ADMIN_EMAIL)
[06:11] <lifeless> wallyworld_: use PersonSet.getPrecachedPersonsByIds
[06:11] <wallyworld_> it does the correct sql from what i can see, but....
[06:12] <lifeless> wallyworld_: and listify its output
[06:12] <wallyworld_> right. will take a look. thanks
[06:12] <lifeless> wallyworld_: *always* use that when dealing with persons
[06:12] <lifeless> wallyworld_: also change the vocab to just return the Person ids
[06:12] <wgrant> lifeless: Shouldn't that always be name16?
[06:12] <lifeless> wgrant: yes.
[06:12] <lifeless> wgrant: and it is!
[06:12] <wgrant> So why is the test saying it should be something else?
[06:13] <lifeless> exactly!
[06:13] <wallyworld_> lifeless: so this will need to be done across the board for all person related vocabs
[06:13] <lifeless> wallyworld_: one query at a time
[06:13] <wgrant> Welcome to massive layering violations :)
[06:13] <wallyworld_> np, just wondering
[06:14] <wallyworld_> i guess the vocab stuff predated the getPrecachedPersons... stuff
[06:14] <lifeless> yes
[06:14] <lifeless> until 11 months ago we liked to requery everything
[06:15] <wallyworld_> right.
[06:16] <wallyworld_> context = makes more sense
[06:28] <lifeless> can has review? https://code.launchpad.net/~lifeless/launchpad/bug-227494/+merge/62943
[06:31] <wgrant> lifeless: Have you checked the teams that this will affect?
[06:31] <wgrant> They were mostly Ubuntu teams when I last looked.
[06:31] <lifeless> ~admins :)
[06:32] <lifeless> no I haven't
[06:34] <poolie> lifeless: putting a commit message on my restfulclient mp didn't cause it to land
[06:35] <lifeless> 1300 rows
[06:35] <lifeless> poolie: hmm, need to ask someone that knows. benji or gary come to mind.
[06:35] <lifeless> poolie: unless README says something useful
[06:35] <wgrant> "cause it to land"?
[06:35] <wgrant> Landings don't happen automatically.
[06:36] <poolie> i guess what i really want to ask is: how is the trunk of restfulclient maintained
[06:36] <poolie> by pqm, tarmac, manually, etc
[06:36] <poolie> i could mail them
[06:36] <lifeless> wgrant: some subprojects use tarmac
[06:36] <wgrant> lazr.restful is manual.
[06:36] <wgrant> Not sure about restfulclient.
[06:37] <wgrant> lifeless: Do they?
[06:37] <poolie> i'll subscribe benji
[06:37] <poolie> thanks
[06:37] <wgrant> lifeless: person.merged IS NOT NULL
[06:37] <wgrant> Er, IS NULL
[06:37] <wgrant> Cuts it down to 500ish.
[06:37] <lifeless> wgrant: 471
[06:37] <lifeless> wgrant: already done that
[06:38] <lifeless> wgrant: some are truely noddy - https://launchpad.net/~ubuntu-jewish
[06:38] <wgrant> lifeless: You're calling *that* noddy?
[06:38] <wgrant> There are far worse :)
[06:38] <wgrant> Far, far worse.
[06:38] <lifeless> wgrant: I am - it has 1 proposed member, and the owner has left the team.
[06:38] <lifeless> wgrant: I wasn't saying anything about the name or intent of the team.
[06:39] <wgrant> I know.
[06:39] <wgrant> But there are the teams which invite every team.
[06:39] <wgrant> And have no members.
[06:39] <lifeless> yes
[06:39] <lifeless> affected by this ?
[06:39] <wgrant> Like the one that showed up last week.
[06:39] <wgrant> Invited dozens of teams.
[06:39] <wgrant> Owner had left it.
[06:39] <wgrant> Awesome.
[06:39] <lifeless> win
[06:39] <lifeless> anyhow
[06:39] <lifeless> so, I think we want to do this
[06:40] <wgrant> And then some of the invited teams had bad admin settings, so randoms approved them, and the real admins couldn't leave :(
[06:40] <wgrant> Yes.
[06:40] <wgrant> I think so.
[06:40] <lifeless> I will happily blog before it goes live
[06:40] <lifeless> its arguably exploitable today
[06:41] <lifeless> (find something that checks one way but not the other and leverage it)
[06:41] <wgrant> Yeah
[07:00] <lifeless> poolie: it should still be approved ;)
[07:00] <lifeless> poolie: I just meant ask benji about landing mechanisms
[07:02] <poolie> ffs "ConfigParser.NoOptionError: No option 'consumer_key' in section: '1'" _again_
[07:02] <poolie> do you ever see this?
[07:10] <poolie> should we subscribe some lp developer team to loggerhead reviews?
[07:11] <poolie> at the moment they seem to go by default to.. beuno and ~bzr or something
[07:12] <lifeless> loggerhead-reviewers is the reviewer team
[07:12] <lifeless> https://launchpad.net/~loggerhead-reviewers/+members
[07:12] <lifeless> so they already are
[07:12] <poolie> oh, ok
[07:12] <poolie> i must have implicitly claimed it
[07:13] <poolie> nm then
[07:16] <LPCIBot> Project windmill-db-devel build #349: STILL FAILING in 1 hr 6 min: https://lpci.wedontsleep.org/job/windmill-db-devel/349/
[07:47] <lifeless> wgrant: follow up on https://code.launchpad.net/~lifeless/launchpad/bug-227494/+merge/62943 ?
[07:49] <wgrant> lifeless: You are arbitrarily changing the user to an admin half-way through because the owner has no privs.
[07:49] <wgrant> That may be invalidating subsequent tests.
[07:50] <wgrant> Even if it isn't, it's rather confusing to change it partially globally when only that one block needs it.
[07:50] <lifeless> wgrant: have you looked through that doctest ?
[07:50] <lifeless> hint: it does this a lot already
[07:50] <wgrant> It's a doctest. No.
[07:50] <lifeless> and the previous user was one it thought was an admin.
[07:50] <wgrant> Ah, I see.
[07:50] <wgrant> OK.
[07:50] <wgrant> An admin, but not an Admin.
[07:50] <wgrant> Not an ~admin, sorry.
[07:50] <lifeless> yes, a ~admin
[07:51] <wgrant> How did it stop being an admin?
[07:51] <lifeless> because it was mark
[07:51] <wgrant> Because it was the owner of ~admins?
[07:51] <lifeless> yes
[07:51] <wgrant> But the test removed that membership?
[07:51] <lifeless> yes
[07:51] <wgrant> ahhhhhhhh
[07:51] <wgrant> Carry on, then.
[07:51] <lifeless> it was BROKEN
[07:51] <wgrant> Preferably beating that test to death on the way.
[07:53] <lifeless> now I just need a reviewer.
[07:53] <lifeless> Perhaps we should graduate you now
[07:53] <wgrant> Hi StevenK.
[07:53] <wgrant> Heh
[07:53] <wgrant> Possibly.
[07:53] <lifeless> I have been waiting for you to consistently look below the surface on non-soyuz code
[07:54] <lifeless> which you have been improving on
[07:54] <lifeless> I don't recall finding things you missed recently other than the extraordinarily messy gpghandler stuff, which confused everyone.
[07:55] <lifeless> so, I think graduation is in order
[07:56] <wgrant> Yeah, the gpghandler example is bad, but I don't think anyone non-Twisted and non-you would have caught that either.'
[07:56] <wgrant> Since most people don't have much idea of Twisted :(
[07:58] <lifeless> facepalm
[07:58]  * lifeless sobs
[07:58] <wgrant> ?
[07:58] <wgrant> The other test?
[07:58] <spm> wgrant: are you being mean to lifeless again???
[07:58] <lifeless> https://code.launchpad.net/~xaav/loggerhead/export-tarball/+merge/62941
[07:58] <lifeless> copy and paste from bzrlib
[07:58] <lifeless> with mild tweaks
[07:59] <wgrant> Heh
[07:59] <wgrant> lifeless: So, am I graduating?
[07:59] <mrevell> Good morning
[08:00] <lifeless> wgrant: yes, I am mailing -dev
[08:00] <wgrant> lifeless: Thanks!
[08:00] <StevenK> wgrant: Grats!
[08:03] <wgrant>         return dumps({
[08:03] <wgrant>             'row_id': 'tasksummary%s' % self.context.id,
[08:03] <wgrant>             'bugtask_path': '/'.join(
[08:03] <wgrant>                 [''] + canonical_url(self.context).split('/')[3:]),
[08:05] <stub> lifeless: BugSummary.viewed_by is painful because of indirect subscriptions.
[08:06] <lifeless> stub: they don't grant visibility
[08:06] <lifeless> stub: so shouldn't be counted and don't matter
[08:07] <stub> So only direct subscribers can view private bugs? That should be fine then.
[08:07] <lifeless> yes
[08:07] <lifeless> where direct means 'in the team that is in the bugsubscription'
[08:07] <stub> Do bug supervisors get bugsubscription records created when a bug becomes private?
[08:08] <lifeless> yes
[08:08] <lifeless> all indirect subs do (thats a bug)
[08:08] <stub> Maybe it is now a feature ;)
[08:08] <lifeless> well
[08:08] <lifeless> the creation is fine
[08:08] <lifeless> the fact that all random 'happen to have a structural subscription' get subscribed is the bug
[08:15] <lifeless> wgrant: so, is that +1 on the branch then ?
[08:16] <wgrant> lifeless: I rereviewed a couple of minutes ago.
[08:16] <wgrant> So, yes.
[08:17] <lifeless> the mail just came in
[09:13] <adeuring> good morning
[09:21] <lifeless> stub: are our fti indices bloated again ?
[09:21] <lifeless> 94 /   42  Person:EntryResource:searchTasks
[09:21] <lifeless>       70 /   24  Distribution:EntryResource:searchTasks
[09:21] <lifeless>       45 /   12  Distribution:+bugs
[09:21] <lifeless> top timeouts
[09:22] <stub> lifeless: back at 70% bloat, yeah.
[09:23] <stub> bug_fti I mean
[09:23] <lifeless> ><
[09:23]  * lifeless stabs bug heat
[09:24] <nigelb> Wait, so canonical employees don't automatically become reviewers? Wow, that's interesting
[09:25] <StevenK> nigelb: It's a little more complicated than that, but not much.
[09:25] <StevenK> But no, they don't.
[09:25] <stub> lifeless: it is bloating between 1% and 2.5% per day looks like. It should be trivial to confirm this is bug heat calculation - just turn that script off for a day or two.
[09:25] <nigelb> StevenK: But how open is the process to outsiders, like me, for instance
[09:26] <lifeless> nigelb: quite open
[09:26] <lifeless> nigelb: the one thing you can't do is get to the point of approving other non-staff changes or actually landing changes
[09:26] <gmb> allenap: Any objections to me marking https://code.launchpad.net/~allenap/launchpad/rabbit-fixture-cookie-file/+merge/62709 as Work In Progress to make it go away from my todo list?
[09:27] <lifeless> nigelb: we require that all changes have *a* staff member involved.
[09:27] <lifeless> nigelb: because of the way things deploy and the risks around data exposure
[09:27] <nigelb> Ah, that explains that yes.
[09:27] <allenap> gmb: None, done.
[09:27] <gmb> allenap: Ta.
[09:28] <nigelb> lifeless: I expect there's a lot of private data with the hidden emails which would be illegal for a non-staff member to access.
[09:28] <gmb> poolie: Similarly, do you want https://code.launchpad.net/~mbp/launchpad/mail-scope/+merge/60281 reviewed now or should it wait until you've fixed the test failures?
[09:30] <lifeless> bigjools: :( - bug 790535
[09:30] <bigjools> is that the bug where mup won't tell me what it is? :)
[09:34] <lifeless> Distribution:+ppas timeouts
[09:34] <lifeless> https://bugs.launchpad.net/launchpad/+bug/790535
[09:37] <poolie> gmb more review now would be good
[09:37] <poolie> i doubt if the failure is deep
[09:37] <gmb> poolie: Righto, I'll take a sken presently.
[09:38] <StevenK> gmb: 'sken' ?
[09:38] <gmb> StevenK: "Look".
[09:38] <poolie> reading inference 101
[09:38] <poolie> ls
[09:39] <StevenK> gmb: I figured as such, I was just wondering about its entomology.
[09:39] <gmb> StevenK: It has nothing to do with insects.
[09:39] <gmb> :)
[09:39] <StevenK> Oh, arse.
[09:39] <gmb> But it's Lancs / Yorks (possibly other northern places too) dialectic slang, AFAICT.
[09:39] <gmb> I grew up with it, so I've no idea where it came from.
[09:40] <gmb> StevenK: But if it helps, The Beatles probably said it. (Boom boom).
[09:41] <gmb> It's only 9:41am and I'm being punny. What else will the day hold?
[09:43] <nigelb> This channel wins for the most interesting conversations EVAR.
[09:43] <gmb> I suspect that the barrier to entry for that competition is very, very low.
[09:44] <nigelb> No, I'm in #ubuntu-offtopic, so its very high
[09:45] <nigelb> I still need to fix a bug I introduced to LP, sigh.
[09:49] <dpm> hi danilos, morning. Do you happen to remember where rosetta/deleted-templates (the location where we used to put templates we wanted out of the way) went after the unification of all lp applications into a single launchpad project? I already asked you a while ago and you found out, but I can't remember where it was and I can't find it in my logs
[09:49] <dpm> or if anyone else can help ^
[09:56] <danilos> dpm, probably the 'null' project
[09:56] <danilos> dpm, also, there's old-lp-translations that's just a deactivated and renamed 'rosetta' project, so that's what has deleted-templates stuff as well
[09:57] <dpm> thanks danilos, I'll try both
[10:01] <dpm> danilos, old-lp-translations/deleted-templates worked, thanks
[10:01] <danilos> yw
[10:02] <LPCIBot> Project windmill-devel build #156: STILL FAILING in 1 hr 8 min: https://lpci.wedontsleep.org/job/windmill-devel/156/
[10:13] <gmb> poolie: r=me
[10:40] <poolie> thanks gmb
[10:42] <poolie> gmb: do you think you could pilot-in james's patch  https://code.launchpad.net/~james-w/launchpad/more-matchers/+merge/32057
[10:42] <gmb> poolie: Sure thing.
[10:42] <poolie> and perhaps some of the loggerhead patches
[10:42] <poolie> james's should be trivial
[10:43] <poolie> hooray :)
[10:43] <gmb> poolie: I've never landed a loggerhead patch before; anything special I need to know?
[10:43] <gmb> Or is it PQM all the way down?
[10:43] <poolie> i don't think there is a pqm
[10:43] <poolie> imbw
[10:43] <poolie> i think it's just direct commits
[10:43] <poolie> the hard thing will be getting to know the code enough to review it :/
[10:44] <poolie> oh, but jam is online, and he knows about it
[10:44] <gmb> Ah, good. THat might be safer.
[11:10] <poolie> but if you drive them that would be good
[11:10] <poolie> some review or landing is better than none
[11:11] <gmb> poolie: Sure. I'll take a look at them today.
[11:11] <poolie> legend
[11:58] <lifeless> night all
[12:21] <LPCIBot> Project windmill-devel build #157: STILL FAILING in 1 hr 8 min: https://lpci.wedontsleep.org/job/windmill-devel/157/
[13:31] <henninge> Hi gmb! Could you have a look at this mp of mine, please? ;-)
[13:31] <henninge> https://code.launchpad.net/~henninge/launchpad/bug-778129-person-picker/+merge/62894
[13:31] <gmb> henninge: Sure thing.
[13:43] <gmb> henninge: r=me with comments
[13:43] <henninge> gmb: thanks
[13:44] <henninge> gmb: I copied the indention from another test case in the same file. I can fix both.
[13:44] <gmb> henninge: Brilliant, thanks.
[13:45] <henninge> gmb: is ![13:45] <gmb> Oo.
[13:45] <gmb> henninge: Good question. In that case, leave it.
[13:46] <gmb> I'm not sure ( and if it works, don't fix it)
[13:46] <gmb> But if you want to find out, that's fine by me :)
[13:46] <gmb> Like I said, it's not worth blocking on.
[13:46] <henninge> although Crockford acts like there is only [13:46]  * henninge tries out.
[13:52] <gmb> jam: Do you know what the situation is with https://code.launchpad.net/~malept/loggerhead/standalone-auth/+merge/18828?
[13:52] <jam> not offhand
[13:52] <gmb> Okay.
[13:52] <gmb> I'll add a comment and put it to work in progress then to make it leave the review queue.
[14:02] <deryck> henninge, ping for standup
[14:05] <henninge> deryck: sorry
[14:09] <deryck> henninge, http://pastebin.ubuntu.com/615334/
[14:34] <LPCIBot> Project windmill-db-devel build #350: STILL FAILING in 1 hr 6 min: https://lpci.wedontsleep.org/job/windmill-db-devel/350/
[14:35]  * gmb -> short break
[14:47] <flacoste> wgrant: congratulations for your reviewerhood!
[14:47] <wgrant> flacoste: Thanks!
[14:47] <nigelb> oooh, yeah. I saw that mail when I woke up.
[14:47] <nigelb> Congrats wgrant!
[14:48] <bigjools> damn, now we have to start being nice to him
[15:01] <jcsackett> clear
[16:07] <jtv> gmb: got a free slot on the review queue?  https://code.launchpad.net/~jtv/launchpad/db-bug-790161/+merge/63002
[16:07] <gmb> jtv: Sure thing.
[16:07] <jtv> Splenders.
[16:07] <gmb> Tip-top.
[16:52] <gmb> jtv: r=me
[16:52] <jtv> thanks!
[16:52] <gmb> np
[16:53] <sinzui> gmb: is it too late for you to  review https://code.launchpad.net/~sinzui/launchpad/display-name-with-id-0/+merge/63006
[16:54] <gmb> sinzui: Nope. I'll look presently.
[16:54]  * deryck goes offline for lunch, back soon
[17:29] <gmb> sinzui: r=me
[17:33] <sinzui> thanks gmb
[17:40] <jcsackett> exit
[17:51] <bigjools> You have running jobs
[17:53] <sinzui> jcsackett: do you have time to talk?
[18:53] <LPCIBot> Project windmill-devel build #158: STILL FAILING in 1 hr 9 min: https://lpci.wedontsleep.org/job/windmill-devel/158/
[19:01] <LPCIBot> Project db-devel build #601: FAILURE in 4 hr 40 min: https://lpci.wedontsleep.org/job/db-devel/601/
[19:03] <jcsackett> sinzui: i am available when you are.
[19:39] <sinzui> jcsackett: I am available to talk now
[19:39] <jcsackett> sinzui: cool. mumble or sip?
[19:39] <sinzui> I am on mumble now
[19:39]  * jcsackett goes to fire up mumble.
[19:57] <LPCIBot> Project windmill-db-devel build #351: STILL FAILING in 1 hr 4 min: https://lpci.wedontsleep.org/job/windmill-db-devel/351/
[20:18] <flacoste> wtf
[20:19] <flacoste> what is this not_exported = TextLine(title="Not exported")
[20:19] <flacoste> ?
[20:19] <flacoste> in interfaces declaration in sourcepackage.py
[20:22] <flacoste> ok
[20:22] <flacoste> disregard that wtf
[20:22] <flacoste> i was in a test file, not in sourcepacakge.py
[20:25] <lifeless> moin
[20:39] <LPCIBot> Project windmill-db-devel build #352: STILL FAILING in 41 min: https://lpci.wedontsleep.org/job/windmill-db-devel/352/
[20:41] <abentley> lifeless: can we chat about bug #595166?
[20:41] <_mup_> Bug #595166: IntegrityError raised filing a bug using the email interface <bad-commit-13139> <easy> <email> <lp-bugs> <oops> <qa-bad> <Launchpad itself:Fix Committed by abentley> < https://launchpad.net/bugs/595166 >
[20:49] <lifeless> abentley: sure thing
[20:50] <lifeless> abentley: just give me 5 minutes to sort some cats out
[20:50] <abentley> lifeless: sure.
[20:55] <lifeless> ok they seem happy for now
[20:55] <lifeless> would you like voice ?
[20:55] <abentley> lifeless: yes, please.  Skype, I imagine?
[20:56] <lifeless> yeah. .nz.win ;)
[20:56] <lifeless> interestingly the canonical voip service works well
[20:56] <lifeless> just mumble hates freedom :)
[21:25] <abentley> lifeless: btw, I would be curious to try canonical voip.  I recently set it up on my phone.
[21:27] <lifeless> abentley: nice
[21:27] <lifeless> abentley: lets do that next time
[22:00] <flacoste> gary_poster: i'm testing object's permission, I would use check_permission, but I think you had another suggestion
[22:00] <flacoste> check_permission coming from canonical.launchpad.webapp.authorization
[22:01] <gary_poster> flacoste, I generally try to use canWrite and canRead (might have forgotten names) from zope.security
[22:01] <gary_poster> on call
[22:01] <flacoste> ack
[22:02] <lifeless> walk the dinosaur?
[22:02] <flacoste> lifeless: ?
[22:04] <lifeless> flacoste: ;) referencing a song
[22:07] <abentley> lifeless: care to do the review? https://code.launchpad.net/~abentley/launchpad/no-dedup/+merge/63044
[22:11] <lifeless> abentley: sure, done.
[22:11] <abentley> lifeless: thanks.
[22:12] <lifeless> I editorialised a little for future reference
[22:12] <lifeless> I wonder if our mail handling doctests have something about duplication in them?
[22:12] <abentley> lifeless: could be.  test_messages didnt.
[22:14] <abentley> lifeless: my new toy "fault line" didn't find strong correlations between changes to messages.py and changes to particular test files.
[22:15] <lifeless> abentley: does it consider mainline commits only ?
[22:15] <lifeless> abentley: I can imagine feature branches not having a high association but the mainline diffs having one
[22:15] <abentley> lifeless: no, it only looks at revisions that modified the file.  I"d like to change that, but I don't know how to do it efficiently.
[22:17] <lifeless> you need the 'first mainline rev after the rev that modified the file'
[22:17] <abentley> lifeless: Yes.
[22:17] <lifeless> this is retrievable from merge_sorted revisions
[22:17] <abentley> lifeless: isn't that a whole-graph operation?
[22:18] <lifeless> abentley: yes, 4 seconds for me on lp
[22:18] <lifeless> abentley: you'd do it once per run though, giving you an efficient data structure to answer the question for all the modified revs
[22:19] <abentley> lifeless: Acceptable, given the whole operation takes ~20 seconds for me.
[22:20] <abentley> lifeless: message.txt does fail.  Thanks for the tip.
[22:20] <lifeless> no worries
[22:37] <lifeless> sinzui: hi
[22:37] <lifeless> sinzui: got a few minutes?
[22:37] <sinzui> I do
[22:37] <lifeless> I had two questions for you
[22:37] <lifeless> one simple, one a little complex (perhaps needs voice)
[22:37] <lifeless> the simple one is with person/fmt:link-name-id
[22:37] <lifeless> do we still want fmt:link at all ?
[22:38] <lifeless> I was thinking we were going to change it everywhere
[22:38] <lifeless> which would be a simpler patch - just change the existing formatter.
[22:38] <sinzui> yes. It is correct for most cases such as tables and summaries
[22:38] <lifeless> That confuses me a little but ok.
[22:38] <sinzui> We have a specialised formatter to communicate the Lp id, but we never fully implemented
[22:39] <sinzui> I intend to complete the implementation
[22:39] <lifeless> the other question is about private public team membership interactions
[22:39] <lifeless> if you can spare some time to talk about it - doesn't need to be now - I'd like to tease the issues apart. I suspect we agree.
[22:40] <sinzui> lifeless: my sip is 7642
[23:34] <LPCIBot> Project windmill-db-devel build #353: STILL FAILING in 1 hr 5 min: https://lpci.wedontsleep.org/job/windmill-db-devel/353/
[23:41] <LPCIBot> Yippie, build fixed!
[23:41] <LPCIBot> Project db-devel build #602: FIXED in 4 hr 40 min: https://lpci.wedontsleep.org/job/db-devel/602/
[23:47] <lifeless> sinzui: I hope I captured things well in bug 405277
[23:47] <_mup_> Bug #405277: Private teams are not able to join other teams (public or private) <disclosure> <lp-registry> <Launchpad itself:Triaged> < https://launchpad.net/bugs/405277 >
[23:47] <lifeless> sinzui: it seems like 3 fairly contained changes to me.
[23:48] <sinzui> lifeless: this looks very good. Thank you/
[23:56] <lifeless> oh, I forgot the bit about 'and tell them the implications'
[23:56] <lifeless> adding that in