/srv/irclogs.ubuntu.com/2011/02/20/#launchpad-dev.txt

LPCIBotYippie, build fixed!00:00
LPCIBotProject db-devel build (381): FIXED in 5 hr 47 min: https://hudson.wedontsleep.org/job/db-devel/381/00:00
SpamapSlifeless: re the cassandra stuff, https://launchpad.net/~cassandra-ubuntu00:24
SpamapSlifeless: stable releases has 0.7.0 .. I'm working on 0.7.200:25
SpamapSlifeless: and yes, it installs fine on lucid and maverick00:25
lifeless\o00:25
lifelessI'll have to see about getting it into cat00:25
lifelesswgrant: are you around?00:30
wgrantlifeless: Yes.00:30
=== lifeless changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | firefighting: - | On call reviewer: - | https://code.launchpad.net/launchpad-project/+activereviews
lifelesswgrant: https://code.launchpad.net/~lifeless/launchpad/rabbit/+merge/5048800:31
lifelessif you're interested00:31
lifelessI'd like another set of eyeballs before I land it00:32
wgrantlifeless: I spent a while looking for the definition of BRANCH_NICK00:39
wgrantThen I noticed the docstring.00:39
wgrantEr, comment.00:39
wgrantos_exec's name sucks.00:39
wgrantThis daemonisation stuff looks far more crackful than required.00:40
wgrantWhat's wrong with subprocess?00:40
lifelessI don't know yet00:41
lifelessI was handed some working code that was run from Makefile and totally unsuitable for parallel testing etc00:41
wgrantAh.00:41
lifelessI've done the minimal migration00:41
lifelesstheres more to go00:41
wgrantMaybe the rabbit binaries don't daemonise and set PIDs and stuff.00:41
lifelessI don't know which bits matter, and which don't.00:42
wgrantIt is awful and you need to clean it up, but yes, get it in the tree.00:42
wgrantIt looks like it will mostly work, but it's fairly insane.00:43
* wgrant considers destroying Zopeless.00:44
lifelessheh00:45
lifelessgo look at the original00:45
lifeless:)00:45
lifelessec2 away00:49
lifelesshopefully all the deps are already presen00:49
lifelesst00:49
lifelessI'm seriously considering having the production rabbit present on every node00:52
lifelessit would make reasoning about many failure modes a lot easier00:53
wgrantHmm.01:03
wgrantlifeless: Not just on the DB servers?01:03
wgrantlifeless: Hmm, ~canonical can't see U1?01:06
wgrant:(01:07
* wgrant pokes staging in the eye.01:20
wgrantSubclasses overriding private attributes... grr.01:47
wgrantThere is minified JS in our bzr history wtf wtf wtf01:57
lifelesswgrant: probably not on the db servers at all03:27
wgrantlifeless: Hmmm.03:27
lifelesswgrant: why would it be on the db servers?03:28
wgrantlifeless: I like keeping my critical data stores on machines that are meant to keep critical data stores.03:28
lifelessrabbit sits in a spectrum03:29
lifelessif (say) devpad croaks03:29
lifelesswe don't care if in-progress OOPSes are lost03:29
lifelessall our machines have RAID level redundancy atm03:30
lifelessthe db servers aren't big because they have more redundancy, they are big because they are central load points03:30
wgrantBut the DB servers stay up.03:31
lifelessso do the appservers03:31
wgrantAnd if they go down then we are screwed anyway.03:31
lifelesswe can fail over to a slave03:31
lifelesswith rabbit by default the queued messages on a down load will return when the node returns03:32
lifelessso it needs to be a pretty critical boom moment to permanently lose them03:32
lifelessand whatever machine we bring another queue processor up on would establish new queues03:32
wgrantAppservers having the only copy of any data is scary.03:33
lifelessthey have that all the time at the moment03:33
wgrantDo they?03:33
lifelessin progress requests03:34
wgrantThe persistent data stores are on four other machines, not appservers.03:34
lifelessrabbit isn't a persistent data sttore03:34
wgrantIt persists across a request boundary, so it is persistent.03:34
lifelessby that token so is an oops report03:35
lifelesswhich means we have 5 persistent data stores on the app servers03:35
lifeless(I disagree with that definition btw)03:35
wgrantI don't want a taken-out appserver to reverse actions taken by a completed request.03:36
wgrantLosing queue items does that.03:36
lifelessI think you need to learn a little  more about rabbit03:36
wgrant14:32:14 < lifeless> with rabbit by default the queued messages on a down load will return when the node returns03:36
lifelessright03:37
lifelesswe wouldn't have queues on the appservers03:37
lifelesswe'd have a rabbit on them03:37
lifelessif something got buffered there, it means the network is down03:37
lifelessthe only use case for that is oops forwarding atm03:37
lifelessseparately03:38
wgrantSo each queue has a master node that will not be on an appserver?03:38
lifelessno, dropping a queues items won't reverse actions from a completed request03:38
lifelessthose actions clearly wouldn't have happened if that was possible03:38
lifelessin rabbit, a queue lives on a node03:38
lifelessexchanges forward messages to queues based on bindings03:39
wgrantRight.03:39
lifelessusing oops as an example03:39
lifelessI'd put the queue of oopses to process on a local rabbit where the oops site is03:39
lifelessI'd make it entirely ephemeral because I don't care if we lose a few in the event of failure03:40
lifeless(I care if we lost tonnes, but not a few)03:40
wgrantOh, right, it lets you configure the reliability? It's been ~a year since I last looked at it in depth.03:40
lifelesseach message03:40
lifelessand each queue03:40
lifelessyou can be transactional03:41
lifelessor you can be fire and forget03:41
lifelesswe're going to have a bunch of differing requirements03:41
lifelessand how we deal with failures of various sorts is going to require case by case thought.03:41
lifelesssimply saying 'transactional persistent, done' would be a recipe for later pain.03:41
wgrantIndeed.03:41
lifelessanyhow03:43
lifelessit doesn't have 2pc03:43
lifelessAFAICT03:43
wgrant:(03:44
lifelesshttps://dev.rabbitmq.com/wiki/AckingSchemes#section_1 kindof talks about it03:44
lifelessbut hte images are fucked03:44
wgrantAs fucked as some of our import webs?03:44
lifelessit looks like you build it on top of the characteristics03:44
lifelessrighto, amqp 1.0 does 2pc - but IIRC 1.0 kindof foundered04:09
lifelessas a ill performing mess04:09
wgrantHeh.04:09
lifelessbest you can do with 0.8 is queue things and not release until the db is committed04:09
lifeless(thats what pgamqp does)04:09
lifelessok, wow time ;)04:31
StevenKlifeless: Hah05:09
StevenKlifeless: 3rd 85 yesterday05:10
lifelesscool06:02
lifelessgrrr, rabbit failed on ec206:38
lifelessis it easy to get a shell into an ec2 instance while its running tests ?06:38
wgrantlifeless: It gives you the ssh command near the end of the output.06:45
StevenKlifeless: ssh -v ec2test@<ec2 ip or hostname>07:10
lifelessnext weekend I guess08:06
* jml is around fo reals11:06
lifelesshai11:17
lifelessand bai11:17
lifelessjml: I am on that bridge ;) - I have a patch where I'm trying to figure out what package to put the subunitstream model class in18:05
lifelessgrrr19:49
lifelessdict.update() shouldn't be forbidden ... zopeSecurityProxy fail19:49
thumpermorning lifeless19:59
* thumper needs coffee 19:59
* thumper wanders off to find said coffee20:00
lifelesshi thumper20:00
jelmer'morning thumper, lifeless20:52
thumperhi jelmer20:52
jmllifeless: uhh, I see.20:52
jmllifeless: there's a relatively easy way to fix the {}.update thing.20:53
jmllifeless: I'd suggest "testdb" if you can't think of anything better.20:54
jmllifeless: you could add 'checker.BasicTypes.update({dict: checker.NoProxy})' to lp_sitecustomize, which would completely disable security proxy checking for dicts. I don't think that would be a bad thing.20:55
lifelessjml: I actually think the current structure of <domain>/<layer> is really annoying; I'd much rather we had <layer>/<domain>20:59
lifelessjml: wouldn't that let things escape securityproxying? if an unproxied object is in the dict20:59
lifelesswgrant: hey21:26
lifelesswgrant: when you are around; can more than one distro share a distroseries row?21:26
StevenKlifeless: I strongly doubt it.21:28
lifelessStevenK: ok cool21:28
thumperStevenK, wallyworld_: standup21:29
thumper?21:29
StevenKthumper: Aye, coming21:29
lifelessis there a helper for sql strings like Or for storm expressions?21:38
lifelessI have a list of sql fragments21:38
lifelessand want on length 1 -> foo[0]21:39
lifelesson length 2+ -> "(" + " OR ".join(foo) + ")"21:39
thumperStevenK: https://code.launchpad.net/~thumper/launchpad/choosing-recipe-name/+merge/5053021:48
wgrantlifeless: I hope not, because that would break everything.21:59
jmllifeless: oh yes, I think you're right.22:01
jmllifeless: I don't find our "current" thing annoying. What I find annoying is that we haven't fully switched to it.22:01
jmllifeless: however, if you wanted to change, and were actually serious about finishing that change and could guarantee that we wouldn't have a mutiny, then I wouldn't mind a <layer>/<domain> approach. They seem equally preferable to me.22:08
wallyworld_thumper: sorry, was having breakfast22:12
thumperwallyworld_: ok22:14
thumperrachel's kindle just arrived \o/22:16
wallyworld_you're just happy now cause you don't like sharing22:18
lifelessjml: I'm waiting for the squad culture to bed down a bit22:19
lifelessjml: I think it will become obvious to others, the more they work cross <domain> that the current structure is a nuisance22:19
wgrantHmm.22:19
lifelessthings like the buildmaster are good as they are22:20
wgrantlifeless: Except it should be in services.22:20
lifelessthat is, they actually are components22:20
lifelesswgrant: sure, or services should die in a fire and promote its contents22:20
wgrantThe LP_DB* envvars make me sad.22:20
lifelessexcuse the hyperbole22:21
lifelesswgrant: yes22:21
wgrantBut I guess I should still support them :(22:21
wgrantApart from that Zopeless is just about gone.22:21
lifelessor find and remove their uses22:21
lifelesswgrant: nice22:21
lifelessoh frell22:21
lifelessI have the rabbitmq code in my bug-636158 branch22:21
lifeless><22:21
wgrantHah.22:21
wgrantYou are good at that.22:21
mwhudsonthe problem with "finding the uses" is that they may well be in initscripts and so on that aren't in the tree22:22
wgrantmwhudson: Exactly.22:22
wgrantAnd it's easy enough to support them in a much less OMG MUST KILL way than they are now.22:22
wgrantSo I will.22:22
wgrantThere is also a set of options that some scripts take that do the same thing :/22:23
lifelessmwhudson: losado grep22:24
wgrantAlso, shipit needs to die.22:25
lifelessthats feature level work22:25
wgrantYes :(22:25
lifelessit needs some apis22:25
lifelesslaunchpadlib fixed to be usable in appservers22:25
lifelessthen its doable22:25
wgrantSure. I wasn't saying it was doable. Just that it pisses me off when I have test failures because bzr grep doesn't catch stuff outside the tree.22:26
wgrantWhy did staging not try to restore over the weekend?22:28
jmlwgrant: +122:30
lifelessI need a reviewer22:31
lifelesshttp://bazaar.launchpad.net/~lifeless/launchpad/bug-636158/revision/1241322:31
jmlpisses me off even more when I have deployment failures because of the same.22:31
lifelessthis is a refactoring22:32
lifelessit has some stuff I'm not entirely happy with, but I don't konw if there are existing facilities in tree, or if I should make some.22:32
wgrantlifeless: My first comment is that the method should probably be on IPublishingSet, not IDistroSeriesSet.22:37
lifelesswhy ?22:38
wgrantBecause all this publishing-related stuff on DS bloats DS massively.22:38
wgrantIt doesn't belong there.22:38
lifelessmmm, thats fair enough, but why does it belon on publishing set ?22:38
lifelesswhy would someone look there rather than distro/distroseries ?22:39
wgrantBecause in the end you are asking for the latest publication.22:39
lifelessthats an implementation detail22:39
lifelessisn't it ?22:39
wgrantNo.22:39
wgrantI don't think so.22:39
lifelesstheres a related oddness22:40
wgrantThere's more than one.22:40
lifelessdistro.getCurrentSourceReleases != distro.development_series.getCurrentSourceReleases22:40
lifelessand it appears to be deliberate22:40
lifelessbut I'm not sure users will understand22:40
wgrantI didn't know that both existed.22:41
lifelessindeed22:41
wgrantDistribution's finds the latest in any series?22:41
lifelessthere would be much less duplcicate code if they didn't both exist22:41
lifelesscorrect22:41
wgrantThat's braindead.22:42
wgrantBut Bugs uses it.22:42
lifelessindeed22:42
lifelessindeed22:42
wgrantI don't recall anywhere else that does.22:42
lifelessI'm in correctness-preserving refactoring at the moment22:42
lifelessso I am not going to fiddle22:42
wgrantAnd I filed a bug on the Bugs behaviour a few years ago.22:42
wgrant:(22:42
lifelessbut - it makes me care less about the duplication I have that I was worried about22:42
lifelessbecause we can just delete the method in a separate pass22:43
wgrantRight.22:44
wgrantMake sure you file a bug.22:44
lifelesswhere is the bug you filed ?22:45
lifeless(because that would be the one to use)22:45
wgrantBug #27951322:46
_mup_Bug #279513: Distribution source package tooltip in bugtask table shows most recent SPP <lp-bugs> <ui> <Launchpad itself:Triaged> < https://launchpad.net/bugs/279513 >22:46
wgrantNot as long ago as I thought.22:46
lifelessso22:48
lifelessit could show most highest version22:48
wgrantOr latest in the dev series.22:48
lifelessright22:48
lifelesswhich I think is better and simpler22:48
wgrantDefinitely.22:48
thumperhmm... it seems that Matcher and Mismatch aren't in the __all__ for testtools.matchers22:49
thumperI'm guessing they should be22:49
jmlyeah, they should.22:50
jmlthey might even be in trunk.22:50
lifelessThey were skipped deliberately22:50
lifelessbecause from testtools.matchers import * shouldn't import the base classes22:50
lifelessthis was perhaps a mistake22:50
lifelesserm22:51
lifeless400 Bad Request Bad Request Your browser sent a request that this server could not understand. Apache/2.2.14 (Ubuntu) Server at bugs.launchpad.net Port 44322:51
lifelesswtf22:51
wgrantWhat was the request? I've seen that on bad hostnames, but that's about it.22:52
lifelesscommenting on that bug22:52
lifelessjml: as you are around22:53
lifelessjml: testtools22:53
lifelessI reviewed and so on; what did you think22:53
jmllifeless: I haven't had a chance to look22:53
lifelesskk22:54
lifelessok, I can has review please: https://code.launchpad.net/~lifeless/launchpad/bug-636158/+merge/5053422:59
lifelessthumper: ^ if you have the time, would be awesome23:00
* thumper is writing some groovey matchers23:01
* thumper enlunchenates23:02
jelmer_lesigh23:16
jelmer_thumper: I almost looked up enlunchenates in my English->Dutch dictionary23:16
lifelessLol23:19
lifelessgrrr23:29
lifelessso milestones pretend to be series related23:30
lifelessbut they are really pillar related23:30
lifelessmodelling fail23:30
jmllifeless: sinzui will tell you a story about that one.23:30
lifelesswe need to say 'series in ... or milestone in ...'23:30
lifelessrather than 'series in... group by series, milestone'23:30
lifelessand our bug task search compiler is byzantine23:31
jmlwhat's the sanest way to synchronously download a small thing via the web in Python?23:31
lifelessbzrlib.transport ?23:31
lifelessits a sane way23:31
lifelessbut perhaps not /the/ sanest way23:32
lifelessjml: whats the story?23:32
jmllifeless: fetching a very small json dict23:32
jmlbzrlib.transport is fine23:32
lifelessjml: I meant whats the story that sinzui would tell me23:33
jmllifeless: oh, I forget the details. I think for 3.0 he & beuno wanted to do a big refactoring of series/milestone relationship and got blocked.23:34
jmllifeless: not many people find "series" intuitive.23:34
wallyworld_thumper: can you ping me when you're back?23:36
wgrantlifeless: They made releases sane on top of milestones, but milestones atill aren't completely sane.23:36
wgrantlifeless: Also, milestones do have a series...23:36
wgrantBut they also have a product, possibly because some old data doesn't have a series, which could be fixed :)23:37
jmlhow do we feel about this output?23:47
jmlhttp://paste.ubuntu.com/569855/23:47
lifelessjml: interesting23:49
lifelessjml: would be cool to put that in aws-status23:49
jmllifeless: it's somewhat specific to Launchpad ec2test.23:49
lifelesswhy is it specifc?23:50
wgrantjml: How does it do that? SSH in?23:50
jmllifeless: it could be made more general, but right now it looks for special information about what the test run is and whether or not it's successful.23:51
jmlwgrant: no, just fetches a JSON file that remote.py creates & keeps up-to-date.23:51
wgrantAh, handy.23:51
thumperwallyworld_: ping23:52
lifelessjml: so, I know the bug you're looking at23:52
wallyworld_thumper: mumble?23:52
thumperwallyworld_: ok23:52
lifelessjml: and I suspect this won't meet the goal of it, though IMBW23:52
lifelessjml: won't this fail if e.g. your ip has changed?23:52
lifelessand isn't the goal of the bug to find things that have gone awol ?23:52
lifelessoh man23:54
lifelessbug task bug summaries are so broken right now23:54
lifelesspop quiz23:54
jmllifeless: if you don't have permission to hit those web pages, then yes, it will fail.23:54
jmllifeless: it can still show instances and uptimes though.23:54
lifelessshould a bug be counted once per distroseries for aggregation into milestones ?23:55
jmlwhich will be good enough for that case.23:55
lifelessjml: I would like this stuff to live outside the lp tree23:55
jmllifeless: too late?23:55
lifelessI think its great you're improving it23:55
lifelessjml: its never too late23:55
wgrantWhat's the process for shipit branches?23:58

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