[00:00] <StevenK> mwhudson: Haha
[00:06] <wgrant> StevenK: Ah, yes, you'll need the cast
[00:08] <StevenK> wgrant: Yeah, it's working
[00:08] <StevenK> Turns out my guess was right
[00:08] <wgrant> mwhudson: This isn't particularly great
[00:08] <wgrant> evil
[00:08] <wgrant> I've done much worse :)
[00:08] <mwhudson> i'm sure
[00:08] <mwhudson> wgrant: did i show you http://voices.canonical.com/michael.hudson/2012/09/02/using-postgres-array_agg-from-django/ ?
[00:09] <wgrant> I might need popcorn
[00:10] <wgrant> Hah
[00:10] <wgrant> So not too hacky
[00:10] <mwhudson> the bit with decimalfield was pretty awful
[00:10] <mwhudson> but otherwise, no
[00:10] <wgrant> Yeah
[00:11] <StevenK> aggregate.field = DecimalField() # vomit
[00:11] <StevenK> Haha
[02:01] <mwhudson> how did lp upgrade from postgres 8 to 9?
[02:01] <mwhudson> can you slony between 8 and 9?
[02:01] <StevenK> We dropped slony too
[02:02] <mwhudson> yes
[02:02] <mwhudson> but that was afterwards :-)
[02:02] <StevenK> During, in fact
[02:02] <wgrant> mwhudson: That's like saying Ubuntu 10 and Ubuntu 11 :)
[02:02] <mwhudson> hm
[02:02] <mwhudson> wgrant: heh well
[02:02] <wgrant> We upgraded 8.4 to 9.1 with Slony
[02:02] <wgrant> Then dropped slony for our internal replication
[02:02] <wgrant> We will use slony again for the 9.1 -> 9.2 upgrade
[02:03] <wgrant> Then drop it immediately afterwards
[02:03] <mwhudson> so you had a pg 8.4 master talking to a 9.1 slave, then rotated the 9.1 slave to be the master?
[02:03] <wgrant> Right
[02:03] <mwhudson> ok
[02:03]  * mwhudson finally read http://www.postgresql.org/docs/9.1/static/pgupgrade.html properly and didn't like it much
[02:03] <wgrant> If your system can go down for a while, it's better to just pg_upgrade during a bit of downtime
[02:03] <mwhudson> heh
[02:03] <StevenK> I recall the master pivot being a little messy, but we worked out the issues with it and the second pivot back was cleaner
[02:03] <wgrant> IIRC we pg_upgraded the slaves
[02:04] <wgrant> StevenK: That was with native replication around the move -- unrelated.
[02:04] <wgrant> mwhudson: So, if you can tolerate downtime and your DB is small then just pg_upgrade
[02:04] <wgrant> And be done :)
[02:04] <mwhudson> i guess i should figure out how pg_upgrade works properly
[02:04] <mwhudson> wgrant: yeah
[02:05] <wgrant> There are occasionally caveats, but it's usually the best way
[02:06] <wgrant> If the 9.2 pg_upgrade is fast enough we might even just go RO for a couple of minutes and avoid slony entirely
[02:06] <mwhudson> i'm a little confused about clusters i guess
[02:07] <StevenK> wgrant: With pivoting or without?
[02:07] <mwhudson> will pg_upgrade try to destroy my existing 9.1/main cluster?
[02:08] <wgrant> mwhudson: It has two modes: copy and hardlink
[02:08] <wgrant> The latter will destroy the original cluster
[02:08] <wgrant> Copy will create a copy, which is probably OK unless your DB is LP-sized
[02:09] <mwhudson> wgrant: sure, i get that bit
[02:09] <mwhudson> wgrant: where will it put the copy though?
[02:09] <mwhudson> or do i get to decide that?
[02:09] <mwhudson> the db is small enough that i download copies of it for development ...
[02:09] <wgrant> IIRC you specify the source and target paths
[02:10] <wgrant> It doesn't manage the clusters itself
[02:10] <wgrant> Yeah
[02:10] <mwhudson> ah yeah
[02:10] <wgrant> You create the new cluster and then use pg_upgrade to replace its data
[02:10] <StevenK> mwhudson: I have dreams about database's that small
[02:12] <mwhudson> argh
[02:12] <mwhudson> pg_upgrade is packaged as part of postgres-xc apparently
[02:13] <mwhudson> but postgres-xc appears to install its own version of everything
[02:13] <mwhudson> mwhudson@narsil:non-default-database$ sudo -u postgres initdb -D /var/lib/postgresql/9.1/upgrade
[02:13] <mwhudson> initdb: Postgres-XC node name is mandatory
[02:13] <StevenK> pg_upgradecluster ?
[02:13] <StevenK> mwhudson: /usr/lib/postgresql/9.1/bin/pg_upgrade
[02:13] <wgrant> pg_upgradecluster is a Debian wrapper in PATH
[02:13] <wgrant> /usr/lib/postgresql/9.1/bin/pg_upgrade is the real binary
[02:14] <mwhudson> ahh
[02:16] <mwhudson> oh ffs
[02:17] <mwhudson> now postgres-xc's maintainer scripts are failing and not letting me do anything
[02:17] <wgrant> Hee hee
[02:17] <lifeless> mwhudson: you're running clustered ?
[02:17] <StevenK> mwhudson: sudo vi  and 'exit 0' ?
[02:17]  * mwhudson should probably not have been allowed sudo today
[02:17] <mwhudson> StevenK: that's what i'm thinking
[02:17] <StevenK> Hahaha
[02:21] <mwhudson> well this was a little adventure i wasn't in the mood for
[02:23] <lifeless> mwhudson: how well does postgres-xc work?
[02:23] <mwhudson> lifeless: installing it appears to mess everything up completely
[02:24] <mwhudson> and haha of course postgres-8.4 isn't installable in quantal ;-)
[02:24] <lifeless> mwhudson: lxc ftw
[02:24] <mwhudson> yeah
[02:36] <mwhudson> There were problems executing "/usr/lib/postgresql/8.4/bin/pg_ctl" -w -l "/dev/null" -D "/var/lib/postgresql/8.4/main"  stop >> "/dev/null" 2>&1
[02:36] <mwhudson> Failure, exiting
[02:36] <mwhudson> :(
[02:37] <wgrant> :(
[02:38] <mwhudson> particularly nice to pipe any error messages away
[02:42] <mwhudson> oh
[02:42] <lifeless> spethial
[02:42] <mwhudson> turns out -l fixes the errors go away problem
[02:43] <mwhudson> now i think it's that ubuntu puts the config not in the cluster but rather in /etc
[04:46] <StevenK> wgrant: https://code.launchpad.net/~stevenk/launchpad/populate-searchables-for-pu/+merge/138906 is ready for another look
[04:57] <StevenK> wgrant: And https://code.launchpad.net/~stevenk/launchpad/squash-archivesubscriptionerror/+merge/139382
[05:01] <wgrant> StevenK: What does set_archive_and_user do that can't be achieved by setting archive and user?
[05:01] <StevenK> wgrant: I can't set self.user directly
[05:02] <wgrant> You don't set self.user at all, because that's the request user
[05:02] <wgrant> But can't you set self.current_user directly?
[05:02] <wgrant> The helper seems pointless
[05:02] <wgrant> Also, I'd perhaps say context_user
[05:02] <StevenK> wgrant: If I try and set self.user = ... in the view, I get horrible errors
[05:03] <wgrant> Sure
[05:03] <wgrant> self.user is special
[05:03] <wgrant> You shouldn't be setting it
[05:03] <wgrant> Also, self.archive is a bit odd, as it's reasonable for some other view to use that name
[05:03] <wgrant> Perhaps sources_list_archive and sources_list_user?
[05:04] <wgrant> Also, on line 101 of that diff you use the request user's displayname, but the context user's name
[05:04] <StevenK> Oh, hah, I missed one
[05:07] <StevenK> wgrant: http://pastebin.ubuntu.com/1426820/
[05:08] <wgrant> context_archive and context_user are still sort of overly generic for a very specific widget
[05:09] <StevenK> You suck, and I hate you.
[05:09] <wgrant> Oh, it already used self.archive?
[05:09] <wgrant> current_user needs to change, but if it's already using self.archive then it's probably safest not to change that
[05:10] <wgrant> Because current_user is precisely not the current user :)
[05:12] <StevenK> wgrant: http://pastebin.ubuntu.com/1426826/
[05:13] <wgrant> Much clearer :)
[05:14] <StevenK> And less buggy, too boot
[05:23] <wgrant> StevenK: I still don't see any value in set_archive_and_user over setting the archive and user
[05:23] <wgrant> And the Nones might as well be defined in the class definition, rather than __init__
[05:23] <StevenK> Oh, I can do that in the views if you wish
[05:25] <StevenK> wgrant: http://pastebin.ubuntu.com/1426839/
[05:25] <StevenK> Sorry, I didn't realise you were still pushing back
[05:26] <wgrant> Great
[05:30] <lifeless> what is he, a plane?
[05:31] <StevenK> wgrant: Diff updated
[06:11] <StevenK> wgrant: I wonder if we can forbid import cgi in the fascist
[06:12] <wgrant> cgi.parse_qs and friends are still useful
[06:12] <wgrant> And there's only one callsite of cgi.escape left in the entire tree
[06:12] <wgrant> So there's no bad examples left for anybody to copy
[06:12] <StevenK> \o/
[06:12] <wgrant> So I doubt any more will sneak in
[06:58] <StevenK> wgrant: You fail at buildbot bingo again.
[07:00] <StevenK> wgrant: I thought sets were sorted?
[07:01] <StevenK> wgrant: And there is no normal add mechanism for PCJ'd PU's.
[07:01] <wgrant> StevenK: sets aren't sorted
[07:01] <wgrant> StevenK: That function isn't just used for PCJs
[07:02] <wgrant> It's used to create all PUs
[07:02] <StevenK> >>> set(['b']) | set (['a'])
[07:02] <StevenK> set(['a', 'b'])
[07:04] <StevenK> >>> set(['c', 'd', 'b']) | set (['a'])
[07:04] <StevenK> set(['a', 'c', 'b', 'd'])
[07:04] <StevenK> Even
[07:05] <StevenK> wgrant: Right, but there isn't a addPCJ method on PU
[07:05] <StevenK> Either we have one, or we don't.
[07:06] <StevenK> I can call setSearchable* in the constructor if package_copy_job
[07:06] <wgrant> StevenK: Oh, I meant that you should call addSearchable*, yes
[07:06] <wgrant> Not addPCJ
[07:07] <StevenK> wgrant: In PU's constructor?
[07:07] <wgrant> >>> list(set(['foo', 'bar', 'baz']))
[07:07] <wgrant> ['baz', 'foo', 'bar']
[07:07] <wgrant> Yes
[07:07] <StevenK> Hmmm
[07:07] <StevenK> I will add sorted()
[07:07] <wgrant> sets are by definition unordered
[07:07] <lifeless> they have a sort order. Its the internal datastructure iteration order
[07:07] <lifeless> which is effectively random
[07:08] <StevenK> wgrant: appendSearchable*? Since that's what it does.
[07:08] <wgrant> Sure
[07:08] <lifeless> in that you can't depend on it, in any regard
[07:08] <wgrant> But it's undefined
[07:08] <wgrant> So they're unordered :)
[07:08] <wgrant> StevenK: It doesn't strictly append, but the order doesn't matter. So I'd say add
[07:09] <wgrant> cjwatson: Do you want to retract https://code.launchpad.net/~cjwatson/launchpad/queue-filter-source/+merge/119225 now that we have a less disastrously unperformant solution?
[07:09] <StevenK> wgrant: PackageUpload has no __init__
[07:10] <StevenK> And I don't want to step on SQLBase's toes
[07:10] <wgrant> There's no __init__, no
[07:10] <wgrant> But there is a factory method somewhere
[07:11] <wgrant> That you edited in that branch already
[07:11] <StevenK> That doesn't help code that creates PCJs
[07:11] <wgrant> I am confused
[07:12] <wgrant> What doesn't work for what and why?
[07:12] <StevenK> wgrant: A PCJ may not require a PU. If it does, it calls createQueueEntry(). The factory methods for creating a PCJ don't touch that bit of the code, they have the job system do it
[07:13] <StevenK> And I'm not sure how I can call addSearchables* if there is no __init__, and no add{Source,Build,Custom} variant.
[07:15] <wgrant> Why not?
[07:15] <wgrant> The method on DistroSeries creates the PackageUpload and returns it
[07:15] <wgrant> It can, between creating and returning it, call addSearchable*
[07:15] <StevenK> Oooh
[07:15] <wgrant> Or the __init__ could, if you want to define an __init__
[07:15] <wgrant> (it's not uncommon to define an __init__ that just passes through the args and kwargs to super, then performs some operations afterwards)
[07:18] <StevenK> wgrant: http://pastebin.ubuntu.com/1426974/
[07:19] <wgrant> StevenK: And now you can add a comment to __init__ about how they get added for other cases :)
[07:19] <wgrant> Also, consider how this is going to work when the two columns are NOT NULL
[07:19] <StevenK> They can not be.
[07:19] <wgrant> You'll need to have a sensible default, and you might as well arrange that now
[07:19] <wgrant> Why not?
[07:19] <wgrant> They have logical defaults: '' and []
[07:20] <StevenK> Ah
[07:22] <StevenK> wgrant: http://pastebin.ubuntu.com/1426981/
[07:27] <wgrant> That's wgrant Compliant™
[08:01] <mwhudson> wgrant: in other wtf news, pg_upgradecluster appears to use pg_dump/pg_restore under the hood, not pg_upgrade
[08:02]  * mwhudson fumes
[08:04] <mwhudson> ah
[08:04] <mwhudson> http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=682938
[11:20] <cjwatson> wgrant: Sure, retracted now
[11:21] <cjwatson> and reassigned the bug to StevenK
[11:34] <StevenK> Just need to wait for my DB patch. And fix my test failures. And then wait for the garbo job to populate on all four instances ...
[11:35] <StevenK> And then two more DB patches. :-(
[11:35] <czajkowski> is that all :)
[11:45] <StevenK> czajkowski: Nope. Then I have to land the branch that makes uses of the new columns.
[19:33] <sinzui> ha. keyboard navigation is broken in the bugs subscriptions widget because it stomps on the content of it's overlay widget.
[19:33] <sinzui> Now the question is, can I fix this without spending a 2 days remaking it as a true widget.
[19:37]  * rick_h_ sends sinzui lots of luck
[19:38] <sinzui> This module is a crime
[19:38] <rick_h_> yea, my general rule in JS stuff is rewrite first ask questions later
[21:36] <timrc> Is there a way to correlate a build with package_upload? I'm trying to see if I can calculate various wait time statistics between upload and build for our ppas
[22:05] <StevenK> A PackageUpload may link to a build, a source or a custom upload. I'm not certain if the property is exported.
[22:30] <sinzui> StevenK, can you triage this: https://bugs.launchpad.net/launchpad/+bug/1089615
[22:30] <_mup_> Bug #1089615: Source builds fail for packages with "3.0 (quilt)" format and unapplied patches <Launchpad itself:New> < https://launchpad.net/bugs/1089615 >