[00:35] <StevenK> wgrant: http://pastebin.ubuntu.com/5669749/
[00:41] <wgrant> StevenK: Having an _ method on an interface makes even less sense than having it in configure.zcml.
[00:41] <wgrant> StevenK: If you really need to access it from outside, particularly through a proxy, it should not be private.
[00:42] <StevenK> wgrant: I don't want to rename it because then I have to re-grow the _getSpecifications method
[00:43] <wgrant> StevenK: Why?
[00:43] <wgrant> We control both sides of the code
[00:43] <wgrant> We can rename it on both
[00:43] <wgrant> ez
[00:44] <StevenK> But the ProductSeries is via IHasSpecifications, which has far wider impacts.
[00:45] <wgrant> StevenK: Er
[00:46] <wgrant> StevenK: IHasSpecifications contains _all_specifications?
[00:46] <wgrant> wtf, so it does
[00:46] <StevenK> Yes
[00:46] <wgrant> wtf
[00:46] <StevenK> And it's exported
[00:46] <StevenK> So we're stuck with it
[00:47] <wgrant> It's exported without _
[00:47] <wgrant>         exported_as="all_specifications", as_of="devel")
[00:47] <wgrant> Also, why is that exported :/
[00:47] <StevenK> So it's _all_specifications for beta and 1.0 ?
[00:47] <wgrant> Sigh
[00:47] <wgrant> No
[00:47] <wgrant> Blueprints aren't exported at all before devel
[00:48] <StevenK> Ah
[00:48] <wgrant> What do people have against sensible search methods?
[00:48] <StevenK> So which one of us is going to check appserver logs for all_specifications? :-)
[00:48] <wgrant> It's going to be used
[00:48] <wgrant> Because there's no specification search method AFAICT
[00:48] <StevenK> search_specifications
[00:49] <wgrant> Not on the API
[00:49] <StevenK> Right
[00:49] <wgrant> Also note that the fact it's exported means that you can't change it to actually return all specifications
[00:49] <wgrant> It has to use LaunchBag to get the user
[00:50] <wgrant> So perhaps create a new method _SERIOUSLY_PEOPLE_THINK_ABOUT_IT_BEFORE_YOU_EXPORT_SOMETHING_all_specifications
[00:50] <wgrant> And export that instead
[00:52] <StevenK> Hahaha
[01:04] <StevenK> wgrant: So, IHasSpecifications._all_specifications gets renamed to visible_specifications, and left exported as it is.
[01:07] <StevenK> wgrant: IMilestone._all_specifications gets renamed to something, and IHasSpecifications grows a method named the same that returns all specs
[01:08] <wgrant> StevenK: Right.
[01:20] <StevenK> wgrant: Suggestions for the 'something' ?
[01:23] <StevenK> I think ISpecificationSet._all_specifications can die horribly, since I think only two tests use it
[02:26] <wgrant> StevenK: Great
[02:36] <StevenK> Hmmmmm, I don't think I can do all_specifications generically
[02:36] <StevenK> Since not all of the ISpecificationTargets have columns in specification
[02:38] <StevenK> wgrant: Will you accept I{Milestone,ProductSeries}.all_specifications which ignore privacy?
[02:43] <wgrant> StevenK: Sure
[02:48] <StevenK> ForbiddenAttribute: ('set', <storm.store.ResultSet object at 0x108f6110>)
[02:49] <StevenK> I thought that was the right thing
[02:49] <wgrant> StevenK: It is, but it's dangerous so it's not exposed by IResultSet
[02:53] <StevenK> wgrant: http://pastebin.ubuntu.com/5672432/
[02:55] <wgrant> StevenK: Hm, is SpecificationSet.__iter__ actually used by anything?
[02:56] <StevenK> That's slightly harder to check
[02:57] <wgrant> Yeah
[02:57] <wgrant> Just saw it in thebranch
[02:57] <wgrant> Not really relevant
[02:58] <wgrant> StevenK: That looks reasonable.
[02:59] <StevenK> I don't think it's used.
[02:59] <StevenK> But it's hard to grep for.
[03:01] <StevenK> wgrant: I can remove it from the model and interface and claw bit a little bit of LoC and then we'll see if buildbot loves or hates it?
[03:06] <wgrant> StevenK: Maybe, but there might be webservice stuff that wants it
[03:07] <StevenK> wgrant: It's not exported
[03:07] <StevenK> And I don't think ISpecificationSet is either
[03:09] <wgrant> StevenK: Ah, true
[03:09] <wgrant> BugSet is special, because bugs live in the root
[03:09] <wgrant> So yeah
[03:09] <wgrant> Kill it and fix any tests that break
[03:10]  * StevenK waits for the scanner before he re-pushes
[03:17] <StevenK> Bwaha
[03:18] <StevenK> There is one test failure, and I caused it
[03:24] <StevenK> wgrant: https://code.launchpad.net/~stevenk/launchpad/workitems-delete-series/+merge/156457 has updated
[03:28] <wgrant> 273	+ return list(self.context.visible_specifications) + [
[03:28] <wgrant> 274	+ list(milestone.getSpecifications(self.user))
[03:28] <wgrant> 275	+ for milestone in self.milestones]
[03:28] <wgrant> StevenK: That's going to create a list of specs and then lists of specs
[03:29] <StevenK> Hmmmm
[03:29] <wgrant> StevenK: Do you need to doNotSnapshot IMilestone['all_specifications']?
[03:29] <wgrant> IProductSeries too
[03:29] <StevenK> Oh, where is that?
[03:30] <StevenK> Oh.
[03:31] <StevenK> wgrant: I can't just wrap the Attributes in doNotSnapshot?
[03:37] <wgrant> StevenK: You probably can, yes
[03:39] <StevenK> Gah, I was hoping to come up with a elegant solution for the ProductSeriesView.specifications :-(
[03:41] <StevenK> I thought chain() could do it, but my testing isn't having much success
[03:41] <wgrant> chain is right
[03:47] <StevenK> Bleh
[03:49] <StevenK> wgrant: But it isn't quite
[03:52] <wgrant> StevenK: Oh?
[03:53] <StevenK> wgrant: I can't just feed the comprehension into chain because then I can't add it to the first list
[03:54] <StevenK> And I'm not sure about the wisdom of the a cachedproperty returning a iterator directly
[03:54] <wgrant> StevenK: Why not? list(itertools.chain(whatever.specs, *[list of lists])
[03:54] <wgrant> )
[03:56] <StevenK> Hah, which is 4 lines long anyway
[04:07] <StevenK> wgrant: And diff updated
[04:10] <wgrant> StevenK: Thanks, r=me
[05:09] <StevenK> wgrant: Do you still have objections to socket.setdefaulttimeout() for checkwatches?
[05:10] <wgrant> StevenK: Internal calls will probably override that already
[05:10] <wgrant> Though maybe not
[05:10] <wgrant> Anyway, it sounds like we have some rogue HTTP calls
[05:10] <wgrant> Which are not just bad because they miss timeouts
[05:13] <StevenK> I couldn't see any rogue calls when I was reading xmlrpc and bugzilla externalbugtracker yesterday
[05:25] <wgrant> StevenK: We also have a traceback from one of the recent hangs, don't we?
[05:25] <StevenK> wgrant: On carob
[05:28] <StevenK> wgrant: ~hloeung/7728.txt
[05:28] <StevenK> That looks to implicate lib/lp/bugs/externalbugtracker/xmlrpc.py (109): request, but that sets a timeout.
[05:30] <wgrant> Yeah
[05:30] <wgrant> That's what I thought
[05:30] <wgrant> So we need to find out why that didn't work
[05:32] <wgrant> You know...
[05:32] <wgrant> We should take down code imports more often
[05:32] <wgrant> Frees up the build farm
[05:32] <StevenK> Haha
[05:35] <StevenK> wgrant: I do not get it.
[05:35] <StevenK> urllib2 looks fine in terms of timeout handling
[05:36] <wgrant> StevenK: Could it be hanging on squid.internal?
[05:36] <wgrant> We don't actually get a timeout exception back
[05:36] <wgrant> So it's possible that the TCP connection is still active, but it only makes it as far as squid.internal
[05:37] <wgrant> All roads lead to squid.internal, as they say
[05:37] <StevenK> The connection on loganberry was to the remote IP
[05:37] <StevenK> Not breadfruit
[05:37] <wgrant> Ah, true
[05:37] <wgrant> That's a bit upsetting
[05:39] <StevenK> wgrant: And urllib2 hasn't changed significantly between 2.6 and 2.7
[06:57] <wgrant> Ah
[06:57] <wgrant> I may finally have uncovered the untranslated translation credit bug.
[06:58] <StevenK> Is it another wrong LEFT JOIN? :-)
[06:58] <wgrant> No
[06:58] <wgrant> Message sharing, as usual :)
[06:59] <StevenK> I do not understand that checkwatches hang. Which makes me very sad.
[06:59] <wgrant> I can have rosetta make you very sad instead...
[07:00] <StevenK> If you want me to help, sure. But you'll have to get me up to speed first. :-)
[07:15] <czajkowski> aloha