/srv/irclogs.ubuntu.com/2010/08/18/#launchpad-dev.txt

lifelesswow00:13
lifelesssome hair shows up when you dig00:13
lifelessfound a code path that disables prejoins for speed00:13
lifeless(ok, fine so far)00:13
lifelessthen, in the inner code it was calling, there is an if block that uses Storm rather than sqlobject joins, and so the prejoins don't get disabled ...00:13
wgrantSlow branch scanner makes me sad :(00:26
lifelesslatency, throughput or capacity?00:26
* rockstar picks all three00:27
wgrantWell, it took nearly four minutes from push to bug link.00:27
rockstarwgrant, that's odd.  I've never seen it take more than two.00:27
thumperrockstar: call?00:28
rockstarthumper, I thought you'd never ask.00:29
* rockstar repeatedly slaps skype and pulseaudio00:30
=== rstat1-brb is now known as rstat1
lifelessoh ffs00:45
lifelesssqlobjectresultset is evil00:46
rstat1why's that?00:53
lifelessbecause it doesn't implement IResultSet00:54
wgrantIsn't that the point?00:54
lifelessso stuff like canonical.lib.components.decoratedresultset fail spectacularly when wrapping SQLORS00:54
lifelesswgrant: well, we want to migrate00:54
lifelesswgrant: yes00:54
rstat1you'd think it would be...given the name00:54
lifelessrstat1: yes00:54
rstat1got anymore ideas as to why my openid doesn't work?00:55
lifelessrstat1: I don't, sorry : I haven'ted poked at openid at all yet00:55
rstat1ahh...well ok.00:56
Ursinhalifeless, hi00:56
lifelessUrsinha: hi!00:56
Ursinhalifeless, so, are you willing to work on the rollback thing? :)00:57
lifelessyes, I'd love to00:57
lifelessI'm putting it in my queue right after fixing the fallout from trying to use DRS around a SQLRS00:57
Ursinhalifeless, cool00:57
wgrantrstat1: What if you revert to the stock LP Apache config?00:57
lifelessas its a different branch, I can work on it concurrently00:57
lifelessUrsinha: remind me of the log00:58
Ursinhalifeless, mars worked today on buildoutifying qa-tagger00:58
lifelessqa-rollback means 'it has been rolledout00:58
UrsinhaI'm merging then you can branch it00:58
rstat1wgrant: I could try that..One seccond00:58
lifelessand thus qa-rollback means 'can deploy'00:58
Ursinhalifeless, yes, qa-rollback is, well, a rollback, so it's safe to land00:58
UrsinhaI guess it's well described on a wiki page00:59
Ursinhalet me find the link00:59
lifelessUrsinha: so, its a one-liner I think.00:59
lifelessone sec00:59
Ursinhalifeless, https://dev.launchpad.net/QAProcessContinuousRollouts00:59
Ursinhalifeless, tagger also has to identify which revision they're rolling back01:00
lifelesslp:~lifeless/qa-tagger/qa-rollback01:07
lifelessUrsinha: devs can manually tag that initially though, right? same as tagging qa-ok ?01:08
rstat1well of course it'd work when I did the default config01:08
Ursinhalifeless, no, the script sets that01:08
rstat1So its definitely an apache issue01:08
lifelessUrsinha: does or should01:08
Ursinhalifeless, should01:08
lifelessUrsinha: how should it ?01:08
Ursinhathat's what you're supposed to change01:09
Ursinhalifeless, identifying a [rollback] tag in the commit message01:09
lifelessok, let me look at that stuff01:09
lifelessUrsinha: how are you generating your test data for test_commit -01:11
Ursinhalifeless, in sample_data.tar.bz2 there's a branch01:11
lifeless:(01:12
lifelessyou might like to migrate to self.make_branch_and_tree; its much more convenient IMO01:12
lifelessUrsinha: how do you propose rollback will mark what commit its rolling back ?01:13
Ursinhalifeless, when a person submits a branch that is a rollback, it marks the commit message as such01:13
lifelessI get that01:13
Ursinhathat's adding [rollback]01:13
Ursinhaah01:14
lifelessbut how do you propose we determine *what* branch is being rolledback01:14
Ursinhalifeless, sorry01:14
lifelessif you said01:14
Ursinhalifeless, by bug number01:14
lifelessbut the rollback doesn't have one itself, does it ?01:14
lifelesswe have two commits, A and B01:14
lifelessA says 'bug X'01:14
lifelessB says 'rollback'01:14
lifelessaccording to the wiki page01:14
Ursinhaif a branch/bug is stuck with qa-needstesting or qa-bad, and the next commit is a rollback, you allow that last stuck revision to be rolled out01:14
lifelesswe can look for tags in bug X when we're looking at commit A01:15
lifelessUrsinha: it won't be the next commit though01:15
lifelessUrsinha: it will be many commits - the pqm queue depth - later01:15
Ursinhalifeless, hm, right, so we would need to guarantee that all the others in between are ready to land01:15
Ursinhahm...01:15
lifelessUrsinha: well thats a separate problem.01:16
UrsinhaI recall discussing that on the epic01:16
lifelessUrsinha: here's what I think01:16
lifelessdevelopers should land a rollback branch01:16
lifelessand manually mark the bug as qa-rollback01:16
lifelessthe rollback commit *itself* gets treated as deployable01:16
Ursinharight01:16
lifelessso if we have three commits01:16
lifelessA - faulty01:17
lifelessB - ok01:17
lifelessC - rollback01:17
lifelesswhen we process them, we see01:17
lifelessA:-> bug X -> tagged rollback01:17
lifelessB:-> bug Y -> tagged qa-ok01:17
lifelessC:-> rollback01:17
lifelessand we let all three past in this case01:17
lifelessif C has landed but bug X is still tagged qa-bad, we assume that C was rolling back something else.01:18
lifelesswhat do you think?01:18
lifelesswe can look at a fancy way to figure out what C rolled back later01:18
Ursinhareading01:18
lifelessbut right now we have a many branches with revnos that differ etc, so I'd be worried about adding a revno to the rollback message, or a bug.01:19
lifelessOTOH we could add [rollback=X]01:19
lifelessto mean 'rolls back bug X'01:19
Ursinhathat was the idea, but indirectly, marking the commit as [rollback] and it having a bug linked01:20
lifelesslinking a bug to it would be hard today, as neither bzr nor lp support links other than 'fixes'01:20
Ursinhalifeless, so your idea is to not depend on the script to identify which bug it's rolling back?01:20
lifelessUrsinha: as a first iteration01:20
lifelessUrsinha: I want to achieve 'ready to switch to this layout' _asap_; and improve once we're ready.01:21
Ursinhalifeless, ok01:21
lifelessspm: btw ping01:21
Ursinhaso we have rollback and bad in the same bug, or only one of them?01:21
Ursinhatags, that is01:21
lifelessUrsinha: I think for sanity we should only have one qa-STATE tag at a time01:22
lifelessif its bad, we're blocked on a matching rollback01:22
Ursinharight01:22
lifelesshmm01:22
Ursinhathat was my understanding01:22
lifelessactually - ah, got it.01:22
lifelessso, I propose we say [rollback=REVNO-ON-DEVEl]01:22
lifelessit is more work than I'd like01:23
lifelessbut if we don't do that, we'll deploy something broken, I guarantee it.01:23
spmlifeless: yo01:23
lifelessand when we set qa-bad we need a revno too01:24
lifelessUrsinha: what time is it for you ?01:24
Ursinhalifeless, 9h24pm01:24
lifelessspm: heya. Staging prod shema QA environment01:24
lifelessUrsinha: ok, I'll write up a proposal for you01:24
lifelessand mail it to you and mars.01:24
Ursinhalifeless, are you doing this right now?01:24
lifelessI need to play on staging a bit and see if what I have in mind will work, and I don't want to keep you up late just waiting on me :)01:25
spmlifeless: I'll need a little more context than that :-)01:25
Ursinhalifeless, because I'm merging two branches to trunk that would be better for you to write code on top of them01:25
lifelessUrsinha: I'll deal01:25
lifelessif you want me to work on em, land em now :)01:25
Ursinhalifeless, okidoki01:25
lifelessspm: rt 40482 or something like that01:25
lifelessspm: yes, thats the one01:27
lifelessspm: we've missed you for a week, I wants to monopolise you now :)01:28
spm....01:28
lifelesswelcome back ?01:28
spmit's good to be 'needed'; for values of 'need' :-)01:28
lifeless:)01:31
lifelessUrsinha: basically what I'm going to arrange is enough data flow that commits in devel that are messed up are persistently recorded as messed up01:31
lifelessUrsinha: and commits that fix messed up ones record in their commit message that they do that01:31
Ursinhalifeless, right01:33
lifelessUrsinha: is it ok with you if I just edit the wiki page and ask you, Diogo and mars to tell me if I messed up ?01:34
Ursinhalifeless, that's ok, we have history there :)01:34
lifelessUrsinha: we'll need to change the lp-land stuff for rollback01:35
lifelessto take a parameter01:35
Ursinhalifeless, I was expecting that01:35
lifelessok cool01:35
Ursinhalp-land and ec2 land01:35
lifelessUrsinha: ok, updated the page: qa-rollback state is gone01:40
lifelessUrsinha: please see if it makes sense :)01:40
lifelessspm: ok, so jocularity aside: are we there yet ? :)01:40
jamwgrant, lifeless: of course now I'm getting "Couldn't find a distribution for 'zope.publisher==3.12.0'" *sigh*01:41
wgrantjam: update your download-cache.01:42
wgrantOr just run rocketfuel-get, which does all that for you.01:42
jamwgrant: well, through a mix of various voodoo incantations, it finally works. Thanks for your help01:51
jam(rocketfuel-get isn't quite enough because it assumes you have an unpacked 'devel' working tree, etc. but it seemed to do what I needed)01:51
Ursinhalifeless, seems ok02:24
rockstarthumper, around?02:24
rockstarI needs a query run on staging: http://pastebin.ubuntu.com/479695/02:25
rockstarlifeless, maybe you can help? ^^02:25
rockstarspm, ^^02:28
spmrockstar: not without the magic word02:30
rockstarspm, even on staging?02:30
rockstarOh, er, please?02:30
spmhahaha02:30
* rockstar is American, so forgets his manners often...02:31
spmrockstar: actually, the magic word, so SWMBO tells me: is **NOW**!!. fwiw...02:31
rockstarspm, oh, then I should have gone with my instinct.02:31
rockstar:)02:31
spmheh02:31
spmrockstar: 0 rows02:31
rockstarspm, boo...02:32
lifelessUrsinha: thanks02:33
lifelessUrsinha: nearly done02:33
Ursinhalifeless, I'm feeling ill, I'll talk to mars and matsubara-afk tomorrow to be sure I'm not missing anything :)02:34
lifelessUrsinha: go sleep!02:34
rockstarspm, can you please try http://pastebin.ubuntu.com/479698/ **NOW**!!02:36
thumperrockstar: whazzup?02:37
spmrockstar: same; 0 rows02:37
rockstarthumper, I just needed some SQL queries run.02:38
rockstarspm, and how close to production is the staging db?02:38
wgrantDoesn't staging have its build queue cleared during the restore?02:38
rockstarwgrant, ooh...02:39
spmwgrant: along with several other tables of 'do stuff', I'd hope so.02:39
rockstarspm, can lifeless give the okay to run the first query on production?02:40
lifelessI can02:40
lifelessthumper should by the new policy in preference to me, as hes your tl02:40
thumperlifeless: I could but I'm multi-tasking with non-laptop tasks02:41
rockstarlifeless, yeah, but thumper's got his hands full.  :)02:41
lifelessok02:41
spmrockstar: aiui, we only need approval to run modification queries; selects are fine. happy to be corrected.02:41
lifelessfor now its mods that must get approval and be logged as incidents with high pri bug about not repeating it02:42
rockstarspm, could you run the first query on production then?02:42
spmrockstar: see. there's that missing magic word again. tsk tsk tsk.02:43
rockstarspm, **NOW**!!02:43
spmrockstar: 86 rows; need a paste?02:43
spmheh02:43
rockstarspm, not yet.  Lemme get a better query first, one that actually tells me more.02:43
spm85... <== it's going down.02:44
rockstarspm, wait, what?02:44
* rockstar is confused02:44
rockstarwgrant, around?02:44
rockstarspm, point of clarification: you ran http://pastebin.ubuntu.com/479695/ correct?02:46
wgrantrockstar: Indeed.02:46
wgrantWhy wouldn't it be going down?02:46
wgrantYou're looking for unstarted jobs.02:46
lifelesssometimes b-m builds stuff02:47
marslifeless, nice performance tuesday follow-up mail, especially the steps you went through while solving.  I learned a thing or two from it.02:47
lifelessmars: cool, thanks02:47
wgrantlifeless: Occasionally.02:47
lifelessof course, now I'm fighting all sorts of shitty aqlobject-half-transition pain02:47
spmrockstar: hrm. no. was using the '698 paste, but doing so with 695.02:48
wgrantlifeless: Well, you could always port the problematic callers to something that isn't ancient.02:48
spmrockstar: and 78 rows now.02:48
rockstarspm, okay, I'd be interested to know if that one changes.02:48
rockstar(I suspect it won't)02:48
lifelesswgrant: have a look at BugTaskSet.search() and its callers02:50
lifelesswgrant: (e.g. yes, I want to)02:50
wgrantlifeless: Looks Stormy to me already...02:51
lifelessreturn SQLObjectResultSet02:52
lifelessin what possible world is that storm ? :)02:52
lifelesswgrant: its got some bits one way and some another - and its /callers/ are depending on some particular behaviours02:53
lifelesswgrant: its nuts.02:53
wgrantlifeless: Ah, true.02:53
wgrantMissed that bit.02:53
spmrockstar: 73 now... :-)02:53
rockstarspm, oh crap...02:53
wgrantrockstar: This must be the first time I've heard someone complain about buildd-manager being too fast.02:54
thumperrockstar: need to talk about it?02:54
rockstarwgrant, I'm complaining about the fact that my queries are proving my hypothesis wrong, and I don't like square one.02:55
thumperspm: is staging up?02:55
rockstarthumper, possibly.  One more query.02:55
lifelessthumper: end of an upgrade cycle I think02:55
* thumper waits02:55
spmthumper: I suspect not. looks like we're in the security.py part of a DB restore/setup02:56
thumperspm: ETA?02:56
rockstarOh wait, crap.02:57
spm"RSN"02:57
spmit's been going for around 1h 45 atm. so soonish.02:57
lifelessthumper: are we there yet. ""02:57
rockstarthumper, yes, I'd like to talk about it, if you have some time.02:57
thumperspm: I know RSN means NFI but soon02:58
thumperish02:58
thumperrockstar: sure02:58
spmthumper: damn. you're onto me....02:58
wgrantrockstar: What's going on?02:59
rockstarwgrant, investimigating the cause of https://bugs.edge.launchpad.net/launchpad-code/+bug/61886002:59
wgrantrockstar: What's the traceback?03:00
wgrantThat suggests that either the actual or estimated start time are wrong.03:01
wgrants/wrong/None.03:01
wgrantNeither of which your query will identify.03:01
rockstarwgrant, http://pastebin.ubuntu.com/479708/03:02
wgrantrockstar: So you're searching for WAITING with a NULL date_started. Every waiting build should satisfy that. Don't you really want to look for non-WAITING with NULL date_started?03:03
rockstarwgrant, *facepalm*03:04
wgrantIn fact, you probably want RUNNING.03:04
rockstarspm, can you please run http://pastebin.ubuntu.com/479709/ on production **NOW**!!03:04
lifelesssadness, /participants on staging still timesout03:04
spmlifeless: staging may not be up atm... is doing a DB restore/setup03:05
spmrockstar: woo. 3 rows.03:05
rockstarspm, okay, great.  Let's wait a bit, I'll tweak the query, and we'll run that again to see if it changes.03:06
wgrantWhat's their status? 1?03:06
lifelessspm: I know03:06
lifelessspm: the frontend is back03:06
lifelesswhats the oops sync freq for staging ?03:06
spmit was 3 min at one point...03:07
lifelesssigh03:07
lifeless1691S1003:07
lifelesswhen you have a cycle.03:07
spm6 minutes03:08
lifelesshmm, I probably asked at 5 minutes...03:08
lifelessits there03:08
lifelessthanks03:08
lifelessSQL time: 10011 ms03:08
lifeless-sql time: 73 ms03:08
lifelessTotal time: 10084 ms03:08
lifelessStatement Count: 803:08
lifeless\o/ select count(*) ...03:09
lifelessOTOH 8 queries is fairly good03:09
lifelessso yeah, its finished the updated, still timing out :P03:13
lifelessprobably we want something more sophisticated than decoratedresultset here03:13
lifelessbecause - count(*) doesn't need all the left joins03:14
lifeless(OTOH count(*) there is a bad idea anyway)03:14
mtaylorthumper: "Compare with another revision" in loggerhead doesn't seem to do what I was assuming it would do03:23
mtaylorthumper: that being - to compare this revision with another revision03:23
thumpermtaylor: loggerhead has issues03:23
thumpermtaylor: but it does work, but the ui for it is hard to understand03:23
mtaylorthumper: ok. :)03:23
lifeless\o/ 5.8 seconds to do the count(*) :<03:31
mtaylorlifeless: that's not good03:32
lifelessI'll paste you the query03:33
lifelessmtaylor: its not entirely unexpected03:34
lifelesswe have some attributes that are 1:M and we're selecting the first-one in correlated subqueries for a team with 174 folk in it03:34
lifelessdenormalasing and caching the preferred email and default archive would save a batshit amount of time, I suspect03:35
lifelessor03:36
lifelessit may be bad indexes or something on some component03:36
lifelessI'm pulling sections of the query out and its staying the same ;)03:36
lifelessalso, I bet sodium just shat itself03:37
lifelessso, back to qa tagging03:38
lifelessspm: please time http://pastebin.com/CV4wDPE1 on a prod slave03:38
=== mordred_ is now known as mtaylor
spmlifeless: 8.5 seconds03:40
lifelessspm: grah03:41
lifelessspm: need to find out why03:41
spmand 2 x 6 seconds on repeats.03:41
lifelesswhen sodium comes back I'll pokey pokey there03:41
spmlifeless: https://pastebin.canonical.com/35966/ fwiw....03:42
lifelessoh god I hate views03:42
lifelesshave I mentioned that?03:42
lifelesscan probably make this fractional-second without that view in there03:43
spmi do str you mentioning a mild dislike of views a few weeks back....03:44
wgrantWhich view is it today?03:45
lifelessvalidpersoncache03:45
wgrantAh, ValidPersonCache?03:45
lifelesswhich is a LIE03:45
wgrantis that really a view?03:45
lifelessa stinking lie03:45
wgrantIt's not a view in the dev schema.03:45
wgrantOr.03:45
wgrantWait.03:45
wgrantIt *is* a view, not a cache. That's right.03:45
* wgrant headdesks.03:46
mwhudson!03:49
thumperheh03:49
wgrantrockstar: How is it Fix Released?03:50
wgrantIt was broken just an hour ago...03:51
thumpermwhudson: how do you specify a layer for the create_initialized_view?03:51
thumpermwhudson: what form does the layer param take?03:51
thumpermwhudson: class? or string?03:52
=== almaisan-away is now known as al-maisan
rockstarwgrant, that's the glory of running sql to fix the bug.  :)03:52
mwhudsonyou can probably haul what the view is checking into the rest of the query?03:53
wgrantrockstar: But isn't there still a bug that created the broken data?03:53
rockstarwgrant, the corrupted records were from before we added the cancel build button, and we were cancelling builds with raw sql.03:53
wgrantAh, right.03:53
wgrantSorry, I'm just a little wary about people waving away buildfarm data corruption bugs without explanation.03:54
mwhudsonthumper: um, probably class03:54
wgrantThat tends to come back to bite us and cause things to burn down.03:54
mwhudsonthumper: i'd lean to passing a request that provided the appropriate layer though, i think03:55
thumpermwhudson: attempting to pass the CodeLayer through03:56
thumperlets see...03:56
thumperI've been a bit more strict on where the views live03:56
thumpernow all the tests fail :)03:56
rockstarwgrant, yeah, I'm not about to sweep buildfarm bugs under the road.03:56
thumperyep that works03:56
mwhudsonthumper: haha03:56
mwhudsongood though03:56
* thumper ndos03:56
* thumper nods even03:56
lifelessSELECT COUNT(*) FROM Person JOIN TeamParticipation ON TeamParticipation.person = Person.id LEFT JOIN KarmaTotalCache ON KarmaTotalCache.person = Person.id LEFT JOIN PersonLocation ON PersonLocation.person = Person.id LEFT JOIN Archive ON Archive.owner = Person.id LEFT JOIN EmailAddress ON EmailAddress.person = Person.id LEFT JOIN ValidPersonCache ON ValidPersonCache.id = Person.id WHERE TeamParticipation.team = 238131 AND NOT (Te03:59
lifelessbah03:59
lifelessanyhow03:59
lifelesssorry03:59
lifeless19ms without validpersoncache03:59
lifeless:)03:59
lifelessmtaylor: ^04:00
lifelesswgrant: ^04:00
thumper LEFT JOIN ValidPersonCache ?04:00
thumperI thought you said without?04:00
wgrantlifeless: I wonder how hard it is to drop that view.04:02
mtaylorlifeless: lovely04:02
=== al-maisan is now known as almaisan-away
lifelessthumper: as I said, paste fail04:02
lifelessthumper: thats not the query without it04:02
lifelesswithout it, and with the logic put back in via account directly04:03
lifelessits 32ms04:03
lifelessLEFT JOIN account on person.account=account.id  WHERE TeamParticipation.team = 238131 AND NOT (TeamParticipation.person = 238131) AND (Archive.id IS NULL OR Archive.id = (SELECT MIN(Archive.id) FROM Archive WHERE Archive.owner = Person.id) AND Archive.purpose = 2) AND (EmailAddress.status IS NULL OR (EmailAddress.status = 4 AND account.status=20));04:03
lifelessis the end of the updated query04:03
wgrantlifeless: How does the view make the plan so bad?04:03
wgrantAlso, EmailAddress.status IS NULL?04:03
lifelessdunno04:03
wgrantWTF?04:03
lifelesswgrant: teams04:04
wgrantstatus is NOT NULL.04:04
wgrantAh, right.04:04
wgrantFair point.04:04
wgrantBut I'd rather you checked Person.owner explicitly.04:04
lifelessso, this isn't *quite* right, we're losing 4 participants somewhere, but I know the general shape that needs changing04:04
lifelesswgrant: if you want to do this follow on fix, I'd be delighted04:05
lifelessoh, I know why, I need an ACCOUNT.status is NULL in there04:06
lifelesswgrant: you have to be very careful otherwise you exclude rows you don't want to04:06
lifelesswgrant: or generate a torturous query plan04:06
lifelesswgrant: semantically though, status is NULL IFF no row was returned04:07
lifelessthats the correct end bit : AND (account.status is NULL or account.status=20)));04:07
lifelessso you'd need a pretty deep nested check on person.owner to do it your way.04:08
wgrantlifeless: I know. But you don't want to check that there's no emailaddress; you want to check that it's a team.04:08
wgrantWhy would it need a deep check?04:09
lifelessso04:09
lifelessconsider this:04:10
lifelessAND (EmailAddress.status IS NULL OR (EmailAddress.status = 4 AND account.status=20));04:10
lifelessassuming we don't have data corruption04:10
lifelessmmm04:10
lifelesslet me get back to you in a sec04:10
lifelessyou are suggesting04:11
lifelessAND (person.teamowner IS NULL OR (EmailAddress.status = 4 AND  account.status=20));04:11
lifelessright ?04:11
lifelessto replace the whole email address and account status checks04:11
jtvhi folks04:12
spmheya jtv04:12
lifelesswgrant: the problem is that that generates 663 rows, not 17404:14
wgrantlifeless: What.04:14
jtvhi spm04:15
wgrantSomething's not doing what we think it is, clearly.04:15
jtvwhoo-hoo, FakeLibrarian just landed04:15
wgrantlifeless: What are the two complete queries?04:15
wgrantAnd what is their purpose?04:15
lifelesswgrant: see the pastebin above for the current one in devel04:15
lifelessfor /participants04:15
lifelessPerson._all_members04:15
lifelesswgrant: http://pastebin.com/1iQZhpSJ is a hand updated one to discard the view04:16
lifelessspm: ^ could you time that on a prod slave please?04:17
spmlifeless: meh. try again. only 30ms on the first run; 15ms on the repeats. still too slow.04:19
lifelesssorry04:19
* spm can spot a lack of sincerity at 100 paces04:20
lifelesswe're going to spend 10 times that parsing into python04:20
lifelessso yeah04:20
lifelessits hard to be concerned04:20
spm:-D04:20
wgrantlifeless: I wonder if we can just delete Person.archive and hope nobody notices.04:22
lifelesswgrant: quite possibly, but note that we're delivering it pretty darn quickly04:22
wgrantYes, but it's awful.04:23
lifelesswgrant: sure, I'll let soyuz folk worry about that :)04:23
lifelessits simpler for me to just make it fast than worry about whether folk are using it.04:23
* wgrant stabs.04:23
thumpermwhudson: I think I've found a problem :)04:24
thumpercanonical_url has a bug04:25
lifelesssigh04:27
lifelesssodium, you suck04:27
* jtv bates breath until thumper elaborates, and is now turning purple04:27
thumpergah04:28
thumpercanonical_url(some_branch, view='+edit') now fails04:28
thumperbecause the edit view is only on the CodeLayer04:28
lifelessspm: could you try http://pastebin.com/ev56h4eY ? I would on staging, but devpad is dead04:28
thumpereven though the canonical_url(some_branch) specifies the code subdomain04:28
lifelessand we don't have access to sourc04:28
thumpernot sure how to fix this one...04:30
lifelessisn't that what curtis was talking about yesterday?04:30
lifelessin his review of one of jc's things?04:30
thumperlifeless: I don't know04:31
thumperdo you remember which review?04:31
lifelesssorry no04:31
lifelessbut he was saying that our same-host url logic was rather strict04:31
lifelessor something like that04:32
lifelesssounds very similar04:32
lifelessspm: ^04:32
mwhudsonthumper: um04:36
mwhudsonthumper: canonical_url looks at the current request04:36
thumpermwhudson: yeah04:36
thumpermwhudson: any idea how to create a request based on the rootsite?04:36
mwhudsonare you calling canonical_url while a request is 'going' in your tests?04:36
mwhudsonthumper: LaunchpadTestRequest() i hope?04:37
mwhudsonif not04:37
mwhudsonrequest = LaunchpadTestRequest()04:37
thumperthere is probably an anonymous interaction going04:37
mwhudsondirectlyProvides(LaunchpadLayerOrWhatever, request)04:37
thumperhmm...04:38
* thumper goes to make a coffee to help think04:38
jtvthumper: can I get some?04:42
jtvlifeless, I was just wondering about another side of canonical_url that might have interested you yesterday.04:42
jtvIt basically interates a singly-linked list of ICanonicalUrlData(foo).inside.04:43
jtvThen for each of those, it gets ICanonicalUrlData(foo).path.04:43
lifelessO(N^2)04:43
jtvBut it's essentially a recursion: walk from "here" to the root of a tree.04:44
lifelessor worse04:44
lifelessjtv: yes, I think its rather terrible :)04:44
jtvI don't see the n² part there tbh04:44
jtv…but why not cache the cumulative paths to cut short the iterations?04:44
lifelesswell, things get renamed04:45
jtvThis is all browser code.  It only live for the duration of the request.04:45
lifelessso a good case to consider04:45
lifeless'rename this branch04:45
jtvNot much renaming going on in a GET, and not much URL rendering going on in a POST04:46
lifelessstart of the request, its foo04:46
lifelessend of the request its bar, and we issue a redirect to the canonical url04:46
lifelessso, its cachable, just have to invalidate04:46
lifelessdoes canonical_url show up in profiling for us ?04:46
jtvwell, the link formatter does.04:46
lifelesswhat does kcachegrind think is using up the time04:47
jtvI don't know, tbh; I'd have danilo & adi who looked into a page where the link formatter was a deadly source of delays.04:47
jtvLink formatters and menu… thingies were the big ones IIRC04:48
jtvAnd I'm guessing the same principles apply.04:48
lifelessso, I'm open to this sort of thing; theres no reason many things can't be cached; just need an invalidation strategy - and to understand *why* it needs a cache.04:49
thumperjtv: sure, fly here and I'll make you a coffee04:49
jtvlifeless: right, imagine a branch listing for a project.  Each branch link will probably repeat the same steps for the same project or person.04:50
lifelessyes04:50
lifelessif thats cheap, doesn't matter04:50
lifelessif its not, it does04:50
jtvthumper: the best part of that idea is, I think I can get a decent coffee at the airport on the way04:50
lifelessI'm not saying I'm for or against, I'm saying lets get the data04:50
jtvlifeless: no worries, I'm just adding some illustration I happened to have at hand before I get off my figurative arse to get data.04:51
jtvlifeless: I do remember one thing, i.e. that MenuAPI was definitely a big killer there.  Very costly.04:53
* jtv wonders if just turning some of its hugely expensive-looking @property's into @cachedproperty's would be enough to shortcut repetitive computations04:55
thumper✁☹04:55
jtvthumper: don't stick it in your ear, it's bad04:55
jtv8< :-(04:55
thumperjtv: no shit sherlock04:55
thumpermwhudson: I can't really use a LaunchpadTestRequest for the canonical_url fix04:57
thumpermwhudson: what I really need to do is to create a valid request for the base url part of the canonical_url04:58
thumperor should I say, the urlparts04:58
thumperor rootsite, which is valid by the time we need to create a request04:59
mwhudson_yay flaky wifi05:03
thumpermwhudson_: can I skype you to talk this through?05:05
mwhudson_thumper: ok05:08
* thumper waits for mwhudson_ to come online05:09
mwhudson_oh yeah05:09
mwhudson_thumper: i'm online now05:11
lifelessspm: ping05:11
lifelessspm: could you please apply 11370 from lp:~lifeless/launchpad/registry onto staging's appserver? its a teeny tiny patch05:12
lifelessmwhudson_: pear seems rather uhm, unhappy05:15
mwhudson_lifeless: context?05:19
mwhudson_hardware -> losa05:19
mwhudson_software -> a launchpad-code developer05:19
mwhudson_>:)05:19
=== mwhudson_ is now known as mwhudson
lifelessmwhudson: cron mails05:22
mwhudsonlifeless: i don't get them any more05:22
lifelessah05:22
lifelessFile "/srv/importd.launchpad.net/production/launchpad/cronscripts/code-import-dispatcher.py", line 46, in <module>05:22
lifeless   script.lock_and_run()05:22
lifeless  File "/usr/lib/python2.5/xmlrpclib.py", line 787, in close05:22
lifeless   raise Fault(**self._stack[0])05:22
lifelessxmlrpclib.Fault: <Fault -1: 'OOPS-1691XMLP15'>05:22
wgrantmwhudson: Don't worry, you are forever branded as a Code developer :P05:22
lifelesswith a ... in the middle05:23
mwhudsonlifeless: that's a serverside oops05:23
mwhudsonlifeless: it's a timeout05:24
mwhudsonhttps://lp-oops.canonical.com/oops.py/?oopsid=OOPS-1691XMLP1505:24
lifelessSQL time: 8125 ms05:24
lifelessbit worrying05:25
lifelessthat it sat around for 8 seconds after that before trying another query05:25
lifelessalso worrying that it took 8 seconds to issue an update05:25
lifelesspossibly just another slow page killing it05:26
mwhudsonit's probably contention05:36
mwhudsonthere was a short thread on the mailing list about this05:36
lifelessa while back?05:36
mwhudsonjust before the epic i think05:37
lifelessyou're updating the same page or something?05:37
lifelessor the same rows05:37
mwhudsonyeah, same rows05:37
wgrantWas it something about multiple jobs updating the machine heartbeat?05:38
wgrantI forget.05:38
poolielifeless: you asked before about running multiple vms05:39
pooliei don't think there's much to it is there?05:40
pooliethe best thing i learned was to use vm-builder05:40
poolieas i described on https://dev.launchpad.net/Running/VirtualMachine05:40
poolieand then there's just the sadly usual fluff of getting dependencies set up properly05:40
poolielosa ping, could you please hurry up my builds in https://edge.launchpad.net/~bzr/+archive/proposed/+packages05:46
wgrantYou know, it would be interesting to have a graph of build farm queue depth.05:48
wgrantAnd build farm throughput.05:48
spmpoolie: did you have a priority of "really wants" there? cause that's about 5 mins of clicky pain you're inflicting on me05:48
poolieurk, really?05:49
pooliein that case never mind05:49
spmclick the page; open the build; click to arch; click to edit score; edit score; save; repeat. fun fun fun. :-/05:50
spmwgrant: I think we do... or something similar at any rate05:51
lifelessspm: hi05:53
lifelessspm: 16:12 < lifeless> spm: could05:53
lifelessbah05:53
lifeless16:11 < lifeless> spm: ping05:53
lifeless16:12 < lifeless> spm: could you please apply 11370 from lp:~lifeless/launchpad/registry onto staging's appserver? its a teeny tiny patch05:53
spmlifeless: yo, that patch should have just finished restarting05:53
lifelessthanks!05:54
lifeless\o/05:54
spmworks?05:54
lifelessyeah05:54
lifelessTotal Bytes159653 bytes05:55
lifelessRequest Timing@0ms for 2510ms05:55
lifelessResponse Timing@2510ms for 851ms05:55
lifelessstill slower than I'd like, but well within my stage 1 perf targets05:55
lifelessspm: you can back that out now, if yo ulike05:56
spmlifeless: is it problematic if it stays and just gets wiped in the next staging update?05:56
lifelessfine by me05:56
spmcool; I'll leave it in then05:56
lifelessof course, it hasn't been qa'd etc yet05:56
poolielifeless: i'm getting repeated timeouts copying packages, is that known?05:57
lifelessyes05:57
wgrantpoolie: Copy fewer each time.05:57
wgrantAnd hope that it works.05:57
poolieyes, that's what i was going to do05:57
pooliejust wondered if it was already known05:58
wgrantyes, the copy checker is slow :(05:58
wgrantThe copy itself is tiny.05:58
thumpermwhudson: thanks, but I think we're done05:58
mwhudsonthumper: i think so too05:58
mwhudsonfrigging wif05:58
mwhudsoni05:58
lifelesshttps://code.edge.launchpad.net/~lifeless/launchpad/registry/+merge/3295305:59
lifelessmeh05:59
wgrantspm: Do you know if there's a ticket about setting up the PPA log parser on germanium?06:02
stubspm: We have a choice of 1) upgrade sourcherry to Lucid with both PostgreSQL 8.3 and PostgreSQL 8.4 installed and do a test migration and switch staging to PostgreSQL 8.4, or, 2) Do a test migration from PostgreSQL 8.3 on sourcherry to PostgreSQL 8.4 on another box, then upgrade sourcherry to Lucid and PostgreSQL 8.406:06
lifelessevening stub06:07
stubMorning :)06:07
lifelessstub: do you have any opinion on validpersoncache ?06:08
lifelessstub: using it in /participants vs using account directly gave 6second queries vs 35ms ones06:08
lifelessstub: (its a view now, even it if wasn't in the past)06:10
stubI tend to consider it legacy - Storm makes things nicer so we don't need views as a crutch. However, they should perform pretty much identically as validpersoncache isn't doing anything your direct query isn't.06:11
stublifeless: Have you confirmed your join criteria matches validpersoncache's, or did you not need to join with emailaddress for instance?06:12
lifelessstub: same row count06:13
lifelessstub: https://code.edge.launchpad.net/~lifeless/launchpad/registry/+merge/32953 shows the transition06:13
lifeless(same row count executing the sql by hand, the patch should get the same but I haven't hand-checked the generated sql yet)06:13
pooliewgrant: there is a graph of build queue length in lpstats06:14
stubSo you have removed the check for a preferred emailaddress.06:14
poolienot updated for a while06:14
lifelessstub: no06:14
stublifeless: but I see emailaddress is joined earlier and filtered later..06:14
lifelessstub: still check that - the query returns teams as well06:14
wgrantpoolie: Ah.06:15
pooliei have a note here to make tuolumne more robust06:16
poolieat the moment if any monitor method fails, nothing gets updated06:16
stubI'll have a look at the function... I'm missing context06:16
lifelessstub: https://lp-oops.canonical.com/oops.py/?oopsid=1691S1006:17
lifelessshows the vpc based query06:18
stubSo yes, unpacking the view worth doing here as the emailaddress table may already be joined with06:19
stublifeless: The check for result.preferredemail concerns me though as I suspect it will do a database query. There is some magic there though, so maybe it is prepopulated.06:20
lifelessstub: its prepopulated by the row before06:20
lifelessdecorator-thing-before06:20
lifelessso its fine06:20
lifelessand there is a test on the query count for the API06:21
=== almaisan-away is now known as al-maisan
stubOk. The query might be a little more efficient if you add 'EmailAddress.status == 4, EmailAddress.person == None' so you don't see invalid rows in the first place.06:23
=== al-maisan is now known as almaisan-away
lifelessstub: the new one performs at 35ms for ubuntu-dev :)06:26
stubYes, and adding the extra filter might be even faster06:27
lifelessstub: remember that it returns teams too, deliberately.06:27
lifelessso we want those rows06:27
stubSo Or(Person.teamowner != None, And(EmailAddress.status == 4, EmailAddress.person == None))06:28
lifelessstub: I agree that when it gets generalised to prepopulating any person query, that we'll want to conditionalise that on whether we expect teams or not06:28
lifelessstub: for some reason, doing something very much like that cut off rows we want06:28
wgrantperson == None? Huh?06:29
stubWhich could be another bug.06:29
stubAn emailaddress might be linked to just an account, not an account and person. Checking for person == None is probably unnecessary.06:30
wgrantAlso, can we please shoot ShipIt in the face so we can delete this whole Account mess?06:30
lifelesswe can also switch to inner joins when we don't want teams back06:30
stubwgrant: +106:30
wgrantIt is the only reason all this crap still exists.06:30
lifelesswgrant: is *that* where it comes from?06:30
stubOh right... its an outer join for teams06:30
wgrantlifeless: Not where it comes from, but why it still exists.06:30
stubBut my expression should be fine for that06:30
=== jtv is now known as jtv-eat
lifelessstub: yes, which is why comparing a field needs a (field is NULL or field=xx) otherwise all the NULL rows disappear06:31
lifelesseven inside an OR, for reasons I don't remember right now06:31
stublifeless: There would be a 1:1 relationship between person and account except for shipit, as you don't need to use Launchpad to use shipit.06:31
lifelessI wonder if shipit could move onto the SSO06:32
lifelessand just use LP for karma checks06:32
stublifeless: EmailAddress is only checked if Person.teamowner is NULL, so only for people.06:32
stublifeless: ISD was going to rewrite it in Django, but I don't think it is scheduled.06:32
lifelessI'll dig up the exact queries and debug with you later06:32
stublifeless: But what you have is already an improvement.06:33
lifelessstub: separate from a rewrite, I mean :)06:33
lifelessstub: ok with me landing it? jtv has reviewed06:33
stublifeless: Could do, yes. Simplest to give it its own database.06:33
stublifeless: sure06:33
lifeless\o/06:33
wgrantlifeless, stub: If we can convince SSO to send karma in the OpenID response, or ShipIt to use the API for karma checks, we can just run ShipIt off in its own little DB with a static copy of the LP codebase.06:33
stublifeless: I'm +1 on expanding all our views.06:33
stuburgh. And here I am thinking shipit was already separate from the LP tables except for Account and EmailAddress. Karma too :-P06:35
wgrantIt also uses TeamParticipation, but SSO provides that.06:35
wgrantSo it's not much of a blocker.06:35
lifelessstub: thats why I said 'lp for karma checks' :)06:35
lifelessAPI for karma checks makes a great deal of sense to me06:36
lifelesswgrant: want to patch it ?06:36
lifelesswgrant: I bet a patch to the pre-breakout code would apply.06:36
lifelessstub: care to note the expanding-views thing in dev.lp.net/Database/Performance ?06:37
wgrantHeh.06:37
lifelessany us folks still around?06:38
lifelesswould like to know how long https://api.staging.launchpad.net/1.0/~ubuntu-dev/participants takes for you (before staging updates blow it away)06:39
wgrant0.9s to wget it.06:40
lifelesshmm, nice06:40
wgrantedge is still waiting.06:40
lifelessyes, it will be06:40
wgrantOh.06:40
wgrantNo, it's only 1.0s from edge.06:40
lifelesshmm06:41
wgrantFirst negotiation just took a while. Not sure why.06:41
lifelesstheres something wrong there06:41
wgrantMight be cached, since I'm anonymous.06:41
lifelessyes06:41
lifelessthis exact url is hit by some client06:41
lifelessshowed up in oops reports a while back, I put my branch together but was blocked on cachedproperty and rollouts n stuff06:42
wgrant2.6s for staging uncached.06:42
lifelesstolerable06:43
wgrantproduction ~706:43
spmwgrant: yeah there is - to re-enable it. but it needs some manual love to verify it doesn't go bananana's on us again.06:43
wgrantWhat's required for that manual love?06:43
lifelesswgrant: prod and edge are still running the pre-refactored code06:43
lifelesswgrant: which means their count(*) is on the teamparticipation table only06:44
spmstub: I'd be in favour of option 1; if it breaks hard, we learn. worst case, recover from backup (wheee)06:44
lifelessand then you're seeing the lookup time for 50 people only06:44
spmwgrant: *time*06:44
wgrantspm: Ah :(06:44
lifelessI really want to look at a kcachegrind of it06:45
lifelessbecause theres just no justification for it taking more than a second ><06:45
lifelessI mean06:45
lifeless35 ms + 35ms = 70ms, so wtf is the time going06:46
wgrantFrom right next to the DC, it takes 80ms for a cached response, ~2s uncached.06:47
wgrantOddly slow.06:47
wgrantSometimes up to 3.5s...06:48
stubspm: Ok. I should RT this or discuss on losas@ ?06:48
spmstub: probably email; it's kinda a funky one.06:49
lifelessthat fix is ec2ing06:50
lifelesspoolie: by multiple vms I meant07:12
lifelesspoolie: glue to run 1/8th per vm, or whatever07:12
poolieoh, no, i haven't done that07:12
pooliewbn07:12
pooliei have one vm running the whole suite, one vm for actual development, and then a host OS running a browser and at 2mb/vm that's about it07:13
lifelessstub: thanks07:13
lifelessUrsinha: present for you: https://code.edge.launchpad.net/~lifeless/qa-tagger/qa-rollback/+merge/3295907:41
* wgrant mutters something along the lines of "why is the QA tool private?"07:50
lifelesswgrant: told you already07:50
lifelesswgrant: and will be fixed, but not top of the pops07:50
wgrantOh, right, I remember now.07:51
wgrantSorry.07:51
lifelessyou know what would be neat07:51
lifelessthe revisions list in mps and branch pages linking each rev with an expander07:52
lifelesslike on loggerhead07:52
wgrantYou mean having a code browser not completely unintegrated with LP?07:52
lifelessthat would show the lh list of changes in the rev07:52
lifelessand that clickable to expand into a full diff07:52
lifelessshould be easy thanks to mwhudson jsonifying the guts07:52
lifeless.count is storm, right ?08:02
wgrantYes.08:05
lifelessman this is a mess08:06
lifeless(I'm back on bug search)08:06
wgrantAt least you only have to fix it once.08:07
lifelessdoubtful08:08
lifelessthis is going to take stabs and stabs08:08
lifelessalso08:08
lifelesssearch08:08
lifelessgreat name in a typed language08:08
lifelessfffffreaking painful in python08:08
=== almaisan-away is now known as al-maisan
pooliespm, if you're still here, can you add or check my gpg key08:26
spmpoolie: oh sorry - I completely forgot about that from this morn. 1001 apologies.08:26
* spm chases...08:26
=== jtv-eat is now known as jtv
spmpoolie: actually I'm not going to get to that. I'm about 8 levels deep in critical fail interrupts atm. afaict, the prob is you don't actually have access in the config; irrespective of the key. suggest an RT is in order; it's relatively easy to do.08:37
pooliespm, no problem at all, it's not critical08:38
pooliemostly just wondered if i was doing it wrong, as often happens :)08:38
poolieis it just me or did lp lose all its icing?08:39
wgrantpoolie: See #launchpad.08:39
wgrantedge update broke things.08:39
pooliei see08:44
adeuringgood morning08:45
lifelesspoolie: reminder (assuming I didn't miss it) - talk up your awesome flags stuff to the list08:54
poolielifeless: my last thing for today is to bump the docs along a bit then post08:56
pooliethen cook a pumpkin, etc08:56
lifeless\/ pumppkins08:57
lifelessits scary how tolerant storm is of different ways of spelling shit08:57
pooliemaybe i'll reorder that08:58
pooliecrap, poopie, poop, poo, ...08:58
lifelessI have a bastard hybrib frankensteins monster of sqlobject & storm ... and its still working08:58
bigjoolsmorning all08:59
wgrantMorning.09:00
poolielifeless: ok, mail sent, please followup with anything else you thing ought to be said about it now09:01
lifelesspoolie: done and thanks.09:09
lifelessthis is huge ;)09:09
pooliewill pydoctor interpret rest correctly?09:09
poolieor something else?09:09
poolieactually what i mean is, what markup can i use in docstrings?09:10
lifelessI've just been doing the bzr thing09:12
lifelessand assuming I'll fix it up later09:12
wgrantI think pydoctor does ReST. But I'm not sure what the Zope apidoc thing wants.09:12
poolielifeless: good question in mail09:13
mrevellHallo09:17
pooliehi mrevell09:17
pooliemrevell: francis suggested you might help me do a UDD user surevy09:17
poolieto help us get some data on what to do next09:18
wgrantThat initialism makes me sad.09:18
poolie?09:18
lifelessabbrev. perhaps ?09:19
wgrantUDD means Ultimate Debian Database.09:19
lifelessanacronynm09:19
StevenKwgrant: Just as well they didn't call it Debian Ultimate Database09:20
mrevellpoolie, I'd be happy to. Were you thinking something Surveymonkeyish?09:24
lifelesshey09:25
lifelessis store = getUtility(IStoreSelector).get(MAIN_STORE, DEFAULT_FLAVOR)09:25
lifelesswhat Class.select(...) does in the sqlobject compat layer ?09:25
poolieyes09:25
lifelesswhat is the recommended store lookup means09:25
lifelessthe one that uses slaves for gets09:26
wgrantlifeless: IStore(SomeClass)09:26
bigjoolsIStore(blah)09:26
lifelessthanks guys09:26
wgrantYou can also say IMasterStore(SomeClass) if you really want a master object.09:26
bigjoolsyou can force IMasterStore(class) or ISlaveStore(class)09:26
lifelesswhy would someone use StoreSelector ?09:26
bigjoolsold skool09:26
wgrantlifeless: Because IStore wasn't invented yet.09:26
poolieare fixtures already an lp dependency, or likely to be soon?09:26
mrevellpoolie, I can either give you access to the LP team's paid Surveymonkey account or if you give me an idea of what you want to know, I'll be happy to set something up for you and then get your approval before I publish it.09:27
pooliethe second sounds like less work (for me :)09:27
mrevell:) No problem. Do you want to email me with what you'd like to know?09:28
StevenKbigjools, wgrant: I'm using IStoreSelector).get(MAIN_STORE, MASTER_FLAVOR) in InitialiseDistroSeries, should I fix that?09:29
pooliemrevell: so handwaving, because i have to stop soon09:29
wgrantStevenK: Yes.09:29
wgrantStevenK: it's deprecated. Kill it if you see it anywhere.09:29
pooliewe just want to know: did they use it, did they hit problems, if so where, is it any better than what they're doing now, what would make it so, are there any particular niches where it is good, bad, potentially but not actually good,09:29
wgrantStevenK: I was guilty of using it when I started. I'm not sure if IStore didn't exist yet, or whether it just wasn't known commonly enough.09:30
* bigjools wonders if IStore() will work when we get more stores.09:30
wgrantbigjools: Why would we have more stores?09:30
wgrantUnless we're completely rearchitecting everything.09:30
bigjoolsscalability09:30
StevenKwgrant: So, IStore(self) ?09:30
wgrantStevenK: I think so.09:31
bigjoolsis just one reason09:31
wgrantOr maybe just Store.of(self). Not quite sure.09:31
mrevellpoolie, Thanks for that. I'll work something up this (my) morning and email you with a link to the draft survey.09:31
wgrantStevenK: But you could just IMasterStore(class you're looking for)09:31
bigjoolsStevenK: IStore() needs a class, not an object09:31
pooliewow09:31
poolielazyness pays off :)09:31
wgrantbigjools: But we can't do multi-master...09:31
pooliethanks09:31
bigjoolswgrant: we *could* given the motivation09:31
wgrantbigjools: Could we?09:32
wgrantI mean, is it actually possible?09:32
wgrantI don't think we can do multi-master without splitting the DB.09:32
bigjoolscorrect :)09:32
wgrantAt which point we are changing everything.09:32
mrevellnp @_)09:33
mreveller, didn't mean to do the psychadelic smiley there...09:33
bigjoolswgrant: if we add more publishers we're going to need to scale writes09:33
bigjoolsanyway, otp09:33
wgrantThe publisher does just about no writes!09:34
wgrantJust a crapload of reads.09:34
wgrantUnless you're publishing a fresh new copy of the archive or series.09:35
wgrantI guess.09:35
wgrantBut that's rare.09:35
bigjoolsthink about deathrow etc09:35
wgrantdeathrow doesn't do too much writing either. But it does a lot more stuff that it doesn't need to do.09:36
wgrantI get the feeling that nobody has really touched it since it was first written.09:36
wgrantBecause some of what it does is just wrong.09:36
wgrantLike trying to remove every binary publication until the last publication of that binary is gone.09:40
wgrantSimilar with sources.09:40
wgrantAnd not removing overridden files.09:40
lifelesswgrant: BugTaskSet.search is freaking nasty to convert09:40
wgrantAnd just generally being pathetically inefficient in various other ways.09:41
lifelessI don't suppose you know of a parser for sql order by constraints09:41
wgrantlifeless: Howso?09:41
wgrantNo, why, and will it make me sick?09:41
lifeless*yes, it takes SQL as an input*09:41
wgrantOh, right, that one.09:41
wgrantYay.09:41
wgrantYou can't pass that into Storm directly?09:41
lifelesssure09:41
lifelessonce you find every users of BugTaskSearchParams that sets orderby09:42
wgrant:(09:42
lifelessexactly09:42
lifelesshmm09:43
lifelessperhaps outputting a warning and using the storm helper...09:43
StevenKlifeless: I've forgotten your Storm notes. :-( Select -> compile, and then what?09:45
noodles775Hi mrevell... I'm just finishing the diff UI changes at https://dev.launchpad.net/LEP/DerivativeDistributions and bigjools has already updated the 'Creating a new derived distroseries' mockup, so I think you could start organising the next round when you've time.09:45
lifelessStevenK: compiler(expr, State())09:46
lifelessbah09:46
lifelesscompile()09:46
lifelessmumble09:46
lifelesslook at store.execute for inspiration09:46
wgrantDo you actually need to manually compile it?09:46
lifelesseventually no09:47
StevenKlifeless: Yes, I've done the compile(), it's what I do after that09:47
lifelessfirst cut yes09:47
lifelessStevenK: you should have a string now. execute it09:47
lifelesswgrant: needs an InsertInto Expr with compile-hook to DTRT09:47
lifelessStevenK: if your string doesn't have INSERT INTO ... SELECT FROM09:47
lifelessStevenK: then do a single simple string insertion at this point09:48
lifelesswgrant: the built in on in storm wants VALUES, not SELECT09:48
lifelesss/on/one/09:48
wgrantAh.09:48
mrevellwonderful, thanks noodles77509:49
lifelesswgrant: not hard to whip one up. ETIME, Diminishing returns.09:52
lifelesshmm09:53
poolieit seems to want epytext09:56
bigjoolswgrant: lamont enjoyed* rolling back the buildd package yesterday10:04
lifelesswhats the storm equivalent for SQLConstant?10:04
bigjoolshave a look in storm.locals10:05
lifelessor rather, maybe I should say10:05
lifelessits SQL10:05
lifelesswhat I actually mean though10:05
lifelessis10:05
lifelessis 'sqlobject.sqlbuilder' coming from storm, or sqlobject10:05
lifelesslike, do we still have sqlobject around?10:05
lifelessif this works10:06
lifelessI'm going to be a) happy , b) very very very very scared10:06
bigjoolsoh awesome, I can't search for numbers in bugs, it thinks it's a bug number10:07
lifelesstheres a bug on that :P10:08
lifelesstry +filebug10:08
bigjoolsheh10:08
wgrantbigjools: yeah, so I heard :/10:08
bigjoolsI used to use the dupe finder for searching all the time10:08
wgrantIt wasn't QA'd on DF first?10:08
bigjoolswgrant: we don't have any amd64 builders on DF10:09
wgrantAh. Yay.10:09
lifelessbigjools: why did you stop ?10:09
bigjoolslifeless: it stops after so many bugs10:09
bigjoolsalthough I'd really, really like some of the "advanced" options on the first search page10:10
bigjoolsand I'd like the default page to present on newness like it always used to10:10
wgrantbigjools: I missed it because I did some tiny cleanup after an amd64 test, and then my amd64 machine became unavailable so I only tested the final trivial changes with i386/lpia. :/10:10
lifelessbigjools: you might like to try again, with the relevance changes etc, *might* get what you want higher up10:10
lifelessbigjools: I'd like that too10:10
wgrantAnd managed to get the arguments around the wrong way in the process, which only breaks amd64-on-amd64 builds :(10:10
lifelessbigjools: I have the feeling that some of the 'remove X its slow' we've done are treating symptoms not causes and can be put back in.10:11
bigjoolswgrant: shit happens :(10:11
=== jelmer_ is now known as jelmer
bigjoolslifeless: yeah10:11
wgrantAnyway, the builds are all retried and we'll QA the fix it on dogfood today.10:11
* bigjools can't wait for a fast LP10:12
lifelesshey its coming10:12
wgrantIt's coming more rapidly than I expected.10:13
bigjoolswgrant: so that 404 bug you moved to Soyuz, it's a dupe but I can't find the bug it's duping10:13
bigjoolslifeless: \o/10:13
wgrantbigjools: That's what I said.10:13
lifelesswgrant: what di dyou expect?10:13
wgrantbigjools: I know there's a bug about it.10:13
wgrantAt least one.10:13
wgrantBut I cannot find it.10:13
bigjoolslifeless: I expected nothing less from you :)10:14
wgrantlifeless: Um, not immediate timeout decreases and massive speedups that you're achieving.10:14
wgrantI was expecting more inertia.10:14
lifelesswgrant: I've removed a couple of small roadblocks I think10:14
lifelesswgrant: but I know *everyone* wanted it faster10:15
lifelessso I really can't take much credit10:15
lifelesshell, its taking me days to land each of my patches10:15
lifelesslearning curves etc10:15
lifelesswgrant: bigjools: Thanks though, its nice to be blamed for good stuff :)10:16
bigjoolslifeless: it's more about bringing the impetus and the culture change.10:16
wgrantlifeless: You may not be entirely to blame, but things certainly seem to have been happening a lot more since you arrived.10:16
wgrantRight, what bigjools said.10:16
bigjoolsI've wanted a culture change for ages, but a lot of devs seem happy to throw stuff out there without thinking about performance10:16
wgrantGah.10:17
* bigjools used to work on stuff that *had* to perform well10:17
wgrantTo make matters worse, bug #404 is private.10:17
bigjoolslol10:17
wgrant(yes, yes, I just ran into that trap myself without thinking)10:17
bigjoolsI can't believe I just search for "missing link"10:17
lifeless:)10:18
bigjoolsI found a long-lost ancestor :)10:19
wgrantI still can't find the bug.10:19
bigjoolsme neither!¬10:19
wgrantI looked a couple of hours ago when the guy appeared in #launchpad.10:19
bigjoolsI know it's there10:19
wgrantI thought it had 404 in the summary.10:19
wgrantBut maybe not.10:19
lifelessis there an existing 'take the first element of this tuple' adapter around ?10:20
lifelessitemgetter.duh10:21
wgrantI was about to say.10:21
bigjoolsthing[0] ? :)10:21
lifelessclosures10:22
wgrantbigjools: So, I thought I'd found it. But then I realised it was the one filed a few hours ago.10:28
wgrantI am mystified as to the location of the old one.10:28
bigjoolsif you find it, let's change its title so we can find it again (and the dupe finder can find it more to the point)10:28
lifelessone dupefinder issue10:34
lifeless- it does not search comments10:34
wgrantbigjools: There's bug #522800. I thought there was another, but I may be wrong.10:36
* wgrant kicks the bot.10:36
lifeless\i/10:36
bigjools_mup_: bug #52280010:36
wgrantHowever, your analysis isn't quite correct.10:36
wgrantThe old file is expired, which is arguably right.10:37
wgrantThe problem is that getFileByName returns the oldest matching LFA, when it should probably returned the oldest unexpired.10:37
bigjoolsyeah I suspected I might be wrong10:37
wgrantEach upload has its own LFA.10:37
wgrantWith the same LFC.10:38
wgrantI think.10:38
lifelessok, time to see the damange with this storm sqlobject frankenquery10:40
lifelesssee you all tomorrow10:40
bigjoolsnn10:40
wgrantNight.10:41
wgrantbigjools: Thanks, you added the term we couldn't search for :P10:51
bigjoolswgrant: the dupe finder gets it nicely ;)10:51
wgrantTrue.10:51
bigjools"broken" is the word I missed when looking before10:51
jmlit takes far too long to get an EC2 image ready to run LP tests.11:51
=== danilo_ is now known as danilos
noodles775james_w: Hi! I've just been updating some of the derived distro mockups, but had to make some assumptions while doing so, and I'd like you to check that they're valid.11:57
noodles775In particular, with: https://dev.launchpad.net/LEP/DerivativeDistributions#Derived%20series%20differences11:57
noodles775For various reasons (details in the comments that follow the mockup), I've made the assumption that you'll only want to add a comment on a row when you mark it as ignored... is that an invalid assumption, or ok?11:59
wgrantOh wow, this looks awesome.12:00
noodles775Thanks wgrant! (or are you talking about something else :) )12:01
wgrantI'm talking about this.12:01
wgrantHopefully we'll eventually be able to make Ubuntu a derivative of Debian...12:01
noodles775Yeah, that'd be exciting :D12:02
wgrantThen I can kill off mdt.12:02
deryckMorning, all.12:02
wgrantthumper: Hm, I thought Translations did some layer-specific views.12:29
=== al-maisan is now known as almaisan-away
=== matsubara-afk is now known as matsubara
=== leonardr_ is now known as leonardr
=== mrevell is now known as mrevell-lunch
=== almaisan-away is now known as al-maisan
=== mrevell-lunch is now known as mrevell
benjigmb: a question came up in a review of one of my branches yesterday that I want to run by you; the MP is at https://code.edge.launchpad.net/~benji/launchpad/bug-580035/+merge/3291714:17
benjigmb: the question is: the branch adds a section to a doctest, is that acceptable to you guys?14:17
gmbbenji, I think so. deryck can give you an authoritative answer though.14:20
deryckis it a doc or a test? :-)14:20
* deryck looks at MP14:21
benjiit's more testy than docy14:21
deryckbenji, yeah, I'm sorry to be a pain, but I would prefer this be a unit test.  Especially given two things -- we're trying to get doc tests that are tests converted to unit tests and we're especially doing this around email and subscriptions currently.14:24
deryckmy rule of thumb, if it's primarily a test, it should be a unit test.  A doc with testable parts is, of course, okay.14:24
benjiI'll convert it then.14:24
deryckbenji, thanks!14:25
jmlhmm hmm hmm.14:32
james_wnoodles775: hi, have you looked at merge-o-matic?14:40
noodles775james_w: Is that what normally displays at https://merges.ubuntu.com/main.html ? If so, yep. Otherwise no.14:42
noodles775what in particular have we missed?14:43
james_wnoodles775: yeah, that's the site. I just wondered if you had looked at the sort of comments people left there14:51
james_wmy belief is that they leave them for things such as "I'm working on this", or "This depends on foo", in which cases you wouldn't hide the row14:52
james_wnoodles775: the mockups are looking great though, thansk14:52
noodles775james_w: no, I hadn't looked at the comments. Right... I'll update then, thanks.14:53
* jml lunches15:02
=== mordred_ is now known as mtaylor
=== salgado is now known as salgado-lunch
Ursinhabigjools, I'm confused, is bug 618231 really won't fix?16:38
bigjoolsUrsinha: yes16:38
bigjoolscheck the diff for the patch that was landed :)16:39
Ursinhabigjools, I wonder why that branch mentioned the bug :)16:39
* bigjools shrugs16:40
jml\o/16:46
jmljust locally reproduced a failure I previously had to spin an ec2 instance to get16:46
=== salgado-lunch is now known as salgado
=== matsubara is now known as matsubara-lunch
=== deryck is now known as deryck[lunch]
=== Ursinha is now known as Ursinha-lunch
henningebac: Is the case ignored when imports are sorted?17:48
henningeAaa, Bbb, aaa17:48
henningeor17:48
henningeAaa, aaa, Bbb17:48
* henninge looks in ... somewhere17:49
henningehm, one example in PythonStyleGuide suggests aaa, Aaa, Bbb17:51
=== al-maisan is now known as almaisan-away
jmlhenninge, I think that example is true to form17:55
jmlhenninge, c.f. https://dev.launchpad.net/EmacsTips17:55
henningejml: it's a shame though that "sorted" sorts the other way round ...17:56
jmlhenninge, sorted(imports, key=lambda x: x.lower())17:56
henningehm, that will simply ignore case17:57
jmlhenninge, anyway, if you are changing *everything*, then I think you get to make up the new rule :)17:57
henningeoh, cool! ;-)17:57
henningesince that seems to be the natural sorting order in Python ...17:58
jmlI'm ok with the change. But do let people know, so dev scripts can be updated.17:59
=== matsubara-lunch is now known as matsubara
jmlPython sucks.18:26
jelmerjml: What's it done wrong this time?18:26
lifelessexisting?18:27
cody-somervillelol18:27
jmljelmer, why is "lambda: foo.append(None)" acceptable but "lambda: count += 1" not?18:27
lifelessexpr, statement18:27
lifelesshysterical raisins18:28
jmllifeless, yeah, I know the expr / statement thing.18:28
=== deryck[lunch] is now known as deryck
jmlof course, lambda: foo.__iadd__(1) is ok18:29
jmlget your act together, Python18:29
* jelmer tries hard not to mention the H word18:29
jmljelmer, I know the word you're thinking of, of course18:30
jmljelmer, but I'd reach for Lisp before that if I were looking for a language that gets this right.18:31
jmlffs, even Javascript gets it right.18:31
* jelmer wonders if vala does closures18:34
lifelessjkakar: hi18:35
jmllifeless, if I were to write something that made graphs based on subunit stream, to which project should I submit it?18:42
lifelesssubunit or tribunal come to mind immediately18:42
=== almaisan-away is now known as al-maisan
jmlOK. I'm ec2 landing my branch which completely changes ec2test/remote.py and as such is likely to break other people's "ec2 test" experiences18:49
lifelesscool18:50
lifelessdid you find a reviewer ?18:50
jmlI'll try to send out an email when it hits devel, but in case I don't and weird things start happening, at least there'll be an IRC record.18:50
jmllifeless, yeah, jelmer reviewed it.18:50
lifeless\o/18:51
jmlonce it lands & is on stable, I'll then move on to the bit where I deliberately change the behaviour.18:51
lifelessthank you for staging it18:52
jmlnp.18:53
jmlany other way and it will only end in tears.18:54
jkakarlifeless: Hiya19:01
lifelessjkakar: would like your input on https://bugs.edge.launchpad.net/launchpad-foundations/+bug/61801919:02
lifelessjkakar: I think perhaps gustavo hasn't understood our concerns19:02
=== jcsackett is now known as jcsackett|afk
* jkakar looks19:04
jkakarlifeless: I see.19:08
jkakarlifeless: I would like to see time-to-fetch measured, probably as a separate measurement to time-to-execute-statement.19:09
jkakarlifeless: I sometimes wonder if I'd also like to see time-to-instantiate-objects, since I *believe* the cost there is non-trivial.19:09
jmljkakar, ime, .values() is much faster19:11
jkakarjml: Yep, exactly.19:12
jkakarAt that point Storm is just generating a query and then handing you almost the exact result received from the Python DB driver.19:12
=== al-maisan is now known as almaisan-away
lifelessjkakar: so, do you know why gustavo is pushing back here?19:28
lifelessjkakar: it astounds me19:29
lifelessderyck: hey19:29
bachenninge: sorry, i didn't see your question.  yes, existing coding standards say case-insensitive sorting (is that what you'd call it?) but we have lots that are not.19:29
deryckhi lifeless19:30
jkakarlifeless: I'm not sure I understand either.  Have you talked to him directly about it?19:30
lifelessderyck: are you aware of any reason why stormifying BugTaskSet.search would be a bad idea?19:31
lifelessderyck: other than it being hard because its big :)19:31
lifelessjkakar: not yet19:31
derycklifeless, I'm not aware of any reasons against.  I suspect it wasn't done only because of the amount of work.19:31
lifelessso SQLObjectResultSet hates DecoratedResultSet19:32
lifelessguess what thats lead me down the path to do...19:32
deryckah, ok.  Sure, I see no problem with doing this.19:33
=== Ursinha-lunch is now known as Ursinha
* jkakar needs to learn about DecoratedResultSet since it seems to get mentioned a lot.19:35
jkakarI don't know what it is but I wonder if whatever it does shouldn't be in Storm proper.19:36
lifelessjkakar: have a look19:41
lifeless./lib/canonical/launchpad/components/decoratedresultset.py19:41
=== benji is now known as benji-lunch
lifelessjkakar: it lets you do19:43
lifelessDRS(store.find((Foo, Bar, Baz)), adapt)19:43
lifelesswhere adapt is19:43
lifelessdef adapt(row):19:43
lifeless    person = row[0]19:44
lifeless   person.friends = row[1]19:44
lifeless  person.has_geolocation = len(row[2] > 0)19:44
lifeless  return person19:44
lifelessso it becomes a result set yielding persons with stuff setup about them19:44
jkakarlifeless: Oh, very nice.19:45
lifelessUrsinha: hi19:45
Ursinhalifeless, you just read my mind19:46
lifeless:)19:46
lifeless<- talented19:46
Ursinhahahaha19:46
Ursinhalifeless, what do you intend with the bad-commit-xxx tag?19:46
Ursinhais that a replacement or a complement for qa-bad?19:46
lifelesscomplement19:46
Ursinha(or needstesting, because a rollback can also be a rollback for a untested revision)19:46
lifelesswe have to remember that the *commit* is bad even when the bug becomes qa-ok19:47
lifelesswe can't *ever* rollout that commit without its rollback=xxx commit19:47
* lifeless wants a whiteboard19:49
Ursinhalifeless, that's ok, understood19:54
=== jcsackett|afk is now known as jcsackett
lifelessUrsinha: so20:20
lifelessUrsinha: where does this leave us20:20
Ursinhalifeless, branch is merged20:20
lifelesslike20:20
lifelessif we said 'we're switching to this workflow now', what would be missing20:21
lifeless*) A QA environment for it20:21
lifelessanything else?20:21
lifelessmthaddon: still around ?20:21
Ursinhalifeless, now, production_stable is a branch that has merges from db-stable20:21
UrsinhaI'm thinking aloud20:21
lifelessUrsinha: that fine :)20:22
Ursinhawe'd need a QA environment, right20:22
lifelessI'm wondering if we could change staging to use stable20:22
lifelessand change it back for release week20:22
Ursinhathat would be our "stable"20:23
Ursinhahmm20:23
Ursinhalifeless, problem is staging is where people test db changes now (I guess)20:23
Ursinhabecause it's db-stable, basically20:23
Ursinhaso we'd need another QA environment for that20:24
Ursinhawait20:24
Ursinhalifeless, where do you intend to have db changes landing to be tested?20:26
lifelessstaging20:26
lifeless:)20:27
Ursinhalifeless, so I don't get it :)20:27
lifelessok20:27
lifelesshave you seen my most recent mail to the list - just this morning20:28
Ursinhaah, no20:28
lifelessflacoste: this may interest you as well20:28
* Ursinha looks20:28
lifelessUrsinha: I'm proposing a temporary thing by reusing staging20:32
lifelessUrsinha: long term we definitely want two environments20:32
=== EdwinGrubbs is now known as Edwin-lunch
lifelessflacoste: ^ thinking this might reduce the work needed by losas before we can *start* RFWTAD20:32
=== benji-lunch is now known as benji
=== matsubara is now known as matsubara-afk
Ursinhalifeless, so, stable would be deployed to staging20:49
Ursinhawith db and no-db changes20:49
Ursinhaand if qa-go-ahead, revision is also deployed on prod20:50
Ursinharight?20:50
lifelessI don't parse your second line, so I'll rephrase it20:50
lifeless'with a copy of the prod db and only schema changes contained in stable itself'20:51
lifelessand yes20:51
Ursinha"only schema changes contained in stable itself"20:52
lifelessyes20:52
lifelesslike20:52
Ursinhawhere else the schema changes would be?20:52
lifelesssomeone might land a db patch that would have no downtime20:52
Ursinhahm20:52
lifelesslike a brand new table20:52
lifelessas per RFWTAD20:53
lifelessflacoste: now I have your attention20:53
lifelessflacoste: quick call ?20:53
flacostelifeless: sure20:53
benjideryck: do you mind looking at my doctest to unittest translation (http://bazaar.launchpad.net/~benji/launchpad/bug-580035/revision/11319) and -- if you like it ;) -- commenting at https://code.edge.launchpad.net/~benji/launchpad/bug-580035/+merge/3291720:56
deryckbenji, looking now....20:58
benjithanks20:58
deryckbenji, looks great.  Thanks for doing this work!  I'll update the MP now.21:01
benjithanks much21:01
deryckAnd with that, I'll EOD. :-)21:02
deryckLater on everyone.21:03
lifelessUrsinha: just chatted with francis21:19
lifelessUrsinha: my idea was not taking enough consideration of the the time spent doing non-db dev on db-devel21:20
lifelessUrsinha: so we'll still be blocked on the existing RT ticket21:20
lifelessUrsinha: but thats ok, I'm increasing my concern for db agility as a result :)21:21
lifelessflacoste: thanks :)21:21
Ursinhalifeless, ok, I was wondering that too... but that's ok now21:24
UrsinhaI'll keep soketesting what we have21:25
Ursinhaand grab a coffee now :)21:25
thumpersinzui: can you rename lp.registry.enum to lp.registry.enums ?21:26
sinzuiI can21:27
thumpersinzui: it matches our directory naming, and will be consistent with lp.code :)21:27
thumpersinzui: thanks21:27
sinzuiyou mean right now, stop writing this boring report and do something to feel good?21:27
=== salgado is now known as salgado-afk
thumpersinzui: great induction sprint write up21:27
thumpersinzui: I'll be grabbing ideas from it21:27
thumpersinzui: I'm not going to say that you should do it this instant, but ASAP would be good21:28
sinzuithumper, We need to update the wiki with a sane example bazaar.conf and locations.conf. jcsackett had trouble working that out21:28
thumpersinzui: where do you think it should go?21:28
thumpersinzui: I could look to edit it21:28
thumpersinzui: somewhere off the dev wiki I guess21:28
sinzuiI think so21:29
sinzuiThere used to be stuff like that in  the old wiki21:29
=== Edwin-lunch is now known as EdwinGrubbs
=== _mup__ is now known as _mup_
=== Ursinha is now known as Ursinha-bbl
=== jcsackett is now known as jcsackett|afk
lifelessthumper: ping23:11
lifelesssourcepackagename.path - I'm getting an error with that having 'distribution' set to None23:11
=== jcsackett_ is now known as jcsackett
lifelessin its repr()23:11
wgrantsourcepackagename.path?23:11
wgrantThat doesn't exist.23:11
lifelesssorry, sourcepackage.path23:12
lifelessI get confused easy23:12
wgrantThat really shouldn't exist either, but it does.23:12
wgrantA SourcePackage is a SourcePackageName in a DistroSeries.23:12
wgrantSo it's not valid to have one without a Distribution.23:13
lifelessright23:13
lifelessand an invalid one is being repr() in a traceback23:13
wgrantHmm.23:13
lifelessmaking the traceback blowup23:13
wgrantI wonder how that was obtained.23:13
lifelessand thus being hard to debug23:13
lifelessBugTaskSet.search misbehaving23:13
lifelessthat much I know, because, well, I'm overhauling the damn thing23:13
lifelessdistribution is itself a property23:15
lifelessvia distroseries23:15
wgrantHm.23:18
wgrantSo people can no longer subscribe to Ubuntu's bugs. Great.23:18
lifelessto the whole feed ?23:18
wgrantYes.23:18
lifelessfeel free to weigh in on the MP / bug - I did23:18
thumperlifeless: pong23:18
lifelessthey can subscribe to the list that gets all the mail23:19
lifelessthumper: nvm, sorry - was teh sourcepackage thing above23:19
lifelessbut I'm just going to change the repr23:19
wgrantlifeless: Yes, but surely making the UI suck less is a better general solution than just disallowing it for distributions.23:19
thumperlifeless: I would like a chat with you sometime about the project cloud23:19
lifelessthumper: sure.23:19
lifelessthumper: anytime - now if you like23:20
thumperlifeless: ok now, skype?23:20
lifelesswgrant: this isn't a dichotomy23:20
wgrantIf people are doing things that only negatively affect them, permission changes are not the solution!23:22
wgrantWe need to work out why they are being stupid and remove the cause of the stupidity.23:22
wgrantNot block the stupidity outright.23:22

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