/srv/irclogs.ubuntu.com/2012/10/31/#launchpad-dev.txt

StevenKwgrant: Shall I put a deployment together?00:12
wgrantStevenK: I was just looking to see what our state was. Please do.00:13
wallyworldwgrant: i've been reading some postgres tuning stuff and it seems it's best to create separate, single column indices to aid sorting, rather than a multi-column index. do you agree?00:40
wgrantwallyworld: Where'd you read that?00:45
wgrantIt is nonsense :)00:45
wallyworldi'd have to find the lin kagain00:45
wgrantYou can't sort using a composition of multiple indices -- that doesn't make sense00:45
wgrantIt has to be a single composite index00:46
StevenKwallyworld: History -> Recently Closed Tabs ?00:46
StevenKIf using Firefox00:46
wallyworldthere's a lot of recently closed tabs00:46
wgrantIndices are usually b-trees, and it's a bit difficult to aggregate b-trees usefully :)00:46
wallyworldi can't recall which one00:46
wallyworldin this case, we need to sort on distorseries, spn, archive, date, person00:47
wgrantWhy?00:47
wgrantWhich query's this?00:47
wallyworldwhere person is creator or maintainor or neither00:47
wallyworldbecause we need the grouping00:47
wgrantRight, but think about how you'd follow indices to get what you need00:48
wallyworldso the batch iteration can figure out the distinct sprs00:48
wgrantYou should quickly realise that that index is entirely inappropriate for it00:48
wgrantWe have a person, and want want the n most recent uploads00:48
wgrantSo the first key has to be the person00:48
wgrantFollowing that must be the overall sort key00:48
wgrantSo we have (creator, dateuploaded DESC, id)00:49
wallyworldsure, i didn;t say about that would be the index order00:49
wgrantAh00:49
wgrantWhy do we need to sort on distroseries, spn, archive?00:49
wallyworldbut if we need to sort on those columns, they would need to be in the index somewhere, no?00:49
wgrantWe only need that if we do the distinct in postgres00:49
wallyworldfor the frouping00:49
StevenKwgrant: Tempted to nail bug 779367 shut00:49
_mup_Bug #779367: spurious failure in test_builder.TestSlave <critical-analysis> <spurious-test-failure> <test-system> <Launchpad itself:Triaged> < https://launchpad.net/bugs/779367 >00:49
wallyworldgrouping00:49
wgrantBut we can't efficiently do the distinct in postgres00:49
wgrantStevenK: Indeed00:49
wallyworldwgrant: if we need to iterate the batch, we need the grouping00:50
wgrantwallyworld: howso?00:50
wallyworldso that all the 'like' records are together in the batch00:50
wgrantPostgres requires that, but a Python implementation would not00:50
wgrantWe're doing it in Python precisely because postgres can't do it efficiently00:51
wgrantIf we sort by the grouping, then we have to traverse the whole set anyway00:51
wgrantSo the index is pointless00:51
wallyworldso we could have a (archive, date) at the start, and an (archive, date) at the end of the query00:51
wallyworldand we would not know they were for the same archive00:51
wallyworldsince they would be in different batches00:52
wgrantAh, indeed, it's batched, forgot that00:52
wallyworldso sadly we need to group00:52
wgrantTo do the batching we will have to evaluate the whole thing in Python, either way00:52
wgrantWe cannot group at the DB level.00:52
wallyworldso i wil have to iterate the entire result set00:53
wgrantWhich means that batches after the first will be inefficient, but there's not much we can do00:53
wgrantYou don't have to iterate the entire resultset00:53
wgrantYou only have to iterate until you find 75 that are distinct00:53
wallyworldwhich could be everything00:53
wgrantIt could be, yes.00:53
wgrantBut it's not very likely00:53
wallyworldalso, the creator or maintainer is optional00:54
wgrantHow's it optional?00:54
wgrant+ppa-packages has a person as context00:54
wgrantTherefore it always has a creator00:54
wallyworldsure, but the other ones don't00:54
wallyworldthere are 300:54
wgrantThey're all pages under :Person00:54
wgrantSo they will always have as creator or maintainer00:54
wallyworldbut the same metyhod is used elsewhere00:54
wallyworldwith no creator or maintainer00:55
wgrantIt presumably has some other context, though00:55
wallyworldbut it will be slow then00:55
wgrantIn which other contexts is it used?00:56
wallyworldgetLatestMaintainedPackages00:56
wallyworldit's also on the person page00:56
wallyworldit sets uploader_only - false00:57
wallyworldso no creator or maintainer is added to the query00:58
wgrantBut it's on Person, so it presumably has some kind of person filter00:59
wallyworldnot that i can see unless i missed something01:00
wgrantWell, it would otherwise be global01:01
wgrantWhich is entirely nonsensical01:01
wgrantIt is called in three modes: maintainer, non-PPA uploader, and PPA uploader01:02
wallyworldi just checked, i think there is an extra condition added in, but just not there01:02
StevenKhttps://code.launchpad.net/~stevenk/launchpad/undisable-tests/+merge/13223501:02
wgrantuploader_only=False and ppa_only=True would result in an unbounded set, but that's never used01:02
wallyworldso it does seem it's always creator or maintainer in the query01:03
wgrantIndeed01:04
wgrantIt doesn't really make sense for a method on Person to not constrain by person :)01:05
wallyworldtrue01:06
wallyworldso, what would a reasonable batch size be? 75?01:06
wgrantThat tends to be the default01:07
wallyworldok, will try that. we'll have to test with known pathological cases01:07
wgrantWell, this will be exposed to a new variety of pathological cases01:09
wallyworldyeah, sadly that may be the case01:09
wgrantIt may almost be worth denorming this, but the workaround for these pages shouldn't be too terrible for now01:09
wallyworldlet's see how this goes first01:09
StevenKwallyworld, wgrant: https://code.launchpad.net/~stevenk/launchpad/undisable-tests/+merge/13223501:18
wallyworldWCPGW01:19
wallyworldis it worth looking at WHY they are fragile?01:20
wallyworldand perhaps fixing a root cause issue?01:20
StevenKAny data we have on these tests is >18 months old, we need to enable them to see what is going on now01:21
wallyworldso maybe just an "ec2 test" run to see what's up?01:21
wallyworldi fear that they may well pass once, geth through ok, and then fail tomorrow01:21
StevenKI'll be tossing it at ec2 land once the MP is approved01:22
StevenKwallyworld: And we can disable them if they prove to be doing their old tricks, but then we have current data01:22
wallyworldguess so01:23
StevenKWhat I am doing is a Curtis Approved Plan.01:23
wallyworlda couple of ec2 test runs would also provide data01:23
wallyworldok01:23
StevenKwallyworld: Wrong. buildbot is parallel, and ec2 is not.01:23
wallyworldwere the failures only parallel? i don't think so01:24
wallyworldanyway, r=me01:24
StevenKNo, but they can be impacted by it01:24
wallyworldmaybe the stars will align and it will all be ok, let's see01:25
nigelbHi! I have an old lp tree lying around.01:37
nigelbWill doing a bzr update and make run "Just Work"?01:37
nigelbs/update/pull/g01:38
* nigelb does rf-get and hopes01:41
wallyworldit should work, but you will need to do a make schema before you run01:45
StevenKnigelb: rf-get will also grab new sourcedeps and such too01:48
nigelbStevenK: Oh awesome.01:49
nigelbwallyworld: Noted.01:49
nigelbThis is gonna take a while. it's at least an year old tree.01:49
wallyworldwgrant: here's the mp for that related software work https://code.launchpad.net/~wallyworld/launchpad/ppa-packages-timeout-1071581/+merge/13223602:49
StevenKlp.code.model.tests.test_sourcepackagerecipebuild.TestBuildNotifications.test_handleStatus_OK_successful_upload loses03:02
StevenKFails on ec203:03
wallyworld:-(03:07
nigelbApparently it's not very smooth.03:12
nigelbI got hit with "ImportError: No module named convoy.meta"03:13
StevenKThen your launchpad-dependencies is out of date03:13
nigelbI thought rf-get would update it. no?03:19
nigelbI'm on 0.119~lucid103:20
StevenKnigelb: rf-get won't update launchpad-dependencies, it's a system package, and rf-get does not have root.03:22
StevenKnigelb: Is python-convoy installed?03:23
nigelbStevenK: It wasn't. Started install.03:24
wallyworldStevenK: archives have a checkArchivePermission method. the lp.View security adaptor checks this, and also checks if the user is subscribed for private archives, is there any reason why the subscription check is not done inside the checkArchivePermission method?03:56
wallyworldie irrespective of any other check permission checks, shouldn't subscribers always have access?03:57
StevenKwallyworld: No, P3A subscribers are not allowed to see the archive04:08
StevenKThey can browse it, but not Archive:+packages04:09
StevenKWhich is why it's a little strange04:09
wallyworldStevenK: so, i'm looking at person+index04:09
wallyworldok, Archive+packages only uses the checkArchivePermission check04:10
wallyworldbut not the p3a subscription one04:10
nigelbwoah04:10
nigelbit worked I think.04:10
wallyworldStevenK: Archive+packages uses lp.View permission, which also does the p3a subscriber check04:12
nigelbhrm. did lp upgrade postgres versions?04:14
nigelbI have this http://hastebin.com/qepumeveto.vhdl04:14
wallyworldnot sure, you need 9.104:15
wallyworldrf won't upgrade it04:15
wallyworldbut launchpad-database-dependencies should i think04:15
nigelbif only rf told me.04:15
wallyworldi never use rf04:16
nigelbah04:16
wallyworldbut rf should still work nonetheless04:16
nigelbrf did most of the work.04:16
wallyworldi haven't looked at the code so cannot really comment04:16
nigelbThe only things I failed doing was upgrading the dependency packages :)04:16
wallyworldwell, that's not too bad04:17
nigelbAttempt #4.04:44
nigelbGah. Failed at the exact same point. I suspect I need to do some magic to start the right version of postgres. But now, I have to start the day job.04:45
StevenKwallyworld: Actually, I might be wrong. We may allow Archive:+packages, but want to forbid subscribers from copying packages out using +copy-packages04:46
wallyworldright, that makes more sense04:46
StevenKnigelb: Do you have time to pastebin the error?04:47
nigelbStevenK: I pastebin'd it earlier. http://hastebin.com/qepumeveto.vhdl04:50
StevenKnigelb: You're still using 8.4?04:51
nigelbStevenK: I installed 9.1, but I suspect it's not yet running. I dont want to break it just before I start work since I need PG for work.04:52
StevenKnigelb: Ah, that could be a problem, since the LP setup scripts sort of destroy other databases04:53
nigelbStevenK: I suspected as much :)04:55
stubYou want to use the LXC environment I think05:08
nigelbI'm on lucid > <05:09
StevenKThen you want to upgrade to Precise, and create an Lucid LXC for LP and another for $work? :-)05:18
nigelbYeah, that's the eventual plan.05:19
StevenKlpsetup in the LP PPA will create a Lucid LXC for LP very easily05:20
nigelbThe trouble is upgrading.05:20
nigelbMy harddisk has no more space.05:20
nigelbso I need to get a new one first before I upgrade.05:20
lifelessnigelb: or delete crap :)05:22
nigelblifeless: I've deleted most of the crap I don't want.05:22
nigelbEverything that's left, I do want :)05:23
StevenKOh bleh, everyone knows /usr isn't important05:23
StevenKOr /lib05:24
nigelbI deleted a ton of Lp branches.05:24
nigelbI had all the ones I worked on lying around :)05:24
nigelbI'm hoping to get a 1TB harddisk this month.05:27
nigelbThat should clear up significant amounts of space.05:27
* StevenK is still waiting for a du to scare nigelb with05:29
StevenKsteven@undermined:~/launchpad/lp-branches% du -sh .05:37
StevenK63G.05:37
nigelbo_O05:39
StevenKCan we destroy delayed copies yet?05:50
StevenKHahaha05:53
StevenKlp-oops is broken05:53
nigelbso, are lp-oops erros logged with lp-oops-oops? ;)05:54
lifelessnigelb: yes05:55
StevenKThe OOPS is useless05:55
nigelbha!05:55
StevenKTemplateDoesNotExist: 500.html05:55
StevenKSo it's an ISE05:56
StevenKThanks for the content, you useless piece of crap, Django05:56
lifelessthats fixed in trunk05:57
StevenKI'm sure lp-oops is getting updated05:58
StevenK</sarcasm>05:58
wgrantwallyworld: The last index is not useful06:44
wgrantWell, it would be useful if we wanted more than about 20% of the rows in the query, but we don't06:45
wallyworldwgrant: the final query would use it, no?07:06
wallyworldsince we just order by date, id07:07
wallyworldand on the individual pages, we do return all matching rows07:08
wallyworldnot just the top 507:08
wgrantwallyworld: "all matching rows" == 7507:11
wallyworldhuh?07:11
wallyworldthe individual pages load all matching records07:11
wallyworldand then batch them07:11
wallyworldi think you are referring to the other query to load the ids07:11
wgrantWe don't ever load all matching records unless we're on the last batch, do we?07:12
wallyworldwe do - the 3 individual pages for maintained, uploaded etc07:12
wgrantThey're in batches of 7507:13
wallyworlda summary is shown on the related software overview page07:13
wallyworldbut the whole result set needs to be ordered, right?07:13
wallyworldso that the batches can be calculated07:13
wgrantBut we only need to calculate the batches up to the current position07:13
wgrantSo if I'm on the first page, I only need to load until I have 75 records to show07:14
wgrantI don't need to grab all 3000007:14
wallyworldbut wouldn't the load be done suing the index07:14
wallyworldotherwise how would it efficently know what to load07:14
wallyworldsince we are odering by date07:14
wgrantBut we're filtering by creator/maintainer at that point07:15
wallyworldso we only grab 75, but we need to know which 7507:15
wgrantThat's why we have the creator- and maintainer-prefixed indices07:15
wallyworldno, not there we arent07:15
wallyworldat that point, we are filtering by id in(....)07:15
wallyworldwe filter by creator etc to figure out which ids to include in the final result set07:16
wgrantAnd that bit is only ever called with 75 items07:16
wgrantBecause the final set is known by then07:16
wgrantWe just have to load them07:16
wallyworldonly the ids07:16
wallyworldand not the order07:16
wgrantSure07:16
wallyworldso select * from sourcepackagerelease where id in (...) order by date desc07:16
wallyworldwhy doesn't that need an index?07:17
wgrantBut how can the sort index be used for that?07:17
wgrantIt's not what needs an index.07:17
wgrantIt's a matter of what *can* be indexed07:17
wallyworldan index on date can be used07:17
wgrantHow?07:17
=== almaisan-away is now known as al-maisan
wgrantsourcepackagerelease has more than 1.5 million rows07:17
wallyworldto efficiently communicate the order to traverse in07:17
=== al-maisan is now known as almaisan-away
wgrantIndices don't work that way07:18
wgrantIn any database :)07:18
wgrantAn index on (dateuploaded DESC, id) is useful for sorting in some situations07:18
wallyworldso you sating sorting doesn;t use indices?07:18
wgrantBut in this case we'd have to traverse 1.5 million index tuples to pull out 75 of them07:18
wgrantWhich is entirely not worth it07:18
wgrantIt would never be silly enough to use an index for that sort07:19
wallyworldwhy? we would just traverse the first 75 in order07:19
wgrantHuh, how?07:19
wgrantWe have IDs07:19
wallyworldsince the index is ordered by date07:19
wgrantWe know the IDs we want07:19
wgrantHow can we efficiently look that up in the index?07:19
wallyworldwell we may have 10000 ids07:20
wgrantEven if we have 10000, the density is only <0.01 still07:20
wallyworldi guess it could ignore the index and traverse all the ids07:20
wgrantIf we were to force it to use the sort index, it would have to traverse 1.5 million tuples to find 7507:20
wallyworldwhy?07:21
wgrantIf it doesn't use the index, it can do 75 index lookups and sort in memory07:21
wallyworldthe index gices the order07:21
wgrantThink about the physical layout of the index07:21
wgrantThe index allows us to find a tuple based on its dateuploaded *and* its id07:21
wgrantOr to traverse tuples in (dateuploaded DESC, id) order07:22
wallyworldwhich is what the query is asking for07:22
wallyworldso it just has to walk the index07:22
wallyworld75 records at a time07:22
wgranthuh?07:22
wgrantWe know the IDs of the 75 records that we need07:23
wallyworldbut not the date order07:23
wallyworldso we have 100000 ids but don't know the order to present them in07:23
wgrantSure, but how does "75 records at a time" come into it?07:23
wallyworldthat's the batch size07:23
wgrantWe don't have 100000 IDs07:23
wgrantWe have 7507:23
wgrantWe partitioned early on, didn't we?07:23
wallyworldthe rs.countz() may be 10000007:24
wgrantBecause we read in IDs in date order, until we had 75 unique ones07:24
wallyworldno, you are confusing the 2 queries07:24
wallyworldwe did the limit to 5 unique ones07:24
wallyworldnbecause that's what the overview page shows07:24
wgrantThen +ppa-packages shows batches of 75 unique ones07:25
wallyworldbut the individual pages show everything07:25
wallyworldyes, out of say 10000007:25
wallyworldso it has to know which 75 to load at a time07:25
wallyworldso it has to have them ordered07:25
wgrantThe first query filters by creator or maintainer, and crawls back in time until it finds 75 unique ones07:25
wgrantThis is always filtering by person, so it can use the creator- or maintainer-prefixed index07:25
wallyworldno it doesn't07:25
wgrantThen, once it has those 75 IDs, it does a second query to load the SPRs07:26
wallyworldit doesn't stop at 7507:26
wgrantOh?07:26
wallyworldbecause the batching is done at the view level07:26
wgrant202+ if max_results and len(ids) >= max_results:07:26
wallyworldyes, max results is 5 and optional07:26
wallyworldmax results is used for the overview page sunnaries07:26
wallyworldto show 5 from each list07:27
wgrantAh, well then this will probably always time out07:27
wallyworldbut the invidual pages don't use max_results07:27
wgrantThere's no point having the indexed sort if you're just going to load the entire set anyway07:27
wallyworldonly the ids07:27
wgrantThe whole problem with the query is that it ends up loading the whole set07:27
wallyworldnot the recordds, just the ids07:28
wallyworldand then the outer query is batched07:28
wgrantThat's irrelevant; it's still considering ~100000 more tuples than is required07:28
wallyworldso an indidual person can have 100000 ppas?07:28
wallyworldbecause the ids are filtered07:29
wallyworldto match the creator/maintainer etc07:29
wallyworldonly only those matching ones go to be used in the outer query07:29
wgrant100000 SPRs? Sure.07:31
wallyworldwell, the only alternative it to implement a custom batcher up in the view layer07:32
wallyworldwhich can be done07:33
wallyworldwgrant: is the current implementation worth trying? it won't be worse than what's there07:34
wgrantwallyworld: It is strictly worse than what's there07:35
wgrantWe're no longer just asking postgres to consider every related row07:35
wgrantWe're asking it to return bits of them to Python07:35
wgrantIn terms of O(disk accesses) it's no worse, but there's an extra constant multiplier there :)07:35
wallyworldok, there's no choice then, but to move the code07:36
wallyworldto a batcher07:36
wgrantRight07:36
wallyworldthere will still be issues07:37
wgrantRight, there is great potential for pathological cases07:37
wallyworldif the batches are not traversed sequentually07:37
wgrantOh?07:37
wallyworldif someobe url hacks07:37
wgrantI'm not seeing the issue07:38
wallyworldthe relationship to records loaded to batches in not defined07:38
wgrant(though ideally you'd use a derivative of SRF here, which doesn't support URL hacking anyway)07:38
wallyworldso it would need to walk the records sequentuially07:38
wallyworldinstead of using offset and limit07:38
wallyworldas one would do for a normal query07:39
wgrantRight, that's the problem with an offset-based batcher07:39
wgrantAlthough I guess due to deduping even a range-based duper would have to traverse the whole lot07:39
wallyworldyep07:39
wgrantStill, this will make the page suck less until we can denorm it properly07:40
wgrantAnd the MP you have is strictly worse than the status quo07:40
wallyworldand as someone clicks through the batches, stuff needs to be retained in memory07:40
wgrantNot retained in memory as such07:41
wgrantBut subsequent batches will also have to calculate all previous batches07:41
wallyworldor if it is retained, then notr really07:41
wgrantHow can we retain it?07:41
wallyworldi session variable07:42
wgrantHah07:42
wallyworldwgrant: so if someone is many batches into scrolling through the table, then each next click presents more and more work for the batcher07:44
wgrantSure07:44
wallyworldwith a large number of records, it surely will timeout07:44
wgrantAnd that's something we probably have to live with until we fix the schema07:44
wgrantIt's relatively rare that someone will go deep enough that it will be a problem07:45
wgrantAnd it's completely not worth hacking something into the session for this temporary fix07:45
wallyworldi will have to handle Last properly though07:45
wallyworldand Prev07:45
wgrantThey'll work fine as long as the user has a small number of uploads07:46
wallyworldwhy don't i just say fuck it, there's no need to order by date the records on the individual pages07:47
wgrantThey have to be ordered somehow07:47
wgrantOr batching will not work07:47
wgrantIt's not the order that's the problem; it's the distinct on07:47
wallyworldyes, i'm just wonderong out loud if we can avoid that07:48
wgrantIf we dump the distinct on then the entire problem becomes trivial07:48
wallyworldwe need the distinct on to shw the latest 5 for the overview page07:48
wgrantWhy?07:48
wallyworldjust because07:49
wgrantBy the current definition of the latest 5 we need the distinct07:49
wallyworldthat's how it is put together07:49
wgrantBut by the current definition of +ppa-packages we need it there too07:49
wallyworldpropably, i ws just wondering out loud07:49
wallyworldoh well, custom batcher it is i guess07:50
wallyworldwgrant: so what's the "normal" number of ppas a person would have on that page?07:51
wgrants/ppas/packages/?07:51
wallyworldyes07:51
wgrantLet's see07:51
wallyworldcutis has 38 i think07:51
wgrantCurtis is at the low end :)07:52
wgrantThe most is probably about 250k07:52
wgrantBut that's exceptionally high07:52
wallyworldso my implemention was premised on it only being a few 100 at most07:52
wallyworldwow 250k!07:52
wgrantYour implementation is basically what postgres chooses today, except slower.07:52
wgrantThe top 100 ranges from 2k to 220k07:54
wallyworldok07:55
wgrantIt may almost be worth just adding a new table maintained by garbo to make all these pages trivial07:57
StevenKAnd Archive size?07:57
StevenKSince I'm still sure you'll murder me for two columns on archive07:58
wgrantWell07:59
wgrantA similar approach is probably useful there07:59
wgrantarchive already has a tonne of related stats columns, and I haven't worked out whether they're worth it yet07:59
wgrantThey probably are08:00
wgrants/worth it/worth having in the main table/08:00
wallyworldthere's all sorts of stuff that can be denormed in the spr, spph area isn't there?08:00
wgrantThose are the two big ones08:01
wallyworldi should just finish this branch though08:01
StevenKwgrant: It's clear we need a schema change. Even pulling the rows from LFC is 2.8seconds08:02
wgrantStevenK: Certainly, we need a schema change08:02
wgrantCalculating all this stuff live is insane08:02
wgrantIt's just not clear what the detail of that schema change is08:02
wgrantFor +ppa-packages and co it's much clearer and simpler08:02
StevenKThe two I can think of are Archive.{source,binary}_size or Archive.size as an array08:03
wgrantIt makes no sense as an array08:03
wallyworldmaybe i should just do the denorm then08:03
wgrantwallyworld: Or decide to not do the DISTINCT ON08:03
wallyworldwould that matter? we would get dupes then08:04
wgrantIt would change the definition of the page08:04
wgrantIt's not clear whether it would be changing it in a problematic fashion08:04
wallyworldfrom what i gather, we are not sure what the page is used for08:04
wallyworldor who uses it08:04
wgrantWe know sort of08:05
wgrantAnyway, the page can retain its current definition in a performant manner if we do the denorm, otherwise it probably cannot. It can be made performant without the denorm if we eliminate the distinctness08:05
wallyworldand does that "sort of" indicate we couild remove the distinct on?08:06
wgrantI don't think removing the distinct on would be a problem08:06
wgrantIt's probably more confusing than anything else08:06
wgrantWe've had at least one bug filed about that aspect of the behaviour, although I think it was invalided.08:06
wallyworldwe would need to ensure we display a distinguishing piece of data for each record08:07
wallyworldlet's discuss tomorrow08:07
wgrantIndeed08:07
wgrantThe denorm is quite simple, if we opt to do it08:07
wgrantInstantaneous updates are not mandatory, so we can just do it in garbo-frequently08:08
wallyworldit would be nice if it also has line of sight for other fixes08:08
wallyworldStevenK: i replied to your mp comment - do you agree?08:08
wgrantOh, crap, that MP08:08
* wgrant glances08:08
wallyworldlol, you have too much on your plate08:08
wallyworldah, trick or treaters, better get some lollies for them08:09
wgrantcrazy qlders08:09
StevenKI'd still prefer an override policy that backs onto UnknownOverridePolicy08:09
wgrantSure08:09
wgrantThat's the ideal solution08:09
wgrantfind_and_apply_overrides should be replaced by override policy calls08:10
=== Ursinha-afk is now known as Ursinha
wgrantBut Ian quite reasonably wants to be done before the heat death of the universe :)08:10
wallyworldyes, but i thought we agreed that could wait08:10
StevenKLike override policies are hard to right :-P08:10
StevenKSigh, write08:10
StevenKDidn't I write all of the current ones?08:11
wgrantI think so08:11
StevenKwallyworld: Then add an XX08:11
StevenKXXX08:11
StevenKObviously, typing is HARD08:12
wallyworldok, i'll take another look, maybe it can be done easily08:12
wgrantThis fix is nearly correct; let's not overcomplicate it now with it so close to done08:12
wgrantThis is a useful incremental improvement08:12
wgrantWhich doesn't break anything08:12
wallyworldwhat did i miss?08:13
wgrantYou shouldn't be overriding the section, just the component08:13
wallyworldis there an existing bug for the XXX i would add?08:13
StevenKNot sure, but it would be Low08:14
wallyworldah ok, i saw somewhere else was overrding the secion08:14
wallyworldwhy does that other place do the secion but not here?08:14
wgrantwallyworld: We want to inherit the section of a previous publication, because for a particularly binary it doesn't usually change08:15
wallyworldbut not if we get the component from a source publication08:15
wgranteg. libfoo is in libs, libfoo-dev is in libdevel08:15
wgrantIt's a different dimension to component08:15
wgrantcomponent is archive policy, section is just package categorisation08:16
wallyworldok, i have no clue about the data model08:16
wallyworldthanks08:16
wallyworldi'll fix that bit08:16
wgrantIt makes sense to inherit the archive policy from the source, but not the package category (since the binaries usually specify a sensible section, and the section differs between binaries)08:16
wallyworldok, makes sense08:17
wgrantThe code structure is a bit terrible, but it was already awful so I can hardly object on that basis08:17
wallyworldi didn't realise section was categorisation08:17
wallyworldi tweaked an existing method08:18
wgrantCish libraries are in libs, X stuff is x11, Python libraries are in python, etc.08:18
wgrantRight, but that method is called in an existing thing to handle various existing override cases08:18
wgrantSo it's slightly ugly08:18
wallyworldyes, but it provided reusable code08:18
wallyworldso i just hijacked it a bit08:18
wgrantRight08:19
wallyworldkeeps loc count low :-)08:19
* wgrant needs to head out for a while now... hopefully StevenK can approve it, otherwise I can in a bit08:19
wallyworldthanks again08:19
wallyworldwgrant: going trick or treating :-)08:19
wgrantHeh08:19
wgrantNot since I lived in Canada :)08:19
wallyworldit's getting bigger here08:20
wallyworldi don't mind it cause it's pagan and celtic in orign08:20
StevenKAnd it helps you're a Scrooge who hates Christmas :-)08:21
wallyworldyep, that's me08:21
wallyworldi hate anything to do with organised religion08:21
wallyworldewspecially since they stole Christmas from the pagans08:21
wallyworldcause it was originally Saturnalia08:22
adeuringgood morning08:46
deryckMorning, adeuring08:53
adeuringhi deryck08:53
=== almaisan-away is now known as al-maisan
=== Ursinha is now known as Ursinha-afk
=== Ursinha-afk is now known as Ursinha
czajkowskicjwatson: https://bugs.launchpad.net/launchpad/+bug/1073492  is this down to some of the work you've done recently ?11:07
_mup_Bug #1073492: Sync changelog doesn't include all changelogs between release version and new Debian version <derivation> <Launchpad itself:New> < https://launchpad.net/bugs/1073492 >11:07
tumbleweedczajkowski: that's not a launchpad bug11:10
tumbleweedoh, it's not what I thought it was11:12
czajkowski:)11:12
* tumbleweed is glad to see syncpackage getting it right, for a change :)11:13
cjwatsonczajkowski: not sure, would probably need to spend more concentration than is typically available during a conference to figure that out11:19
cjwatsonczajkowski: I don't recall changing anything around there *intentionally*11:19
=== al-maisan is now known as almaisan-away
=== Ursinha is now known as Ursinha-afk
=== yofel_ is now known as yofel
=== almaisan-away is now known as al-maisan
=== Ursinha-afk is now known as Ursinha
=== al-maisan is now known as almaisan-away
=== matsubara is now known as matsubara-lunch
=== Ursinha is now known as Ursinha-afk
=== Ursinha-afk is now known as Ursinha
jcsackettsinzui: can you review https://code.launchpad.net/~jcsackett/launchpad/invalid-product-names/+merge/13240520:13
sinzuiI will20:14
jcsackettthanks.20:15
sinzuijcsackett, r=me20:28
jcsackettsinzui: awesome thanks.20:28
sinzuijcsackett, you might want to look at bug 1055751 again20:29
_mup_Bug #1055751: Permission denied: "Cannot create '+filediff' viewing diffs on +branch urls <403> <codebrowse> <oops> <Launchpad itself:Triaged> < https://launchpad.net/bugs/1055751 >20:29
sinzuiI think the issue is in translatePath or BranchNamespace where we do not expand or lookup the aliased name20:29
jcsackettsinzui: ok, happy to take another look at it.20:30
jcsacketti've got some distance on it now and a bit more knowledge of the domain. :-P20:30
sinzuijcsackett, We get the error when users are browsing the series alias rather than the 3-part/5-part names that the code you were looking at expects20:31
sinzuieg lp:launchpad -> lp:~launchpad-pqm/launchpad/devel20:31
sinzuijcsackett, I am not feeling well, and I have the added stress of children putting on Halloween costumes. I will send and email summarising my effort to be productive to the squad20:32
jcsackettsinzui: dig.20:33
diptanuc`Hi Guys20:57
diptanuc`Just saw that you guys use Go to power services at canonical. Was interested to talk more about what you do with it.20:57
sinzuidiptanuc`, Launchpad doesn't use Go. JuJu and related cloud tools uses it.21:14
=== matsubara is now known as matsubara-afk
diptanuc`sinzui: Oh i see, who is the right person to talk to?21:50
diptanuc`Is there a channel where they hang out?21:50
lifelessdiptanuc`: gustavo niemeyer would be a good choice, in #juju21:50
czajkowskicr3: ping, trying to work out your issue on https://answers.launchpad.net/launchpad/+question/21279321:53
cr3czajkowski: thanks, I'm very curious to understand how to get checkbox-ihv to look like certify-web21:54
wgrantcr3: Read the paragraph at the top of +sharing21:54
wgrantOn both projects21:55
czajkowskicr3: I cant see the-ihv but as wgrant says , if you read that area on the +sharing it should become clearer.21:56
cr3wgrant: yeah, they look different. should I have asked for a proprietary project instead of a private one?21:56
wgrantcr3: You created an open source project21:56
cr3wgrant: my mistake, it seems I should've created a proprietary one :(21:57
wgrantYou probably wanted to select Other/Proprietary as the license, which will enable to you use commercial features21:57
wgrantYou can change it on +edit21:57
czajkowskicr3: is it actually properietary though21:57
czajkowskior is it thats how you think it should be set up for sharing ?21:57
cr3czajkowski: it's actually proprietary21:58
czajkowskiok21:59
wgrantRight, proprietary features tend to be easier to enable when you configure your project as not just another random open source project :)22:00
wgrantcr3: Once you've set it to Other/Proprietary you'll get a 30 day trial commercial subscription, and you can set stuff on +sharing22:04
wgrantYou'll need to poke someone (or RT) to get the subscription extended22:04
czajkowskiaka me via commercial@lp.net22:04
wgrantAh yes, that's the address22:05
czajkowskiwgrant: care to explain https://answers.launchpad.net/launchpad/+question/212880  to me ?22:05
cr3czajkowski, wgrant: thanks folks, I'll have another look into this tomorrow22:06
czajkowskicr3: np22:06
wgrantczajkowski: Looking22:06
czajkowskiwgrant: thank you22:43
wallyworldStevenK: i've updated the code to add the XXX etc23:46
StevenKwallyworld: I was expecting the XXX to be just above the if block you added23:57
wallyworldStevenK: well, it's the whole method than needs to be refactored23:58
StevenKThen why is the XXX half-way through it?23:58
wallyworldit's in the doc at the top23:58
StevenKWell, the hack is in processUnknownFile23:59

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