wallyworldyes, but we're getting back to the topic i raised on the dev list - i disagree with our current workflow because it encourages only superficial qa just get get stuff deployed rather than testing for defects / verification00:00
lifelesswallyworld: uhm, thats the point though.00:01
wallyworldnot imho :-)00:01
lifelesswallyworld: accept *some* risk, in return for velocity.00:01
lifelesswallyworld: higher velocity gives faster TTR00:01
lifelesswallyworld: and smaller deltas per deploy00:01
wallyworldsure, but i think we go too far and rework is the enemy of velocity00:01
lifelesswallyworld: and that gives a gaster TTD00:01
lifelesswallyworld: we are doing far less rework than in the old system00:01
wgrantAnyone want to review https://code.launchpad.net/~wgrant/launchpad/bug-728836/+merge/52355?00:02
lifelesswgrant: I think it may conflict with my fix00:03
lifelessthe distroseries attribute in particular00:03
wallyworldnow, if there were metrics to show the number of bugs that had to be reopened/reworked, that would be interesting00:03
wgrantlifeless: Which fix?00:03
lifelesswallyworld: I don't see how the ok to deploy process affects rework in this case00:03
lifelesswallyworld: 723560 or whatever it is00:03
lifelesswgrant: bug 72756000:04
_mup_Bug #727560: Archive:EntryResource:getPublishedSources <timeout> <Launchpad itself:Triaged> < https://launchpad.net/bugs/727560 >00:04
wgrantAh, right.00:04
lifelesswallyworld: the process of closing bugs when the first deploy against them is done is easily tweaked and doesn't affect the deploy discussion at all.00:04
lifelesswallyworld: I appreciate that we need to improve the way these two processes interact, but its also -extremly- important we don't conflate the way we improve one with the way we improve the other.00:05
StevenKI think the qatagger needs a patch to give a list of bugs that can be closed by the rev we can deploy to.00:05
wallyworldlifeless: if affects rework because it encourages only superficial qa and not a "proper" check that the issue supposed to be fixed really is fully fixed. and so increases the chance that the defect will have to be revisited to fix it "properly"00:05
lifelesswallyworld: once a commit is in trunk, it *must* be deployable or rolledback in a matter of houres00:05
StevenKMakes it easier to cut-n-paste into LPS00:05
wgrantlifeless: It appears not to conflict.00:06
lifelessStevenK: there is a bug open, and when Ursinha rolls out my tweak to the templates it wil lshow Bug:1234 rather than Bug 1234 in the report00:06
_mup_Bug #1234: Gina is an unmaintainable mess of command line options, environment variables and shell scripts <lp-foundations> <Launchpad itself:Fix Released by debonzi> < https://launchpad.net/bugs/1234 >00:06
lifelesswgrant: cool00:06
StevenKHaha, I love that bug00:07
StevenKSince it STILL is00:07
StevenKlifeless: I meant a line at the top that has "If we deploy, the following bugs can be closed: 58585 58568 58922 66856 ..."00:08
wgrantStevenK: That bug's fix is the cause of it being so terrible.00:08
lifelessStevenK: yes there is a bug open for that00:08
StevenKgina needs a good hard rewrite00:10
lifelesswgrant: does get_archive do queries ?00:11
wgrantlifeless: I made Archive.debug_archive a cachedproperty to prevent that.00:11
lifelesswhere does bpr come from ?00:12
lifeless278+        candidates = (And(00:13
lifeless279+                BinaryPackagePublishingHistory.archiveID ==00:13
lifeless280+                    get_archive(archive, bpr).id,00:13
lifelessoh, I see00:13
lifeless8 line generator.00:13
lifelesswgrant: not the clearest00:13
wgrantDon't blame me for generators being backwards :P00:14
lifelessforward ones are known as 'for loops'00:14
wgrantIt wasn't initially quite so big.00:16
wgrantThe archive used to be in the main query.00:16
* StevenK notes SMM is now out of date, given 45 second PQM is real00:19
StevenKAnd I think we could go one better and hook tarmac into Jenkins with a paramaterized build00:20
wgrantlifeless: Thanks.00:22
wgrantbenji: Not around?00:23
lifelesswgrant: what do you need ?00:33
wgrantlifeless: Unfreezing.00:33
lifelesswgrant: we don't need benji, we need a losa00:33
lifelesswgrant: IIRC the docs were updated on friday00:36
lifelesswgrant: so it should be a simple point, ask a losa, and mail benji & the list00:36
wgrantI haven't read the new ones.00:36
lifelesswgrant: might be an idea ;)00:36
wgrantBetter to ignore the docs and see what works ;)00:37
lifelesswgrant: other folk will look to the docs for reference00:39
lifelesswgrant: so keeping them in sync is important00:39
lifeless(or delete if not needed)00:39
* thumper is close to pounding the table in frustration...00:40
wgrantlifeless: Where are these docs?00:40
wgrantthumper: If you need to pound a table, please choose BranchRevision.00:40
wgrantIf you can break a few indices off it would be great.00:40
thumperwgrant: we have a solution, but no time to implement00:41
wgrantIt is like 130GB!00:41
thumperwgrant: jam and abentley have a workable solution that'll fix loggerhead speed too00:41
thumperwgrant: they just need the OK to spend some time doing it00:41
thumperwgrant: using bzr-historydb00:41
wgrantWill that work for LP too?00:41
thumperwgrant: it'll kill the table completely00:41
thumperwgrant: as far as we are aware00:42
lifelesswth is getQuery for00:42
wgrantI thought that was only planned for loggerhead.00:42
wgrantThat's great news.00:42
thumperwgrant: quite a bit of analysis went into it00:42
thumperlifeless: on what?00:42
lifelessthumper: grep for '\<getQuery\>'00:42
thumperkill it00:43
wgrantIt's not needed by the Zope vocab stuff?00:43
thumperah... maybe00:43
thumpercheck the Interface00:43
wgrantI'm grepping.00:44
wgrantDoesn't seem to be.00:44
lifelessYeah, I had grepped there already00:45
* thumper stabs some tech-debt in the face00:45
wgrantlifeless: https://wiki.canonical.com/InformationInfrastructure/OSA/LaunchpadRollout says that we can only unfreeze once the stable rev is determined.00:46
wgrantBy the RM.00:46
wgrantThis is why I don't like reading documentation.00:46
wgrantBecause I means I have to knowingly subvert processes instead of just being ignorant of them.00:47
lifelesswgrant: === this stuff below is old and somewhat invalid with buildbot ===00:48
wgrantlifeless: Not there... near the bottom of the first section of "Preparatory Tasks"00:48
wgrant"Once all QA is done (including any RC branches that were landed after the db-stable -> devel merge), the RM will let the LOSAs know the revno of stable that we will use as the release branch. Once this release branch is determined, a LOSA can put devel back into normal mode on pqm and prep the stable branch for rollout"00:49
wallyworldanyone know if the teamparticipation table is designed reflect valid team memberships taking account of expiry dates, membership status etc? ie can i just query that one teamparticipation table to see if a person validly belongs to a team?00:50
wgrantwallyworld: Yes, use TeamParticipation.00:50
wallyworldwgrant: thanks00:51
wgrantwallyworld: It is unreliable in one case: some code (eg. inTeam) considers the team owner to be an implicit member.00:51
wgrantBut we consider that a bug, and anything that uses TP directly (lots of stuff does) does not see that.00:51
wallyworldwgrant: ok. so add a teamparticipation clause to a query is considered ok i assume00:53
wgrantThat's part of the point of it.00:53
wgrantNice and easy.00:53
wgrantAnd quick.00:53
wallyworldsure is. so that means there must be code to maintain that table based on expring memberships etc00:53
lifelesswgrant: fixed00:54
lifelessthanks doko00:59
wgrantWhat about doko?01:00
lifelessmbf on dh_python01:00
lifelessso my inbox just exploded01:00
* wgrant finds food and works out whether to drive +copy-packages down further or attack checkwatches.01:10
lifelesswgrant: 59 /    0  LanguageSet:CollectionResource:#languages01:11
lifelesswgrant: has noone attacking it right now01:11
wgrantlifeless: Maybe, but I want to get +copy-packages down low enough that I can stick a test over it.01:12
wgrantI basically just need to preload source files now.01:12
StevenKDidn't we add a CopyPackagesJob or so?01:12
wgrantThere is the package clone job which is used for copy archives.01:13
wgrantBut anyone pushing normal package copying out into a job is insane and likes causing QISEs.01:13
wgrant(see delayed copies, for example)01:13
StevenKYes, you said earlier delayed copies don't need to exist?01:14
wgrantOne reason for the existence (reuploading files to the public librarian) is wrong.01:14
wgrantAnother reason (slowness) will be wrong once this lands.01:14
wgrantAnd the other (correctness when copying into the primary archive) is easily fixed by moving the overriding and emailing stuff into the normal copy logic.01:15
lifelessStevenK: before we move things into backend jobs we should make them efficient.01:16
wgrantlifeless: It is a dupe, but I cannot remember the summary of the original :/01:16
lifelessnor I01:16
StevenKwgrant: Lets kill delayed copies, then? :-)01:17
wgrantStevenK: When I have a moment I am going to investigate how much work that is.01:17
wgrantCustom uploads were another reason for delayed copies, but they were never actually implemented.01:18
wgrantAnd any future implementation should be done by making custom uploads not INSANE.01:18
StevenKRight, I have my test written, now comes the lovely "test dies with a permission error, edit security.cfg, make schema", rinse and repeat01:19
wallyworldStevenK: i did that over the w/e. not much fun :-(01:22
mwhudsonyou don't need to run the whole make schema do you?01:26
mwhudsonjust python database/schema/security.py or something01:26
StevenKI investigated last time I had this issue, and the only thing that helped was the full monty of make schema01:27
mwhudsonenjoy then01:27
lifelessyou need to run it against the template test database01:27
lifelessbut yes, you don't need full schema build01:27
StevenKIt was only 3 perms, so the pain was minimal01:29
StevenKOh, sigh, every SPPH for Debian is PENDING.01:34
StevenK*That'll* help.01:34
wgrantStevenK: We're going to need to solve that eventually.01:44
wgrantI have considered getting the dominator to run over it.01:44
StevenKAnd after it takes 4 days?01:45
wgrantBut we also need to handle deletions somehow.01:45
* thumper grabs a bite to eat, then gets the girls01:45
StevenKwgrant: Just trying to write a better query to see how much of Debian's SPR.changelog are None01:46
wgrantStevenK: You should always use IN (1, 2), whenever you are querying for publications.01:46
wgrantQuerying only for 2 is always wrong, unless you are the dominator.01:46
StevenKApparently, 12k. I think my query is wrong, anyway01:49
wgrantStevenK: Maybe just SELECT COUNT(*) FROM sourcepackagerelease WHERE changelog IS NULL and upload_archive=3;01:53
wgrantWon't only give you current stuff.01:53
wgrantBut meh.01:53
StevenKwgrant: Can't we craft the query like the populator does and ignore stuff with expired SPRFs?01:54
wgrantStevenK: You could. But nothing in Debian should be expired.01:55
wgrantBecause our GC is sort of awful awful awful awful.01:55
StevenKI guess the timing of a test can't really be taken as anything?02:00
wgrantWhat do you mean?02:01
StevenKFrom devel: Total: 16 tests, 0 failures, 0 errors in 1 minutes 4.196 seconds.02:02
lifelesswhat about it02:02
StevenKMy branch: Total: 17 tests, 0 failures, 0 errors in 1 minutes 5.195 seconds.02:02
lifelesssounds like your branch adds a 1 second test02:02
StevenKClearly, my question is that number "reliable"02:03
lifelessrepeat it 5 times02:03
lifelesstake the lowest time for devel and the lowest time for your branch02:03
=== wgrant changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | firefighting: - | On call reviewer: - | https://code.launchpad.net/launchpad-project/+activereviews | PQM: open RM: benji
lifeless  Hard / Soft  Page ID02:09
lifeless     130 /  223  BugTask:+index02:09
lifeless     109 /    0  LanguageSet:CollectionResource:#languages02:09
lifelesswgrant: ^ let me encourage you to stay flexible and responsive02:10
lifelesswgrant: we will get back to copy packages02:10
* wgrant finds a timeout.02:10
wgrantHmm. Or I could fix two checkwatches OOPSes and get us below 1000 exceptions by the end of the week.02:11
wgrantTempting, tempting.02:11
wgrantBut #languages it is.02:11
wgrantWTF, why is it querying Karma?02:12
* wgrant deletes #languages as being stupid.02:12
StevenKThereby fixing the timeout?02:14
StevenK... maybe people use it?02:15
wgrantIt fixes OOPSes *and* decreases WTF/m.02:15
StevenKwgrant: Sigh, SELECT count(spr.id) from sourcepackagerelease as spr JOIN sourcepackagereleasefile as sprf ON sprf.sourcepackagerelease = spr.id JOIN libraryfilealias AS lfa ON sprf.libraryfile = lfa.id WHERE lfa.content is NULL and spr.upload_archive = 3; => 002:15
wgrantWho cares if peopel use it :P02:15
StevenKwgrant: The users, I guess.02:18
wgrantI think I will unexport Language.translators_count, and maybe turn it into a method.02:18
StevenKMaybe people use that too? :-)02:19
wgrantNo widely distributed scripts use it, so I do not care much about the users.02:19
wgrantThey can adapt.02:19
StevenKWhat are you, a kernel developer?02:19
lifelesswgrant: is it in 1.0 ?02:20
lifelesswgrant: was it in 1.0 at release ?02:20
wgrantlifeless: It was added in March 2010. So it was probably just after 1.0 was declared.02:21
StevenKlifeless: Anyway, aren't you supposed to drop the lowest, the highest and take the average of the remaining?02:21
lifelessStevenK: huh?02:22
StevenKlifeless: Rather than run the tests 5 times, and just take the lowest number02:22
wgrantSo, I could preload, or I could temporarily break a couple of scripts that might not exist and make requests a second or so faster.02:23
wgrantjtv: Heh, I was just looking at that.02:23
lifelessStevenK: we assume that a noisy environment can't make your test faster02:24
lifelessStevenK: and thus everything that makes it slower is noise02:24
wgrantjtv: We could optimise the query, or we could reexport the attribute as a method, breaking all of the very few scripts that use it.02:25
lifelesswgrant: I would default to optimising in the first instance02:26
lifelesswgrant: its easier (than the coordination to remove something in 1.0)02:26
wgrantlifeless: We need to coordinate the removal of most of 1.0 soon.02:27
StevenKTotal: 16 tests, 0 failures, 0 errors in 56.713 seconds.02:27
StevenKTotal: 17 tests, 0 failures, 0 errors in 1 minutes 2.982 seconds.02:27
lifelesswgrant: is that hyperbole or do you know something I don't ?02:27
wgrantlifeless: We have committed to supporting 1.0 for another 4 years. That is completely stupid.02:27
StevenK6 seconds with the two best times, 2 seconds with the two worst times.02:28
wgrantWe need to rescind that commitment.02:28
lifelesswgrant: I agree that is has a high cost; its why I'm encouraging devs to only put stuff in devel, and am sure that for 1.1 (or $label) we will only want to move some stuff into supported.02:28
lifelessI have an idea02:29
lifelesswhy don't we write a caching layer for milestones02:29
lifelessand use it for the hidden edit forms but not for the visible bugtask rows.02:30
jtvHi wgrant—whatever works, I guess.  :)  I'm not sure that "it's a method now" will console many people though…02:32
jtvwgrant: plus, there's already a bug for timeouts on… getAllLanguages IIRC.  So if you want a method that times out rather than a property that times out, well, you've already got one.02:32
jtvThough I do think what you say has merit in itself!02:32
wgrantjtv: Hmm? getAllLanguages is exactly the same problem.02:32
wgrantIt gets lots of Languages, and serialising the Language calculates the translators_count.02:33
jtvYes, I figured, but ironically the bug page didn't load.02:33
jtvThat definitely shouldn't be a property, no…02:33
wgrantIt is always going to be expensive.02:33
wgrantIt doesn't have to be so expensive.02:33
wgrantBut it's still going to be expensive.02:34
wgrantThe number of reasonable uses for that property by an API script is 0.02:34
jtvI was assuming that the API request specifically was deliberately getting contributor counts for all languages.02:34
lifelessI really suggest a) optimise, b) if we want to change start the discussion to change it02:34
wgrantMaybe I can reexport it on devel, and preload on 1.0.02:35
lifelessI need a reviewer02:36
lifelesswgrant: yes. Which means starting with the preload, and then (probably) file a bug to do something about it in a while in devel.02:37
lifelesshmm, POFile:+translate is still showing up02:38
jtvYes, it's difficult and IIRC there was a rewrite that we never completed.02:39
jtvlifeless: looking at your branch…02:39
wallyworldjtv: wanna review my fix for 407260 when you are free? https://code.launchpad.net/~wallyworld/launchpad/branch-picker-team-branches/+merge/5235602:41
jtvwallyworld: I'm just reviewing Robert's branch02:42
wallyworldjtv: no hurry at all. i just thought you may be interested :-)02:42
jtvI am, I am… just not free to look at it just yet.  :)02:42
lifelesswgrant: DistroSeries:EntryResource:getBuildRecords - improved by your branch ?02:43
wgrantlifeless: no.02:43
wallyworldthumper: do you have any examples of making a ws api call on one of our domain objects within javascript?02:45
* thumper looks02:45
lifelessjtv: fixing the silly docstring02:46
thumperwallyworld: there is something in lp.code.tests.test_branch_webservice02:47
wallyworldthumper: thanks.02:47
jtvlifeless: speaking of docstrings, it might be nice to have one on CachedMilestoneFactory._load.  I have a feeling there's more going on there than I understand.02:49
wallyworldthumper: that's all python. i was after javascript :-)02:49
lifelessjtv: what do you think is going on ?02:49
wallyworldthumper:  i know how to do it from python :-)02:49
thumperwallyworld: ah...02:49
thumperwallyworld: what do you want to do?02:50
lifelessjtv: ah, its buggy. Fixed.02:50
jtvlifeless: the fact that it's based on self.contexts suggests that it's meant to be called only once, but if it were meant to, I get the impression it would've been a one-liner.02:50
wallyworldthumper: i want to invoke the recently exported pending_builds api on a recipe object from within javascript02:50
lifelessjtv: pushing the just once guard now.02:51
jtvThe what02:51
jtvAhhhh, _that_ is what the comment meant…02:51
lifelessjtv: uhm its not a one liner because our vocabularies are based on /a context/ not on /contexts/02:51
jtv…it meant you only want to call this once?02:51
jtvIt was very, very unclear and helped confuse me.02:51
lifelessjtv: its called many times02:51
wallyworldthumper: so i'm on the recipe index page and there'll be a recipe web_link i can use02:52
lifelessjtv: I want the heavy lifting to take place just once, and all at once02:52
lifelessjtv: we currently have some bugs where we construct *300* milestone vocabularies.02:52
thumperwallyworld: you want to do something like... :02:53
thumperlp = Y.lp.client.Launchpad();02:53
lifelessjtv: http://bazaar.launchpad.net/~lifeless/launchpad/bug-724033/revision/1253802:53
thumperlp.get(some_path, config)l;02:53
thumperand that'll be the recipe02:53
thumperthen call the method on that object02:53
thumper var client =  new Y.lp.client.Launchpad();02:54
wallyworldthumper: oh ok. looks reasonable. i'll give it a go thanks.02:54
thumperwallyworld: grep for "client.get" and you'll find some stuff02:56
wallyworldthumper: yeah, just grepping for ".get(" right now in fact :-)02:56
lifelesslooks like I get POFile:+translate again02:56
wallyworldthumper: i've got enough to go on now but there really don't seem to be very many places at all we use the ws api from our js. unless i only had a boy look :-)03:01
thumperwallyworld: correct, we don't03:01
wallyworldthumper: is that something considered bad or alternatively we just haven't gotten around to it yet? i would have thought it would be the "right thing to do" from a soa perspective03:02
thumperwallyworld: we don't make many api calls over javascript to code objects03:05
wallyworldthumper: in that case would you prefer that i got the pending builds for a recipe another way? the ws api seems correct though. otherwise i'll need to hack zcml and add zope stuff03:07
thumperwallyworld: what are you doing?03:07
wallyworldthumper: may be easier via mumble?03:08
thumperwallyworld: yep,03:08
thumperme hooks up03:08
thumper        client.asserts.assertProperty(03:12
thumper            jquery=u'("div#edit-lifecycle_status span.value")',03:12
thumper            validator=u'className|branchstatusEXPERIMENTAL')03:12
jtvahh I'm back.  lifeless, the last I got from you was "I want the heavy lifting to take place just once, and all at once."  It makes sense to me now that you've fixed it: the code I read initially re-created all the MilestoneVocabs on every invocation.03:18
jtv(Unless I'm going completely dyslexic, which I also wouldn't discount as a possibility :)03:18
jtvwallyworld: posted a comment on your branch…  hard-hitting questions about your approach.  :)03:19
wallyworldjtv: thanks. otp. will look soon03:20
jtvlifeless: to explain what I meant with _load being essentially a one-liner: I was thinking if the work is done just once, then ISTM it would amount to self.vocabularies = dict(target, MilestoneVocabularyTarget(target) for target in map(MilestoneVocabulary.getMilestoneTarget, set(self.contexts)))03:22
jtvIs that correct or am I still misunderstanding something?03:23
lifelessjtv: you're missing that it instantiates the vocaularies03:28
lifelessjtv: not the targes03:28
lifelessmilestone_vocabulary = MilestoneVocabulary(target)03:28
jtvI thought MilestoneVocabularyTarget(target) instantiated a vocabulary?03:28
* thumper afk for a while, back later tonight03:29
lifelessjtv: a product and a product series of that product share a set of milestones03:29
lifelessjtv: there is no MilestoneVocabularyTarget03:29
jtvSorry, I mis-typed that.03:29
jtvScratch the Target.03:29
lifelessjtv: so its a two pass filter: one to map context->targets which is the actual things that we need milestones on03:29
lifelessjtv: and a second to construct the vocabularies for each target03:29
lifelessjtv: a later branch will make the second pass a single call to do optimised sql and generate all the vocabularies out of a minimal set of lookups03:30
jtvlifeless: but without the typo, and modulo icky external references to self.vocabularies, you're saying _load does not amount to "self.vocabularies = dict(target, MilestoneVocabulary(target) for target in map(MilestoneVocabulary.getMilestoneTarget, set(self.contexts)))"?03:32
lifelessjtv: it won't once the next stage is done03:32
jtvThe set() needs to be outside the map() perhaps?03:32
lifelessjtv: because it won't loop at that point03:32
jtvAh, that'll be moved inside some batched method?03:32
lifelessthis is prep work to do an eager load optimisation on bugs that have 150 different products / distro combinations03:33
lifelessit will reduce the query counts we have today substantially I hope, and make it easier to do the next stage03:33
jtvThen maybe you'd also like to move the self.cached_milestone_source.contexts.add() outside the loop that calls _getTableRowView?  The loop iterates over a list anyway.03:34
jtvWhaa I need to be afk for a moment03:34
lifelessjtv: I wanted to keep it adjacent to the code that hands out the milestone_source03:34
lifelessjtv: that way they can't get out of sync03:34
lifelessjtv: so its layering: someone calling _addTableRow or whatever its called *has* to make sure the context is added to the contexts set or the assertion will trip03:41
lifelessjtv: the easiest way to ensure that is to have addTableRow do it03:41
jtvlifeless: sure, makes sense03:42
lifelessI'm in POFile:+translate now, so going from memory03:42
jtv(Also, I just noticed it's called in another place as well)03:42
jtv(Still in the same loop, but nevertheless)03:42
jtvlifeless: if you have a bug open for the future task of batching this, it'd be nice to make that TODO comment a proper XXX so that all you have to do later is grep for the bug number.  Or someone else doing the same job, if it comes to that.03:43
lifelessjtv: its the same bug03:43
jtvOh so you're doing that right after this branch?03:43
lifelessdepends on the impact, but I suspect we'll still have timeouts on this once this lands03:44
lifelessBugTask:+index is our #1 timeout03:44
jtvlifeless: I'd prefer a note to check up on that (and file a bug if appropriate—whether it's timing out or "still a bit slow") over a TODO comment in the source TBH.03:49
jtv(Since you're going to Q/A this anyway, I'm assuming that your eyes will pass over the relevant data anyway)03:50
lifelessjtv: I think that thats waste TBH: the data will tell us03:51
lifelessI can delete teh comment if you like, but thats also waste - we're probably going to be back here in two days doing more.03:51
lifelessthe comment will tell someone else guided here by profiling an option I've considered; a bug would not be usefully triaged outside of the data that we have driving maintenance03:52
jtvI don't think the comment will be very helpful to someone else reading it.  It's little more than a reference to something you have in your head that they'll have to reconstruct by reading the same data, or dig up who wrote it so they can ask.03:54
jtvIf you can make it clearer, then great.03:54
jtvI take that back; it's clearer now.03:54
jtvOnly other thing is test—it'd be good to know that calls for the same target will return the same vocab.03:57
lifelessI'm really not inclined to - because:03:57
lifeless - I've refactored, vs introducing a new layer: whatever tests there are for this either already ensure that, or were judged unnecessary in the past03:58
lifeless - the key thing isn't whether the same instance is returned, its whether the query count is flat03:58
lifeless - and we can't test the key thing yet because the page is so darn horrible.03:58
jtvlifeless: so there is a test to ensure that the query count is flat?04:00
lifelessjtv: no, because its not04:00
lifelessjtv: 675  OOPS-1891H475   NullBugTask:+index for instance04:00
lifelesswgrant: want to mentor https://code.launchpad.net/~stevenk/launchpad/populate-spr-changelogs/+merge/52363?04:03
lifelesssorry, be mentored on04:03
wgrantlifeless: I probably shouldn't, since it's an adaptation of my code. But I could.04:03
lifelesswgrant: I'll still give it a full review04:04
lifelessjtv: can I ask a question about pofile:+translate04:04
jtvgo ahead04:04
lifelessin lib/lp/translations/browser/translationmessage.py04:04
jtvoh God04:04
lifelessline 1287 says if self.form_is_writeable:04:04
lifelessexplaining we don't nee dsuggestions if the user cannot do translations04:04
lifelessafter the else clause of that if block04:05
StevenKlifeless, wgrant: I'm still attempting to get LP to generate a diff04:05
lifelessjtv: there is another if block starting with if self.sec_lang is None:04:05
wgrantStevenK: Push again. If that doesn't work, push -2 then push again.04:05
wgrantI think I know what's going on, but can't check because ENOLOSA.04:05
lifelessjtv: and it *also* asks for suggestions, but is not guarded by the form_is_writable check04:05
lifelessjtv: I am thinking that that is a bug, but is it ?04:05
jtvlifeless: arguably… the secondary language serves two very different use cases.04:06
StevenKUnable to obtain lock  held by stevenk@bazaar.launchpad.net04:06
StevenKat crowberry [process #14934], acquired 52 minutes, 15 seconds ago.04:06
_mup_Bug #14934: [warty] mozilla-browser: JS can access any mozilla memory <mozilla (Ubuntu):Fix Released by thombot> <mozilla (Debian):Fix Released> < https://launchpad.net/bugs/14934 >04:06
lifelessjtv: e.g. alt_submissions should be [] if form_is_writable is False04:06
jtvOne is "this language is so similar, I'd like suggestions from it so I can just click them into the translation I'm working on."04:06
jtvThe other is "me speak english no good, me like read translations other language as well"04:07
lifelessjtv: ok, so its not a bug04:08
lifelessso, I'll make it more complex there to keep the behaviour04:08
jtvSorry to hear it, but I think it's for the best.04:09
lifelessjtv: its about 80% more efficient to query for the alt language with the primary language than to query seperately04:09
* jtv whistles04:09
lifeless350ms query * two, or one 355ms query04:09
jtvThere's something that could be done about that, but not now:04:10
jtvre-design with the two use-cases in mind as separate goals.04:11
jtvThe second use case doesn't actually need the suggestions if there's an accepted translation.04:11
jtvlifeless: there's something we did in the pre-sharing model that we threw out ("for the time being") to keep things simple.04:12
jtvJust fetch all relevant TranslationMessages, and sort out their roles python-side.04:12
lifelessjtv: yeah, thats what I'm bringing back in here04:13
lifelessjtv: my patch last week took a solid chunk of time off04:13
lifelessbut not enough04:13
lifelessso this is the next step04:13
jtvThere's really no point IMO in having separate calls "get me the current translation," "get me the current translation for the other side, and by the way is it the same one," "get me the suggestions on this side," and even "get me the suggestions for other, similar messages."04:13
lifelessjtv: the query plan for this is very expensive - it expects tonnes of IO04:13
jtvYou're telling me… cost me years of my life04:14
lifelessbut just think about all the sql you know now.04:14
lifelessa joke; suggesting that getting this fast had driven some sql knowledge04:15
jtvNot really—it drove a lot of optimization knowledge, but optimization goals have shifted a lot since the page formed.04:15
lifelessjtv: it was humour, not a serious statement04:16
jtvForgive me—I am not well04:17
lifelessjtv: :( jetlag?04:17
jtvHang on—friend in what sounds like serious trouble04:17
wgrantMultiple stores make me sad.04:18
huwshimiHas anyone here tried to set up Launchpad on Natty and had a problem installing python2.6-minimal?04:36
wgrantThat should still work... what's the error?04:37
huwshimiwgrant: http://paste.ubuntu.com/576805/04:38
wgrantlifeless: ^^ you are probably keeping better track of modern Python transitions than I.04:39
lifelesshuwshimi: what does dpkg -S /usr/lib/python2.6/site-packages show04:40
StevenKI suspect huwshimi's output to be the same04:41
huwshimiyeah the same04:41
huwshimibzr-lpreview-body: /usr/lib/python2.6/site-packages04:41
lifelessin which case, remove that package04:41
lifelessthen install python2.6-minimal04:41
StevenKBut fixing bzr-lpreview-body doesn't enter into it?04:42
lifelesssure it does04:43
lifelesstwo separate things though04:43
lifelessunblock, then root cause04:43
huwshimilifeless: That wants to remove python2.6 and some other python stuff, is this going to kill me?04:44
wgranthuwshimi: Use dpkg -r bzr-lpreview-body04:44
StevenKAs root or with sudo04:45
wgrantapt-get remove will try to resolve the dependency mess, dpkg -r won't.04:45
huwshimiStevenK: thanks :P04:45
StevenKlifeless, wgrant: Diff for https://code.launchpad.net/~stevenk/launchpad/populate-spr-changelogs/+merge/52363 looks fine now04:46
wgrantStevenK: OK, will look in a sec.04:46
huwshimiThanks guys, all working now04:47
lifelessjtv: so where are we at on this review?04:51
lifelessjtv: if you're sick, I can get a different reviewer.04:52
wgrantStevenK: Commented.05:00
StevenKwgrant: Rargh! (my fault, but your problem now)05:01
wgrantI presume I had a good reason for doing it.05:02
wgrantBut I don't recall.05:02
wgrantIt was my first tunableloop, so I may have been wrong.05:02
StevenKI'm not sure how to record to skip a given SPR, though05:02
wgrantNeither am I.05:03
wgrantWhich is why i still hold the opinion that having this in garbo is crack.05:03
* StevenK waves his hands furiously05:03
StevenKYou say garbo is crack, lifeless says this is the way05:03
StevenKRock, hard place!05:03
wgrantYes, but I am right :P05:04
StevenKlifeless: ^05:04
jtvlifeless: back... I think my friend must have run out of battery so I can complete the review.  Not that much more I can say to him except as a way to let him distract himself from his problems.  :(05:10
jtvSo I can complete that review.05:10
lifelessjtv: cool, he is ok ?05:10
lifelesswgrant: whats the story05:11
lifelesswgrant: and what does skipping an spr have to do with running it in the garbo05:11
wgrantlifeless: SPRs may fail to extract or be otherwise unimportable.05:11
wgrantlifeless: The job will start from the first SPR without expired files and without a changelog.05:11
wgrantSo say we have 1000 SPRs that fail to import.05:12
wgrantThe job will process those 1000 at the start of every run, then run out of time.05:12
jtvlifeless: No, he's not OK but he's out of immediate danger.  Part of the work every time this happens is to listen to him explain how he's not OK, and then the other part is the uphill struggle to convince him that he's not OK and there must be things he can do about it.05:12
lifelesswgrant: this seems orthogonal to the execution framework05:13
wgrantlifeless: It was designed to be started once.05:13
wgrantGarbo starts it hundreds or thousands of times.05:13
lifelesswgrant: thats a high risk design05:13
lifelessits extremely likely that anything running for more than a few hours will be interrupted05:14
lifelessstash the failed sprs in memcache and move on05:14
wgrantWell, not extremely likely.05:14
wgrantBack when this was written we were deploying once a week at most.05:14
wgrantThe script was meant to work and be run just a couple of times, not to be the most robust, efficient creature in the universe.05:16
lifelessthere is a pretty big spectrum in the middle05:16
wgrantI am curious as to why you say anything running for more than a few hours will be interrupted, though.05:17
wgrantWe have some regular scripts that run for much longer than that.05:17
lifelesssources of interrupts;05:17
lifeless - deploys05:17
lifeless - long running transaction killing05:17
lifeless - machine maintenance05:17
wgrantDeploys: OK.05:18
lifeless - db deploys [forced interrupt]05:18
wgrantLong running transactions: there are none.05:18
lifeless - 'kill X its making things slow'05:18
wgrantSure, and it can easily handle being killed once a day or so.05:18
wgrantBut once every 10 minutes?05:18
lifelessits a 1 second query to find the work to do05:18
lifelesswhy are we expecting failurs?05:19
wgrantBecause some don't have changelogs, some don't unpack any more, and I forget other reasons.05:19
lifelesswhat will be the impact o fthat on derived distros05:19
wgrantMost of them are old, and those that are not old will just not have a base version.05:20
lifelessare you still doing it in increasing id order?05:20
lifelessjust stash the last done id in memcache; 3 line patch05:20
wgrantSounds reasonable.05:20
StevenKlifeless: Uh, I don't know how to do that05:21
wgrantThere's a utility.05:21
StevenKWhich, sadly, is as useful as saying "There's this website, it's called Google."05:22
wgrantWell, a memcache utility probably starts with IMemcache.05:22
* wgrant greps.05:22
stubclient = getUtility(IMemcacheClient)05:23
stubresult = client.set(key, value)05:23
stubif not result: raise RuntimeError('Memcached access denied or memcached servers down')05:24
stubvalue = client.get(key)05:24
StevenKwgrant: To answer one of your points, I'm using the master store since everything else in garbo is.05:34
StevenKstub: That's excellent, thanks.05:36
jtvlifeless: with apologies for the delay (my friend found a phone charger) I just approved your branch.05:39
jtvwallyworld: I initially typed my comment for your MP into the wrong window, so that it now defaces an unrelated bug.  Hopefully it's also on your MP now.05:40
jtvAnd now, food.05:40
=== jtv is now known as jtv-eat
lifelessjtv-eat: thanks!05:58
lifelessstub: https://code.launchpad.net/~lifeless/launchpad/bug-730391/+merge/52370 - I can have review?05:58
=== jtv-eat is now known as jtv
jtvStevenK: something I find myself in doubt about now…  I've done the code to create a bunch of DSDs in Needs Attention state, but do I need to create DSDJs for those _as well_?06:17
lifelesswgrant: could you do me a favour?06:18
lifelesswgrant: with timeout and oops bugs, always put the oops report key - the page id - in the title.06:18
lifelesswgrant: e.g. bug 72883606:18
_mup_Bug #728836: copyBinariesTo query count scales by number of binaries <oops> <timeout> <Launchpad itself:In Progress by wgrant> < https://launchpad.net/bugs/728836 >06:18
lifelesslooks like a dupe of bug 57545006:19
_mup_Bug #575450: Archive:+copy-packages nearly unusable due to timeouts <lp-soyuz> <ppa> <timeout> <Launchpad itself:In Progress by wgrant> < https://launchpad.net/bugs/575450 >06:19
wgrantlifeless: But which one? that has three :(06:19
wgrantlifeless: It is part of 57545006:19
lifelesswgrant: list em all06:19
wgrantBut 575450 is big.06:20
wgrantSo I wanted a separate one.06:20
wallyworldjtv: i was picking up the kid from school before but got your comments and am about to push up changes06:21
stublifeless: r=stub with minor bits06:50
wgrantCould someone review https://code.launchpad.net/~wgrant/launchpad/bug-728174/+merge/52374?07:26
lifelesswgrant: so, on bugs - I think its fine to do new bugs07:27
wgrantlifeless: I see that you tend to close the main one when the first fix is done.07:27
lifelesswgrant: I'd just like it to be a little easier for ursula and diogo and others that don't have the entire callgraph internalised, to see that there are related things.07:27
lifelesswgrant: What I do - yes. Uhm, I generally do that because the data is changed by the first fix.07:28
lifelesswgrant: like, for bugtask:+index it will be 7 or 8 or more distinct fixes before we're flat07:29
lifelessthese are different to use case bugs where there is a specific use case with lots of rationale etc07:29
wgrantBut I treat them differently if a user has filed and subscribed to the timeout.07:30
wgrantBecause the bug is not just for us.07:30
wgrantIt is for them too.07:30
lifelesswgrant: I'm happy either way07:31
=== Ursinha is now known as Ursinha-afk
lifelesslike i say, what I want is better connections between what folk see in the oops reports and the open bugs07:31
lifelessso that its easier to avoid duplicates and overlappying work07:31
lifelesswgrant: why are you using ISlaveStore ?07:33
wgrantlifeless: getAllLanguages already did.07:33
lifelessso that leads to two Person objects in memory, for instaance.07:34
lifelessdon't destabilise things, but generally ISlaveStore should never be used. Ditto IMasterStore07:35
wgrantWe often use ISlaveStore...07:36
lifelesswe've had traumatic timeouts because of that.07:36
lifelesseager load from one store, get object from the other, dereference.07:37
lifelesswe should, I think, change things to only ever have one store connected.07:38
wgrantThat sounds reasonable.07:38
wgrantI shall change this to use the default store, as there is no clear benefit, you object, and it makes tests easier.07:38
lifelesswgrant: there is a risk something else will barf at you from ec2. So its up to you whether you change this or not.07:39
wgrantlifeless: If it does then I will kill it :)07:39
lifelessok, two timeout fixes playing today, and a third landed in the morning.07:41
lifelessnot too bad.07:41
lifelessstub: I'd like a brief voice chat about fast db deploys; got some time?07:42
=== vila_ is now known as vila
wgrantI want Python 2.7 :(07:47
wgrantSet literals, among other things.07:48
StevenKYou can't import it from __future__?07:49
wgrantNo, they are a new backport in 2.7.07:49
jtvwallyworld: approved with notes07:53
lifelessjtv: could you comment on and triage bug 729520 - i'm out of my knowledge zone08:14
_mup_Bug #729520: Translations changed in Ubuntu should be marked as such, not as current <Launchpad itself:New> < https://launchpad.net/bugs/729520 >08:15
lifelesswgrant: https://bugs.launchpad.net/launchpad/+bug/69035608:20
_mup_Bug #690356: The "xubuntu" packageset is missing in the lp.packagesets collection (LP API) <bugjam2010> <lp-soyuz> <packagesets> <qa-needstesting> <Launchpad itself:Fix Committed by wgrant> < https://launchpad.net/bugs/690356 >08:20
=== henninge changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | firefighting: - | On call reviewer: henninge | https://code.launchpad.net/launchpad-project/+activereviews
wgrantlifeless: Sorry, was at dinner, qa'd it, noticed you'd already tagged it, then saw your ping.08:35
wgrantSort of the wrong order.08:35
stublifeless: back08:35
lifelessstub: hey, cool08:36
lifelessstub: now good ?08:36
stublifeless: irc or skype if you want to put up with the power tool noise08:36
lifelessI heard you say hello08:37
stublifeless: no sound from you - checking audio here08:37
wallyworldjtv: thanks for the review and tip about assertContentEqual (which i didn't know about). i'll make the necessary tweaks08:46
jamhi wgrant08:51
jamand lifeless08:52
jtvlifeless: henninge needs to know about that bug.08:53
wgrantMorning jam.08:54
wgrantjam: We may be LOSAless after the deployment :/08:54
* henninge pumps up the volume to hear pings08:59
henningejtv: Hi! which bug?09:00
adeuringgood morning09:00
jtvhenninge: hi!  bug 72952009:00
henningeMoin abel09:00
jtvand good morning adeuring :)09:00
jamwgrant: well that sucks. I was hoping to hear better news. I'm a bit surprised that they trust general rollouts without a LOSA available.09:01
jamIs it just that they make sure to have one *during* the deploy? And assume they will catch things then?09:01
jmllifeless: hello09:01
wgrantjam: There will be one during the deploy.09:01
wgrantjam: And hopefully spm will be well again by then :)09:02
jamwgrant: I know you have to have one *during*. My point is why there isn't one *right after*, in case things go wrong. They just trust that the only problems will be the deployment itself?09:02
lifelessjml: hello09:02
lifelessjml: skype?09:02
jmllifeless: sure. just call me.09:03
lifelessjml: says you re offline09:03
jmllifeless: lies09:04
jmllifeless: it's having trouble signing in09:04
jtvhenninge: read the bug?09:05
henningejtv: yes, the upstream project has a template ...09:05
henningeso that behavior sound correct09:05
lifelessjml: should I call your phone or mobile then?09:05
jtvhenninge: Ahhh… I hadn't realized there was upstream translation!09:05
jmllifeless: ok.09:05
henningejtv: but it's a testcase I created two years ago. Disabled it now.09:06
henningejtv: and I just realized I that that won't help because the code does not check if a template is deactivated ...09:08
henningejtv: you actually pointed me to that but I forgot to implement it.09:08
* henninge goes to move template out of the way completely.09:08
jtvhenninge: are you sure though?  Maybe you used one of those methods that ignore deactivated templates.09:08
henningejtv: no, it's a storm query. pretty obvious09:09
jtvhenninge: I'm on a feature rotation now, but robert needed someone to comment on & triage that bug.09:09
henningejtv: I will leave a comment.09:10
jtvGreat, thanks!  I'm very relieved that this is not a big design problem.09:10
henningejtv: what was that obsolete series called again, that we moved template like that to?09:11
henninge"too many matches" ...09:12
henningejtv: but that's it09:12
jtvThe pyromaniac in me whispers "there's no such thing as too many matches when it comes to obsolete junk"…09:13
lifelessjml: https://launchpad.net/ubuntu/+source/apport09:18
=== soren_ is now known as soren
jmllifeless: lp:principia09:42
=== SpamapS_ is now known as SpamapS
jmllifeless: sound debugging09:45
lifelesscan you hear me?09:45
lifelessif so, kick twice09:45
jam /kick /kick09:49
=== gmb` is now known as gmb
wgrantjam: Will you be able to look at bug #726985 soonish, or should someone else? It'll be in the top 10 exceptions on Wed.10:54
_mup_Bug #726985: codebrowse OOPSes with GeneratorExit when connection closed early <Launchpad itself:Triaged> < https://launchpad.net/bugs/726985 >10:54
jamwgrant: if that's a request, sure10:56
jamwgrant: you create it by doing a HEAD on a 404 page, right?10:57
jamdo we know how they are getting OOPS in production?10:57
wgrantjam: It seems to always be large files in production.10:57
wgrantHmm. Always binary URLs, actually.10:57
wgrantWhich shouldn't be rendering...10:57
wgrantOh, it's /download, so that's OK.10:58
jamwgrant: so basically, people who are ^Cing binary downloads in the middle of streaming are causing this OOPS10:59
wgrantjam: I suspect so.10:59
jamno big deal, just trying to understand10:59
jameasy to reproduce a couple of ways, was hoping for something concrete10:59
jam90% of loggerhead doesn't stream10:59
jamit directly calls start_response().write()10:59
jamrather than 'yield' the content11:00
wgrantAh, that makes more sense now.11:00
dpmhi henninge_, the unity-2d guys are implementing i18n and using LP for translations. Unity 2D is written in Qt but using a conversion of the Qt format to gettext for translations, so they can be done in LP. A question has come up though, and it is whether qt-format-plurals are supported in LP. I think they should be, as they are supported in gettext itself, but I just want to confirm. They look like this:11:50
=== henninge_ is now known as henninge
LPCIBotProject db-devel build #424: FAILURE in 5 hr 16 min: https://hudson.wedontsleep.org/job/db-devel/424/11:58
henningedpm: I take it that that is how it is exported to gettext.11:59
dpmhenninge, yeah11:59
henningedpm: because it looks just like gettext11:59
dpmexactly, the only "difference" is that normally you don't get the %n in translations coming from most gettext packages12:00
dpmI know we support this in #kde-format IIRC, but I want to double check we support it for qt-format-plural as well, so that I can give the Unity guys a proper answer12:01
henningedpm: the %n has nothing to do with plurals.12:01
henningethat's c-format12:02
henningedpm: so to be correct gettext, the flags schould contain the "c-format" flag.12:03
deryckMorning, all.12:04
dpmhenninge, hm, no, I don't think that's c-format, hence the question. c-format strings contain specifiers like %d or %s, but not %n, I think12:04
dpmthat's why they use a separate format specifier in gettext12:04
henningedpm: argh, got me!12:04
henningeyes, you are right12:04
henningedpm: But that does not matter very much for the plurals display in launchpad.12:05
henninges/very much/at all/12:05
dpmhenninge, yes, that's right, so I guess I should rephrase the basic question as whether qt-format is supported (nevermind about qt-plural-format)12:06
henningedpm: we use the standard gettext library to check the format of such strings. I think the only problem could be that bad translation strings would not be detected.12:07
henninge"bad" meaning a mismatch in the identifiers.12:08
dpmhenninge, ok, gotcha, thanks12:08
henninge.. if the gettext library does not know qt-format.12:08
dpmit does, it does, it does: http://www.gnu.org/software/gettext/manual/gettext.html#qt_002dplural_002dformat12:09
dpmerr, copy paste fail, too many "it does" there12:09
=== Ursinha-afk is now known as Ursinha
* jml -> lunch13:04
=== benji changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | firefighting: - | On call reviewer: henninge, benji | https://code.launchpad.net/launchpad-project/+activereviews
gmbHi henninge, benji: Can I get a review for https://code.launchpad.net/~gmb/launchpad/make-sub-link-nothing-aware-bug-721410/+merge/52409 please?13:12
henningegmb: otp atm, lunch after that, stand-up after that. I can look at in 90 min.13:13
benjigmb: I'll take it unless henninge is overcome with the need to do so.13:13
benjilooks like I'm the lucky winner13:13
gmbbenji: Cool, thanks.13:15
=== henninge is now known as henninge-lunch
benjigmb: review done13:40
gmbbenji: Thanks13:41
gmbbenji: Aha, clever irony in review comments; I like it.13:41
sinzuijcsackett: ping14:29
jcsacketthello sinzui.14:29
sinzuiWill you be watching #launchpad this morning?14:30
jcsackettsinzui: i will; did my setting of channel info not take?14:35
jcsacketti see that it did not.14:35
sinzuijcsackett: maybe topics are knackered for me again14:35
jcsackettsinzui: no, it looks like i didn't properly save the change to info.14:36
deryckhenninge-lunch, wanna chat for a couple minutes now?14:44
=== henninge-lunch is now known as henninge
henningederyck: sure14:45
henningederyck: https://launchpad.dev/netapplet/+configure-translations14:55
sinzuileonardr: do you have time to review https://code.launchpad.net/~sinzui/lazr.restful/json-not-xhtml-0/+merge/5214114:57
leonardrsinzui, sure14:57
bigjoolsheh, thanks benji :)14:59
bigjoolsdidn't get around to asking for the review, but you got to it anyway, fantastic15:00
leonardrsinzui: and maybe you'll have some insights into https://code.launchpad.net/~leonardr/launchpad/bug-271029/+merge/52423? otherwise i'll give it to ocr15:01
benjiI'm like the genetically engineered kid's immune system in that episode of Star Trek: TNG, I don't wait for the microbes to come to me, I go out and get them. ;)15:02
leonardrsinzui, i don't understand the change you made to test_webservice.py. did you just disable the test?15:06
leonardri think you should change it so it tests the actual behavior15:06
leonardrunless this is something we plan to bring back soon15:06
leonardrapart from that, it looks right15:11
sinzuileonardr: I did disable it. if you recall I suggested to change the name to start with disabled instead of test. I think I mis understood you I thought you said to remove test_ only15:11
leonardrsinzui: no, i meant to change the behavior of the test. unless we're going to go back to the old behavior someday, the test should be changed or removed15:12
sinzuiI will change the behaviour15:12
jmlsinzui: did you want to have a call today?15:14
sinzuijml: I have nothing to talk about today15:14
jmlsinzui: good good :)15:14
leonardrsinzui, do you want to take a look at my branch or shall i give it to henninge/benji?15:17
sinzuileonardr: I can look at your branch now15:17
leonardrgreat, i think you will have good opinions on the topic15:18
leonardrargh, my push is still happening? what's the deal?15:18
leonardrwell, i'll tell you when it finishes. it seems almost done15:18
sinzuileonardr: I updated the test based on the subsequent test in the module: https://code.launchpad.net/~sinzui/lazr.restful/json-not-xhtml-0/+merge/5214115:22
leonardri seem to be pushing the entire launchpad tree for some reason15:22
leonardrsinzui: r=me15:23
sinzuithank you15:23
dobeyleonardr: ping15:31
leonardrdobey, hi15:31
dobeyleonardr: hey, am having some trouble with launchpadlib 1.9.715:32
dobey2011-03-07 10:30:07 ERROR    An error occurred trying to merge lp:ubuntuone-storage-protocol: 'NoneType' object has no attribute 'landing_candidates'15:32
dobeyleonardr: ^^ tarmac keeps failing with that now. but it works fine with 1.6.215:32
leonardrdobey: can you find the launchpadlib code in tarmac and paste it to me?15:33
dobeyso the aprt that's failing is doing "for entry in lp_branch.landing_candidates"15:34
leonardrdobey: how is lp_branch set?15:37
dobeyleonardr: lp_branch = self.launchpad.branches.getByUrl(url=branch_url)15:37
leonardralso, my generic advice: run 'import httplib2; httplib2.debuglevel=1' at the beginning of the code and paste me the http requests made15:37
leonardrand where does branch_url come from?15:37
leonardrif the versions are mismatched, that'll probably fail15:38
dobeythe config. is "lp:foo"15:38
leonardrok, no version there15:38
leonardrshow me the http requests being made. then add a "version='devel'" argument to the launchpad constructor and see if it works. then try the same with version="beta"15:39
leonardrsinzui: https://code.launchpad.net/~leonardr/launchpad/bug-271029/+merge/52423 is ready to review15:39
leonardrsinzui: i took out the part i really wanted your opinion on, so i think i can give it to henninge or benji15:45
leonardrlet me know if you'd like that15:45
dobeyleonardr: oh hrmm15:46
dobeyleonardr: it seems that launchpadlib 1.9.7 is trying to connect to staging by default15:46
dobeyHost: api.staging.launchpad.net15:46
leonardrdobey: i believe that's true of older versions as well15:46
leonardrbut, one thing i mentioned in the upgrade email is that all clients need to start explicitly specifying their host15:47
leonardrto avoid exactly this problem15:47
dobeywe WERE doing that already15:47
=== henninge changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | firefighting: - | On call reviewer: benji | https://code.launchpad.net/launchpad-project/+activereviews
dobeyleonardr: we're using LPNET_SERVICE_ROOT which is https://api.launchpad.net/15:48
leonardrhm, so you are passing in production and it's being ignored15:49
gary_posterhenninge, benji: I'd approaciate a review of https://code.launchpad.net/~gary/launchpad/bug723999-2a/+merge/52427 when one of you has some time available.  Fair warning: I'm afraid I may be prolific in my review requests today.  I certainly intend to be, at least.15:49
leonardrhow is the Launchpad object being created?15:50
leonardrdobey -^15:50
gary_posteroh, well, nm on henninge :-P :-)15:50
leonardris it using login_with? get_token_and_login?15:50
dobeyLaunchpad(credentials, SERVICE_ROOT, self.config.CACHE_HOME)15:50
benjigary_poster: I'll take it.15:50
* henninge looks up prolific15:50
henningegary_poster: sorry15:50
gary_posternp henninge! :-)15:51
dobeyleonardr: it uses get_token_and_login() only if there are are no existing credentials15:51
dobeyleonardr: looks like perhaps the API was broken for Launchpad() instantiation15:51
gary_posterthank you benji.  to state the obvious, I know you are busy, so if you don't get to all the branches I throw your way today, of course I will understand.15:51
sinzuileonardr: lp thinks that you more than just removed the all the changes15:56
dobeyleonardr: so it's because new non-kwargs were added to the init, and tarmac was relying on position for 2 things that were kwargs. :-/15:58
abentleyleonardr: lifeless has asked me to ensure that the stuff I export is only available on the devel version.  Is there a way to prevent webservice_entries from being exported in older versions?15:58
abentleyleonardr: And for exported attributes, does this mean I need to declare that they are not exported in every other version?15:58
gary_posterbenji, a large but hopefully easy branch (it just moves tests from one file to another): https://code.launchpad.net/~gary/launchpad/bug723999-2b/+merge/5242916:18
benjigary_poster: k16:18
leonardrdobey: yes, i'm pretty sure i talked to the tarmac developer about this16:22
leonardrtarmac should not be storing its own credentials anymore16:23
dobeyrockstar: ^^ ?16:23
dobeyleonardr: the credentials storing isn't the problem afaict. it's the API breakage. :-/16:24
leonardrdobey: the api breakage happens to apps that try to store their own credentials and instantiate Launchpad objects from them16:24
leonardrif i had known about this, i wouldn't have changed the constructor arguments, but now that it's broken i'd rather fix the apps, since they need to change anyway16:25
rockstarleonardr, dobey and I are "the tarmac developer."  :)16:25
rockstarleonardr, we stored our own credentials because launchpadlib was storing them in a place that kees said was a bad place...16:26
leonardrrockstar: ah, tarmac isn't in ubuntu. that's why i didn't contact you16:26
rockstarleonardr, yeah, I missed the boat in Natty.16:26
leonardrrockstar: ok, the new system is kees-approved, so you can use it without worry16:27
rockstarleonardr, ack.16:27
rockstardobey, I still have leonardr's email with the changes we need to make.16:27
dobeywhat does the new system do?16:27
leonardrabentley: no, there's no way to prevent an entry from being exported. i need to add that16:27
abentleyleonardr: I see.16:28
leonardrfor exported attributes, you need to set exported=False by default, and pass in a version setting, something like [('devel', dict(exported=True)]16:28
leonardri also need to add syntactic sugar to make that easier16:29
leonardrbasically, the original design was that almost everything would be available in earlier versions unless it caused a huge problem16:29
leonardrand the new design is that nothing is available in earlier versions unless it was originally present there16:29
abentleyleonardr: Hmm.  From the docs, I thought that exported=False set the first version, not a default.16:29
leonardrabentley: it's also a default, because later versions inherit from the first version16:29
leonardrso exported=False in beta means exported=False in 1.0, and it would mean exported=False in devel except for the override16:30
abentleyleonardr, aha!16:30
leonardrdobey: the new system stores credentials in the gnome keyring/kde wallet16:30
dobeyleonardr: what if there is no keyring?16:31
leonardrdobey: then it's stored encrypted on disk16:31
leonardrdobey: there is something of an unchallenged assumption that IF you are in a gui environment you have some kind of keyring available16:32
leonardrsince decrypting the encrypted file requires that you type in a passphrase into the current terminal16:32
dobeyleonardr: tarmac is not meant to be run generally in a gui environment. it is a service run by cron.16:32
leonardrdobey: in that case, you want to use the 'service run by cron' mechanism16:33
leonardrthat's in the email as well16:33
dobeyleonardr: so any user interaction is not acceptable for it16:33
leonardrthere will be none16:33
dobeyok, i don't have the email16:33
leonardryou will pass in the location of an unencrypted credentials file, and launchpadlib will read/write it16:33
leonardrso you can probably use the same file you use today16:33
leonardri'll forward oyu the email16:34
dobeyand we will still need to support both methods in tarmac16:34
dobeyi think16:34
leonardrdobey: what do you mean by both methods? when there are existing credentials and when there aren't?16:35
dobeyleonardr: i mean "the current way tarmac works"16:35
dobeyleonardr: as we often run it on lucid also16:35
leonardrdobey: if you switch to passing in the unencrypted credentials file it should work on both lucid and natty16:36
leonardrsinzui: diff is pasted to https://code.launchpad.net/~leonardr/launchpad/bug-271029/+merge/5242316:44
leonardrdobey: if credentials_file doesn't work for you, let me know16:45
benjigary_poster: both of your branches are reviewed16:45
gary_posterawesome, thanks benji.16:46
gary_postermore coming ;-)16:46
dobeyleonardr: ok16:46
LPCIBotYippie, build fixed!16:48
LPCIBotProject db-devel build #425: FIXED in 4 hr 50 min: https://hudson.wedontsleep.org/job/db-devel/425/16:48
sinzuithanks leonardr16:48
sinzuileonardr: r=me, take a look at bug 579602 before you land. I think you fixed it16:58
_mup_Bug #579602: Trying to getBranches of a source package using the API oopses with ForbiddenAttribute <api> <lp-code> <oops> <Launchpad itself:Triaged> < https://launchpad.net/bugs/579602 >16:58
bigjoolssinzui: we're still doing ui reviews, right?17:11
sinzuibigjools: voluntarily.17:11
bigjoolsok, thanks.17:11
bigjoolswho's a valid reviewer for that nowadays? :)17:12
sinzuibigjools: um, I think it is still me and henninge. I have been passing UI reviews to huwshimi17:17
sinzuibigjools: you can always get two engineers to agree that the UI is good17:17
bigjoolsah I will get rvba to push his review to huwshimi17:18
leonardrsinzui: i think i stopped the oops, but the bug isn't that there's an oops--i think that code should work17:24
sinzuileonardr: okay17:26
LPCIBotProject devel build #512: FAILURE in 5 hr 4 min: https://hudson.wedontsleep.org/job/devel/512/17:31
LPCIBotProject windmill build #21: FAILURE in 1 hr 4 min: https://hudson.wedontsleep.org/job/windmill/21/17:31
LPCIBotProject db-devel build #426: FAILURE in 43 min: https://hudson.wedontsleep.org/job/db-devel/426/17:31
=== deryck is now known as deryck[lunch]
gary_posterbenji, https://code.launchpad.net/~gary/launchpad/bug723999-2c/+merge/52448 is ready for you (except for the diff, which will presumably arrive anon), but I'm going to go get some lunch.18:01
jcsackettbigjools: are you (or can you point me to someone) to talk to in regards to https://answers.launchpad.net/launchpad/+question/148005 ?18:05
dobeyrockstar: https://code.launchpad.net/~dobey/tarmac/login-with/+merge/5245118:09
leonardri need some help from someone who knows launchpad bugs. preparing a pastebin...18:28
leonardri changed createTask so that it calls valid_upstreamtask to validate, and that's breaking some test setup18:29
leonardris the test setup technically invalid, or did i make a bad change?18:29
leonardrsinzui, maybe you know, i think you helped me with this in the first place18:29
* sinzui looks18:36
leonardrsinzui: i changed the code so that the invalid bugtask was created first, and got the same error18:40
leonardrit seems okay to create another bugtask for a product if the earlier one was marked invalid?18:40
sinzuileonardr: I suspect you added a validate method, but our ORM needs an exception to set things up. So we need to exit a method early or return True for validate18:41
sinzuiThis happened to me recently. What field was I changing?18:41
sinzuiah description fields cannot contain only white-space18:42
leonardrsinzui: i added a _call_ to a validate method within createTask18:42
leonardri'm not sure what you mean by "exit a method early..."18:42
sinzuileonardr: when working on the StrippableText field that lots of things descend from, I broken the initialisation of a lot of objects because the ORM create empty objects, then sets the data. The field should only validate or normalise data when when values are set (not inited). I used a check for current state and the new value to be certain I should proceed. I know there are fields that set a marker in init to show nothi18:47
sinzuing is set.18:47
leonardrsinzui: i'm way out of my depth here, but it seems that this validation _should_ be run upon creation18:48
leonardrit seems like the test is doing something by manipulating the orm that should not be possible18:48
leonardrif the rules are to be applied consistently18:48
sinzuileonardr: if you mean creation means all the data is loaded, then yes18:48
sinzuistorm/sqlobject creates an empty object, then puts data in the fields, and they fire in sequence...before all the data is there to validate an invariant state18:49
sinzuileonardr: can you pastbin your change?18:50
sinzuiI give up18:50
leonardrsinzui: sure18:50
abentleysinzui: Pastbin was a rejected name for The History Channel :-)18:51
leonardrhere's te whole thing: http://pastebin.ubuntu.com/577120/18:51
leonardrthe relevant code is on line 16618:51
leonardri think the problem is simpler than you're saying18:51
leonardri started calling a certain method from the create method18:52
sinzuiThey rejects The Nazi Channel, but decided to run Nazi only programming anyway18:52
leonardrthis method says "you can't have two bugtasks for the same bug for the same product, no exceptions"18:52
leonardrso the test that creates two bugtasks for the same bug for the same product fails, even though one of the bugtasks is invalid18:52
sinzuiThe International History channel's real name is Alien Encounters Channel18:52
sinzuileonardr: well, I would expect a failure in that case. The DB constraint does not look at status, it only looks at bug, distro, dseries, sourcepackagename, product, and pseries. Maybe that test is totally bugus18:54
sinzuiexcellent, I worked totally bogus into a sentence.18:54
leonardrsinzui: here's just the test that fails: http://pastebin.ubuntu.com/577123/18:55
sinzuiThe example i see is distro and then a distro + source package18:55
leonardryou think that deserves to fail?18:55
=== deryck[lunch] is now known as deryck
leonardrhere's the original, not modified by me:18:56
sinzuileonardr: these bug tasks are different18:57
leonardrsinzui: am i calling valid_upstreamtask with the wrong argument?18:58
leonardr target = product or productseries or distribution or distroseries18:58
leonardrshould i be going in the other direction?18:58
leonardrtarget = distroseries or distribution or productseries or product18:58
sinzuileonardr: but I can imagine that if validate is called after the distro is set, but before the spn is set, you will get the error18:58
leonardrsinzui: i don't see what this has to do with validate at all18:59
leonardrthe exception is raised by a method that i call explicitly18:59
leonardri think we are talking past each other18:59
sinzuiI have not seen the lines where you changed to cause the error yet18:59
sinzuiwhere do you call valid_upstreamtask, and what is the context lines before and after it19:00
leonardr        if not milestone:19:00
leonardr            milestone = None19:00
leonardr        # Raise a WidgetError if this product bugtask already exists.19:00
leonardr        target = distroseries or distribution or productseries or product19:00
leonardr        valid_upstreamtask(bug, target)19:00
leonardr        if not bug.private and bug.security_related:19:00
leonardrthe BugTask object is not created until much further down in the method19:00
leonardrhere's the entire method with plus signs by the code i added19:01
lifelessjml: I forgot two things; paralel test lep & high frequency db deploys that I wanted to speak with you about19:01
sinzuiwhat no, spn? that definitely will cause this error. The second example in the test is not getting the sourcepackagename=ubuntu_evolution.sourcepackagename that was passed19:02
leonardrwhat does spn stand for?19:03
sinzuisource package name19:03
sinzuiA bug in a distro can affect dozens of packages, so will be represented by dozens of bug tasks19:04
sinzuiall ubuntu, may be all the same distro series, but each has a unique source package name19:04
leonardrsinzui: the test has changed back and forth quite a bit since i started talking to you. let me paste the original version and ask you to walk me through it19:04
leonardrso, you are saying that the call to createTask(sourcepackagename=ubuntu_evolution.sourcepackagename)19:05
leonardrat some point the source package name is lost19:05
sinzuileonardr: I still see sourcepackagename=ubuntu_evolution.sourcepackagename in all examples of the test, but the fragment of code does19:06
sinzui    target = distroseries or distribution or productseries or product19:06
sinzui    target = distroseries or distribution or productseries or product19:06
leonardrso you're saying that sourcepackagename is also an acceptable target19:06
sinzuiclearly target is a composite maybe we need it to be tuples19:07
leonardrsinzui: it's not clear to me at all. are you saying that the 'target' might be some combination of, eg. sourcepackagename and distroseries?19:07
sinzui(ubuntu, ), (ubuntu, natty), (ubuntu, natty, evolution), (ubuntu, evolution) (evolution-project) are all valid combinations for bugtasks, but I see target is just one items by order of precedence19:08
sinzui^ leonardr that is what the database sees for the unique constraint19:09
leonardrsinzui: valid_upstreamtask takes a 'product' and invokes searchTasks() on the product19:10
leonardri'll paste the code19:10
leonardrit sounds like this code is too specific to be called from createTask19:11
sinzuiI suspect I know what is a mis before even looking19:11
* sinzui looks19:11
sinzuiyes, we are checking one of many conditions19:12
sinzuileonardr: I think the issue many years ago was that the four types were assign targets to have enough information to know everything, but that is not true for an SPN. It is just a name, we do not know what distro it is, and we do not know if the distro publishes it19:13
sinzuileonardr: we can start making sens of this by fixing the signature: valid_upstreamtask(bug, product) => valid_upstreamtask(bug, bug_target)19:14
leonardrok, i understood that19:15
sinzuiyuck. we cannot search an SPN's tasks19:16
leonardrsinzui: do you think it would be possible now to use the website to create multiple bugtasks for a single spn?19:17
leonardror would that finally be caught at the database level?19:17
sinzuileonardr: I think empty() means return early. If this is a distro or distro series, we need to see if any of the bug tasks have the same sourcepackagename as the spn passed19:17
sinzuileonardr: we will get a DB ConstraintViolationError after the call without a stack trace. We do need to verify the spn is unique19:19
* sinzui looks for SPN bug target19:19
sinzuileonardr: the signature is a real issue. I *think* we can get past the issue by getting a DSP or SP for the D or DS respectively. Include that in the target = sp or distroseries or distro line19:22
sinzuiSo while I *do* think we need to fix the signature to say bug_target, the real fix is to get the correct target in the callsite19:24
* sinzui hacks19:24
sinzuileonardr: I think this is what createBugTask needs to do: http://pastebin.ubuntu.com/577145/19:28
leonardrsinzui: ok, i think i have something similar, i'll check19:29
sinzuiI wonder if we have an adapter19:29
leonardryeah, i have something equivalent19:31
leonardri'll paste what i have19:31
leonardrsinzui: http://pastebin.ubuntu.com/577149/19:33
sinzuileonardr: +119:35
leonardrthat makes _that_ test work, let me see about the others19:35
leonardrlooking good...19:47
leonardrok, now down to 2 test failures...19:55
gary_posterbenji, getStructuralSubscriptionsForPerson was not suppsed to be in this branch.  Sorry for the confusion.  It goes in the next (and hopefully last) branch20:01
lifelessmatsubara_: ping20:01
gary_posterI'm going to remove ans push20:01
lifelessUrsinha: ping (the Bug:xyz patch didn't seem to be live on qatagger last night)20:02
benjigary_poster: ok; just about done reviewing that branch20:02
gary_postercool thanks benji20:02
leonardrsinzui, i wrote this code, but i don't remember what it means anymore. can you sanity check it for me?20:08
benjigary_poster: review done, including a solution to your lint mystery20:08
leonardrit's not raising an exception where it should20:08
gary_postersweet, thanks benji!20:08
leonardrbut i don't know if the 'conjoined_bugtask' actually is a conjoined bugtask, because i don't know what a conjoined bugtask is20:08
sinzuileonardr: conjoined_bugtask is a temporary state where a task's series (distro or product) happens to be the development series20:10
lifelessits a series specific task that also has a project scope task20:10
lifelessso there are two related tasks and its shown as one in the UI20:10
lifelessits a significant chunk of complexity :(20:11
sinzuileonardr: This is very esoteric knowledge. For ubuntu, a task is conjoined only for 6 months20:11
sinzuileonardr: since you use product.development_focus, I expect this test to work if there is also a bug for the product20:12
leonardrit doesn't looks like there is20:12
leonardrconjoined_master is None20:12
deryckabentley, thanks for sending that packaging permissions email.20:12
sinzuileonardr: I think this subtle change will work: target=bugproduct.development_focus20:12
abentleyderyck: np20:13
sinzuiI think the factory created a product for the bug, we want to reuse it20:13
sinzuileonardr: I think you can make the the reviewer of your branch. I think I can now skip the cover letter and just read the code20:16
leonardrok, we just have some failures in patches-view.txt...20:18
lifelessderyck: had you seen http://www.pivotaltracker.com/features20:21
derycklifeless, no, I haven't seen that.  looking now.20:21
=== lifeless changed the topic of #launchpad-dev to: Performance Tuesday! | https://dev.launchpad.net/ | firefighting: - | On call reviewer: benji | https://code.launchpad.net/launchpad-project/+activereviews
=== mwhudson_ is now known as mwhudson
derycklifeless, ah, interesting.  it's not what I thought on first glance.  It's basically a scrum board, right?20:29
lifelesslooks like20:29
lifelessbug cast as a bugtracker replacement (which they effectively are)20:29
lifelessI -love- the infinite resolution on ordering20:30
* lifeless wants this for bug priority.20:30
lifelessdrag n drop, done.20:30
deryckyeah, that's nice.20:30
lifelessabentley was suggesting something like this for lp way back20:30
deryckbut their model is a set of cards.  not bugs.20:30
lifelessderyck: right, it is a different take on the whole problem20:30
jcsackettmy last job briefly used pivotal. it was a nice tool.20:31
derycklifeless, right.20:31
deryckyeah, it looks like a nice tool.20:31
leonardrsinzui: ok, help me out one more time20:31
deryckjcsackett, did you use it as a bug tracker?20:31
leonardrpatches-view contains this code:20:31
leonardr    >>> make_bugtask(20:31
leonardr    ...     bug=bug_a, target='hoary', target_is_distroseries_name=True)20:31
jcsackettderyck: eh, sort of. more of an issue tracker, i suppose?20:31
leonardrthat looks up the 'hoary' distro series and calls factory.makeBugTask20:31
jcsackettif you're doing things in the agile card mode, it's less about bugs and more about "user stories."20:32
deryckjcsackett, yeah, it looks like project tracking, more than bug tracking to me.20:32
leonardrbut factory.makeBugTask doesn't like being passed a distro series20:32
leonardr        if IDistroSeries.providedBy(target):20:32
leonardr            # We can't have a series task without a distribution task.20:32
leonardr            self.makeBugTask(bug, target.distribution)20:32
jcsackettderyck: yes.20:32
leonardrso instead of creating a bugtask for 'hoary', we create one for 'ubuntu', and we trigger the validation error20:32
derycklike what we use Kanban for.20:32
lifelessthats the conjoined master bit20:32
jcsackettderyck: similarly; though we're sort of using bugs as project tracking as well.20:32
deryckjcsackett, oh we definitely are.20:33
leonardrlifeless: i think it's supposed to add the conjoined master and then call addTask *again* to add the slave20:33
leonardrthe problem is that adding a conjoined master when there's already a bugtask for 'ubuntu' now raises an exception20:33
lifelesswhat did it do before (and what bug are you working on , to give me context)20:34
leonardrlifeless: the context is my fix to bug 106338: https://code.launchpad.net/~leonardr/launchpad/bug-10633820:34
_mup_Bug #106338: Editing a bug targeted to a release crashes if you directly edit the untargeted task  <api> <lp-bugs> <oops> <Launchpad itself:Triaged by leonardr> < https://launchpad.net/bugs/106338 >20:34
leonardri added to createTask a call to valid_upstreamtask(), so that validation code previously called only in the view would be called everywhere20:35
sinzuileonardr: I think the issue here is the factory is wrong. It could be smart enough to do the right thing. It onyl has the features that engineers needs at the time20:35
leonardrsinzui: ok, that's what i was thinking too20:35
leonardrso we should see if the master already exists?20:36
sinzuiLots of factory methods were creating objects with impossible series. I fixed them20:36
sinzuileonardr: yes, the factory should check and make a decision.20:36
lifelessI concur20:36
leonardrok, help me out. can i adapt the code from valid_upstreamtask to see if there's already a bug targeted to a given target, or is there a simpler way?20:37
leonardri'll write some cheap code and you can tell me how to fix it20:39
lifelessleonardr: 'try: ... except:'20:40
lifeless(though you'll want an actual type in the except clause)20:41
sinzuiI do not this the try except will work because the exception will be a DB IntegrityError contstaint violation. We need to look before we leap with the ORM20:42
leonardrmy cheap code goes through the existing tasks20:42
lifelesssinzui: oh :)20:43
lifelesssinzui: ok20:43
lifelessleonardr: there is a getBugTask(target) method on bug.20:44
leonardrlet's try it...20:44
jcsackettleonardr: can i bug you for a sec regarding 404s on lplib?20:45
leonardrjcsackett, sure20:45
sinzuibenji: do you have time to review a small change to address a project review nuance: https://code.launchpad.net/~sinzui/launchpad/hide-license-info/+merge/5246720:47
benjisinzui: sure20:47
jcsackettleonardr: so i am looking at bug 70124620:48
_mup_Bug #701246: missing bug dereference generates OOPS <oops> <Launchpad itself:Triaged by jcsackett> < https://launchpad.net/bugs/701246 >20:48
jcsackettit looks as though the problem is just that a NotFound that gets raised in lp doesn't go back to lplib.20:48
jcsacketti have tried https://pastebin.canonical.com/44375/ as a fix.20:49
jcsackettwhile that works, leonardr, i'm unconvinced its the best (or correct) solution.20:49
jcsackettleonardr: that change is in _handle_next_obj, to save you a trip into the code tree.20:50
leonardrjcsackett: ok, give me am inute to finish what i'm doing20:51
jcsackettleonardr: sure.20:51
lifelessjcsackett: +1 AIUI20:58
jcsackettlifeless: cool. my major concern is i thought we should a) avoid expose() and b) i'm frightened of the publisher. :-P20:59
leonardrsinzui, lifeless: going to paste my code and look at jcsackett's code. for some reason, valid_upstreamtask is raising an exception for 'hoary' even though bug.getBugTask(hoary) is returning None20:59
benjisinzui: review done (https://code.launchpad.net/~sinzui/launchpad/hide-license-info/+merge/52467)20:59
sinzuithanks benji21:01
leonardrlifeless, sinzui: http://pastebin.ubuntu.com/577173/ looks good to me, don't know why it sometimes fails as i mentioned above21:02
leonardrjcsackett: at the very least, you need to do expose(NotFound(self.context, name), 404)21:03
leonardrotherwise you will start giving out 400 errors21:03
jcsackettleonardr: ok.21:04
leonardri think it would make more sense to publish NotFound as 404 _in general_21:04
jcsacketti sort of assumed it was, to be honest. :-P21:04
sinzuileonardr: I think the code is creating confusion between master and slave. the distro is the slave, the series is the master.21:04
leonardrjcsackett: maybe it's the fact that the exception is raised during traversal21:05
leonardryou say that the code you have works? what behavior do you see?21:05
sinzuiWe really need to rethink the value for conjoined relationships. They are ephemeral, limited to projects that develop with leading series, and the code is very expensive to work with21:06
jcsackettleonardr: with make run_all going, if i connect to my dev instance via lplib, and run through the code shown in the bug, i get a 404 http error, and no oops is generated.21:06
leonardrjcsackett: we do have special views registered for NotFound that should cause them to yield 404 errors, but i bet that code doesn't apply to exceptions raised during traversal21:06
leonardrthat's weird21:06
leonardrif you put a weird error code like expose(..., 409), does that get passed through?21:07
sinzuileonardr: the if ISourcePackage.providedBy block talks about series but we can have bugs in SPs without a series21:07
sinzuimaybe the whole paste represents an attempt to solve the case where the target implements ISeries21:08
jcsackettleonardr: let me check.21:09
leonardrsinzui: i was trying to solve the case where it tries to create a prerequisite target *of some kind*21:09
leonardrthere were three such cases21:09
leonardrare you saying these cases are different, that in some cases the target is the master and in some cases the target is the slave?21:10
leonardri can change the variable names so i'm not talking about 'master_target'. i don't think i changed the actual meaning of the code21:10
leonardrsinzui: see http://pastebin.ubuntu.com/577178/. the code is the same, except i check for a bug before creating one21:12
sinzuileonardr: okay. I agree with what you are doing. Lp does require a PrimaryContext level bug before creating a series bug.21:18
leonardrsinzui: i am in a situation where bug.getBugTask(bug_target) returns None, but valid_upstreamtask raises an exception21:19
leonardrbecause bug_target.searchTasks(BugTaskSearchParams(user, bug=bug)) finds something21:19
leonardrso i think bug.getBugTask(bug_target) does not tell the whole story21:20
sinzuileonardr: by "sometimes fails" do you mean not reliably repeatable? maybe we need something like IStore(prerequisite).flush()21:20
lifelessleonardr: getBugTask is trivial21:21
lifelessleonardr: but note that it uses cached data.21:21
lifelessleonardr: you may need to try: del get_propery_cache(bug).bugtasks; except AttributeError: pass21:22
leonardrsinzui: i mean it fails when i don't think it should21:23
LPCIBotYippie, build fixed!21:24
LPCIBotProject windmill build #22: FIXED in 1 hr 12 min: https://hudson.wedontsleep.org/job/windmill/22/21:24
lifelessleonardr: at the point where bug tasks are added21:24
leonardrlifeless:trying that now21:25
lifelessleonardr: bottom of Bug.addTask would be the place to add it21:25
lifelessleonardr: a more complex version would be to add the new one to the tasks IFF the tasks attribute is already populated21:26
jcsackettleonardr: actually, expose is telling me it only accepts on argument, which prevents doing expose(...,409). something trivial i've missed?21:27
jcsacketts/on argument/one argument/21:27
leonardrjcsackett: ah, it's because i haven't landed my branch that fixes this, because of these test failures21:27
leonardri got ahead of myself21:27
leonardrbut, if expose() is working at all, you should be getting 400 errors, not 40421:28
lifelessleonardr: normal browsers will still see a 404, right ?21:28
leonardrlifeless: browsers on the website will see a 404. if you hit the web service with a browser it will go through the lazr.restful publisher and you'll see what a non-browser client would see21:29
lifelessleonardr: ok, and we map 404 to 400 for some reason here?21:30
leonardrlifeless: no, i'm saying that jcsackett's change shouldn't be doing what he's seeing21:30
lifelessah cool21:30
leonardrif expose() was working at all, it would be giving him a 400 error, not a 40421:30
lifelessleonardr: would it be reasonable for NotFound to map to 404 in the webservice by default?21:31
leonardrstill getting the failures in patches-view. again, the problem is that attempting to create a bugtask for Hoary gives an error "there's already a bugtask for Ubuntu"21:31
leonardrlifeless: yes, and that is what happens normally. i think the problem we're seeing is that the exception is happening in traversal, and lazr.restful doesn't catch those21:31
lifelessyes, that makes sense21:32
leonardrlifeless: the end of createTask already contains 'del get_property_cache(bug).bugtasks'21:34
lifelessleonardr: ok, well thats not it then :)21:35
jcsackettleonardr: so, basically, what i'm seeing isn't possible?21:35
thumperleonardr: mumble?21:35
leonardrjcsackett: i don't understand how you're seeing it. i wouldn't say it's impossible, especialyl if you can turn it on and off easily21:36
jcsackettleonardr: so, either way a 404 is returned; it's just that with expose, no OOPS is created.21:37
leonardrjcsackett: oh, i see how that could happen21:38
gary_posterbenji, one last one, then the marathon is done.  Maybe you can fit it in, maybe not. :-)  https://code.launchpad.net/~gary/launchpad/bug723999-2d/+merge/5247821:40
benjigary_poster: good timing, I was just about to resort to real work. ;p21:40
jcsackettleonardr: and basically killing the oops is the thing. given that context, this seem better?21:40
leonardrjcsackett: my gut feeling is that your bug will simply go away once my branch lands21:41
jcsackettleonardr: really?21:41
jcsackettthat will be twice that you make my work irrelevant, but i'm totally happy with that. :-)21:41
jcsacketti'm going to move on to something else and revisit this post your branch landing.21:42
leonardrok, it'll probably be tomorrow21:42
jcsackettleonardr: cool. can you link me the branch (mostly for my curiosity)?21:42
leonardrjcsackett: https://code.launchpad.net/~leonardr/launchpad/bug-10633821:43
kfogelFrom sabdfl's latest blog post: "Nothing hugs quite like dholbach, though, and he's no hairy ape."  I'm sorry, but I just had to repeat that.21:45
kfogelWe now return you to your regularly scheduled, uh, programming :-).21:46
lifelesskfogel: hey, how goes it21:46
gary_posterthanks for saying hi kfogel21:46
kfogelhey lifeless -- okay.  Busy, but good.  You?21:46
kfogelgary_poster: miss y'all!21:46
gary_posteryou too :-)21:46
lifelesskfogel: insanely busy, very well - lp is going great guns, and lynne is 14 weeks now ;)21:47
kfogellifeless: congrats!!!21:48
kfogellifeless: and re that other thing, launchpad, I've been watching the blog and been seeing the progress with pleasure.21:48
lifelesskfogel: thanks21:49
lifelessI think we're spending 12 seconds /rendering/ 150 bugtask rows.21:52
_mup_Bug #230350: Missing Debian Maintainer field <Ubuntu:Invalid> <afflib (Ubuntu):Fix Released by saivann> <alac-decoder (Ubuntu):Fix Released by warp10> <axiom (Ubuntu):Invalid> <beneath-a-steel-sky (Ubuntu):Fix Released> <bibletime-i18n (Ubuntu):Fix Released by txwikinger> <binkd (Ubuntu):Fix Released> <bzr-builddeb (Ubuntu):Won't Fix> <capisuite (Ubuntu):Invalid> <chinput (Ubuntu):Fix Released by warp10> <chmsee (Ubuntu):Fix Released> <ciso (U21:52
leonardrsinzui: ok, i'm in pdb right at the point where the error is about to happen21:53
leonardri'm about to call self.makeBugTask(bug, a)21:53
leonardra is the Distribution 'ubuntu', and the target from which i derived a is the DistroSeries 'hoary'21:53
lifelessgary_poster: chameleon templates; can they mix n patch with the tal engine ones?21:53
leonardrbug.getBugTask(a) is None21:53
leonardrbut, if i call makeBugTask, i'll get an error that there's already a task for 'ubuntu'21:54
gary_posterlifeless, once we switch to chameleon, everything uses the chameleon engine, including current TAL stuff.21:54
lifelessgary_poster: sure; I'm looking at bug 72403321:54
_mup_Bug #724033: BugTask:+index timeouts - distributions and milestones being late evaluation loaded - repeatedly - on bug 230350 <qa-ok> <timeout> <Launchpad itself:Fix Committed by lifeless> < https://launchpad.net/bugs/724033 >21:54
gary_posterand it is supposed to help with rendering nasties like the one you are mentioning21:54
lifelessgary_poster: I've gotten the sql component down to 2 seconds21:55
gary_poster12334: suck21:55
lifelessgary_poster: I'm wondering if I could migrate just the bug task row & edit forms - which are the bits repeated - to chameleon, assuming further investigation doesn't show it to be something simple like the view initialization being slow21:56
mtaylorlifeless: hey - whatever happened to those merge queue things rockstar was working on?21:56
lifelessmtaylor: deferred21:56
mtaylorlifeless: k. so it's not just that I missed them somewhere21:56
lifelessmtaylor: not at all; we had too much work in progress. May do them when we overhaul our landing process21:57
gary_posterlifeless, you could.  The only way I can think of doing it right now is having the view render the chamelon bits as a string, inserted into the TAL as structure21:57
gary_posterdoes that make sense?21:57
lifelessthats how the rows are done already, more or less21:57
gary_posteroh, ok, cool21:57
lifeless<div tal:replace="structure context/bug/@@+bugtasks-and-nominations-table" />21:58
gary_posterthat would be a great test to see of chameleon actually buys us what we expect then, particularly if it is apples to apples21:58
leonardrsinzui: i'm starting to think there's a problem with vaild_upstreamtask21:58
leonardrcheck this out21:58
leonardr(Pdb) [bug.title for bug in bug_target.searchTasks(params)]21:58
leonardr[u'Bug #16 in evolution (Ubuntu): "bug_a title"']21:58
_mup_Bug #16: "Swedish" and "Swedish (Sweden)" should be the same language <lp-translations> <Launchpad itself:Fix Released by daf> < https://launchpad.net/bugs/16 >21:58
lifelessand then inside it21:58
lifeless<tal:bugtask-or-nomination  repeat="task_or_nom_view view/getBugTaskAndNominationViews"><tal:block replace="structure task_or_nom_view" />21:59
gary_posterthat may be a problem inherently21:59
lifelessso it ends up calling __call__() on the view objects its manually created.21:59
gary_posterthough chameleon may make that better too, dunno21:59
lifelessgary_poster: whats the problem you perceive there?21:59
gary_posterwell, it's a hunch, but I'd be interested to see if doing structure calls and inserting the output of another view within a tight loop is just bad.22:00
lifelessyour hunch is that inserting structure is slow ?22:00
mtaylorlifeless: well, fwiw, I just wrote a hacky launchpadlib script to make a page showing me which of our brances are in which of our fake-queue-branches ... hopefully it's not causing too much activity :)22:00
gary_posterI would expect this, from worst to best:22:01
lifelessmtaylor: heh22:01
lifelessmtaylor: patch LP!22:01
gary_posterinsert structure of another view, which itself uses a template22:01
gary_posteruse a macro22:01
mtaylorlifeless: I do not believe you would accept a patch that hardcodes lp:drizzle/build in to it22:01
gary_posterhave code done locally22:01
lifelessmtaylor: seriously, 50% of our page hits are API now. (and not 'API to make a web page be nice'. Pure launchpadlib style API)22:01
wallyworldlifeless: code.launchpad.net/+daily-builds - 67 queries/external actions issued in 2.36 seconds \o/22:02
gary_posterso, lifeless, "structure" itself is fine.  My hunch o' nastiness is that the inner loop, calling a view for each loop, is bad.22:03
lifelessgary_poster: I'm going to generate some hundreds of rows locally and do some elimination tests to narrow this down. Thanks for the tips - helps me understand this area.22:03
mtaylorlifeless: oh, well in this case, I doubt the launchpadlib hits are gonna kill you (I grab a list of approved brancehs) ... but the "do a checkout of each branch and run run bzr missing a few times to see if it's contained within another branch" might be annoying22:03
gary_posterI'll look forward to reading the results lifeless!22:03
leonardrsinzui: we don't have a bugtask for ubuntu, so bug.getTask(ubuntu) returns nothing. but we do have a bugtask for evolution in ubuntu, so the searchTasks thing fails22:03
lifelessgary_poster: now I have to write em up :)22:03
gary_posterlifeless: lol :-P22:03
lifelessleonardr: what searchTasks thing are you referring to ?22:04
leonardrlifeless: the one run in valid_upstreamtask22:04
leonardruser = getUtility(ILaunchBag).user22:04
leonardr    params = BugTaskSearchParams(user, bug=bug)22:04
leonardr    if not bug_target.searchTasks(params).is_empty():22:04
lifelessthats buggy22:05
sinzuileonardr: Ubuntu and evolution in ubuntu are not the same, one being a distro and the other being a package. I do not think any query should confuse the two22:05
lifelessit will find tasks on related series.22:05
leonardrok, now we're getting somewhere22:05
lifelessI think the validator is broken22:05
lifelessits not the right thing to use to fix the oops22:05
lifelessif you have a product with a series A and a series B22:06
lifelessthis validator will raise an error if the product, or series A, or series B have a bugtask.22:06
lifelessbut you are working on distros22:06
lifelessand distros have another layer in there - the source package22:07
lifelessyou can have a distro task or a distroseries task, or a distro sourcepackage task, or a distroseries sourcepackage task22:07
lifelessleonardr: what is calling valid_upstreamtask ?22:07
leonardrlifeless: my code causes it to be called from createTask()22:08
leonardrformerly it was only called from view code. looking up the view code now22:08
lifelessleonardr: you need to call validate_distrotask when dealing with distro contexts22:09
lifelessor validate_new_distrotask etc22:09
lifelessI don't know offhand which you'll need for createTask22:09
sinzuiwtf: can we have one method that differs to the hidden methods?22:09
lifelessI need to pop out to the shops22:10
sinzuiThere must be duplicate code in three validation methods22:10
lifelesssinzui: tonnes from the look of it22:10
lifelessI'm sure you guys will get to the bottom of it soon. BBIAB22:11
lifelesswallyworld: nice22:11
wgrantMorning all.22:11
mtayloram I dumb - there doesn't seem to be an api member on a merge_proposal to get the web url to see that prop22:12
jcsackettmorning, wgrant.22:12
lifelessoh grah22:13
lifelessIOError: [Errno 2] No such file or directory: '/home/pqm/pqm-workdir/home/trunk/launchpad/production-configs/lpnetSLAVE-lazr.conf'22:13
leonardrmtaylor: there should be one22:13
lifelesslp-production-config landings are bust22:13
lifelesstestConfig (canonical.config.tests.test_config.../production-configs/lpnet-template/launchpad-lazr.conf)22:13
* lifeless goes really22:13
wallyworldlifeless: the business queries - the ones to get the data - there's only 4 or so of those. there's an awful many of these: SELECT ValidPersonCache.id FROM ValidPersonCache WHERE ValidPersonCache.id = xxx22:13
leonardrmtaylor: it should be web_link. what version of the web service are you using?22:13
wgrantlifeless: How did it land in the first place? :/22:13
mtaylorleonardr: LPNET_SERVICE_ROOT?22:14
mtaylorleonardr: (not sure how to answer your question ...)22:14
wgrantmtaylor: Your cached WADL is probably out of date.22:14
mtaylorhrm. how do I update my locally cached WADL?22:14
leonardrwgrant: that's possible, but it should have been updated by now. it's only cached for a week22:14
wgrantI just blow away the whole launchpadlib cache, but there is probably a better way.22:14
leonardrmtaylor: show me how you call Launchpad.login_with()22:15
wgrantHmm. We were seeing it happening three or four days ago.22:15
mtaylorlaunchpad = Launchpad.login_with('Branch Merge Status', LPNET_SERVICE_ROOT, cachedir)22:15
leonardrmtaylor: add version="devel" and see if that works22:15
* wallyworld has to go and drop tax stuff off at the accountant22:16
mtaylorleonardr: that just sort of has it hanging there now22:18
leonardrmtaylor: that's odd. put this code before the login_with call and send me the output22:19
leonardrimport httplib222:19
leonardrhttplib2.debuglevel = 122:19
mtaylorleonardr: well, of course, it didn't hang that time22:20
mtaylorleonardr: oh - actually, I suck - one more try22:21
leonardrsinzui: argh, changing the validation code is creating _more_ test failures and taking me further into realms of which i know nothing22:21
leonardrto start with, can you sanity-check this?22:21
mtaylorleonardr: it's sitting there doing this:22:21
mtaylorand now it works22:22
leonardrit hung for a long time and then worked, or you tried again and it worked?22:23
sinzuileonardr: That block looks good to me22:25
mtaylorleonardr: tried again - it hung for a while and then worked22:26
leonardrmtaylor: and is web_link accessible?22:26
leonardrsinzui: that's giving me a new test failure (which might be legit):22:26
leonardr    LaunchpadValidationError: u'Package a52dec not published in Ubuntu'22:27
leonardrexcept later on there's a reference to ubuntu/+source/a52dec22:27
mtaylorleonardr: yup. all is now happy and sunny22:28
mtaylorleonardr: thanks!22:28
leonardrok, great. basically, that's a new feature that's not in version 1.0 of the web service22:29
wgrantleonardr: It's in the 1.0 WADL.22:30
leonardrmtaylor: did you end up wiping your launchpadlib directory?22:30
mtaylorleonardr: I did not - just doing the version='devel' made it happier22:30
leonardrwell, devel would have a _different_ wadl file, that you hadn't retrieved before, so that could have the same effect22:31
SpamapSlifeless: ping.. trying to wrap my head around adding a new distro to launchpad that is not for built packages...22:32
sinzuihuwshimi: will you be mumbling today?22:32
huwshimisinzui: Yes, just getting my other laptop, it doesn't seem to want to connect in Natty22:32
huwshimisinzui: two minutes22:33
sinzuileonardr: I got confused for a moment. That error really could be legitimate. When I started fixing packaging link data 18 months ago, I discovered that 80% of you tests were working with invalid data...no surprising that the real data created by the feature was rubbish22:34
* sinzui looks for test helper to create a published spr22:34
leonardrsinzui: i'm pushing my changes22:37
sinzuileonardr: I am in a meeting. I am also looking for a trick that makes a valid package22:38
leonardrsinzui, i may come back to this tomorrow, because i don't understand this stuff even when my brain is fresh22:38
sinzuileonardr: I think that is sensible. This is really messed up and timeoff will help us forget what does not work22:39
sinzuileonardr: the failing tests probably need something like this: self.factory.makeSourcePackagePublishingHistory(22:48
sinzui            sourcepackagename=self.sourcepackagename, distroseries=self.hoary)22:48
wgrantsinzui: All those style fixes have almost let you catch up :(23:05
sinzuiwgrant: There were some bugs I fixed by accident too.23:07
sinzuibut you are the winner23:07
lifelesswgrant: mthaddon probably manual landed23:07
lifelessSpamapS: hi23:07
wgrantlifeless: Yeah, probably :(23:07
SpamapSlifeless: I understand you had a chat w/ jml about a distro for ensemble formulae23:07
lifelessSpamapS: creating a distro is a privileged task; please wait for the ensemble list discussion and LEP before doing it23:07
SpamapSlifeless: right, I'm not going to do it.. I am trying to understand the challenges.23:08
lifelessSpamapS: ah, do you mean challenges in using or creating? :)23:08
SpamapSlifeless: well I don't understand the suggestion that there's no bug tracking if you don't have a built package. How do non-built distros work given that restriction?23:08
lifelessSpamapS: they don't23:09
lifelessSpamapS: try and file a bug on openssh in baltic.23:09
lifelessI dare you23:09
SpamapSwhats the use of distros then? ;)23:09
* SpamapS is tempted now23:09
lifelessSpamapS: distros are all about building and shipping packages23:09
SpamapSYeah , be that the case in reality.. in my head, they're about tracking collections of software. :-P23:10
lifelessSpamapS: so we don't permit bugs filed on package names we know about unless the package is in the distro23:11
lifelessSpamapS: this stops folk filing bugs on e.g. cassandra before its actually in Ubuntu23:11
SpamapSthat makes perfect sense. :)23:12
lifelessand this matters because all our metadata driving policy - like packagesets etc - depends on source package / binary packages existing.23:12
SpamapSSo the real issue is there's no way, other than building, to create a package.23:12
lifeless*I* don't know how deep the rabbit hole goes23:12
SpamapSThe way I saw it working was a mapping of a set of directories into source package names...23:13
lifelessSpamapS: you can map source packages into source package names23:14
SpamapSBut I'm starting to wonder if, for the beginning of the project, we shouldn't just use a flat bzr and let people use tags to distinguish the formula name.23:14
lifelessSpamapS: that would be a -lot- simpler.23:14
lifelessSpamapS: jml and I had trouble inferring /requirements/ vs /things that using a distro would let you do/23:15
SpamapSYeah I think people got excited about reusing the distro code (myself included)23:15
lifelessIn some ways it makes a lot of sense23:15
lifelessin other ways we really have two quite different things wedged into one in lp's distro bug support23:15
SpamapSIf the project takes off... we hope to have similar numbers of formulae as we have packages in Ubuntu so it would be very hard to track bugs on such a large body of work.23:16
lifelessone things is 'lightweight components in a bug tracker' and the other is 'policy driven by uploads of stuff'23:16
lifelessSpamapS: really? 20K forumulas?23:16
SpamapSa formula for anything that opens a network port23:16
lifelessSpamapS: thats more like 1K23:16
SpamapSso, maybe 200023:16
lifelesswe can start with one structure and migrate23:17
lifelesslike, it would be great to have lightweight components for e.g. bzr23:17
lifelesssomething more than tags and less than separate projects23:17
SpamapSYeah.. I think thats probably going to be the thing I recommend in the list discussion.23:17
SpamapSTight coupling, once again, proves to make things less usable...23:18
lifelessI'm a big fan of proving a core facility and letting folk do something cool with it23:18
lifelessnow, on the vcs side23:18
lifelessjml said we need branch per (formula, release) tuple23:19
lifelesswhich the (packagename, series) namespace in distro branches supplies23:19
lifelessSpamapS: oh, on bugs, you /can/ use product series as a component like thing. same place in the UI23:20
lifelessbut the concept of nominations vs tasks would make it a little ugly23:20
SpamapSlifeless: the series will be the series of formulae tho.. I'd like to keep that nice and clean.23:21
lifelessso back to vcs23:21
lifelessdo you need that tuple now, or really just (formula, 'sid') - e.g. you only need trunks for the formulas?23:22
SpamapSlifeless: I think having one bzr branch for all 2000 formulas would be a little painful. But you just mentioned in a recent discussion that bzr can branch the sub-dirs just fine, right?23:22
lifelessSpamapS: you can work on just a subdir yes.23:22
lifelessall the history comes, but honestly, 2K small projects is tiny bzr scale wise23:22
SpamapSso if its  /principia/sid/formulas/databases/mysql  .. I can bzr branch lp:principia/sid/formulas/databases/mysql and interact with it, yes?23:23
SpamapSOh but I still get the whole history for /principia/sid .. :(23:23
SpamapSA minor concession.. but one that our target market will hate.. because they're all git/ruby fanbois. ;)23:24
lifelessSpamapS: yes, but I think you're overthinking the size here.23:24
lifelesswhen you do this in git you get all the history too23:24
SpamapSRight its just faster. ;)23:24
* wgrant frowns at Lenovo.23:24
SpamapSwhich I *hate* as an argument for any vcs..23:24
SpamapSbut some people think it matters. ;)23:24
lifelessSpamapS: mmm, not as such per various benchmarks we've done.23:24
lifelessSpamapS: bzr network fetch is pretty good these days23:25
wgrant2a fetch is really slow even locally...23:25
SpamapSlifeless: Yeah, I'm going to again say that its a very small issue.. the main thing is to start getting those merge proposals cranking.. not achieve intergalactic domination overnight. :)23:26
lifelessSpamapS: anyhow, i have not particular preference for what we do23:35
lifelessI'm not trying to guide towards or away from distros23:36
lifelessbut - they are what they are.23:36
lifelesswgrant: https://bugs.launchpad.net/launchpad/+bug/73098723:37
_mup_Bug #730987: cannot merge to lp-production-configs <Launchpad itself:Triaged> < https://launchpad.net/bugs/730987 >23:37
wgrantlifeless: Will look soon. Currently trying to figure out whether my T400's battery is being malicious or is actually dead.23:39
wgrantIt is 100% charged and still at around 60% design capacity, but this morning refuses to deliver any power.23:39
lifelesswgrant: freeze it?23:39
wgrantThe battery monitor tool says it has failed due to normal wear.23:39
wgrantI call BS.23:39
wgrantMaybe I'll leave it all off and unplugged for a few hours and see what happens.23:41
wgrantI have never had a Li-ion battery do this before, so I tend to think it is being malicious.23:42
LPCIBotYippie, build fixed!23:45
LPCIBotProject devel build #513: FIXED in 5 hr 17 min: https://hudson.wedontsleep.org/job/devel/513/23:45
lifelesswallyworld: you need to gall PersonSet's getPrecachedPersonsFromIDs() method and listify the result, or something like that23:50
lifelesswgrant: thanks!23:58
wgrantlifeless: The obvious fix is to add a list of excluded configs to the test... but maybe a marker file in the config dir would be better.23:59
