spmlifeless: we aren't yet. mb was unable to get to it; I've been fixing a few reds.00:03
spmlifeless: any idea where https://dev.launchpad.net/PolicyAndProcess/ReleaseManagerRotation went? had a bunch of things we refer to on it.00:08
lifelessspm: we got rid of it, no more rm00:09
lifelessspm: this was announced00:09
spmi see00:09
lifelesswhat are you looking for ?00:10
pooliehuwshimi: also i was quite curious about your thoughts on bug 80036100:10
_mup_Bug #800361: The consequences of choose an item in a picker is not obvious <javascript> <ui> <Launchpad itself:Triaged by jcsackett> < https://launchpad.net/bugs/800361 >00:10
poolie - whether you agree with me; also whether you perhaps have some more alternatives00:10
huwshimipoolie: Thanks, I'll take a look and comment00:11
wgrantlifeless: Ah, so we *are* going for tiny DB patches now.00:50
wgrantlifeless: I was discouraged last week from optimising below a couple of minutes :(00:50
lifelesswgrant: yes, this has gone from discussion to action00:56
wallyworld_wgrant: bug 809651 filed01:06
_mup_Bug #809651: Person picker link text is confusing <confusing-ui> <picker> <Launchpad itself:Triaged> < https://launchpad.net/bugs/809651 >01:06
wgrantwallyworld_: Ah, thanks!01:08
wallyworld_wgrant: any opinion on what the default "Remove" text should be. I think it needs to be two words (I don't like just "Remove"). "Remove xxx" where xxx=?01:09
wallyworld_maybe huwshimi has an opinion :-)01:10
huwshimiwallyworld_: Is there a problem with "Assign me" and "Remove assignee"?01:13
wallyworld_huwshimi: they only really make sense in the context of assigning to bugs. what about other times were a person is chosen eg security contact for a project01:14
wallyworld_or perhaps that terminology is acceptable everywhere?01:14
huwshimiwallyworld_: Ah I see01:15
wallyworld_the default text for "assigning" is currently "Pick me"01:15
wallyworld_but the case is wrong and needs changing, it is "Pick Me" and need sto change to "Pick me"01:15
huwshimiwallyworld_: Are we able to customise for each case (team/person etc.)01:16
wallyworld_not at the moment - that would require extra code01:16
wallyworld_hence the current "Remove person" is wrong sometimes :-(01:17
huwshimiwallyworld_: Hmmm... ok01:17
huwshimiwallyworld_: What's wrong with extra code?01:17
wallyworld_but if the desire is to have "Remove person" and "Remove team" depending on whether the current value is a person or team we could do that i'm sure01:17
wallyworld_huwshimi: nothing wrong, just saying we don't currently support it in the current implementation01:18
wallyworld_huwshimi: so "Remove person" and "Remove team" would be ok?01:18
huwshimiwallyworld_: To me that makes the most sense01:18
huwshimiwallyworld_: I would talk to mrevell as well though as this is his area01:19
wallyworld_huwshimi: ok. i think it makes sense too. i'll look at doing something assuming we will go ahead. feel free to comment on the bug if you decide something after talking01:20
wallyworld_oh, i can ask him too01:20
* wallyworld_ hates qastaging timeouts occuring *every* time a link is clicked :-(01:22
lifelesswallyworld_: means there is slow code there01:23
wallyworld_lifeless: but even qastaging.lp.net itself just timedout01:23
lifelessexactly my point01:23
wallyworld_it happens all the time, for just about any page01:23
wallyworld_surely *all* of lp pages are not slow01:24
wallyworld_the same pages work fine on lp.net01:24
lifeless87 queries/external actions issued in 2.10 seconds - hot qa.l.n01:24
lifelessactually, medium, 0.26 hot hot01:25
lifelessstill -slow-01:25
wallyworld_i got this after initially timing out and hitting refresh: 98 queries/external actions issued in 8.25 seconds01:25
lifelessyup, slow01:25
lifeless-way- too many queries01:25
wallyworld_but the figures are waaay less on lp.net01:25
lifelessyes, it has a 128GB disk cache01:26
wallyworld_not the query count, the execution time01:26
wallyworld_so you saying the only reason lp.net even runs is the huge cache?01:26
lifelesswallyworld_: sorry, I was OTP before01:38
lifelesswallyworld_: LP is broadly inefficient, we are getting better.01:38
lifelesswallyworld_: an efficient frontpage would be 4 queries + a memcache lookup for the blog posts01:38
lifelesswallyworld_: we are doing *twenty times* that work.01:39
lifelesswallyworld_: qastaging has 32GB of ram shared between *three* LP db instances, each of which is 300GB in size01:40
StevenKAre we are are we not still in RC?01:43
lifelesswe should be out of rc01:43
wgrantI don't believe we are.01:45
StevenKCan't stop using 'utilities/ec2 land', but to check on my instances I run 'bin/ec2 ls'01:54
StevenKI'd drop the symlink, but I suspect I'd get lynched.01:54
lifelessare there docs on creating lazr projects anywhere ?01:55
=== wgrant changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | On call reviewer: - | Critical bugs: 220 - 0:[######=_]:256
wgrantlifeless: Why, so you can delete them? :)01:56
lifelessfold-in :)01:57
wgrantwallyworld_: Did you intend to delete a couple of dozen JS test?01:58
wallyworld_wgrant: yes, they were duplicated01:58
lifelessflacoste: huh, we missed some lazr components in the move to lp - smptptest, publisher, authentication amongst others, I think01:58
wallyworld_they were moved and a rollback put them back to the original place01:58
wgrantAh, great.01:58
wgrantlifeless: At least publisher and authentication were never used, IIRC.01:59
lifelessby anyone?01:59
wgrantAnd canonicalurl and a couple of others that I don't recall.01:59
wgrantThey were just placeholder projects.02:00
wallyworld_lifeless: sounds like a major part of the perf issue on qas is that it's running 3 db instances in 1/4 the memory02:00
lifelessgrah, so we need to delete them02:00
wgrantOh, they have code now.02:00
lifelesswallyworld_: its part of it yes; but our pages generally touch - way - more data than needed.02:00
wgrantWhen did that happen...02:00
wallyworld_lifeless: agreed. but still, stuffing 3 db instances into so little memory....02:01
lifelesswallyworld_: indeed; things will get better once we can drop staging02:01
lifelesswill get us down to 2 instances02:01
StevenKI am amused that 32GiB is 'so little memory'02:01
wallyworld_epsecially since no-one could possibly need mnore than 640kb02:02
wgrantlifeless: Ah, that's right. lazr.canonicalurl and lazr.publisher have branches, but they are just empty lazr templtes.02:02
lifelesswallyworld_: for now, you need to try any page on qa staging at least 3 or 4 times02:02
wgrantlifeless: lazr.authentication is real.02:02
wallyworld_yes :-(02:02
lifelesswallyworld_: but you *cannot* assume that timeouts on [qa]staging are not a problem for prod02:02
lifelesswallyworld_: there was a thread on this a couple weeks back on -dev02:02
wallyworld_sure, that lesson was mentioned at the epic :-)02:02
poolielifeless, +1 to emeritii02:19
wallyworld_lifeless: thanks for making me open a dictionary02:30
lifelesswallyworld_: de nada!02:30
wallyworld_i was hoping (expecting?) that we would do such a thing02:30
lifelesslook in dictionaries ?02:30
wallyworld_lp is hard enough as it is without all that combined knowledge walking out the door02:31
wallyworld_lifeless: no, the team thing you emailed :-)02:31
StevenKwallyworld_: dict(1) ?02:37
wallyworld_StevenK: i used google02:38
lifelesshttps://dev.launchpad.net/CreatingNewProjects could use a proof read03:13
wgrantIs there a workable YUI3 calendar yet?03:38
wgrantThis embedded copy of YUI2 irks me.03:38
lifelesswgrant: ^ thats what I wanted existing docs for03:41
wgrantlifeless: Looks reasonable, although you don't seem to discourage namespace packages.03:45
lifelesswgrant: I figure most folk know the terrible pain03:49
lifelesswgrant: perhaps I should add some notes to that effect03:49
wgrantlifeless: You figure incorrectly.03:49
wgrantwallyworld_: How do I get a traceback from a YUI test failure?04:07
wallyworld_wgrant: not easily afaik04:16
wallyworld_i normally stick in a breakpoint just before04:16
wallyworld_the failure and poke around from there04:16
=== nigel is now known as nigelb
wgrantDoes anybody know where SystemErrorView is tested?05:09
StevenKIt doesn't look to be tested.05:11
StevenKFrom a quick bzr grep05:11
lifelessstub: hi06:31
lifelessstub: I found a new bug for the fastdowntime - dealing with landed but not deployed db patches06:31
lifelessstub: I think we want to avoid causing a pipeline-halt on appserver deployments06:31
stublifeless: What is the problem? launchpad/devel & launchpad/db-devel split handles that doesn't it?06:39
stubWe rollout launchpad/devel everywhere except the databases. We rollout db-devel to the databases, and merge it into /devel after the rollout.06:40
lifelessstub: thats probably a decent day one answer, letting the bug go to back burner06:48
lifelessstub: It seems to me that eventually db-devel probably wants to be either 'big downtime' patches only, or to be dropped altogether06:48
=== mthaddon changed the topic of #launchpad-dev to: Launchpad down/read-only from 08:00-09:30 UTC for a code update | https://dev.launchpad.net/ | On call reviewer: - | Critical bugs: 220 - 0:[######=_]:256
wgrantspm: That's not leakage.07:04
wgrantIt's cache.07:04
lifeless18:31 < lifeless> stub: I think we want to avoid causing a pipeline-halt on appserver deployments07:06
lifeless18:39 < stub> lifeless: What is the problem? launchpad/devel & launchpad/db-devel split handles that doesn't it?07:06
lifeless18:40 < stub> We rollout launchpad/devel everywhere except the databases. We rollout db-devel to the databases, and merge it into /devel after the rollout.07:06
lifeless18:48 < lifeless> stub: thats probably a decent day one answer, letting the bug go to back burner07:06
lifeless18:48 < lifeless> stub: It seems to me that eventually db-devel probably wants to be either 'big downtime' patches only, or to be dropped altogether07:06
stubYup. Tackle the landing workflows as a separate problem.07:08
stubWe can avoid the split if upgrade.py is smarter, being able to apply just the live patches or the live + heavy patches, and having buildbots run the test suite against both schemas.07:09
lifelessk, how about fastdowntime2 or something as a tag for 'later' items ?07:11
stubSure, although technically how we land stuff doesn't affect downtime at all. Its just a developer time saver.07:12
jtvWon't this obfuscate code changes that depend on "big downtime" patches?07:16
lifelessstub: well, given that that (dev efficiency) is ultimately why we're doing this :)07:17
lifelessjtv: ideally there will be no big downtime patches07:17
lifelessjtv: as of today they require signoff by me / flacoste07:18
stubYer, but a nice split means smaller solvable projects. No need to pile them together in a big project.07:18
lifelessstub: agreed07:18
lifelessstub: pick a tag name for the $next-piece ;)07:18
stubOr as it is probably a standalone bug, no need for a tag.07:23
lifelessstub: I'd like to be able to find them later; its tightly related to the downtime thing - I was suggesting to remove the fastdowntime tag so its not in the burndown for the inital feature07:24
stubAre these milestones?07:25
lifelessstub: mmm, more we have a single large theme, and stages of work07:27
lifelessstub: of which right now we know 'step 1' and 'not step 1' ;)07:28
stubTwo moving milestones - stuff to do now, stuff to do later :)07:28
lifelesssure; though milestones are heavier. Lets stay with tags for now ?07:29
lifelessI've given it fastdowntime-later07:30
lifelessif we find all the later stuff is landing workflow, I'll take the bullet for updating the labels07:30
=== jtv changed the topic of #launchpad-dev to: Launchpad down/read-only from 08:00-09:30 UTC for a code update | https://dev.launchpad.net/ | On call reviewer: jtv | Critical bugs: 220 - 0:[######=_]:256
adeuringgood morning07:34
LPCIBotProject devel build #882: FAILURE in 6 hr 0 min: https://lpci.wedontsleep.org/job/devel/882/08:11
LPCIBotProject devel build #883: STILL FAILING in 0.8 sec: https://lpci.wedontsleep.org/job/devel/883/08:11
=== almaisan-away is now known as al-maisan
jtvhi mrevell08:28
lifelessbigjools: you'll appreciate this; just got the human stopwatch trophy :)09:15
bigjoolslifeless: it's easy :)09:15
lifelessbigjools: I figured it would be hard - and wasn't trying for it :)09:16
bigjoolslifeless: karts FTW :)09:16
lifelessheh, i was in ? daytona superspeedway? the big O course, in a formula one car09:16
bigjoolsah yeah that's the other easy way09:17
bigjoolslifeless: tune the F1 car so it's got almost no wing on that track09:17
lifelessbigjools: yeah, I was topping out at 358kph, and maintained that on the corners09:26
=== mthaddon changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | On call reviewer: jtv | Critical bugs: 220 - 0:[######=_]:256
jtvthanks mthaddon, and hi :)09:53
=== henninge_ is now known as henninge
=== al-maisan is now known as almaisan-away
=== almaisan-away is now known as al-maisan
=== al-maisan is now known as almaisan-away
wgranthenninge: Isn't IDiff['diffstat'] clearly wrong, making this a trivial fix?10:39
henningewgrant: what do you mean?10:39
wgranthenninge: It's a dict, not text...10:40
wgrantSo IText is not right.10:40
henningewgrant: what I mean10:40
henningewgrant: I was just wondering if the interface can be changed like that, the whole thing about api consistency.10:41
henningebut obviously nobody has been using this as text or else it would have been noticed earlier.10:42
henningeeasy fix then, I just hope we don't hit any more of these.10:43
=== jam1 is now known as jam
=== almaisan-away is now known as al-maisan
=== danilo_ is now known as danilos
=== matsubara_ is now known as matsubara
adeuringjtv: still around?12:42
jtvgot an MP for me?12:42
jtvI think you've earned a review, what with all the ones you do for me.  :)12:42
adeuringjtv: yes, a small one: https://code.launchpad.net/~adeuring/lazr.batchnavigator/short-read-for-backwards-batch/+merge/6782312:42
jtvComing up.12:42
=== danilos changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | On call reviewer: jtv, danilos | Critical bugs: 220 - 0:[######=_]:256
=== dobey_ is now known as dobey
=== mrevell_ is now known as mrevell
abentleyhenninge: I don't understand why the fact that IDiff.diffstat is a serialized dict breaks the marshaller.  A serialized dict is text...13:08
henningeabentley: because it is not13:08
henningeit is just a dict.13:08
henningeSee the implementation.13:09
abentleyhenninge: Ah, it's wrongly-exported?13:09
henningewell, it is stored as a json string in the database but the model implements an attribute that de/serializes it.13:09
henningeso that implementation does not match the interface anymore, hence the wrong export.13:10
henningeabentley: I have to run to the doctor's now. ttyl13:10
abentleyhenninge: ttyl13:10
henningederyck: Hi!13:33
henningederyck: I am here but on 3G so no voice ... ;(13:33
deryckhenninge, no worries.13:33
deryckabentley, http://developer.yahoo.com/yui/3/api/ArrayAssert.html#method_isEmpty13:35
sinzuiOnce more we require a library to makeup for the deficiencies of the language.13:37
jmlsinzui: one measure of a language's strength is the degree to which that is possible.13:42
deryckhenninge, I've seen your mail and the card move.... looks like the obfuscated email work is on track to land now?13:43
bacnice blog post mrevell!13:56
mrevellbac, Thanks. I thought it was about time to announce :)13:57
jcsackettsinzui: you available to chat?14:06
sinzuiyes. I will start mumble?14:07
jcsackettsinzui: sure.14:07
=== abentley changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | On call reviewer: jtv, danilos, abentley | Critical bugs: 220 - 0:[######=_]:256
abentleyjtv: still OCR?14:07
jtvyes, abentley, still OCR!14:11
jtvadeuring: not getting a diff for your branch at all.  :(  I'll go for manual.14:11
abentleyjtv: I guess you're not on Thailand time right now?14:12
adeuringjtv: yeah, seems that LP is a bit slow today....14:12
jtvOh, it may have got caught in the release of course.14:13
* deryck is switching offices, back online in 20 minutes14:13
abentleyadeuring: no, it seems that something's wrong with the script that does those diffs.14:14
jtvadeuring: oh well, I just looked at the diff.  Done.14:17
adeuring jtv: cool, thanks14:17
sinzuimrevell, sorry :( I spent my morning getting my computer to work. I can talk now if you like14:31
jtvbigjools: I noticed that process-accepted commits its changes, in its inner loop, even in a dry run.  Accident?14:32
jamis it supposed to be downtime right now?14:34
jamI have a merge-proposal page that hasn't updated for 45 minutes +, and I tried to link a branch to a bug and it timed out after 9s.14:35
jtvjam: problem with the MP diff script, apparently.14:35
jtvAlthough… I just got a timeout as well.14:37
jamjtv: the last status updates I see are "degraded performance" followed by "performance should be back to normal"14:38
jam(from 45min ago)14:38
jamI don't know if what I'm seeing is just long-term fallout14:38
jamor whether something is still broken14:38
bigjoolsjtv: there's an outer abort though right?14:39
jtvbigjools: yes, but that won't help much if the inner loop's already committed.  :)14:39
jamI just succeeded in linking the branch, but it took 4.27s14:39
bigjoolsjtv: doesn't the partial commit get aborted?14:39
jtvThere is no partial commit — not without 2-phase, which we don't use.14:40
jtvCommit is commit.14:40
bigjoolsjtv: :/14:40
bigjoolsthen it's borked14:40
jtvAt least it's good to see my design decisions for libpqxx justified.14:40
bigjoolsjtv: although we don't use dry run for anything14:40
jtvWell, it's fixed now.  Up for review.14:40
jtv(I needed some cleanups before I could confidently mess with the script)14:40
=== al-maisan is now known as almaisan-away
bigjoolsI hate it when I see bugs in a security adapter14:43
sumanahbac, flacoste -- hi, Sumana here asking whether a blog entry about Launchpad's code review process is in the works.  flacoste I think you said you & Brad are working on it?14:43
sumanah(or rather that bac  is working on it)14:43
mrevellsinzui, Does 15 minutes from now suit you?14:43
bacsumanah: i have it on my todo list.  :(14:43
sinzuimrevell, yes14:44
bacsumanah: i will try to set aside time on friday to do it.14:44
sumanahbac: if I interviewed you, would that help?14:44
bacsumanah: i'd like to talk to you some time!14:44
sumanahthanks bac -- we in #mediawiki are looking forward to hearing about your example before a code review training on Tuesday14:44
sumanahbac, Francis's email was very useful but graphs would be even better :)14:45
bacsumanah: maybe we can talk tomorrow?14:45
sumanahbac: ok!  and I'd also love any documents about how Canonical people train each other in code review -- if you ask reviewers to write down any lessons learned about how to teach/learn how to code review, I would be very enthusiastic to read them.14:45
gary_posterflacoste, for bug 777874, can we regard that policy ("If a new bug, has >2 duplicates associated with it, or >2 people have indicated that this bug affects them, then automatically mark it confirmed.") as vetted and approved for all Launchpad users, or should addressing the bug include trying to confirm whether it is appropriate, or considering how to make it configurable/choosable?15:01
_mup_Bug #777874: If multiple reports on new bug, mark it confirmed <bug-lifecycle> <bugs> <escalated> <ubuntu-platform> <Launchpad itself:Triaged> <Ubuntu:Triaged> < https://launchpad.net/bugs/777874 >15:01
gary_posterall Launchpad *projects15:02
sinzuimatsubara, bug 803996 and bug 28316715:07
_mup_Bug #803996: person picker widget doesn't show link to unassign myself <disclosure> <exploratory-testing> <person-picker> <qa-ok> <Launchpad itself:Fix Committed by wallyworld> < https://launchpad.net/bugs/803996 >15:07
_mup_Bug #283167: Private branch owner cannot unsubscribe someone <disclosure> <lp-code> <oem-services> <Launchpad itself:Triaged by wallyworld> <NULL Project:Invalid> < https://launchpad.net/bugs/283167 >15:07
LPCIBotYippie, build fixed!15:11
LPCIBotProject devel build #884: FIXED in 5 hr 29 min: https://lpci.wedontsleep.org/job/devel/884/15:11
gary_postermrevell, I saddled you with https://answers.launchpad.net/launchpad/+question/164474 .  If you'd rather me kick it somewhere else, let me know (and a suggestion would be lovely :-) )15:30
* gary_poster mixes metaphors blithely15:31
=== jtv changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | On call reviewer: danilos, abentley | Critical bugs: 220 - 0:[######=_]:256
jtvabentley, while we're on the subject, care to review one of mine?  https://code.launchpad.net/~jtv/launchpad/bug-676103/+merge/6785215:33
mrevellgary_poster, :) I'll take a look now.15:33
abentleyjtv: sure.15:33
flacostegary_poster: consider it vetted and approved, but you might want to feature flag it ;-)15:37
flacostegary_poster: Ubuntu wants it for sure15:37
flacostewe might need some more scope controller: project:name15:40
nigelbI get search warnings, if I ignore them, I can't see the failures :(15:40
nigelberr, sorry15:40
nigelbwrong channel15:40
gary_postermrevell, thanks :-)15:45
gary_posterflacoste, ack, makes sense, thanks15:45
jtvabentley: I need to go somewhere.  I expect it'll be an hour or two.15:46
=== jtv is now known as jtv-afk
=== beuno is now known as beuno-lunch
flacostedanilo_: you win the best commit message of the year award!16:08
nigelbflacoste: linky? :)16:08
danilosflacoste, heh, thanks :)16:08
timrcThrowing this out here, from #launchpad.  It would be nice if, for a PPA, we could specify a URL to a downstream archive.  This archive would be consulted whenever a package is uploaded to the PPA or copy/rebuilt.  If the package with that name and version already exist downstream, the upload / copy and rebuild is rejected.  The reason is to prevent package collisions before they propagate.16:17
timrcThis may be a new way of thinking of a PPA in terms of how they were originally purposed, but, would like to get some thoughts anyway16:18
bigjoolstimrc: you need Derived Distros16:19
bigjoolstalking of which I need to catch up with you guys about that16:19
timrcbigjools, yes and yes16:20
bigjoolstimrc: I want to know how attached to your crazy custom suite names you are and whether we can work around that16:20
=== salgado is now known as salgado-lunch
timrcbigjools, I think what we need to do is fully understand derived distrobutions today and then develop a migration plan identifying the gaps16:25
timrcdistributions, too16:25
bigjoolstimrc: right. I want to see if I can help minimise gaps by suggesting different practices for you if I think you can do better16:26
bigjoolstimrc: we can enable DDs on staging so you can blast away, there's a couple of bugs to fix first though.16:27
flacostenigelb: http://bazaar.launchpad.net/~launchpad-pqm/launchpad/devel/revision/1341916:28
timrcbigjools, I would love to push all our problems on to you, so I'm definitely supportive of moving towards a launchpad solution in that regard :)16:30
bigjoolstimrc: I don't want your problems which is why I want to help now, rather than later :)16:31
timrcbigjools, even if we could work around naming and what not, I think our biggest issues are security and responsiveness... we have to be able to react very fast if shit-hits-the-fan for a customer, so having this aspect of our commercial operations managed by launchpad adds another dimension (but that's something for you and smagoun to discuss))16:32
timrcso the LEP on derived distributions did not cover privacy and last I heard there was a privacy rewrite going on?16:33
timrcboth of which make, at least me, nervous16:33
nigelbflacoste: heh, I agree :-)16:34
flacostetimrc: private distributions (and derived) is on the roadmap (~3-4 months)16:36
=== beuno-lunch is now known as beuno
timrcflacoste, completed and in production in 3-4 months?16:37
timrcI have a date with some chicken wings, bbiab16:38
=== timrc is now known as timrc-lunch
bigjoolsflacoste: we are still having massive performance issues in production16:40
=== matsubara is now known as matsubara-lunch
flacostebigjools: yes, i've hit a few timeouts16:46
=== mrevell is now known as mrevell-afk
cr3hi folks, anyone have a moment for a class design question?17:47
abentleycr3: sure.17:47
=== almaisan-away is now known as al-maisan
cr3abentley: awesome! so, lets say I'm adapting Product with FooProduct which delegates(IProduct, "product"), which works well so far. now, the design problem is what if I want methods like newSeries and getSeries in FooProduct to return an adapted ProductSeries, eg FooProductSeries? might there be an alternative to overriding each of those methods explicitly in FooProduct and adapting each return value, eg def newSeries(self, name): return IFooProductSeries(se17:50
bacabentley: i'm working on the JSON cache branch again.17:51
abentleybac: cool.17:51
bacabentley: did you open any bugs for tracking this work?17:52
abentleycr3: I don't think there's an alternative to explicit overrides in that case.17:52
cr3abentley: darn, where's my pattern book when I need it the most :)17:53
abentleycr3: delegation is not as cool as true inheritance, because the delegated class does not have access to methods on the delegating class.17:53
abentleycr3, i.e. Product.newSeries will not have access to FooProduct.asdf17:54
abentleycr3: so you can't use the "template method".17:54
abentleybac: I didn't open any bugs for this work.17:55
=== salgado-lunch is now known as salgado
bacthanks abentley17:55
=== al-maisan is now known as almaisan-away
abentleycr3: I imagine it is technically possible if you override __getattr__() or extend delegates(), to decorate methods to adjust their return types, but it would be a pretty nasty hack.18:07
cr3abentley: yeah, I'm looking more for a pattern to do this nicely otherwise suckup repetitive code rather than hack it18:08
=== danilos changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | On call reviewer: abentley | Critical bugs: 220 - 0:[######=_]:256
cr3abentley: even if the pattern might be slightly overkill, my example only mentionned two methods but I actually have more which would benefit from a good pattern18:08
cr3abentley: if Product.newSeries did something like getUtility(IProductSeries).create(self, name), then I was thinking that in my context I could potentially subscribe my own adapter for that interface, but then I think I puked a bit in my mouth :(18:10
abentleycr3: if you were using inheritance, not delegation, you could use template method http://en.wikipedia.org/wiki/Template_method_pattern18:10
cr3err, s/IProductSeries/IProductSeriesSet/18:10
abentleycr3: You could add a member of Product that is a class used to retrieve the ProductSeriesSet, and then override it on your instance.  But that is gross, because Product is an ORM object.18:16
abentleycr3: s/ProductSeriesSet/ProductSeries/18:17
cr3abentley: I'm not sure I follow, since I use adaption rather than inheritance, it wouldn't make a difference if I override that ProductSeries class in my adapted class because, if I understand correctly, Product.newSeries would do something like self.product_series_class(*args, **kwargs)... but self would be Product, not FooProduct18:29
cr3abentley: if I misunderstood, I'd appreciate clarification because, even if it might be gross, it might be worth considering :)18:30
abentleycr3: In FooProduct.__init__ or similar, you'd do self.product.product_series_class = FooProductSeries.18:31
cr3abentley: ah, gotcha, that would work18:31
cr3abentley: is there any precedent of something like that somewhere in Launchpad where it might've made sense to do so?18:32
abentleycr3: it's gross because Product is cached by Storm, so that Product with its custom product_series_class could show up somewhere else, where it wasn't expected to have that override.18:32
cr3abentley: I was thinking the other way around, if it was once a FooProduct, it might also make sense for it to remain as such. since it delegates IProduct, it should still behave the same as far as callers are concerned18:33
abentleycr3: No, we don't usually try to do polymorphism via delegation, so I don't know of anywhere we're doing this.18:34
cr3abentley: but I can appreciate how that could be a nasty side effect :(18:34
abentleycr3: re "I was thinking the other way around", the delegated-to Product was never a FooProduct, so it shouldn't remain as such.18:35
cr3abentley: touche! :)18:35
cr3does storm cache store.find or only store.get?18:36
=== timrc-lunch is now known as timrc
abentleycr3: I have no idea, but... 1) Something may *already* be using that instance 2) Something in the FooProduct.* call tree may acquire that instance.18:37
abentleycr3: Can we take a step back and question the assumption of adaptation?  What's the adaptation trying to solve?18:39
=== jtv-afk is now known as jtv
jtvthanks abentley — back now but glad to see my absence hasn't held things up.18:42
abentleyjtv: np18:42
=== matsubara-lunch is now known as matsubara
cr3abentley: it's trying to solve extending product with stats information with a single query, so FooProduct takes a product, number_of_test_runs, first_test_run_date, last_test_run_date, etc.. I have FooProductSet.create/get/search which take care of returning a FooProduct where the decorated result or resultset returns a product with all the other stats information already retrieved18:45
cr3abentley: ideally, I don't want to have to pollute the registry product with that information, it shouldn't have to know about these stats18:48
cr3abentley: so, the reason why these bleeds into ProductSeries is that this class also has an adapted class providing finer grained stats just for the series18:50
abentleycr3: In general, we *do* pollute classes.  If you want to avoid that, perhaps a mechanism that lets you look up the stats for a given Product or ProductSeries would work.18:51
cr3abentley: is it just me or did QuestionsPerson originally adapt person? I see how that it pollutes Person with QuestionsPersonMixin now :(18:53
cr3I'd love to understand why...18:53
abentleycr3: After all this difficulty with other options, the reason why seems clear to me :-)18:54
=== mrevell-afk is now known as mrevell
* cr3 sheds a tear for adaption :(18:55
lifelessnaive adaption will perform poorly in an ORM environment18:57
lifelessyou need fairly deep integration to avoid death by a thousand queries scenarios18:57
abentleylifeless: this adaptation is being done to avoid additional queries.18:58
cr3abentley: my concern about Mixins is that high level classes (like project) endup having to know about low level classes (like project series), so a person for example ends up becoming all knowing :(18:58
abentleycr3: I agree with you.18:59
cr3abentley: they're alright within a component, like classes within lp.answers could mixin among themselves as much as they like, but not across components19:00
lifelessan alternative is to have an explicit mapping phase, and that can move away from using the ORM obtained object19:00
lifelesse.g. truely map into plain old python19:01
cr3lifeless: is that what you mentionned a few months ago to decouple launchpad from its database backend which would have the nice side effect of being to run tests without the database?19:01
cr3lifeless: I'm very excited about that project, especially to see the design at work, any plans to have it implemented?19:02
cr3lifeless: actually, is there a LEP I could keep track of?19:03
lifelesscr3: probably never going to do it - splitting LP into small services will take a year or two and after that we can reconsider19:04
cr3lifeless: I'm patient :)19:05
benjiflacoste: I've replied to your review of https://code.launchpad.net/~benji/launchpad/bug-781600/+merge/67704 and made several changes.20:48
flacostebenji: ack, will look at it shortly20:49
lifelesscr3: why is checkbox making an OPTIONS call ?20:52
lifelessactually, its someone in a browser hitting api pages.20:53
lifelesswe should probably block that on the api domain20:53
cr3lifeless: I'm not sure I follow where this call is originating from...20:56
lifelesscr3: someone is poking at the api with a browser, on the checkbox project.20:57
lifelesscr3: and triggering an oops20:57
cr3lifeless: weird, I wonder if that might be the results tracker integration. can I get more information?20:59
_mup_Bug #810113: TypeError constructing page id: cannot concatenate 'str' and 'list' objects <oops> <Launchpad itself:Triaged> < https://launchpad.net/bugs/810113 >21:00
jcsackettsinzui: i will be at the meeting tonight.21:01
=== matsubara is now known as matsubara-afk
lifelessflacoste: do you want to look at lp.net/lazr and sort it out then ?21:09
cr3lifeless: that oops doesn't seem to be related to the results tracker and I looked at some of the scripts used by my team to generate bug coverage reports, likely candidates to generates oopses against checkbox, but they all seem to use lpltk which uses launchpadlib21:14
cr3lifeless: oh wait, was that oops generated a couple days ago?21:15
cr3I was playing with the javascript client to make reports on one website taken from launchpad, but that was just exploratory21:18
lifelessprobably that21:25
flacostebenji: on what ground was bug 810004 marked critical?21:28
_mup_Bug #810004: +bugs page layout for bzr-hg is messed up <Launchpad itself:Triaged> < https://launchpad.net/bugs/810004 >21:28
benjiflacoste: I thought it was a regression before I realized the true cause (the very long bug title) and I forgot to change it.  Fixed now.21:52
wgrantlifeless: :( why don't we fix OOPSes rather than blocking it?21:56
lifelesswgrant: well we should as well21:57
lifelessflacoste: 09:09 < lifeless> flacoste: do you want to look at lp.net/lazr and sort it out then ?21:58
flacostebenji: ok, if had been a regression, please tag it appropriately22:11
flacostebenji: review comments sent btw22:11
flacosteand out...22:12
benjiflacoste: thanks22:12
=== abentley changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | On call reviewer: - | Critical bugs: 220 - 0:[######=_]:256
wallyworld_wgrant: jcsackett: StevenK: sinzui: http://people.canonical.com/~ianb/picker-search-suggestion-mockup.png http://people.canonical.com/~ianb/picker-search-suggestion-mockup2.png23:19
StevenKsinzui: http://pastebin.ubuntu.com/643600/23:24

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