/srv/irclogs.ubuntu.com/2010/10/17/#launchpad-dev.txt

wgrantNight.00:00
wgrantlifeless: Could you please send both the branches on https://code.edge.launchpad.net/~wgrant/launchpad/+activereviews off to ec2?00:01
lifelessnight jml00:03
lifelesswgrant: url me up00:03
wgrantlifeless: https://code.edge.launchpad.net/~wgrant/launchpad/bug-661109-buildable-architectures/+merge/38529 and https://code.edge.launchpad.net/~wgrant/launchpad/publisher-release-cleanup/+merge/3853000:04
lifelessany special flags?00:07
wgrantlifeless: The latter is incremental but has a bug of its own, so probably not.00:08
wgrantOh, hm, the bug might not be linked.00:08
wgrantIt is.00:09
lifelessfirst one is spinning up now00:10
lifeless00:11
lifelessTraceback (most recent call last):00:11
lifeless  File "bin/test", line 73, in <module>00:11
lifeless    assert os.environ['STORM_CEXTENSIONS'] == '1'00:11
lifeless  File "/usr/lib/python2.6/UserDict.py", line 22, in __getitem__00:11
lifeless    raise KeyError(key)00:11
lifelessKeyError: 'STORM_CEXTENSIONS'00:11
lifelessfunky00:12
lifeless9fixed)00:12
lifeless-ugh-00:14
lifeless  File "/home/robertc/launchpad/lp-branches/working/lib/canonical/ftests/pgsql.py", line 263, in tearDown00:14
lifeless    self.dropDb()00:14
lifeless  File "/home/robertc/launchpad/lp-branches/working/lib/canonical/ftests/pgsql.py", line 321, in dropDb00:14
lifeless    cur.execute('VACUUM pg_catalog.pg_shdepend')00:14
lifeless  File "/home/robertc/launchpad/lp-branches/working/lib/canonical/ftests/pgsql.py", line 108, in execute00:14
lifeless    return self.real_cursor.execute(*args, **kwargs)00:14
lifelesspsycopg2.InternalError: right sibling's left-link doesn't match: block 260 links to 259 instead of expected 314 in index "pg_shdepend_depender_index"00:15
wgrant... pardon?00:15
wgrantThat's a new one.00:15
lifelessdata corruption in pg00:15
wgrantLooks like it.00:16
wgrantlifeless: Both branches are running reasonably happily now?00:18
lifelessjust started second one00:27
wgrantThanks.00:28
lifelessand my pg is repaired.00:31
wgrantBy recreating everything?00:32
lifelessno00:32
lifelessyou reindex pg_catalog.pg_shdepend in single user mode00:32
wgrantAh.00:33
lifelessI had to lookup how to do single user mode in 8.400:33
lifelesscommand line changed :)00:33
* wgrant cleans up the next 6 branches.00:40
LPCIBotProject devel build (120): STILL FAILING in 1 hr 33 min: https://hudson.wedontsleep.org/job/devel/120/01:10
lifelesswgrant: hey02:02
lifelesshttp://dev.launchpad.net/Contributions?action=diff&rev1=306&rev2=30702:03
lifelesslists jcsackett as outside the lp team02:03
lifelessthis is bogus ;)02:03
LPCIBotProject db-devel build (74): STILL FAILING in 4 hr 10 min: https://hudson.wedontsleep.org/job/db-devel/74/02:03
lifelesslikewise danilo, ian booth, and benji02:03
wgrantlifeless: Yeah, and a few others.02:04
* wgrant fixes.02:04
lifelessthanks02:06
lifelesswgrant: is the script in the lp tree, that does that ?02:10
wgrantlifeless: utilities/community-contributions.py02:10
wgrant(kfogel used to run it on a cron job, but that obviously doesn't happen any more.)02:11
lifelessoh, we should do that02:16
lifelessshould be easy to put it in a service account on dosium02:17
wgrantlifeless: All looks reasonably sane now.02:24
wgrantMissed one.02:27
wgrantCurses.02:27
lifeless:>02:33
lifelessthe sweet sound of deleted code vanishing02:46
wgrantWhat are you eliminating?02:47
lifelessftests.harness02:47
wgrantAha.02:47
lifelessI didn't mean to02:47
lifelessbut I needed to make LaunchpadTestSetup be used as an instance not a magical stateless beasite02:48
lifelessand in the course of that I found only one user each of its subclasses02:50
lifelesswith those gone it was trivial to do stub's XXX and move LTS to layers.py02:50
wgrantHeh.02:52
wgrantlifeless: Thanks. Will you lp-land it?02:54
lifelessalready spinning up02:59
lifelessmy databasefixture branch (pushing now) has the cleanup I mentioned03:00
lifelesspushed03:01
lifeless 10 files changed, 106 insertions(+), 296 deletions(-)03:02
wgrantYay, both succeeded.04:28
wgrantlifeless: Thanks.04:28
StevenKYou mean something actually passed ec2?04:30
StevenKDear ohloh, import faster.04:31
StevenKIt's doing 10k every 12 hours or so.04:31
wgrantStevenK: It was sitting in a queue for most of yesterday.04:32
wgrantIt took more than a month the first time, but I think their bzr importer is better now.04:32
StevenKStep 2 of 3: Importing source code into database (Running 31872/90554)04:32
StevenKIt has another 4 days, by my hand-wavy estimate.04:32
wgrantderyck is still beating me by a few revs :(04:32
wgrantAnd then I have to defeat henning to make it onto page 3.04:33
StevenKI've lost count of mine04:33
wgrantIt's going to be hard to rise above jml, I fear.04:33
StevenKYes, but jml has been inactive for a while.04:34
lifelessare both of these ignorable ?04:35
wgrantAh, I will pull ahead of deryck in about 10 minutes :P04:35
lifelesslp.soyuz.windmill.tests.test_archive_packages.TestArchivePackagesSourcesExtra.test_sources_extra_available04:35
lifelessand04:35
lifelesslp.translations.windmill.tests.test_documentation_links.DocumentationLinksTest.test_documentation_links04:35
wgrantlifeless: The latter I haven't seen before.04:35
lifeless[<Thread(Thread-74, started daemon 47049195071248)>]04:35
lifeless[<Thread(Thread-183, started daemon 47678012303120)>]04:35
wgrantBut the former has been happening for ages.04:35
lifelessis it 'retoss at ec2'04:36
StevenKThat's the same symptom as the leak I fixed.04:36
lifelessor direct to pqm time ?04:36
wgrantlifeless: Which branch?04:36
lifelessbzr+ssh://bazaar.launchpad.net/~lifeless/launchpad/paralleltest04:36
lifelessbzr+ssh://bazaar.launchpad.net/~lifeless/launchpad/paralleltests04:36
wgrantThe first one is ignorable. I'd also be ignoring the second one, depending on what you changed.04:36
StevenKBut I'm bloody stumped if I want to print thread counts during every windmill test.04:36
wgrantMmm. Not sure.04:36
lifelessI added a file04:36
lifelesswhich nothing calls04:37
lifelessand has a few unit tests of its own04:37
lifelessand I bumped the fixtures dep04:37
wgrantI'd run it again for safety, personally.04:39
StevenKlifeless: Keep in mind that Hudson {db-,}devel tests fail with similar errors.04:39
* StevenK needs to pester mars again.04:39
wgrantbut I haven't seen the test_documentation_links one before.04:39
StevenKwgrant: Go back through Hudson's history -- they keep changing.04:40
StevenKtest_worker was the only constant for a while.04:40
wgrantCome on PQM... work faster.04:41
wgrantHow does it take half an hour to merge?04:42
StevenKI've been wondering that myself.04:42
lifelessbzr branch04:42
StevenKWhy doesn't it just merge directly from the remote branch?04:42
lifelessits how long its taking to do a full clone04:42
lifelessStevenK: because it runs the precommit checks in a chroot, assuming maximum hostility from the submitter04:43
StevenKYes, but we're only hostile towards PQM, not trunk.04:43
lifelessI can think of a few ways to address it, including 'allow merges to fuck the repository'04:44
lifelessbut you asked why. thats why.04:44
lifelessif the precommit checks didn't call bzr at all (which they certainly used to) we could use a lightweight checkout04:45
StevenKlifeless: Out of curosity, what are the pre-commit checks doing? Just 'make'?04:46
wgrantI presume it's no longer test_on_merge.py.04:46
lifelessI don't have access to the pqm both these days (haven't for years)04:47
lifelessso I can't answer that04:48
StevenKlifeless: Okay, so what did it used to run?04:48
StevenKIdle curosity is all, so I'm not after a definite answer.04:48
wgrantYay, PQM loves me.04:49
lifelesswell it used to do check-on-merge, uhm04:49
lifelessit ran the tests obviously04:49
lifelessbut also checked lint for the commit, which needed a diff, which needs bzr history04:49
lifelessanother way we might be able to structure it is a http heavyweight checkout of the target branch with/stacked local branch stacked on the target.04:50
wgrantlifeless: :( you added code to canonical.*06:09
lifelesswgrant: and?06:15
lifelesswgrant: I know that there's this big goal to nuke it06:15
lifelessbut I have very limited coding time.06:15
lifelessShould I a):06:15
lifeless make the test suite 16 times faster06:15
lifelessor b)06:15
lifeless move some code around to no practice difference06:15
lifelesswgrant: or are you referring to testing.parallel? I guess that could be in lp.services.testing or wherever06:16
wgrantlifeless: testing.parallel, yeah.06:17
wgrantAltering existing code in there is fine IMO. But adding a new file there is probably bad.06:17
lifelessshrug06:20
lifelesscan move it later06:20
lifelessideally that wouldn't exist at all, but I haven't had time to work on testrepository recently, nor am I sure that everyone uses testr06:20
lifeless\o/ unique db names06:29
wgrantNice!06:32
wgrantI will be very interested to see how this performs.06:32
lifelessnow, I need to glue the unique db names up to the config system06:34
lifelessin process and out of process06:34
wgrantOh urrgh.06:37
wgrantOut of process... hm...06:37
lifelessin process should be easy once I figure out what layer the idiotic configs are read in06:38
lifelesshmm06:46
lifelesswhups06:47
lifeless launchpad_ftest            | robertc  | UTF8     | C         | C     |06:47
lifeless launchpad_ftest_1099       | robertc  | UTF8     | C         | C     |06:47
lifeless launchpad_ftest_1470       | robertc  | UTF8     | C         | C     |06:47
lifeless launchpad_ftest_1579       | robertc  | UTF8     | C         | C     |06:47
lifeless launchpad_ftest_929        | robertc  | UTF8     | C         | C     |06:47
lifeless launchpad_ftest_978        | robertc  | UTF8     | C         | C     |06:47
lifelesswgrant: do you happen to know the dead chicken for increasing a vm disk image size?06:48
wgrantlifeless: libvirt?06:51
lifelesshttp://wiki.libvirt.org/page/Tips#Increasing_the_disk_size_of_a_virtual_machine06:57
wgrantIf it's LVM it's easy. qcow2 I don't really know... I normally just create a new image and copy the data across.06:58
lifelesswhich is odd, I've have expected to be able to just loopback it06:59
wgrantHm?06:59
wgrantI loopback the new and old devices then mount them both.07:00
lifelessloopback as a disk, then ext2resize07:02
lifelesswell, fdisk, ext2resize07:02
wgrantOh, I just resize the virtual block device then do the rest from within the VM.07:03
lifelesswell, thats what they say on that wiki page07:03
lifelessit just seems a bit redundant to me07:03
wgrantlifeless: Can you manually submit that c-c.py branch?07:11
wgrantIt failed with that LayerIsolationFailure.07:11
wgrantDespite only changing an untested script.07:11
lifelesswhat should the mangled commit message be07:21
wgrant[r=lifeless][ui=none][no-qa] Update community-contributions.py with new name mappings and statuses.07:21
lifelessand the branch url07:22
lifelesswgrant: ^07:23
wgrantlifeless: lp:~wgrant/launchpad/community-contributions-updates07:24
lifelesssent07:24
wgrantThanks.07:24
lifelesswow, we have some leaky shit here07:24
lifelessoh, -ha-07:26
lifelesslayers blows up very badly when testSetup goes boom07:26
lifelesswgrant: if you're interested, rev 11738 pushing now07:27
lifelessor 739 which has devel for the parallel tests.07:29
lifelessjml: https://code.edge.launchpad.net/~lifeless/launchpad/databasefixture/+merge/38643 I'm hoping you'll review that today, so I can get some momentum up.08:00
StevenKlifeless: But it's a Sunday?08:08
lifelessStevenK: yes08:09
lifelessand? You can review it if you like; its very mechanical08:09
lifelessI would love it if you did review it :)08:09
StevenKI would, but I'm about to run out the door08:11
LPCIBotProject devel build (121): STILL FAILING in 4 hr 5 min: https://hudson.wedontsleep.org/job/devel/121/09:01
wgrantlifeless: What did you do about that STORM_CEXTENSIONS thing?10:07
lifelessmake10:10
wgrantAh.10:11
wgrantOdd.10:11
wgrantThanks.10:11
jmlhi ho10:28
lifelessjml: hi10:32
jmllifeless: I'm just getting to your branch :)10:32
lifelessawesome10:34
LPCIBotProject db-devel build (75): STILL FAILING in 4 hr 8 min: https://hudson.wedontsleep.org/job/db-devel/75/10:34
lifelessI'm polishing the next one - setting a uniqe env variable in BaseLayer10:34
lifelessafter that it will be using a custom ftesting.zcml + config dir, though I need to really understand WTF the overrides we write are10:35
jmloh10:35
jmlI think I have an answer to your layer question10:35
* jml checks10:35
lifelessthen, in theory, we're down to fine tuning, fatsam etc.10:35
jmlactually, I don't10:37
jmlmy guess was going to be that it had something to do with the way zope goes up the inheritance tree for you10:37
jmlbut since there aren't setUp or tearDown methods on LayerProcessController, I have no idea10:38
lifelessI think its because DatabaseLayer has multiple tasks10:38
lifelessbut for external tests environments like windmill, we don't need them all10:38
lifelessor something10:38
jmlyeah, maybe10:47
jmllifeless: working through your branch now10:47
lifelessjml: thank you10:47
lifelessjml: lp:~lifeless/launchpad/uniqueconfig is where my next thrust is going, if you're interested. It is selfcontained but  not useful until I do config mangling which is why I am not planning on putting it up for review just yet.10:52
jmllifeless: thanks10:52
jmlthis is a big branch10:52
lifelessI mention it because it alters the branch you are looking at, a little.10:53
lifelessjml: its nearly all mechanical.10:53
lifelessuhm10:53
jmlyeah, so I'm seeing :)10:53
lifelessin fact I think its reasonable to say that its all mechanical10:53
lifelessstatic -> instance10:53
lifelessunused stuff deleted10:53
lifelessand the one tiny patch, adding dbname dynamic allocation support10:54
jmlooh, I think I've got to the meat :)10:54
jml> -        DatabaseLayer._reset_sequences_sql = None10:55
jmllifeless: why'd you delete that line?10:55
lifelessbecause its now held by the _db_fixture10:55
lifelessthe fixture has two uses, calculating the reset sequences logic, and doing test db initialisation and restoration (which uses the sequences *from the template db* - but the choice to do that is held by the layer10:57
lifelessnot by the fixture10:57
lifelessthats something we can clean up further in future I think.10:57
jmllifeless: > +            self.dbname = self.__class__.dbname + "_" + str(os.getpid())10:58
jmllifeless: why self.__class__.dbname and not self.dbname?10:58
lifelessbecause self.dbname would be wrong10:59
lifelessmmm10:59
lifelessrephrase10:59
lifelessself.dbname would be more magical10:59
lifelessI want to be explicit here.10:59
jmlcool.11:00
jmljust wanted to make sure it was deliberate11:00
lifelesssure11:01
lifelessDoesNotStartWith sure looks like it could be a simply curry of Not(StartsWith)11:02
jmlI haven't seen it, but probably yes11:03
jmllifeless: also, I've found a case for which Matchers are not a natural fit.11:05
jmllifeless: "assert that this Deferred will fail with this exception type"11:05
lifelesswell, matching would match the exception11:05
lifelessI have one of those I need to port to testtools, its in testrepository atm11:06
lifeless'assert that this deferred will raise something matching <matcher>'11:06
jmlreturn d.addCallback(self.assertThat, Matches(FooError))11:06
jmlfsvo Matches11:06
lifelessyeah, I guess11:06
lifelessI spelt it, in regular code as11:06
lifelesserr = self.assertRaises(Exception, thing)11:07
lifelessself.assertThat(err, MatchesException(...))11:07
jmlright11:07
lifelessthis doesn't seem unnatural to me11:07
jmlwell, for deferreds it's a bit awkard11:07
jmlI guess I could add a convenience function like lambda d, *exc_types: return d.addCallback(self.assertThat, FailureMatches(*exc_types))11:08
jmlactually, ugh11:09
jmlit would need to be more complex11:09
jmlbecause you actually want to addErrback instead, but also add a callback that will fail if it gets called11:09
lifelessyes11:10
jmlbut it can be done11:10
lifelessbut this glue, isn't it directly equivalent to assertThat + assertRaises ?11:10
lifelesse.g., its the adaption to let the concerns be separated11:10
jmlwell...11:10
jmlthe issue is that assertRaises doesn't fit Deferreds11:10
jmland the tricky thing is where to put the deferred glue if not on the base class11:11
lifelessthats getting interesting ;)11:11
lifelessassertThat lives on the base class11:11
lifelesshmm11:11
lifelessthis needs some consideration11:12
lifelesshey, do you want to review me moving StartsWith and DoesNotStartWith to testtools?11:12
jmlso what I meant is that matchers as a solution for adding extra assertion types without doing inheritance magic aren't a good fit for this particular problem, even if they might be a part of the solution11:12
jmlsure11:12
lifelessjml: ok, I get that now, and completely agree; matchers are always going to be just a component11:13
lifelessjml: https://code.edge.launchpad.net/~lifeless/testtools/matchers/+merge/3864511:13
lifelessjml: I'd like to roll that into an updated testtools snapshot for lp11:15
jmllifeless: sure.11:15
lifelessjml: or perhaps even a release, though its late and I don't want to do a release at this time of night (but if you did I could update LP in the morning)11:15
jmllifeless: yesterday, I was looking into the snapshot bug you filed on testtools11:15
jmllifeless: I don't know how to fix it11:16
jmllifeless: https://bugs.edge.launchpad.net/testtools/+bug/61373411:17
lifelessoh, I remember11:17
_mup_Bug #613734: Hard to make snapshots for use with buildout <testtools:Triaged> <https://launchpad.net/bugs/613734>11:17
jmlI mean, I can think of ways to fix it11:17
jmlbut surely there's already a bog standard way of dealing with this11:17
lifelesspresumably11:18
lifelessor we could go to commits are releases.11:18
lifelessif we mad it a little more automated11:18
lifelessjml: so, a testtools release, or a snapshot? I'm easy.11:22
jmllifeless: release sounds good11:23
lifelessjml: do you perhaps feel like doing one?11:23
jmllifeless: not right at this minute, but I could do one today11:23
lifelessthat would be awesome11:23
lifelessI'll update testtools in lp tomorrow, rip out the now duplicated code.11:24
jmlcool11:24
jmllifeless: I'm also thinking of making a web page summarizing a bunch of testing stuff that we've done11:24
jmllifeless: fixtures, testscenarios, testr, subunit, testtools, tribunal – anything else?11:25
lifelesstestresources11:25
jmlahh, of course11:25
lifelessbzrlib.tests11:25
lifelesspython's unittest addCleanup, load_tests - we provided the protocol and discussion, call it 'moral creation'11:25
lifelessor something catchy ;)11:26
jmllifeless: good point11:26
jmlwgrant: I almost wasn't going to review the branch you just posted, and then I read the description11:27
wgrantjml: Hm?11:27
jmlmore-a-f-cleanup, re pockets11:27
wgrantThe code is old and revolting :(11:28
wgrantAnd I have another 7 or so branches in this series :(11:28
jmlwgrant: that's a good thing :)11:31
jmlwgrant: I added getSuite when I was doing the package branches work. I'm glad it's now actually helping more broadly.11:31
wgrantjml: Ahhh, I wondered why nobody was using it.11:32
wgrantI didn't realise it was brand new.11:32
jml"brand new" meaning early 200911:32
wgrantjml: This code is largely unmodified from 2005...11:33
jmlif I did it again now, I might have even added a Suite class.11:33
jmlpoint.11:33
wgrantWhat is the policy on sampledata changes in devel these days?11:35
jmlsodomy non sapiens11:36
wgrantEvery few times I make a change somebody tries to kill me. I guess it's worth a try.11:37
jmlwgrant: I say edit boldly11:37
jmlwgrant: ec2 landing that branch11:39
wgrantjml: Thanks.11:39
lifelesswgrant: depends on what you mean by sampledata change11:47
lifelesswgrant: if you mean 'deleteing a tonne' DOIT11:47
lifelessif you mean 'adding a bunch'. Uhm, lets talk.11:47
wgrantlifeless: I'm removing DistroSeries.lucilleconfig in favour of ComponentSelection. But one of the sampledata series is broken, having no ComponentSelections.11:50
wgrantSo I am adding four rows to ComponentSelection rather than rewriting hundreds of tests.11:50
lifelessdoit11:51
lifelessno question that that is the right thing to do.11:51
wgrantThanks.11:51
wgrantThe sampledata regeneration bloats the diff by 700 lines :(11:58
lifelesswgrant: why, its only four rows you said?12:00
lifelesswgrant: put them in by hand :)12:01
wgrantlifeless: The sampledata hasn't been regenerated for a while.12:01
lifelesswgrant: thats not entirely true12:01
lifelesswhat pg version have you used?12:01
wgrantI can see columns being added.12:01
wgrantThe order is fine.12:01
lifelesshmm12:01
wgranthttps://code.edge.launchpad.net/~wgrant/launchpad/destroy-distroseries-lucilleconfig/+merge/3864812:01
lifelesswgrant: its midnight, I'm pumpkining12:02
lifelessbut I smell fishy12:02
wgrantSome of it is order, you're right.12:02
wgrantBut there is also new stuff.12:02
wgrantI'm running whatever pg maverick has.12:02
wgrant8.4.512:03
wgrantThe order in my branch is right.12:03
wgrantIt's alphabetical.12:03
wgrantThe old one wasn't.12:03
wgrantI wonder how that happened.12:03
lifelessso someone else had a sampledata patch12:03
lifelesslast week12:03
lifelessand it didn't have columns12:04
wgrantdb-devel has been merged since.12:04
lifelesshmm12:04
lifelessgnight ;)12:04
wgrantNight!12:04
lifelesswgrant: I have one thought12:04
lifelessif you care to do it.12:05
wgrantSure.12:05
lifelesswgrant: write a test that the sampledata is in some reference order; pin that to the pg version on ec2 at the moment (so it skips if it can't run)12:05
* lifeless laughs maniacally12:05
* lifeless goes to bed12:05
jmllifeless: g'night.12:07
jkakarlifeless: When you wake up it'd be nice if you could review https://code.launchpad.net/~niemeyer/storm/bug-620615/+merge/3845912:25
jkakarlifeless: It's a blocker for releasing 0.18 which will fix at least two problems you're experiencing with Storm in Launchpad.12:25
LPCIBotProject devel build (122): STILL FAILING in 3 hr 42 min: https://hudson.wedontsleep.org/job/devel/122/12:43
LPCIBot* Launchpad Patch Queue Manager: [r=lifeless][ui=none][no-qa] Update community-contributions.py with new name mappings and statuses.12:43
LPCIBot* Launchpad Patch Queue Manager: [r=jml][ui=none][no-qa] parallel testing facility that works with subunit.12:43
LPCIBot* Launchpad Patch Queue Manager: [r=adeuring][ui=none][bug=655690] Replace the messy12:43
LPCIBotFTPArchiveHandler.release_files_needed dict with a simple12:43
LPCIBotPublisher.release_files_needed set of suites.12:43
LPCIBotProject db-devel build (76): STILL FAILING in 3 hr 49 min: https://hudson.wedontsleep.org/job/db-devel/76/14:23
LPCIBotLaunchpad Patch Queue Manager: [rs=buildbot-poller] automatic merge from stable. Revisions: 1172914:23
LPCIBotincluded.14:23
lifelessjkakar: hi18:47
jkakarlifeless: Hi!18:47
lifelessjkakar: sure, for future ref I'm be happy with storm folk reviewing such things18:47
jkakarlifeless: Yeah, I figured.  At the time, I was the only reviewer, was mentioning it so you could take second if no one stepped up, but therve has now with some interesting questions about it.18:48
lifelessjkakar: that layer of code is pretty opaque, I have to reread it three times each time I approach it :(18:51
jkakarlifeless: Me too. :)18:51
lifelessthat makes me a little sad18:59
lifelessjml: I'm not sure why you're using a branch to do the release. The setup.py changes look trivially fine.19:01
lifelessjkakar: also thanks for reading the guide/presentation19:02
lifelessjkakar: its nice to know you felt it made some useful points19:02
jkakarlifeless: Yeah, I really enjoyed it.  Everything you said aligns with my perspective on the issues (and clarified some things I've thought but somewhat vaguely).  Thanks for putting effort into documenting those ideas. :)19:03
lifelessjkakar: cool; my pleasure. What things did it clarify for you?19:03
lifelessjkakar: also, you might like http://pypi.python.org/pypi/fixtures - its starting to mature/shape up19:05
jkakarlifeless: Specifically the comments about transparency.19:05
jkakarlifeless: Often, when I review code, I notice problems related to transparency and bring them up.19:06
jkakarlifeless: I hadn't attributed the term "transparency" to these observations, but seeing your list of things that contribute to transparency turned the light on.19:06
jkakarlifeless: I will definitely check out fixtures!19:06
lifelessthis is my core-concept-of-testresources extracted to a dedicated library; testresources will be layering on it soonish19:07
jkakarlifeless: Cool.19:08
lifelessjames_w: if you're around, was DoesNotStartWith unused in LP?19:20
lifelessjml: https://code.edge.launchpad.net/~lifeless/launchpad/testtools/+merge/3866519:26
LPCIBotProject db-devel build (77): STILL FAILING in 4 hr 9 min: https://hudson.wedontsleep.org/job/db-devel/77/19:49
LPCIBotProject devel build (123): STILL FAILING in 4 hr 7 min: https://hudson.wedontsleep.org/job/devel/123/20:33
=== Guest16378 is now known as jelmer
=== jelmer is now known as Guest5922
james_wlifeless, I don't know20:56
lifelessjames_w: you could review https://code.edge.launchpad.net/~lifeless/launchpad/testtools/+merge/38665 if you like20:58
james_wlifeless, looks fine to me20:59
lifelessmwhudson: good morning. https://code.edge.launchpad.net/~lifeless/launchpad/testtools/+merge/3866521:11
mwhudsonlifeless: done21:13
lifelessthanks!21:13
thumpermorning21:14
lifelesshi thumper21:18
wgrantlifeless: So you propose to stick the config in a request annotation?21:45
=== _mup__ is now known as _mup_
lifelesswgrant: I propose to use a single way of finding global state in each environment and have a single abstraction for accessing and changing that21:52
lifelesswgrant: the IAnnotations participation seems like the obvious place at the moment21:52
thumperlifeless: 2010-10-16 23:12:26 ERROR   Unhandled exception21:55
thumper -> http://launchpadlibrarian.net/57750288/dQsXM3omQy3kDeJMenvfogrK9JQ.txt (FATAL:  Ident authentication failed for user "session"21:55
thumperFATAL:  Ident authentication failed for user "session"21:55
wgrantlifeless: Right, that sounds like a good idea.21:55
thumperlifeless: that is what garbo-daily is finishing with21:55
thumperlifeless: it is after the script has finished21:55
thumperlifeless: I'm guessing it is the script reporting bit failing21:56
thumpergarbo-daily is reporting as not having run since 8th of September21:56
thumperis change assignee never completing for anyone else?21:59
thumperit seems tragically slow22:00
lifelessthumper: I haven't tried recently; I had it on my 'this is a little slow' list though, so it wouldn't surprise me. Do you get an oops ?22:00
thumperlifeless: is succeeded this time22:00
wgrantthumper: The person picker was timing out a lot last week.22:01
thumperlifeless: but I don't recall an oops22:01
wgrantI don't think we have an OOPS ID.22:01
lifelesswgrant: yes, that oopsed22:01
wgrantSince you need to get it with Firebug.22:01
lifelesswgrant: there is a bug22:01
wgrantAh, good.22:01
thumperlifeless: I've had a thought about that weird xmlrpc behaviour22:02
lifelesscool22:05
jmllifeless: hello22:28
lifelessmwhudson: hi, another small branch you might like22:28
lifelesshttps://code.edge.launchpad.net/~lifeless/launchpad/fixtures/+merge/3866822:28
lifeless 4 files changed, 11 insertions(+), 274 deletions(-)22:28
lifelessjml: hi22:28
jmllifeless: thanks for the review22:29
jmllifeless: regarding the deferred support, I'd like to know what you think of assert_fails_with22:30
lifelessok, I'll look at that22:30
jmllifeless: other than that, I'm going to hold off on making unhandled errors in deferreds look different to regular errors for now22:31
jmllifeless: if you're ok with the assertion helper, then I'll probably land it22:32
jmllifeless: no use endlessly polishing the darn thing22:32
mwhudsonlifeless: just one question: should the cleanUp methods upcall?22:33
lifelessmwhudson: which ones?22:34
mwhudsonlifeless: the ones in lib/lp/poppy/tests/test_poppy.py22:35
lifelessjml: I'll look now22:35
lifelessmwhudson: oh, it doesn't inherit from Fixture yet22:35
lifelessmwhudson: that part of it is just tearDown->cleanUp rename22:35
mwhudsonlifeless: ah, ok22:35
lifelessmwhudson: to harmonise on one protocol22:35
mwhudsonwe need to implement meld in the browser and use that on the mp page :-)22:36
mwhudsonlifeless: approved22:36
lifelessschweet22:36
jmllifeless: ta22:36
mwhudsonactive and inactive tabs look very similar on maverick :(22:38
=== Ursinha is now known as Ursinha-afk
lifelessjml: so thats assertRaises spelt differently ?22:40
jmllifeless: spelt with deferreds22:40
jmllifeless: and using failureException shenanigans22:40
lifelessI'd like to tweak the name, the implementation seems ok (but we should consolidate the core of it and assertRaises to a single helper, in principle - that can wait)22:41
jmlsubclasses of testtools.TestCase that set different failureExceptions will get errors instead of failures unless they also inform assert_fails_with of their change22:42
jmllifeless: I'm happy to put a warning in the docstring saying that it's liable to change API.  All of the twisted stuff is experimental as far as I'm concerned22:42
jmlcaveat invoker22:42
lifelessjml: perhaps it could be self.assertFails(exc_types, d)22:42
jmllifeless: put Deferred know-how into base TestCase?22:43
lifelessto be more like assertRaises and let it use failureException directly22:43
lifelessjml: well, a mix in, like TestWithFixtures, perhaps22:43
lifelessjml: not thrilled, just speculating22:43
jmlyeah, it could be a mix-in, but I'm frowning a little as I read that :)22:44
lifelessjml: anyhow, I'm fine with adding it as unstable subject to name-and-location-change-etc-etc22:44
jmllifeless: fwiw, the Twisted version is TestCase.assertFailure22:44
jml(I don't like that name either.)22:45
lifelessheh22:45
lifelessso future stuff: more like assertRaises, support case.failureException22:45
jmllifeless: noted, thanks.22:45
jmllifeless: on https://code.edge.launchpad.net/~jml/testtools/run-test-improvements/+merge/38659, you say "Setting the attribute on the object not the method"...22:46
lifelessyeah22:46
jmllifeless: the decorator doesn't have access to the object. got any objections to a dict on the class?22:46
lifelessnot at all, I think I even proposed that22:46
jmlgood good.22:46
lifeless(in #subunit the other day)22:47
jmllifeless: you did propose it, I just wanted to make sure you hadn't changed your mind.22:47
jml:)22:47
* jml frowns22:47
lifelessno, its still seems ok given the contract python offers22:47
jmlI bet f.__class__ only works on some of the supported Python22:47
jmls22:47
lifelessjml: whats the lowest python we support ?22:47
mwhudsonlifeless: could i get you to look at http://bazaar.launchpad.net/~jameinel/launchpad/lp-service/revision/11235#lib/lp/codehosting/tests/test_acceptance.py ?22:48
jmllifeless: 2.422:48
lifelessjml: you can say 'decorator for functions only works on 2.4 up' if needed22:48
lifelessmwhudson: looks like a url22:48
jmllifeless: I think f.im_class works, but not sure about Python 3 support for it22:48
mwhudsonlifeless: it's related to external processes in tests and i just want to check that it doesn't conflict overly with your vision for how they are going22:48
mwhudson(and also that there's nothing nicer in tree he can use yet)22:49
jmlmwhudson: at some later point, I'm going to find out why jam's thing isn't a twisted daemon. not tonight though, please.22:49
mwhudsonjml: because it forks22:49
mwhudsonand forking with a running reactor sounds terrifying22:49
jmlquite22:49
jmldoes it have to fork?22:49
mwhudsonyes, it's basically the whole point of the excercise22:49
mwhudsonjml: i don't understand how f.im_class and f.__class__ can be considered in the same category of thing22:50
lifelessmwhudson: derive from fixtures.Fixture22:50
jmlmwhudson: they aren't, f.__class__ was a mistake22:50
mwhudsonjml: ok22:50
lifelessmwhudson: then you can use useFixture as a convenience for use it, or 'with forker:'22:51
mwhudsonlifeless: it's a helper for a layer at the moment, but i guess that we'll be wanting to move away from that in due course22:52
jml>>> Foo.f.im_class22:52
jmlTraceback (most recent call last):22:52
jml  File "<stdin>", line 1, in <module>22:52
jmlAttributeError: 'function' object has no attribute 'im_class'22:52
jmlscrew you Python 322:52
lifelessmwhudson: also, the atexit is bong22:52
jmlwhy do you hate on players?22:52
lifelesswhich reminds me to ask poolie about SIGTERM22:52
pooliehello jml22:53
jmlpoolie: hi22:53
mwhudsonjml: im_class is moderately useless, iirc22:53
pooliejml i was thinking this morning my dkim branch may not have shown you the changes because it was in the wip state when i pushed22:53
jmlmwhudson: how do you find the class of an unbound method then?22:53
pooliejust a guess22:53
jmlpoolie: that was my guess, but I have a different branch that has been wip & shown changes22:53
mwhudsonjml: i didn't think python 3 had unbound methods22:53
lifelesspoolie: hey, so what did you learn about SIGTERM and python22:54
lifelesspoolie: does SIGTERM cause a stack unwind by default ?22:54
pooliewhat about it?22:54
jmlmwhudson: how do you find out which scope a function is in then?22:54
pooliei don't think so, no22:54
lifelessahh22:54
pooliei think by default python has no OS-level handler for it, therefore *zap*22:54
lifelesspoolie: did you add glue for that to bzr?22:54
pooliei think we did22:54
lifelessso we'll need that for:22:55
lifeless - appserver22:55
* poolie looks22:55
lifeless - twisted daemons22:55
lifeless - test runner22:55
mwhudsonjml: i guess you don't?22:55
poolieno, we don't catch it22:55
pooliei think there's a bug saying we should22:55
lifelessok22:56
poolieit may be22:56
jmllifeless: twisted installs a sigterm handler22:56
poolie- we should do it and we just haven't22:56
lifelessjml: ah, it does? cool.22:56
jmlmwhudson: that sucks22:56
poolie- catching it is messy; other things like sigwinch have been hugely messy in python22:56
jmllifeless: it logs & stops the reactor22:56
lifelessjml: does it unwind properly? pids get deleted etc?22:56
lifelessjml: there are buildbot failures that smell like SIGTERM.22:56
lifelesspifiles22:57
jmllifeless: pidfiles are at a higher level than the reactor. the rephrased question would be something like "does twistd delete pidfiles at reactor shutdown?"22:57
jmllifeless: unless you are talking about piffle :P22:58
jmllifeless: and I don't know the answer to that question.22:58
lifelessjml: I'm talking about machine reboots of the bb slaves leaving a librarian pid behind22:59
jmllifeless: hmm.22:59
jmllifeless: I just don't know. it could be a bug in twistd22:59
lifelessjml: ok22:59
jmllifeless: but the solution would be fixing twistd not installing a different sigterm handler.22:59
lifelessjml: sure23:00
lifelessjml: details ;)23:00
jmllifeless: you architects have it so easy :P23:00
pooliewhat's the context? making sure that external fixtures are torn down?23:01
lifelesspoolie: yes23:01
jmlgood grief, Python 3 has also crippled Foo.f.__dict__23:08
jmlnm23:11
lifelessok, raising in a sigterm handler works23:14
lifelesstrivially23:14
lifelessand we have a SIGTERM handling in bin/test already23:16
thumperah.. whut? LayerIsolationError: Librarian has been killed or has hung.Tests should use LibrarianLayer.hide() and LibrarianLayer.reveal() where possible, and ensure the Librarian is restarted if it absolutely must be shutdown: [Errno socket error] [Errno 111] Connection refused23:17
thumperI'm just trying to run a damn test :(23:17
wgrantTry bin/kill-test-services23:17
wgrantIf it failed the first time.23:17
wgrantExcept that might be broken now.23:18
wgrantSo maybe remove the librarian pid manually.23:18
lifelessthumper: check you don't have a /var/tmp/fatsam.test/librarian.pid23:18
lifelesswgrant: it shouldn't be broken23:18
thumper$ bin/kill-test-services23:18
thumperTraceback (most recent call last):23:18
thumper  File "bin/kill-test-services", line 39, in <module>23:18
thumper    from canonical.librarian.ftests.harness import (23:18
thumperImportError: No module named harness23:18
thumperheh23:18
wgrantYeah, that.23:19
lifelessoh, thats broken.23:19
lifelessdamn thing should be tested shouldn't it.23:19
wgrantI pointed that out to you last week, IIRC.23:19
lifelesswgrant: I don't remember23:19
thumperboo... hiss... FeatureError: Can't remove a sliced result set23:20
jmlg'night23:29
lifelessnight23:31
=== jelmer__ is now known as jelmer
lifelesswgrant: that import is just bong23:31
thumperwhy does store = IMasterStore(IPerson) fail in the harness?23:32
mwhudsondon't you do it to objects or database classes?23:33
* mwhudson might be wrong23:33
wgrantthumper: IMasterStore(Person) or IMasterObject(some_person)23:34
thumperah...23:34
thumperthat's right23:34
wallyworldmorning23:39
thumperwallyworld: morning23:39

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