/srv/irclogs.ubuntu.com/2011/09/28/#launchpad-dev.txt

pooliehi00:20
wgrantMorning poolie.00:20
wgrantThey're multiplying.00:22
poolie_poolies?00:23
wgrantThat's the one.00:23
wgrantOr two.00:23
huwshimiwgrant: And now there are none00:31
wgrant:(00:39
wgrantjtv revived Zopeless stuff in his megalint again.00:40
StevenKOh, bleh00:40
StevenKnigelb: 1) Your branch doesn't seem to include any changes; 2) It should be targetted against db-devel00:42
wgrant46 conflicts encountered.00:42
StevenKwgrant: Whee00:42
StevenKSigh, it does include changes.00:43
StevenKMPJ has lost its mind again00:43
wgrantStevenK: Link?00:43
StevenKwgrant: https://code.launchpad.net/~nigelbabu/launchpad/kill-statusexplanation/+merge/7721100:43
wgrantStevenK: It doesn't have any changes.00:44
wgrantIt was merged then reverted.00:44
wgrantnigelb will need to revert the revert.00:45
StevenK41- var warning = overlay.one('.private-bug-warning');00:45
StevenK42+ warning = overlay.one('.private-bug-warning');00:45
StevenKlol?00:45
StevenKOh, let me guess. In JavaScript 'warning' is a reserved word?00:46
nigelbwgrant: wait, revert the revert?02:05
nigelbthta sounds convoluted :)02:05
StevenKnigelb: It's true02:08
wgrantnigelb: Reverting in a DAG-based DVCS involves doing a reverse-cherrypick of the revison that you want to revert.02:21
wgrantnigelb: So to revert the revert, it's probably easiest to do a reverse-cherrypick of the reversion revision.02:21
pooliemwhudson, lifeless, huwshimi, i drafted https://dev.launchpad.net/LEP/SSH_OAuth based on my discussion with robert yesterday03:02
poolienot planning to run with it at the moment but thought i'd get it down03:02
StevenKSo I have brutally hacked twisted to fix the text/html Content-Type pollution, do I tar it up and stuff it into the download-cache, or do I need to do more?03:07
nigelbwgrant: Let me try this.  (lost power for an hour)03:07
wgrantStevenK: Is it the fix that they've applied to trunk?03:09
StevenKwgrant: It is03:09
StevenKwgrant: I had to apply it manually since patch couldn't work it out03:09
wgrantStevenK: you'll need to create the tarball using whatever mechanism we use for Twisted, add it to download-cache, update the version in versions.cfg, and hope that you got everything right.03:10
StevenKYes, it's the "create the tarball using whatever mechanism we use for Twisted" that I'm concerned about03:10
wgrantI normally try a few different things, and then take the one that looks the most like the old tarball.03:11
StevenKIt looks like a source tarball03:11
mwhudsonpoolie: nice03:12
mwhudsonpoolie: fwiw, ssh is extensible enough that we could define an auth_oauthtoken method or something03:13
mwhudsonpoolie: you'd have to use paramiko rather than openssh for that sort of game though03:13
mwhudson(tbh just using the token as a passphrase would seem to be ok)03:13
StevenKwgrant: Just tarring up what I had looks very similiar03:16
* StevenK runs bzr add, bzr ci, because what could possibly go wrong03:16
wgrantStevenK: Don't commit until you've tested it..03:17
StevenKTest it how?03:18
wgrantAdd it to versions.cfg, make, and see if LP starts03:20
pooliemwhudson, yeah adding a new mechanism was my first thought too03:21
poolieseems cleaner; robert suggested just pretending it's a password may be easier03:21
poolieperhaps also we would log in as mbp+oauth@bazaar.launchpad.net and do it there03:21
pooliebit kludgy perhaps03:21
poolieit's basicalyl bug 29739803:22
_mup_Bug #297398: using ssh keys to connect to bazaar.launchpad.net confuses users a great deal <confusing-ui> <lp-code> <Launchpad itself:Triaged> < https://launchpad.net/bugs/297398 >03:22
pooliemwhudson, ok that's all i'm planning to actively do on it03:24
poolieif you want to work on it i'll help though03:24
mwhudsonpoolie: i guess i should try to land my feature flags xmlrpc branch again03:25
poolieoh i thought it did land03:25
pooliethat would be great in its own right03:25
mwhudsonit did, and was reverted because it broke feature flags in the webapp03:25
mwhudsonchanging launchpad is hard :/03:25
poolie:/03:26
poolieat least this patch will make it incrementally easier03:28
nigelbmwhudson++03:31
nigelb:)03:31
poolieprobably somebody with more zope blood on their hands could have made flags provide global state in a better way than i did03:31
* mwhudson runs ec2 land03:34
nigelbHrm, what's with me and db-devel. Second patch also seems to be having issues.03:34
StevenKIt does?03:35
pooliedoes anyone disagree with me calling bug 858605 untestable?03:35
_mup_Bug #858605: launchpad sends mail for people with an inactive account <mail> <qa-untestable> <Launchpad itself:Fix Committed by mbp> < https://launchpad.net/bugs/858605 >03:35
StevenKBleh, my source tarball still proclaims itself as Twisted 11.0.003:37
nigelbArgh. How do I revert?03:37
poolierevert what?03:38
nigelbI need to revert a revert.03:39
poolietell me more?03:39
mwhudsonnigelb: find the revision that reverted your change03:39
mwhudsonrun bzr merge -r $rev..before:$rev .03:39
nigelbWell, I overeagerly landed a db-devel change, which wgrant reverted. I need to revert that revert.03:40
nigelbah, I can find the revision number in the bug.03:40
nigelbLet me hunt it down.03:40
nigelbmwhudson: that didn't work. maybe my revno was wrong.03:44
nigelbWhat am I doing wrong - http://paste.ubuntu.com/698277/03:46
mwhudsonwell, conflicts don't necessarily mean you are doing it wrong03:48
mwhudsonnigelb: looks like you forgot the '.' at the end though03:48
nigelbah03:49
nigelbmwhudson: Worked. Thanks!03:52
mwhudsonnigelb: cool03:52
nigelbStevenK: do you need stub's ack to land that?03:58
nigelbOr can you ack it on the basis of the earlier "okay"03:58
StevenKnigelb: It is easier if you have DB sign-off again04:04
nigelbokay04:05
nigelbI wonder what timezone stub is living in today.04:05
* StevenK renews his hatred of Twisted04:25
wgrantStevenK: https://code.launchpad.net/~wgrant/launchpad/bug-860920/+merge/77271 desires your perusal.04:27
nigelbwgrant: Very dry branch name ;)04:28
wgrantnigelb: Yeah, I'm mostly adding code, unfortunately.04:28
wgrantBut I will hopefully delete half of our test layers this weekend :)04:28
nigelb...04:28
nigelbWhat's going away? Zopeless?04:28
wgrantZopeless went away on Monday.04:29
wgrantBut there are still *ZopelessLayer.04:29
wgrantI'm hopefully going to merge them into *FunctionalLayer.04:29
StevenKwgrant: Can you explain the changes to configure.zcml?04:29
StevenKThe addition is fine, the removsls04:30
StevenKSigh04:30
wgrantStevenK: DistributionSourcePackage was unique among IBugTarget implementers in that it named the attributes on IBugTarget explicitly, rather than just allowing the whole interface.04:30
wgrantSince I was adding a new attribute to the interface, rather than add another name I opted to follow the rest of the implementers and allow the whole interface.04:30
StevenKWhich resulting in removing a whole slate of stuff from the ZCML. Right.04:31
wgrantRight, since you can't declare multiple permissions for the one name, even if those permissions are identical.04:31
StevenKwgrant: r=me04:32
wgrantThankyou sir.04:32
* StevenK goes back to bashing his head against Twisted or Zope04:33
wgrantOh?04:33
StevenKYou know the latter already, the former is trying to get my tarball of Twisted to identify itself with a different version04:34
StevenKCan't find the arguments to setup.py, or even if that will help one iota04:36
StevenKAnd Twisted's build system is worse than ours.04:37
=== jtv-afk is now known as jtv
wgrantwallyworld: Is the deval failure yours?04:58
wgrantdevel04:58
wgranthttps://lpbuildbot.canonical.com/builders/lucid_lp/builds/1414/steps/shell_6/logs/summary04:58
wallyworldwgrant: don't know. haven't seen it yet. let me look04:58
wallyworldwgrant: could be. but how did it pass ec2 i wonder04:59
wgrantwallyworld: It's possible that you conflicted with megalint-II05:00
wgranteg. it revived a test that I deleted on Monday.05:00
wallyworldah. oh well. i'll update from devel and fix05:00
wgrantThanks.05:00
wgrantIt may not be yours, but it certainly looks likely...05:00
wallyworldwgrant: curtis landed the branch for me late last night after i went to bed. i assume it was put through ec205:06
wgrantI saw he made a last-minute change.05:06
wgrantHe appeared in the blamelist of the merge.05:06
wallyworldwgrant: passes locally with latest devel05:07
wgrantwallyworld: That is extremely unfortunate.05:08
wallyworldwgrant: yes. let me look at the source code vs the test failure output05:08
wallyworldwgrant: i get the same error locally if i comment out the settin gof the feature flag in the doc test05:12
wallyworldso an initial guess is that the feature flag was ignored by the doc test05:13
wallyworldeven though it was set05:13
wgrantwallyworld: The doctest isn't run more than once?05:13
wallyworldnot that i know of05:14
wallyworldbut the part of the doc test that needs the ff is inside a set/clear block05:14
wallyworldwonder if it's a genuine issue or a spurious failure05:16
wallyworldwgrant: does it fail for you locally?05:17
wallyworldbin/test -vvct initial-bug-contacts.txt05:17
wgrantNo :(05:19
wallyworldwgrant: so resubmit and hope for the best?05:22
wgrantwallyworld: Force the build when it fails? I guess so.05:23
wallyworldyeah, that what i meant sorry05:23
wallyworldmaybe jenkins would build it ok :-)05:24
wgrantHeh05:25
wallyworldso ec2 is happy and it runs locally. stupid buildbot05:26
wgrantWow.05:48
wgrantThe rabbitmq people have made their build system even worse.05:48
wgrant2.3.1 was already one of the most distro-hostile I've seen, and 2.5.0 is worse...05:48
StevenKwgrant: How so?05:50
wgrantStevenK: For starters, see http://hg.rabbitmq.com/rabbitmq-mochiweb/file/b41f8ab516d6/Makefile05:51
wgrantStevenK: Yes, the Makefile in the root directory of the package does one thing: include umbrella.mk from outside the package.05:52
wgrantThe rabbitmq-mochiweb test suite is also convinced that it wants to build its own rabbitmq-server.05:53
wgrantBecause dependencies are hard, I guess.05:53
wgrantThey seem to have basically rewritten the build system twice between 2.3.1 and 2.5.0, so my old fixes don't work :(05:53
wgrantAhh.05:54
wgrantThe plugin in Ubuntu (rabbitmq-stomp) works around this by not running the test suite.05:54
wgrantBut I got it working with 2.3.1... so I will do it again.05:54
wgrantPerhaps all Erlang developers are crazy.05:54
StevenKI'd agree with that.05:55
StevenKFor starters, they use Erlang.05:55
wgrantMeh, Erlang has some pretty nice bits.05:55
wgrantWhy will people not stop writing their own shitty application-specific packaging systems!?06:01
wgrantOh cool, they're now including webmachine stuff in rabbitmq-mochiweb.06:05
* wgrant sobs.06:05
* jtv consoles wgrant06:12
jtv"There, there.  This is all part of growing up.  Eventually you'll learn that it all goes away for a while after large quantities of beer."06:12
jtvYeah, I know.  I'm a natural at this.06:14
wgrantHeh06:14
* StevenK kicks LaunchpadSearchView for being horrid.06:16
nigelbjtv++06:34
jtvnigelb: that returns the old value of jtv.06:35
jtvAlthough it does increase me, for which I am grateful.06:35
nigelbheh06:35
jtvNow, what are we talking about?06:35
nigelbBeer?06:35
jtvAh!06:35
=== jtv1 is now known as jtv
=== almaisan-away is now known as al-maisan
adeuringgood morning07:37
=== danilos changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | On call reviewer: StevenK, danilos | Critical bugs: 261 - 0:[########*** stack smashing detected ***: ./lp terminated
lifelesswgrant: how do you build txlongpoll from tarball? Perhaps julian means build from branch ?07:55
wgrantlifeless: What might Julian mean where?07:56
lifelesshttps://bugs.launchpad.net/python-oops-twisted/+bug/85954507:56
_mup_Bug #859545: Fallback code corrupts the output <python-oops-twisted:Triaged> < https://launchpad.net/bugs/859545 >07:56
wgrantlifeless: I presume he means from the branch, rather than an egg.07:57
rvbalifeless: I also think he meant from the branch.  Also note that we renamed the generated executable from twistd to txlonpoll.07:58
wgrantrvba: Hm, why?07:58
wgrantThat seems very confusing.07:58
rvbahuwshimi: Hi!  Thanks for the longpoll icons.  I'll see what the others have to say but I like them :).07:59
lifelessthere is a separate txlongpoll executable that just runs it isn't there?07:59
rvbalifeless: that's is still in the works AFAIK.08:00
rvbawgrant: why confusing? The goal was to avoid clashing with other twistd services.08:00
wgrantrvba: 'bin/txlongpoll amqp-longpoll' is more confusing.08:01
wgranttwistd is slightly more obvious.08:01
lifelessthe problem will be file collisions I suspect08:01
wgrantWhen included in LP, sure.08:01
rvbaTrue08:01
wgrantBut that's a matter for LP's buildout.cfg.08:01
wgrantNot txlongpoll'08:01
wgrants.08:01
wgrantwallyworld: Hm.08:04
wgrantwallyworld: My ec2 run has just failed with that error...08:04
wallyworldwtf?08:05
* wgrant runs the whole layer locally.08:05
huwshimirvba: No problems!08:08
rvbahuwshimi: one remark:08:08
rvbahuwshimi: allenap noted that the failure icon looks a little bit like the Ubuntu Circle of Friends.08:09
huwshimirvba: Ah, good point. I might make it a little less like that :)08:09
huwshimirvba: I'm just heading off, if you have any other comments can you send me an email and I'll get to it tomorrow.08:10
allenaphuwshimi: Fwiw, I like the spinning circle :)08:10
huwshimiallenap: OK cool :)08:10
huwshiminight all08:10
StevenKjml: O hai08:13
jtvcjwatson: are debian imports working normally for you?  We got gina's run time back down to half an hour or so, and everything goes through proper domination now.  Packages deleted from Debian also have their publications deleted.08:14
cjwatsonjtv: the last thing I uploaded to Debian (yesterday evening) has been imported, which is about all I can say really08:32
lifelessbigjools: looking at txlongpoll08:32
cjwatsonhmm08:32
lifelessbigjools: why do you have a custom log *and* twistd.log ?08:32
cjwatsonjtv: https://launchpad.net/debian/+source/debian-installer-utils - is the 1.84 "not published" there normal?08:32
cjwatsonon the front page?08:32
jtvcjwatson: I'll have to check up on that -- otp now, gimme a few08:33
wgrantcjwatson, jtv: gina wasn't setting datepublished for a while. We should set it to datecreated where it's not set.08:37
wgrantbigjools: ppa:wgrant/rabbitmq has rabbitmq-management 2.5.0 for oneiric now. I had to disable the full functional tests, since the new plugin build system is even more distro-hostile than the old one, but the unit tests all pass and it works fine.08:39
bigjoolslifeless: are you running it with -n ?08:41
bigjoolswgrant: \o/08:42
lifelessbigjools: yes08:42
bigjoolswgrant: awesome, thanks08:42
bigjoolslifeless: that buggers up logging for some reason08:42
lifelessbigjools: not at all08:43
jtvcjwatson, wgrant: it does indeed look like datepublished was simply not set at that point (should've been done in May for this one I guess).  More interesting is that 1.84's publication in sid is Published; that should only be the case if 1.84 is still occurring in sid's Sources.gz.08:43
lifelessbigjools: -n makes it log to stdout, and disables the default twistd.log08:43
lifelessbigjools: if you run without -n, you get *two* logs08:43
bigjoolsah ok08:43
bigjoolslifeless: in that case, the FileLogObserver is not being added correctly08:43
lifelessbigjools: its because the default setup includes another observer08:44
lifelessbigjools: see https://bugs.launchpad.net/txlongpoll/+bug/86123408:44
bigjoolsI think I need to add my code back that adds it separately08:44
_mup_Bug #861234: logs to both custom log and twistd.log <txlongpoll:Triaged> < https://launchpad.net/bugs/861234 >08:44
lifelessbigjools: the mylog observer is  being added just fine08:44
bigjoolslifeless: yeah, the bug describes what I meant :)08:44
lifelessI have fixed the extra spaces thing08:45
lifelessI can't reproduce the other failure yet08:45
lifelessbug 86049008:45
_mup_Bug #860490: oops reports with no type/value crash the fallback reporting code <python-oops-twisted:Triaged> < https://launchpad.net/bugs/860490 >08:45
bigjoolsthat line used to be in the code but I took it out by mistake when I converted to using oops_twisted08:45
bigjoolsthat's weird08:45
lifelessbigjools: https://bugs.launchpad.net/python-oops-twisted/+bug/860490/comments/608:47
_mup_Bug #860490: oops reports with no type/value crash the fallback reporting code <python-oops-twisted:Triaged> < https://launchpad.net/bugs/860490 >08:47
bigjoolslifeless: I can't figure out wtf is wrong then, it's 100% reproducible here08:48
bigjoolslifeless: when I break on that method, the first call succeeds, the 2nd fails08:48
bigjoolswith the deferred failure08:48
lifelessit gets called once per connection attempt for me08:49
bigjoolsthere's the difference then08:49
bigjoolsI exepct you're getting a different failure08:49
bigjoolshave you got the same versions of everything I wonder08:49
* bigjools otp in a bit08:50
lifelessanyhow, I'm going to implement the defensive programming solution08:50
bigjoolsok08:50
bigjoolswithout the bare except I hope08:51
lifelessbut we'll still need to figure out why you are not getting an exception data there08:51
lifelessbecause that will devalue your oops reports08:51
wgrantjtv: 1.85 is new today, so 1.84 still being around is not surprising.08:56
bigjoolsjtv, wgrant: I am about to initialise p-series on DF, are you guys done with all the long-running stuff you were doing on there?08:56
jtvI am.08:56
wgrantI'm not using it.08:56
bigjoolsta08:56
wgrantSo feel free to break it :)08:56
jtvConcur.08:56
jtvwgrant: whether it's surprising is one thing, but I'm interested in another: is it actually the case?08:57
wgrantjtv: Yes, both versions are in http://ftp.debian.org/debian/dists/sid/main/source/Sources.gz09:00
jtvGood!09:00
jtvcjwatson: you should also see older package releases becoming Superseded, but the domination we implemented for gina does support multiple live versions in one release / pocket / archive.09:01
cjwatsonRight.  (When are we going to get similar behaviour of keeping multiple sources around until everything builds, I wonder ... or, more importantly, multiple arch: all)09:01
jtvThe underlying mechanics are there now, for both Gina's domination and regular domination.09:02
wgrantbigjools and I have some disagreements on how that should be done.09:02
jtvThe hard part for regular domination is getting the right information about what versions should be considered live, and feeding it into those mechanics.09:02
lifelessbigjools: what try:except ?09:10
lifelessbigjools: 0.0.3 pushed09:13
lifelessbigjools: (and on pypi)09:15
bigjoolsta09:15
lifelessbigjools: we need to sort out whats up still, and as I can't reproduce yet, that means stepping through some with you :)09:16
bigjoolsok will need to be tomorrow09:16
lifelessbigjools: sure hting09:17
bigjools(still otp)09:23
bigjoolsjml: do you know if there's a way to stop a Deferred firing until a write transaction is finished?09:25
lifelessbigjools: wrap it in a deferred that will tie into the transaction09:26
bigjoolswe want to block any deferred firing until a txn is done, so if a callback calls code that returns deferred we want the txn done before that deferred fires09:27
lifelessI don't see any possible way to do that09:28
bigjoolswe want to make sure txn boundaries don't cross callbacks, basically09:28
jtvWe'd be fine if we had a way to stop twisted from giving any time to another thread of execution while we're in a given stretch of code.09:28
lifelessa deferred is equivalent to a function call - it would be like making *all* function calls in any thread block based on some other state09:28
wgrantbigjools: Aren't transactions restricted to inside the function?09:28
bigjoolsthis is a problem in the buildd-manager09:28
wgrantbigjools: So a transaction won't be in progress when it returns to the reactor...09:28
lifelessbigjools: you could push the db access into the API and use that instead; thats the long term plan *anyway* (per SOA & data encapsulation)09:29
jtvThe core problem, I think, is that we want to be sure in a particular stretch of code that we don't accidentally call something that will do anything deferred.09:29
bigjoolslifeless: yes, but we need a very fast api first :)09:29
lifelessbigjools: we have one09:30
wgrantAlso, pushing this to the API would just make things even worse.09:30
lifelessbigjools: the overhead for a single call is very low09:30
wgrantThe problem is not that transactions are being held around. It's that we're doing data modification in places that we shouldn't be.09:30
bigjoolslifeless: xmlrpc yes, webservice no09:30
wgrantEliminating transactions from that just makes it harder to track down.09:30
lifelessbigjools: !cite - I've looked, and the webservice overhead is low09:30
nigelblifeless: can do you have time to ack a db patch?09:30
lifelessbigjools: also, internally I'd be suggesting using xmlrpc *anyway* as we have that infrastructure setup.09:30
bigjoolslifeless: not low enough for this09:31
nigelbs/can you/do you/09:31
lifelessnigelb: no, I'm on annual leave today :P also, see policy - stub approves except when he's not here.09:31
lifelessbigjools: is 2ms low enough ?09:31
bigjoolsno09:32
bigjoolsthat's slow09:32
lifelessbigjools: because thats the size it was looking like last time I compared the delta from xmlrpc to json api09:32
bigjoolsif it were 2us I'd be happy09:32
lifelessbigjools: that doesn't make any sense to me - we can't even query the db twice in 2ms.09:33
nigelblifeless: oh. right. wednesday. Well, stub hasn't been here yet. Which is why I asked. I'll wait for him :)09:33
bigjoolsso you want to add more latency?09:33
lifelessbigjools: *if* it had to, I could tolerate 8ms per slave build, which would allow for 4 API calls in the critical path for dispatching and completing a build09:34
lifelessbigjools: but we're not going to get clarity by tossing sketches back and forth on IRC09:35
bigjoolslifeless: I used to work in sub-millisencond latency over networks. If you take the Db out of the equation, replacing an internal python call with a 2ms latency remote call doesn't sound clever09:38
jmljtv: you can 'stop Twisted from giving any time to another thread of execution' by not using threads and doing a blocking call09:39
jtvjml: yes I had figured that bit out, thank you09:39
bigjoolsjtv: ^ that is why I said not to call them threads :)09:39
jtv(notice irony there)09:39
lifelessbigjools: of course, but you don't do a literal transcription just replacing db calls with api calls.09:39
jmljtv: ok.09:39
lifelessbigjools: that wouldn't work well for many reasons, transactions being one of them09:39
jtvI'm not talking about threads, of course, merely about threads of execution in twisted.09:39
lifelessbigjools: so measuring the performance by estimating overhead from a direct transcription isn't a good estimator09:40
bigjoolslifeless: ok, this is a conversation better left for in-person I think09:40
jmljtv: I'm not interested in having an ironic conversation right now.09:40
jtv(Seeing how much taller than lifeless bigjools is)09:40
jtvjml: neither am I.  What I'm trying to do is ensure that twisted does not give any time to another job deeper down in my call tree.09:41
bigjoolslifeless: I am sure we can come to a good agreement somewhere, but it's hard to explain without waving arms around09:41
lifelessbigjools: yup, I get that09:41
wgrantwallyworld: bin/test -vvct initial-bug-contacts.txt -t bugtracker-tokens.txt09:41
lifelessjtv: don't return from your function then.09:41
wallyworldwgrant: you want me to run those?09:41
lifelessjtv: (and don't yield either)09:42
wgrantwallyworld: That reproduces the failure.09:42
wgrantwallyworld: We have a test isolation issue.09:42
wallyworldwgrant: bugtracker-tokens wasn't even changed in that branch09:42
wgrantwallyworld: Correct.09:42
wallyworldso somehow the ff is not being homoured09:42
jtvlifeless: I don't want to "just not do" the thing I want to prevent; I want to establish some certainty that it's not inadvertently happening somewhere deeper down in the call tree.09:43
wallyworldin the failing doctest09:43
wgrantwallyworld: Right, presumably bugtracker-tokens is corrupting the state.09:43
wallyworldthat sucks :-(09:43
wallyworldhas this happened before, the same way?09:43
wallyworldis there something we can recall that will help solve it?09:44
wgrantNot identical, but we do occasionally have stuff like this.09:44
wgrantI'm tracking down the problematic call.09:44
wallyworldok09:44
wallyworldi'm hacking javascript. for the disclosure mockups09:44
wallyworldlet me knoe if i can do anything09:45
wgrantAh, it looks like it's XMLRPCTestTransport.09:45
wgrantThat is an evil piece of code. I recall it from my Python 2.7 experiments.09:46
jtvlifeless: don't forget to "make lint" your branches!  From a quick glance at your self-approved branch, I get the impression that there will be some warnings in there.10:21
jtvOr is it not a Launchpad branch?  That'd explain why it ended up in my main mailbox.10:21
jtvstub: as promised... https://code.launchpad.net/~jtv/launchpad/pre-717969/+merge/7729910:22
stubjtv: I'm not sure I like DatabaseTransactionPolicy having an implicit commit. It goes against your reasoning in the MP synopsis, and means you can't mix read-only and read-write code paths in a transaction.10:28
jtvstub: I feel the same, but didn't see support in the underlying APIs for a non-committing version.10:28
jtvFor example, how do you reset policy when you're in a failed transaction?10:29
stubWhy do you need it?10:29
jtvWhen an exception is taking you out of the policy, it needs to reset previous policy.  But at that point the transaction may be broken.10:31
jtvI could abort at that point, start a new transaction, set policy, and commit -- but that brings us back to it being a transaction boundary.10:32
stubSounds like we need to issue a transaction.abort() if we are exiting the context handler because of a psycopg2.Error10:32
stubAlthough a higher level could be handling it...10:33
stubblah10:33
stubHmm... I wonder if we can setlocal instead?10:33
stubdoesn't help in this case, but set local might be nicer anyway10:35
* stub looks into savepoints10:36
stubjtv: savepoints make this nicer, and you get better nesting behavior too10:37
jtvAre we talking about a savepoint in the postgres sense?10:38
jtvNested transactions, basically?10:38
stubjtv: savepoint mytoken; set local default_transaction_readonly true; [...]; release savepoint mytoken;10:39
stubyet10:39
stubyer10:39
stubor rollback to savepoint mytoken10:39
jtvBut that won't work if the transaction breaks, will it?10:40
stubIt will rollback the 'set' too (per documentation on the SET statement)10:40
stubjtv: transaction breaks gets an implicit release of the savepoint10:41
jtv(Also, I couldn't swear that the big performance problems with savepoints were solved in 8.4 as opposed to 9.0 :)10:41
stubits all aborted and it is all rolling back until the code that wants to handle it starts a new transaction10:41
bigjoolscjwatson: I just did a test run of initializing p-series on dogfood, do you want to check it? It seems to be ok to me.  https://dogfood.launchpad.net/ubuntu/p-series10:41
wgrantbigjools: It used the cloner, not the copier, right?10:42
stubIf there is a performance problem, we could consider a switch to turn it off on production. The goal of this code is to prove what sections of code are doing, so mainly applicable to test suite and maybe staging10:42
bigjoolscloner10:42
jtvstub: I don't see nested transactions playing well with other transaction boundaries though.10:43
stubjtv: Yes, it won't play well if the code wrapped by the context manager does commit or rollback10:43
jtvThere are commits and rollbacks in there already.  We could perhaps get rid of those, but it makes me slightly more nervous.10:44
stubImplicit commits where previously there were no commits seems to be making the original problem worse rather than better (updates that should be atomic being made in separate transactions)10:46
stubSo what happens if the context manager, if it catches a psycopg2.Error, does a transaction.abort(), reset policy, reraise exception?10:48
stubWe could even break the transaction again after resetting the policy if we want to be totally transparent10:48
jtvThat doesn't play very well with other transaction handlers.10:48
jtvSorry:10:49
jtvwith other *exception* handlers.10:49
jtvWe could try it with a slight twist:10:49
stubI don't see why. The db transaction is broken. There is nothing to do with the db transaction except issue an abort10:49
jtvreset policy10:49
jtvif *that* raises a psycopg2 error, abort & reset policy.10:50
jtvAnd then commit.10:50
stuboic. yes, because the exception might have been caught inside but left the db connection broken10:50
stubYour idea seems sane to me10:50
jtvThat worries me.10:50
stubYou had to get a good idea eventually.10:51
jtvThere is another problem, however.10:51
jtvAssuming the transaction was not broken, then what if the context outside of the policy breaks or aborts the transaction that we reset the policy in?10:51
stubOr does me thinking an idea sane cause you problems? ;)10:51
nigelbstub! Morning!10:51
stubMorning!10:52
nigelbstub: Could you review https://code.launchpad.net/~nigelbabu/launchpad/kill-statusexplanation-field-forever/+merge/7727310:52
jtv(See why I never liked the primary use case for this python feature?)10:52
jtvnigelb: I saw him first!10:52
stubjtv: What feature do you need to solve this problem correctly?10:53
nigelbjtv: My review is quicker. Already approved once. Need a fresh approval for safety :D10:53
jtvstub: for that one, clairvoyance.  Thanks.  :)10:53
jtvnigelb: I should never have looked at your MP.  :)10:53
jtvstub: it was more things like "figure out the state of the ongoing transaction" that could be solved with API extensions.  But this one is really nasty.10:54
jtvThere is completely different approach: set hooks client-side to manipulate every transaction as it's created.10:54
nigelbjtv: hahaha :D10:55
stubJust looking at psycopg2 docs.... connection.set_session(readonly=True)... API has become fatter in recent years with active development10:55
stubWe could hook into the transaction easily enough...10:56
stubconnection.get_transaction_status() seems useful10:56
stubor connection.status even10:57
stubhttp://initd.org/psycopg/docs/connection.html10:57
jtvAh, thanks.  I browsed around the python objects but didn't find that stuff.10:57
stubWe might need to update our psycopg210:58
stub(which would be a good thing probably - it seems to have moved out of maintenance only to active development mode, but we only update it when we trip over crashers).10:59
stubnigelb: So what changed with that db patch?11:00
jtvstub: gah.  set_session sounded so nice, but: "The function must be invoked with no transaction in progress."11:00
nigelbstub: Nothing. It was reverted because the devel changes weren't deployed everywhere. I un-reverted it.11:00
nigelbThe code changes are now deployed everywhere. Or so StevenK tells me.11:01
bigjoolswgrant: do you have any idea what port the rabbit management plugin uses for additional server instances?11:01
stubSo it is the same patch and my mind isn't playing tricks on me11:01
nigelbNo, it isn't :)11:01
wgrantstub, nigelb I ensured that 14041 was deployed everywhere yesterday.11:01
wgranthttps://devpad.canonical.com/~wgrant/production-revnos11:01
nigelbwgrant: I owe you a beer. Or a few actually.11:02
wgrantbigjools: rabbitfixture disables it.11:02
stubwgrant: Saw that on the mailing list. Thanks!11:02
bigjoolswgrant: what if it doesn't?11:02
wgrantbigjools: It'll fail to start, because it will try to use 55672 again.11:03
nigelbStevenK: OHAI, around?11:03
=== al-maisan is now known as almaisan-away
bigjoolswgrant: ok ta11:03
wgrantbigjools: You can configure it, however.11:03
stubwgrant: If you are looking for suggestions, map server names to meaningful Launchpad terminology (cronscripts, appservers, buildd-manager etc.)11:03
wgrantbigjools: And rabbitfixture can be given a list of plugins to whitelist.11:03
bigjoolswgrant: it's a blocker for that test fix you had11:03
rvbawgrant: how can I enable it again (if I shutdown the machine's instance)?11:04
nigelbjtv: ah, can you land that MP? (want a link?)11:04
wgrantbigjools: http://www.rabbitmq.com/management.html describes how to configure the port.11:04
stubjtv: So does being able to get the connection status help us?11:04
bigjoolswgrant: thanks11:04
rvbawgrant: tweaking rabbitfixture I guess.11:05
jtvstub: don't know, really -- set_session certainly doesn't seem to.11:05
wgrantrvba: Actually, I may never have landed the whitelisting support. For now you can just remove the RABBITMQ_PLUGINS_DIR fixture from rabbitfixture.11:06
stubjtv: I guess it is pretty much the same just trying the reset and if it fails with a db error abort the transaction and reset11:06
rvbawgrant: okay, thanks.11:06
stubjtv: connection.status is cleaner, but need to poke into Storm internals to get the psycopg2 connection11:06
jtvstub: I think one of the bigger problems is nested commits.11:06
stubWhy?11:07
jtvThings get a bit complex for my liking if we try to do this without transaction boundaries:11:07
jtvset policy11:07
jtvregister hook to repeat setting policy for next transaction11:07
jtvon exit:11:08
jtvreset policy11:08
jtvhandle failure if any11:08
jtvunregister hook11:08
stubcontext manager does set session read_only, which persists over transaction boundaries. On exit, resets with set session read_only again.11:08
jtvDoesn't work with nested commits.11:09
stubWhy not?11:09
stuboh... set session might not work inside a transaction...11:10
jtvWell according to the psycopg2 docs it doesn't, but even assuming that it does, there is some transaction weirdness there.11:10
stubI'm looking at the pg docs, and 'set session' inside a transaction block rolls back with the transaction11:11
jtvRight.11:11
jtvI think that was the weirdness that was bothering me: persists across transactions but rolls back with the transaction it's in.11:12
jtvMade it hard for libpqxx.  :)11:12
cjwatsonbigjools: not really sure exactly what to look at, but it looks ok from a preliminary glance11:12
cjwatsonbigjools: shouldn't https://dogfood.launchpad.net/ubuntu/+source/man-db have p-series somewhere?11:12
cjwatsonbigjools: or is that pending a publisher run?11:12
bigjoolsyeah pending publishing, and the series needs to be frozen11:12
bigjoolscjwatson: what checks do you normally make?11:13
wgrantIt's not pending publishing.11:13
stubjtv: "A special case is    SET followed by SET LOCAL within    a single transaction: the SET LOCAL value will be    seen until the end of the transaction, but afterwards (if the transaction    is committed) the SET value will take effect.   "11:13
wgrantIt's just because the series is Future.11:13
cjwatsonI guess it would be interesting to try an initial publisher run on df and run compare-archives between oneiric and p-series11:13
wgrantSo it doesn't show up on DSP:+index.11:13
wgranthttps://dogfood.launchpad.net/ubuntu/+source/man-db/+publishinghistory11:13
cjwatsoncompare-archives being http://paste.ubuntu.com/698441/11:13
wgrantcjwatson: Can't really do that on DF without spending 1.5 days publishing oneiric first :/11:13
stubjtv: bah... but not rollback :-P11:13
cjwatsonwgrant: oh dear11:13
bigjoolscjwatson: that'd help if we already had all of oneiric published on DF :)11:13
jtvstub: not relevant, I hope -- "set transaction" is separate to "set" and inherently transaction-local.11:14
wgrantcjwatson, bigjools: Or we could just debmirror in a few minutes...11:14
wgrantLet's do that.11:14
cjwatsonthe interesting changes to initialisation were in things like copying custom uploads around, I thought11:14
bigjoolsdisk space might be an issue11:14
cjwatsonso that seems more interesting to check if we want to dry-run init11:14
wgrantbigjools: Not for one series and four archs of oneiric.11:14
bigjoolsshurg11:14
bigjoolsand shrug11:14
jtvstub: I hope this illustrates why I (1) went with commits here and (2) didn't buy the primary use case for python context managers.  :)11:14
cjwatsonshurg sounds like a star wars monster11:15
bigjools:)11:15
jtvwgrant: oneiric _is_ a series11:15
wgrantShh11:15
* jtv shhes11:15
bigjoolscjwatson: yeah copying custom AND auto-initialisation of all pockets on the first run11:15
bigjoolsI shall do a publication11:16
bigjoolswgrant: you probably know more about debmirror than me, you can either do it or I can take monkey instructions11:16
wgrantbigjools: It's pretty trivial to use, with the minor issue that it's probably not installed on mawson.11:17
stubjtv: file:///usr/share/doc/postgresql-doc-8.4/html/sql-set-transaction.html , so 'set transaction' is the current transaction and 'set session characteristics as transaction' is future transactions. I don't know if the latter rollsback.11:17
jtvstub: interestingly, "set transaction" can switch back and forth during a transaction.  I remembered it as working only at the beginning of one.11:17
stubjtv: The docs make you think that, but they are describing the isolation level.11:18
jtvYou can happily commit a transaction with changes that is currently "set transaction"ed as read-only.11:18
* jtv looks up the docs11:18
stubset transaction to set the isolation level has to happen at the start. read only/read write is apparently allowed anywhere.11:19
jtvah11:20
stubbah.... it rollsback too11:20
stubCan't seem to set state inside a transaction that survives a rollback11:20
stubWhich would normally be a good thing.11:20
jtvWell IIRC there is one exception to that:11:21
jtvprepared statements.11:21
jtvOr maybe what upset me at the time was that they did roll back... forget now.  :)11:21
stubohh... nasty idea.11:21
stubnm... pointless nasty idea involving temporary tables.11:22
jtvOh give it up.  :)11:22
stubI don't see much use to this as it stands though, because issuing implicit commits is making our problem worse I think.11:22
stubAnd the work around is ugly and painful involving hooking into the transaction machinery11:23
cjwatsonwgrant: but OTOH it is a fairly self-contained script11:23
stubjtv: Its pretty much like @write_transaction11:24
jtvstub: I don't see how.  Same arguments as for read_transaction.11:25
wgrantcjwatson: It is.11:25
wgrantWell, it was.11:25
wgrantIt may have done an sbuild and turned into a horrid Perl module mess since I last looked :)11:25
stubjtv: Yes, and we are not using read_transaction because of this behaviour, and the proposed solution also has this behaviour.11:25
jtvstub: read_transaction/write_transaction are half-hearted about it.  At least what I've got here enforces the read-only property and supports nesting.11:26
jtv(Also, read_transaction/write_transaction could easily make a horrible mess if they have to retry ongoing transactions, AFAICS)11:27
stubjtv: Not sure if we want to support nesting though unless we also break commit/rollback11:27
jtvI hate the implicit commits, but...11:27
jtvFor what I'm doing, yes, nesting would be very useful.11:28
jtvIt's basically a complex, multi-function version of the second example I gave in the docstring.11:28
stubjtv: Implicit commits can lead to corruption and data loss. Can we work with an implicit rollback?11:29
cjwatsonwgrant: no, I believe it's still pretty self-contained11:29
jtvstub: could you elaborate?11:30
stubScattering new commits randomly around the codebase is dangerous as you end up committing things you were hoping to rollback. Even if you are careful, the next person might not be. Scattering new rollbacks randomly around the codebase is safer (but still not 'safe' as we might be dealing with non-db resources too).11:31
stubThe problems with 'try: reset(): except psyocpg2.Error: abort(), reset()' also affect the current implementation don't they?11:33
jtvJust that one, AFAICS, and that's about the easiest problem we have here.11:34
stubIf code inside the policy issues commits or rollbacks, the policy is no longer in effect.11:34
jtvNot in my code.11:34
jtvSee the documentation & tests.11:34
wgrantPerhaps you want a decorator that monkeypatches out transaction.commit and transaction.abort.11:34
jtvgo play outside!11:35
stubjtv: You only test it survives commit, not rollback11:35
jtvstub: You're preaching to the choir as far as implicit commits are concerned, but I'd much rather have well-defined transaction boundaries on this (with another curse in the direction of G. v. Rossum on this topic) than something that's complicated to follow.11:35
jtvstub: I can add a test case for that; won't affect the code.11:36
stubjtv: How will it work? Rollback rolls back the SET11:37
jtvstub: actually, I do test that case.11:37
stubIf it works, the other solution works too11:37
jtvIt's the very last test in the test case.11:37
jtvNo, because my present solution can commit the SET.  :)11:37
jtv"test_policy_survives_abort": "Even after aborting the initial transaction, a transaction policy still applies."11:38
jtvThe point is to get well-defined behaviour.11:38
stubSo we have two implicit commits11:38
stubI really don't see how this can be used safely.11:39
stubHmm11:39
jtvThere is one small tweak that could make it more palatable: abort at the end, rather than committing.11:40
stubThe implicit commit at the start is the same.11:40
stubYou might as well just put the connection into autocommit mode.11:41
jtvNot the same.  You have an explicit statement there doing stuff with the database.11:41
jtvAt least there you can read it and think "this will do something to the database."11:41
jtvExit is the really nasty part.11:41
stub__enter__ would need to 'transaction.abort(); set' and __exit__ would need to 'transaction.abort(); set'11:41
jtv(See my line of reasoning against python context handlers as transaction managers at the time)11:41
stubSorry... __enter__ transaction.abort(); set; commit()11:42
jtvWhat I tried to do, and couldn't make work unfortunately, was ensure that if a transaction is ongoing, it's "blank"11:42
jtv(in the sense of what SET TRANSACTION <isolation level> would accept)11:42
jtvIf we can query a connection's transaction state, we could require an explicit commit/abort just prior to the context.11:43
stubThat might be connection.status == TRANSACTION_STATUS_IDLE11:43
jtvYeah.11:43
jtvOr get_transaction_status.11:44
jtvI believe connection.status returns a different enum.11:45
stubI think they are the same thing, just different spelling11:45
stuboh... different enums11:45
jtvAn initial implicit commit becomes a lot more palatable if we can check that no transaction is ongoing.11:46
jtvBasically, who's going to notice an extra commit in that case?11:46
stubjtv: yes, that is fine.11:47
jtvWe can turn the implicit final commit into an abort, raising a resolute middle finger to the whole context-manager design process.11:47
jtvOr better yet!11:47
stubjtv: And I think that helps solve the original problems.11:47
jtv"if exiting normally, assert that no transaction is ongoing."11:47
stubYup. 'This chunk of code is called without an ongoing transaction and will commit or abort'11:48
jtvThat's what I really wanted, but couldn't find the supporting API to implement.11:48
jtvAnd when you exit, it had better be either with an exception or after you have cleared out any open transactions.11:48
stubNesting means a commit or abort would have to happen before the nesting happens, which is also good I suspect.11:48
jtvYes, that's expected.11:49
stubI think this design is no longer dangerous and helpful.11:50
jtvCould you disambiguate that with some parentheses?11:50
stub(no longer dangerous) and helpful11:51
jtvPhew.  Thanks.11:51
jtvstub: I can create a new exception type for "transaction still open," but do you happen to know of one I could reuse?11:55
stubRuntimeError ?11:55
stubI can't think of anything suitable that already exists11:55
jtvIsn't really a runtime error; more like a logic error.11:55
jtvI'll just create a new exception class then.11:56
stubYer... just subclass Exception I guess11:56
jtvBut now I need to leave!11:56
stubNight11:57
jtvstub: oh, and: read-only doesn't need an explicit commit really, does it?11:57
stubjtv: it does if you want it to persist over multiple transactions, especially if you hit code protected by the @read_transaction decorator.11:58
jtvI mean it would be safe to commit a read-only transaction implicitly at the end of the policy.11:59
stubflush first11:59
jtvOf course.11:59
jtvOr wait, not on commit.11:59
jtvOn aborting a read-only one, flush.11:59
jtv(I had that in an earlier iteration)11:59
jtvI think abort is probably needlessly expensive for a read-only transaction.12:00
stubIf you are in read only mode, abort or commit doesn't matter. You want to flush anyway, so ensure any exceptions that should be raised are raised.12:00
jtvExactly.12:01
stubFor read only mode, you can go with flush, abort, set, commit in the __exit__12:02
stubSorry. flush, confirm status, abort, set commit12:02
jtvWasn't abort horribly expensive?12:02
stubSame for read write, since the inside is supposed to have committed or aborted already12:02
stubI don't know if abort is more expensive than commit.12:03
stubI suspect not if there are no changes, which there shouldn't be.12:03
jtvWhat I mean is, we don't need to require an explicit commit/abort for a read-only transaction.12:03
jtvFor a read-write transaction, you want an explicit commit at the end of a successful run.12:04
jtvFor a read-only transaction, why bother?12:04
stubpoint12:04
jtvThen again, it does keep the bracketing explicit.12:04
jtvI mean, having a transaction.commit() at the end of the policy's code region keeps bracketing explicit.12:05
stubSo with read_only: stuff followed by with read_write: stuff, the second block would fail because we are already in a transaction12:05
jtvNo, because the un-setting of the policy does need a commit.12:06
jtv(Which is implicit).12:06
stuboic12:06
stubAnyway, basic behavior of '__enter__ confirms no transaction in progress and sets persistent state' and '__exit__ confirms no transaction in progress and resets persistent state' is fine. And 'persistent state' means set followed by commit.12:08
stubjtv: But you were leaving12:08
jtvTrying to anyway.  :)12:08
jtvThe main tests are written & documented; can implement tomorrow.12:09
stubyup.12:09
jtvThanks!12:09
stubI just hope connection.status or connection.get_transaction_status() does what we need :-)12:10
=== jtv is now known as jtv-afk
allenapStevenK, danilos: Could either of you do a short review for me? https://code.launchpad.net/~allenap/launchpad/silence-amqplib-logger/+merge/7731012:27
danilosallenap, I have a call in a few minutes, I'll pick it up after the call if it's still there :)12:28
allenapdanilos: Ta.12:28
=== almaisan-away is now known as al-maisan
danilosallenap, r=me, thanks for fixing this :)12:46
nigelbdanilos: Hey, could you land something for me? Its already approved for db-devel.12:47
allenapdanilos: Thanks!12:50
danilosnigelb, sure, though if it's the same thing benji was on a few days ago, I think he might get it sorted for you today :)12:51
nigelbdanilos: Its another one :)12:54
nigelbhttps://code.launchpad.net/~nigelbabu/launchpad/kill-statusexplanation-field-forever/+merge/7727312:55
deryckMorning, all.12:58
danilosnigelb, sure thing then12:59
nigelbdanilos: Thanks!13:05
nigelbSo, instead of one db patch, I'm landing 2 db patches in one day :)13:06
danilosnigelb, it probably means we'll have to serialize and roll one-by-one to production on consecutive days, but we'll see emails from people who do the rollout on the list :)13:08
nigelbdanilos: heh :)13:10
deryckadeuring, abentley -- let's hold off on standup for 10 minutes. compiling some stuff to send you both that we need to chat about.13:28
adeuringderyck: ok13:28
abentleyderyck: ack.13:28
deryckabentley, ready when you are.13:41
=== al-maisan is now known as almaisan-away
deryckabentley, don't hear you.13:41
abentleyderyck: same here.13:42
deryckabentley, we heard you then13:42
stubgary_poster: Here yet? http://paste.ubuntu.com/698496/13:47
gary_posterstub, hi, yes.  I was going to try to fiddle with what your email said.  reading pastebin...13:48
stubgary_poster: So the first test passes, although I'm not sure if that is a good thing13:48
gary_posterheh13:48
stubgary_poster: The second test demonstrates a case we are not handling13:48
stubgary_poster: an OperationalError is raised if the Store is attempting to connect for the first time and the server isn't there.13:49
stubWhich I guess is technically correct, as you can't disconnect unless you have previously managed to connect...13:49
gary_posterstub: for first test, what did you change to get things fixed (I see change in 23-29 but that is more tests, not a change to get things to pass)13:50
stubThis would be the 'appserver bounced while the db is down' situation. We don't have to handle it this branch if you don't want to.13:50
gary_posterstub, ack for second test, thinking.13:51
gary_posterstub, won't we want to register a similar/identical view for OperationalError then?13:52
gary_posterThat seems reasonable on the face of it13:52
stubgary_poster: Yes. We might see operational error in other more serious cases (like disk full), but 503 would be acceptable behaviour I think.13:52
gary_posterok stub.  I can do that easily enough.13:53
gary_posterstub, what am I missing from the first test though (test_error_view_integration)--did you initially dupe the problem I reported, and then fix it somehow?13:53
stubgary_poster: Yes. If you move the 'use_fixture' to before you register the wsgi stuff it explodes like you found.13:54
gary_posterAh!13:54
stubI don't see why it should do that. It worries me.13:54
gary_posterhow odd13:55
gary_posteryeah13:55
gary_posterok, stub, thank you very much!  This helps a lot.  I'll proceed and ignore the worry myself unless you suggest otherwise.13:56
deryckadeuring, abentley -- ready on Skype when you guys are.13:58
abentleyderyck: on.13:59
deryckabentley, you're showing offline for me and can't dial you.14:00
abentleyderyck: 2 different versions of Skype hate me.14:01
deryckheh.14:02
deryckabentley, shall I try the regular number?14:02
=== aalex-sat is now known as aalex
flacosteman, wadllib API sucks14:40
flacostei've never seen such a convulated API14:40
flacosteand i probably reviewed some of it... *sigh*14:40
nigelbHistoric moment of self realization? :)14:42
cr3hi folks, has there been any interest in running launchpad with pypy to potentially improve performance?14:46
benjiAPIs (like code) don't age well14:46
cr3benji: I don't think many things age well, even in nature things just die and are born again :(14:48
benjicr3: there's certainly interest but there are (at least) two negatives: we have lots of dependencies that don't work with pypy and LP isn't especially CPU bound (as far as I know)14:48
benjicr3: true, but we often think of digital (mathematical) constructs being immune from aging (like, say, Dijkstra's algorithm); IMO, code and APIs don't age well because we know more now than we did when we created them14:50
cr3benji: same might apply to mathematics as well, consider hilbert threw a wrench in euclidian space. same reason as you mention though, "we know more now..."14:52
cr3axioms change, just like in code, which breaks everything built on top of them14:52
cr3apache had a great axiom of pre-forking but then we found that asynchronous sockets might be preferable in lots of cases14:54
benjithis is true; I guess we need to embrace refactoring like Turritopsis nutricula (http://en.wikipedia.org/wiki/Turritopsis_nutricula)14:56
cr3benji: to keep the analogy, I wonder what would be the equivalent for code to return in a polyp state... stable release? :)15:03
benjicr3: I was thinking more like a rewrite of a chunk of code such that it still performs its essential functions while shedding accumulated, non-essential functionality15:05
cr3benji: I've always had difficulty with rewrites which others have most likely felt as well: people usually expect the same functionalities as before, sometimes even the quirky ones!15:07
cr3benji: the problem is more about managing expectations than a technological one15:07
benjicr3: indeed15:08
benjiI aspire to be minimalist, especially with code, and one of my mantras is "do less".15:09
cr3benji: ironically, I've seen the amount of code I write increases with experience because I happen to know more about doing things right which is usually more verbose :(15:14
jcsackettsinzui: are you up for some mumbling?15:18
sinzuibarely. I am ill and struggling to fix the broken test suite.15:18
sinzuiI will start mumble in a few minutes when I get control of my computer15:19
jcsackettsinzui: sure. no worries.15:21
gary_posterstub, fwiw, I couldn't dupe your solution for the first test by rearranging the lines--I had made some name changes but it was otherwise identical.  So, I'm thinking that solution may be to fragile to pursue after all.  I've tried the three request solution (primary, secondary, clear) but that caused errors for subsequent tests (the ProgrammingError showed up for them).  I've tried reconnect_stores() and helps me dupe15:27
gary_poster't let me do a DisconnectError.15:27
gary_posterSo, I'll dig in some more and send you an email at my EOD if I still don't have a solution15:27
stubgary_poster: garh15:31
stubgary_poster: Have you got anything more verbose out of that ProgrammingError?15:31
gary_posterno, stub.  no.  any hints on how to get more?15:32
stubJust wondering if our reporting is not outputting the informative string in the exception, or we are somehow getting a ProgrammingError('')15:32
gary_posterstub, I can instrument closer to the error15:33
gary_posterI'll check it out15:33
stubI can have a further poke tomorrow anyway at the underlying issues, but can't see how it is possible to get a ProgrammingError if the database is inaccessible, nor how to get one that only triggers when the PGBouncerFixture is loaded but not being connected through.15:34
gary_posterstub, it actually happens in one of my tracebacks in a rollback15:35
gary_posterthanks stub15:35
stubgary_poster: might be an untested codepath then? ProgrammingError means SQL syntax error, or attempting to access a table that doesn't exist or you have no permissions on, or something like that.15:36
gary_posterhm...I saw the pgbouncer sets up security15:36
gary_posterbut I didn't know enough about the details to have an opinion or thought about it15:37
gary_posterthe pgbouncer fixture, I should say15:37
stubpossibly, if it is attempting to connect as some user not defined in security.cfg15:38
stubor the default user (your unix username)15:38
gary_posterstub, where the "it" attempting to connect is LP here, I guess?  the bouncer itself is dead by the time we get the programming error, according to the bouncerlogs I looked at yesterday...15:40
gary_posterOK, I got more SQL than I shake a stick at...wading through...15:41
gary_posterhm, going to try that again with more info about whether there was an error...15:43
gary_posteryeah, SELECT getlocalnodeid() is the only interesting one15:47
gary_posterum15:47
* gary_poster goes to take a break :-P15:47
=== abentley changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | On call reviewer: StevenK, danilos, abentley | Critical bugs: 261 - 0:[########*** stack smashing detected ***: ./lp terminated
=== beuno is now known as beuno-lunch
=== beuno-lunch is now known as beuno
=== deryck is now known as deryck[lunch]
=== deryck[lunch] is now known as deryck
lifelessmorning18:53
nigelbMorning lifeless18:56
nigelbbenji: Hey, just checking if you were able to sort out your ec2 land troubles18:57
nigelbAlso, \o/ my first db-devel patch landed18:57
lifelessnigelb: second surely?18:58
benjinigelb: I just now got evidence that it's working for me again.  I'll resubmit your branch within the hour.  (If you can easily remind me which one it is, that would be appreciated.)18:58
nigelblifeless: second one is one the way :D18:58
nigelbbenji: https://code.launchpad.net/~nigelbabu/launchpad/create-description-5283/+merge/7681818:58
lifelessnigelb: wasn't the first 2 weeks back ?18:58
nigelblifeless: well, that got reverted.18:59
lifelessright18:59
nigelbI just un-reverted it.18:59
lifelessstill count s:P18:59
nigelbha!18:59
benjiI just got the same failure on two ec2 runs of different branches: http://paste.ubuntu.com/698675/. I can't reproduce the failure locally.  Anyone seen this?19:26
benjinigelb: bad news, conflicts: http://paste.ubuntu.com/698689/19:38
tedgHello, I'm looking for where in the LP codebase the bugzilla sync code is.19:43
tedgCould someone give me a pointer?19:43
lifelessat a guess, lib/lp/bugs/ somewhere. I'd do a 'find . -name "*bugz*"19:45
tedglifeless, Are bugz, the new hip bugs?  ;-)19:46
tedgHeh, I just got an timeout oops browsing the LP source code ;-)19:47
lifelessyeah, loggerhead still needs a performance love-in19:50
tedglifeless, Okay, found what I was looking for.  Thanks!20:07
=== abentley changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | On call reviewer: - | Critical bugs: 261 - 0:[########*** stack smashing detected ***: ./lp terminated
* mwhudson wonders, could ~launchpad-reviewers be set as the reviewer team for lp:txlongpoll?21:03
mwhudsonoh it is21:03
mwhudsonthen could ~lazr-developers _not_ be subscribed to all code review mail?21:03
mwhudsoner, failures in lib/lp/bugs/doc/initial-bug-contacts.txt -- not my fault?21:04
mwhudsonmaybe not21:05
mwhudsonbug 86151021:06
_mup_Bug #861510: XMLRPCTestTransport is not torn down properly <test-system> <Launchpad itself:Triaged> < https://launchpad.net/bugs/861510 >21:06
_thumper_wallyworld_: ping21:18
=== _thumper_ is now known as thumper
mwhudsonok, bug 861510 is very very screwed21:36
_mup_Bug #861510: XMLRPCTestTransport is not torn down properly <test-system> <Launchpad itself:Triaged> < https://launchpad.net/bugs/861510 >21:36
mwhudsonarughjkfsdafdaslkjhfalsdkjfh21:58
mwhudsonomg omg22:04
lifelessmwhudson: cats?22:08
mwhudsonlifeless: no22:08
mwhudsonlifeless: thread locals22:08
mwhudsonmuch more terrifying22:08
lifelessrather like regexes22:08
mwhudsonlifeless: looking at22:09
mwhudson<mwhudson> lifeless: no22:09
mwhudsonargh22:09
mwhudsonhttps://bugs.launchpad.net/launchpad/+bug/86151022:09
_mup_Bug #861510: XMLRPCTestTransport is not torn down properly <test-system> <Launchpad itself:Triaged> < https://launchpad.net/bugs/861510 >22:09
lifelessyeah22:09
lifelessI saw it go past, decided to err on the side of sanity and close my eyes ;(22:09
mwhudsoni don't get all the details22:09
mwhudsonbut the problem is that doing the XMLRPCTestTransport thing ends up calling set_permit_timeout_from_features(True)22:10
mwhudsonand then everything else goes wrong22:10
mwhudsonlifeless: in general i am becoming more of the opinion that all 'global-ish' things in launchpad should be explicitly tied to the request/participation22:33
mwhudsonand using thread locals is just a recipe for confusiong22:34
mwhudson(mostly confusion in test suites rather than real code)22:34
mwhudsonof course the interaction is a thread-local, but there's only one of it and we're in general _reasonably_ good about keeping its state in check22:35
lifelessmwhudson: IIRC we were both of that opinion, and firmly so, when I filed that bug about scripts and participations :)22:36
mwhudsonyeah22:36
mwhudsoni guess i'm even more of it now :)22:36
mwhudsonlifeless: i think i hadn't realised how bad having lots of thread locals is22:36
lifelessand its viral22:37
lifelessonce you have one its hard to not have another22:37
mwhudsoni'd say it's more like when you have _two_ it's hard not to have another22:42
mwhudsoni think it would be possibly to have one thread local to rule them all22:42
lifelessmmm22:45
mwhudsonhttps://bugs.launchpad.net/launchpad/+bug/861510/comments/322:45
_mup_Bug #861510: XMLRPCTestTransport is not torn down properly <test-system> <Launchpad itself:Triaged> < https://launchpad.net/bugs/861510 >22:45
lifelessI don't think 2 drives three more than 1 drives 2, TBH22:45
wallyworld_jcsackett: hi22:49
wallyworld_thumper: hi22:52
thumperwallyworld_: hi22:52
thumperwallyworld_: how's tricks?22:52
wallyworld_how goes it?22:52
wallyworld_busy22:52
wallyworld_doing some mockups for disclosure, lots of javascript22:52
wallyworld_finished improving pickers22:52
thumpercool22:53
thumperI have a minor feature request22:53
wallyworld_how's dx?22:53
thumper:)22:53
wallyworld_sure22:53
thumperwhen we attach diffs to outgoing code review and branch emails22:53
thumpercan we utf-8 encode plz?22:53
wallyworld_sure, can't see why not22:53
thumperwe have people with weird names committing or .po file stuff et al22:54
wallyworld_not surprised :-)22:54
thumperdx is interesting22:55
thumperso so much going on22:55
thumperalmost scarey22:55
wallyworld_good stuff?22:55
wallyworld_i guess you are focused on squashing the last few oneiric bugs22:56
wgrantThere's two weeks to go! Not the final stretch yet.22:58
wgrantStill got another 10 FF violations to land, probably :P22:58
thumperwallyworld_: final cut for upload is today23:00
wallyworld_thumper: does it fix the stacking issues?23:00
thumperwallyworld_: the rest of the bug fixes are going in as distro patches :)23:00
thumperwallyworld_: almost all of them are fixed23:01
wallyworld_\o/23:01
thumperwallyworld_: apparently there are still and edge case or two out there23:01
wallyworld_been driving me crazy23:01
thumperthe big problem is it needs a fundamental refactoring to compiz internals23:01
wallyworld_thumper: my main other gripe is with the global menu behaviour, but you know that :-)23:01
thumperX sucks23:01
wallyworld_yep23:01
thumperyeah... I know that23:01
wallyworld_i'm fining it's taking more mouse clicks to do what i want :-(23:02
wallyworld_oh well23:02
wgrantwallyworld_: I'm guessing there's no standup today?23:03
wallyworld_wgrant: don't know?23:03
wgrantGiven sinzui's email.23:03
wallyworld_i was hoping to catch up with jcsackett briefly23:04
wallyworld_wgrant: if there's nothing in particular to discuss, we can skip it23:05
wallyworld_thumper: do you know if "Show Desktop" on the launcher is broken? well it is for me23:43
wgrantDoes that still exist?23:43
wallyworld_on mine it does23:43
wgrantMaybe I just removed it and forgot...23:43
wallyworld_i updated just now and its icon has changed but it still doesn't work23:44
* wallyworld_ has to go run an errand23:47
pooliehi all23:57

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