=== beuno_ is now known as beuno [00:15] wallyworld_: I've had breakfast, but I think I need at least one cup of tea before our chat. [00:16] StevenK: np [00:16] Also got distracted by finishing my double-word-death branch [00:16] * StevenK tosses it at ec2 [00:18] wgrant: ? [00:19] lifeless: You said "heh, doit." but didn't actually vote. [00:20] twill be clear to onlookers :> [00:20] And the subsequent 6 lines were about that tag subscription bug that you commented on. [00:20] ah yes [00:20] which is beautiful win [00:25] wallyworld: Sorry, now I'm waiting for the jerk with the leaf blower to move [00:25] StevenK: what? can't hear you over the noise [00:26] Or I get annoyed enough to go downstairs and ... re-position the nozzle [00:26] lifeless: Can we migrate to SQLAlchemy now please? [00:26] Add it sourcedeps. I dare you. [00:27] wgrant: raise it on the list [00:27] Hah [00:27] lifeless: You have no objections? [00:27] * StevenK deals lifeless a penalty card for 'Lying' [00:28] StevenK: oh? [00:28] StevenK: deal yourself one [00:28] StevenK: then ask Francis what I've said in the past. [00:28] lifeless: You have strong opinions on everything we use, so I find it hard to believe you don't have one about this. [00:28] I never claimed no opinion [00:28] wgrant: is my new hero for that comment [00:39] if( vs if ( [00:40] pep8 says if ( [00:42] wallyworld: http://pastebin.ubuntu.com/852074/ [01:01] * StevenK stabs Firefox === 13WAAIDLL is now known as wallyworld === wallyworld is now known as Guest76072 [02:04] wgrant: it looks like bulk.create with a 0-length values will perform an execute and get a ProgrammingError. What do you think about changing it to handle 0-length values by returning? [02:05] wgrant: Also, is it efficient to load when the values aren't needed? [02:06] abentley: Much like the rest of Storm's SQL compilation stuff it is a bit fragile, yeah. [02:06] And loading should indeed probably be made optional. [02:06] So, yeah, 0-length values should probably just be a no-op, and loading should be disablable. [02:07] wgrant: Cool. [02:07] wgrant: The 0-length values is the only reason I kept insert_many in my latest branch. [02:07] abentley: I'm intrigued as to how your experiment was so slow. [02:07] Perhaps sqlvalues is awful. [02:08] abentley: How fast is the original code, btw? [02:08] Without any bulk optimisations. [02:08] wgrant: I'm curious too, but I've got lots of things piling up at the moment. [02:08] s/fast/slow./ [02:08] Yeah [02:09] wgrant: I took over from gmb, so I didn't try it. I know it exceeded the branch scanner job timeout. [02:09] Heh [02:09] which bit of the scanner is timing out? [02:09] the wrapper [02:09] Both BranchRevision and Revision insertion have been problematic. [02:09] ok [02:10] And there was a libreoffice non-DB timeout yesterday. [02:10] I didn't investigate. [02:10] mwhudson: The db insertions of Revisions and BranchRevisions. [02:10] i worked on BranchRevision pretty hard at one point [02:10] as you have probably noticed [02:10] Yeah [02:10] IIRC it uses manual string SQL now? [02:10] Like the rest of LP's existing bulk inserts. [02:10] Which I'm going to port to the new shiny tomorrow, probably. [02:10] yeah [02:10] that'll be good [02:10] wgrant: Are you fixing the same bug as me? [02:10] (even if it doesn't end up being faster) [02:10] abentley: No. [02:10] abentley: I'm working on disclosure stuff. [02:11] abentley: jelmer is working on the bzr side of scanner timeouts, though. [02:11] wgrant: I've ported it over to insert_many already. [02:11] abentley: I informed him of your potential conflicts. [02:11] abentley: Yeah, but there are other places that do manual bulk inserts. [02:11] BPPH creation and a few others. [02:11] wgrant: Oh, I misread you. [02:11] I'm not going to touch your stuff :) [02:12] wgrant: Well, if you insist on doing it better than me, I'll grumble, but not too much :-) [02:12] Heh [02:13] abentley: You've wrapped create() rather than fixed it directly? [02:13] The initial version will land in about 90 minutes, so I'll land a quick followup with the changes you suggested unless you already have one. [02:13] wgrant: No, I hadn't seen create. I was using "Store.execute(Insert( ..." [02:13] Ah [02:14] I'll make those two changes now, then. [02:14] Thanks. [02:15] Hopefully this will make people avoid bulk creation a bit less. [02:15] 'cause there are a lot of places that could use it. [02:16] abentley: I apologise for colliding with you. I didn't realise you were working on this until I was proposing my Storm branch and saw yours. [02:17] wgrant: No worries. Strange coincidence that we both tried to fix this longstanding gap in the same month. [02:18] Indeed. [02:21] * wgrant benchmarks the old one too, just for curiosity's sake. [02:24] wgrant, jelmer: In last week's profiles of lp:s~irar/gcc-linaro/slp-for-any-nops-4.6/, only 13% of branch scanner time was spent in getBazaarRevisions, so I wasn't too concerned about it. [02:25] wgrant, jelmer: Though wgrant's bulk-insert will make the db side faster. [02:25] wgrant@lucid-test-lp:~/launchpad/lp-branches/devel$ ls -lh /var/tmp/lperr [02:25] total 191M [02:25] drwxr-xr-x 2 wgrant wgrant 189M 2012-02-22 13:24 2011-12-05 [02:25] That can't be good... [02:27] A 189M dentry? Niiiiiiiiice [02:27] Yeah [02:27] I think that's the day I reproduced the poppy rabbit explosion. [02:27] Which could mean there are millions of files in there. [02:27] Likely [02:28] ls -1 /var/tmp/lperr/2011-12-05 | wc -l ? :-) [02:28] I unfortunately already deleted part of it, but I'm already doing that. [02:28] Been going for 3 minutes... [02:28] Haha [02:28] It's probably statting all the children :*( [02:28] It will, yes [02:29] Might write something to just readdir instead. [02:29] Oh no [02:29] It's still calling getdents [02:29] 512 at a time [02:29] Bwahaha [02:30] ls is only using 3% of my RAM so far, though. [02:40] Ew [02:40] At least 4 statements per Revision insert in devel. [02:41] And often 7 [02:41] And oh look it timed out. [02:42] Less than half way through. [02:46] * wgrant starts it without a timeout and goes away for 15 minutes. [02:51] Huh [02:51] It doesn't really seem to be inserting them in any kind of order. [03:06] abentley: Just tested on lp:launchpad. 9:00 without bulk inserts, 1:45 with mine. [03:07] Probably doesn't improve the normal case much, but the initial scan of a large new history is 5x faster even with no DB latency. [03:13] Yeah, doesn't help the 0:47 new branch with existing Revisions case at all. [03:15] mwhudson: Did you ever look at sharing history? [03:17] eg. bisect to find the latest shared history and then delegate to that. [03:29] wgrant: it was examined, based on the work jam had done in history-db [03:30] lol, pybars has had 65 downloads [03:30] interesting [03:30] s/interesting/google/ [03:30] you think? [03:31] * wgrant finds out. [03:34] wgrant: for branch revision? [03:34] mwhudson: Yeah [03:34] It would presumably reduce the table size by something like 99%. [03:35] lifeless: Oh, bah, hosted on PyPI rather than LP? [03:35] No referers for me :( [03:36] pypi -> centre of the python universe [03:36] Yeah, but often our downloads are hosted on LP. [03:38] wgrant, lifeless: Can I Disapprove https://code.launchpad.net/~linaro-infrastructure/launchpad/workitems-migration-script/+merge/93883 ? [03:38] garbo job or API script, damn it [03:39] As I said a couple of days agoo, I think it should be an API script. But it needs discussion. [03:39] I recommended garbo to salgado a week or two back [03:40] All of three of us are in agreement about "Oh god, not that>" [03:40] s/>/./ [03:40] I think its reasonable to say that you want to discuss it [03:40] and yes, I agree, API or garbo makes much more sense [03:42] lifeless: "I'm going to disapprove this. This requires discussion, and certainly doesn't require a one-shot script -- the usual modus operandi for migrations like this is either a garbo job or an API script." [03:46] lifeless: Sound fine? [03:46] wgrant: i'm not sure how that would help things like mapping a revision to a branch [03:46] StevenK: personally, I would needs-info rather than disapprove, but if you're reviewing, do what you prefer [03:46] you can do cleverer things that BR of course, but you end up doing something like historydb i think [03:46] StevenK: I'll note that its a tunableloop already [03:46] there is a wiki page somewhere about being cleverer than BR, come to think of it [03:47] StevenK: which means it can trivially sit in the garbo [03:47] wallyworld__: Om nom nom XSS [03:47] hmm? [03:47] Your new sharing picker thing is nice and XSSable. [03:47] lifeless: Meh, needs fixing [03:47] And not feature-flagged :( [03:47] StevenK: sure, or that [03:48] wgrant: it's on a view that is not used [03:48] wgrant: https://dev.launchpad.net/Code/BranchRevisions [03:48] wallyworld__: That's only barely mitigation. [03:48] wallyworld__: if someone can craft a url to it, they can exploit it [03:48] (if there is an xss hole...) [03:49] i'm not sure if the view is featured flags or not [03:49] It's not. [03:49] so we need to ff the view [03:50] lifeless, wgrant: You both chimed in on https://code.launchpad.net/~sinzui/launchpad/team-titles/+merge/93675 ? Do you have any remaining objections or were you just commenting? [03:50] StevenK: sinzui took my suggestion into account [03:50] I'm OK as long as the bug title changes are reverted. [03:50] StevenK: the title is now preserved - see his QA instructions [03:51] wgrant: they aren't reverted, but titles are shown in the page title [03:53] lifeless: i'm in iharness and using Launchpad.login_with(). but there's no get() or named_get() method on the lp instance that is returned. what's the best way to get an instance of WebServiceCaller with those methods? [03:53] Launchpad.login_with() is a full launchpadlib [03:53] Heh [03:54] This is actually a two-layer XSS [03:54] Cool [03:54] wgrant: Are you okay with the MP given what lifeless said? [03:54] wgrant: there's no get or named_get methods though it seems [03:54] wallyworld__: No, launchpadlib uses attribute access instead. [03:55] so how to i get something i can invoke named_get or get on? [03:55] Do you want to do that, or do you just want to experiment with the API? [03:56] i have a service i think have exposed and i want to try and call it [03:56] Write a webservice test, then? [03:56] Might as well just use launchpadlib. It's a nicer interface than WebServiceCaller [03:56] And I don't know if one can use WebServiceCaller from outside AppServerLayer [03:57] lp = Launchpad.login_with(fewfwefwehfuwef) [03:57] obj = lp.load('/path/to/your/resource') [03:57] obj.someattribute [03:57] obj.someMethod(some=arg) [03:57] .load is what i was missing [03:57] it's not a domain object though [03:57] Have you regenerated your WADL? [03:57] yes [03:57] i'm treating it as a service [03:58] You should be able to access it by lp. [03:58] But note it's the top-level collection name, not its URL. [03:59] so i assume export_as_webservice_entry() is the correct way to register it [03:59] wallyworld__: Anyway, these XSSes are now blocking deployment. [03:59] No. [03:59] Collections aren't entries. [03:59] it's not a collection [03:59] it's a service [03:59] Hm, so it's a singleton entry? [03:59] I guess that's OK, then. [04:00] These things generally get exported as collections, but I guess your way makes more sense. [04:00] the ws api is geared to export entries and collections sadly [04:00] Just means there's no way to access it without lp.load [04:00] ideally i'd like to say something like lp.get('/myservicename?ws.op=something') [04:01] or lp.post(/myservicename?ws.op=something&data=foo) [04:01] it that possible? [04:04] wgrant: so where's the xss hole? in the picker config passed to the client from the view? [04:04] wallyworld__: LaunchpadWebServiceCaller is the interface you get in tests. [04:04] It looks like it speaks TCP [04:04] So you can probably use it. [04:05] LaunchpadWebServiceCaller(protocol='https') should work [04:05] I hope [04:06] wallyworld__: so why do you want that rather than lp.thing.something() and lp.thing.something(foo) ? [04:06] lifeless: whatever works. i tried that and couldn;t get it to work [04:06] that would be my preferred way [04:06] Oh [04:06] Then make that work :) [04:06] What's the error? [04:07] wallyworld__: so, suggestion, and I'm not being snarky - don't talk about what you don't want. Talk about what you do want! [04:07] sure. [04:07] the error is that lp has no attribute thing [04:07] What's the expression? [04:07] * StevenK distracts wgrant with something shiny [04:08] StevenK: Oh? [04:08] wgrant: Are you okay with the MP given what lifeless said? [04:08] so i'm not registering something properly. actually it's using the system launchpadlib [04:08] * wgrant reads the diff [04:08] wallyworld__: You sure you're connected to dev and not prod? [04:09] yep lp = Launchpad.login_with('testing', service_root='https://api.launchpad.dev', version='devel') [04:09] And what is failing, and what is the exact text of the error? [04:09] object has no attribute 'accesspolicies' [04:09] Right, you didn't register it as a top-level collection, so it won't appear there. [04:09] clearly i haven't set something up correctly [04:10] You have to use lp.load to get at it. [04:10] so how do i avoid the lp.load() step? [04:10] You can't. [04:10] Unless you say define it as an empty collection. [04:10] well [04:11] ideally lp.accesspolicies would map to my AccessPolicyService [04:11] what are the methods that you will have on this thing [04:12] at the moment, i have foo() [04:12] just to test it [04:12] ok, but really [04:12] help me understand [04:12] StevenK: Bug titles are missing a colon [04:12] It's now "Bug #1 blah blah blah" [04:12] ok, getAccessPoliciesForProducts(product_collection, user) [04:12] <_mup_> Bug #1: Microsoft has a majority market share Which doesn't make sense. [04:13] lifeless: so i want to go lp.accesspolicies.getAccessPoliciesForProducts(product_collection, user) [04:13] or something like that [04:13] wgrant: Right, noted in my +1, thanks [04:14] lifeless: and in the browser, there'd be an XHR call to the same api to get the data for the view [04:14] wallyworld__: you want to pass *in* a vector of products? [04:14] a set based interface [04:15] but there'd be just the one normally [04:15] so, I'm hugely in favour of set based calls, as you know [04:15] but all our existing api stuff would just make that a method on IProduct and IProject and IDistribution [04:15] noooooooo [04:15] (or IPillar probably) [04:15] putting service methods in domain objects is just so wrong [04:16] and i'd rather avoid that in this new tranch of work if possible [04:17] so i want to try a service based approach [04:17] That sounds good, but I htink then you need to commit to fixing the environment so that your new work is no worse than the current (which swimming upstream would be) [04:18] specifically, you'll need to teach launchpadlib about named objects or some such [04:18] one hack you could use is to create a collection of services - IService or something [04:18] right, that's what i didn;t know - i didn't realise it couldn't do that [04:18] Or just define this as a collection with [] as the default content. [04:18] collections have methods too [04:19] you'd need to fix the launchpadlib bug where the interface the wadl specifies the type of collection members even when they return a more specific type (and self-annotate as such) [04:19] I'm not actually sure if /branches is usefully iterable, for example. [04:19] or as wgrant says, an empty collection will get you a named service fairly cheaply [04:19] and i'd still need .load() right? [04:20] No [04:20] Top-level collections show up as lp.foo [04:20] wallyworld__: note though that the web API /only/ exports domain objects as far as its concerned, there isn't a separation there - and in most restful things I've seen there isn't a service layer as such [04:20] See eg. IBranchSet. [04:20] wallyworld__: so I'm not-at-all-sure your approach makes sense for the *external* API. [04:20] wallyworld__: I'd kind of like to talk it through with you and curtis [04:20] wallyworld__: I'd like to understand the vision [04:21] wallyworld__: where you want to take it [04:21] lifeless: i haven't talked to much to curtis about it [04:21] lifeless: want to jhoin our standup tomorrow? [04:21] This is very un-lazr.restful-ish. [04:21] But I think that's probably a good thing. [04:21] i'm experimenting a bit first to see what can be done [04:22] wallyworld__: I probably have conflicting calls; I have 3 in a row; what time is it ? [04:22] 8:00am AEST [04:22] So 11:00am [04:22] Damn Queenslanders. [04:22] Oohoohoo [04:22] 11am? surely you jest, he's not 3 hours out from you is he ? [04:22] Just realised what time the TL call is going to be for bigjools. [04:23] lifeless: He's 3 hours from you. [04:23] so, 11am I can do [04:23] One hour from us. [04:23] wgrant: Do share? [04:23] 6am [04:23] at the moment [04:23] lifeless: 6am for you, right? [04:23] no [04:23] Which makes it 3am for bigjools :) [04:23] Oh [04:23] 9am at the moment [04:23] hugely civilised [04:23] When did that change? [04:24] Disappointing. [04:24] when mrevell said roughly 'uhm, I need to put my kids to bed at the current time, can we change it' [04:24] lifeless: so i want to try and adopt a service oriented approach, using popo for the business model objects, separate from the storm db layer objects, and views getting flattened data from api calls etc [04:25] and still support "sensible" api access from launchpadlib [04:26] so this in some ways fits with where I want to take LP itself: remember I want to gut the server render layer to have no DB access at all [04:26] it's how i've always built these types of systems previously [04:27] however I think it would be good to separate the discussion into what you want the API to do and look and feel, and what you want to do in the appserver; because all the appserver work will be irrelevant as we move to more SOA backends [04:27] thats not a reason not to do appserver work - because some things pay for themselves very quickly, and improvements now are improvements now [04:27] but I still want to get a handle on the specifics you're intending [04:27] sure, np. it's still handwavy [04:28] and how we'll measure the success of the experiment; and how we'll roll all the way forward, or roll back (depending on the assessed success) [04:28] Anyway, we need to revert this picker thing. [04:28] wgrant: what's the xss issue? [04:28] wallyworld__: Put some stuff in a product title [04:28] s/title/displayname/ [04:28] And visit +sharing [04:29] so the json from the view doesn't get escaped properly? [04:29] Correct. [04:29] i thought it did? [04:29] You may recall that I strongly discourage ever encoding JSON manually. [04:29] And always using JSONRequestCache wherever possible. [04:30] wgrant: rather than revert, it's a simple one line fix to get the product title out of the picker header [04:30] That's not a fix. [04:30] why? [04:30] It's getting the one bit of bad data that I've found so far out of the unescaped section of the page. [04:31] Rather than removing the injection of user-provided data into unescaped section of the page. [04:31] we do that same pattern in a few other places in lp too [04:31] Yes, and they're all bugs. [04:31] eg the inline picker widget [04:32] Just because something is embarrasingly terrible already doesn't mean we should perpetuate it. [04:32] sure. that's the trouble when it's in the code - the pattern can be reused [04:32] Hmm, I'm sure I've posed that point before and you've debated it :) [04:33] so given the product title is the only user editable exploit, we could simply remove that for now [04:33] wallyworld__: it is the problem, and thats why we need to finish our transitions and migrations more [04:34] lifeless: well, i'm sure people thought the lazr picker work was finished when they did it [04:34] wallyworld__: software is never finished ;) [04:34] that's an answer to a slightly different question [04:34] wallyworld__: we can only hope to put some of it in the ground soon :) [04:35] wallyworld__: ok, so what was the question ? [04:36] i was merely saying that the work in question was probably considered to be "finished", without the expectation there was still stuff to do [04:36] It was finished. [04:36] It was just wrong. [04:36] fg [04:36] No jobs running [04:36] wgrant: or the jsonrequestcache encoder could be used in this case [04:37] rather than stuffing new stuff in the cache [04:38] so the json would be properly escaped [04:38] That's what we've done in the past. [04:38] But nobody remembers. [04:38] This is why manual encoding is no longer permitted. [04:39] i'll do that then for now [04:39] (this is all because Microsoft are fucking morons, btw) [04:40] so manual encoding works if done properly using the right encoder [04:40] Yes. [04:40] But I wasn't going to say that, because it's always a bad idea. [04:41] and in this case, i forgot to use the right encoder [04:41] That's why it's always a bad idea. [04:41] wonder if we patch something to force the correct encoder to be used by default [04:41] There's also a second layer of XSS after this. [04:41] So please just revert the whole thing :) [04:42] wgat's the other xss? [04:42] (an XSS I pointed out a few months ago during code review, but I was assured it would never be a problem) [04:42] which is? [04:42] The picker title is treated as HTML. [04:42] So even once you encode the JSON properly, the product title is then injected unescaped into the picker. [04:43] => revert it all until someone looks through it thoroughly. [04:43] i'd have to look to check, but the picker title is in the json data so should be escaped [04:43] Bonus points for deleting the rest of the pickers, but that seems unlikely. [04:44] That's not how escaping works :) [04:44] hmm? we use the correct encoder and the json data is all properly escaped [04:44] Right, when using the correct encoder the JSON is escaped fine. [04:45] But the JSON isn't really relevant for the second one. [04:45] so that's what i was saying - i'd have to check but i thought the picker title was in the json data [04:45] so would be escaped [04:45] It is. [04:45] That doesn't mean it's escaped properly in the picker. [04:46] but if it comes from json data that is escaped.... [04:46] * wgrant reverts it. [04:46] hang on a minute [04:47] the issue can be easily corrected using the proper encoder [04:47] The first issue. [04:47] and thye second issue is moot [04:47] Oh? [04:47] It happens, so it's not moot. [04:48] it is since the title is escaped in thje json [04:48] The JSON is escaped. [04:48] The title is not escaped in the JSON. [04:48] The point of escaping the JSON is to get the JSON through unharmed. [04:48] if that's the case, then ALL of our pickers have this issue [04:48] That doesn't meant he contents of the JSON are escaped. [04:48] Yes. [04:49] But few/none have variable data in the title. [04:49] Most have no variable data in the config at all. [04:49] Otherwise I would have started reverting every picker branch a year ago until it was fixed. [04:49] ok, i'll revert this one. [04:49] Thanks. [04:53] This is similar to the reason I want to patch our mustache implementations to replace {{{ with {IAcknowledgeThatWgrantWillProbablyMaulMe{ [04:53] s/Probably// [04:59] wgrant: s/mustache/handlebars/ [04:59] wgrant: and I know where the plumbing is to do that [05:00] Heh [05:05] Tempting to try making the factory more declarative at some point. [05:05] Probably cut 40% off the test suite time. [05:07] 2.4 hours is better than 4 :-) [05:13] StevenK: https://code.launchpad.net/~wgrant/launchpad/bulk-insert-2/+merge/94084 [05:20] wgrant: +1 [05:22] * StevenK wonders if he can force a bug to be a dupe [05:22] Since dupe.markAsDuplicate(bug) doesn't work since dupe.owner can't see bug [05:22] (one X crash later): StevenK: Thanks [05:22] Haha [05:23] Perhaps we need to bribe huwshimi to 'pay a visit' to RAOF. [05:24] StevenK: I can be there in 7 minutes [05:24] Haha [05:29] huwshimi: You worked on the current loggerhead theme, right? [05:30] wgrant: I'm not sure how to appropriately answer that question... [05:30] wgrant: Hypothetically, yes. If-stabbing-is-a-possibility, no. [05:30] Heh [05:31] Just wondering if you'd complain if I removed the 4px of padding around each line. [05:31] I only stab for security holes :) [05:31] wgrant: Let me take a look [05:31] (Pdb) p user [05:31] [05:31] BAH [05:33] wallyworld__: Any luck with bending launchpadlib to your will? [05:34] wgrant: not yet, had to revert that branch and redo the mp [05:34] Ah [05:36] wgrant: So you want to remove the 4px from the tds? [05:37] huwshimi: Yeah [05:37] wgrant: Why would you want to do that? [05:37] The code is pretty unreadable at present. [05:38] It is currently at a density of 0.5 [05:38] wgrant: Oh, you're not talking about the file listing then... [05:39] Oh, no, http://bazaar.launchpad.net/~launchpad-pqm/launchpad/devel/view/head:/bootstrap.py [05:39] Sorry [05:39] wgrant, wallyworld__: Do either of you want to review https://code.launchpad.net/~stevenk/launchpad/bug-limitedview/+merge/94088 ? [05:39] i can do it [05:39] The file listing and changelog are pretty dense. [05:39] wallyworld__: Thanks. How long before you need to disappear? [05:40] StevenK: gotta go to soccer in about 90 mins [05:40] wgrant: I have no problem with that at all :) [05:40] got a reprieve from picking up the kid today [05:40] huwshimi: Thanks. [05:40] wgrant: It may require a little padding, but I'll leave that up to you [05:40] wgrant: Just check you don't break the other listings at the same time [05:41] wallyworld__: If it takes you 90 minutes to review, I'd be concerned. :-P [05:41] yep [05:41] huwshimi: Yeah, I think 1px either side is possibly OK [05:41] * wgrant checks what other sites do. [05:41] wgrant: (I might have inadvertently added that spacing when I was trying to fix the other padding) [05:41] Ah, indeed. [05:41] wgrant: I'll leave it to your judgement :) [05:41] Thanks. [05:41] wgrant: Thanks that had been bothering me too [05:42] StevenK: typo line 88 [05:43] StevenK: are there existing tests for the bugs security adaptor? [05:43] wallyworld__: Oh, that reminds me, you misspelt duration in that commit too :P [05:43] huwshimi: I might also try to make that view more friendly for copying. [05:43] I wonder if side-by-side
s works.
[05:43]  wallyworld__: I'm not certain
[05:43]  Rather than a terrifying table.
[05:44]  wgrant: yeah, you could easily float divs next to each other with numbers in one and code in the other
[05:45]  wallyworld__: I've added another test: http://pastebin.ubuntu.com/852269/
[05:45]  StevenK: the new unit tests that are there are good but are incomplete. perhaps a comment on the test case would be good explaining that mainly limitedView is being tested
[05:46]  wallyworld__: Incomplete? You think I'm missing a scenario?
[05:46]  StevenK: get_bug_privacy_filter() is the method that is used
[05:46]  to see if someone can view the bug
[05:47]  it covers subscribers also i think
[05:47]  IBug.userCanView() calls get_bug_privacy_filter()
[05:49]  wallyworld__: You've lost me
[05:50]  StevenK: so the security adaptor calls IBug.userCanView() to check for view permission
[05:50]  and IBug.userCanView() calls get_bug_privacy_filter()
[05:50]  which checks for subscribers
[05:50]  which the tests don't currently do
[05:51]  wallyworld__: Okay, I'm fairly sure that should be well-tested, so I can drop my unittests, except for the last one?
[05:52]  StevenK: i think so. just add a comment on the test case that just limitedview access is being tested
[05:52]  and leave it as an exercise for the reader to figure out where the other stuff is tested :-)
[05:53]  wallyworld__: http://pastebin.ubuntu.com/852278/
[05:53]  StevenK: looks good to me
[05:54]  wallyworld__: Pushing
[05:57]  * wallyworld__ still waiting for diff
[05:58]  wallyworld__: Its updated for me
[05:59]  StevenK: just updated for me too. took a while. r=me
[06:01]  * StevenK fills up QA-Landing
[06:26]  huwshimi: http://people.canonical.com/~wgrant/launchpad/lh-view/old-view.png -> http://people.canonical.com/~wgrant/launchpad/lh-view/new-view.png
[06:27]  (the new one is copyable, since it's a table of two 
s)
[06:27]  wgrant: Awesome
[06:28]  Although there's still too much space above the top line
[06:28]  StevenK, wallyworld__: Any comments?
[06:29]  Trying to make loggerhead a bit less painful for reading code
[06:29]  wgrant: +1 from me, looks nice
[07:13]  fail
[07:13]  The great LP bug migration corrupted things.
[07:29]  Hi!
[07:33]  mrevell, hi there
[08:40]  good morning
=== almaisan-away is now known as al-maisan
[09:35]  Good morning adeuring, how are things?
[09:35]  hi al-maisan! things are fine here. how about you?
[09:36]  doing well, thanks :)
[09:53]  lifeless, Around?
[10:47]  * jml keeps hitting refresh
[13:30]  'morning abentley
[13:30]  jelmer: morning.
[13:31]  abentley: I heard you're working on fixing the scaling issue in the branch scanner?
[13:31]  jelmer: Yes, mainly by fixing the DB access.
[13:31]  abentley: cool
[13:32]  abentley: I'm working on removing the use of Branch.revision_history and Repository.get_ancestry from the lp codebase, and as such was also touching that bit of the code
[13:32]  it sounds like our changes shouldn't overlap though
[13:32]  jelmer: No, I don't think I touched the bzr side.
[13:33]  jelmer: It was only 13% of runtime when I profiled it.
[13:33]  jelmer: lp:~abentley/launchpad/bulk-insert
[13:33]  jelmer: You're just wanting to avoid deprecated interfaces?
[13:34]  are there any plans in the works to support proxy on launchpad? have two bugs today with issues about using launchpad in one country and having to use a proxy
[13:34]  abentley: mostly, yeah. In the process I'm also changing things to not access all of the branch history/ancestry if it doesn't have to
[13:35]  czajkowski: I haven't heard of any plans, but I hadn't heard of any issues, either.
[13:36]  abentley: https://bugs.launchpad.net/launchpadlib/+bug/938542  and https://bugs.launchpad.net/launchpad/+bug/938580
[13:36] <_mup_> Bug #938542: launchpadlib doesn't support system proxy  < https://launchpad.net/bugs/938542 >
[13:36] <_mup_> Bug #938580: launchpad not opening in Syria..  < https://launchpad.net/bugs/938580 >
[13:36]  czajkowski: Oh, launchpadlib.
[13:37]  well one is launchpadlib and the other cant use LP without going through a proxy
[13:38]  czajkowski: I would be surprised if they were related.
[13:41]  czajkowski: So it sounds like one issue is that lazr.restfulclient (which launchpadlib uses) may not respect the system proxy settings.
[13:42]  czajkowski: And the other issue is that access to Launchpad in Syria doesn't work, *except* when a proxy is used.  Which may be due to government interference with the Internet.
[13:43]  nods
[13:44]  czajkowski: I would ask webops about the second one.
[13:44]  ok cheers
[13:46]  czajkowski: The first one needs investigation, but can certainly be fixed if true.
[13:47]  abentley: thanks
[14:03]  mrevell, hey there. did you have a chance to talk to huw/dan about that new page we'd like to implement in LP?
=== danhg_ is now known as danhg
[14:32]  adeuring, abentley -- https://plus.google.com/hangouts/extras/talk.google.com/orange-standup
[14:32]  rick_h, I'm recalling you being away today, if not, see ^^
=== matsubara is now known as matsubara-lunch
=== abentley changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | On call reviewer: abentley | Firefighting: - | Critical bugtasks: 4*10^2
=== al-maisan is now known as almaisan-away
[15:49]  mrevell, heya, we have a chat scheduled in ~11 mins
[15:50]  danilos, We do
[15:51]  mrevell, ok, just confirming, let's do mumble
[15:52]  danilos, Dude, it's not 2010 any more.
[15:52]  :)
=== matsubara-lunch is now known as matsubara
[15:53]  mrevell, ah, right, sorry, proprietary software is "in" again ;)
[15:53]  heh, Mumble it is, then.
[15:53]  mrevell, oh, is that the recurring one for which I've never gotten the invite?
[15:54]  salgado, you don't deserve one
[15:54]  salgado, It's the recurring one, yeah. Let me see if I can fix the invite problem.
[15:54]  danilos, I know I don't but with mrevell being English and all I thought I'd get one if only for his politeness ;)
[15:54]  salgado, it's supposed to be in your canonical.com calendar
[15:55]  haha
[15:55]  salgado, fair point
[15:56]  I've sent an invite to your Linaro.com address, salgado
[15:56]  aha, now I got it
[15:57]  great
=== salgado is now known as salgado-lunch
[17:12]  gmb: hi
[17:13]  lifeless, Hi. W.r.t my earlier ping, I was checking whether the fix for bug 518016 was in the subunit 0.0.8beta that's in the LP sourcedeps. From what I can tell from commit timestamps it is (you added the snapshot 9 minutes after committing the bugfix) but I just wanted to be sure.
[17:13] <_mup_> Bug #518016: No public API for tagging on TestProtocolClient    < https://launchpad.net/bugs/518016 >
[17:13]  (I assumed "yes" for the purposes of marking the bug fixed)
[17:19]  gmb: yes makes sense to me :)
[17:19]  gmb: or even fix released, as its not something that needs deploying to be fixed
[17:20]  lifeless, Righto, works for me. Thanks.
[17:22]  abentley: AWS SWF looks interesting
[17:23]  lifeless: yes, indeed.
=== salgado-lunch is now known as salgado
=== Ursinha is now known as Ursinha-lunch
[19:25]  When is Pay Day? Does anyone know?
[19:34]  http://blog.fastmail.fm/2012/02/20/building-the-new-ajax-mail-ui-part-2-better-than-templates-building-highly-dynamic-web-pages/
[19:36]  gary_poster: 24061
[19:36]  bah
[19:36]  bug 24061
[19:36] <_mup_> Bug #24061: GPG error with apt-get/aptitude/update-manager behind proxy (BADSIG 40976EAF437D05B5)     < https://launchpad.net/bugs/24061 >
[19:37]  lifeless, ah-ha, with workaround included! thanks
[19:37]  gary_poster: basic troubleshooting is - remove the files from /var/cache/apt/ etc
[19:38]  gary_poster: if that doesn't work, you're into figuring out what host is serving inconsistent data
[19:38]  HTH
[19:38]  lifeless, do you agree with workaround listed in bug?
[19:51]  the Acquire::BrokenProxy thing? if it works yes ;)
[19:52]  gary_poster: ^
[19:53]  lifeless, heh
[19:53]  I don't recall the code changes that triggers, but working >> most anything else
[19:54]  you may, when running precise, naturaly encounter skew mid-archive-push, but the archive update scripts work hard to make the skew interval sub-second
=== garyposter is now known as gary_poster
=== Ursinha-lunch is now known as Ursinha
[22:10]  lifeless_: Is https://code.launchpad.net/~abentley/launchpad/callgrind/+merge/94283 also worthy of a LOC waiver?
[22:10]  flacoste: should all questions end up being 'solved' rather than marked as 'answered' after a length of time
[22:24]  abentley: It seems to me that if the bzrlib lsprof module supported just a little more glue, you could delete the entire profiling support for scripts from LP and not miss it
[22:25]  sinzui, jcsackett: https://wiki.ubuntu.com/Bugs/Status
[22:32]  StevenK, wallyworld, jcsackett, wgrant: http://pastebin.ubuntu.com/853310/
=== matsubara is now known as matsubara-afk
=== lifeless_ is now known as lifeless
[22:48]  james_w: hey, so, django
[22:48]  hey
[22:49]  james_w: what does your group do when getting a new django API/site up and running; do you use packages of django (are they in lucid-backports or a PPA) , ....
[22:49]  yes, we use packages
[22:49]  from lucid-cat currently
[22:50]  (to get django 1.3)
[22:50]  do you use buildout or anything, or do sysadmins manually manage settings.py?
[22:50]  (+ mod-wsgi glue?)
[22:51]  django.wsgi is delivered by puppet
[22:51]  we *may* use buildout, but we don't currently
[22:52]  settings are stored in a hierarchical way
[22:52]  main.cfg for settings used everywhere
[22:52]  dev.cfg and production.cfg for settings that are only appropriate in those environments, with a switch between them
[22:53]  Hello #launchpad-dev. Is it possible my launchpad ppa ignores the epoch number given in .changes file?
[22:53]  production_credentials.cfg delivered by puppet for secrets
[22:53]  hingo, I doubt it
[22:53]  all settings via django-configglue
[22:54]  I'm trying to: dput ppa:drizzle-developers/ppa drizzle_7.1.31~rc-1~oneiric1_source.changes
[22:54]  dependencies via a mix of packages (most things) and branches (things we develop that are tightly bound to the service)
[22:54]  ...but nothing (not even a failure) appears at https://launchpad.net/~drizzle-developers/+archive/ppa/+builds
[22:55]  devstaging deployments in ec2/canonistack using fab and some custom puppet (not related to memento unfortunately)
[22:55]  hingo, do you get an email about the upload?
[22:55]  The thing is, oneiric ships with drizzle_2011.03.13-something. So I have increased epoch to 1.
[22:55]  james_w: No.
[22:55]  czajkowski: nah, answered is fine in the end, since it's up to the reported to mark them solved
[22:55]  czajkowski: Users mark questions as solved once they confirm the answer.
[22:55]  czajkowski: We should generally not set them to Solved ourselves.
[22:55]  hingo, then it is 99% likely that the .changes file is incorrectly signed
[22:56]  hingo, what is your LP username?
[22:56]  james_w: Ok. I created a generig GPG key. Do I need to use my own / matching email address?
[22:57]  james_w: hingo
[22:57]  flacoste: wgrant ok, just wondered as there are many not set as solved there. just curious
[22:57]  czajkowski: A lot of users don't do it.
[22:57]  But it doesn't matter much.
[22:57]  hingo, you need to register the GPG key that you are signing the upload with: https://launchpad.net/~hingo
[22:58]  GPG verification of /srv/launchpad.net/ppa-queue/incoming/upload-ftp-20120222-215212-001713/~drizzle-devel
[22:58]  opers/ppa/ubuntu/drizzle_7.1.31-rc-1_source.changes failed: Verification failed 3 times: ["(7, 9, u'No public key')", "(7, 9, u'No public key')", "(7, 9
[22:58]  , u'No public key')"]
[22:58]  james_w: Ok, this makes sense. I'll upload the public key.
[22:59]  james_w: That explains it. Thanks a lot!
[22:59]  np
[23:00]  StevenK: You also need to QA your double word thing.
[23:01]  what happened to buildbot?
[23:01]  webops: did someone kill it?
[23:02]  wgrant: that was me. We had defunct processes that needed cleaning up
[23:02]  * wgrant forces.
=== abentley changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | On call reviewer: - | Firefighting: - | Critical bugtasks: 4*10^2
[23:06]  lifeless: I can see how you could reduce the number of lines of profiling support for scripts, but how would you remove it entirely?
[23:12]  There she goes: https://launchpad.net/~drizzle-developers/+archive/ppa/+builds?build_text=&build_state=pending
[23:13]  james_w: Thanks.
[23:13]  abentley: If bin/py -m bzrlib.lsprof cronscripts/foo .... profiled cronscripts/foo in the same way bin/py -m pdb cronscripts/foo ... profiles it, then you don't need the script to know that it is being profiled
[23:13]  .
[23:14]  lifeless, does that cover your questions?
[23:14]  lifeless, poolie: I want to make the soft timeout flaggable like the hard timeout is. But unfortunately the feature controller is destroyed before the soft timeout is checked.
[23:15]  I'm considering simplifying things by just storing the hard and soft timeouts in thread-locals at the start of the request.
[23:15]  Rather than relying on the feature controller for every timeout check.
[23:15]  lifeless: Ah, I hadn't seen that before.  Yes, that might be worthwhile.  (Though profililing via bzrlib is a somewhat strange idea anyhow.)
[23:16]  A lot of bzrlib seems like it should be called "this should really be in the standard library"
[23:16]  yeah
[23:17]  especially osutils
[23:17]  arguably also transport
[23:17]  wgrant: IIRC, the lsprof module was rejected from the standard library.
[23:17]  Hah
[23:17]  wgrant, so you're saying you'll basically get it from the feature controller and remember it
[23:17]  oh also selftest
[23:17]  poolie: Yeah
[23:17]  poolie: We already preread it at the start of the request
[23:18]  if a language had excellent distribution support then I think it would take over the world, but that may be naive
[23:18]  To get it cached so it doesn't require DB access later.
[23:18]  But it relies on the feature controller surviving.
[23:18]  james_w: I think so, basically if you look at oops-tools is uses buildout to drop a local copy of django
[23:18]  so its not getting bugfixes
[23:18]  james_w: is there a ppa with django 1.3 in it ?
[23:18]  lifeless, yes
[23:18]  I could make the controller destruct later, but the way it's done now is reasonably nice.
[23:18]  https://launchpad.net/~canonical-ca-hackers/+archive/production/+packages contains the stuff we use from CAT
[23:18]  wgrant: The problem with the "batteries included" approach is when the batteries are all the same size :-)
[23:19]  Heh
[23:19]  james_w: any objection to e.g. LP using that, or nabbing packages from it ?
[23:19]  lifeless, none, we stole them from CAT after all :-)
[23:20]  :P
[23:20]  obviously co-ordination is encouraged, as we all end up having to share again when things are pushed back to CAT
[23:20]  yah
[23:20]  I was more checking you're not tossing known-broken stuff in there
[23:21]  lifeless, I have all the dependencies of oops-tools packaged fwiw
[23:21]  cool
[23:21]  lifeless, that PPA contains only what is deployed in production
[23:21]  lifeless, we have a staging PPA for the packages we are waiting for copying to CAT
[23:21]  so it's all very much things we expect to work
[23:34]  wgrant, thanks for the loggerhead improvements
[23:36]  :)
=== broder_ is now known as broder