[00:00] <lifeless> lk
[00:02] <poolie> lifeless, hi there,
[00:02] <poolie> we're just cleaning out some bugs like bug 722043 where bzr users report ssl timeouts getting to launchpad
[00:02] <lifeless> hi poolie
[00:02] <_mup_> Bug #722043: bzr crashed on launchpad-login <amd64> <apport-crash> <natty> <running-unity> <bzr (Ubuntu):New> < https://launchpad.net/bugs/722043 >
[00:03] <poolie> obviously there is one easy bug here which is that bzr should not give a traceback
[00:03] <poolie> assuming we are not doing something dumb that gives a short timeout or causes a spurious failure
[00:03] <poolie> and also assuming it's not a local network problem
[00:03] <poolie> i guess it may be an lp issue
[00:03] <poolie> but, probably just operational or intermittent, and perhaps not worth fliing as a bug
[00:03] <sinzui> wgrant: mumble?
[00:04] <lifeless> poolie: this is the thing that that thomas guy from openstack whas having issues with, Ithink
[00:04] <poolie> there are a few dupes
[00:04] <lifeless> mmm
[00:04] <lifeless> so launchpad-login talks to xmlrpc
[00:04] <lifeless> the get one is talking to a different vhost
[00:05] <lifeless> and not using the xmlrpc proxy
[00:05] <lifeless> perhaps its the same, perhaps not
[00:05] <lifeless> anyhow
[00:05] <poolie> so, soon if not already, we should cease using xmlrpc on trunk
[00:05] <lifeless> we want to know of these issues so we can fix, where the fix is at all doable by us
[00:05] <poolie> (maybe not for anonymous access?)
[00:05] <wgrant> sinzui: mumble mumble sure.
[00:06] <poolie> but the one talking to the webapp will still exist
[00:06] <wallyworld> sinzui: we can hear you
[00:07] <lifeless> yup
[00:54] <wgrant> lifeless: I eliminated packagebuild last night.
[00:54] <wgrant> buildfarmjob will hopefully die today.
[00:55] <wgrant> Apart from a couple of Storm bugs it was fairly simple.
[00:55] <wgrant> (inherited References == breakage)
[00:56] <lifeless> \o/
[00:57] <lifeless> wgrant: and bpb ?
[00:57] <wgrant> lifeless: PB has been flattened into SPRB and BPB.
[00:57] <lifeless> oh right
[00:57] <lifeless> I mismentallyhandled your change
[00:58] <wgrant> They both now reference BuildFarmJob, which I will hopefully flatten into them today,.
[00:58] <wgrant> But it's slightly harder.
[00:58] <lifeless> so bfj is all that remains to flatten
[00:58] <wgrant> Since we query based on it at times.
[00:58] <lifeless> it has three users
[00:58] <wgrant> Yeah.
[00:58] <wgrant> There are about two or three methods that use BuildFarmJob in a generic way, so I just need to fix them.
[01:26]  * wallyworld off to doctor for blood test
[02:52] <lifeless> hmm
[02:52] <lifeless> we needs a deploy
[02:53] <wgrant> We do.
[02:53]  * wgrant QAs process-accepted.
[02:56]  * wallyworld shakes fist at windmill... again
[02:56] <wgrant> wallyworld: Oh?
[02:56] <wallyworld> why dies waits.forElement(xpath=xxx) work but asserts.assertNode(xpath=xxx) fail
[02:56] <wallyworld> same xpath
[02:56] <wgrant> Hah
[02:56] <wallyworld> haven't looked at the code, but you would think it would work
[02:57] <wallyworld> anyhoo, another test passes
[02:57] <wallyworld> again
[02:57] <wgrant> wallyworld: Which? The broken one?
[02:57] <wallyworld> till next time something breaks
[02:57] <wgrant> StevenK: Is canonicloud broken?
[02:57] <wallyworld> test_filebug_extra_options
[02:57] <StevenK> Likely suffering from the release DDoS
[02:57] <wgrant> Yeah.
[02:57] <wgrant> wallyworld: Hmm.
[02:58] <wallyworld> wgrant: plus the xpath was actually wrong
[02:58] <wallyworld> wgrant: i fixed it and then was wondering why it still failed
[02:58] <StevenK> wgrant: Yes, tis broken.
[02:59] <wgrant> StevenK: Great.
[02:59] <wgrant> As long as it's not our problem.
[03:08] <StevenK> Ha. Those nodes are going to take a WHILE to come up.
[03:09] <wgrant> Oh?
[03:09] <wgrant> a.u.c overloaded?
[03:09] <StevenK> Yup
[04:00] <lifeless> hmm
[04:00] <lifeless> now I have unity on my primary machine, more quirks emerge/
[04:01] <wgrant> Oh?
[04:01] <lifeless> the machine scrollbars don't show up reliably
[04:02] <lifeless> I'm having to do a binary chop along the length of the window to find the horizontal scroll handle
[04:02] <wgrant> Hah
[04:03] <lifeless> wgrant: you don't have that problem?
[04:04] <wgrant> lifeless: It seems to only appear next to the thumb.
[04:04] <lifeless> wgrant: thumb?
[04:04] <wgrant> lifeless: The orange/filled bit of the scrollbar.
[04:04] <lifeless> I just have a thin grey line along the bottom of the screen
[04:05] <wgrant> Oh, not sure about horizontal scrollbars.
[04:05] <lifeless> Ok, squinting I can just make out that there is a difference ther.
[04:06] <lifeless> I think this sill last until I get a headache
[04:06] <lifeless> :(
[04:06] <wgrant> I quite like the new scrollbars.
[04:07] <wgrant> Except the whole "1px should be enough for everybody" thing.
[04:08] <lifeless> I can't make out the thumb on the vertical on my CRT at all
[04:08] <wgrant> Hmm, it's fairly obvious here.
[04:08] <wgrant> But I don't use a CRT.
[04:09] <lifeless> I have to move the mouse downthe window  carefully to stay in the grab region width - until the grab appears
[04:09] <lifeless> to figure out how far through the document I am
[05:19]  * StevenK tries to work out how to get from a ResultSet to a hash
[05:20] <lifeless> a hash?
[05:20] <StevenK> Er, sorry, Perl-ism
[05:20] <StevenK> dict
[05:20] <lifeless> your perl is showing ...
[05:20] <StevenK> :-)
[05:20] <lifeless> map/dict/whatever you want
[05:20] <lifeless> the default is to give you objects
[05:20] <StevenK> Hm, which aren't really keyable
[05:21] <StevenK> But the code looks it up anyway
[05:21] <lifeless> perhaps some context would help
[05:21] <StevenK> lifeless: I'm fixing populate_distroseriesdiff to use DistroSeriesParent
[05:22] <StevenK> lifeless: DistroSeriesParent is a table that shows the relationship between a parent and a derived series -- please note that this is a Many-to-1 relationship WRT to the child.
[05:23] <StevenK> lifeless: So I'm fixing the code to deal with multiple parents, but there is code that looks up all derived series -- this used to be simple, since we assumed that if IDistroSeries.parent_series was set, and wasn't the same Distribution as the child, they are derived.
[05:24] <lifeless> StevenK: isn't it just a join now ?
[05:25] <StevenK> Since I deal with multiple parents, I need to loop, which is fine, but I'm trying to work out how to store the mapping of child to parent(s) -- a dict of {'child': ['parent1', 'parent2']} sounds like a good solution
[05:25] <lifeless> child_distroes = list(store.find(distroseries, distroseriesparent.childID==distroseries.id, distroseriesparent.parentID==self.id))
[05:26] <lifeless> do you need transitive children or direct children ?
[05:26] <StevenK> Actually, this is seperate code, and is wanting to find all derived distroseries, regardless of parent
[05:26] <lifeless> if you need transitive children you want a with clause and a recusrsive query.
[05:26] <lifeless> StevenK: so you want all distroseries that are derivatives?
[05:26] <StevenK> (IE, self.id makes no sense)
[05:27] <lifeless> derivatives = list(store.find(distroseries, distroseriesparent.childID==distroseries.id))
[05:27] <StevenK> lifeless: I can find that easily enough -- I'm trying to figure out how to store the information that doesn't result in a massive loop over a ResultSet
[05:27] <lifeless> derivates = set(store.find(distroseries, distroseriesparent.childID==distroseries.id))
[05:27] <lifeless> ?
[05:28] <StevenK> But how does that help the multiple parents case?
[05:28] <StevenK> I'd also like to get the parents at the same time -- pre-loading them
[05:29] <lifeless> StevenK: you didn't say you wanted the parents :)
[05:29] <StevenK> Oh, sorry. I do. :-)
[05:30] <lifeless> derivatives = set(DecoratedResultSet(store.find((DistroSeries, DistroSeriesParent), DistroSeriesParent.childID==DistroSeries.id), operator.itemgetter(0)))
[05:31] <lifeless> mmm
[05:31] <lifeless> .parents will be a join
[05:31] <lifeless> so you'll need a more complex one - you need a cached property on DistroSeries that can remember the parents for you
[05:31] <lifeless> then
[05:31] <lifeless> def eager_load(rows):
[05:31] <lifeless>     for distroseries, parent in rows:
[05:32] <lifeless>     cachedpropery_manager(distroseries)._parents.append(parent)
[05:32] <lifeless> [with the obvious tweak to handle the first parent]
[05:32] <lifeless> and the query becomes
[05:32] <lifeless> derivatives = set(DecoratedResultSet(store.find((DistroSeries, DistroSeriesParent), DistroSeriesParent.childID==DistroSeries.id), pre_iter_hook=eager_load)
[05:33] <lifeless> )
[05:43] <jtv> I finally realized why people wear trousers at work.
[05:44] <StevenK> Just now?
[05:44] <jtv> Yes.  Sometimes coffee mugs just break at the handle, and I just realized how much worse things could have been.
[05:44] <jtv> I knew there had to be a reason, since so many people were doing it.
[05:44] <jtv> But does that imply a good reason?  Many people use Windows.
[05:45] <jtv> So quite an epiphany.
[05:47] <jtv> *However there is the corollary of multi-touch trackpads, Unity gestures, and electricity-conducing liquids not mixing well.
[05:47] <jtv> No amount of trousing is going to help with that.
[05:49] <jtv> Better shut down and let this dry up... no way I'm getting anything done like this.
[05:52] <StevenK> lifeless: Where is cachedproperty_manager defined? My grep didn't find it.
[05:53] <lifeless> from lp.services.propertycache
[05:53] <StevenK> Ta, I shall dig there to make sure of _ placement and so on
[05:54] <lifeless> StevenK: I've given you a brief sketch; if you have trouble shout and I'll explain missing bits
[05:54] <lifeless> StevenK: this idiom is in reasonably widespread use
[05:54] <lifeless> FWIW
[05:55] <StevenK> Do you mean cachedproperty(distroseries)._parent, by the way?
[06:12] <StevenK> lifeless: ^ I don't think you do, since cachedproperty is a decorator
[06:12] <lifeless> right
[06:13] <lifeless> get_property_cache
[06:13] <lifeless> lets you get at the cache
[06:14] <lifeless> .parents should be the attribute, if the cachedproperty will be 'def parents'
[06:14] <lifeless> and you want the regular join attribute to be on _parents
[06:14] <lifeless> so you have
[06:14] <lifeless> @cachedproperty
[06:14] <lifeless> def parents(self):;
[06:14] <lifeless>     return list(self._parents)
[06:14] <lifeless> which will support folk doing late evaluation of the parents
[06:16] <StevenK> I see where you're going -- adding a decorated method onto IDistroSeries
[06:22] <lifeless> when eager loading you inject into the property
[07:44] <lifeless> evening stub
[07:44] <lifeless> I haven't made any trigger progress
[07:44] <lifeless> had a day of copying vms around basically ;<
[07:44] <stub> yo
[07:44] <stub> ok
[08:00] <poolie> hi all
[08:00] <poolie> that '-' bastard is a slack reviewer
[08:03] <StevenK> Haha
[08:04] <StevenK> poolie: There is no OCR for Friday APAC
[08:04] <poolie> StevenK, i don't recall often seeing one in apac timezones
[08:04] <poolie> in fact i had kind of thought the concept was dead entirely
[08:04] <poolie> but apparently not in eu/us
[08:04] <StevenK> poolie: https://dev.launchpad.net/ReviewerSchedule
[08:05] <poolie> what should i do to get https://code.launchpad.net/~mbp/launchpad/mail-cleanup/+merge/58867 going again?
[08:05] <wgrant> APAC reviewers tend to defect to other parts of Canonical.
[08:05] <StevenK> Haha
[08:05] <poolie> oh huh
[08:06] <StevenK> poolie: Given the time, I'd suggest waiting for adeuring and asking him.
[08:06] <poolie> realistically i may not be able to land it and catch fallout before i leave for uds etc
[08:06] <poolie> k thanks
[08:06] <StevenK> I think wallyworld should become a reviewer*
[08:07]  * StevenK drops thumper and leonardr from the table
[08:07] <poolie> good idea
[08:08] <StevenK> And rockstar :-(
[08:10] <stub> poolie: That MP looks approved to me
[08:11] <poolie> because of the 'approve code'?
[08:11] <StevenK> Yes, benji approves
[08:11] <poolie> lp is a bit unclear about votes vs mp status
[08:11] <wallyworld> StevenK: i sort of already am, but maybe not "formally"
[08:11] <poolie> so i can set the state to approved?
[08:12] <StevenK> poolie: If you feel it has been reviewed enough, sure.
[08:12] <poolie> i would actually like a response to my comments
[08:12] <poolie> or a sanity check of them
[08:12] <wallyworld> StevenK: but i see i'm not listed. i'll get that fixed
[08:13] <StevenK> wallyworld: I'd suggest you talk to bac
[08:13] <wallyworld> StevenK: ok. i originally talked to tim
[08:13] <StevenK> poolie: Right, if you're not sure, then I suggest you do what I first suggested and discuss your concerns with the OCR today, which is Abel.
[08:13] <wallyworld> StevenK: i'm rooming with bac at the summit and uds, so i'll bring it up in person :-)
[08:13] <stub> poolie: I'm looking over it now. First thing, is bare execpts are always evil and should be except Exception:, or else you cause grief with Ctrl-C handling etc.
[08:14] <StevenK> Or you could wait for stub to finish. :-)
[08:14] <StevenK> wallyworld: Sounds like a plan. Then he can't escape. :-)
[08:14] <poolie> thanks stub
[08:14] <wallyworld> yup :-)
[08:14] <poolie> the bare except was already there, but i don't mind changing it
[08:15] <poolie> since it's generating an oops, arguably it should be catching internal errors
[08:15] <stub> It would be nice. I consider it a bug unless there are big fat comments explaining why BaseException exceptions need to be caught too.
[08:15] <poolie> but as i said, recovering from that gets messy
[08:16] <stub> From my POV, anything that it doesn't catch should either not log an oops, or will mean the environment is so unstable you probably can't log an OOPS.
[08:17] <stub> So +1 for the big fat comment, but I don't think it justifies the bare except in this case but haven't thought it through as much as you might have :)
[08:18]  * stub wonders how this interacts with the OOPS handling built into the logging system now
[08:18] <stub> I guess it isn't invoked since you are not calling log.exception()
[08:19] <stub> And you need to do it yourself to email the OOPS id.
[08:19] <lifeless> y'know, friday night.
[08:19] <lifeless> I might have a *beer*
[08:19] <stub> You rebel.
[08:20] <stub> poolie: Do we want an expiry time for the email we stuff in the Librarian? Or is the default 72 hour stay of execution enough?
[08:20] <wgrant> lifeless: Fixed your machines yet?
[08:20] <poolie> lifeless, you promised me a beer last week
[08:21] <poolie> stub, i'm just moving the exception code around not changing it
[08:21] <poolie> similarly for the oops logging
[08:21] <poolie> if people are finding 72h enough so far perhaps that is enough
[08:21] <wgrant> Yes, but we have so much bad code it's always good to be pedantic about stuff as we see it :)
[08:22] <stub> ok
[08:22] <lifeless> poolie: I did
[08:22] <lifeless> poolie: if you're ok with the odd 'one sec while I turn the potatoes' we could chat ~now
[08:24] <stub> poolie: You can fix a long standing bug here if you like by converting the domain to lowercase around line 415
[08:28] <stub> second review in anyway, not that it is needed :)
[08:32] <lifeless> poolie: so, did you want skypebeer ?
[08:37] <lifeless> wallyworld: sorry mate, bad news for you
[08:41] <poolie> thanks stub i appreciate it
[08:41] <adeuring> good morning
[08:41] <StevenK> adeuring: Morning!
[08:41] <adeuring> hi StevenK!
[08:43] <poolie> hi adeuring
[08:43] <adeuring> hi poolie!
[08:43] <poolie> i put up a tiny mp at https://code.launchpad.net/~mbp/launchpad/feature-scope-cleanup/+merge/59460
[08:43] <poolie> edging up on more scope work
[08:44] <poolie> i'd appreciate a review
[08:44] <poolie> also a meta review on whether it is too small of a chunk to land
[08:44] <poolie> (otoh it is probably all i will do on that today, so it's worth pushing anyhow)
[08:47] <wallyworld> lifeless: ?? bad news about?
[08:47] <lifeless> wallyworld: gpghandler branch
[08:47] <wallyworld> lifeless: yeah, but i redid it and it's back in ec2
[08:48] <lifeless> wallyworld: your redo tries to run twisted code in the main appserver stack
[08:48] <lifeless> wallyworld: I assure you that thats not a good idea
[08:48] <wallyworld> oh. why?
[08:48] <lifeless> because its zope
[08:48] <lifeless> not twisted
[08:49] <wallyworld> zope is an app server framework, no? so surely it can handle services eunning within it?
[08:49] <lifeless> its threaded
[08:49] <lifeless> zope is callbacks in a single thread
[08:49] <lifeless> entirely different models
[08:49] <wallyworld> :-(
[08:49] <lifeless> not like the EJB environments you may be used to
[08:50] <wallyworld> yeah, looks like i found ou tthe hard way
[08:50] <lifeless> imagine running tomcat specific code in a jboss container
[08:50] <wallyworld> so i'll cancel the ec2 run
[08:50] <lifeless> it might work
[08:50] <lifeless> or it might appear to work and crash and burn after several days uptime
[08:50] <lifeless> I also noticed another bug
[08:51] <wallyworld> well, the tests which instantiate the zope layer "work" in isolation. so perhaps the latter
[08:52] <lifeless> yah
[08:52] <lifeless> (and tomcat and jboss are near identical when you consider the zope / twisted differences)
[08:52] <lifeless> I've commented on the other bug
[08:52] <wallyworld> lifeless: perhaps the best solution is to create a cron script which just touches anything under /tmp/gpg-* ??
[08:52] <lifeless> we have several hours analysis to do I suspect
[08:53] <StevenK> wallyworld: *Ew*
[08:53] <wallyworld> ok, i'll look at the comment, after i play soccer
[08:53] <lifeless> wallyworld: Enjoy the weekend
[08:53] <lifeless> wallyworld: I think the right thing to do is to disable this 'feature' for now.
[08:53] <wallyworld> StevenK: i know, but atm i'm out of ideas
[08:53] <lifeless> this is actually non-trivial engineering to fix.
[08:54] <lifeless> the gpg check on upload is nice but not -required-
[08:54] <wallyworld> lifeless: so it seems
[08:54] <lifeless> it was added as part of migrating away from the zope ftp stack
[08:54] <lifeless> conflating two things
[08:54] <lifeless> I would like to see this work properly
[08:54] <wallyworld> lifeless: so, i'll back out my changes and just disable the check on upload?
[08:54] <lifeless> wallyworld: yeah
[08:55] <wallyworld> ok
[08:55] <lifeless> I don't like the idea of a maintenance squad disappearing down this rats nest at the moment
[08:55] <wallyworld> yeah
[08:55] <lifeless> we can have a high bug open to reinstate it
[08:56] <lifeless> and note that its a couple days work because having a static dir leads to conflicts, having dynamic dirs needs this if there is a tmpreaper, but 'this' needs to be conditional on the specific appserver thats running
[08:56] <lifeless> and AFAIK we don't have 'if' statements in our zcml
[08:57] <lifeless> I suspect that we process zcml so early in the piece you can't tell if its a twisted thing or not reliably. IMBW
[09:10] <rvba> wgrant: Hi! As promised, I'm back with a question if you have a few minutes :)
[09:11] <rvba> I finally decided to use Archive.checkUpload and not Archive.canUploadSuiteSourcePackage because if the user does not have the right perm, I need to be able to display the reason why not.
[09:11] <rvba> But my question is related to what you mentionned yesterday: the fact that in my first version I was using the source component instead of the destination component. Even looking at how this is handled inside canUploadSuiteSourcePackage I'm not really sure what to do: what component to pass to checkUpload that it.
[09:12] <rvba> More precisely (please correct me if I'm wrong):  the sync can be on a package that might not already exist in the destination series (so the sourcepackage.latest_published_component trick and the usage of a suitesourcepackage is not possible)
[09:13] <wgrant> rvba: Yeah, that's difficult. At the moment any component (but not packageset) uploader can upload a new package.
[09:13] <wgrant> It's not a good solution.
[09:13] <wgrant> But it is at least consistent.
[09:14] <rvba> this strict_component parameter seemed kinda hacky indeed
[09:14] <wgrant> Hacks? Surely not.
[09:14] <rvba> ho?
[09:14] <wgrant> I would replicate the hacky check for now.
[09:15] <rvba> So I guess my next question would be: why is this  strict_component needed?
[09:15] <rvba> (I suppose it's a use case I don't know about)
[09:17] <wgrant> rvba: So, originally only component-based upload privileges existed.
[09:17] <wgrant> Packageset- and sourcepackage-specific privileges are a new addition.
[09:17] <rvba> I see
[09:17] <wgrant> So initially it just took a component and person, basically.
[09:17] <wgrant> strict_component is used when the package is new.
[09:17] <wgrant> So there's no component to check.
[09:18] <rvba> # strict_component is True because the source package already
[09:18] <rvba> # exists (otherwise we couldn't have a suitesourcepackage
[09:18] <rvba>  # object) and nascentupload passes True as a matter of policy
[09:18] <wgrant> Since there's no component to verify privileges against, and the package will end up in the NEW queue anyway (where it will be reviewed by an archive admin), it was decided to let any uploader upload it.
[09:18] <rvba> # when the package exists.
[09:18] <wgrant> Right.
[09:19] <rvba> Not sure I understand what you're saying when I look at the comments I just pasted ...
[09:19] <rvba> (comments com from canUploadSuiteSourcePackage)
[09:20] <wgrant> That's a new method, from after the new permission scopes were added.
[09:20] <wgrant> Have a look at Archive.verifyUpload.
[09:20] <wgrant> It is a little confusingly structured.
[09:21] <rvba> I thought that strict_component=True would be used when a package already exists (and thus is in a specific component)
[09:21] <wgrant> But it first checks if you can upload to the package or its packageset: if so, success. Then it checks if you can upload to any components: if not, failure.
[09:21] <wgrant> Right.
[09:21]  * rvba looks at verifyUpload
[09:21] <wgrant> That's right.
[09:22] <wgrant> Then, if strict_component is set and the uploader doesn't have privileges on that component, failure.
[09:22] <wgrant> Otherwise success.
[09:22] <wgrant> 18:17:52 < wgrant> strict_component is used when the package is new.
[09:22] <wgrant> By 'used' I mean 'changed from the default', ie. set to False.
[09:22] <rvba> ok, makes sense ... if thought "used" = True.
[09:22] <wgrant> Sorry, yeah, I was really unclear.
[09:24] <rvba> so ... what component could I use for the sync to make sense ... I guess I have to do 2 different things. One if the package exists in the dest series and one other if it does not
[09:25] <wgrant> Right. If it does exist, use the destination component. If it doesn't, strict_component=False.
[09:25] <rvba> makes sense ... but how can I figure out what the dest component is?
[09:26] <wgrant>         rejection_reason = self.policy.archive.checkUpload(
[09:26] <wgrant>             uploader, self.policy.distroseries, source_name,
[09:26] <wgrant>             self.changes.dsc.component, self.policy.pocket, not self.is_new)
[09:26] <wgrant> This is what the uploader does.
[09:26] <wgrant> dsc.component is the old component, if it's not new.
[09:26] <wgrant> You can probably just pass None if it's new.
[09:27] <wgrant> You need to get the SourcePackage object (distroseries.getSourcePackage(sourcepackagename)), then use latest_published_component.
[09:27] <rvba> ok, makes sense. Thanks for the clarification, I really needed it :).
[09:30] <StevenK> self.changes.dsc.component likely won't exist for what you want to check.
[09:30] <StevenK> Ah
[09:31] <StevenK> Maybe I should keep reading
[09:31] <rvba> I think so :)
[10:56] <poolie> adeuring, could i have an OCR of https://code.launchpad.net/~mbp/launchpad/feature-scope-cleanup/+merge/59460
[10:56] <adeuring> poolie: sure
[10:56] <poolie> thanks
[10:56] <poolie> is not very big
[11:18] <adeuring> poolie: r=me
[11:52] <poolie> adeuring, thanks!
[12:00] <deryck> Morning, all.
[12:02] <henninge> Hi deryck!
[12:03] <henninge> deryck: great to hear you are ok
[12:03] <deryck> henninge, thanks!  it's been pretty rough here in Alabama the last day or so.  lots of loss.
[12:04] <henninge> yes, it's been on the news here, too.
[12:06] <deryck> My town was pretty hard hit.  I have friends who lost homes and loved ones.
[12:14] <henninge> sorry to hear :(
[12:37] <henninge> jtv: Hi!
[12:38] <henninge> jtv: can you help me with triggering gettext validation errors?
[12:41] <henninge> danilos: Hi! ;)
[12:41] <henninge> danilos: maybe you can help me?
[12:42] <danilos> henninge, hi, how about 'msgid "Blah %d"\nmsgstr "Foo %s"'? :)
[12:43] <henninge> danilos: yes, I got that. I am actually looking for that than format specifiers mismatch.
[12:43] <henninge> danilos: do you know any other way?
[12:44] <henninge> danilos: I am trying to see if bug 385086 can or needs to be fixed.
[12:44] <_mup_> Bug #385086: Non-ascii in error messages causes OOPS in +translate <lp-translations> <oops> <Launchpad itself:In Progress> < https://launchpad.net/bugs/385086 >
[12:44] <henninge> danilos: the problem is that the OOPS is gone and I am missing clues.
[12:51] <danilos> henninge, imho, if you can't reproduce it, close it, and if it re-appears, we should re-open it with a more recent OOPS if we can find it
[13:19] <henninge> danilos: yes, that's what I was thinking.
[13:19] <danilos> henninge, fwiw, looking at gettext source code, it seems to try very hard to not include any non-ASCII in error messages anymore, so closing it seems a good idea
[13:20] <henninge> danilos: thanks
[13:21] <danilos> henninge, gettext-tools/src/format-invalid.h for reference :)
[13:23] <henninge> danilos: close as "Invalid"?
[13:23] <danilos> henninge, yeah
[13:25] <gary_poster> staging is dead.  doesn't appear to be my fault. :-P
[13:26] <gary_poster> no stub around. :-/
[13:26] <gary_poster> flacoste, fyi ^^
[13:26] <gary_poster> lifeless, I assume/hope you are weekending, but just in case, also ^^
[13:27] <gary_poster> will ask losas on ops if they have any ideas
[13:46] <dpm> hi all, could someone tell me where I could check when the staging database was last synced with production? I know there is a url where I can see that, but I cannot find it right now
[13:46] <benji> jcsackett: will you be able to QA bug 769173 today?  There are a few things behind it that I'd like to get deployed.
[13:46] <_mup_> Bug #769173: "Hidden" comments should be visible to registry experts <qa-needstesting> <Launchpad itself:Fix Committed by jcsackett> < https://launchpad.net/bugs/769173 >
[14:00] <wgrant> dpm: https://staging.launchpad.net/successful-updates.txt -- last was restored on Sunday from a Friday or Saturday backup.
[14:02] <dpm> awesome, thanks a lot wgrant
[14:02] <wgrant> dpm: (of course it's down at the moment, but with luck will be back in a couple of hours)
[14:03] <dpm> wgrant, that's fine, the info you gave me was exactly what I needed
[14:15] <jcsackett> benji: i see that i got a ping from you about qa, but my alert only showed part of the message. if it was about bug 769173, it's done.
[14:15] <_mup_> Bug #769173: "Hidden" comments should be visible to registry experts <qa-ok> <Launchpad itself:Fix Committed by jcsackett> < https://launchpad.net/bugs/769173 >
[14:15] <benji> jcsackett: great, thanks!
[14:31] <flacoste> dpm, wgrant: i usually look at https://lpstats.canonical.com/graphs/StagingRestoreDurations/
[14:31] <flacoste> a green bar shows a successful production restore/upgrade
[14:31] <flacoste> and red bars are successful partial upgrade
[14:32] <danilos> adeuring, hi, would you have time to look at https://code.launchpad.net/~danilo/launchpad/subscribe-unsubscribe/+merge/59511?
[14:32] <adeuring> danilos: sure
[14:32] <dpm> flacoste, ah, great, thanks!
[14:33] <danilos> adeuring, it's a very short JS branch, and unfortunately, lacks tests because I am also working some more on the refactoring of that code
[14:33] <adeuring> ok
[14:34] <wgrant> flacoste: Ah, I was using successful-updates.txt before I had access to lpstats. Didn't know about that one.
[14:41] <LPCIBot> Yippie, build fixed!
[14:41] <LPCIBot> Project devel build #682: FIXED in 5 hr 27 min: https://lpci.wedontsleep.org/job/devel/682/
[14:46] <adeuring> danilos: nice work. Just one minor remark: for me, the variable name "person_links" sounds more like a sequence, but it contains the number of links. What about renaming it to num_person_links?
[14:46] <adeuring> but anyway, r0me
[14:46] <adeuring> r=me
[14:46] <deryck> back shortly.... swapping locations so grandparents can watch kids.
[14:46] <danilos> adeuring, heh, I know, but I'll have to wrap the line then :)
[14:46] <danilos> adeuring, thanks, I'll fix it
[14:47] <adeuring> danilos: I see your point ;) leave it if you think it looks nicer ;)
[14:53] <sinzui> bac: adeuring: can either of you review my branch https://code.launchpad.net/~sinzui/launchpad/question-email-2/+merge/59433
[14:53] <adeuring> sinzui: I'll look
[14:54] <bac> thanks for the reminder sinzui
[14:57] <adeuring> bac: could you please have a look at this mp: https://code.launchpad.net/~adeuring/launchpad/bug-769293/+merge/59496
[14:57] <bac> adeuring: sure
[14:57] <adeuring> thanks!
[15:01] <rvba> adeuring: could you please take a look at this MP: https://code.launchpad.net/~rvb/launchpad/change-perm-sync/+merge/59341 ?
[15:01] <adeuring> rvba: sure, let me just finish another one
[15:01] <rvba> adeuring: great, thank you.
[15:17] <bac> hi adeuring
[15:17] <adeuring> hi bac
[15:17] <bac> i saw this comment "# and one common target, i.e., 2*N+3 targets for N duplicates." and find it a little confusing, given the values used in the following asserts
[15:18] <bac> i, perhaps naively, thought the expected value would follow that formula
[15:18] <adeuring> bac: doesn't it? let me check...
[15:18] <bac> can you embellish your comment to explain why
[15:19] <adeuring> ouch.. you're right..
[15:20] <bac> adeuring: otherwise i think the branch looks fantabulous
[15:20] <adeuring> bac: that should be N+3
[15:20] <adeuring> just a second...
[15:20] <adeuring> bac: and thanks :)
[15:21] <adeuring> bac:         # For N duplicates, we have N distinct targets, we have
[15:21] <adeuring>         # the targets for old master bug and for the new master bug,
[15:21] <adeuring>         # and one common target, i.e., N+3 targets for N duplicates.
[15:21] <adeuring> loks more sane, I think
[15:21] <bac> great
[15:22] <adeuring> ...and i changed "for old master bug" to "for the old master bug"...
[15:24] <adeuring> sinzui: r=me
[15:24] <sinzui> thank you adeuring
[15:25] <bac> adeuring: done.  thanks for the nice branch.
[15:25] <adeuring> bac: thanks for the review!
[15:48] <LPCIBot> Project windmill build #226: STILL FAILING in 1 hr 7 min: https://lpci.wedontsleep.org/job/windmill/226/
[16:02] <adeuring> rvba: overall, a very nice branch. But i have  one concern: checkCopy() takes person as an optional parameter. This means that it is quite easy to call the method without it -- and the whole check is simply not done.
[16:03] <adeuring> I have no clue about other callsites, but couldn't we add person as a required parameter?
[16:03] <rvba> adeuring: indeed, the method is used in other places ... where AFAIK no such check should be done.
[16:03] <adeuring> rvba: that's a pity...
[16:04] <rvba> adeuring: but quite frankly, to give you a proper answer, I should ask someone who knows soyuz more than I do ...
[16:05] <adeuring> rvba: well, there is another option ;)
[16:05] <rvba> my goal was to only modify the fonction when used inside the part that we're working on right now. The derived series stuff that it.
[16:05] <adeuring> rvba: file a bug about it. At least I am really used to rely on permission checks by the zope mechanism. When this doesn't work, I'D _like_ to have some kind of surrogate
[16:06] <adeuring> but if this isn't available, we can add it later.
[16:08] <rvba> adeuring: all right, can just make a small comment about that in the MP? I'll ask a soyuz-man just to make sure and then file a bug.
[16:08] <adeuring> rvba: great, together with an XXX and a bug?
[16:09] <rvba> adeuring: sure, that would be great.
[16:09] <adeuring> rvba: cool, so r=me
[16:10] <rvba> thank you adeuring. Give the rather sensitive nature of the modifications I'll have the branch double checked by a soyuz expert on monday.
[16:10] <adeuring> rvba: yeah, that would make sense
[16:10] <rvba> s/Give/Given/
[16:16] <wgrant> Hmm.
[16:16] <wgrant> Has the internal ircd died?
[16:16] <wgrant> I can't connect.
[16:17] <adeuring> wgrant: I just got a "You are connected" message
[16:17] <rvba> I can see lots of people login in and out right now ...
[16:18] <benji> Yeah, I think it died.  I'm back in now.
[16:18] <wgrant> Me too.
[16:19] <rvba> wgrant: by the way, if you're still around (and still in the mood) ... but this really can wait ... perhaps you could have a look at https://code.launchpad.net/~rvb/launchpad/change-perm-sync/+merge/59341
[16:20] <wgrant> Hm. It's nearly 1:30. I'd completely failed to notice the time, since Unity decided to go crazy and replace my clock display with apparently uninitialised memory.
[16:20] <wgrant> I may do that on Monday, if you don't mind.
[16:20] <rvba> I really don't, have a good weekend wgrant :)
[16:20] <wgrant> Thanks!
[16:31] <benji> wgrant: you just haven't learned how to read the new clock yet, I'll email you the 45 page manual
[16:40]  * henninge gives up
[18:28] <deryck> bac, hi.  I have something for review, if you're available.
[18:28] <bac> sure, deryck
[18:28] <deryck> bac, thanks!  https://code.launchpad.net/~deryck/launchpad/xss-deleting-ssh-key-740160/+merge/59535
[18:30] <bac> nice deryck.  r=bac
[18:30] <deryck> bac, awesome, thanks!
[19:44] <bac> hi deryck, you still around?
[19:44] <deryck> bac, yup.  what's up?
[19:56] <sinzui> jcsackett: do you have time to mumble?
[19:57] <jcsackett> sure. one moment.
[19:58] <jcsackett> sinzui: apparently mumble was uninstalled when i finished updating.
[19:58] <jcsackett> i am reinstalling.
[19:58] <sinzui> really? Who is that I see in the channel?
[19:59] <sinzui> I think you are still logged in from your faster computer
[20:00] <jcsackett> yes, that is in the other room. forgot about it. one sec.
[20:51] <deryck> Later on, everyone.  Have a nice weekend.
[22:10] <benji> bac: I don't know how much longer you have until EOD, but I have a medium-ish branch up for review if you have time: https://code.edge.launchpad.net/~benji/launchpad/bug-771231/+merge/59555
[22:10] <bac> benji: i'll look now.
[22:10] <benji> cool
[22:36] <bac> benji: looks good.  thanks.
[22:36] <benji> no, thank you