/srv/irclogs.ubuntu.com/2011/11/10/#launchpad-dev.txt

lifelesswgrant: storebuildinfo, really?00:32
lifeless(bug 828017)00:32
_mup_Bug #828017: UnparsableDependencies raised by retry-depwait script <oops> <Launchpad itself:Triaged> < https://launchpad.net/bugs/828017 >00:32
lifelesswgrant: for my education, what makes this a dup?>00:32
wgrantlifeless: Check the referenced builds.00:33
wgrantlifeless: They don't have a builder, or datefinished, or...00:33
lifelesswgrant: are you saying that if they did, it wouldn't raise that oops ?00:33
StevenKIt would not, since the information would be set.00:34
wgrantlifeless: The error is raised when the dependencies are unparseable, which means either lp-buildd is buggy and returning bad data, or LP isn't handling it properly.00:34
wgrantIn this case, storeBuildInfo isn't being committed.00:34
wgrantNone of the metadata is stored.00:34
lifelessok, so they don't have crap in their headers, for instance.00:34
wgrantNo.00:34
wgrantThe data is just None.00:34
huwshimiOK, JS hackers, what's the Launchpad way of moving the JS in this template into its own file? http://bazaar.launchpad.net/~huwshimi/launchpad/tag-cloud-removal-709009/view/head:/lib/lp/bugs/templates/bugtarget-portlet-bugtags.pt00:40
* wgrant nominates wallyworld_00:41
huwshimiI assume I can just move it into a file in lib/lp/bugs/javascript00:41
* wallyworld_ looks00:41
huwshimibut I want to make sure it gets namespaced properly and uses whatever global stuff we have00:41
wallyworld_huwshimi: much of the js for the bugtask page lives in bugtask_index.js but you may want to use a new namespace for this00:43
huwshimiwallyworld_: What would you recommend?00:43
wallyworld_huwshimi: simply have the on domready in the tales call the method you have moved to the new namespace00:43
wallyworld_perhaps lp.bug.bugtask.tagcloud00:44
wallyworld_but i'm not the best at making up names00:44
wallyworld_it depends on if you think there may be more stuff to add which would warrant a new namespace00:45
wallyworld_i think that lp.bugs.bugtask_index has too much stuff at the moment00:45
wallyworld_might be good to have the tag cloud stuff separate00:46
wallyworld_typo, should be lp.bugs.bugtask.tagcloud, or even lp.bugs.tagcloud00:46
huwshimiwallyworld_: Where abouts is that tales domready?00:46
wallyworld_huwshimi: the existing js embedded in the tales have a domready call00:47
wallyworld_just replace the js in there with a call to the new namespaced method00:47
wallyworld_huwshimi: do you see what i mean?00:48
huwshimiwallyworld_: I know what you mean, I'm just not sure which file it is in00:49
wallyworld_huwshimi: the one from your link00:49
wallyworld_bugtarget-portlet-bugtasks.pt00:49
huwshimiwallyworld_: Ah right.00:51
huwshimiwallyworld_: Is there a way I can modify things so I can remove the javascript from that page completely?00:51
wallyworld_huwshimi: the on domready callback has to go somewhere00:52
wallyworld_there's an argument that it belongs with the template00:52
wallyworld_but it could also go on the template for the index page which contains the tag cloud i guess00:53
wallyworld_so if it is removed from the template for the tag cloud, it would need to be put separately wherever the tag cloud is used00:53
wallyworld_i guess the tag cloud is only used in the one place?00:54
wallyworld_on the bug task index page00:54
huwshimiwallyworld_:  At some stage we will be moving to having no javascript in our templates00:56
wallyworld_\o/00:56
huwshimiwallyworld_: As I was editing this code already I thought I would try and move this out of the template now00:56
wallyworld_huwshimi: so as far as i know, we don't yet have a well defined plan to deal with that00:56
huwshimiwallyworld_: I guess really it needs to happen with a proper js loader00:56
wallyworld_yep00:57
huwshimiwallyworld_: maybe I'll leave this for now then00:57
huwshimiwallyworld_: Well actually I'll move it into its own file, but leave the call00:57
wallyworld_huwshimi: the best you can do, afaik, is to just have the on domready stub in the template and the core business logic elsewhere00:57
wallyworld_for now00:57
huwshimiwallyworld_: Yep, ok that will set it up for the future complete removal. Thanks :)00:58
wallyworld_i've used this exact pattern where i need to be able to invoke the js in an xhr callback00:58
wallyworld_as well as the page loaf00:58
lifelessbenji: still around? I'm going to guess not ...00:58
wallyworld_huwshimi: np. good luck with it00:58
huwshimiwallyworld_: Thanks00:58
lifelesswallyworld_: hi; did you see my ping earlier ?01:17
lifelessthumper: number of possible reviews - performance or visualisation ?01:18
wallyworld_lifeless: ah yes, thanks. i tested it and yes it does do the right thing01:18
thumperlifeless: yes01:18
thumperlifeless: both01:18
lifelessthumper: so consider https://code.launchpad.net/launchpad-project/+activereviews01:18
lifelessthumper: or ubuntu/+activereviews01:19
lifelessthumper: for a developer in either project, thats going to be a large fraction - maybe 80 or 90 percent - of what we'd be showing on their ~/+activereviews, simply due to the activity of the projects01:19
lifelessthumper: or do you think it would be a much smaller fraction ?01:19
thumperapproved merges from mid 2009 is a bit sad01:20
lifelessit is01:20
thumperlifeless: I have no metrics01:20
thumperso I can't make any real call on this01:20
lifelessone way to get some is to implement it, flagged, and see01:20
thumpersure01:21
thumperat the time of development we didn't have feature flags01:21
lifelessyeah, they make things easier :)01:21
thumperand I chose the solution that was less likely to explode with timeouts01:21
thumperbut feel free to "fix" it01:21
lifeless:) I might scratch at the itch01:22
lifelessjml's request for -a- page is reasonable, the main thing I didn't understand is why that shouldn't be on the existing per user page01:22
lifelesssince the data volume is ~the same either way.01:23
StevenKlifeless: And how do you determine a person is involved in the project?01:24
lifelessStevenK: current heuristic of being a reviewer for the branch01:24
lifelessStevenK: can iterate on that, obviously.01:24
lifelessStevenK: As a dashboard for reviews, +activereviews is pretty good. The only issue at the moment, for a single dev, is having to visit one per project01:25
StevenKIndeed.01:25
lifelessconsider that looking at 'requested reviews I can do' for all projects in LP is equivalent to just seeing those you are a reviewer for - because the list is empty when you aren't an oficial reviewer.01:26
huwshimiwallyworld_: Do you mind doing a quick once over of what I did? https://code.launchpad.net/~huwshimi/launchpad/tag-cloud-removal-709009/+merge/8168901:28
* wallyworld_ looks01:28
wallyworld_huwshimi: for testability, you want to avoid Y.io01:33
wallyworld_you want: lp_client = new Y.lp.client.Launchpad();01:33
wallyworld_lp_client.io_provider(xxx)01:34
wallyworld_a bit pseudo ish01:34
wallyworld_but the above allows a mock io provider to be used for tests01:34
huwshimiwallyworld_: Ah, I didn't do that part, but this is a good opportunity to fix it01:34
wallyworld_see existing stuff in bugtask_index.js or elsewhere01:34
huwshimiwallyworld_: Thanks, I'll take a look01:35
wallyworld_huwshimi: also, set('innerHTML') i think we are trying to avoid where possible, can't recall exactly, but setContext() may work01:35
wallyworld_huwshimi: or new_node = Y.Node.create(xxxx); old_node.replace(new_node)01:36
wallyworld_or something like that01:36
huwshimiwallyworld_: Sure, I'll fix that up too01:36
wallyworld_i know that the server may generate only legit html and all that, but it is a potential security hole01:37
wallyworld_other than that, looks ok01:37
wallyworld_huwshimi: in case you don't notice it, the lp_client construction is usually inside a setup type function so the client is only constructed once01:38
huwshimiwallyworld_: Yeah ok thanks01:39
wallyworld_good luck :-) there should be several examples to cargo cult. let me know if you are stuck01:39
huwshimiwallyworld_: No problems, will do01:39
huwshimiwallyworld_: I think it should be fine in the setup function I already have there.01:44
wallyworld_the lp_client construction? yes, so long as setup is only called once which i guess it will be01:45
wallyworld_you will want to make your setup function take a config dict as an argument so you can pass in the io_provider stub for tests01:46
huwshimiwallyworld_: Oh ok, in that case would it be easier to have its own function?01:47
huwshimiwallyworld_: Easier for testing that is01:47
huwshimiwallyworld_: I guess it would be01:48
wallyworld_huwshimi: perhaps.  getClient(config) or something01:48
wallyworld_i think setup_lp_client(config) is also used, which assigns a module scoped lp_client variable01:49
wallyworld_then the code can just use lp_client and assume it's been all set up01:49
wallyworld_and the test would call setup_lp_client() with the correct config to pass in the io+provider01:50
wallyworld_whereas the prod code would call with no confif01:50
huwshimiwallyworld_: Should that setup function check to see if a lp_client already exists and if so do nothing?02:01
wallyworld_huwshimi: yes02:01
huwshimiwallyworld_: Ah good02:01
wallyworld_so var lp_client = null; somewhere in the module, and then the setup function sets it02:02
huwshimiwallyworld_: Yup02:03
huwshimiwallyworld_: Well, "var client;" is enough right?02:04
huwshimierm02:04
huwshimivar lp_client;02:04
wallyworld_i prefer to be explicit, but your call02:04
huwshimiwallyworld_: I don't mind. I'd prefer to be consistent02:04
wallyworld_sure. i'm not sure what our coding standard says for that to be honest02:05
huwshimiwallyworld_: let me check02:05
huwshimiwallyworld_: Most of these files seem to just declare the variable name02:05
wallyworld_sounds good02:06
huwshimiwallyworld_: The docs don't seem to say though02:08
wallyworld_as you say, just use what's gone before :-)02:08
huwshimiwallyworld_: Ok, here's where I'm at: https://code.launchpad.net/~huwshimi/launchpad/tag-cloud-removal-709009/+merge/8168902:27
* wallyworld_ looks02:28
wallyworld_huwshimi: i have led you astray a bit i'm sorry. if all you are doing is making a straight Y.io call and don't need the lp_client extras, you just do:02:35
wallyworld_var io_provider = Y.lp.client.get_configured_io_provider(config)02:35
wallyworld_where config is what's passed into your setup02:35
wallyworld_it is either undefined or a dict with an io_provider key02:35
wallyworld_if you do need the full lp_client, you do lp_client = new Y.lp.client.Launchpad(config);02:37
wallyworld_so in your current code, you are missing the config param for constructing the lp_client, but as per the above, you may not need that02:37
lifeless\o/ no oopses on asuka since the 2nd (all via amqp)02:38
huwshimilifeless: Oh, that config parameter did exist, I lost it at some point02:38
huwshimilifeless: sorry that was meant of wallyworld_02:38
huwshimiwallyworld_: Or maybe it only ever existed in the code in my brain02:39
wallyworld_huwshimi: perhaps :-)02:39
lifelessolder for tellurium.02:39
wallyworld_so if you want, you can just get yourself the io_provider02:39
wallyworld_good news about the oopses02:39
huwshimiwallyworld_: So this is how it should look? http://paste.ubuntu.com/733801/02:41
* wallyworld_ looks02:46
wallyworld_huwshimi: that looks ok to me. your test setup then just calls setup_io_provider(). if io_provider is only used the once in setup_taglist, you may consider ditching the separate setup02:48
huwshimiwallyworld_: yeah ok02:48
wallyworld_so make setup_taglist take the config param02:49
huwshimiwallyworld_: ok sure02:50
wallyworld_huwshimi: sorry about the false start before, i'm used to needed the whole lp_client object02:51
huwshimiwallyworld_: No, all good, I've learnt some things02:51
wallyworld_excellent02:51
wallyworld_the mock io provider we have is pretty good02:51
wallyworld_lp.app.javascript.testing.mockio.js02:52
huwshimiwallyworld_: Should I still have a check for if a io_provider already exists?02:54
huwshimiwallyworld_: Or is that really only important for the lp_client02:54
wallyworld_huwshimi: it doesn't really matter in this  case because it's just grabbing a value from a dict02:56
huwshimiwallyworld_: ok sure02:57
wgrantlifeless: bugsummary is pretty impossible to modify :/03:01
wgrantlifeless: There's like 5 patches, and they weren't flattened into trusted.sql.03:01
wgrantAnd they aren't in order :*(03:01
huwshimiwallyworld_: Ok, hopefully this is what you meant :) https://code.launchpad.net/~huwshimi/launchpad/tag-cloud-removal-709009/+merge/8168903:08
lifelesswgrant: sorry :) - twitch.03:08
lifelesshey, anyone know if there is a good 'touched recently' field on question ?03:08
wgrantI guess we need a new baseline schema soon anyway.03:12
wgrantlifeless: you probably have to take the max of all the date fields :/03:13
lifelessjust query response I think will do03:15
lifelessthey seem to combine to cover it03:15
wgrantThey even cover answers?03:16
lifelesslast-response03:16
lifelesslast-response + last-query forms the rule for who needs to act next03:16
wgrantRight, but what about a proposed answer?03:17
lifelessarguably doesn't need to cover messages - they are scanned separately03:17
wgrantErm, what does it cover, then?03:17
wgrantIs datecreated OK?03:17
lifelesswhiteboard, title description03:17
wgrantOh, whiteboard.03:17
wgrantBlah.03:17
lifelessso datecreated isn't enough03:17
lifelessdown to 5s query03:18
lifelessbig improvement03:18
lifeless(for 1 week)03:18
lifelessseq scanning question03:21
wallyworld_huwshimi: i would reverse the config and io_config names, otherwise ok i think. the setup config can contain more than just io_provider. and io_config seems better suited for use in the io call03:27
huwshimiwallyworld_: Ok, no problems03:28
lifeless500ms with two simple indices03:30
lifelessOTOH I could just limit those to their containing scope.03:30
lifelessprobably easier I think.03:30
wgrantlifeless: For a full week?03:30
lifelessyes03:31
huwshimiwallyworld_: OK, done, https://code.launchpad.net/~huwshimi/launchpad/tag-cloud-removal-709009/+merge/8168903:34
* wallyworld_ looks03:34
wgrantjtv: For arch-parallel a-f, see shelf 21 on DF.03:36
wallyworld_huwshimi: one more improvement  - use start and end callbacks in to show/hide spinner03:37
wallyworld_start and end callbacks in io_config03:37
wallyworld_that way you don't need to call hide in success handler03:37
wallyworld_and again in failure callback03:37
wallyworld_use something like "end: Y.bind(namespace.hideSpinner, namespace)"03:38
huwshimiwallyworld_: What does the bind give me that just doing "end: namespace.hide_spinner" doesn't?03:43
wallyworld_huwshimi: ah, sorry. i referenced an example where i had to pass a parameter to the hide api call, and i think bind is required then03:44
huwshimiwallyworld_: Ah right03:44
huwshiminp03:44
wallyworld_the js tests will ensure that it all works in any case03:44
StevenKI'd like to return count(archive.id) in a SELECT query, but only if it's > 103:46
StevenKOh, wait, they will not disappear.03:46
wgrantStevenK: HAVING03:46
StevenKSo I need to filter on state03:46
wgrantSELECT owner, COUNT(*) FROM archive WHERE status = 0 GROUP BY owner HAVING COUNT(*) > 103:47
StevenKwgrant: Can I do select count(...) AS foo .... HAVING foo > 1 ?03:47
wgrantProbably.03:48
* StevenK tries03:48
StevenKProbably not, that is.03:48
lifelessok03:49
lifelesswgrant: what did you want me to look at ?03:49
lifelessnow I have my query for oops pruning sorted, I'll look at your thing03:49
wgrantlifeless: Thanks.03:49
wgrantlifeless: So, http://paste.ubuntu.com/732768/ is the suggested undenormalisation.03:50
wgrantlifeless: It's only ~10% slower for Ubuntu.03:50
wgrantBut 2.5x slower for ubuntuone-servers, because this ends up doing a seqscan on apg.03:50
wgrantNot sure why.03:50
lifelessI guess I need to regen sample data03:51
lifelessah itsi nthe bin03:51
wgrantThe paste contains 4 queries at the end.03:51
wgrantThe third is fastest.03:51
StevenKSample data is in the bin?03:51
wgrantIt's ~600ms for Ubuntu, vs 1200-1500ms for the other three.03:51
wgrantBut it still does a seqscan.03:51
wgrantAnd is 120msish for ubuntuone-servers, rather than the old denormed 30-40ms version.03:52
lifelessthe old version was slow on ubuntu ?03:52
lifelessor is this just data that the oldver was better overall03:52
lifeless?03:52
wgrantYour version was just under 600ms for Ubuntu on DF.03:52
wgrantThe new one is a little over.03:52
lifelesswhats changed in the schema ?03:53
wgrantAPG.{artifact,policy} are mutually exclusive, and APA.policy exists.03:53
wgrantSo each artifact's policy is stored on APA, instead of many times in APG.03:53
lifelessah yes03:54
lifelessso this is a normalisation03:54
lifelessnot a denorm :P03:54
wgrantundenorm, I said.03:54
wgrantIt's not normalising, it's reverting the denormalisation :)03:54
lifelessdouble negative parsing fail03:54
wgrantHeh03:55
lifelessok, which query sucks again ?03:55
wgrantThe four at the end all do the same thing. The third is fastest.03:56
wgrantOne CTE and a couple of subselects.03:56
wgrantTry against product 9514 to see the greater slowness.03:58
wgrantBut the plans are the same.03:58
wgrantEr, the plans for distro 1 and product 9514, that is.03:58
lifelesswgrant: plan 3, product 9514 - 114ms04:08
lifelessplan 4 65ms04:09
wgrantBah, really?04:09
wgrantIndeed, 30% faster.04:12
wgrantBut slower for Ubuntu.04:12
lifelesshttp://paste.ubuntu.com/733853/04:12
lifelessthats the plans you had04:13
wgrant#3 there has a different context (ubuntuone-servers rather than ubuntu), but yes.04:14
lifelessbah04:14
jtvwgrant: do you mean that parallel a-f has been sitting around as uncompleted work?  That would be a serious waste.04:14
lifelesswgrant: 410ms for #3 on ubuntu04:14
wgrantjtv: Well, we don't really know how much of a win it is.04:14
lifelesswgrant: do you want the plan ?04:15
wgrantlifeless: That's 650ms on DF. #4 is 1.1s. So it is behaving somewhat differently to qastaging :/04:15
wgrantlifeless: Not really.04:15
lifelesswgrant: try raising your stats04:15
jtvwgrant: thing is, it won't be at all hard to make the MF manage a sensibly-sized pool of processes.  So if 2 parallel processes is a win but 5 aren't, we can do 2.04:15
huwshimiwallyworld_: I made the change to start/end and also changed the show show/hide to using classes instead of styles. As the show/hide are one liners do you think they should still be in separate functions?04:16
huwshimiwallyworld_: https://code.launchpad.net/~huwshimi/launchpad/tag-cloud-removal-709009/+merge/8168904:16
wgrantlifeless: Mmm, the slow bits of the plan aren't really different04:18
lifelesswgrant: those were all hot btw04:19
wgrantThe plan for #3 on 9514 is identical, and performance is almost the same. But it still hsa the seq scan, which seems unfortunate.04:20
wgrantBut if it's only 410ms for Ubuntu then I guess that's not too bad...04:20
lifelesswgrant: 123557 rows04:21
lifelesswgrant: 16ms to seq scan04:21
lifelesswgrant: (just to read the rows once through, no processing)04:21
wgrantlifeless: How'd you measure that? SELECT *?04:22
lifelesswgrant: yes04:23
lifeless59785 rows are ubuntu04:23
lifelesswgrant: thats 50% - seqscan is always going to be fastest ;)04:23
wgrantThat takes 160ms on DF.04:24
wgrantHmm.04:24
wgrantBut that can't be right, so maybe not.04:24
wgrantlifeless: Yeah.04:24
lifelesshttp://paste.ubuntu.com/733866/04:24
wgrantBut U1 and other products will be smaller.04:24
lifelesssure04:24
lifeless9514 was the 'slow' one right ?04:24
wgrant100ms instead of 40ms, yes.04:24
wgrant10294 is LP, which may be interesting.04:25
lifeless4K grants for 10294 and 9514 each04:26
lifelesssorry, 60K for ubuntu, not 600K04:26
lifelessmy eyes, me eyes, my eyes04:26
lifelesswgrant: still 5% of a table with narrow rows will hit ~ all pages unless its clustered on the selector04:29
wgrantTrue.04:30
wgrantIt's also only a 9MB table and should be nice and hot.04:30
lifelesswgrant: you can defeat the seqscan by unioning04:35
lifelessif you want04:35
wgrantYeah, but that's really slow for Ubuntu, at least on DF.04:36
StevenKdistroseries-edit-datereleased => devel  [OK]     (up for 4:39:27.158866)04:36
StevenKOh, come on, ec2.04:36
lifeless800ms here04:36
lifelesswgrant: 180ms in04:38
lifeless                                 ->  Index Scan using accesspolicygrant__artifact__person__key on accesspolicygrant  (cost=0.00..7.14 rows=2 width=8) (actual time=0.005..0.006 rows=2 loops=33978)04:38
lifeless                                       Index Cond: (pg_temp_43.accesspolicygrant.artifact = accesspolicyartifact.id)04:38
lifelessrm, something like that04:38
StevenK        # XXX cprov 2007-02-22 bug=87098:04:38
StevenK        # Since we only allow one PPA for each user,04:38
StevenKHa. Hahaha. Hahahahahahaahahahahahaha04:38
pooliehm04:39
poolieso the buildd package can be installed pretty easily as a dpkg on developer systems04:39
wgrantlifeless: OK, 800ms is better than I get, but still 100% slower than #304:39
poolieat the moment it automatically starts a buildd04:39
pooliei suspect this is not very safe or desirable04:39
wgrantpoolie: It's a nice easy remote root vulnerability, right.04:40
pooliei'm inclined to handle it by splitting off an "actually run it" package04:40
pooliewhich can be installed on the real buildds04:40
pooliewith that still called launchpad-buildd04:40
poolieand then eg launchpad-buildd-bin or python-lpbuildd04:40
poolieor maybe both04:40
pooliethat has all the stuff that will be developer dependencies04:40
wgrantMmm.04:41
wgrantI'd prefer not to have launchpad-buildd in any readily accessible apt repo.04:41
poolie:)04:41
pooliesomeone will run it04:41
wgrantYes.04:41
pooliewell, i could take this course and just not upload it04:41
wgrantHuh.04:41
wgrantSpeaking of remote root vulnerabilities.04:42
wgrantlolpython04:42
pooliethe other way these things tend to be handled is to have the daemon off by default and an 'are you really sure' in /etc/default/something04:42
poolie?04:42
wgrantyaml.load isn't safe. It loads pickles.04:42
wgrantWhat a sensible default.04:42
poolieseriously?04:43
wgrantYeah.04:43
wgrantYou have to use yaml.safe_load for that.04:43
poolieas a kind of dwim if you feed it a pickle?04:43
wgrantNot sure. I guess they define a way for YAML to contain pickles.04:44
jtvSay wgrant, how do I dput a package onto a PPA on dogfood?04:45
StevenKwallyworld_: What happened to TPG?04:45
wallyworld_?04:45
pooliewgrant, not pickles as such as far as i can see04:45
pooliebut you can call python objects from inside it04:46
StevenKwallyworld_:  "rev.aanet.com.au"04:46
wgrantYeah, not actual pickles.04:46
wgrantIts own implementation.04:46
wgrantBut still.04:46
poolieit's similar to doing eval04:46
wgrantWho could possibly think that was a reasonable idea.04:46
wallyworld_StevenK: oh, i've relocated today to a different place, change of scenery04:46
poolieanyhow04:46
poolie> off by default and an 'are you really sure' in /etc/default/something04:46
pooliethe main drawback is04:46
wgrantjtv: [df]04:47
wgrantmethod = ftp04:47
wgrantfqdn = upload.dogfood.launchpad.net:2104:47
wgrantincoming = %(df)s04:47
wgrantlogin = anonymous04:47
poolielosas need to turn it on i guess04:47
wgrantjtv: dput df:ubuntu something_source.changes04:47
poolieand, some people will turn it on and get in to trouble04:47
wgrantpoolie: And it breaks the automated installation.04:47
lifelesswgrant: plan three is 640ms04:47
StevenKwgrant: That's to ubuntu, not a PPA04:47
jtvwgrant: so no mention of the PPA at all?04:47
wgrantlifeless: How fast was your query?04:47
lifelesswgrant: uhm, variable. just got a 45004:47
poolieso...04:47
wgrantjtv: Ah, for a PPA. Use a PPA path.04:47
lifelesswgrant: lots of noise04:47
wgrantlifeless: Er, your query from a couple of days ago, that is.04:48
wgrantI can't remember.04:48
wgrantWas 300ms or something.04:48
lifelessoh right04:48
lifelessbut that was old schema wasn't it ?04:48
wgrantIt was.04:48
jtvwgrant: is a PPA path something like “ppa:user/ppa”, without changes for dogfood?04:48
wgrantjtv: The FTP path is ~user/ppa/distribution04:49
wgrantSo df:~user/ppa/distribution04:49
jtvOh04:49
jtvThanks04:49
wgrantlifeless: But I would like to get a real performance comparison between the two schemas.04:52
wgrantlifeless: The queries in the denormed one are already slow.04:52
wgrantStevenK: Erm.04:54
StevenKwgrant: Hm?04:54
wgrantAh, I see.04:55
wgrantJust somewhat bemused at the misspelt instance variables your rev added.04:56
wgrantbut there was actually a reason for it, and the misspelling wasn't yours.04:56
StevenKOh?04:56
jtvstub: any luck with Q/A for bug 826653?04:56
_mup_Bug #826653: preflight check could report patches to be applied <fastdowntime-later> <qa-needstesting> <Launchpad itself:Fix Committed by stub> < https://launchpad.net/bugs/826653 >04:56
stubNeeded to wait for a staging update... lets have a look04:57
wgrantStevenK: "derivative" is not spelt "derivitive", and it's sort of odd to set the instance variables in setUpFields.04:57
stubProbably should avoid a rollout today since we are doing the slony upgrade btw.04:57
wgrantDo we have a GSA scheduled to do the package swap? :)04:58
jtvstub: that's a shame—we could roll out all 14 available revisions once your Q/A on this is done.05:01
stubqa-ok05:01
stubwgrant: I thankfully don't have to juggle those details now ;)05:01
wgrantstub: Oh?05:02
jtvthanks stub05:02
stubOther people schedule the time05:02
wgrantWell, as long as someone knew a GSA was required...05:03
StevenKstub: What should I do with https://code.launchpad.net/~stevenk/launchpad/db-packageupload-archive-index/+merge/79903 ?05:03
pooliebiab05:04
wgrantlifeless: So, do you have a feeling as to which one is better? Your numbers are probably better than mine. Is the denorm worth it?05:06
stubStevenK: Land it?05:07
StevenKstub: Last time I spoke to you, you wanted me to hold off a few days. It's fine to land and have the indexes dropped?05:07
wgrantst[a-z]+/i: Doesn't that drop the index, which we were going to do once we determined it was unused?05:07
StevenKHahaa05:07
stubStevenK: I'll look05:07
stubI recall now05:08
lifelesswgrant: still fiddling05:08
lifelesswgrant: the full is trivial - 4ms05:08
wgrantlifeless: Ah, k05:08
StevenKstub: And sorry for dropping the ball :-(05:08
wgrantlifeless: Huh?05:08
lifelesswgrant: seeing if I can get a better restricted result05:08
wgrantOh.05:08
wgrantRight.05:08
wgrantYes, there aren't many full observers.05:08
lifelesswgrant: so I'm fiddling without the full case05:08
wgrantIt's possibly beneficial to split the table, but let's see what you find.05:08
lifelesswgrant: denorming the sort key onto apg might be good05:10
lifelessif you want to make it fly05:10
wgrantlifeless: It would be.05:10
wgrantBut, uh, let's not go there...05:10
wgrantyet, at least.05:10
stubSo packageupload.signing_key is never used. But probably should leave that.05:12
wgrantstub: The index?05:13
wgrantHmmm.05:13
wgrantOdd.05:13
wgrantIt should be.05:13
stubpackage_copy_job_idx is not used much05:13
stubyes05:13
wgrantpackage_copy_job_idx?05:13
wgrantWhat's that?05:13
wgrantIt doesn't match our usual format, and I can't see it on packagecopyjob05:14
stubid_distroseries_archive is good to drop - it is unused05:14
wgrantOh.05:14
wgrantOn PackageUpload. i see.05:14
StevenKstub: There are not many PCJs floating around05:14
StevenKwgrant and I have a plan to make more05:14
stubdistroseries_status_idx is still used, but I suspect those uses will switch to the other index if it is dropped05:14
wgrantid_distroseries__archive seems like a completely bad idea.05:15
lifelesswgrant: denorming the sort key onto grant is insufficient05:16
lifelesswgrant: these are all under 1s05:16
lifelesswgrant: and all doing full set ops, so sustainable05:16
stubhttp://paste.ubuntu.com/733885/ is before, http://paste.ubuntu.com/733886/ is after if anyone wants to see the raw stats05:16
lifelesswgrant: my recommendation is this:05:16
stubTimeframe was around when I last discussed this with StevenK :-)05:16
StevenKpackageupload__signing_key__idx05:16
lifeless - A) go with this normalised schema05:16
StevenKThat's totally unused, should we just drop it?05:16
lifeless - B) if its too slow create a fact table from it (like bugsummary) that can answer in a few ms.05:17
wgrantSounds good.05:17
wgrantThanks.05:17
stubStevenK: If inserts or updates are not too slow, leave the signingkey index. It is good to always have indexes on foreign key references to avoid surprises.05:17
StevenKstub: Fair enough, if you're happy dropping the two indices, let's land it, then05:18
stubIf there are still queries looking for distroseries without an archive, are they broken?05:20
StevenKYes05:20
wgrantHmm.05:20
StevenKSince they'll conflate PPAs and the primary archive05:20
wgrantExcept possibly Distribution:+ppas.05:20
wgrantLet's see what queries that does.05:20
StevenKstub: I thought we seperated columns by __ in indicies, so I'm surprised by id_distroseries...05:22
stubWe still got 70k queries hitting the distro__status index. If we drop it, the alternatives are the archive__distro__status index and the distro index. Neither would be good if there is a valid use for queriying all archives for a distro,status05:22
wgrantStevenK: It's a typo.05:22
stubStevenK: Old naming conventions05:22
StevenKAh05:22
stuband that would be a typo anyway05:22
StevenKHeh05:22
stubPossibly that is there to support a foreign key reference? Or maybe a failed attempt to optimize a query.05:23
stubc/is/was/05:23
StevenKConjecture, hearsay ... :-)05:23
StevenKBut it looks like that index has been there for a long long while05:24
wgrantNo.05:24
wgrantIt's new.05:24
wgrantIIRC lifeless added it.05:24
wgrantTo optimise DistroSeries:+queue for NEW/ACCEPTED.05:25
wgrantI don't see how it could possibly work, though :)05:25
StevenKHaha05:25
lifelesswhich one?05:25
wgrant    "packageupload__id_distroseries__archive__idx" btree (id, distroseries, archive) WHERE status = ANY (ARRAY[0, 1])05:25
wgrantPrimary key first in the index... not entirely useful.05:25
wgrantI guess that packageupload(status) would do the same thing.05:26
wgrant-- Partial index for queue processing view : the lopsided data makes this05:26
wgrant-- necessary (millions of rows matching the archive, 100's of rows match the05:26
lifelessmade by me, landed by you05:26
wgrant-- query).05:26
wgrantReally?05:27
wgrantNo.05:27
lifelesscheck annotate :P05:27
StevenKBut it's +queue, it's for a tiny amount of archives05:27
wgrant        committer: Robert Collins <robert@canonical.com>05:27
wgrant          Create a partial index to support queue processing queries more efficiently.05:27
lifelessyou put the db revno in it05:27
wgrant        committer: William Grant <william.grant@canonical.com>05:27
wgrant        branch nick: fix-patch-5705:27
wgrant          Live-deployed patches need a non-zero patch number. Production is already fixed.05:27
lifelessah05:27
lifelessok05:27
lifelessanyhow, if its not used, remove it; it would have been added based on the queries seen at the time05:28
wgrantStevenK: Yeah, but as the comment says it's very lopsided.05:28
wgrantlifeless: It probably is still useful.05:28
wgrantBut it's excessive.05:28
lifelessnote that a sort by id can trigger that index.05:28
stubIt hasn't been hit once in a few weeks. We don't need it.05:28
StevenKstub: So, that's a +1 to toss that branch at db-devel?05:29
stubI'm interested in if we really should drop the distroseries__status__idx index.05:29
wgrantDistribution:+ppas uses SPPH, not PU.05:29
wgrantIt would be nice if we could find out what was using that index.05:30
stubSo it seems that if there are still queries not using archive as a filter on packageupload, they are broken? That would also explain why the id_distroseries index is never hit.05:30
stubignore that05:30
stubSo it seems that if there are still queries not using archive as a filter on packageupload, they are broken?05:31
wgrantstub: Well, or the data is sufficiently skewed (archive 1 still has more than 50% of the table, probably) that the planner decides using archive is not useful.05:31
stubIt would still use the archive__distroseries__status index I think05:32
lifelesswhat I've seen happen a couple of times is that transforming the query very slightly will cause indices not to be used05:32
wgrantVery slightly :(05:32
lifelessso it may just be a minor change during derived distros05:33
lifelessstopped it being used05:33
wgrantThere have been no changes of that sort, really.05:33
wgrantBut maybe.05:33
stubIf inserts and updates are not causing us grief, I'm happy enough to leave the index in there. PG seems to still like using it for whatever reason.05:33
StevenKRight, so just id_distroseries dies05:34
stubYup05:35
StevenKstub: That's landed. r11140 on db-devel05:57
poolieso if i want to get /usr/share/launchpad-buildd onto the pythonpath when launchpad runs, what would be a clean way to do that....?06:01
pooliemaybe just in the makefile06:05
lifelesspoolie: buildout06:13
pooliebuildout.cfg06:13
poolieyeah got it06:13
lifelesspoolie: I'm curious why you say this isn't really python06:14
poolieit contains perl :-P06:14
wgrantIt's not a Python package.06:15
poolieand the package as a whole just seems oriented towards being a dpkg not an egg06:15
wgrantIt's an application.06:15
wgrantWhich happens to use an internal Python package.06:15
poolieobviously python things can contain arbitrary stuff06:15
poolieright06:15
lifelessso, why do you want it on the python path then ?06:15
pooliei want the python stuff on the path06:16
wgrantpoolie: I would just put it in sourcecode/ for now.06:16
wgrantRather than disabling it by default and not mangling /etc/sudoers and etc.06:16
pooliei could split it into one part distributed as an egg and one part as a dpkg06:16
pooliewgrant, i think i'm going to go for two dpkgs06:16
wgrant:/06:17
pooliewhy?06:17
poolielifeless semi-vetoed sourcecode06:17
wgrantAnd I am mostly-vetoing dpkg.06:17
lifelesswhy?06:17
wgrantIt's not a package that should be available to anyone.06:17
wgrantIt's terribly dangerous. It is badly behaved.06:18
lifelesswhat should we use instead?06:18
wgrantsourcecode.06:18
wgrantI suspect.06:18
wgrantUntil we have a proper fake version.06:18
poolieare my changes making it any more dangerous?06:19
pooliepeople could run it today and get into trouble06:19
wgrantYou're proposing putting the package into a public archive and encouraging its installation.06:19
pooliei'm happy to keep the part that actually starts the daemon out of a public archive06:20
wgrantHow?06:20
poolienot uploading it?06:20
poolieuploading a poisoned highly-versioned package that does nothing?06:21
wgrantHaving the source package sometimes build the evil package and sometimes not sounds like a recipe for trouble.06:21
wgrantThis is presumably only a temporary measure.06:21
wgrantLP shouldn't need the buildd tree.06:22
poolieperhaps we can detect if the package is running on a 'real' buildd and abort otherwise?06:22
pooliewgrant, i'm trying to make lp depend only on the parts it actually needs to test06:22
pooliewhich don't include anything running as root06:22
pooliei guess we could do a further split of the 'actually really run it as root' scripts into a separate source tree06:23
wgrantlifeless: What is the policy on test fakes these days?06:23
lifelessrequires for new microservices06:24
lifelessthis is in a grey area06:24
lifelessI would vastly prefer one06:24
lifelessbut split out without one is better than not split out06:25
poolie...06:25
lifelessand poolie has a record of continuing to tug on things06:25
poolieso, meaning what exactly?06:25
poolielaunchpad tests do not need the actual buildd implementation at all?06:25
lifelessELOCAL, bbs06:25
wgrantpoolie: They shouldn't.06:25
pooliei would prefer that06:25
wgrantpoolie: Why would they?06:25
wgrantThey need something that looks like it.06:26
wgrantThey clearly don't need the actual thing, since it can only run as root.06:26
pooliethere are a couple of answers06:26
wgrantWe care that it speaks the protocol correctly.06:26
poolieone is to reduce risk while splitting things i want to keep as much test coverage as i can at least during the transition06:26
pooliebecause there are no good automated overall integration tests06:27
wgrantRight.06:27
poolieso...06:27
pooliei guess i could look at just redoing those tests now06:27
wgrantI suggest that the cheapest thing to do right now, until we have a strategy to move forward, is to use sourcecode. I don't like it either, but I think it's the best thing for now.06:27
poolieyour main concern being that people will blithely install the buildd package and kill themselves06:28
wgrantAnd LP doesn't really like using packages for Pythonish deps.06:28
wgrantAnd lp-buildd doesn't make sense as an egg.06:29
wgrantAnd lp-buildd deployment is fragile and obscure enough that I'd really really not like to change it right now by splitting the packages up.06:29
poolieperhaps we should just look at the tests that do depend on it06:29
poolieand see if they can easily be changed right now06:29
wgrantPossibly, but we'd probably need to rewrite significant volumes of tests on both sides.06:30
wgrantWorth a try, though,06:30
wgrantjtv's been in this area lately.06:30
wgrantHi jtv.06:30
jtvI deny everything.06:30
poolieso the connections are06:30
poolieBuilddSlaveTestSetup (a fixture)06:31
wgrantjtv: You've been dealing with buildd integration and tests thereof lately, right?06:31
pooliesome things in translations that use generate_translations_templates and also write to the lp db06:31
jtvOne particular aspect.06:31
poolieand the codehost06:31
pooliethe utility 'pottery-generate-intltool'06:32
poolieand that's about it06:32
poolieso the buildmaster things could perhaps be satisfied with a fake06:32
pooliethe translations tests really look like integration tests to do with how code inside the buildd runs06:33
jtvEverything related to buildd looks like integration tests.  :/06:33
pooliei guess they need to be split into tests that cover the two respective sides of the handoff06:33
jtvThe buildd infrastructure isn't easily split into “sides” of communication, unfortunately.06:34
jtv(Also, there are at least three sides)06:34
wgrantjtv: Master and slave?06:34
wgrantWhat's the third side?06:34
jtvLibrarian.06:34
poolieand codehosting too i think06:34
wgrantMm, slightly.06:34
lifelessideally three sets - in-lp, in-buildd, and a smattering of end to end tests run on jenkins [note that we don't have these today, because we don't run the LP test suite as root...06:34
wgrantBut the librarian and codehosting deps from the buildd are very weak and easily fakeable.06:35
lifelessthe more network fakes we build the easier it gets06:35
lifelessnot to be trite06:35
poolieyeah06:36
jtvBut we have same very nasty issues to deal with there, such as “what if interopation with another builder aborts changes done in the context of your builder while you wait for the librarian?”  This is what I' trying to deal with at the moment.06:36
pooliei just don't want one ginormo commit/deploy, since it will be hard to debug06:36
lifelessjtv: that doesn't depend on the builder implementation nor the librarian implementation in any way that a fake can't simply simulate06:36
jtvIMHO we need loads of unit test coverage built first, followed by a streamlining of the integration tests.06:36
jtvAnother problem compounding the situation though is that the whole buildmaster architecture urgently needs to be cleaned up.06:37
pooliewell06:38
wgrantpoolie: Right, I want small steps.06:38
wgrantThe easiest way to get the split done now is to use sourcecode. Then we can start severing connections, writing fakes, etc. And eventually drop the dep.06:39
wgrantRather than breaking deployments by reworking the package into a form that is usable in an ugly way until we have fakes.06:39
pooliecan you explain why using a deb will be breaking deployments, ugly, etc06:40
wgrantWell, nobody knows how lp-buildd deployments work now.06:40
wgrantThe package mangles sudoers itself in ways that interact unobviously with puppet.06:41
wgrantetc.06:41
wgrantI don't like our chances of changing the package without breaking deployments in various ways.06:41
lifelessanother sequence you could use06:41
lifelessis to write fakes in-lace06:41
lifelessget it all copacetic06:42
lifelessthen remove the code06:42
pooliefwiw i just now have lp passing its tests using the deb version of lpbuildd06:42
lifelessthat said, we have qastaging / staging to test deploys on06:42
pooliewhat is in-lace?06:42
lifelessin-place06:42
wgrantlifeless: Hahahaha06:43
pooliein which place?06:43
lifelessso I'm not scared of undetected breakage hitting production06:43
wgrantWe saw how well staging testing worked last time...06:43
wgrantpoolie: In the LP tree.06:43
lifelesswgrant: once we used it properly it seemed to work ok06:43
lifelesswgrant: or did I miss something?06:43
wgrantlifeless: Do we know what went wrong?06:43
wgrantWe broke prod last week.06:43
wgrantBecause staging QA didn't.06:43
lifelessyes, AIUI we didn't actually end-to-end things the first time around06:44
lifelessIMBW06:44
wgrantWe did.06:44
wgrantBut the builder was unbroken.06:44
lifelesswhat was broken then ?06:44
wgrantQuite how it was unbroken I don't think we know.06:44
poolielifeless, so you're saying, keep lp's own copy of the code06:44
poolieand gradually rewrite the tests to not need a builder process?06:44
pooliewe could06:44
lifelesspoolie: well, we want a builder process06:45
lifelesspoolie: but that should be a network fake rather than a live instance06:45
lifelesspoolie: https://dev.launchpad.net/ArchitectureGuide/ServicesRequirements#Test_fake06:45
poolieriht06:46
pooliehm06:47
lifelessI'm saying that separating the trees (into lp and a live buildd with included test fake tree) could be the last step, rather than the first.06:47
poolieaside from the coupling to the deployment environment, i don't think testing against the actual buildd code is all that bad06:47
poolieright06:47
pooliehowever, i have actually done it in the other order06:48
poolieso i'd kind of rather not abandon it unless there's actually something unavoidably bad06:48
poolieit is meant to be a cleanup so i do want it to be something we're happy is at least incrementally cleaner06:49
lifelessI'm fine with either order; I don't see a package in the LP PPA as terrible, particularly if you're going to keep poking at it - in fact, by getting closer to how we deploy (e.g. if we hint to lamont we want the same package and get his support), we may reduce friction06:52
pooliei hope so06:52
lifelesspoolie: I only offer up the other order for consideration06:52
pooliewhat do you mean by 'same package'?06:52
pooliesame binary, without a cat rebuild?06:52
lifelesssame build process06:53
lifelesscat would rebuild, always does06:53
lifelessbut no hidden magic06:53
poolieafaik that is what we did in the last deploy06:53
poolieor perhaps it's just sufficiently hidden magic :)06:53
pooliewoo06:53
poolieeverything likely to have broken now seems to be passing06:54
poolieso wgrant can i make you tolerably happy if i use the dpkg dependency but07:01
poolie- split off the 'kill me now' bits into a separate package which is not in ppa:launchpad07:01
lifelessman, TestOopsPrune is a littttle braindead07:01
poolie- file bugs against the tests that depend on importing from it07:02
poolie- perhaps try to rig the init script so it will start without disruption on the buildds but not on anyone else's machine07:02
wgrantPerhaps.07:03
lifelessit writes the same oops into recent and old directories, and then tests that its only deleted from some.07:04
lifelesswin07:04
lifeless.07:04
wgrantHah07:05
pooliewgrant, so just to be clear, the two things are07:11
poolie- it will be horrible if people start offering buildds on untrusted networks07:11
poolie- generally we don't like python in debs-07:11
poolie(but we maybe like sourcecode less, depending who you ask)07:11
poolieis that correct?07:14
pooliewell, https://code.launchpad.net/~mbp/launchpad/800295-delete-buildd/+merge/8181507:22
lifelesswgrant: StevenK: jtv: whats a good mixin interface that product and distribution already inherit, to add a referenced_oopses(start, end) method to07:27
lifeless'There is None' is a valid if sad answer07:27
poolieok i'd better go07:30
pooliemay be back later07:30
lifelesswgrant: we were talking about the API the other day07:55
lifelesswgrant: what decorators will I need for findReferencedOOPS(start_date, end_date), do you think ?07:55
lifelesswgrant: operation_parameters, export_read_operation, I presume07:56
wgrantlifeless: Yep.07:56
wgrantAnd operation_for_version07:56
wgrantBut that should be it.07:56
wgrantJust leave the return type undeclared.07:56
lifelessthanks07:57
lifelessnow, I'd like a sanity check on something07:57
lifelessI plan to ignore security and scan everything, on a public anonymous API07:57
lifelessbut return *only* the OOPS strings themselves.07:57
lifelessI'm assessing our regexps as tight enough to not disclose anything07:57
lifelessAm I wrong?07:57
wgrantWell.07:58
wgrantThat's a good question.07:59
wgrantI don't currently like the way we permit whitespace.07:59
wgrantBut at most it can reveal one word.07:59
lifelessdo we actually linebreak OOPS-bar ?08:01
lifelessperhaps we should make that not break, and tighten the refex08:01
wgrantThat's what I was thinking.08:02
lifelessor08:02
lifelessperhaps we should tighten the regex and file a low bug about linebreaking that08:02
wgrantEven better.08:02
lifelessif someone writes oops-tradesecrethere in a bug, we may disclose something; I think thats a fairly low risk08:03
stuboops-i-did-it-again08:03
lifelesswill pick up'i' :P08:03
stubToday Thailand celebrates Loy Kratong to pay respect to the spirit of the waters.08:08
wgrantHeh08:08
nigelbIrony right there.08:09
nigelbstub: You're in a safe area I hope?08:09
stubI'll be last to go08:09
nigelb:)08:09
lifelessjtv: where were you putting your 'object implements interface' tests ?08:13
lifelessjtv: I'm adding a mixin interface to product and distribution; I went looking in lib/lp/registry/tests/test_product.py first08:13
lifelessjtv: ah, I found it08:19
lifelessjtv: I was searching for verifyObject :)08:20
mrevellHello09:00
adeuringgood morning09:00
StevenKAnd AWS add a second US West region.09:18
StevenKNo, this isn't confusing AT ALL.09:18
nigelbStevenK: Actually, there are 4 US locations :)09:29
nigelbVirginia, Portland (new), California, and a Govt location which is only for US folks.09:30
nigelbMorning bigjools!09:31
mrevellha09:31
nigelbHrm, did I scare him away?09:31
nigelb:D09:31
allenapGood morning everyone. Who knows about PPPAs?09:51
wgrantallenap: What's up?09:52
allenapwgrant: I can see a PPPA, and so can an esteemed colleague of mine, but get 401 when adding the suggested entries to sources.list. I noticed there's no user auth garbage in the URLs it suggests.09:53
wgrantallenap: Those pages aren't meant to be used.09:54
wgrantThey were invisible until someone did something 18 months ago.09:54
wgrantUse https://launchpad.net/~/+archivesubscriptions09:55
wgrantinstead09:55
allenapwgrant: Ah ha, okay. So the PPPA needs to be granted to the user.09:55
wgrantThe URLs will probably magically become sensible once you click the "View" link on +archivesubscriptions.09:55
wgrantThat generates your unique access token.09:55
wgrantHah09:55
wgrantAnd the CSS is broken, so you can actually see which of the View links are normal, and which are magical.09:55
allenapwgrant: Thanks, that's great.09:57
nigelbwgrant: Magical?09:57
wgrantnigelb: JavaScript which requests an access token.10:03
nigelbah.10:04
nigelbI don't see any of those. but then I only have one PPA listed there.10:04
jmlis it true that LP has instant oops availability?11:28
wgrantjml: On staging and qastaging, but not on production yet.11:28
wgrantWe don't have the rabbitmq metrics completely done yet.11:28
jmlwgrant: ah right, thanks.11:28
wgrantIt all works fine, but we're not putting rabbit into production until we have good monitoring and such.11:29
jml+111:29
jmlis there a live feed of oopses too?11:30
wgrantNot as yet.11:30
jmlor do you have to know the code before you can get to them?11:30
wgrantBut oops-tools is hackable now, so I expect we'll see some nice stuff soon.11:30
wgrantAnd it's all split out into non-LP-specific projects, so others can use it if they so desire.11:30
wgrantlifeless has done amazing work to that end.11:30
jmlyeah, that's why I'm asking, as it happens.11:31
lifelessthere is an index on date I think11:33
lifelessso we can do an API to get latest N11:33
lifelessand expose that in LP itself11:33
lifelessor add it to the oops-tools console11:34
lifelessI've also just got the OK from jane to LGPL the plumbing11:34
wgrantAh, excellent.11:34
wgrantThat'll make things a bit more sensible.11:34
lifelessjml: lp:python-oops-tools if you want to go looking11:37
jmllifeless: thanks11:38
lifelessI am considering adding an explicit oops-reference table to LP11:39
lifelessto let us have references into the separate oops-tools service11:39
lifelessthis might make the crashdump project better11:39
stublifeless: Any reason to have the oops-reference table in lp rather than in a database controlled by the oops service?11:52
adeuringallenap: are you doing reviews today?11:58
lifelessstub: yes, because LP knows what things hold references12:00
lifelessstub: both ends may want to know actually; e.g. oops-tools knows 'referenced by url, url, url, ...' and lp knows 'bug X references oops, oops, oop', question Y references oop, oops, oops etc12:00
lifelessstub: this is a new thought still getting assembled though; ask me tomorrow I may have a totally different idea12:01
allenapadeuring: I am.12:04
=== allenap changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | On call reviewer: allenap | Critical bugtasks: 275
allenapadeuring: Though I probably have enough on my plate already :-/12:04
allenapadeuring: I am out much of the afternoon, working late this evening instead.12:04
adeuringallenap: ah, ok. If you have some spare time nevertheless, could you have a llook at this mp: https://code.launchpad.net/~adeuring/launchpad/banner-for-beta-features-2/+merge/81833 ?12:05
allenapadeuring: Sure :)12:05
stublifeless: LP doesn't really know, it holds a heap of information that needs to be scanned and processed. The way we do it at the moment is not scalable. If we picked up references at insert time we no longer need to scan. But where to store those references? Just as easy to send a message to rabbit as it is to store the reference in a db table.12:26
stublifeless: And that way the service that stores the OOPSes doesn't need to reach into the Launchpad database to determine what can stay or what can go.12:26
=== jcsackett changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | On call reviewer: allenap, jcsackett | Critical bugtasks: 275
rvbaCould you guys tell me how to create a "mirrored" branch? I'd like to answer a question in #lp but I can't find how to change a branch type myself (https://help.launchpad.net/Code/MirroredBranches)14:02
rvbajcsackett: I'm pinging you since you've OCR ;). Do you have any idea? how to created a mirrored branch? (See my question above). The doc in https://help.launchpad.net/Code/MirroredBranches really seems outdated…14:05
rvbas/you've/you're/14:05
rvbas/created/create/14:06
rvbaphew14:06
nigelbrvba: on the code.launchpad.net/project page click on "Import a Branch" I think.14:06
nigelbwhere project is whichever project it needs to be associated with.14:07
rvbanigelb: but what about if you want to have a branch in ~me/+junk/my_mirrored_branch ?14:07
nigelbrvba: I think mirrors aer associated with project not +junk. *checks*14:07
rvbaThat's not what https://help.launchpad.net/Code/MirroredBranches says but this might be outdated…14:08
nigelbOh. Hrm. Interesting14:08
nigelbImported branches don't have a Mirrored status anyway.14:09
rvbaI need a code specialist… abentley maybe? Would you know the answer to my question above?14:10
abentleyrvba: I've never needed to, but...14:11
rvbaabentley: I suppose the right way to do that is to properly create a project and have the branch mirrored in that project…14:12
rvbaBut that's not what https://help.launchpad.net/Code/MirroredBranches says.14:12
abentleyrvba: It looks like you go to the pillar page and click "Import a branch".14:12
rvbaabentley: I'm sorry but what is the pillar page (you have to know that I've been trapped inside Soyuz for a few months, I just escaped very recently).14:14
abentleyrvba: https://code.launchpad.net/launchpad/ for example14:15
nigelbTrapped inside soyuz. Oh dear.14:15
rvbaabentley: ok, so no mirrored branch in /~me/+junk then?14:15
abentleyrvba: And probably anywhere else branches are listed.14:15
abentleyrvba: You might want to ask someone on the Bazaar team.  They're the last ones who touched this functionality.14:16
rvbaabentley: ok I'll do that, thanks for the help.14:17
deryckjcsackett, are you reviewing adeuring's js branch?15:04
jcsackettderyck: yeah, i was just looking through it.15:04
deryckjcsackett, ok, cool.  Thanks.15:04
jcsackettwas about to tell adeuring i had left some questions on it.15:04
jcsackettit seems a bit redundant now, but. adeuring, i left some comments on your MP. :-)15:05
deryckheh15:06
adeuringjcsackett: I deleted the redundant stuff (and thanks for the review)15:15
jcsackettthanks, adeuring. r=me.15:30
adeuringjcsackett: thanks!15:31
=== matsubara is now known as matsubara-lunch
=== beuno is now known as beuno-lunch
mrevelldanhg, We should aim to talk about bug 888596 before the end of the day; if not, tomorrow.16:21
_mup_Bug #888596: Instructions for generating gpg keys are not provided for Unity <Launchpad itself:Triaged by danhg> < https://launchpad.net/bugs/888596 >16:21
danhgI'm looking over it now16:30
abentleyallenap, jcsackett: could you please review https://code.launchpad.net/~abentley/launchpad/back-button-support/+merge/81875 ?16:43
=== beuno-lunch is now known as beuno
=== matsubara-lunch is now known as matsubara
jcsackettabentley: looking now.17:13
=== deryck is now known as deryck[lunch]
jcsackettabentley: r=me. looks fine.17:21
abentleyjcsackett: thanks.17:21
=== salgado is now known as salgado-lunch
sinzuijcsackett, do you have time to mumble?17:52
mrevellNight all17:59
abentleyderyck[lunch]: I'm up for our chat anytime.18:00
=== deryck[lunch] is now known as deryck
deryckabentley, ok, cool.  Give me just a bit more and I'll ping you.18:02
jcsackettsinzui: sure. one moment.18:07
deryckabentley, I can chat now, if you're still free.18:16
abentleyderyck: let's go!18:16
=== salgado-lunch is now known as salgado
jcsackettbac: r=me on your lplib MP.18:18
bacjust saw that, thanks jcsackett18:23
jcsackettsinzui: i have to run out for a few moments; i'll ping you to mumble when i return.18:34
jcsackettsinzui: i am again free to mumble whenever you are.19:08
deryckjcsackett, are you reviewing still?19:33
jcsackettderyck: i am. have a branch for me?19:33
deryckjcsackett, indeed! https://code.launchpad.net/~deryck/launchpad/toggle-bug-fields-config-widget/+merge/8190019:33
deryckjcsackett, more of my widgets for new bug listings work.19:34
jcsackettderyck: looking at it now.19:34
deryckjcsackett, awesome, thanks!19:34
jcsackettderyck: r=me. looks like nice work.20:06
jcsackettand it just taught me how the getter/setter attr stuff in YUI works. :-P20:06
deryckjcsackett, awesome, thanks!20:06
deryckheh20:06
deryckgood deal then.20:06
jcsackettindeed. :-)20:06
deryckit's pretty expressive when you get you're head around it.20:07
jcsackettyeah, it certainly seems pretty cool.20:07
cr3hi folks, there are broken links to the Twisted Coding Standard and CodingStyle for Zope 3 on https://dev.launchpad.net/PythonStyleGuide20:11
cr3I suspect the first should point to: http://twistedmatrix.com/trac/browser/trunk/doc/core/development/policy/coding-standard.xhtml?format=raw20:11
cr3and the second to: http://wiki.zope.org/zope3/CodingStyle20:11
cr3not knowing what the original links looked like, these are only googled guesses20:11
lifelesssounds good to me20:14
lifelesscr3: so, did you want to talk ?20:14
cr3lifeless: sure, I was mostly concerned about solving the problem of synchronizing user data not only internally but for community projects as well. do you think it would be reasonable to expose both a restful and xmlrpc interface, ie would this just cause more confusion?20:16
lifelessI think thats premature generalisation then.20:17
lifelessvery easy to overbuild and underdeliver that way20:17
cr3lifeless: as you said, concentrating on technology at this point might be premature but I feel there's already a strong preference, maybe because of precedence, for xmlrpc rather than restful, maybe because of launchpadlib experience.20:17
lifelesswe only truely know our requirements => and we're wrong most of the time :)20:17
cr3lifeless: good argument, I'm already convinced :)20:18
lifelessok :)20:18
lifelessso - a LEP soon ?20:18
lifelessbased on what *result tracker* needs20:18
cr3lifeless: onto the next concern then: I'm not sure when I can deliver a LEP so I hope nobody else might be depending on exposing such a microservice, ie I wouldn't want to block anyone or duplicate their effort20:18
lifelessI will work with you to refine things and make tech choices once the needs are really understood20:19
lifelesscr3: writing the LEP doesn't imply implementing20:19
lifelesscr3: its a discussion point for decision making20:19
lifelesscr3: And I promise you, if/when someone else needs something similar, I won't queue them up behind you20:19
cr3lifeless: ok, lets say for Monday then, any later would just be procrastination :)20:20
lifelesscool20:20
lifelessI shall be around :)20:20
cr3broken links in PythonStyleGuide fixed, enjoy!20:24
* cr3 thinks that wikis should have a broken link crawler running periodically20:24
lifelessI think they break enough on their own20:27
=== matsubara is now known as matsubara-afk
abentleyderyck: could you please review https://code.launchpad.net/~abentley/launchpad/dynamic-listing-robustness/+merge/81904 ?20:47
deryckabentley, I can.  I'm about to go offline to switch work locations, but can do it when I return.20:47
abentleyderyck: Sure.20:47
jcsackettabentley: just looked at your most recently put up MP. it is r=me.20:56
abentleyjcsackett: thanks.20:56
lifelessallenap: would voice help ?>20:57
lifelessallenap: we may be talking past each other20:57
allenaplifeless: Yeah, let's do that.20:58
allenapSkype okay?20:58
lifelessallenap: now? Or next week? now is fine for me20:58
lifelessskype is fine20:58
cr3huwshimi, danhg: for the meeting, mumble or just irc?20:59
huwshimicr3: Hi, lets do voice if we can.20:59
allenaplifeless: Yeah, now is good.20:59
huwshimidanhg: Do you have mumble set up?20:59
lifelessallenap: calling21:01
allenaplifeless: Skype has crashed :-/21:01
lifelesshah! win :(21:01
cr3huwshimi: worst case, I can probably try to conference both of you in by phone21:02
huwshimicr3: Lets mumble for now and if that doesn't work for Dan we'll try something else.21:03
cr3huwshimi: http://results-tracker.ubuntu.com21:04
cr3huwshimi: http://results-tracker.ubuntu.com/ubuntu/oneiric/+testruns/218321:09
deryckabentley, hey, I see jcsackett beat me to the review.21:38
abentleyderyck: yeah.  He's feisty.21:38
deryckindeed21:38
jcsackettderyck, abentley: i just like keeping the queue clean. :-P21:43
lifelessabentley: hi21:57
lifelessabentley: why do you want to precache batches ?21:57
abentleylifeless: I want to make the user experience fluid.21:58
lifelessabentley: I don't think its a good use of money to compute results that will only rarely be used.21:58
abentleylifeless: I don't follow.21:59
lifelessabentley: there are what, 10 adjacent batches - first, last, next, prev, and 6 or so different sorts.22:00
lifelessabentley: the user can only follow one of those, any results for the other 9 will be wasted.22:00
huwshimideryck: Just running a bit late. 5 mins?22:00
deryckhuwshimi, ok.  abentley and possibly adeuring will join us.  mumble ok?22:00
huwshimideryck: Fine22:00
abentleylifeless: No, they are not wasted just because they are not used immediately.22:00
abentleylifeless: The various sorts are always the first batch, no matter what batch you're on.22:01
abentleylifeless: So they apply for the life of the page.22:02
lifelessif the user doesn't change to all of those sorts, then the results do not benefit that user, right ?22:02
abentleylifeless: yes.22:02
lifelessWe are running short of server resources as it is; I think we need a strong justification for doing speculative calculations like this - particularly while we have timeouts doing bug search batches22:03
lifelessthere is also the complication that if you don't serialise the requests you can easily DOS our serers22:03
lifelessand if you do serialise, then you need to make sure you're still responsive when the user clicks on a batch that you haven't received a result for yet.22:03
deryckhuwshimi, abentley -- let's meet in Orange room.22:04
abentleylifeless: If money is an issue, exactly how much money are we talking about?  We can't compute the tradeoff without knowing that.22:04
huwshimideryck: No problems, I'll be a minute22:04
abentleylifeless: if 10 requests can DOS our servers, doesn't that indicate a problem with our infrastructure?22:06
lifelessabentley: can I ask what is unfluid about the experience today ?22:06
lifeless.22:06
lifeless(sorry, my adsl is terrible at the moment)22:06
lifeless.22:06
lifelesstcp, please come back to me22:06
abentleylifeless: on a call.22:07
lifeless.22:07
lifeless.22:07
lifelessabentley: we have 64 concurrent service points, which can support all our users today. If you make bug search - our single most common operation - use 10 times the resources, we'll have to expand the cluster.22:08
lifelessabentley: how much? I don't know.22:08
lifelessabentley: but server scaling isn't cheap, and we should strive for efficiency. I don't see calculating results speculatively as being very efficient; I'm sorry but I'm going to ask that this not land - as a similar thing in the bug subscription area was backed out.22:10
huwshimihttp://people.canonical.com/~huwshimi/status_colours.png22:17
=== jcsackett changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | On call reviewer: - | Critical bugtasks: 275
sinzuiwallyworld_, wgrant, StevenK: http://www.youtube.com/results?search_query=most+interesting+man+in+the+world&aq=0&oq=most+inter22:58
lifelessbbiabm, dropping lynne up the street23:04
=== wallyworld_ changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | On call reviewer: wallyworld | Critical bugtasks: 275

Generated by irclog2html.py 2.7 by Marius Gedminas - find it at mg.pov.lt!