carlosspiv: interesting, I did not know that12:00
spivTry select * from emailaddress where emailaddress.person = person.id;12:00
carlosdaf: hmmm12:00
carlosdaf: put it inside sql.py :-P12:00
spiv(or select emailaddress.* from emailaddress inner join person on (emailaddress.person = person.id); :)12:01
dafcarlos: I could do, but...12:01
carlosdaf: It was a joke12:01
spivAnd EXPLAIN claims they're identical.12:01
carlosspiv: ok12:01
carlosspiv: so the inner join and the from tablea, tableb... will be always the same?12:02
carloswe don't get any improvement?12:02
spivI'm getting identical query plans according to EXPLAIN ANALYZE, with the same speeds.12:03
spiv(on a ridiculously small dataset, though)12:03
spivAnyway, you can specifiy INNER JOIN explicitly with SQLObject if you want to, it's just a bit evil:12:04
carlosdon't worry12:04
carlosI will do some performance test before without sqlobject12:04
spivEmailAddress.select('', clauseTables='select emailaddress.* from emailaddress inner join person on (emailaddress.person = person.id)'), I think ;)12:04
spivOh, actually, I think that'll put an extra comma in, breaking it.  Damn.  Oh well :)12:05
carlosthat's really ugly :-D12:05
spivEr, I mean:12:05
spivEmailAddress.select('', clauseTables='inner join person on (emailaddress.person = person.id)'), I think ;)12:05
spivSilly copy & paste.12:05
spivAnyway, it's probably worth checking all our uses of clauseTables to make sure we haven't made the same mistake everywhere :)12:06
carlosspiv: I'm fixing Rosetta ones12:07
dafspiv: wow, nice hack :)12:07
spivcarlos: Great :)12:07
dafcarlos: looks like you're King of PQM again :)12:12
carlosdaf: I know :-(12:12
carlosdaf: seems like my postfix problem broke it again12:12
dafoh, how did that happen?12:12
carlosdaf: I have as relay host my home machine12:13
carlosand I'm not in my home now12:13
carlosso all my requests were rejected 12:13
carlosand I notice it after a day12:13
carlosthus, I sent merge requests and star-merge before the merge was done12:14
spivAfter sending a merge request, aren't you supposed to wait for a rejection/success message from PQM before doing a merge from rocketfuel to $myarchive?12:14
dafcarlos: I don't understand -- if the emails didn't go anywhere, how can they have affected things?12:15
carlosdaf: I think they do anything to my local archive12:16
carlosspiv: the problem is that I sent it before going to sleep12:16
carlosand I did the star-merge when I woke up12:16
carloswithout checking it12:16
spivcarlos: Ah.  I see :)12:17
carlosdaf: if that's not the case, It's not my fault then :-D12:17
spivThe submit-arch-merge script doesn't touch your local archive.12:18
carlosthen it's not my fault12:19
spivIt simmply sends a gpg-signed message saying "tla star-merge $mytree rocketfuel@canonical.com"12:19
dilysBug 2003 resolved: Implement edit personal information12:22
carloscprov: did you reused the code we have in rosetta to edit the people personal information? (name, displayname, password, etc...)12:28
carlosdaf: I sent a merge request with some sqlobject changes so some queries should be faster12:37
dafcarlos: cool12:40
cprovcarlos: no !12:40
carloscprov: :-(12:40
cprovcarlos: should I use ? 12:40
carloscprov: If you are changing those fields..12:41
cprovcarlos: i know this is really bad ! 12:41
cprovcarlos:  maybe we need to have a brief meeting soon, about reusable code produced by rosetta continuos Sprint , what do you think?12:43
carloscprov: well, we don't have much more code to share (outside our Rosetta sqlobjects )12:45
cprovcarlos: anyway, what you just said to me about Edit Person is interesting12:46
carlosbut I talked about that already (not sure if you were present, I suppose you were not)12:47
spivdaf: Btw, I've attached a patch to 203012:47
cprovcarlos: what i have implemented is poor, untested, quick&dirty solution and so far from what should be a good component 12:47
carloscprov: my code is not the best one out there but works :-)12:48
carlos(but launchpad is now broken to see it)12:48
carloscprov: is something like the bugzilla form to change the user data + password12:48
=== spiv sleeps
cprovcarlos: the same as mine, i just suggesting that if there was just one it could be much better :)12:48
carlosspiv: night12:48
cprovcarlos: I see 12:49
carloscprov: we know that we only need one, but for the alpha we need it inside rosetta12:49
cprovspiv: night 12:49
cprovcarlos: of course, the rosetta team is feeling the Release Pain for a long <wink>12:50
!lilo:*! Happy big 24, Matt. :)01:01
cprovcarlos: daf : see you later, good night 01:05
carlosgood night01:20
sabdflnight all01:51
=== sabdfl [~mark@host217-37-231-28.in-addr.btopenworld.com] has left #launchpad []
=== stub [~stub@dsl-] has joined #launchpad
=== daf [daf@muse.19inch.net] has joined #launchpad
=== kiko-afk is now known as kiko
kikoI need sleep04:31
=== npmccallum [~npmccallu@69-162-252-7.ironoh.adelphia.net] has joined #launchpad
dilysNew bug 2031 for Launchpad/Launchpad: PQM success or failure messages being bounced?05:22
dilysNew bug 2032 for Project Admin/General: Broken functionality at lists.ubuntu.com05:47
=== stub [~stub@dsl-] has joined #launchpad
=== justdave [~dave@] has joined #launchpad
=== justdave_ [~justdave@] has joined #launchpad
=== justdave_ is now known as justdave
=== stub [~stub@dsl-] has joined #launchpad
=== ddaa [~david@nemesis.xlii.org] has joined #launchpad
SteveAhi stub09:13
stublifeless was interested in auth stuff too09:14
=== sabdfl [~mark@host217-37-231-28.in-addr.btopenworld.com] has joined #launchpad
SteveAlifeless was going to write up his requirements for auth09:17
stubok. I'm mainly interested in what permissions we are using (zope.Public, zope.View? canonical.Foo?) and recommended ways for running the dev environment at this time (add some principals to principals.zcml that happen to match rows in the Person table?)09:18
SteveAright now, we're using two permissions: zope.Public (the pass-through always public permission) and launchpad.AnyPerson09:19
SteveAlaunchpad.AnyPerson is granted to any Person in the database09:20
SteveAyou need to run the database to run the dev environment09:20
SteveAyou need to be using Persons that are in the database in your dev environment09:20
SteveAthere is a script to add a person to the database09:20
SteveAdon't use principals.zcml09:21
SteveAsoon (most likely at the sprint that starts next week), we'll be adding a more interesting security system that allows permissions to be granted based on the contents of the database09:22
stubok - so for right now nothing more granular than those two permissions. 09:23
stubI think that is pretty much all I need for now - I'll give it a go :-)09:23
SteveAwith developing malone, right now, you're getting it working properly given the changes to launchpad while you've been away.09:24
SteveAyou mentioned that you'd done some stuff on the "bug assignment" changes09:24
SteveAcan we talk a bit about what the state of malone is, and what you intend to do next?09:25
SteveAwe also need to talk about portlets09:26
=== SteveA pings stub
stubre: BugAssignments - a SourcepackageBugAssignment and a ProductBugAssignment now has an assignee, which will default to the owner of the Sourcepackage or the Product.09:34
SteveAI suppose we'll need a UI to change assignments09:35
SteveAand, this is a point where being able to mail out would be good09:36
stubYup - the existing edit pages for the bug assignments will pick up the new field. I just need to update the tempates to display it.09:36
stubOh... and a widget to select an assignee (like the existing sourcepackage selector and product selectors).09:36
stubI think the next thing is the email interface - I might do the soyuz portlets first since they should be quick.09:37
=== stub is on the fence
SteveAdoing the soyuz portlets next would be good, because of the sprint next week09:37
SteveAwe'll be doing serious work on the soyuz ui09:38
stubAt least outgoing notifications. Handling replies and embedded commands are not an absolute requirement for the functionality.09:38
SteveAyep.  I'd like outgoing mail to be done transactionally, using the maildir stuff in zope309:38
stubIf you get some sort of a widget that lets you efficiently select a sourcepackage from a list of 1000, I'll be happy.09:38
SteveAas it doesn't make sense to send out mail on a failed transaction09:38
stubYup - nice I don't have to implement transactional email like I did on the last project :-)09:39
SteveA1000 isn't all that much to store, hidden, in a webpage09:40
SteveAso, some simple javascript should help there09:41
SteveAif we need 10000, then we'll need to consider fancy javascript-does-web-request kind of things09:41
stubRendering 1000 items using tal takes time though.09:41
SteveAdon't render them with tal09:41
SteveAuse python09:41
stubok. Doing it that way should plug in happily to the Malone forms (so I shouldn't have to worry about efficient controls for now).09:42
SteveAyeah.  It would be good to have a list of the controls in the application that will need some scalability work09:43
=== SteveA wonders about putting up a ScalableWidgets wiki page
stubWe are going to need something more complex than that eventually though. I have pages where you select the 'product', and from that it should restrict the allowed 'sourcepackage' values to something reasonable. And the selected 'sourcepackage' should restrict the binarypackage. And the binary package should restrict the binarypackage.version.09:44
SteveAhmm... co-dependent widgets09:44
stubBut for now I won't worry about that.09:44
SteveAI can *imagine* the kind of javascript that would allow a bunch of widgets to collaborate like that, with a shared context object09:45
SteveAit feels like it is do-able09:45
SteveAwith outgoing mail, where will mail templates be put?09:47
SteveAwill they be text files with %{varname}s replacement in them, then re-wrapped?09:47
SteveAin one of my own projects, emails have replacements in ALL CAPITAL LETTERS, but that's for mails that are editable by end-users.09:48
stubHmm... last time I implemented something like this I just sent HTML mail and used page templates09:49
stubI think text files with %(foo)s substitution is a good start.09:50
SteveAI'm pretty sure a lot of our target audience will hate HTML mail09:50
stubIt would be funny but :)09:50
=== SteveA wonders why he used {} in the substituation syntax
SteveAthere's a textwrap library (by greg ewing iirc) in python 2.309:50
SteveAso, I have malone tasks so far as:09:51
SteveA1. security: make malone with with zope.Public and launchpad.AnyPerson09:51
SteveA2. malone portlets for soyuz09:51
SteveA3. transactional outgoing mail for malone09:51
SteveA4. bug assignee stuff09:51
SteveAwhat's next?09:51
SteveAstuff so that we can use it for dogfood with launchpad perhaps?09:51
stubBug assignee needs to be simultaneuous with 1 - it is a mandatory field so forms won't work without it.09:51
stubI think that is it pretty much09:52
SteveAis there a notion of dependency between bugs in malone?09:52
stubYes. It is not being used for any of the rendering or searches though.09:53
stubYou can enter the information, but it ain't used for anything.09:53
SteveAa simple text page listing the bugs that a bug depends on would be useful for launchpad09:53
stubYup - that and all the other useful reports :-)09:54
SteveAI think we'd be able to start using it for launchpad then, but I'll need to check the wiki page09:54
SteveAI'm not sure that the other reports are so essential.  Well, other than "what bugs are assigned to me"09:55
stubHmm... now that I think of it... the current schema only supports a bug being dependent on one other :-(09:55
stubMight need to scrap the existing dependant column and add a new table if out use of Bugzilla is anything to go by09:55
SteveAwhat about attachments -- is malone up to date with the new way of representing attachments and messages?09:56
SteveAcan attachments be added TTW ?09:56
stubNo. No attachments at the moment. I've got some bugs in Bugzilla about that. The first dependancy was 'migrate librarian to launchpad' which has been done. 09:57
stubSo I guess that is another item for the list.09:57
SteveAdo you know the bug number?09:58
SteveAI suppose we need to work out how to do the librarian stuff in a development environment09:59
stubBugs # 1921 - 192409:59
stub(although they are actually issues ;) )09:59
=== lalo [~lalo@] has joined #launchpad
SteveA1921, 1922, 1923 and 1924 ?09:59
=== SteveA finds it odd to consider opaque ids in a sequence ;-)
stubI submitted the bugs in sequence :-)10:00
SteveAany ideas about making librarian work in a dev environment?10:00
SteveAI'm getting worried about the weight of the dev environment10:00
stubYup - we define the high level interface and don't use it.10:01
SteveAis there a way to make a dependency on librarian optional for launchpad?10:01
stubErm... we define the high level interface and don't use librarian... just a stub.10:01
SteveAI suppose when I hook up zodb, zodb can be used as a librarian for development10:01
SteveAdoes that sound sensible or not?10:02
SteveA(haha, stub said "stub")10:02
stubWe have setfile, getfile, geturl etc. Just need to make them store the files somewhere (fs is fine), and generate URL's that launchpad serves10:02
=== stub punches SteveA
SteveAok, fs sounds ok10:02
SteveAcan I add that to the malone work, or do you want spiv to do that?10:03
stubWe then cross our fingers and hope the real librarian works the same way in production (or perhaps we should test ;) )10:03
stubI'm happy to do it, since I have what is needed in my head. If someone else has time though it would be great.10:03
SteveAok, I have you on the hook for writing a spec for the stub librarian10:04
stubI don't think any other launchpad stuff is using it except for Malone?10:04
SteveAwell, buttress10:04
SteveAand soyuz will eventually I guess10:05
SteveAbut malone first of all, sure10:05
stubok. People should have a look at the bug and add any thoughts before it is coded.10:06
SteveA1. security: make malone with with zope.Public and launchpad.AnyPerson10:06
SteveA2. bug assignee stuff10:06
SteveA3. malone portlets for soyuz10:06
SteveA4. transactional outgoing mail for malone10:06
SteveA5. make attachments work properly, #1921 #1922 #1923 #192410:06
SteveA6. write spec for a stub librarian that uses the fs for the dev environment10:06
SteveA7. maybe implement stub librarian spec10:06
SteveA8. making a bug dependent on many others10:06
SteveA9. dependency report10:06
SteveAdoes that get us to the point where we can use malone for dogfood?10:06
SteveAwe may want justdave to cook up a script to import open bugs10:07
stubI think 5,6,7 are in the wrong order10:07
SteveAwhat's a good order?10:07
stub6,7,5 (where 7 is done if 6 looks simple)10:07
SteveAwhat else before starting project dogfood?10:11
stubNothing I can think of, but I've said that before...10:11
stubOh... private stuff10:12
SteveAok.  I'll add this list to a bugzilla bug.10:12
SteveAwe don't need private stuff to dogfood on launchpad10:12
stubIs that needed for dogfood, or post dogfood?10:12
SteveAthat's needed for when we use the golden database10:12
stubOther stuff is more general launchpad issues such as bug 200510:17
dilysNew bug 2033 for Launchpad/Malone: Tasks that get us to eating our own dogfood10:18
stubI take it dilys is a bot :-)10:18
SteveAdilys: say hi to stub.10:19
SteveAI think dilys only has advanced AI features when daf is awake and at his keyboard ;-)10:19
SteveAstub: please add whatever dependencies make sense on that bug, and add comments to track progress / issues / whatever10:21
SteveAI've noted the requirements you mentioned, and also that the Malone source-package widget needs some of this10:26
SteveAPlease add to this page for what you know about malone, maybe being a bit more specific about the requirements for the widgets than I have been10:26
dilysNew bug 2034 for Launchpad/Launchpad: allow 'count' method of SelectResults in SQLOS10:33
stuboops.... https://bugzilla.warthogs.hbd.com/bugzilla/showdependencygraph.cgi?id=203310:37
stubjustdave: Known bugzilla probem?10:37
SteveAargh... what a scam10:46
SteveAnominet, the .*.uk monopoly introduced new terms a few months ago.  they now want 35 quid to transfer any .uk domain names.10:47
justdavewow, that's a funky graph11:06
justdaveno, haven't seen it do that before.11:06
laloprintk("Help, too many green dots!")11:09
justdaveheh.  was just going to ask, is that like every bug in the system on that chart? :)11:10
=== carlos [~carlos@167.Red-83-38-95.pooles.rima-tde.net] has joined #launchpad
=== sabdfl [~mark@host217-37-231-28.in-addr.btopenworld.com] has left #launchpad []
=== sabdfl [~mark@host217-37-231-28.in-addr.btopenworld.com] has joined #launchpad
sabdflhey carlos11:11
lalomorning carlos, sabdfl11:14
spivMoaning, er, morning ;)11:28
dilysSteveA: hi to stub12:10
stubI think dilys is a little slow12:11
dafwell, those advanced AI features cost a lot of processing time12:12
carlos    ConfigurationError: ('No such file', '/home/carlos/Work/dists/launchpad/lib/canonical/soyuz/templates/person-join.pt')12:15
carlosshould I comment the reference and commit?12:17
dafit would be nice to find who's responsible so you can chastise them :)12:18
=== ddaa [~david@nemesis.xlii.org] has joined #launchpad
carlosdaf: I suppose it was Celso 12:24
carlosdaf: he was working yesterday on it12:25
carlosstub: do you want that I execute the import test with the new indexes you sent to the mailing list?01:28
carlosto generate a new report01:28
stubcarlos: If you have time it would be great. Saves me some research, and empirical data is probably better anyway ;)01:30
carlosstub: I can work in other things at the same time01:31
carlosseems like some changes I did yesterday broke rosetta :-?01:41
=== carlos is working on it now
carlossqlobject.main.SQLObjectNotFound: The RosettaPOMessageID by alternateID msgid=u'_About' does not exist01:41
carlosspiv: we had it as RosettaPOMessageID.selectBy(msgid=u'_About')01:42
carlosand we check later if it's empty or not, is there an easy way to do it with the alternateID without catching the exception?01:42
carloswell, I suppose that it's the "normal" way to do it now...01:43
spivYeah, it is.01:44
spivFor the same reason that Foo.get(id) should raise an exception if there is no row with that ID.01:44
carloshmm, the code looks cleaner now, catching this exception :-)01:45
dafbonus :)01:45
carlos     def poTemplate(self, name):01:45
carlos-        results = RosettaPOTemplate.byName(name)01:45
carlos-        count = results.count()01:45
carlos-        if count == 0:01:45
carlos+        try:01:45
carlos+            return RosettaPOTemplate.byName(name)01:45
carlos+        except SQLObjectNotFound:01:45
carlos             raise KeyError, name01:46
carlos-        elif count > 1:01:46
carlos-            raise RuntimeError("Duplicate PO file name.")01:46
carlos-        else:01:46
carlos-            return results[0] 01:46
spivThat looks much better :)01:46
dafdefinitely :)01:47
dafwe have lots of similar code01:47
carlosdaf: I'm fixing it now01:47
dafwhere is byName defined?01:48
spivdaf: by setting alternateID in the column def.01:48
spivcarlos: You haven't updated the SQLObjectGuide?  I can do that now if you like?01:48
carlosspiv: no, It's a pending task01:48
carlosspiv: I'm busy now, so if you can do it now, it's yours01:49
spivOk, I will.01:49
dafI think there's some code which follows the old pattern which can't be changed so easily01:49
dafbecause the uniqueness is conditional01:49
carlosdaf: I only added the alternateID when it's unique in the database01:50
dafcarlos: of course01:50
carloshmmm and I did a mistake with poTemplate (we have a bug with the old code also) a template name is not unique 01:50
dafI'm just saying that we can't fix all our code in the same way01:51
carlosit's only unique inside a product01:51
carlosdaf: the database has it still incorrectly01:53
=== carlos prepares a patch
=== daf goes to have breakfast while PQM deliberates over his merge request
carlosstub: could you apply this?: ALTER TABLE POTemplate DROP CONSTRAINT potemplate_name_key;01:56
stubCan I put that in with the indexes?01:59
carlosstub: sure01:59
carlosI will send you the final list01:59
carlosdaf: could I remove xxxRosetta... classes?02:00
dafplease do02:08
carlosstub: a new import of a po file (all rows are inserted) with your indexes took about 4 extra minutes than with the indexes I sent :-O, I need to do more testing to get an average02:32
stubDon't worry - I think that answers my question. It is trivial to change indexes later anyway since there are no dependancies outside postgresql.02:34
stubI'll stick in the indexes and the dropped key in a minute.02:35
carlosstub: wait, I'm doing more tests02:35
carlosstub: that's the time needed to create new rows02:35
carlosI'm doing now the tests using those indexes02:35
carlosdaf: rocketfuel has now the needed patch so the alternateID works now as it should02:36
ddaahi spiv02:45
ddaaI got started on the twisted process handling thing.02:45
spivGoing well, I hope?02:45
ddaaI'm doing the simple case right now, running  a command whose exit status is expected to be 0, and which yields no interesting output.02:46
ddaaI'm mostly putting up the infrastructure at this point...02:46
ddaaSo, the plan is the codes which calls pyarch expects to be in a thread, that thread will sleep until the process is finished.02:47
ddaaProcess handling is done in the reactor of course.02:47
ddaaThe process can terminate  two ways:02:48
ddaa1. Everything's okay, unblock the thread.02:48
ddaa2. Something went wrong, raise ExecProblem in the thread.02:48
ddaaDo you have hints about the right way to do that?02:49
ddaaSounds like a job for Deferred. What concerns me is that I am not sure that twisted provides any way to blocking communication...02:51
ddaaI might just pass the exit status out to the thread through a synchronized queue, but there might be something more twistedish.02:52
carloslalo: canonical.rosetta.pofile.DEBUG does not exists03:00
lalocarlos: indeed03:00
lalooh, I'll be damned, I didn't commit the patch that removes that reference03:00
carloslalo: also, the poparser is broken now03:01
carlosand this morning was working03:01
carlos    transl = self.translation_factory(header=self.header,03:01
carlos  File "/home/carlos/Work/dists/launchpad/lib/canonical/rosetta/pofile_adapters.py", line 412, in __call__03:01
carlos    raise POInvalidInputError03:01
carloscanonical.rosetta.pofile.POInvalidInputError: Po file: invalid input on entry at line 27703:01
carloslalo: I was timing it and the only difference between executions is a star-merge03:01
ddaaspiv: hints? Do you think a synchronized queue is the way to go? Can you think of a better way?03:02
carlos#: battstat/battstat_applet.c:39103:04
carlos#, c-format03:04
carlosmsgid "%d minute (%d%) remaining"03:04
carlosmsgid_plural "%d minutes (%d%) remaining"03:04
carlosmsgstr[0]  ""03:04
carlosmsgstr[1]  ""03:04
carloslalo: the line #277 is the c-format03:04
daf"The rosetta-users@lists.ubuntu.com mailing list has -1 request(s) waiting for your consideration" - ?!?03:11
SteveAdaf: we don't need the ProxyPassReverse configuration, just the ProxyPass configuration03:12
SteveAZope 3 itself takes care of the ProxyPassReverse stuff03:13
carlosdaf: who is using it already? :-P03:13
SteveAbut, it does no harm03:13
spivddaa: just a sec03:13
=== SteveA goes for lunxh
spivddaa: Yeah, getting the thread to block on a Queue.Queue is the simplest way.03:14
lalocarlos: I'm looking into it, let me merge03:14
ddaaspiv: thanks03:15
spivDeferreds aren't something you'd want to pass between threads, btw.03:15
ddaaI'll keep that in mind... but do not believe i understand most of what I say when I speak twisted... :-)03:16
spivThere has been some discussion on the mailing list about better facilities for interacting with threads, but nothing in the code yet, and I'm not sure it would help this particular case anyway.03:16
spivOr rather, I don't think it would offer significant benefits over using the standard Queue module in this case ):03:17
spiver, :)03:17
ddaaI'm going to have more elaborate requirements soon.03:17
ddaaNext step is passing one chunk of output in addition to the status.03:18
spivddaa: fwiw, I get the feeling that you think Twisted is more complex than it really is (which is a pretty common reaction), but that's just a guess :)03:18
spiv(Of course, my perspective on the complexity of twisted is somewhat biased, I guess)03:18
ddaaThen multiple chunks... I will end up with  a simple type-based protocol through the queue.03:18
spivRight, a queue definitely sounds like the right thing, then.03:19
carloslalo: ok, thanks03:19
ddaaTwisted is a big chunk. I'm beginning to grok it, but I ask you in case I'm missing some useful facilities.03:19
spivThe main thing I think you might be missing about Twisted atm is Deferreds.  They are actually really simple, although it seems hard to explain this to people ;)03:20
ddaahe, that's why I was asking "would a Deferred be more appropriate"03:21
spivRight :)03:21
ddaaHo btw, how can I know what are the reserved names in ProcessProtocol?03:22
ddaaatm I'm making all the instance variable privates to be safe, but that's almost certainly overkill.03:23
ddaaThe twisted API doc seriously lacks documentation for instance variables...03:24
spivJust connected and transport, I think.03:24
spiv(aside from the actual method names, of course ;)03:24
ddaaIs there a particular convention in Twisted for "instance variable names which are safe to use in subclasses"?03:25
=== carlos goes to have lunch
spivIt hasn't proven to be a problem, which I find interesting.03:26
carlosdaf: the canonical wiki is moving to wiki.canonical.com03:26
dafcarlos: I didn't know that03:27
carlosdaf: that's why I tell you it :-)03:27
carlosdaf: the draft is ok for me03:29
carlossee you later!!03:29
daflater :)03:29
dilysBug 2030 resolved: After authenticate, launchpad fails with a system error04:31
carlosstub: psycopg.ProgrammingError: ERROR:  date/time value "current" is no longer supported04:35
carlosUPDATE POMsgIDSighting SET inlastrevision = 't', datelastseen = 'CURRENT_TIMESTAMP AT TIME ZONE ''UTC''' WHERE id = 7904:35
stubYup - looks like SQL object is quoting it as a string. 04:36
stubI recall trying it too and failing - it will need a patch to do properly, unless someone works out a string that postgresql parses as 'current time in utc'04:38
spivMaybe try sqlobject.sqlbuilder.SQLConstant, or something like that?04:38
=== carlos looking at postgres documentation
stubSounds promising - I'm not very well read in the sqlobject api. I couldn't see anything in the postgres docs that would help before, but another pair of eyeballs is good.04:39
spivOr else:04:40
spivclass NowUTC:04:41
stubOh... soyuz had a similar issue and they are just passing datetime.utcnow() (with XXX: comments to fix later)04:41
spiv    def __sqlrepr__(self): return "CURRENT_TIMESTAMP AT TIME ZONE 'UTC'"04:41
=== stub gives spiv a banana
spivBut that's ok, I'll bet that banana is untested too ;)04:42
stubYou wouldn't want it after I've tested it ;)04:42
carlosthen ? datetime.utcnow()?04:42
stubcarlos: Try spiv's approach04:43
carlosshould I create that class? or where is it defined?04:43
lalocarlos: gnome-applets imports correctly for me04:44
stubcarlos: You would have to create it (canonical.database somewhere I guess). Pass an instance of it through in the constructor and see if it works.04:44
carloslalo: I'm fixing a bug I introduced to be able to test it04:45
carlosstub: I prefer if you suggest me a place instead of choose one random place under database :-P04:45
stubcanonical.database.__init__.py ?04:46
spivI'd vote for canonical.database.constants, but that's just because I tend not to put code in __init__.py files...04:47
stubWe probably want a single instance of it as a module global rather than having to construct an instance of it every time.04:48
stubspiv: Sounds good. I'm not fussed :-)04:48
carlosthen? canonical.database.constants?04:51
carlosand how could be done the single instance?04:51
dafa singleton?04:51
carlosdaf: ?04:52
=== kiko [~kiko@200-206-134-238.async.com.br] has joined #launchpad
dafactually, a singleton isn't necessary04:54
dafhi kiko!04:54
kikoraises an error, daf :)04:54
dafyeah, it does04:54
carloskiko: morning04:55
kikohow are you guys doing?04:55
kikodaf, the only comment on the release would be having something about bugreporting in the Caveat section, but since you already have a Bug section there..04:55
dafkiko: hmm, maybe I could amalgamate those two04:56
dafcarlos: the single instance could be done just with having "nowUTC = NowUTC()" in the module04:57
carlosdaf: so, it's a global var04:58
dafcarlos: module global04:58
dafcarlos: canonical.database.constants.nowUTC04:58
daf(not sure if my terminology is correct here)04:58
carlosand I will need to do from canonical.database.constants import nowUTC04:58
dafI think you might as well just stick it in canonical.database04:59
kikodaf, I don't think it's critical, rock and roll it04:59
dafkiko: I'm not sure whether I should push the Big Red Button without getting sabdfl's stamp of approval04:59
kikodaf, you should wait for mark, really. give him a call?05:00
dafkiko: sure, I could do, but it would be nice to have him look at the doc05:00
spiv(I'd call the class _NowUTC, and the instance NowUTC)05:01
kikodaf, calling him is a good way of getting attention :)05:01
dafkiko: his ADSL is down05:01
dafkiko: and probably will be until tomorrow05:01
kikodaf, fax it.05:01
dafI don't have a fax :(05:01
kikobut your neighbor does05:01
dafthey do?!05:02
dafthey never told me05:02
kikojust print it out and bike down to the print shop, or have your kid sister do it05:04
dafI think I'm going to reorganise the server, so we may experience a little turbulence05:05
carlosdaf: :-)05:07
kikosoyuz team fastens seatbelts05:08
dafI'll do rosetta.w.h.c first05:09
dafddaa/lifeless: "tla changes" is not printing permissions changes -- is this normal?05:20
ddaaLooks like there is a bug in tla.05:20
ddaaYou need to touche the files for the perms change to be detected.05:21
ddaaAssuming of course you are not using a hardlinked-to-revlib tree.05:21
dafI might be05:21
dafhow do I find out?05:21
ddaaCheck the link count of files in your tree with "ls -l"05:22
dafok, I'm not05:22
ddaaBut if you do not know, you are probably not.05:22
ddaaThat's a dangerous feature,but useful because it really boosts change detection.05:22
ddaaCan corrupt the revlib.05:23
dafbecause you can inadvertantly change the revlib05:23
ddaaIn addition, perms changes in the revlib are not detected, so that can cause inconsistent permission info to be put in the archive.05:23
ddaaThese are relatively trivial and well known bugs.05:24
dafif they're trivial, why are they not fixed? :)05:24
daflet me guess:05:24
ddaaSame reason as usual :-)05:24
dafbecause the release process is f*cked?05:24
spivdaf: touchy subject ;)05:24
ddaaHo, that's not the specific reason.05:24
ddaaHere it's "because no one has bothered yet".05:24
ddaadaf: feel free to step up.05:26
=== daf laughs manically
ddaaThis stuff is amply documented in the mailing list archives.05:26
dafI don't think I have the time to tackle it right now05:27
ddaaEssentually, the trick would be to change the inode-sigs to account for permissions.05:27
dafif I took the time to read the mailing list archives and get up to speed on the code, I might be able to fix it05:28
ddaadaf: I not you volunteering as stable release manager :-P05:29
ddaa*I note your05:29
SteveAspiv: pig05:29
SteveAspiv: piNg05:29
lifelessddaa: that was already done in a patch IIRC05:30
spivSteveA: pog :)05:30
lifelessmight be in the buggoo05:30
SteveAdid you update your interface in the authserver?05:30
=== ddaa hate patch trackers which turn into black holes
spivSteveA: Oh, hmm!05:30
spivOops, no.05:30
SteveAalso, it should state the contents of a user dictionary05:31
ddaalifeless: good news, I'm getting somewhere with the twisted process handling. I will probably not finish before I leave, but then it's going to be mostly a matter of filling the blanks.05:32
spivOk, I'll fix that now.05:32
SteveAalso, what does createUser do if the email address is already taken?05:33
spivReturn {}05:37
spiv(it relies on the db constraints to enforce that; it will catch the resulting error, rollback the transaction and fire the error callback which returns {})05:40
SteveAok, that needs to be in the interface05:43
SteveAit just said TBD05:43
dafddaa: I tried an amateur analysis of the current PQM confusion with carlos' launchpad--devel--0-patch-183..186, but couldn't work out why it was happening05:43
dafddaa: most of my analysis consisted of running "tla missing"05:43
spivRight, because I wasn't sure I wanted that to be the final behaviour :)05:44
spiv(Hence the discussion of error handling in the bug)05:44
spiv(TBD == To Be Defined in this case, which I realise now is not necessarily clear)05:44
ddaadaf: the trick to unwedge the merge is to:05:44
ddaa1. tla revisions, write down the latest revision R in rocketfuel05:45
lifelessddaa: this isn't a wedged merge05:45
ddaaSomething new?05:45
lifelessthis is rocketfuel log-for-merges being wedgified.05:45
lifelessgrab rocketfuel05:46
lifelessdo a star-merge with your branch, or anyones05:46
lifelesslog-for-merge will show carlo's patches.05:46
lifelessIf carlos has new patches, try merging them in, that might unwedge it.05:46
ddaaI thought that issue was fixed...05:46
lifelessddaa: hahahahaha05:47
lifelessif it doesn't, then I can sync-tree with those patches manually.05:47
lifelesswhich I've had to do 3 times now.05:47
lifelessI would love to have the time to sit down and do the forensics on the cause.05:47
spivThis is seperate to the crossing-the-streams issue?05:47
ddaaI bet carlos is unwedging merges with --skip-present and do not do sync-tree05:48
ddaaThat would explain the missing patchlogs.05:48
dafcarlos: accusations are being made!05:48
carlosddaa: I did the sync-tree yesterday05:48
lifelesswell, I'm not aking bets until I do the forensics.05:48
lifelesscarlos: you should not need to sync tree ever.05:48
carloslifeless: I did the --skip-present05:48
carlosbecause my repository was broken05:49
carlosbut I'm sure I did not a star-merge before the merge request ended05:49
lifelessasctually, tell ddaa. Its 2am on friday night, I'm not up to this.05:49
=== lifeless waves to everyone
spivlifeless: G'night :)05:50
daflifeless: enjoy your weekend :)05:50
carloslifeless: night05:51
ddaacarlos, care to describe what was your problem and what you did to fix it?05:53
ddaaNot pretending I'll give you a better solution, but that will help me figure out what's going on.05:53
carlosddaa: the problem is the same you help me fixing in Oxford05:54
carlosand I fixed it in the same way, but the sync-tree command was new for me and I executed it after lalo suggestion05:54
carlosso it was one or two days after the break05:55
ddaaYou are aware of the racy nature of that command?05:55
ddaaand how you should always use it with a fqrev when syncing against a shared branch?05:55
carlosddaa: no, could you explain it to me?05:56
=== lifeless peeks in
lifelessOH GOD NO.05:56
lifelessPlease guys.05:56
lifelessDO NOT share 'FIXES' amongst the team.05:56
=== ddaa hides under a rock
lifelessthats like going to a friend who had a broken leg and asking for help with your sore stomach.05:56
ddaalifeless: people are doinh that anyway already05:56
lifelessAsk ddaa/me/jblack/bob205:56
ddaabetter tell them the whole story so they are not going to shoot their foot05:57
lifelessyour scheduled analysis can now resume, thank you for your attention.05:57
carloslifeless: well, the --skip-present solved my problem as the arch team told me, I thought the sync-tree was to help with the logs errors, sorry about that05:58
kikolifeless, it's very hard to know what is and what isn't appropriate to do when fixing a tree.05:58
lifelesscarlos: you should not perform any 'fix' without someone from the arch team.05:58
ddaacarlos: that's essentially right. But sync-tree is dangerous.05:58
lifelesskiko: ^^^05:58
kikosure, but somebody has deadlines to meet and a broken repo means delays.05:58
lifelesskiko: we're working to reduce the number of problems you have, by introducing better procedures & workflow.05:59
dafkiko: anything other than what you would do during the normal development cycle is suspect05:59
ddaaWhat it does: get all the patchlogs from the given REVISION  and put them into the tree.05:59
carloslifeless: then, the is it ok if I execute --skip-present if I get this kind of break or should I ask always arch team?05:59
lifelesscarlos: do not execute skip-present.05:59
lifelessits not the merge operator we use.05:59
kikoI'm just saying you can't reasonably expect the developer to do whatever he can to get things fixed, so it's something to watch out for.05:59
dafcarlos: if in doubt, ask05:59
kikoI understand05:59
lifelesskiko: we have roughly 24x7 coverage: GMT +10 -> GMT - 806:00
carloslifeless: I only execute it when arch tries to apply again the same patch I already have in my tree06:00
ddaaIf this adds some patchlogs for a revision that you have not yet merged, what get effectively recorded in "star-merge perspective" is "applied the patches then reverted the changes".06:00
lifelesscarlos: it won't do that if you follow the star-merge rules published a fortnight back.06:00
lifelessbut please, chat with ddaa.06:00
carloslifeless: ok06:00
ddaaSo a later star-merge into rocketfuel will remove from rocketfuel the changes you skipped.06:01
lifelessI wanted to get the point in that: *what fixes lalo's tree is likely to break carlos' tree. Unless you understand the cause, choosing the solution is impossible'.06:01
=== lifeless waves again.
carlosddaa: then, I broke any patch from rocketfuel?06:01
ddaanot saying that06:02
daflifeless: go to bed!06:02
ddaasayinh that using sync-tree is dangerous06:02
ddaaand that you have to be aware of the danger before usinh it06:02
=== carlos hopes nothing was broken...
ddaaWhat is safe to do, and that hopefully you did, is to sync-tree to a revision you are up to date to.06:03
=== carlos will never execute sync-tree until any member of arch team asks for it...
ddaawait a min please06:04
carlosspiv: class NowUTC:06:06
carlos    def __sqlrepr__(self, dbName):06:06
carlos        return "CURRENT_TIMESTAMP AT TIME ZONE 'UTC'"06:06
carlosnowUTC = NowUTC()06:06
spivcarlos: ...and does it work? :)06:07
carlosspiv: __sqlrepr__ asked for a second argument06:07
spivOh, right.06:07
carlospython does not fails :-)06:07
spivIgnoring that is fine for us :)06:07
=== carlos looks at the database
carlosthe select from psql gives me the date in my UTC+020006:09
carlosdaf: how was the command to change the zone?06:09
carlosLC_TIMEZONE=UTC foo ?06:10
carlosTZ=UTC ?06:10
spiv$ TZ=UTC date06:11
spivFri Sep 24 16:10:57 UTC 200406:11
carlosthen it's not working06:11
carlosor psql does not cares about that env var06:11
dafI'd suspect the latter first06:14
carlosok, it's postgresql which should be restarted with TZ=UTC...06:14
carlosI get always the same date06:16
carlosand I executed tzconfig06:16
carloschanging my timezone to UTC06:16
carlosand restarted postgresql06:16
carlosand I got the same date that I'm sure is not UTC06:17
carlosbecause now it's 16:18 UTC06:17
carlosand the date is 17:1006:17
carlosso that's impossible06:17
=== justdave [~justdave@] has joined #launchpad
carlosbut it's not a sqlobject problem06:18
carlosUPDATE POMsgIDSighting SET inlastrevision = 't', datelastseen = CURRENT_TIMESTAMP AT TIME ZONE 'UTC' WHERE id = 135906:18
carlosthat's the query that it's executed06:19
=== carlos does not understand it...
spivlooks ok here...06:22
spivcarlos: show TimeZone;  ?06:26
carlosfrom psql?06:26
carlos TimeZone06:27
carlos unknown06:27
carlos(1 row)06:27
SteveAstub: hi06:28
SteveAjust been chatting with mark, then with jim, about sessions of various kinds06:28
SteveAI want to put some kind of cookie-based auth into launchpad soonish06:30
stubcarlos: Are you getting localtime in the database, or some sort of random time?06:31
carlosstub: local time06:31
SteveAmark wants to talk about doing session-based auth for xml-rpc clients.  Personally, I'd prefer that they authenticated on each request.  cookie auth in the browser is for usability (nice login forms) and so that you can authenticate across domains.06:31
stubSteveA: Cookie based auth should be doable by simply storing the authenticated username in the standard session implementation (either using the ZODB or the Memory implementation as appropriate).06:32
SteveAin jim's "client stores last access time" model, the session id held by the client changes on each request.  You need to trust the client to do this right, but if they don't, they can only make their session expire sooner.06:32
SteveAstub: yep, i guess so.06:33
stubSteveA: I've never quite worked out how Jim's model is supposed to work. Because the client stores the last access time, the server doesn't have it when it needs to clean up.06:33
SteveAI've done that for a zope3 application before.  it was okay.  I had to implement various parts of the session stuff iirc, as they weren't implemented in zope3.06:33
SteveAthe server doesn't need it when it needs to clean up.06:34
SteveAthe server cleans up regardless06:34
stubYup - which means it might clean up an active session06:34
SteveAthe server and its GC says "Your session will last at least 48 hours.  I'll clean up some time after 48 hours."06:34
SteveAthe app can look at the session of a request and say "this session expires in under 1 hour.  I'd better make a new session and copy the old data to it."06:35
=== npmccallum [~npmccallu@69-162-252-7.ironoh.adelphia.net] has joined #launchpad
stubok - that makes sense. The Z3 API doesn't have to change to accommodate that either.06:37
=== SteveA tries to remember what he had to implement when he last used sessions with zope3
SteveAit was the component that stores the data06:37
stubSteveA: Actually, with that model there is a race condition. The browser is sending 4 requests simultaneously. All will be dealing with the old session data (as no fresh token has been returned yet). Only one of the new sessions will take effect.06:39
stubAnd any changes made in 3 of those 4 requests to the old-session will be lost.06:40
SteveAwell, what if you put a "see new" pointer in the old session?06:41
stubIt would work if we just kept the same session alive, updating a the expiry time. Which is pretty much what we have implemented already.06:42
stubJust change the defaults from a 1 hour expiry with a precision of 5 minutes to a 48 hour expiry with a precision of a few hours.06:42
stub(Or a precision of 48 hours even)06:43
=== justdave_ [~dave@] has joined #launchpad
ddaaMh... indeed something is borked on rocketfuel06:47
kikoddaa, ouch.06:47
ddaai mean, regarding the missing patchlogs06:47
ddaanothing serious06:48
dafddaa: you've worked it out?06:50
ddaanot yet... and I'm going to have to leave soon.06:50
ddaaI'll check when I come back.06:50
dafno worries06:50
ddaathat's it...06:58
ddaain patch-394, the patch-369 was removed06:59
ddaapatch-394 is the merge from carlos immediately following patch-36906:59
=== ddaa frienly larts carlos for good measure
carlosddaa: O:-)07:00
carlosddaa: then, did I reverted a patch?07:00
ddaaI guess not...07:01
ddaaI have not checked that.07:02
ddaaWhen did you use sync-tree, btw?07:02
carlosI'm not sure, I think it was on Wednesday07:02
ddaaarcher do not have calendars, they count time in patchlogs ;-)07:03
carlosddaa: but I suppose we could see it from the time for that patch07:04
carlosa 'ls' in chinstrap07:04
ddaapatch dates are not accurate they are set by the client ;-)07:04
carlosddaa: I can certify you that my computer clock is correct, I'm using ntp to sync it07:05
ddaais it set on UTC or on GMT?07:05
ddaaare you sure your computer's clock is not set to GMT+0200?07:06
dafddaa: seriously, the difference between UTC and GMT should not be affecting our use of Arch...07:07
ddaadaf: :-D yeah, I was just havinh some fun... that thread on gau was stupid.07:07
dafddaa: phew, I thought you were being serious :D07:07
spivdaf: it's affecting your use of archers ;)07:08
carlosddaa: isn't it the same?07:08
ddaacarlos: there's a whole thread on gau about the difference between UTC and GMT07:08
dafcarlos: yes and no :)07:08
carlosok, it's the same, I prefer to live in the ignorance07:08
stubSo UTC isn't just GMT after the French got through with it?07:09
ddaaThat mostly matter if you are interested in unnatural acts involving insects.07:09
=== daf decides not to ask
ddaamerge request on the way07:13
ddaacarlos are you using a local mirror?07:15
ddaafor rocketfuel?07:15
carlosddaa: yes07:16
ddaawhen do you update it?07:16
carlosa revision-library07:16
carlosI suppose it's done automatically07:16
ddaaSo, you are not using a local mirror?07:19
ddaaA revision library is a different thing....07:19
ddaarats... gotta go now.07:20
carlosso it's not a local mirror07:22
ddaacare to send me the output of "tla archives | grep rocketfuel" privately?07:24
=== mdz [~mdz@69-167-148-207.vnnyca.adelphia.net] has joined #launchpad
=== kiko is now known as kiko-fud
carlosdaf: Could I assume that rosetta will be announced after the weekend?08:53
carloswe have  a regression with the poimporter09:03
dafa regression?09:06
dafwhich bug?09:06
dilysNew bug 2035 for Launchpad/Rosetta: PO parser broken (again)09:07
carloswell, I filed a new bug because I'm not sure if it's the same09:07
carlosit's the generic parser error09:07
carlosand breaks any .po file import09:07
carlosthe .pot file works09:07
spivgnu-arch-users has been, uh, entertaining recently.09:07
dafcarlos: do you know which line is causing the error?09:08
dafcarlos: do the PO file test cases pass?09:09
carlosmake check pass09:11
dafcan you find out the smallest PO file that exhibits the error?09:11
carlos#: charpick/GNOME_CharpickerApplet.server.in.in.h:209:12
carlosmsgid "Charpicker Applet Factory"09:12
carlosmsgstr "Ffatri Rhaglennig Dewis Nodau"09:12
carlosit fails in that msgstr09:12
carlosI don't see any thing different there...09:12
carlosdaf: will investigate it09:12
dafthere must be something like that in our unit tests09:12
daftry adding a unit test with just that message set and see if it still fails09:13
dafI mean, if it still passes09:14
dafwell, I suppose you can look at it either way: either the unit tests still succeed, or that message still fails09:14
carlosdaf: ok09:17
=== npmccallum [~npmccallu@69-162-252-7.ironoh.adelphia.net] has joined #launchpad
dafI've just tried that, and it worked for me09:18
carlosdaf: so the problem is not that msgset09:18
spivcarlos, daf: I've uploaded a patch to that bug that might help diagnosis slightly.09:19
carlosspiv: thanks09:19
dafcarlos: or the adapters are causing it to fail in some mysterious way09:22
dafcarlos: which file are you testing with?09:22
carlosI was testing the import of all gnome-applets .po files09:22
carlosand all failed09:22
spiv(Incidentally, both KeyError and IndexError inherit from LookupError, so that except clause could be slightly simpler)09:23
spiv</pointless-nitpick> :)09:23
dafspiv: patches welcome :)09:23
carlosthe ones without a plural expression had a warning that it's not available but the exception was raised and the ones with the plural forms expression only raised the exception09:23
=== carlos hates long process before he gets the error...
dafcarlos: try seeing if you can replicate the same error without the importer?09:26
carlosdaf: without the importer?09:27
carlosooh only with the parser09:27
carlosgood idea09:27
=== justdave_ [~dave@] has joined #launchpad
carlosdaf: it worked now09:30
spivcarlos: Eek.09:30
carlosthe only change I did was spiv's patch09:30
carlosit makes no sense...09:30
=== carlos recreates the database and starts again...
spivTemplateImporter and POFileImporter have a scary amount of duplicated (and nearly duplicated) code.09:37
carlosspiv: are more or less same code09:39
carlosso it's normal that the code is duplicated, if it's a way to improve it... ask lalo09:40
spivWell, it's just an impression I get from glancing at it, not an informed opinion :)09:43
carlosdaf: I think that it's related with the header and the database09:47
carlosdaf: first time you try to import the .po file fails09:48
carlosseconde try success09:48
carlos /s/seconde/second/09:48
SteveAspiv: do you know if there are any important passwords in the golden database yet?09:48
=== justdave_ [~dave@] has joined #launchpad
carlosI should leave now, Will look at it later09:49
=== npmccallum_ [~npmccallu@69-162-252-7.ironoh.adelphia.net] has joined #launchpad
=== justdave_ is now known as justdave
carlosspiv: I don't see any extra information with your patch...09:53
carlosFile "/home/carlos/Work/launchpad/lib/canonical/rosetta/pofile.py", line 461, in append09:53
carlos    transl = self.translation_factory(header=self.header,09:53
carlos  File "/home/carlos/Work/launchpad/lib/canonical/rosetta/pofile_adapters.py", line 505, in __call__09:53
carlos    raise POInvalidInputError, e09:53
carlosok, I got the wrong patch :-P09:54
=== kiko-fud is now known as kiko
spivcarlos: Oops :)10:48
spivSteveA: Doesn't look like it.10:51
spivSteveA: The only people in the DB so far are Mark Shuttleworth, Robert Collins, Roche Compaan, Roche Compaan, Andrew Test, Steve rle Alexander testing, apasto, Roche TestX7 -- and the first two don't have pards.10:53
SteveAok.  Any idea how hard it would be to discard existing passwords, and increase the size of the salt in the passwords for code that touches the golden database?11:28
SteveAWe can change the code in the plone product easily enough, and send roche a patch11:28
SteveAwe can change the code in launchpad easily enough11:28
spivdelete from person where password is not null; is pretty easy ;)11:28
spivActually, you'd need to delete the emailaddress entries too, but that's still not hard.11:29
SteveAdo you still have access to the plone server code?11:31
=== SteveA goes to sleep
spivYou mean the authserver on macquarie?11:36
spiv(if so, the answer is yes)11:36
SteveAno, I meant the plone website code11:44
=== SteveA really goes
carlosSteveA: night11:45
=== carlos is back
spivI've never had access to that.11:46

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