lifelessdesperately seeking reviewers00:24
wgrantlifeless: Where?00:25
wgrantI don't see a lifeless review pending.00:25
wgrantOh, it didn't actually exist yet.00:26
wgrantI see.00:26
wgrantlifeless: Still 100ms? :/00:26
lifelesswgrant: see the oops: 9000ms cold, new query is 900ms cold, 100ms hot00:28
wgrantNo thumper, and no StevenK yet I guess :(00:30
=== wgrant changed the topic of #launchpad-dev to: Performance Tuesday | https://dev.launchpad.net/ | firefighting: - | On call reviewer: wgrant | https://code.launchpad.net/launchpad-project/+activereviews
wgrantStevenK: https://code.launchpad.net/~lifeless/launchpad/bug-739799/+merge/5428700:31
lifelessnext thing is to permit bulk_load chainging00:31
lifelessand we'll have a poor man persistence layer00:31
wgrantI also need to look at a helper for collections.00:32
StevenKwgrant: Done.00:33
wgrantStevenK: Thanks.00:34
wgrantStevenK, lifeless: https://code.launchpad.net/~cjwatson/launchpad/tar-xz/+merge/5421500:34
lifelesswgrant / sinzui can you confirm jc is still on Cve:+index ?00:37
wgrantlifeless: He mentioned it on the call this morning.00:37
wgrantSo I think so.00:37
lifelessI don't want to touch 27 /   26  ProductSet:CollectionResource:#projects00:38
wgrantIt's not that bad.00:38
wgrantJust needs a few things preloaded.00:38
wgrantA couple of them are collections, though.00:38
lifelessits a nuisance determining all the traversals being hopped to00:38
wgrantWe may want to fix lazr.restful.00:39
wgrantTo provide a hook.00:39
lifelessproductseries should be sufficient to make the timeout go away00:39
wgrantThat was my impression, but officialbugtag might be bad too.00:40
wgrantStevenK, lifeless: Thanks.00:44
lifelessTraceback (most recent call last):00:46
lifeless  File "bin/sprite-util", line 54, in <module>00:46
lifeless    url_prefix_substitutions={'/@@/': '../images/'})00:46
lifeless  File "/home/robertc/launchpad/lp-branches/working/lib/lp/services/spriteutils.py", line 94, in __init__00:46
lifeless    css_template_file, group_name, url_prefix_substitutions)00:46
lifeless  File "/home/robertc/launchpad/lp-branches/working/lib/lp/services/spriteutils.py", line 101, in _loadCSSTemplate00:46
lifeless    self.css_object = cssutils.parseFile(css_template_file)00:46
lifeless  File "/home/robertc/launchpad/lp-sourcedeps/eggs/cssutils-0.9.6-py2.6.egg/cssutils/__init__.py", line 156, in parseFile00:46
lifeless    return CSSParser().parseFile(*a, **k)00:46
lifeless  File "/home/robertc/launchpad/lp-sourcedeps/eggs/cssutils-0.9.6-py2.6.egg/cssutils/parse.py", line 130, in parseFile00:46
lifeless    return self.parseString(open(filename, 'rb').read(),00:46
lifelessIOError: [Errno 2] No such file or directory: '/home/robertc/launchpad/lp-branches/working/lib/canonical/launchpad/icing/style-3-0.css.in'00:46
* StevenK glares at run_script. Something looks to be running DELETE FROM FeatureFlag first00:51
lifelesssee jtv's recent landing?00:53
lifelessStevenK: wgrant: any idea about this issue I have ?00:53
lifelessor should I back 12638 out?00:54
wgrantlifeless: Reproduced.00:55
lifelessbah, not that rev. other rev00:55
wgrantlifeless: We have another 3 hours left on buildbot.00:55
lifelessno, actually, that rev00:55
wgrantLet's debug slightly first.00:55
lifelessits trying to build the style-3.0 regardless00:56
wgrantI wonder if bin/sprite-util didn't get rebuilt...00:57
lifelessso the easiest fix is to rename it00:57
wgrantOr touch something that buildout depends on.00:58
lifelessremoving it00:58
lifelessand it fails to run00:58
lifeless'make' doesn't know that bin/sprite-util should be rebuilt00:58
lifelessbin/buildout fixed00:58
sinzuistyle-3-0.css.in should not exit /bin/buildout will fix the utils00:58
wgrantlifeless: Fixed?00:59
lifelesswgrant: made 'make' work00:59
sinzuiLooks like the buildout templates were not regenerated during the deploy00:59
lifelesswe need to land a dependency rule to rerun buildout00:59
lifelessit may|maynot fail on deploy00:59
wgrantlifeless: It shouldn't fail on deploy.00:59
lifelesswgrant: we don't start with a clean tree01:00
lifelesswgrant: do we explicitly run buildout?01:00
wgrantThen why does it take 30 minutse to run buildout?01:00
wgrantsinzui: Your change to sprite-util.in wasn't enough to cause buildout to be rerun.01:01
wgrantsinzui: So bin/sprite-util is still old.01:02
sinzui./bin/buildout will remake the bin dir from the new bin templates01:02
wgrantRight, but until then everyone's tree is broken.01:02
wgrantMaybe I should just upgrade loggerhead.01:03
wgrantKill two birds with one stone.01:03
wgrantOh, no.01:03
wgrantversions.cfg, not sourcedeps.conf :(01:03
sinzuiMine wasn't. I think this is case of different setups. I branch and make new trees every tine01:03
wgrantsinzui: I normally do, but sometimes run stuff from devel.01:04
wgrantAnd as of yesterday I'm trying bzr-colo, so all my one tree is broken.01:04
pooliethanks for trying it01:04
pooliei do use it for lp development fwiw, but not as often as you will be01:04
sinzuiI stopped running from devel when we switched to eggs. It became unstrust worthy01:04
pooliewhat happened?01:04
sinzuiI miss simple python and debs01:04
wgrantsinzui: Indeed.01:05
wgrantpoolie: Makefile + buildout == confusion01:05
wgrantCompounded by running with a single tree.01:05
pooliesinzui, what's the alternative?01:05
poolieto running from devel, i mean01:05
pooliemy frustration here is that i only touch lp stuff every 1-3 weeks and so every time i do, i need to fight with dependencies01:06
lifelessso minimally01:08
lifelesssomeone needs to mail the dev list01:08
lifelesssecondly, we should just fix Makefile to invoke buildout here01:08
sinzuipoolie: yes :( I run rocketfuel-setup the moment I start my day, merge and rebuild all my trees. I can review projects, check spam and answer questions, before all that work is complete some days01:08
pooliewgrant, so the breakage is not specifically from bzr-colo?01:09
wgrantpoolie: No.01:09
wgrantpoolie: colo is working OK, but the fact that it shares trees means that our screwed up build system is more exposed.01:09
lifelessjcsackett: I have a change to lib/lp/bugs/browser/cve.py that may trivially fix the CVE:+index bug, though I'm not sure if it is/isn't related01:17
lifelessjcsackett: actually nvm, I was on (hopeful) crack01:19
lifelesssinzui: looks to me like there is only one user of ProductSet.search : the API.01:23
lifelesssinzui: if I'm right, could make it siiiiimpler01:24
=== jtv-afk is now known as jtv
jtvmorning folks01:25
lifelesswgrant: fyi, offiical bug tags may be an issue, but they are also locked behind a mixing behind a property hidden in a dilemma.01:36
lifelesswgrant: e.g. TooHardBin01:36
wgrantlifeless: Perhaps.01:36
lifelesswgrant: certainly not low hanging fruit01:38
jtvhi StevenK, are you here?01:52
sinzuilifeless: I would expect ProductSetView to use IProductSet.search(). I see it uses IPillarNameSet. I think this is because users do not care care that we divide things into distros, projects, and project groups02:09
lifelesssinzui: I had such expectations too02:09
lifelesssinzui: I found a total of 1 use: bugalsoaffects02:09
lifelesscan has review? https://code.launchpad.net/~lifeless/launchpad/bug-727020/+merge/5429002:16
StevenKjtv: I am now. What are you after?02:18
jtvStevenK: I figured it out for myself now.02:18
StevenKjtv: Nice work. :-)02:19
jtvWell I still haven't solved my problem.  :)  The difficulty was finding out where Sources gets generated.  Turns out the answer depends on the archive purpose.  In my case it should be done by a-f.02:20
lifelessStevenK: https://code.launchpad.net/~lifeless/launchpad/bug-727020/+merge/54290, if you would be so kind02:31
lifelesswgrant: how is Archive:+index looking perf wise now, do you think ?02:34
StevenKlifeless: Done.02:34
wgrantlifeless: getBuild(Status)?Summar(y|ies)(ForSource(Id)?s(AndArchive)?)? is still being problematic.02:35
wgrantAcross +index, +packages, +copy-packages and +delete-packages02:35
lifelesswgrant: want me to look ?02:36
lifelessor I can fix ScopedCollection:CollectionResource:#person-page-resource02:37
lifelesshmm, might do that one02:37
wgrantlifeless: I'm looking.02:37
wgrantWell, was looking before, and will be looking again in a while, I imagine...02:37
wgrantlifeless: It needs to be rewritten to not execute four 300ms queries, basically.02:38
lifelesswgrant: thats only 1.2 seconds02:38
wgrantlifeless: The queries are at best 300ms. They're often much more.02:38
StevenKjtv: Hi! :-)02:40
StevenKjtv: Is there anything special I need to do to see feature flags in a script?02:40
jtvStevenK: if it's a LaunchpadScript, no.02:41
jtvIf it's not a LaunchpadScript, you're still on your own.02:41
StevenKI don't think it is. Can you point me at the scaffolding I need to set up?02:41
jtvSurprisingly, you can find the answer in LaunchpadScript.  :)02:42
jtvHave a look at lp.services.scripts.base: LaunchpadScript.run02:42
jtvIn a nutshell:02:42
jtvfrom lp.services.features import install_feature_controller, make_script_feature_controller02:42
StevenKAh ha, it's a JobCronScript, which bases from LaunchpadCronScript, which is based off LaunchpadScript.02:43
jtvinstall_script_feature_controller(make_script_feature_controller("identifying script name"))02:43
jtvWell then there you go.02:43
jtvThe feature controller is installed only during "run."02:43
jtvAfter that, it restores whatever controller was previously active (which probably means "none").02:43
jtvIf you call main directly in a test, it uses whatever controller the test had set up.02:44
StevenKI call the cronscript directly using run_script02:44
jtvThen it should just work (apart from ZCML taking #$%@ ages to parse during script startup)02:45
StevenKIt insists the feature flag isn't set02:45
StevenKI shall worry about it after lunch02:46
jtvStevenK: my branch landed only recently, so make sure it's included.02:47
StevenKjtv: This is with latest devel merged in02:50
StevenKjtv: Is it because the test set up uses a fixture?02:52
jtvUses a fixture for what?02:52
StevenKself.useFixture(FeatureFixture({FEATURE_FLAG_ENABLE_MODULE: u'on'}))02:52
jtvDoes FeatureFixture actually change your feature-flag settings?  Because it'd have to do that to have any influence on your script run.02:54
StevenKjtv: Running the cronscript test by itself with LP_DEBUG_SQL=1, it runs "DELETE FROM FeatureFlag"02:54
StevenKThe job gets added, then there is a pause, which is ZCML and such like, and then two statements get executed, the first is the delete, and the second is checking the feature flag which is now unset02:55
jtvNo idea where that comes from; does the FeatureFixture also INSERT your test flag (and do you commit before the script runs)?02:55
jtvMy impression was that the FeatureFixture is an in-memory trick only, in which case it's not going to do anything for scripts.02:56
StevenKjtv: So this is using the testcase you added :-)02:56
jtvHow does that follow?02:56
StevenKIf FeatureFixture is in memory only, how do I go about enabling the flag?02:57
lifelessits not in memory only AFAIK02:57
lifelessit was discussed, not done.02:57
lifelesscheck the code02:57
StevenKlifeless: So how can I tell what is running the DELETE?02:58
jtvI'm already running that02:58
StevenKI was right, it is the fixture.02:59
lifelessit should show a backtrace then02:59
StevenKIt's cleaning itself up before the script runs02:59
lifelessStevenK: pastebin the code?03:00
StevenKlifeless: It's in an MP: https://code.launchpad.net/~stevenk/launchpad/dsdj-runner/+merge/54159 ; I'm just pushing latest changes03:01
StevenKUnless I cause the fixture to cleanup by running transaction.commit()03:02
StevenKAnyway, lunch03:02
lifeless    self._fd.close()03:09
lifelessIOError: [Errno 28] No space left on device03:09
lifelesstrying to setup a test env03:09
lifelessbecause sill factory triggers03:09
lifeless  File "/home/robertc/launchpad/lp-sourcedeps/eggs/zope.sendmail-3.7.1-py2.6.egg/zope/sendmail/delivery.py", line 136, in createDataManager03:09
lifeless    msg.close()03:09
lifeless  File "/home/robertc/launchpad/lp-sourcedeps/eggs/zope.sendmail-3.7.1-py2.6.egg/zope/sendmail/maildir.py", line 136, in close03:10
lifelessStevenK: looks like the fixture DELETE should happen at the end of the test, not before03:30
=== jamesh_ is now known as jamesh
jtvwgrant: I'm driving myself up the walls trying to find out why a-f isn't generating any Sources files for me.  One thing I notice is that there's no trace of binary packages in the setup that the test publisher has produced for me… is that normal?03:50
jtvI do get a <distroseries>_main_source referring to an existing dsc file… what else is needed?03:52
wgrantjtv: What does the a-f conf look like?03:52
* jtv finds pastebin03:52
jtvwgrant: I hope apt.conf is the one you need… http://paste.ubuntu.com/583629/03:53
wgrantjtv: That's the one.03:53
wgrantSo, that should work. But I wonder if it's not working because you have no DASes.03:54
wgrantI'm not sure anyone has tested that.03:54
jtvSo the test publisher doesn't set any up?03:54
wgrantNot if you just makeDistroSeries, no.03:54
jtvAlso, the contents.header that that config refers to doesn't exist prior to the a-f run.03:54
wgrantIt's not designed to placate buggy a-f stuff.03:54
wgrantRight, that's fine.03:54
jtvTrying it with a DAS in place, just for the hell of it…03:55
wgrantIt shouldn't make a difference, but you never know.03:56
jtvI'm just getting more error messages out of a-f.  :)03:58
jtvIt now also says "could not open file" about the Packages files.03:58
wgrantCould you pastebin the full output?03:58
wgrantOr throw the branch my way?03:58
jtvwgrant: the branch is lp:~jtv/launchpad/bug-55798 ; run ./bin/test lp.soyuz.scripts.tests.test_publish_ftpmaster -t publishes04:00
jtvI've set it up to tar up directory contents in /tmp, though not all of that is committed (because I don't want it in my final branch)04:00
StevenKlifeless: It looks to me that the commit is setting it off04:04
jtvwgrant: another fairly wild guess: if none of this has been tested with distros other than Ubuntu, could something be reacting badly to the test distro not having (or populating) all the pockets that ubuntu has?04:09
lifelessStevenK: the commit will commit all pending stuff04:09
lifelessStevenK: which will include a cleanout of *prior* featureflags04:09
lifelessStevenK: and should include an add of yours04:09
lifelessStevenK: check the FeatureFixture code04:10
wgrantjtv: Sorry, got distracted by uncontrollable anti-Microsoft rage.04:10
wgrantLet's see.04:10
jtvwgrant: never apologize for that.  It's Microsoft's fault and don't stop until they're gone.04:10
lifelessactivemembers unions with adminmembers. why04:12
StevenKlifeless: That doesn't explain what I see with LP_DEBUG_SQL_EXTRA. http://pastebin.ubuntu.com/583636/04:14
lifelessStevenK: thats after the test ran04:15
lifelessFile "/home/steven/launchpad/lp-sourcedeps/eggs/testtools-0.9.8-py2.6.egg/testtools/runtest.py", line 154, in _run_cleanups04:16
lifelessStevenK: so its irrelevant to you04:16
=== Ursinha is now known as Ursinha-afk
StevenKDrat, pasted the wrong bit04:16
StevenKlifeless: http://pastebin.ubuntu.com/583637/04:17
StevenKlifeless: The traceback from the commit is half-way through the test04:18
wgrantjtv: Ah04:25
lifelessStevenK: still in *test* cleanups04:27
lifeless  File "/home/steven/launchpad/lp-sourcedeps/eggs/testtools-0.9.8-py2.6.egg/testtools/runtest.py", line 154, in _run_cleanups04:27
StevenKlifeless: So the code for the statement is before the statement, http://pastebin.ubuntu.com/583640/ shows the entire test, and you can plainly see it runs the clean ups after line 6 of the test04:30
lifelessStevenK: this suggests that that commit is failing04:33
lifelessStevenK: raising an exception, which triggers cleanups04:33
lifelessStevenK: i promise you, you've left your entire test according the backtraces you are showing me04:33
lifelessStevenK: if I was debugging this, I would break in with pdb about now04:34
LPCIBotProject db-devel build #477: FAILURE in 5 hr 1 min: https://lpci.wedontsleep.org/job/db-devel/477/04:34
lifelessSELECT 1 FROM (SELECT PersonTransferJob.json_data, PersonTransferJob.id, PersonTransferJob.job, PersonTransferJob.job_type, PersonTransferJob.major_person, PersonTransferJob.minor_person FROM Job, PersonTransferJob WHERE PersonTransferJob.job_type = 1 AND PersonTransferJob.job = Job.id AND Job.status IN (0, 1, 4) AND (PersonTransferJob.minor_person = 251673 OR PersonTransferJob.major_person = 251673) LIMIT 1) AS "_tmp" LIMIT 104:35
lifeless(repeat for the batch size)04:35
lifelessSELECT 1 FROM (SELECT PersonTransferJob.json_data, PersonTransferJob.id, PersonTransferJob.job, PersonTransferJob.job_type, PersonTransferJob.major_person, PersonTransferJob.minor_person FROM Job, PersonTransferJob WHERE PersonTransferJob.job_type = 1 AND PersonTransferJob.job = Job.id AND Job.status IN (0, 1, 4) AND (PersonTransferJob.minor_person = 251672 OR PersonTransferJob.major_person = 251672) LIMIT 1) AS "_tmp" LIMIT 104:35
wgrantjtv:   Ran 1 tests with 0 failures and 0 errors in 32.236 seconds.04:35
jtvwgrant: yes, but no Sources files.  Check /tmp/var_archive.tar.gz.04:35
wgrantjtv: It's empty, but it's there.04:37
wgrant(because I fixed it)04:37
jtvwgrant: you do know how to keep the tension up, don't you?04:37
jtvHow did you fix it, and why is it empty?04:37
wgrantYou had your paths wrong04:37
wgrantconfig.archivepublisher.root on prod is /srv/launchpad.net/ubuntu-archive, not /srv/launchpad.net.04:37
wgrantAnd what's all this PPA business?04:37
jtvWhat is what PPA business?04:40
wgrantYour test and cron.publish-ftpmaster talk about PPAs.04:41
wgrantcron.publish-ftpmaster does not go near PPAs.04:41
wgrantOh, right, there was that alternate codepath that could never have worked.04:41
jtvYou speak in riddles.04:42
jtvAll my test did was create some ppa directories that appeared to be needed for anything to run.04:42
wgrantYou added that.04:42
wgrantPossibly because the original did this:04:43
wgrant-    ARCHIVEROOT_PARTNER=/srv/launchpad.net/ppa/ubuntu-partner04:43
jtvHow is that different?04:43
wgrantThat branch has the minor issue of not making any sense at all.04:43
wgrantSo I removed it.04:43
jtvWhat branch?04:43
wgrant-if [ "$LPCONFIG" = "$PRODUCTION_CONFIG" ]; then04:44
wgrant-    ARCHIVEROOT_PARTNER=/srv/launchpad.net/ubuntu-archive/ubuntu-partner04:44
wgrant-    GNUPGHOME=/srv/launchpad.net/ubuntu-archive/gnupg-home04:44
wgrant-    # GNUPGHOME does not need to be set, keys can come from ~/.gnupg.04:44
wgrant-    ARCHIVEROOT_PARTNER=/srv/launchpad.net/ppa/ubuntu-partner04:44
wgrantThat's how it is in devel now.04:44
wgrantThe second part of that is broken.04:44
jtvYou mean "branch" as in "if"?04:44
lifelesswgrant: sinzui is gone, can you show https://bugs.launchpad.net/launchpad/+bug/739961 to him tomorrow ?04:45
_mup_Bug #739961: person collections in API late evaluate PersonTransferJob <timeout> <Launchpad itself:Triaged> < https://launchpad.net/bugs/739961 >04:45
jtvwgrant: Okay, but does this change really affect the Sources issue?  I can see how the _other_ change affects it.04:45
wgrantlifeless: Sure.04:45
lifelessreview plox https://code.launchpad.net/~lifeless/launchpad/bug-727540/+merge/5429304:46
wgrantjtv: I don't recall exactly. But the partner dists move was crashing until I fixed that.04:46
jtvwgrant: your change does mean that ARCHIVEROOT becomes /srv/launchpad.net/ubuntu instead of /srv/launchpad.net/ubuntu-archive/ubuntu as it currently is, doesn't it?04:48
wgrantjtv: Yes.04:49
wgrantWhere does cron.publish-ftpmaster get this info?04:49
jtvIt duplicates what it finds in the lazr config.04:49
wgrantSo it should be fine, then.04:49
jtvWhich is one of the things that made this untestable.04:49
wgrantBecause it will see config.archivepublisher.root == /srv/launchpad.net/ubuntu-archive04:50
jtvBut that's different yet again.04:50
jtvOn development systems, by the way, it's all in /var/tmp/archive04:51
wgrantBut how is it different yet again?04:53
wgrantAssuming that you give cron.publish-ftpmaster config.archivepublisher.root, it should behave the same on prod as the one in devel does.04:53
lifelessStevenK: perhaps you could review https://code.launchpad.net/~lifeless/launchpad/bug-727540/+merge/54293 ? its very simple and has its diff now04:55
lifelessStevenK: I'm going to grab dinner, after that I can perhaps pull your branch down and have a poke for you04:55
jtvwgrant: except that the script duplicates it all in its variables.  You just said the production config said /srv/launchpad.net/ubuntu-archive, but you changed the script to use /srv/launchpad.net/ubuntu instead.04:58
jtvThis is all so confusing.04:58
StevenKlifeless: So where is the eager loading?04:58
wgrantjtv: The production dists tree lives in /srv/launchpad.net/ubuntu-archive/ubuntu/dists04:59
wgrantjtv: The dev one traditionally lives in /var/tmp/archive/ubuntu/dists04:59
jtvSo then you missed a change:05:00
lifelessStevenK: _members(need_validity..) etc05:00
jtvwgrant: in other words, the "ubuntu-archive" goes into the $PUBLISHER_ROOT instead of being added in ARCHIVEPARENT.05:01
jtvAnd in fact PUBLISHER_ROOT and ARCHIVEPARENT are the same thing05:01
wgrantjtv: I did enough to make the tests pass.05:01
jtv(which the script previously hid by using $ARCHIVEROOT/..)05:01
wgrantI didn't actually look at what changes you really made.05:02
wgrantEnough to get the tests to pass with a sane path structure, that is.05:02
jtvIt's pernicious because there's no way of testing it.  Eventually it'll all go; right now I'm concerned with the "chalk outline" that the new version must fill.05:02
jtvRhymes with "Sigh."  :)05:03
* jtv looks up production config05:03
wgrantAlso note that Julian's config work will change how this works, but the values should stay the same.05:04
wgrantJust your tests will need to change, if they decide to override configs.05:04
jtvThey don't—wouldn't work for external script runs.05:15
wgrantWell, it can.05:16
wgrantWe have facilities for that now.05:16
wgrantIndeed you probably should.05:16
wgrant(eg. the librarian and DB fixtures push config overlays then write them to disk)05:17
jtvThat may become necessary later as we move this script to python and create more appropriate tests.  Then again, at that point it won't involve script runs any more so we should be able to do more in-memory.05:23
jtvwgrant: you were right by the way: the archivepublisher's "root" setting on production is /srv/launchpad.net/ubuntu-archive.05:25
wgrantjtv: Yup.05:25
jtvThanks for helping me with this.  I'm reluctant to drop the ppa stuff until I've got something of a proper test hammered out, but it'd be good to streamline things then.05:26
=== jtv is now known as jtv-eat
StevenKRight, something odd is going on, since I've added the flag manually, and the cron script still can't see it.05:35
* StevenK doesn't understand feature flags05:39
lifelessStevenK: does your script install a flag handler? [jtv's work was in this area]05:40
StevenKlifeless: jtv added it to LaunchpadScript's run() method from what I can see, and my script (through 2 layers of indirection) bases off it05:41
StevenKlifeless: Unless I'm wrong. What's a flag handler?05:44
lifeless1112 timeouts05:47
lifelessStevenK: featurecontroller or whatever05:47
StevenKIs that enough?05:47
StevenKlifeless: ^05:51
lifelessyeah, should be05:51
lifelessStevenK: whats the feature controller present when your code does a flag lookup ?05:51
StevenKHow do I check that?05:51
lifelessprint ?05:52
StevenKSure, but print *what* ? :-)05:52
StevenKGuessing get_relevant_feature_controller(), which gives None05:55
StevenKlifeless: ^ Which is likely sub-optimal05:56
lifelessStevenK: that is indeed likely to be a problem05:58
lifelessStevenK: is your script threaded?05:58
StevenKlifeless: I have no idea, but I doubt it.05:58
lifelesstimeouts top to bottom - ugh, ugh, ugh, fixed fixed fixed ugh ugh in-progress ugh ugh ugh ugh06:07
lifelessStevenK: so, keep spattering prints around - like after install_feature_controller - until you can see what goes wrong06:08
huwshimiok seriously did someone rename style-3-0.css.in?06:10
lifelesshuwshimi: run bin/buildout06:10
StevenKlifeless: So directly after install_feature_controller, it's still None06:14
lifelessso, either you're looking in the wrong place, or that method is failing ;)06:15
StevenKI don't get what install_feature_controller is supposed to do06:16
jtv-eatStevenK: it's a simple setter for the feature controller, though it only applies to the running thread.06:19
=== jtv-eat is now known as jtv
StevenKI'm close to ripping this out for now06:19
huwshimilifeless: That didn't help. I think it has been renamed.06:20
StevenKI don't understand it, and it seems quite opaque06:20
lifelesshuwshimi: delete bin/sprite-util06:20
lifelesshuwshimi: then run it06:20
StevenKOr make clean; make06:20
jtvStevenK: let's start by establishing that you're talking to the right feature controller.06:21
StevenKBut that's a bigger hammer06:21
jtvStevenK: if get_relevant_feature_controller returns None right after install_feature_controller, then are you sure you didn't pass it a None?06:22
StevenK'install_feature_controller(make_script_feature_controller(self.name))' is the call06:22
StevenKWhich is the line you added to LaunchpadScript06:23
jtvOh actually you don't need to install it; make_script_feature_controller calls install_feature_controller.06:24
jtvAfter which in fact it returns None.06:24
StevenKOh, so it's broken06:24
StevenKIt's fine, I can do it06:25
jtvYou can replace install_feature_controller(make_script_feature_controller(self.name)) with just make_script_feature_controller; or better yet,06:25
jtvmake make_script_feature_controller return the controller instead of installing it.06:25
StevenKWe don't need the controller, so if it installs it, that's enough06:27
StevenKjtv: This was the failing test for me, so I can just fix the bug in my branch if you wish06:27
jtvTrue, it's just nice to export just a single function to set the thing.06:27
jtvNeeds a test also.06:27
StevenKWhich you're working on?06:28
jtvStevenK: pushing fix06:39
jtvbug 73998606:40
_mup_Bug #739986: LaunchpadScript fails to install feature controller <derivation> <feature-flags> <Launchpad itself:In Progress by jtv> < https://launchpad.net/bugs/739986 >06:40
huwshimilifeless: just fyi that file was renamed06:45
jtvStevenK: care to review?  https://code.launchpad.net/~jtv/launchpad/bug-739986/+merge/5429906:46
StevenKjtv: r=me06:48
jtvand sorry for the…06:48
jtvoh wait I already said that didn't I06:49
StevenKA few times :-P06:49
jtvpossibly not enough :)06:49
jtvThis is something that still bothers me about our testing.  Quis custodiet ipsos custodies?06:49
StevenKjtv: You'll toss that through ec2?06:50
jtvI was considering it, yes—meanwhile you could just merge it in06:50
lifelesshuwshimi: it was, but the reason you had a problem was due to a stale built file06:51
lifelesshuwshimi: if you fixed it locally by renaming again, you've done it wrong06:51
huwshimilifeless: I haven't renamed it, I was just getting conflicts within the file and it was renamed and now I'm in a world of hurt with strange diffs, but I think it's completely unrelated to the buildout stuff. I just happened to run into it at the same time.06:53
huwshimilifeless: I wasn't really expecting to come across the changes and renaming of the files without some kind of warning (like an email)06:54
jtvheh.  wgrant, was that you who wrote "I do not care about sources"?  Because that seems to be what's bothering a-f now.  :)  Not sure that we need to fix that though, as long as a Sources file gets generated.06:59
wgrantjtv: I don't recall saying that, but I may have.07:00
wgrantAnyone want to review https://code.launchpad.net/~wgrant/launchpad/restore-archivepublisher-config/+merge/54301?07:00
jtvIt just sounded like you somehow.  :)07:00
jtvI suppose I owe you one, so sure.07:00
wgrantIt's not very difficult :)07:01
spmwgrant: hit jtv for Cake. that way you can start paying us back. /unsubtle-hint07:01
wgrantjtv: (that was cprov)07:01
wgrantBut yes, it does sound like something I'd say.07:02
jtvwgrant: I just approved without comment.  May be a first.07:04
jtv(I did check the bug reference)07:04
StevenKjtv: I'm tossing my branch at ec2. Which means your bug fix might inadvertly land07:05
jtvStevenK: oh woe is us07:05
wgrantjtv: Thanks.07:05
jtvAnd in case the sarcasm didn't drip quite where everyone can see it, I'll add what BBC teletext page 888 does: "(!)"07:06
jtv(I hope I'm not so much older that I now have to explain what teletext is)07:06
StevenKI'm so tempted to ask, now07:06
wgrantEven I know what Teletext is.07:06
wgrantalthough only because I didn't know what a button on the old TV did.07:06
jtvStevenK: there you go, ask william just like you would with any soyuz question.07:06
jtvThe BBC has excellent subtitling on page 888.07:07
jtvSomeone hums half a bar of an ill-remembered melody, off tune, in an anvil factory and the subtitles will tell you it's the 3rd movement from Vivaldi's opus #128 etc.07:07
wgrantjtv: That is surely crucial to the plot.07:08
jtvThey also use different colours for different characters in films, as I recall.07:08
jtvIt was a great help in learning English.07:09
lifelesshuwshimi: renames are normally pretty painless; also having short lived branches avoids a lot of pain07:10
jtvStevenK: in replacing cron.publish-ftpmaster, do I need to call getPubConfig on every archive that the script is to work on?07:38
wgrantpublish-distro will do that for you.07:40
wgrantBut the dists musical chairs probably needs it run before publish-distro.07:40
wgrantBut youi'll be moving that into publish-distro soon.07:40
jtvI expect I'll probably need to do some setup before then, yes07:40
jtvWill I?07:41
wgrantI hope so.07:41
wgrantIt belongs there.07:41
jtvFor now I've been far too busy getting it to run at all.  Probably wouldn't have been wise to start hunting for cleanup opportunities too soon.  :)07:43
jtvMy next step is to pythonify the shell script as-is.07:43
wgrantI'm not sure that Pythonifying it directly is particularly valuable.07:44
jtvIt's just one of the steps.07:44
jtvIt means that I can use config instead of shell variables that must match the config, for one.07:44
jtvIt also means that I can use dedicated temporary directories again, which helps avoid pollution by previous test runs.07:45
jtvAnd of course it means I can run unit tests and get the results the same day.  :)07:46
LPCIBotProject windmill build #85: FAILURE in 1 hr 6 min: https://lpci.wedontsleep.org/job/windmill/85/07:49
lifelesshave I mentioned how much I love that Storm and sqlobject result sets are incompatible with each other ?08:00
* jkakar hugs lifeless08:01
jkakarlifeless: Isn't the problem just that the SQLObject one is incompatible with Storm? ;b08:02
lifelessjkakar: they both ship in the storm tarball ><08:02
jkakarlifeless: I know, I was just being facetious... sorry, coffee hasn't set in yet.08:02
lifelessjkakar: it makes migration tricky08:02
lifelessjkakar: :)08:02
lifelessjkakar: end of long day for me, so the reverse...08:02
jkakarlifeless: Heh08:02
spmheya jkakar!08:04
jkakarspm: Hi! :)08:05
jtvjkakar: so you miss us after all, do you?  :)08:16
jkakarjtv: I'm having fun at the new gig, but yes, I do miss you. :)08:17
rvbawgrant: Hi, I'd appreciate a review of https://code.launchpad.net/~rvb/launchpad/db-dds-fix-filter-form-add-parent-name/+merge/5423908:20
* lifeless wonders if http://dev.launchpad.net/ReviewingCodeImports?action=diff&rev1=9&rev2=10 was intended08:23
lifelesswgrant: I need some blurb aboutthe change for oem08:28
wgrantrvba: Done.08:32
=== jam1 is now known as jam
wgrantlifeless: :(08:32
=== wgrant changed the topic of #launchpad-dev to: Performance Tuesday | https://dev.launchpad.net/ | firefighting: - | On call reviewer: - | https://code.launchpad.net/launchpad-project/+activereviews
LPCIBotYippie, build fixed!08:33
LPCIBotProject windmill build #86: FIXED in 43 min: https://lpci.wedontsleep.org/job/windmill/86/08:33
lifelesswgrant: I can just say 'xss hole and escaping blah', but perhaps a little more accuracy would help?08:33
rvbawgrant: thx08:33
lifelesswgrant: if you're doing up an incident report, just make a clear summary, and I'll copy that across - avoids you duplicating effort08:34
lifelesslib/lp/bugs/tests/../doc/bugnotification-sending.txt", line 1260, in bugnotification-sending.txt08:34
lifeless^ db-devel failure.08:34
lifelessring any bells?08:34
lifeless   - Matching filters: Allow-comments filter08:35
lifeless    ?          ^ ^ ^^08:35
lifeless    + Matching subscriptions: Allow-comments filter08:35
lifeless    ?          ^^^^^^ ^ ^^^08:35
lifelesssomeone didn't use ec2 :)08:35
lifeless(or ran into a landing race I guess)08:36
wgrantlifeless: Merge issue. Fix already landed.08:40
wgrantlifeless: https://wiki.canonical.com/IncidentReports/2011-03-22-LP-unescaped-json, but the summary is not very good.08:45
henningejtv: Hi!08:46
jtvhi henninge08:46
=== almaisan-away is now known as al-maisan
henningejtv: I picked up bug 605924 as you may have noticed. I just commented on what I plan to do.08:47
_mup_Bug #605924: Clean up IHasTranslationTemplates <lp-translations> <tech-debt> <Launchpad itself:In Progress by henninge> < https://launchpad.net/bugs/605924 >08:47
henningeif you are interested.08:47
* jtv has a look08:47
jtvhenninge: looks good—I agree that the hard part is to find all uses and make sensible decisions for them.  The tests probably aren't going to find all of those, but that's no excuse for ignoring the issue forever.08:50
henningejtv: well, I am picking it up because it is hindering me in using this properly.08:50
jtvThat's as good a reason as any other, isn't it?  :)08:51
henningewell, it certainly raises its priority ... or urgency? whatever08:54
lifelesswgrant: cool; are you forcing a build?08:56
wgrantlifeless: It's already building again.08:56
wgrantBecause there was the testfix rev in the queue.08:56
adeuringgood morning08:59
jtvmorning adeuring09:00
jmllifeless: hello09:00
adeuringhi jtv09:00
lifelessjml: hi09:01
jmllifeless: skype?09:02
lifelessjml: aye09:02
jmllifeless: hello, I can now hear you09:03
jmllifeless: Total: 231 (+42, -48 since 2011-03-15)09:07
wgrantlifeless: Thanks.09:08
lifelesswgrant: de nada, thank you!09:08
poolieis staging down?09:09
pooliei'm getting a 504 gateway timeout trying to make api calls against it09:10
poolieit might be just me09:10
wgrantstaging is down, yes.09:10
wgrantFix landed.09:10
wgrantWe might be able to get it going again mid-morning tomorrow.09:11
poolieis there any point filing a bug saying the api error is less clear than the web ui one?09:14
pooliethis seems like another reason to make lplib default away from staging09:22
wgrantMorning bigjools.09:22
wgrantbigjools: I've restored those archivepublisher config schema entries in db-devel, so the configs work again.09:23
bigjoolswgrant: why?09:23
wgrantbigjools: staging broke.09:23
bigjoolsyes, it was broke before and Chex cowyboyed it09:24
wgrantAlso because having to merge configs in lockstep with deployments sucks.09:24
wgrantWe're going to have to cowboy it every time it updates...09:24
wgrantAnyway, fixed now.09:24
bigjoolsI detest this config system09:24
wgrantI just have to remove the entries right after the next deployment.09:24
bigjoolsyes, but it's hassle and pain and annoyance09:24
wgrantIt is.09:25
StevenKBloody hell. If it isn't the backup killing garbo-hourly, it's a vacuum09:26
bigjoolswgrant: nice security fix earlier :)09:26
wgrantbigjools: Yeah :/09:26
bigjoolsyou'd think it having been broken once before there'd be a test case09:26
wgrantI plan to add one tomorrow.09:26
wgrantAlso I might upgrade our simplejson and fix it properly.09:28
wgrantSince IE prevents any sensible fix.09:28
bigjoolsheh, that explains your FB update earlier09:30
wgrantI mean, XHTML was only standardised 11 years ago.09:32
pooliewow, hooray for bug expiry09:38
LPCIBotProject db-devel build #478: STILL FAILING in 5 hr 4 min: https://lpci.wedontsleep.org/job/db-devel/478/09:38
lifelessjml: 11 /   18  Product:+code-index09:41
lifelessjml: https://code.qastaging.launchpad.net/++profile++show/launchpad09:42
lifelessjml: 06699-12526@SQL-launchpad-main-slave SELECT DISTINCT BugBranch.branch FROM Bug, BugBranch WHERE BugBranch.branch IN (24637, 34755, 34756, 352362, 423464, 423252, 438596, 423710, 438533, 28862, 421710, 425429, 425609, 424278, 422318, 423317, 423707, 423704, 422533, 421039, 423618, 422191, 423555, 423341, 423342, 423273, 423359, 423465, 419565, 423403, 423337, 30466, 421067, 422299, 421762, 422907, 422741, 422712, 319807, 42209:43
lifelessis 6000ms09:43
lifelessjml: https://lp-oops.canonical.com/oops.py/?oopsid=1906G1635#repeatedstatements10:00
=== gmb changed the topic of #launchpad-dev to: Performance Tuesday | https://dev.launchpad.net/ | firefighting: - | On call reviewer: gmb | https://code.launchpad.net/launchpad-project/+activereviews
=== almaisan-away is now known as al-maisan
lifelessjml: https://lp-oops.canonical.com/oops.py/?oopsid=1906G1635#statementlog - query 39 and 40 appear identical to me10:42
lifelessjml: both are 'bmps where the source is for this product and both branches are visible10:42
lifelessjml: I think we could get a little fuzzy and use 'the source is for this product and the source is visible' - because you cannot /create/ a bmp targeting a branch you cannot see:10:43
lifelesssome person subscribed to the source might see the *count* of a bmp they cannot otherwise see10:44
lifelessbut would that matter? anonymous users wouldn't get wrong data, nor would authenticated users with no access to the source branches10:44
lifelessdoing that makes the query run in 70ms10:45
sladensorry to bother people---I've been searching for about 15 minutes and haven't turned it up yet10:48
sladenI've had an email passed to me about visual/side-by-side diffing in code-hosting of non-code10:48
sladenalong similiar lines to  https://github.com/cameronmcefee/Image-Diff-View-Modes/commit/8e95f70c9c47168305970e91021072673d7cdad810:49
sladenI remember this being discussed at length ~3 years ago, but I haven't turned up any blueprints, mailing list posts or even bugs against launchpad itself10:49
jmllifeless: looking...10:50
sladenah  https://answers.launchpad.net/bzr/+question/12104910:50
sladen"Can Bazaar meet requirements for game-development workflows?"10:51
lifelesssladen: yeah, discussed on canonical-launchpad and canonical-bazaar too:)10:52
sladenlifeless: my apologies.  Guess I need to join those to read the archives10:53
lifelessjml: actually, I've got a 130ms plan10:56
lifelessjml: with half the cost estimate10:56
jmllifeless: nice10:56
_mup_Bug #736008: Product:+code-index timeouts <timeout> <Launchpad itself:Triaged> < https://launchpad.net/bugs/736008 >10:57
deryckMorning, all.11:01
=== henninge_ is now known as henninge
henningedanilos, jtv: Any idea why we have this in our code (for productseries and distroseries) ? http://paste.ubuntu.com/583755/11:29
henningedanilos, jtv: I mean, why override the usage of the parent  object?11:29
henningeAsside from the fact that we get a nice loop here11:30
henningebecause the template cound is dependend on the usage ...11:30
jtvAh, that's fun…11:30
jtvIn any case it seems like a strange fallback.11:31
jtvIt was decided at the time that there is basically no usage as long as there are no templates, and now we do allow that again.11:31
henningejtv: I understand the "usage" more like an expression of the maintainers intend.11:36
jtvThat was historically the idea behind official_rosetta, yes.11:36
henningewell, the question is what are the consequences of the usage value?11:37
jtvBut in UI terms, I thought the idea had shifted (as part of the cross-app "usage" renovation) to "there is a stated intent and there is a usable setup."11:37
henningeok, but this is doing "a stated intend OR a usable setup"11:38
henningewhich is strange.11:38
henningeI'd rather have LP say "The user wants to use launchpad for translations but has not yet configured it fully."11:39
henningeAlso, the presence of templates does not imply "LAUNCHPAD" usage, it might also be external templates being mirrored in.11:39
henningethrough a branch11:39
henningewhich is actually a common setup we are trying to achieve for upstream message sharing.11:40
jtvI agree with your desire, but I'd talk to sinzui and… was it jcsackett who re-did the usage flags?11:40
henningethanks, jtv11:40
henningejtv: oh, I just saw that there is wrong line in my paste11:41
henningeline 511:41
henningeI hope you were not discussing that? ;-)11:42
jtvNow I have to look again…11:42
henningeHere is the correct version that reflects the current code: http://paste.ubuntu.com/583761/11:42
jtvhenninge: oh, that was so weird my eyes just skipped over it.11:43
henningedanilos: ^ in case you read the backscroll11:44
jtvhenninge: and "usage" is "self.usage"?11:45
henningejtv: this is the correct paste. really now. http://paste.ubuntu.com/583762/11:46
henningeusage = self.product.translations_usage11:46
henningesorry for the confusion11:46
jtvAh, that was the sort of line my eyes assumed must be there in previous versions.  :)11:46
=== al-maisan is now known as almaisan-away
benjileonardr: did my info help with your start up event problem?12:27
leonardrbenji: yes, thanks!12:27
=== matsubara-afk is now known as matsubara
jcsacketthenninge: i see that jtv recommends talking with me and/or sinzui? something about translations_usage?12:59
bigjoolsTypeError: getPublishedSources() got an unexpected keyword argument 'status'12:59
* bigjools blinks12:59
abentleyleonardr: enabling the IJSONRequestCache.objects functionality for anonymous users causes xx-bug-obfuscation.txt to fail.  I think this mechanism may be too revealing.13:05
leonardrabentley: what's the failure?13:05
abentleyleonardr: http://pastebin.ubuntu.com/583778/13:05
=== almaisan-away is now known as al-maisan
leonardrabentley: so the problem is not that None gets into the cache, it's that something gets into the cache that shouldn't13:06
abentleyleonardr: yes.13:07
leonardri don't think "don't show the cache at all" is a winning long-term strategy. that cache is becoming more and more important13:07
leonardrthe code that populates the cache needs to learn some discretion13:07
leonardrdo you agree?13:07
abentleyleonardr: no, I don't.13:07
abentleyleonardr: I think it suggests that we should be specific about the data we pass on.13:08
=== al-maisan is now known as almaisan-away
leonardryou may not agree with me, but i agree with you13:08
abentleyleonardr: rather than passing whole objects.13:08
abentleyleonardr: We should just pass the specific attributes we need.13:08
leonardrif we had the expand/filter system in place we could exploit that13:10
leonardrwhat attributes do you want to pass?13:10
abentleyleonardr: For ProductSeries, title, web link, autoimport status, project link.  For Branch, unique_name, web link.  For Project, translations_usage, title, web link.13:13
leonardrabentley: i think you may have uncovered a larger bug. presumably the anonymous user is seeing the uncensored email address in the representation of the bug13:13
leonardrwhat happens if the anonymous user just requests that bugtask through the web service?13:13
abentleyleonardr: no idea.13:15
leonardrabentley: i'm going to speak with the authority of someone who won't be working here next week :)13:15
leonardrputting entire objects into the cache when you don't need the whole thing is inefficient, but it should not cause data breaches13:16
leonardrthere's something wrong with the way the cache is populated that's causing xx-bug-obfuscation to fail13:16
abentleyleonardr: the email address is appearing in the bug description.13:17
leonardrright. but why is launchpad giving an uncensored bug description to an anonymous user? either the censoring isn't happening when a json representation is requested, in which case the web service as a whole is leaking data13:17
leonardror when we make an internal request for the json representation of the bug, we are for whatever reason escalating the user's privileges13:18
leonardrso they see an uncensored version13:18
leonardreither way, refusing to show the cache at all is just papering over the problem13:19
=== almaisan-away is now known as al-maisan
abentleyleonardr: if the privileges are being escalated, they're being escalated after the tal condition used to be evaluated, which is very late.13:19
abentleyleonardr: Well, I suppose they could be escalated and then dropped by the time the tal is evaluated.  But the template knows we've got an unauthenticated user.13:20
henningejcsackett: Hi, yes about its intended meaning.13:33
henningejcsackett: I understand the usage flags to reflect the intention of the maintainer of how to use that particular part of LP for their project.13:34
jcsacketthenninge: right. as i recall, we had some confusion of what best reflected that for translations, as translations has quite a few more "nobs" than other parts of launchpad.13:35
jcsackettat least when we initially put the enums into use, translations used the enums plus some other information to determine what would be showed.13:35
* jcsackett doesn't know what's become of that since.13:36
henningejcsackett: I was particularly surprised to find this in the code http://paste.ubuntu.com/583762/13:36
henningejcsackett: ok, I guess I can feel free to redefine that, then ... ;-)13:36
dpmhi jcsackett, bug 740153 looks more like a LP Translations bug to me (possibly related to message sharing?) than a synaptic bug. Shouldn't it be reassigned to LP?13:37
_mup_Bug #740153: Translations skewed for synaptic <synaptic> <ubuntu> <upgrade> <NULL Project:Invalid> <synaptic (Ubuntu):New> < https://launchpad.net/bugs/740153 >13:37
jcsackettdpm: that could be. i may have misunderstood the complaint.13:37
dpmjcsackett, the reported was saying that the translations in LP were overwritten by others done a long time ago, which I'd guess couldn't have happened in Synaptic itself, but in LP13:38
jcsackettdpm: ah, yes. okay, that should be targeted back to LP.13:39
jcsacketthenninge: correct. there was some ongoing work on translations when we were phasing that in (perhaps recife?) that was going to require changes to the translations_usage property.13:39
jcsackettdoes that jive with what concerns you?13:40
henningejcsackett: possibly.13:49
henningejcsackett: I am trying this out here to see what happens.13:49
dpmjcsackett, would you mind reassigning it to LP when you've got a minute? I don't seem to be able to make it, I get a "Too many matches. Please try to narrow your search." when trying to change the product13:51
jcsackettdpm: i'm getting the same issue. :-P i'll reassign it soon.13:51
dpmjcsackett, ah, and I thought you launchpadders had superpowers to overcome the issue :P13:52
jcsackettdpm: we have many superpowers. in this case, the super power of being very patient with launchpad may be most applicable. :-)13:53
henningeabentley, adeuring: I will relocate quickly now, might be a bit late for the stand-up.13:53
jcsackettdpm: and we're good.13:58
jcsackettthanks for catching my mistake. :-)13:58
dpmjcsackett, awesome, thanks!13:58
bachi deryck, can i quiz you about some structural subscription minutiae?14:09
=== leonardr changed the topic of #launchpad-dev to: Performance Tuesday | https://dev.launchpad.net/ | firefighting: - | On call reviewer: gmb, leonardr | https://code.launchpad.net/launchpad-project/+activereviews
deryckbac: you can, but I'm about to do a call with abentley.  Can we chat after that?14:13
bacderyck: sure14:13
deryckok, cool.  I'll ping when I'm free.14:13
sinzuihenninge: danilos: can either of you assist me in answering https://answers.launchpad.net/launchpad/+question/14814114:18
henningesinzui: looking14:19
henningesinzui: unfortunately he is right. That feature has been removed.14:23
henningeunfortunate for his project, that is.14:23
sinzuihenninge: Why did we remove this for projects. I think I understand the issue for Ubuntu14:25
henningesinzui: I am not sure, actually. It may be pure oversight.14:25
sinzuihenninge: Should I report a bug asking that the new/translated status for upstreams be restored for projects?14:30
henningesinzui: Yes, at least to have a point of discussion why this was done.14:32
sinzuiokay. Thank you14:33
LPCIBotProject db-devel build #479: STILL FAILING in 5 hr 1 min: https://lpci.wedontsleep.org/job/db-devel/479/14:39
dpmsinzui, I've just caught the conversation re: new/translated status in projects. When you file the bug, would you mind subscribing me or pointing me to it? I'd be interested in following the discussion. Thanks!14:48
adeuringgmb: leonardr: could one of you please review this MP: https://code.launchpad.net/~adeuring/launchpad/no-package-translation-uploads-when-sharing/+merge/54356 ?14:48
leonardri got it14:48
sinzuidpm bug 74022514:49
_mup_Bug #740225: The differences between New and Translated for upstreams was removed <rosetta-imports> <upstream-translations-sharing> <Launchpad itself:New> < https://launchpad.net/bugs/740225 >14:49
jamI just confirmed another XSS vulnerability in loggerhead for bug #74014214:49
jamhow do we roll out fixes for that sort of thing?14:49
dpmthanks sinzui14:49
adeuringleonardr: thanks!14:51
jamI'd also like to avoid pushing the fix making it public14:52
=== al-maisan is now known as almaisan-away
=== almaisan-away is now known as al-maisan
leonardradeuring: r=me15:03
adeuringleonardr: thanks!15:03
=== al-maisan is now known as almaisan-away
=== Ursinha-afk is now known as Ursinha-lunch
deryckbac: about ready now.  voice or chat?15:37
bacderyck: mumble might be quickest15:37
deryckok.  firing it up....15:38
deryckbac: what room?15:40
deryckbac: just drag me around ;)15:40
=== salgado is now known as salgado-lunch
=== beuno is now known as beuno-lunch
=== matsubara is now known as matsubara-lunch
=== Ursinha-lunch is now known as Ursinha
=== beuno-lunch is now known as beuno
=== salgado-lunch is now known as salgado
=== deryck is now known as deryck[lunch]
jcsackettsinzui: do you know much about how security adapters work?17:15
jcsackettor, anyone, same question? i'm having trouble getting an adapter (or really a new security.py file) working.17:19
bigjoolswe really need to fix the ajax-forms-lose-data problem17:20
bigjoolsjust got burned big time17:20
sinzuijcsackett: I do now quite a bit17:21
bigjoolsby clicking a non ajax find-person link on the bug filing page :/17:21
sinzuijcsackett: is this about adaption to IFAQTarget or IQuestionTarget17:21
jcsackettit's a security adapter for IQuestion.17:21
jcsackettsinzui ^17:21
* sinzui starts mumble17:21
* jcsackett starts it too.17:22
jcsackettsinzui: i suspect you cannot hear me. i cannot hear you either. :-P17:23
* sinzui stabs mumble17:24
jcsacketti heard you.17:24
jcsacketti will restart mumble as well.17:24
jcsackettsinzui: unrelated, are there still long term plans to deprecate polls (there's a question in #launchpad)17:25
sinzuijcsackett: I see the mic setting went missing. I was there 18 hours ago17:25
sinzuiThey are deprecated. We do not support them. There exist only for the Ubuntu community17:25
jcsackettsinzui: i can hear you.17:26
jcsackettbut clearly you cannot hear me. :-P17:27
sinzuino I cannot17:27
jmlabentley: I have some questions about the TwistedJobRunner17:41
abentleyjml: shoot17:42
jmlabentley: in getTaskSource, why does the producer exhaust the iterReady() iterator before the loop begins?17:42
jmlabentley: hmm. actually another way of putting this is, what are you trying to get out of using PollingTaskSource?17:43
abentleyjml: I believe that's so that it runs for a finite time, instead of pulling jobs infinitely.17:43
abentleyjml: PollingTaskSource was existing Twisted code for doing this kind of thing.17:45
jmlabentley: I think we can achieve the same effect more simply by using DeferredSemaphore instead of PollingTaskSource and ParallelLimitedTaskConsumer, but I'm a little bit hesitant because I don't see many tests.17:45
LPCIBotProject windmill build #89: FAILURE in 1 hr 17 min: https://lpci.wedontsleep.org/job/windmill/89/17:46
jmlabentley: also, that reminds me, TwistedJobRunner uses ParallelLimitedTaskConsumer with a hard-coded maximum number of 1 task at a time. What's the reason behind that?17:46
bigjoolslifeless: and as if by magic, bug 740250 appears17:47
abentleyjml: The idea was that we could relax the maximum when we felt that would improve performance.17:47
_mup_Bug #740250: Timeout accepting packages  <Launchpad itself:New> < https://launchpad.net/bugs/740250 >17:47
jmlabentley: fair enough.17:47
jmlabentley: last question, I think...17:47
jmlabentley: I think I've isolated the intermittent failure in TestTwistedJobRunner.test_timeout. It comes from ampoule killing the job before the custom signal handler is installed17:48
abentleyI don't think that's possible.17:48
jmlabentley: I can prove it with science.17:49
abentleythe signal handler is installed when the first job runs, right?17:49
jmlhmm. interesting point.17:50
jmlOK. I can say with much greater confidence that if I reduce the lease_length in the test from 1 to a very small number, like 0 or 0.01, then the "intermittent" failure becomes deterministic.17:51
jmlabentley: is it guaranteed to re-use the same process?17:51
abentleyjml, that's what it's supposed to do, and I didn't see anything to make me believe otherwise.17:52
jmlabentley: good answer :)17:52
abentleyjml: I haven't dug through ampoule's internals thoroughly, and it's been a while since I looked at them at all.17:53
jmlabentley: I had a bit of a poke. There's definitely something racy going on with the lease_length (ampoule's "deadline").17:54
abentleyjml: Okay, IIRC 0 is treated completely stupidly.17:55
abentleyjml: I don't remember the details.17:55
jmlabentley: it's a bit obscured by the abstraction in job.17:55
jmlabentley: ok. I'll keep poking.17:55
jmlabentley: are there tests for the TwistedJobRunner other than TestTwistedJobRunner?17:55
abentleyjml: There are tests for the branch_merge_proposal_jobs script, which uses it.17:56
jmlabentley: thanks. I'll use those as backup.17:56
bigjoolsg'night everyone17:59
jmlbigjools: g'night.18:00
abentleyjml: I wonder if setting the value to a very small number would cause the deadlineCall to fire before the callRemote?18:03
jmlabentley: that does happen. Although interestingly, the failure in the test is that the job *does* complete successfully (you can tell because the wait goes up to 30s+)18:03
abentleyjml: That's the failure case I hadn't been able to pin down-- the unexpected success.18:04
jmlabentley: I guess I'll instrument ampoule & see what happens.18:05
abentleyjml: I think I was wrong about the 0 handling, or else it was improved.  In any case, that's the timeout handling, and we're using deadlines, IIRC.18:08
=== deryck[lunch] is now known as deryck
jmlabentley: it uses the same mechanism, afaict.18:14
abentleyjml: well, similar, but without special-casing 0.18:15
abentleyleonardr: I'm writing some code that wants to treat an object the same whether it's from the LP.cache or retrieved from the web service.18:35
leonardrabentley: that's a good place to be going. what problem are you having?18:35
abentleyleonardr: But WS objects use .get('foo') and LP.cache objects use ['foo'].18:36
leonardrprobably because ws objects are wrapped in a LP.Entry class (or whatever it's called), and LP.cache objects are just data structures18:36
abentleyleonardr: right.18:37
leonardryou should be able to wrap the data structure yourself, and i'd even say that should be done automatically18:37
abentleyleonardr: sounds reasonable.18:38
leonardrbenji, i've once again reached the point where i can't stand to work on this multiversion stuff anymore. do you want to talk about filter/expand?18:57
benjileonardr: sure, say 10 minutes from now?18:59
jmlabentley: OK. I've got it figured out. http://paste.ubuntu.com/583931/19:01
jmlabentley: the signal is being sent before the callRemote call...19:01
jml(as you said)19:01
jmlabentley: what this means is that the signal handler is triggered, raises an error, and then ... well, who cares? it's not going to terminate the process.19:02
abentleyjml: Cool.  That's great you were able to track it down.19:03
abentleyjml: so we need to tweak ampoule so it doesn't try to kill processes until they have launched?19:04
jmlabentley: not sure. in this case the process has launched, it's just that the command isn't running. tbh I'm not sure by what mechanism an exception that is raised in a signal handler is propagated out.19:04
jmlabentley: experimenting now...19:04
jml*maybe* something to do with hooking up the OOPS system to the Twisted log?19:08
jmlerrors raised in sighup handlers while reactor is running get treated as Unhandled errors, I think.19:09
leonardrbenji: i'd like to start the chat in irc if that's ok19:12
=== matsubara-lunch is now known as matsubara
benjileonardr: sounds good19:12
leonardri'm vacillating on having it here vs. in another room where we won't flood everyone else's conversations19:13
abentleyjml: I see what you mean.19:13
leonardrlike the defunct #launchpad-meeting19:13
leonardranyway, let me try to find the stuff i wrote on this before19:14
leonardrhere we go: https://dev.launchpad.net/Foundations/Webservice/DraftProposal19:16
leonardri think the only thing not mentioned in that document19:17
benjileonardr: we can do it in PM, or we can just fabricate a chan., like #expand-and-filter19:17
leonardrlet's do it in pm, i don't think there's all that much to discuss now that i've found that document19:18
leonardrsince it never got much further than that document19:18
leonardrbasically i just think this is really important to the future of the web service and i don't want it to fall through the cracks when i leave19:18
benjiyep, agreed19:19
jmlabentley: so actually, it's just that the exception is raised in whatever code happens to be running at the time. maybe we can store some state ("hey, we got HUPped") and then raise during runJob if we see that state?19:25
abentleyjml: The exception being TimeoutError?19:29
jmlabentley: yes, or indeed anything that 'handler' might raise.19:30
abentleyjml: And if the job hasn't started, that would be raised in ampoule code, I guess.19:30
abentleyjml: And then, for some reason, it's not causing the process to terminate.19:31
jmlabentley: sort of. It will be raised as an unhandled error, because it's during the reactor.run() in BOOTSTRAP19:31
jmlabentley: e.g. http://paste.ubuntu.com/583943/ (simplified version)19:31
jmlthe reactor keeps running19:31
jmland whatever things were set up to listen to connections are still set up19:32
jmlin this case, the AMP protocol handlers19:32
abentleyjml: The reactor in the child process keeps running?19:32
jmlabentley: yes.19:32
jmlabentley: if the SIGHUP happens between jobs, it's only the child process that ever learns about the raised error.19:32
abentleyjml: I guess your solution makes some sense, but it doesn't feel satisfying.  What if no job ever gets run in the child?19:35
jmlabentley: I agree that it doesn't feel satisfying. I don't know what would happen in that case, or what we desire to happen.19:36
jmlabentley: I guess the timeout/deadline/lease is tied to the job rather than the child process.19:36
jmlabentley: so maybe it wouldn't matter.19:36
abentleyjml: true.19:36
abentleyjml: What about the case where the timeout fires after the job completes, but before the next is dispatched?19:37
jmlabentley: then in the simplest implementation, the next job would "time out" instantly19:37
jmlor at least, that's what it would look like.19:38
jmlI'm also worried about making timeout code too complex. It's supposed to be something you can rely on when other things fail.19:38
abentleyjml: Fully agreed.19:39
abentleyjml: Can we tweak this so that the child always dies when we raise TimeoutError?19:39
jmlabentley: probably. it's easy enough to sys.exit or reactor.stop or something. how does ampoule handle dead children?19:39
jcsackettsinzui: can i set you as help contact in #launchpad?19:40
jmleven if we stopped the process, we'd have to figure out how to tell the parent that we did it because of a timeout. I guess we have OOPS logging available to us from BaseJobRunner.19:41
abentleyjml: I don't know how it handles dead children, but it expects timeouts to kill children, so it should expect this.19:43
jmlabentley: OK. I'll give it a try, see how it goes.19:44
jmlrelatedly, I'd like to have a few more direct unit tests for this code.19:44
jmlnot tonight though.19:44
LPCIBotYippie, build fixed!19:45
LPCIBotProject db-devel build #480: FIXED in 5 hr 5 min: https://lpci.wedontsleep.org/job/db-devel/480/19:45
abentleyjml: I guess at the time it seemed like there weren't a lot of units to test.19:45
jmlabentley: I know the feeling. maybe there aren't, but after debugging this for a while I'd like to give it a try.19:47
jmlabentley: we'll have to do some work to translate the death into a TimeoutError, but I think it can be done19:51
jmlbut that's enough from me for this evening19:52
jmlabentley: thanks for the help.19:52
abentleyjml: no problem.19:52
abentleyjml: good to get some fresh eyes on this.19:52
jmlg'night all.20:11
sinzuijcsackett: I am so sorry. I forgot :(20:12
jcsackettsinzui: no worries, it's been a quiet day.20:12
jcsacketti just didn't want to switch you over if you were busy.20:13
bachi sinzui20:58
wallyworld_benji: hi. did you get a chance to look at my lazr restful enhancement? i was hoping to check with leonard but he's not around atm it seems21:05
benjiwallyworld_: yep I looked at it and didn't see anything bad jump out at me, I'd like to give it some more thought and get back to you tomorrow, how's that?21:10
bachi sinzui21:10
baci wanted to ask you about the new hidden menu items and the use of the invisible-link class21:11
bacit doesn't seem to do what i thought it did, i.e. make the link invisible21:11
wallyworld_benji: that's fine thanks. i'll continue on with a branch to use the new stuff to fix the actual bug and we can revisit when you are ready21:11
bacsinzui: was i correct in understanding the link would be present but invisible until i removed the class in JS?21:12
sinzuibac: yes21:13
bachmm, ok21:13
sinzuibac: let me look for a page with such as link21:13
LPCIBotYippie, build fixed!21:37
LPCIBotProject windmill build #90: FIXED in 1 hr 8 min: https://lpci.wedontsleep.org/job/windmill/90/21:37
lifelesswgrant: ping me when you're back22:09
lifelesswgrant: back yet?22:55
wgrantlifeless: Hi.23:23
lifelesswgrant: so, why is the id desc sort important?23:24
wgrantlifeless: For the POST? It's probably not; that query shouldn't be happening at all.23:25
wgrantFor the GET... what other order is there?23:25
wgrantApart from date_created, which is the same issue.23:25
lifelesswgrant: so I proposed distroseries desc, status desc, archive desc, PackageUpload.id DESC23:25
lifelesswgrant: distroseries and status are constants23:26
lifelessso this is known as 'noddy fool the planner stuff'23:26
lifelessarchive has two values - 1, 53423:26
wgrantIt's fooling the planner into making a bad decision.23:26
lifelesswgrant: good decision23:26
wgrantBad, because the ID sort is unindexed in that case.23:27
wgrantThis will probably exacerbate timeouts in the DONE case.23:27
lifelesswgrant: huh, no, id is in the index23:27
wgrantOh, so it doesn't use it even with the full index?23:27
wgrantI suspect your index is buggy.23:27
wgrantpackageupload(archive, distroseries, status, id) is what I think is ideal.23:28
lifelesscreate index packageupload__distroseries__status__archive__idx on packageupload(distroseries, status, archive, id);23:28
lifelessis what we tried23:28
wgrantThat's better for this particular query, but worse for others, but mine worked fine on mawson.23:28
wgrantCan you tell why the planner is avoiding the index?23:29
lifelessLimit (cost=0.00..105.89 rows=31 width=36) (actual time=0.106..0.108 rows=1 loops=1)23:29
lifeless   -> Index Scan Backward using packageupload__distroseries__status__archive__idx on packageupload (cost=0.00..5365.99 rows=1571 width=36) (actual time=0.104..0.106 rows=1 loops=1)23:29
lifeless         Index Cond: ((distroseries = 104) AND (status = 0))23:29
lifeless         Filter: (archive = ANY ('{1,534}'::integer[]))23:29
lifeless Total runtime: 0.159 ms23:29
lifelesswgrant: what are the other queries? theres no reason for use to ues the same query for different cases23:30
lifelessbah, you know what I mean23:30
wgrantlifeless: Everything except that page is driven by archive, not distroseries. So having archive first is going to be more generally useful.23:31
lifelesswgrant: anyhow, *why* do we need id to sort before archive *on this page*23:31
wgrantlifeless: Because it's meant to be a chronological ordering, not have every partner upload ever first.23:32
wgrantPerhaps if primary was first.23:32
wgrantBut definitely not partner.23:32
lifelesswgrant: this is for processing NEW right?23:32
wgrantlifeless: Not just NEW, but yes.23:33
wgrantlifeless: The other statuses get looked at to see what has happened to various packages.23:34
wgrantAnd having to scroll through an indeterminate number of pages of partner to get to the latest uploads is not going to make people happy.23:34
_mup_Bug #276950: DistroSeries:+queue Timeout accepting many packages queue page <lp-soyuz> <queue-page> <timeout> <Launchpad itself:Triaged> < https://launchpad.net/bugs/276950 >23:34
wgrantBoth because it's stupid, and because it's partner.23:34
wgrantlifeless: What if you try another series?23:35
wgrantThe planner is being really stupid here.23:35
lifelesswgrant: this is ubuntu23:36
lifelessno ?23:36
wgrantlifeless: Ubuntu and Canonical Partner.23:36
lifelesswgrant: so, I propose we take a different approach to fixing this23:36
lifelesswgrant: a) define the scope23:37
lifelessb) solve that scaope23:37
lifelessc) wait for others to have issues23:37
lifelesstheres no a-priori requirement to have the same query generated by python for different use cases.23:37
wgrantThe same query is fine.23:38
wgrantPostgreSQL's planner is not.23:38
lifelessfolk shouldn't be scrolling through pages and pages to get to things23:39
lifelessthats nuts anyway23:39
lifelessso I really don't think we should care about status not in (0,1)23:39
lifelessand for status in (0,1) its a work queue thats meant to be driven to zero; it shouldn't normally matter if we group on archive or not23:40
wgrantThese postgres workarounds are piling up.23:40
wgrantBut OK.23:40
lifelesswe can do a partial index - (date_created desc, archive, distroseries) where status in (0,1)23:41
lifelessthat models the work queue case accurately.23:41
lifelesswhich is *always* going to be lopsided23:41
lifelessthe non-queue case is 2.7MILLION rows23:41
wgrantlifeless: And the indexes handle that trivially, when they are properly used.23:42
wgrantBut we cannot make them be properly used.23:42
lifelesswgrant: storing a work queue in a historical table is improper use23:42
wgrantBecause postgres doesn't let us override its bad judgement.23:42
lifelesswgrant: thats why postgresql is having trouble23:42
wgrantlifeless: It depends on your definition of "proper", but probably.23:42
lifelessproper = will work well for the DB stack we're using23:43
wgrantI would s/proper/hackish/23:43
lifelesswgrant: working against the stack will be hard23:44
lifelesswgrant: its not adroit :P23:44
wgrantBut it's still a really bad hack.23:44
wgrantWe probably have no choice.23:44
lifelesswgrant: what makes it that ?23:44
wgrantBut that doesn't make it good.23:44
lifelesswgrant: seriously, we're not using bdb23:44
wgrantlifeless: We are changing data models and rewording queries to convince the postgres planner to do exactly what we want it to do.23:45
wgrantWhen we know exactly what we want it to do, but we can't tell it that.23:45
lifelesswgrant: you're talking about query hinting ?23:45
lifelesswgrant: how would you describe what we want the planner to do?23:46
lifelesswgrant: (in english) - because looking at the indices *and the query constraints* I think its being pretty sane23:46
lifelessspecifically, its looking for a small number of rows near the end of the table by walking backwards.23:47
lifelessits been told:23:47
lifeless - we don't want every row (limit 31) and we want the beginning of the sequence (offset 0)23:47
lifelessso its a very smart choice.23:47
wgrantlifeless: It's avoiding using an index which is perfect for that query.23:48
wgrantWe know that.23:48
wgrantBut the skewed data prevents it from knowing that.23:48
lifelesspackageupload__distroseries__status__idx isn't perfect for the query23:48
wgrantWith archive and id it is.23:48
lifelesswgrant: results of hte partial on the bug23:50
lifelesswgrant: the index isn't perfect - archive 1 + 534 - 1M rows23:51
wgrantIs comment #24 corect?23:52
wgrantHow is the index condition distroseries, when date_created is first in the index?23:52
lifelessits scanning the index23:53
lifelessit can't select at the root23:53
lifelessbut because its only looking at status 0,1 its very cheap23:53
wgrantAh, true.23:54
lifelessit can satisfy the distroseries rule from the index23:54
lifelessbefore looking at table row23:54
wgrantWe will probably need to revisit this in a year or so.23:54
wgrantOnce we have a derivative distro or two.23:54
lifelessIndex cond -- index tells us, filter -- table row is used.23:54
lifelessand - win23:54
lifelesswe can make the current query use it23:54
wgrantHow fast?23:55
wgrantNot bad.23:55
lifelessI can live with it23:55
wgrantIt still leaves accepted/rejected/done timing out often, but I guess that is less of a user-affecting issue.23:55
lifelesswgrant: that use case needs to be revisted anyway23:57
lifelesswgrant: it should be a search etc, not a freaking pagination23:57
lifelesswgrant: showing 1M rows of done in a pagination view is very hard to do at all, let alone well23:58
lifelesswgrant: I'm going to prep a db patch to add the index, and get it applied live23:59
wgrantlifeless: Thanks.23:59
lifelessI think jam has halted(), we should do loggerhead ourselves23:59

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