[00:02] lifeless: One could say the same for any other sourcecode change. [00:02] We could probably have make check that. [00:02] Do a no-op update-sourcecode run [00:04] lifeless: how do you get the query count to show in the top right corner of the page? [00:05] 'visible_render_time default 0 on' [00:05] wgrant: thanks [00:05] StevenK: Is this for the base version thing? [00:05] wgrant: that might be nice [00:06] wgrant: shipit is particularly weird though because it breaks on zcml, not on $specific tests. [00:06] lifeless: bzr-builder is also very good at breaking model imports. [00:06] ah [00:07] wgrant: anyhow, yes, these things all need communication :) [00:07] or we could stop using source code [00:07] Heh, good luck with that. [00:08] why do we use source code and not eggs for that stuff? [00:09] wgrant: Yes [00:09] wallyworld: eggs came along much later. [00:09] and we don't want to go in and eggify the source code stuff...? [00:10] Well, I don't really like eggs. [00:10] And everytime shipit is moved into an egg, it breaks and leaves this rotten smell ... [00:10] wgrant: what is your preference to eggs? [00:11] grah [00:11] wallyworld: Real packages are nice, because they aren't programming languages feeling that they need to reinvent the package manager :) [00:11] We have 3 ways to inject dependencies into our tree: eggs, sourcecode and binary packages from the PPA. [00:11] sample branches are not scanned [00:11] no wonder its approximately useless. [00:11] Also, real packages don't involve downloading unsigned code over HTTP. [00:12] wgrant: You mean that doesn't give you a warm fuzzy feeling? :-P [00:13] wgrant: yes, but python has eggs, java has jars etc - it a common paradigm. i can see the point of keeping such things separate from the overhead of a full blown package that is not universal across os's rpm vs apt etc [00:13] It is a common paradigm, but it also fucking stupid. [00:13] :( [00:13] wgrant: you forgot IMHO :-) [00:13] It isn't just his opinion. [00:14] *Anyone* who has done a bunch of distribution work shares it. [00:14] Except lifeless, because he's special. [00:14] :-( :-( make: *** [check] Error 1 [00:15] I tried running ec2 test --attached [00:15] everything seems to pass [00:15] then I get this ^^^ [00:15] I had several detached ec2 test runs, [00:15] i haven't done any distribution work so i don't yet appreciate the drawbacks of eggs etc. all i see are packaging overheads and competing implementations [00:15] thumper: Full output pls. [00:15] and they all fail [00:15] wallyworld: So, we have a wheel. It's round, it mostly turns without issues, but it has been reinvented by PyPI, CPAN, Gems, ... [00:16] wallyworld: you can't win, really [00:16] And then the reinventors of the wheels decide that they don't want anything to do with distributions. [00:16] eg. Ruby [00:16] wgrant: I've emailed it to you [00:16] "lol, why would people want distribution packages? end users should use gems" [00:16] It seems to be a bunch of NIH to me [00:16] wallyworld: random python upstreams of course would rather not learn new packaging tools and conventions for Debian, OS X, Windows, etc... [00:16] i'm hit, bleeding badly, can't hang on much longer, copping it from all directions..... [00:17] wallyworld: Well, you did just jump up and wave your shirt in the air and yelled "I'm over here, come get some!" [00:17] wallyworld: but at the same time Debian, Fedora, OS X, etc don't want dozens of non-cooperating packaging systems where one would do [00:17] thumper: That is a little bit special. [00:17] spiv: i guess that's one of my points - each os has it's own packaging mechanism, vs eggs for python which is universal [00:17] wallyworld: Universal... for Python. [00:18] wallyworld: it's the "for Python" bit that's the killer [00:18] StevenK: uhm, don't malign me please. [00:18] wallyworld: what happens when a Python package depends on a C library [00:18] And then never mind rpm vs apt vs emerge ... [00:18] wallyworld: etc :) [00:18] StevenK: I *loath* gems jars eggs etc [00:18] lifeless: I was poking fun, not trying to do so [00:18] StevenK: and I've been pretty vocal about that [00:18] I would love to just use debs for lp dependencies. [00:19] thumper: Ah, there it is. [00:19] lifeless: Hm. I had you in my mind as the other way -- so noted, sorry [00:19] spiv: fair point. if only each os would stop adopting it's own packaging implementation [00:19] thumper: There are failures in the stream. [00:19] but the deb python maintainers want *upstream* to decide on how to handle conflicting APIs for multiple versions of the same package on disk [00:19] StevenK: which is never ever ever ever ever going to happen [00:19] thumper: But the summary doesn't show them because of a bug I'm currently writing a test for. [00:19] wallyworld: if only each os was a derivative of Ubuntu :) [00:19] wgrant: why aren't they in the email? [00:19] because python folk wave the virtualenv magic flag [00:20] the result is that every python transition is lockstep [00:20] thumper: jml broke it when he added ec2 list. [00:20] (and I don't mean python VM, I mean individual packages [00:20] The fix is easy, but a test is slightly harder. [00:20] Package management is hard [00:20] and that results in us not being able to shift dependencies at all, which is why we're not using debs. [00:20] see for instance my threads on debian-python (both direct and through folk I've been poking about this) [00:21] StevenK: its easy if we accept that upstream have different drivers than us [00:21] Well, we're using a mix of debs, eggs and source trees [00:21] And random things that people thought it was a good idea to import into the tree. [00:21] wallyworld: Do you see why we don't discuss this often? [00:21] Heh. [00:22] wgrant: :-( [00:22] StevenK: yeah, i had no idea what a feeding frenzy it would create. wow :-) [00:22] StevenK: and the debs give us routine production fail, the source treess toolchain isn't being fully used and the eggs we have to cripple the toolchain because we like verified code [00:22] Baptism of Fire, part #58585 [00:22] <_mup_> Bug #58585: Installer is crashing (all disk activity stops) at scanning mirror message < https://launchpad.net/bugs/58585 > [00:22] StevenK: but you forgot, we *also* use: [00:22] - bundled code in hidden bits of the tree [00:23] * thumper sighs [00:23] - more bundled code in other better hidden bits of the tree. [00:23] lifeless: The debs only fail because there seems to be this magical step where packages jump from the PPA into CAT .... [00:24] StevenK: The main problem is the multiple versions issue. [00:24] StevenK: thats not the fail [00:24] StevenK: the fail is when version A and version B are incompatible with each other as far as LP is concerned. [00:24] StevenK: we then have to simultaneously upgrade the LP tree at the same time, or we have a fail [00:25] :-/ [00:25] which means a more complex rollout - take the entire appserver machine offline, (== 20% drop in capacity - when we are already overloaded), upgrade debs, deploy new LP, bring the servers back online [00:26] StevenK: what we need is what C/mono etc libraries have - sonames. [00:26] then we can install the new debs, lp ignores them, and then we upgrade lp to one that uses the new debs, bingo it works. [00:26] StevenK: in a java world things like e.g. osgi go a long way toward this [00:26] ... or write code that can work with both version of the code. But I understand that isn't always possible. [00:27] but in python 'import' is global, there is no built in concept of 'library version' - you cant say 'import bzrlib 2.2 as bzrlib' [00:27] and the plumbing for this goes deep [00:27] StevenK: its both not always possible and its /harder/ [00:28] osgi rules! [00:28] given the choice of two ways to achieve something, only particularly opinionated or previously burnt folk will choose the harder way. [00:28] wallyworld: for all its mind bending stuff, yes, yes it does. [00:29] so its a long term goal for me to beat enough sense into python to permit this [00:29] or JFDI a workaround in the distro using pkg_resources.require() [00:29] That could work. [00:29] but I suspect we'd end up auto rebuilding the entire python stack [00:29] What is Fedora doing about this sort of thing? [00:30] because the debian python group /don't get it/ [00:30] because they are thinking desktops and 'upgrade every 5 years' style server environments. [00:31] wgrant: I've not seen anything - reality is most folk deploy python stacks using eggs / the django thingy / virtualenv etc - for the previously discussed reasons. [00:31] *and* most really agile things I've seen are php or java, not python, so there isn't that much web world pressure on distros to fix this [00:31] (because python is 10 times slower than either php or java) [00:32] To write, run, deploy, or all three? [00:32] all three [00:32] deploy is about equal actually [00:33] php apps tend to be very lean [00:33] java apps aren't, but they have -wonderful- tooling around development [00:33] and for execution time, php and java eat python for breakfast and lunch [00:34] the only /serious/ python thing at *scale* I know of is youtube : and they don't run CPython, rather they run bleeding edge experimental binaries [00:34] We aren't serious? [00:34] StevenK: we're tiny [00:34] StevenK: all our problems are self inflicted [00:35] we've < 1/2T of data [00:35] wgrant, I think Fedora still haven't got so supporting multiple versions of the python runtime, so I don't think they've tackled this [00:35] lifeless: python has good development tooling too. you don't *have* to use emacs :-P [00:35] james_w: Hah. [00:35] a single (very high end) commodity PC server can run our entire backend load [00:35] And I'm not going to ask about other distros like Arch... given that they've switch /usr/bin/python to 3.x. [00:36] StevenK: we have the potential to be serious if we get our shit sorted and /fast/ [00:36] I will be delighted when we start getting user adoption scale problems [00:36] A year ago I would have said we were doomed to be slow forever. [00:36] rather than 'oh and we don't delete obsolete data' scaling issues. [00:36] But I think that may not be the case. [00:36] wgrant: I wouldn't have taken the job if I thought it was insoluable [00:36] bah [00:36] unsolvable [00:37] lifeless: Yes, but you are crazy :P [00:37] It doesn't dissolve in water either [00:37] Yet very effective. [00:37] * StevenK peers at subunit [00:39] subunit-filter's default operation is to strip sucessful tests. Except one turns up ... [00:42] I just love how the Australian Tax Office can give a recorded message saying that they are too busy to take the call ... for 3 weeks solid [00:44] StevenK: if the stream gets corrupted by things printing to stdout [00:44] lifeless: Such as test failures? [00:44] StevenK: you can see what looks like something being not-filtered, whenthe parser actually thinks 'this is junk' [00:44] StevenK: test failures shouldn't print to stdout, the raise exceptions internally [00:45] StevenK: you can see if this is the case with --no-passthrough [00:45] that will squelch what subunit thinks is chatter on stdout [00:45] I'm already using --no-passthrough [00:45] mm [00:45] then if you're seeing a success, [00:45] ah perhaps a skip ? [00:45] some things fold skip to success [00:45] and older subunit had a bug in that area [00:45] try --no-skpi [00:46] Ahh, no, it's these tests [00:46] There are two are cunningly named [00:46] woo, another stab at timeouts complete [00:46] lp:~lifeless/launchpad/bug-722956 [00:50] I need a review https://code.launchpad.net/~lifeless/launchpad/bug-722956/+merge/51481 [00:50] diff is generating still [00:52] lifeless: so.. curious.. how hard is it to setup a project as a distro w/ source packages and such? [00:53] lol [00:53] SpamapS: impossible [00:53] SpamapS: starting this week julians team is working on making it possible [00:53] SpamapS: a lot of ground work is in place [00:54] they were interrupted by the reorg [00:54] StevenK can tell you how much work remains [00:54] Lots [00:54] Tonnes. [00:54] o/~ I need a review o/~ to the sound of 'I need a hero' [00:54] Getting it working isn't that hard. Getting it effectively usable is another thing. [00:54] I'm working on low-level plumbing [00:54] lifeless: ahh.. thats good.. I think the principia ensemble project I started is going to need package tracking. [00:55] are they actually packages ? [00:55] or just vaguely similar [00:55] they're called formulas.. [00:55] should be called instruments [00:55] or scores [00:55] anyhow ;) [00:55] Heh [00:56] lifeless: agreed.. would have been much cooler. :) [00:56] though if it hadn't been formula.. I wouldn't have been able to come up with the name Principia Ensemble [00:56] SpamapS: if they are similar but not the same, then I wouldn't shove them in as packages - packages are tied up in the whole package building machinery [00:56] lifeless: yeah I don't need that.. I just need sub trackers [00:56] Or do you just want the bugtracking aspects of source packages? [00:56] SpamapS: think crisp and clean; we can bring up a dedicated interface pretty directly. [00:56] Right. [00:57] SpamapS: project groups do that, but the components are 'project' which is pretty big. [00:57] if we were to refine 'bug.target' we could do subtrackers on projects quite easily. [00:57] Yeah I'd expect there to be 300 - 500 formulas [00:57] thats the sound of 20 engineers screaming at me [00:58] Only 20? [00:58] StevenK: 5*5 in theory but we're short atm [00:58] plus I know at least 2 that agree [00:59] lifeless: We're not short any more :( [00:59] wgrant: we are, its just going to stay like that for a while [01:01] wgrant: are you actually working on https://bugs.launchpad.net/launchpad/+bug/575450 [01:02] <_mup_> Bug #575450: Archive:+copy-packages nearly unusable due to timeouts < https://launchpad.net/bugs/575450 > [01:04] lifeless: I haven't touched it for a couple of weeks, and don't have branches with any significant improvements. You may steal it if you wish. [01:04] It's not really difficult. [01:04] I was just trying to make some infrastructure improvements to make testing easier. [01:04] * lifeless gifts wgrant with a laserlike obsession with production performance [01:04] eg. ++oops++ doesn't work on form submissions or the webservice (as yet unsolved), query counts are difficult and non-deterministic (both solved) [01:05] wgrant: those are great things to do [01:05] wgrant: which query counts ? [01:05] wgrant: oh, you mean the session thing? [01:05] That, and your new matcher. [01:06] Although there is still that Storm thing where it will do a SELECT 1 to check if an object exists the second time. But I wonder if store.reset() will fix that. [01:07] lifeless: The most difficult bit of those timeouts it the DAS queries. [01:07] wallyworld, StevenK: mumble? [01:07] thumper: ok [01:07] lifeless: They're produced by createMissingBuilds' calls to getBuildByArch... and that is all a really big mess. [01:07] zomg [01:08] DistributionSourcePackage - 778 repeated lookups [01:08] Where? BugTask:+index? [01:08] bug 705713 [01:08] <_mup_> Bug #705713: Bug:EntryResource Timeout trying to set bug private - death by sql / late evalation < https://launchpad.net/bugs/705713 > [01:08] Heat? [01:09] not obviously [01:09] just 1.4K sql queries [01:10] It was a good thing, though. [01:10] bbiab, doctor visit. [01:10] wallyworld: https://dev.launchpad.net/PolicyAndProcess/MaintenanceRotation [01:12] ok so the consensus right now is that sub-trackers will just have to be implemented using tags at the moment. [01:12] ? [01:12] SpamapS: Unless you want to use a project group, which you probably don't. [01:13] wgrant: right I don't want to register 600 projects.. some of which will have 8 - 20 lines of code. [01:48] I think tags should work well [01:48] we probably have a few small bugs to sort out in making them scale and be usable enough [01:49] but that woul dbe significantly less than actual sub trackers. [01:49] less work I mean [01:53] wgrant: so what are you stabbing today? [01:53] lifeless: The last of checkwatches. [01:54] wgrant: would you like to get the loggerhead thing too? [01:54] lifeless: You mean jam's branch that I reviewed last week? [01:54] I think it just needs a merge to trunk + a merge to the lp deploy branch + a sourcecode rev [01:54] + a bug filed for capturing timeouts [01:54] yeah [01:55] launchpad_loggerhead is in the tree now. [01:55] 15K in one hit. It would be a record of some sort [01:55] It just needs to land. [01:55] oh true [01:55] Which relies on us being out of testfix. [01:55] Which relies on a LOSA [01:55] Right. [01:56] * StevenK writes a test, getting UploadFailed, and sighs at this layer crap [01:56] Is it unacceptable to cheat by forcing the build then landing stuff? [01:56] Haha [01:56] It will fail in the same way and never make it to stable [01:56] if your thing passed ec2 its fine [01:57] Right, it will just fail again, but at least stuff will get landed. [01:57] * wgrant does it. [01:57] wait [01:57] you could rollback the apt thing [01:57] Could. [01:58] file a bug with the checklist of missed systems [01:58] Ah, it's building again anyway. [01:58] Who landed that, anyway? [01:58] link it to a branch to reinstate it [01:58] jtv I think [01:58] StevenK: jtv. The RT says it's rolled out everywhere. [01:58] But apparently not buildbot. [01:58] (it did ask for it to be rolled out to buildbot) [02:08] lp.soyuz.scripts.tests.test_publishdistro.TestPublishDistro.testPublishDistroRun [02:08] soyuz-set-of-uploads_txt [02:08] ^ is that the apt thing ? [02:08] soyuz-upload_txt [02:08] Yes. [02:08] from ec2. sigh, I need a new ami don't I [02:09] Erm. AMI 508 should be enough. [02:09] Was this a really old branch? [02:09] wgrant: I have a different tree for submitting from [02:09] so ec2 vaguaries don't bit me - but when the upgrade is mandatory, it bites [02:12] thumper: wallyworld: now you're on maintenance - 5th top timeout : 26 / 18 RootObject:+daily-builds :) [02:12] lifeless: i'm working on that one right now [02:13] actually, just context switched to land some branches from alst week [02:14] we can't land anthing today [02:14] lifeless: i probably missed the discussion as to what's wrong with landing stuff? [02:18] buildbot's vm was not updated with the new apt, so when jtv landded the code to depend on it we went into testfix and cannot get out without a losa [02:18] or reverting his branch [02:18] And reverting his branch when the fix is so easy and it's not going to cause a QA chain of pain seems bad. [02:20] ok. thanks [02:27] lifeless: is it possible the compaction error is happening because of the low fd limit? [02:42] SpamapS: no [02:43] SpamapS: its a classdefnotfound error [02:43] SpamapS: got a lucid vm ? [02:45] SpamapS: I've pushed my test code to lp:~lifeless/oops-repository/trunk [02:46] SpamapS: just needs the cassandra ppa, the lp ppa [02:55] Hmm. [02:55] Codebrowse is down? [02:55] lifeless: ah ok.. right [02:56] SpamapS: I think its a missing jar that isn't wrapped into the war for whatever reason [02:56] SpamapS: but, branch my code, run make check. [02:56] (oh, read README and install deps) [02:56] 3 hours later.. ;) [02:57] wgrant: faaaark looks like it [02:57] and yet, noone has complained [02:57] spm: are you lurking? cause if you are, and aren't on leave, I'd rather bug you than wake elmo. [02:58] 3am London time :-( [02:58] pjdc: ? [03:01] lifeless: Is codebrowse downness critical now? I thought it had some ridiculously high threshold before it could be treated as such. [03:03] Hm. [03:03] There is no guava. [03:03] Everything else is pingable, so I presume the [03:03] machine itself is down. [03:04] guava replies to pings here? [03:04] In..deed. [03:04] But not from the DC. [03:06] Looks like it is up, and carob can rsync from it, but not ping it. [03:06] All the other prod machines are pingable :/ [03:06] wgrant: guava is in the dmz [03:07] for stupid reasons [03:07] Hmm. [03:07] guava CPU graphs are a bit sad. [03:07] https://lpstats.canonical.com/graphs/GuavaCPU/ [03:08] mwhudson: I suppose this isn't documented anywhere that non-IS can see? [03:09] wgrant: not that i know of [03:09] Heh. [03:09] i guess you can probably see the rt i filed for "please move guava out of the dmz" about two years ago [03:09] Anyway, looks like both codebrowses wandered off to chew on a CPU each at 01:20 [03:13] Ah, Francis rejected it. [03:13] Sad. [03:14] StevenK: OOPS-1884A1684 [03:16] wgrant: its gritical [03:16] wgrant: we have two redundant codehosting instances [03:17] why was the move rejected ? [03:17] wgrant: so yes, if its down, it needs to be fixed. This is bread and butter facilities for our users. [03:17] lifeless: See the bottom of https://rt.admin.canonical.com/Ticket/Display.html?id=33173 [03:18] lifeless: I recall that previously it has been said that it was not as critical as everything. I disagree, but that is how it was. [03:18] if we've killed the arch mirror [03:19] we can move within the main network [03:19] wgrant: the old definition of critical is what you're thinking of, I think [03:19] wgrant: that got overhauled late last year [03:20] I recall it also had the Soyuz threshold at 24 hours, or something stupid like that. [03:20] any launchpad service or feature becoming unusable [03:20] immediately [03:20] ... [03:20] We aim to have none of these, ever. [03:20] ...This includes beta features [03:34] wgrant: :-( [03:34] StevenK: ? [03:34] wgrant: The OOPS you linked me [03:34] Ah, yes. [03:35] I bet I just generated another oops [03:37] Hm. Only the no signer packages do that. [03:38] Why do I have this bad feeling there's a deleted recipe involved. [03:39] There is. [03:39] :-( [03:40] * StevenK tries to swap in the branch details. [03:43] wgrant: So a test for this would be create a recipe, link it to an SPR, call recipe.destroySelf() and then look at the view? [03:43] StevenK: I think so. [03:43] You may need to make sure that the SPRelease has no signer. [03:44] That's going to be fun to do in TAL. [03:44] Why? [03:44] (I suspect it's more your new thing than the signer, but best to be thorough) [03:46] I certainly am blaming my addition [03:51] wgrant: I have a test written, let's see ... [03:54] wgrant: Confirmed, the test fails in the same way as the OOPS. [03:56] * thumper is attacking a sub-100k bug number [03:57] made more fun by the blueprint and email aspect :) [03:57] Whee, 350 lines of traceback [04:04] wgrant: So, I can ignore printing the built by if the recipe is deleted, or I can say 'deleted recipe' -- what are your thoughts? [04:05] I'd say "deleted recipe" [04:05] ... or can I? How do you do if else in TAL? [04:06] Or can haz a link to TAL documentation that doesn't make my eyes bleed? [04:07] You'll have to use a tal:condition. [04:10] There's nothing like genshi's py:when. [04:10] tal:iban [04:10] lifeless: Two drums and a cymbal fall off a cliff. [04:10] boom boom tish ? [04:13] PTRuntimeError: ['Compilation failed', 'HTMLParser.HTMLParseError: EOF in middle of construct, at line 34, column 9'] [04:13] :-( [04:13] pretty simple review: https://code.launchpad.net/~thumper/launchpad/blueprint-email-handler-bug-83414/+merge/51488 [04:14] and un-contentious [04:15] Isn't it illegal to have a Blueprint branch which adds more lines than it deletes? [04:16] no [04:16] lifeless: thanks [04:16] do the simplest thing possible [04:16] velocity with solid code [04:19] wgrant: not when the addition is tests [04:19] doesn't matter what it is [04:19] its part of the same code base [04:19] same rules as for anywhere else apply [04:19] *if* IssueTracker goes ahead, it will get folded in [04:20] if it doesn't, we need it maintained, and that means having a level playing field for patches to it. [04:20] we *must not* make any part of the code less pleasant to work on than another, culturally, technically or otherwise. [04:22] :-([A[APTRuntimeError: ['Compilation failed', 'zope.tal.taldefs.TALError: Invalid variable name "recipe" in expression u\'not sprb/recipe\', at line 37, column 9'] [04:22] Can I not do that in TAL? [04:22] StevenK: what are you trying to do [04:22] StevenK: Not like that. [04:22] its also a bad idea even if you could [04:22] you need to use the ID if you don't want to trigger lazy loading [04:23] 'not: sprb/recipe' [04:23] Project devel build #482: STILL FAILING in 5 hr 29 min: https://hudson.wedontsleep.org/job/devel/482/ [04:24] Hm. I think that's with the new apt [04:24] wgrant: probably a bad idea unless the rest of the page is guaranteed to show the recipe [04:25] wgrant: not: sprb/recipeID [04:25] lifeless: The rest of the page is guaranteed to show the recipe. [04:25] wgrant: kk. I will keep pushing this meme :) [04:26] Does anybody have a Lucid LP machine? [04:26] I guess I'll fire up an ec2 instance. [04:26] I develop in a lucid vm [04:26] whats up [04:26] Ah. [04:26] Can you run test_generateConfig? [04:26] In devel, with the new apt. [04:27] That is apt *ubuntu9.3+ppa1, or *ubuntu9.4 [04:28] 0.7.25.3ubuntu9.3+ppa1 [04:29] Does test_generateConfig pass? [04:29] lp.archivepublisher.tests.test_ftparchive.TestFTPArchive.test_generateConfig [04:29] lp.archivepublisher.tests.test_ftparchive.TestFTPArchive.test_generateConfig_empty_and_careful [04:29] Ran 2 tests with 0 failures and 0 errors in 7.168 seconds. [04:30] TestFtparchiveIndices [04:30] StevenK: Is it easy enough to fire up something identical to the Hudson slave and run a test on it? [04:31] s/Hudson/Jenkins/ [04:31] Running: [04:31] lp.archivepublisher.tests.test_publisher.TestFtparchiveIndices.testAllIndicesArePublished [04:31] lp.archivepublisher.tests.test_publisher.TestFtparchiveIndices.testNoIndicesForDisabledArchitectures [04:31] lp.archivepublisher.tests.test_publisher.TestFtparchiveIndices.testWorldAndGroupReadablePackagesAndSources [04:31] Ran 3 tests with 0 failures and 0 errors in 19.608 seconds. [04:32] :( [04:32] Thanks. [04:32] wgrant: Yes [04:34] StevenK: Could you fire one up, check the apt version, try test_generateConfig and TestFtparchiveIndices, and then stab a-f in the face? [04:34] Ah, it's actually apt-utils that matters, but they are presumably the same. [04:35] Although I wonder... [04:36] Let's find out [04:36] lifeless: are you able to run a query against qastaging or prod and gather stats? or do i need a dba? [04:38] wallyworld: All squad leads can run ro queries against {qa,}staging [04:39] wgrant: Waiting for the builder to install [04:39] StevenK: cool thanks. i'll ask thumper :-) i also need an explain done [04:39] StevenK: Thanks. [04:39] wgrant: I'm doing it by hand, btw [04:39] :( [04:40] wallyworld: I can and thumper can [04:40] wallyworld: pastebin away [04:41] The following polling activities are currently in progress: db-devel 7 hours 24 minutes [04:41] Eeeeep [04:41] lifeless: How can I clean that up? [04:41] lifeless: it's a first cut at improving the dialy builds query. still has the group by but cuts out 3 tables from the join and appears perhaps significantly faster [04:41] StevenK: the poll ? [04:41] lifeless: https://pastebin.canonical.com/44001/ [04:41] lifeless: Right [04:42] StevenK: have a look - see if there is a wedged bzr process (and if so file a bug :)) [04:42] lifeless: i just am interested in a comparison with what it does currently to see how much improvement there is [04:43] There is. What can I do to it to get some debugging? [04:43] just tried to navigate to +daily-builds on qastaging and that timed out so qastaging's db should be sufficient to test against [04:43] wallyworld: Time: 11231.630 ms [04:43] lifeless: :-( that's no good. i was expecting much better [04:43] https://pastebin.canonical.com/44002/ [04:44] wallyworld: If I were working on this, I'd be executing on that thread we had about how the current page can be redesigned. [04:44] wallyworld: I don't see any way of making it fast by sql tricks under the current schema [04:44] your query is Time: 616.543 ms hot [04:44] but IIRC the existing query is about that hot too [04:44] lifeless: yeah, but i just wanted to experiment a bit to see how much removing 3 tables from the big fat join would affect the results [04:45] the 11 seconds is cold [04:45] what tables did you drop, and what is the new definition of the results [04:46] lifeless: So this bzr has an open socket, and is blocked in recv() -- doesn't seem like much of a bug to me [04:46] lifeless: i dropped the joins to person, sourcepackagename, archive tables and got that data using a single query for each using the pre_iter hook [04:47] StevenK: hmm, network should have killed it by now though [04:47] StevenK: 7 hours ... [04:47] You'd think [04:47] lifeless: so the results are the same but without the ordering on archive , spname [04:47] lifeless: I'm happy enough to wield kill and move on [04:47] StevenK: yeah [04:48] wallyworld: ah, you'd post process to do the archive ordering ? [04:48] lifeless: well, considering it if the query results were any good but alas. i really thought cutting out 3 tables would help [04:48] wallyworld: it may well have [04:49] wallyworld: staging cold is pretty cold [04:49] the query plan cost of 5320.82 is pretty reasonable [04:49] lifeless: i did it to just to see the numbers plus to teach myself how to use the pre_iter hook and do eager loading and insert SQL() expressions etc into storm queries [04:49] https://code.launchpad.net/~stevenk/launchpad/link-deleted-recipe-ppa-page/+merge/51490 [04:49] wallyworld: its almost certainly an improvement:) [04:50] wallyworld: I encourage you to get it reviewed and land it, even if you do more subsequent work on the page. [04:50] wallyworld: Did you use SQL() just because you could, or is Storm missing something? [04:51] lifeless: no, i had to use the SQL since i wasn;t selecting a whole table (class) anymore and storm complained if i used that expression in the group by or select clauses [04:51] Hmm.... [04:52] You should be able to do that in Storm. [04:52] lifeless: my thoughts with this were i would try it as a quick win and if it helped, deploy it and iterate again to doa better solution, so you're thinking matches mine [04:53] wallyworld: whats the class you were not selecting anymore ? [04:53] (not selecting the whole table, I mean) [04:53] wgrant: Can haz review? ^ [04:53] lifeless: SourcePackageRelease - the only thing i need from that table is the sourcepackagename column to that i can load the sourcepackagename objects [04:54] StevenK: Sure. [04:54] lifeless: anything in the select() has to go in the group by so i wanted to remove as much as possible [04:54] wallyworld: SourcePackageRelease.sourcepackagenameID is what you should use [04:54] wallyworld: see my mail about fooID vs foo - last tuesdays performance tuesday mail [04:55] wgrant: Ignore the comment for test, changing pushing now [04:55] wallyworld: SourcePackageRelease.sourcepackagename is a Reference and storm utterly fails to compile those as you might want it to [04:55] lifeless: let me try that. i thought that sourcepackagename was the id column in this case but i'm wrong. on a related note, i got a bit confused between xxx_id and xxxID [04:56] wallyworld: so xxx_id is how folk writing native storm often spell xxxID. [04:56] wallyworld: xxxID is magically created by the sqlobject metaclass [04:56] woo - another perf fix - lp:~lifeless/launchpad/bug-711064 [04:57] lifeless: ah ok. i'm not fluent in storm yet. *much* better at Hibernate :-) [04:57] lifeless: off to pick up the kid from school. will clean it up when i get back and put up a merge proposal as a first step [04:57] coolio [04:57] If Hibernate is what you do at night, I'm pretty good at that too [04:58] StevenK: it's what i did before i joined Canonical :-) [04:59] StevenK: Any progress on Jenkins? [04:59] wgrant: "update-sourcecode" [04:59] Yay.. [05:00] However, the node is about 2 hops from crowberry, so bzr is nice and fast [05:00] Launchpad looks so nice in the Ubuntu font's Light variant... [05:01] Gnargh. [05:01] wgrant: "make schema" [05:02] https://code.launchpad.net/~lifeless/launchpad/bug-711064/+merge/51491 [05:03] another I can has review plox [05:04] hmm [05:04] linking to a bug report has broken [05:04] if you put an invalid thing in, it just goes to lala land [05:05] lifeless: https://code.launchpad.net/~stevenk/launchpad/link-deleted-recipe-ppa-page/+merge/51490 [05:07] bah [05:07] back to bugtask:+index or distribution:+bugs [05:07] Dear buildout, MOVE IT [05:07] wgrant: StevenK: btw, thats awfully close to 'too much code in the template' [05:07] lifeless: BugTask:+index [05:07] lifeless: It is. [05:07] lifeless: Absolutely [05:07] I'd consider a view property to give you want you want instead [05:07] So I'm happy to refactor slightly [05:07] I value the fix more than the pretty [05:08] Its just a thought for future work. [05:08] no point reworking what you have [05:08] dinner [05:08] lifeless: Well, I already thought it was ugly when I submitted it ... [05:09] I'm unsure if I can just add a property onto SourcePackageRecipeBuild and have it return a linkifed string [05:09] StevenK: You'd do it on the view. [05:16] wgrant: make schema done. Remind me the tests to run, sorry? [05:18] StevenK: test_generateConfig should do. [05:18] StevenK: But apt and apt-utils versions first pls [05:19] ii apt 0.7.25.3ubuntu9.3+ppa1 Advanced front-end for dpkg [05:19] ii apt-utils 0.7.25.3ubuntu9.3 APT utility programs [05:19] Ahaaaa [05:19] There is our problem. [05:19] does apt-get upgrade want to fix it? [05:20] Yes [05:20] I don't run apt-get upgrade on bring-up [05:20] You explicitly upgraded apt? Or does it just install launchpad-dependencies each time? [05:20] It explicity installs launchpad-developer-dependencies [05:20] OK, I'll fix that. [05:21] And update the RT. [05:21] Thanks. [05:21] wgrant: You think the buildbot slaves have the same issue? [05:21] StevenK: It would not surprise me. [05:21] Neither [05:22] Project devel build #483: ABORTED in 58 min: https://hudson.wedontsleep.org/job/devel/483/ [05:23] * StevenK tries to figure out how to get a URL in a view [05:23] canonical_url [05:27] wgrant: http://pastebin.ubuntu.com/573322/ [05:27] StevenK: Use a structuredstring or I will [05:27] stab you with an XSS. [05:28] * StevenK smirks [05:29] wgrant: Let me know when you've fixed launchpad-dependencies and friends and I'll tell Jenkins it can build. [05:31] StevenK: Uploaded. [05:32] We should really run process-upload more frequently. [05:32] We should wait for the publisher anyay [05:33] *anyway [05:33] I will coerce bigjools into bumping it to */1 tonight. [05:34] Really? [05:35] Well, I will at least try. [05:35] Personally, I liked his idea that process-upload is always running [05:35] We already run it that often on cesium. [05:35] Sure. [05:35] That would be nice. [05:36] But it's much harder than changing one bit in a crontab. [05:36] wgrant: So, you mean "from canonical.launchpad.webapp.menu import structured" or do I misunderstand? [05:36] StevenK: That seems to be where it lives :( [05:38] Karma, I hate you. [05:38] wgrant: Happy with the method name? [05:39] StevenK: You could possibly drop source_package_, but apart from that it's good. [05:39] And return None instead of "", I think. [05:39] jtv: Hi. [05:39] Yeah, already fixed that [05:39] hi wgrant [05:40] hi StevenK—I'm afraid I only gained a few hours on my previous timezone! [05:40] jtv: Did you talk to IS about the apt upgrades? [05:40] It seems like buildbot only has apt upgraded, not apt-utils. [05:40] (a-f lives in the latter, so buildbot is now broken) [05:40] Damn. [05:41] I'm wondering if you have any details beyond what's in the ticket. [05:41] Since we are ISless. [05:41] Are we!? [05:41] Until London wakes up, yes. [05:41] Where's the ticket? [05:41] jtv: spm would have only arrived home a few hours ago [05:41] https://rt.admin.canonical.com/Ticket/Display.html?id=43891 [05:41] oh, poor man—where were they sprinting? [05:41] London. [05:42] LHR-SYD-CBR is like 34-38 hours [05:42] Not quite *that* bad. [05:43] Door-to-door, it can be [05:43] True. [05:46] Right, I think that's enough time -- re-enabling Jenkins [05:46] StevenK: Not published in Lucid yet. [05:46] Will be in 4 minutes, hopefully. [05:46] I wonder whether it's worth rolling back the change. Probably not. [05:47] Not at this stage. [05:47] That's okay, I think I broke Jenkins view of the build anyway [05:47] Project devel build #484: STILL FAILING in 58 sec: https://hudson.wedontsleep.org/job/devel/484/ [05:48] It's probably not worth rolling back the change, but it's damned annoying. [05:48] LPCIBot: Shhh [05:49] Hudson should be fixed in a few minutes, and buildbot once we have an mthaddon. [05:49] And that should be in just a few hours. [05:49] So we'll live :) [05:50] Still, buildnot build 666 couldn't very well have gone without problems, could it? Just not appropriate. [05:50] Heh [05:50] wgrant: tal doesn't like structured() [05:50] StevenK: What are you doing? [05:51]
  • [05:51] StevenK: s/context/structure context/ [05:51] Er. [05:51] Except on the other one. [05:51] er :) [05:51] s/view/structure view/ [05:53] wgrant: http://pastebin.ubuntu.com/573328/ [05:54] StevenK: The tal:condition is redundant now. [05:54] wgrant: Really? [05:54] StevenK: recipe_build_details has an 'if sprb is not None' [05:55] wgrant: Oh, that diff is against the approved MP rather than submit:, but I guess you figured that out [05:57] StevenK: ppa:launchpad is now all published. [05:57] * StevenK fiddles with Jenkins [05:58] Jedson may be happy now. [05:58] Jedson. *facepalm* [05:59] wgrant: So you're happy with my refactor and I should commit and push? [05:59] This whole one-RT-account-to-rule-them-all thing is pretty confusing. [06:00] StevenK: No, because you're bypassing the entire popint of structured()' [06:00] Spot the XSS. [06:01] Also: [06:01] Single quotes around XML attribute values: Australia says no. [06:02] Double quotes? :-) [06:04] Orsum. structured has no help [06:04] Do you know what it does? [06:05] Spits out an instance of IStructuredString [06:05] Well, yes... [06:05] And if I'm reading this doctest right, it escapes its second argument [06:06] Right. It takes a format string as its first argument, and interpolates it after escaping the following arguments [06:06] Ah ha. Fixed by dropping % ( [06:07] Right. [06:07] wgrant: Also dropped the structured() from 'deleted recipe' -- what's the point? :-) [06:07] Indeed. [06:07] wgrant: Would you like a new diff, or a commit and push? [06:08] StevenK: A new diff would be nice. [06:08] wgrant: Oh, from the new builder bring-up: [06:08] Get:1 http://ppa.launchpad.net/launchpad/ppa/ubuntu/ lucid/main apt-utils 0.7.25.3ubuntu9.3+ppa1 [240kB] [06:08] Excellent news. [06:09] wgrant: http://pastebin.ubuntu.com/573331/ [06:09] Now to create an EBS volume with devel and db-devel checked out [06:10] StevenK: Not sourcecode too? [06:10] wgrant: Well, yes [06:10] shipit has the LP history, so it takes ages. [06:10] Jenkins can't check out shipit [06:10] StevenK: [06:11] You are missing quotes now... [06:11] "recipe %s", [06:11] Rargh! [06:11] Use single quotes on the string. [06:11] So you can use unescaped double quotes inside it. [06:12] Now you're just being difficult. Fixed. [06:15]
  • Built by %s for %s'>
  • [06:15] :-( [06:17] StevenK: Ah, add /escapedtext to the TALES [06:18]
  • [06:18] wgrant: ^ [06:18] Yeah. [06:19] Our templates should really do this automatically. [06:19] A couple of people have made that same mistake recently. [06:20] Oh, damn it [06:20] Now it escapes the recipe link [06:20] Hah, I wondered if it might do that. [06:21] I presumed it would be smart enough to find notice that it too was a structuredstring... [06:21] *And* confuses TALES enough to get: LocationError: (None, 'escapedtext') [06:21] OH [06:21] Damn it [06:22] That's TALES complaining when recipe_build_details() returns None [06:22] Hah. [06:22] F. A. I. L. [06:22] You could make recipe_build_details return the .escapedtext [06:23] It's a property or a method? [06:23] Property. [06:24] Now to figure out how to stop it escaping the recipe link [06:26] noddy queries R us: WHERE Person.id = $INT LIMIT $INT: [06:27] Hah [06:27] That sounds like a .find(Person, id=1).any() [06:27] I don't think Storm is stupid enough to do that itself. [06:29] wgrant: And no, structured() just does it, there's no special casing for an instance of IStructuredString [06:32] I may have to declare war on our shitty string handling infrastructure at some point. [06:33] wgrant: Before or after your current war of "Death to lib/canonical" ? [06:33] StevenK: I only deleted lib/canonical/widgets last week :( [06:33] The active subwar is "death to Zopeless", which is going OK. [06:34] * lifeless whispers death to timeouts [06:34] More like death to checkwatches. [06:34] tim is looking at checkwatches mantis handling [06:34] I'm awed [06:34] Also, tomorrow it is death to long PQM and cronspam. [06:34] Heh [06:35] wtf [06:35] SQL time: 2724 ms [06:35] Non-sql time: 11740 ms [06:35] Which view? [06:35] https://lp-oops.canonical.com/oops.py/?oopsid=1884H2231 [06:36] Huh... [06:36] Ah, anonymous. [06:36] I wonder how many of these timeouts are due to e.g. storm overreleasing the gil (when its about to grab it again 2us later) and getting terrible scheduler performance as a result [06:37] also memcache really isn't pulling its weight [06:37] 232.1366124msmemcache [06:37] bah [06:37] 24ms anyhow [06:37] on a get [06:38] time to turn it off [06:38] And remove it? [06:38] no [06:38] its useful for the front page [06:39] we should eager load the blog posts thoughj [06:39] and depend on them being in memcache [06:39] Would s/\(its\) \(useful\)/\1 only \2/ be more accurate? [06:40] not entirely [06:40] need to analyse case by case [06:42] stub: hi [06:43] stub: we didn't get the staging restore script quite right, I've filed a bug and assigned to you; it didn't set the value for the flag correctly (should be 'on' not NULL). [06:45] StevenK: I'm puzzled by something in the derived-distro work. Hoping you can help. [06:46] jtv: Hm? [06:46] Well, AIUI there was supposed to be a static maximum of 1 layer of derivation. [06:47] I got the impression that this was a completely separate relationship from those within a distro. [06:47] I hope not. [06:47] Ah [06:48] We can have Debian Sid -> Ubuntu 10.04 -> Linaro 10.05 [06:48] I'm asking because DistroSeriesDifference.new rather suggests that this is all based on parent_series. [06:48] But the relationship is separate from the distro. [06:48] Direct parent, we don't really want diffs from anything else [06:48] Right. At the moment the derivation relationship is not modelled. [06:48] So everything uses parent_series. [06:49] So as things stand, we can't have Debian Sid → Ubuntu 10.04 → Linaro 10.05. [06:49] At the moment we can have no derivation at all. [06:51] So how does parent_series figure in all this? [06:52] It was the best place to put it, but it's the wrong place. [06:52] It does not affect derivation. Derivation needs a new attribute. [06:52] Okay, so that check for "this is a derived distroseries" will use the new attribute? [06:53] Right [06:54] Thanks. [06:55] uhm [06:55] why a new attribute? [06:55] ? [06:55] Because it's not the same thing as the "parenthood" relationship we have between ubuntu releases. [06:55] There are two types of derivation. [06:55] Right. [06:56] why do we have that relationship? [06:56] Arguably I suppose we _could_ model this as "parent_series is not of the same distro," but then you still can't model the Sid → 10.04 → 10.05 chain. [06:56] Why do we have which one? [06:56] jtv: sure you could; linaro isn't ubuntu, its derived from. new distro [06:56] jtv: we do we have a series->series relation within ubuntu, we don't have that for productseries. [06:57] We use parent_series to do some fairly revolting build-related stuff right now. [06:57] Not to mention translations. [06:57] details [06:57] oh crud [06:58] There have been times I've wished for a parent_series on productseries, or a "trunk" series for Ubuntu, but I guess they're just different ways of workign. [06:58] *working. [06:58] we loaded the bug subscription filters on qastaging didn't we [06:58] Ubuntu does have trunk. It's called .currentseries [06:58] jtv: The divergences are bugs. [06:58] wgrant: huh wha? [06:59] StevenK: sid is a trunk, natty is a current series. Not the same to me. [06:59] Or if I'm wrong, I'll look mighty stupid for all the times I've told people "I'll do that when sid gets released." [06:59] jtv: Huh? How is sid a trunk? [06:59] Ah, I see your point. [06:59] Sid will never get released [07:00] But, right [07:00] so take bzr; it has a trunk and a series that will be released [07:00] StevenK: which is exactly why I like to tell people I'll do their tedious work for them once it gets released. :) [07:00] Yes, I get it [07:00] our *data* model permits both [07:00] why does our *data model* differ between productseries and distroseries in this fashion. [07:01] That's a good question. [07:01] I have some people you could ask. They don't work for us any more, though. [07:01] let me ask it differently. [07:01] If we take the view that There Has To Be a parent series, then either it's always trunk or things get a bit weird. [07:01] what stops us removing 'parent_series' [07:02] lifeless: The fact that Ubuntu O might want to be initialised [07:02] StevenK: I don't understand the relevance [07:03] i-f-p doesn't have to use parent_series. [07:03] But we're not actually making use of the tree structure that the current data model supports through parent_series, are we? [07:03] It does currently, though [07:03] AFAIK it's all neatly linear. [07:04] Maybe it's really a holdover from when distroseries was distrorelease. [07:04] When you don't separate series from releases, then parent_series (or rather, parent_release) makes more sense. [07:05] Or am I getting my history screwed up and was it ProductSeries that used to be ProductRelease? I _think_ I got it right the first time. [07:05] grrr [07:05] I *wish* the ++show decorator didn't trim the report. [07:05] I think I'll fiddle that next [07:05] * jtv checks the vestigial test factory [07:06] jtv: It was DistroRelease [07:06] Yup [07:06] That's why we still have dr and dar everywhere. [07:06] But you see my point? parent_release makes a lot more sense when you don't have series. [07:07] A little. [07:09] AFAICS the series replace a generic tree structure of derived releases with a fixed two-level one: series are created in progressive order and within each series, releases are created in progressive order. [07:10] Except that we don't model distroreleases yet, but yes. [07:11] Parenthood probably isn't a very good relationship between releases—you get issues like "what if nobody tagged the most recent common ancestor?" [07:13] And "if I backpatch a bugfix to a maintenance series, isn't it arbitrary to say that the resulting maintenance release is a child of the series' preceding release but not from the fix in the development series?" [07:14] So maybe lifeless has a point, and we want "predecessor" (which we could probably derive) rather than "parent" (which is more generic than AFAIK we actually use) [07:14] More importantly, of course, [07:14] I'm out of coffee. [07:17] And out of Internet? [07:18] we're still testfuxed, right ? [07:19] Yes. [07:19] Hudson should be testfixfixed, but buildbot needs an upgrade. === almaisan-away is now known as al-maisan [07:35] oh my [07:35] -fail- [07:35] File "/home/robertc/launchpad/lp-branches/working/lib/lp/bugs/browser/bugtask.py", line 512, in _get_task_for_context [07:35] for bugtask in list(bug.bugtasks): [07:36] lifeless: Is NULL ever a valid feature flag value? I suspect not, since there is no way to add that via the web ui. [07:37] lifeless: That looks like the NullBugTask infestation. [07:37] Or is that somewhere else? [07:38] stub: no, its not [07:38] wgrant: no, its the traversal [07:38] wgrant: the traversal lazy loads *every bugtask* [07:38] wgrant: sorry, late evaluates every bugtask target [07:38] lifeless: That shouldn't be lazy... [07:38] Right. [07:39] wgrant: its late, my phrasing is fubared [07:39] stub: for clarity, NULL isn't valid - thats why staging is down [07:39] stub: but it wasn't meant to be null, or '', it was meant to be 'on' [07:39] stub: if you could fix staging that would rock [07:40] Just clarifying Bug #726128 [07:40] <_mup_> Bug #726128: staging restore script creates invalid feature rule < https://launchpad.net/bugs/726128 > [07:41] lifeless: staging db updated [07:42] stub: brilliant, thanks, thats made it happy [07:46] stub: , all - have a great day [07:46] I'm going to call it a night for now [07:46] I hope to be mass landing branches in the morning :) [07:47] stub: you're on call reviewer now aren't you? if so - https://code.launchpad.net/~lifeless/launchpad/bug-722956/+merge/51481 and https://code.launchpad.net/~lifeless/launchpad/bug-711064/+merge/51491 are product from today. [07:47] lifeless: k === al-maisan is now known as almaisan-away === henninge changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | firefighting: - | On call reviewer: henninge | https://code.launchpad.net/launchpad-project/+activereviews === almaisan-away is now known as al-maisan [08:43] StevenK: did you get my questions in this channel around one hour ago? Or perhaps answer them already? My connection broke not long after I asked. [08:44] jtv: If the other context is "I am out of coffee" none of them looked like questions? [08:44] "This connection has been quiet for minutes now. That's not normal for Internet (http, torrents, and games). Let's drop it." [08:45] StevenK: then they didn't make it out. Mind if I paste? It's pretty basic but I like to have my assumptions confirmed sometimes. :) [08:45] jtv: Sure, go ahead [08:46] OK, here goes: [08:46] StevenK, to make sure that I still have the right picture: we're trying to get to a state where every new sourcepackagepublishinghistory record for a distroseries that's in a derivation relationship also triggers creation of zero or more distroseriesdifferencejobs for distroseries that it's derived from and ones that are derived from it… correct? [08:46] and if so, the processing of a distroseriesdifferencejob may result in a distroseriesdifference being created or updated, right? [08:46] Or deleted, if the difference goes away. I guess that's how synchronizing a package would go through the system. [08:48] jtv: "distroseries that it's [08:48] derived from" [08:48] Only. Since the child didn't change, and we only do one level of indirection [08:49] StevenK: Oh—I thought reviews "upstream" from the derived series were to be reviewed (and optionally synchronized) through the same UI. [08:49] jtv: Right, but not all the way upstram [08:49] *upstream [08:50] OK, so all I need to worry about is "this new SPPH may constitute a new, or removed, difference from the parent DS." [08:51] jtv: *Or* the child. Or both [08:52] In the Debian Sid -> Ubuntu 10.04 -> Linaro 10.05 case, if a new SPPH is thrown to Ubuntu, we want new DSDs for the Debian <-> Ubuntu case and then Ubuntu <-> Linaro case [08:53] s/then/the/ [08:53] wgrant: Tossing the ugly TAL branch at ec2 [08:53] StevenK: okay, but then I don't understand the correction you made earlier—"distroseries that it's derived from, only." [08:54] jtv: Following on from my earlier example, if there is new SPPH in Debian, I thought you meant Debian <-> Ubuntu and Debian <-> Linaro [08:54] Ah OK, no I meant exactly what you said. [08:54] So violent agreement there. [08:55] Agreed [08:55] Cool. Then I can start looking at how to approach implementation. [08:58] Hello [09:00] Morning mrevell. [09:01] hi mrevell! [09:03] StevenK: I suppose a derived series can have a SPPH with the same SPR as a SPPH in the parent release, in which case there's no need for a DSD? [09:04] jtv: Exactly [09:04] s/parent release/parent DS/ [09:04] (in case I'm not making my acronym quota) [09:05] I think there was mention of pre-existing derived series… how are those modeled? [09:05] There was? I can't recall [09:06] jtv: Just wait until you start dealing with recipes. [09:06] Then you have SPRs producing SPRs. [09:06] And then they end up creating DASBPRs! [09:06] cool [09:07] The last bit of course makes perfect sense—but I wouldn't think it was new. [09:07] Ahh, the days when an inches-thick A4-sized operating system manual would boast "this is the only acronym in the UI module"… [09:08] YKYBRUTLW… [09:09] I think I got that one. [09:10] That is one of the many forms of YKYBRUTLW: YKYBRUTLWYUALT [09:10] You Know You've Been Reading Usenet Too Long When You Understand Acronyms Like These. [09:11] Heh. [09:11] Ooh, ITYJMTUOTS [09:12] I Think You Just Made That Up On The Spot [09:14] * wgrant is beginning to suspect that checkwatches is in fact an elaborate trap set for those who want to write tests for it. [09:14] It's like Soyuz, except with 10 extra levels on indirection, some of which are XML-RPC. [09:14] heh [09:15] wgrant: yes… there are some helpers for it though; allenap knows [09:15] * jtv hates xmlrpc [09:15] Vallium helps with checkwatches [09:15] * jtv once told one of the makers of XML it was all his fault [09:16] Strychnine is the checkwatches drug of choice. [09:17] wgrant: You have my unending sympathy. What are you trying to test? [09:17] The question "what are you trying to test" can be hard to answer with checkwatches. [09:18] allenap: Exception handling in _updateBugTracker. [09:19] I think I will just entirely patch out _getExternalBugTrackersAndWatches, rather than trying to get a custom ExternalBugTracker in. [09:20] wgrant: Yeah, good idea. [09:25] StevenK: when comparing SPPHs for two DSes, can I just compare the two SPPHs with the most recent base_versions? Or do I need to do this separately for each base_version I find? Or is there even some guarantee that all I need is the most recent SPPHs? [09:26] jtv: You know, I did finish work about three hours ago, right? :-) [09:26] StevenK: oh yeah? Then why are you here responding to my question? :-P [09:27] Because I have this OCD about red in my IRC client [09:27] The correct answer was a timeout. :) === al-maisan is now known as almaisan-away [09:28] jtv: If you feed in the two latest SPRs into DSD, it should set the base correctly, but I suspect that isn't your question [09:28] No, it's more how I find the right SPPHs with the right SPRs in them. [09:29] An SPPH has one SPR. You already have the SPPH that caused the change, so grab the latest SPR for that SPN from the other DS [09:31] wgrant: Do you know if anyone figured out why ec2 runs were not reporting any results? [09:31] So that's the latest for that SPN, not the latest for that SPN plus base version? I'm asking since I have to pre-populate based on existing data, so we'll have older SPPHs. [09:33] I guess a DS picks one base_version for an SPN and sticks with it? [09:33] * jtv should leave StevenK in peace now [09:33] Heh [09:33] * StevenK goes to see how dinner is progressing [09:33] good night! === jtv is now known as jtv-afk === almaisan-away is now known as al-maisan [09:42] allenap: I landed that fix this morning. [09:43] allenap: jml's excellent new ec2 list had the not so excellent side-effect of breaking that. [09:43] But it was an easy fix. [09:45] StevenK: Confirmed does not exist :( [09:46] jtv: buildbot seems happy now. [09:46] good morning === jelmer_ is now known as jelmer [09:55] wgrant: Fantastic! :) [10:41] henninge: I have a 69-line JS branch if you've got time to review it. [10:42] gmb: throw it at me! [10:42] * gmb lobs https://code.launchpad.net/~gmb/launchpad/fix-subscribe-form-preloading-bug-722450/+merge/51510 at henninge [10:43] * henninge sometimes is a good catcher ... like just now. [10:43] :) === al-maisan is now known as almaisan-away === henninge_ is now known as henninge [11:47] gmb: Sorry for being a bit slow. I got distracted but I also don't have much practice in JS reviews. [11:48] gmb: I don't see the last sentence of your cover letter reflected in the code. [11:48] henninge: That's okay. The diff looks a little funky anyway (I guess it's because of where I put the new function). If you'd rather wait for someone who's got JS experience to take a look, that's fine; it's not urgent. [11:48] no, I want the JS experience ... ;) [11:49] gmb: my other question is: why can you do away with the spinner? [11:49] henninge: Just a sec; someone at the door [11:50] as long as they are not trying to sell windows ... [11:52] Project devel build #485: STILL FAILING in 5 hr 43 min: https://hudson.wedontsleep.org/job/devel/485/ [11:56] gmb: I am off for lunch, we can continue later. [11:57] henninge: Okay, sure. [11:59] * gmb takes the opportunity to lunch, too. === almaisan-away is now known as al-maisan [13:00] jml: are there any plans to remove the "Recipe builds are experimental" box on recipe pages? [13:00] jelmer: there'd better be! [13:09] Are there plans to expose performDailyBuild() in the web UI ? === mrevell is now known as mrevell-lunch [13:14] maxb: There is a button for that actually [13:14] maxb: but it only appears when there is a new version that can be built [13:14] hm [13:15] I have not seen this button [13:15] And I have usefully called it over the API [13:16] henninge: I'm back from lunch, so just ping me when you want to resume our discussion. [13:16] maxb: my squad is working on that now [13:16] oh *there's* that link [13:18] Now that's shiny [13:18] it is [13:20] leonardr: care to give me a hand with getting the new launchpadlib behaving over ssh? I proposed for ubuntu-dev-tools, but it seems a bit of a nasty regression that I can't use it over ssh https://code.launchpad.net/~stefanor/ubuntu-dev-tools/launchpadlib-1.9/+merge/51475 [13:21] tumbleweed: try putting "export `gnome-keyring-daemon`" into your bashrc. that will make the gnome keyring run in your x session when you ssh in [13:22] leonardr: I tried doing that (not in bashrc, and didn't seem to do anything [13:23] do I really want one gnome-keyring-daemon per shell? [13:23] tumbleweed: there's another workaround, let me try to find it [13:23] i don't actually know which workaround is better [13:24] me knows very little about gnome-keyring, which probably doesn't help [13:25] i now know about gnome-keyring but not about x [13:30] tumbleweed, what happens when you try this with gnome-keyring-daemon exported? [13:46] leonardr: gnomekeyring.IOError [13:48] we've seen that with bzr-gtk as well [13:49] jelmer: yeah I have too [13:49] we're working around it by ignoring gnomekeyring if it raises IOError [13:52] well, we have to get the launchpad credentials from somewhere [13:52] so if we ignore that error, we need a fallback [13:53] is there a standard location for an on-disk credential store, or must that be provided to login_with? === salgado is now known as salgado-physio === henninge changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | firefighting: - | On call reviewer: - | https://code.launchpad.net/launchpad-project/+activereviews [13:58] 'morning cr3 [13:59] jelmer: hola senor! [13:59] tumbleweed: python-keyring handles the on-disk credential store [13:59] so, yes, there is a standard location [13:59] but i would much rather figure out how to make gnome-keyring work for everyone === mrevell-lunch is now known as mrevell === m4n1sh is now known as manish [14:48] tumbleweed, try this out: [14:48] export `dbus-launch` [14:48] it does look like you're supposed to have one daemon per session. maybe that's something the gnome-keyring people could optimize [14:51] it would be nice if launchpadlib printed the auth URL, rather than diving straight into elinks [14:52] i.e. make elinks optional. I've always quit it and pasted theURL into my desktop's open browser [14:53] anyway, I can't seem to login via elinks [14:54] leonardr: I grabbed the token-auth URL from the process command line, authed it, quit elinks, and now I get "keyring.backend.PasswordSetError [14:55] tumbleweed: launchpadlib does both. it prints the auth url and opens a web browser. i guess you don't see it because elinks takes over the console? [14:55] yeah [14:55] IIRC it used to wait for one to press enter after quitting elinks? [14:57] tumbleweed: right. i took that out because it was unnecessary. launchpadlib can see whether you've authorized the token on its own [14:58] leonardr: yeah, but I used to be able to quit elinks, do the auth, then press enter [14:58] unless it's polling launchpad, in which case ignore me :) [14:58] tumbleweed: it should work the same now, except without pressing enter [14:58] yeah, it's polling launchpad [14:58] tumbleweed: this PasswordSetError you get [14:58] is that when you export dbus-launch? [14:59] yes [14:59] I have a desktop session open on the machine I'm ssh-ing into [14:59] ok, is it a gnome desktop? [14:59] yeah [14:59] can you paste me the traceback of the error? [15:00] leonardr: http://paste.ubuntu.com/573478/ [15:00] tx [15:01] argh, it's re-raised [15:02] let me try dbus-launch and see what happens for me [15:14] tumbleweed: for some random reason i seem to be using an unencrypted file instead of a keyring... solving that problem first and will then see how my setup compares to yours [15:14] heh, cool [15:15] I only have one machine running natty (my laptop), so I haven't played around too much [15:16] tumbleweed: i would like to see the original context of that exception. if you wouldn't mind going into credentials.py and commenting out the try/except clause from CredentialStore.save() [15:16] we could make some progress [15:17] sure [15:20] leonardr: http://paste.ubuntu.com/573490/ [15:21] sorry, haven't dived into this wholehartedly, busy writing an ubuntu-dev-week talk for this evening [15:23] np === benji changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | firefighting: - | On call reviewer: benji | https://code.launchpad.net/launchpad-project/+activereviews [15:32] benji, welcome to ocr [15:32] leonardr: I'm a real boy now. === matsubara is now known as matsubara-lunch === al-maisan is now known as almaisan-away [15:58] did someone recently change the oauth 'invalid access token' message? [15:59] i think it changed recently and broke launchpadlib [16:00] is there any reason why bugs can't be searched by date range? [16:05] gmb: let's finish this review ;-) [16:05] henninge: Ah, I asked benji to take over since you'd gone off-call. [16:05] Sorry, didn't realise you were still around for some reason. [16:06] gmb: that's ok, I wasn't feeling too great earlier and took a longer break. [16:06] henninge: Okay. Hope you feel better. [16:06] that's why I took myself off so I won't get more requests. [16:06] yes, pain killers kicked in ... [16:06] thanks [16:10] salgado: i'm still asking you damn questions about oauth [16:10] is there a mechanism (manual or otherwise) for clearing expired access tokens out of the database? [16:11] leonardr, heh, that's fine [16:11] because it looks like they never used to be cleared out of the database, but now they are [16:11] iow i encountered a problem that i would have encountered a long time ago if they were cleared from the database regularly [16:12] leonardr, I don't remember seeing anything that would delete access tokens [16:13] ah, i know what it is. this is on staging [16:13] but I think we've always had working code to reject them when they were expired [16:13] and on staging, the whole database is cleared [16:13] oh, right [16:13] salgado: yeah, i had it working for expired tokens [16:17] benji: an easy branch for you: https://code.launchpad.net/~leonardr/launchpadlib/handle-unknown-token/+merge/51563 [16:17] leonardr: thanks [16:24] gmb: have a moment? [16:25] jcsackett: Sure [16:26] gmb: i was told you landed some work at one point to allow admins to mark bug comments as not visible, but i can't find what that might be. could you point me in the right direction? [16:26] jcsackett: You were misinformed, sadly. I have no recollection of doing that. [16:26] It *might* have been intellectronica that did it, back in the day, but I honestly have no idea. [16:26] gmb: that's disheartening. :-p [16:26] Yeah. [16:27] gmb: thanks for clearing that up, though. [16:27] * jcsackett goes back to the hunt. === matsubara-lunch is now known as matsubara === beuno is now known as beuno-lunch [17:19] Project devel build #486: STILL FAILING in 5 hr 26 min: https://hudson.wedontsleep.org/job/devel/486/ [17:25] moin === Ursinha-afk is now known as Ursinha === Ursinha is now known as Ursinha-afk === matsubara is now known as matsubara-afk === beuno-lunch is now known as beuno === gary_poster is now known as gary-lunch === Ursinha-afk is now known as Ursinha === gary-lunch is now known as gary_poster === Ursinha is now known as Ursinha-lunch === bdrung_ is now known as bdrung === almaisan-away is now known as al-maisan === al-maisan is now known as almaisan-away [19:53] jcsackett: ping [19:53] hi sinzui. [19:54] jcsackett: do you have time to mumble about bug/726628 [19:54] bug 726628 [19:54] <_mup_> Bug #726628: flag-expired-memberships can trip an assertion check < https://launchpad.net/bugs/726628 > [19:55] sure. === almaisan-away is now known as al-maisan [20:08] how does launchpadlib open the browser for authentication? [20:08] use gnome-open? [20:08] I think xdg-open [20:08] thanks, trying [20:09] sinzui: works. Thanks [20:18] sinzui: no need to chat later; found a fix. [20:19] \o/ === al-maisan is now known as almaisan-away [20:22] Project db-devel build #402: STILL FAILING in 5 hr 54 min: https://hudson.wedontsleep.org/job/db-devel/402/ === Ursinha-lunch is now known as Ursinha [20:48] clear [21:04] leonardr: mumble? [21:04] thumper: wow, it's 4 already. sure [21:05] wallyworld, leonardr: https://dev.launchpad.net/MaintenanceRotationSchedule [21:12] leonardr: hi [21:12] hi lifeless [21:12] leonardr: I have a question about how to glue some stuff up in the webservice [21:12] sure [21:12] if you look at bug.bugtasks [21:12] its exported [21:12] but the code doesn't know the current user [21:12] so we end up querying for all bugtasks [21:13] then doing late evaluation access checks on each task [21:13] how would I change it to use a method rather than a property, so that the user can be passed in [21:13] (but still look like a collection to the web service) [21:14] good question. you can use @call_with(user=CURRENT_USER) to pass in the current user [21:14] i need to look at the code to see if you can do that and still make it look like a collection [21:14] it may not be possible now [21:14] ok [21:14] well I'm currently hacking on BugTask:+index which shares the issue [21:15] I'll add a new method for now [21:15] and if we can figure out how to glue it up, that will be cool. [21:23] Hmm. It would appear that SourceForge runs anonymous mercurial access on port 8000. Should I file a question and assign to the LOSAs asking for accomodations in the firewalling of the importds? [21:24] bug 271010 [21:24] <_mup_> Bug #271010: OOPS accessing a non-existent oauth token page. < https://launchpad.net/bugs/271010 > [21:25] lifeless: you might want to file a bug about it. 'accessor method' would be a useful analogue to 'mutator method' [21:25] leonardr: on lazr.restful ? [21:25] lifeless: yes [21:25] and when i put it like that, i know we don't have this feature [21:26] we do it for /branches [21:26] kindof [21:28] leonardr: https://bugs.launchpad.net/lazr.restful/+bug/726803 [21:28] <_mup_> Bug #726803: not possible to export a method as a collection with bound parameters < https://launchpad.net/bugs/726803 > [21:29] leonardr: I hope I captured it clearly [21:31] lifeless: looks great [21:31] jml: I'm available whenever you are. [21:32] maxb: yes [21:32] * StevenK glares at buildbot [21:33] thumper: the python-keyring bug i filed: https://bitbucket.org/kang/python-keyring-lib/issue/40/failures-happen-at-random-points-in-the [21:33] * benji is startled to see buildbot glare back at StevenK. [21:34] benji, you might be interested in that bug as well -^ [21:34] Haha [21:34] leonardr: hmm, taking a look [21:35] Windmill hang in the last devel run, and buildbot has completly ignored that devel has changed for about five hours [21:36] Oh come on, that failed like 5 hours ago :/ [21:37] Nobody forced it :( [21:37] Just did. [21:40] leonardr: I concur very much with the intent of your bug report; in my opinion the proximate cause is the unnecessarily eager choosing of the backend [21:41] thumper: filed, thanks [21:55] oh wow === 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 [21:55] we've been disclosing the existence of private bugtasks all over the place forever. === Ursinha is now known as Ursinha-afk [22:01] hmm [22:01] current user isn't clearly visible to traversal code :< [22:06] benji: i know it's getting late, but is there any chance you have time to do a review on 150 line MP? [22:07] jcsackett: if it's https://code.launchpad.net/~jcsackett/launchpad/bug-comment-visibility/+merge/51637, I just did. :) === benji changed the topic of #launchpad-dev to: Performance Tuesday | https://dev.launchpad.net/ | firefighting: - | On call reviewer: - | https://code.launchpad.net/launchpad-project/+activereviews [22:07] benji: it is indeed. thanks a lot. :-) [22:07] np [22:20] :( QA [22:36] sinzui: standup? === salgado is now known as salgado-afk [22:48] sinzui: What did you want to investigate with light/regular? [22:52] Project devel build #487: STILL FAILING in 5 hr 32 min: https://hudson.wedontsleep.org/job/devel/487/ [23:01] * thumper sighs [23:01] qa-bad makes me sad [23:02] how to I say a new landing fixes a qa-bad? [23:02] thumper: --rollback=1234 [23:02] And tag the bug bad-commit-1234 [23:02] I don't want to roll it back [23:02] I want to fix it [23:02] I know. [23:02] But you have to --rollback=1234 [23:02] that kinda blows [23:03] Yup. [23:03] so fix it [23:03] What's bad? [23:03] qatagger is the project [23:04] wgrant: the updating of the debversion and base branch [23:04] the context is updated [23:04] but there is a JS error on the page [23:04] I think it came from a weird merge [23:04] * thumper is fixing [23:04] Is it trivial to fix? [23:04] yes [23:04] delete one line [23:04] Great. [23:04] Bypass ec2. === soren_ is now known as soren === herb__ is now known as herb === Daviey_ is now known as Daviey [23:20] wgrant: what is the pqm commit message I need for the rollback syntax? [23:20] wgrant: I don't have a merge proposal for the tweak [23:20] wgrant: nm [23:20] thumper: [rollback=$BADREVNO] [23:20] No QA tags other than that. [23:20] huwshimi: sabdfl replied the the regular/light discussion on warthogs. Light ishould look good with content. as 12px, I thought it was too light. Maybe my screen is too small to judge. [23:21] sinzui: It looks too light next to the monospace font that we use. [23:21] But apart from that i think it looks great. [23:22] sinzui: Yes I saw that comment. [23:22] wgrant: are you looking at my branch that changes most of the font rules? [23:22] sinzui: I was going to look at that at some point. [23:23] sinzui: Is that your -1 branch? [23:23] *sob* [23:23] Distribution._init [23:23] *stab stab stab* [23:24] sinzui: Not sure what to think really. [23:24] if you think it is too light now, ~sinzui/launchpad/fixed-font-sizes-1 will make you cry with light [23:24] lifeless: Yes, I pointed that out to you last week :) [23:24] similarly Person._init [23:24] I favour landing it. We can change the font easily if users think it is too dark [23:24] That's fine. [23:25] sinzui: Do you have screenshots? [23:25] sinzui: I'm happy with that [23:26] one moment [23:28] Hmm, all the heading styles have changed. [23:30] wgrant: this is the proposal http://people.canonical.com/~curtis/new-font-rules.png [23:30] sinzui: I suspect there is a reason behind Mark saying that light is best for content. There must be some some data or research behind it and if it goes into the guidlines we can think about it more then. [23:31] sinzui: The new monospace style is much nicer. [23:31] But some of the headings are too big. [23:31] huwshimi: I think the same. Since ubuntu.com is using 13px, I would not use it when judging light font [23:31] eg. https://launchpad.dev/bugs/1, the CVE References is huge. [23:31] <_mup_> Bug #1: Microsoft has a majority market share wgrant: h2's are meant to be huge. I made ours smaller than suggested [23:33] sinzui: It's possible that CVE heading should not be a h2 [23:33] wgrant: I noted in the css and in discussion that many headings should probably be h3. [23:33] I think we probably want to fix that first. [23:34] I don't read the MP diff before looking at this sort of change, because it can affect how I explore. [23:34] A h2 for simple list seems to be an exageration [23:34] From https://answers.launchpad.net/launchpad/+question/147254, would anyone fancy telling me about OOPS-1885CMP2 and OOPS-1885CMP4 ? [23:34] maxb: Sure. [23:35] sinzui: What this is helping us do is fix hour html as well [23:36] maxb: I am trying to locate them, since they are not in the usual places. [23:36] huwshimi: I agree. I want to stab the "see more" in the portlet first [23:36] fun [23:36] CMP [23:36] code imports? [23:36] CreateMergeProposals. [23:36] Create Merge Proposal (from email) [23:36] ah [23:37] Possibly loganberry-bzrsyncd... [23:37] wgrant: they should be in lp-oops [23:37] They're not. [23:37] wgrant: are they not? if not please file a bug on oopstools [23:37] I plan to, once I work out where they are. [23:37] (or better yet fix directly, but theres still a lot of black magic in there) [23:37] wgrant: production-configs will tell you [23:38] lifeless: It tells me the path. [23:38] Not the machine. [23:38] It appears to be crowberry, oddly. [23:38] it also tells you the service [23:38] and cronscripts tells you the machine from the service [23:39] StevenK: please tell me you are about to kill Distribution._init as part of the derived distros work. [23:40] maxb: They are not on devpad, which may just mean they are not part of the incremental sync. Just triggered a full sync, which will take a few minutes. [23:42] sinzui: Interestingly, your branch almost fixes sprite alignment in Firefox 4. [23:43] It's also less broken in Chromium now. [23:43] wgrant: yes [23:43] speaking of sprites [23:43] ok, thanks [23:43] the sprite code generates ValidPersonChecks [23:43] wtf [23:43] wgrant: I still have not mastered all the variables in positioning [23:44] lifeless: Yeah, since it shows a desaturated icon for invalid people. [23:46] lifeless: lp-oops can see them, but they don't seem to sync regularly. [23:47] maxb: ValueError: tag/value separator not found in line '=20\\n' [23:47] In bzrlib. [23:48] Let me check the content. [23:49] codebrowse, are you there? [23:49] james_w: Is it down again? [23:49] Yes. [23:49] Not again... [23:49] 503 for me [23:49] LOSA ping: ^^ [23:50] It started dying on the 27th. [23:50] No obviously relevant changes :/ [23:50] wgrant: see anything wrong with r -1 of lp:~lifeless/launchpad/bug-724033 [23:51] wgrant: seeing codebrowse issues again? [23:51] mbarnett: Yes. [23:51] mbarnett: hallelujah [23:51] Restart one, please. [23:51] Not the other. [23:51] interesting, not alerting yet [23:51] * mbarnett logs in [23:51] mbarnett: was anything changed on guava? [23:51] last weekend [23:53] lifeless: I will tell you once one of the codebrowses is awake again. [23:53] lifeless: not that i am aware of . [23:53] mbarnett: It's died three or four times since last week. [23:53] And not before that. [23:55] 2011-02-25 17:15:20 status installed libc-bin 2.11.1-0ubuntu7.8 [23:55] there were a handful of changes when puppet was installed on the box [23:55] No sudo upgrades? :P [23:55] heh [23:55] just libc-bin; guess we need to check its changelog [23:56] hmm, [23:56] 2011-02-25 17:15:20 status half-configured libc-bin 2.11.1-0ubuntu7.8 [23:56] Nothing interesting in 7.8 [23:56] But who knows what the old version was. [23:56] the apt log should say [23:56] mbarnett: what was the replaced version ? [23:56] The dpkg log should too. [23:57] there are a ton of changes with the puppet install [23:57] * mbarnett stops looking for a moment to restart codebrowse [23:57] mbarnett: Leave one process hung, pls. [23:58] And a list of packages changed for puppet would be nice. [23:58] codebrowse2 is left. [23:58] Thanks. [23:58] Still borked. [23:59] And of course now it works. [23:59] https://pastebin.canonical.com/44061/ [23:59] Meh, all ruby. [23:59] yeah