/srv/irclogs.ubuntu.com/2012/05/21/#juju-dev.txt

=== meetingology` is now known as meetingology
TheMuemorning06:51
* davecheney waves06:53
davecheneyTheMue: https://codereview.appspot.com/620308306:53
davecheneycoming along06:53
davecheneyhttp://paste.ubuntu.com/998421/06:54
rogpeppeTheMue, davecheney: yo!07:33
TheMuerogpeppe: Yo'  man.07:33
rogpeppedavecheney: looking good. one little question: is it possible to start a machine that's already been created?07:36
rogpeppedavecheney: i mean, will we ever want to actually do that?07:36
davecheneyrogpeppe: good question, curretly the start machine and create machine.loop are closely tied07:37
davecheneysimilarly when a stop is successful, the machine will regestier itself so i can't accept more messages07:38
davecheney*deregister07:38
rogpeppedavecheney: if we *don't*', then i'm not sure there's a need for the "start" message - we can just start when the machine is created.07:38
davecheneyrogpeppe: true, it's probably overengineered as it stands now07:38
davecheneyi'm not doing any more work on it this evening07:38
rogpeppedavecheney: and the loop becomes a single channel receive...07:39
davecheneyi'm tyring to fix the tests on https://code.launchpad.net/~dave-cheney/juju/go-watch-machines-topology/+merge/10629407:39
rogpeppedavecheney: cool.07:39
davecheneyrogpeppe: I also have to implement so kind of backoff logic in there07:42
rogpeppedavecheney: yeah.07:42
rogpeppedavecheney: that should be straightforward though - the goroutines mean no state machine is necessary, which should make the logic nice.07:42
davecheney<- time.After(5 *time.Seconds) would do in a pinch07:43
rogpeppedavecheney: yeah. maybe add a touch of randomness too.07:44
davecheneyrogpeppe: i'm thinking a sort of incresing backoff07:45
davecheneythat you kind of hint by saying .Success() or .Failed()07:45
davecheneywhich increases or decreasese the delay07:45
davecheneyso if things start to crap out, the delay between attempts grows07:45
rogpeppedavecheney: if you want to factor out the backoff strategy, you might want to have a look at attemptStrategy in environs/ec2, as a possible API example07:45
davecheneyrogpeppe: that sounds like exactly what I want07:46
rogpeppedavecheney: it doesn't do exponential backoff07:46
rogpeppedavecheney: but the API works nicely and was much discussed at the time07:46
davecheneyall the better to reuse it then07:46
rogpeppedavecheney: mind you, perhaps you never want to give up, in which case perhaps the API is overkill.07:48
rogpeppedavecheney: BTW did you see, someone discovered my shell? :-) http://debu.gs/entries/inferno-part-1-shell07:51
davecheney\o/ hacker news07:51
* rogpeppe never looks at hacker news. one stream too many.07:54
TheMuerogpeppe: Any usage statistics for your shell? Download numbers?07:56
rogpeppeTheMue: absolutely no idea. probably in the low 20s :-)07:56
davecheneyrogpeppe: i was going to say, it's probably not allowed to drink07:56
rogpeppeTheMue: noone uses it07:56
TheMuerogpeppe: Hehe, not even you?07:56
davecheneyrogpeppe: do you know a guy called Chris Collins07:56
rogpeppedavecheney: occasionally.07:56
rogpeppedrink?07:57
rogpeppedavecheney: not that i can remember, why?07:57
davecheneyhe's a plan 9 fan here in AU07:57
davecheneyhe's also a hardware hoarder like you07:57
rogpeppedavecheney: problem is inferno lives in a walled environment. it's great for dealing with stuff inside that environment, but not great if you want to interact with the host system07:58
rogpeppedavecheney: i am *not* a h/w hoarder :-)07:58
rogpeppedavecheney: i just have a NeXT!07:58
davecheneyrogpeppe: can the watcher.ContentWatcher return "" ?07:59
davecheneyie, return spuriously07:59
rogpeppedavecheney: it could return "" if the contents were ""07:59
davecheneywhat if ther were "" before08:00
rogpeppedavecheney: and i think if there's an error, the channel will be closed08:00
davecheneythe problem i'm having atm is the watcher fires once, but the contents don't change08:00
davecheneyso it gets out of phase with what the test expects08:00
rogpeppedavecheney: if the contents don't change, the watcher shouldn't fire08:00
rogpeppedavecheney: is that what you want?08:00
davecheneylet me check the channel isn't closing08:00
davecheneywatcher channel closed08:01
davecheneywatcher_test.go:275:08:01
davecheneysonovabitch08:01
davecheneyok, let me find out why08:01
davecheneybtw, /usr/share/zookeeper/bin/zkCli.sh08:06
davecheney^ i'm sure you guys know about his08:07
davecheneythis08:07
rogpeppedavecheney: it's really nasty. i wrote my own little cli for it.08:08
davecheneywatcher channel closed: watcher: can't get content of node "/machines": zookeeper: existsw "/machines": zookeeper is closing08:08
davecheneyurg08:09
davecheneyrogpeppe: it is really nasty, you can't set a key that contains whitespace08:09
rogpeppedavecheney: nice informative error message though :-)08:09
rogpeppedavecheney: *really*!?08:09
rogpeppedavecheney: omg that's not nice08:09
davecheneyrogpeppe: really.08:09
davecheneyrogpeppe: i ended up adding code into the provisionng agent to populate zk for me08:10
davecheneyas a test08:10
rogpeppedavecheney: oh, you mean the cli shell script08:10
rogpeppedavecheney: i thought you meant zk proper08:10
davecheneyrogpeppe: nah, just zkCli08:10
rogpeppedavecheney: if you look at it, it's got so much abstraction in it it's not true. not worth using.08:11
rogpeppedavecheney: definitely written by a jobsworth.08:11
davecheneyrogpeppe: right, problem fixed, was watching the wrong key08:15
davecheneybut now I have another problem08:15
davecheney... obtained *state.MachinesChange = &state.MachinesChange{Added:[]*state.Machine{(*state.Machine)(0xf8400c9360)}, Deleted:[]*state.Machine(nil)}08:15
davecheney... expected state.MachinesChange = state.MachinesChange{Added:[]*state.Machine{(*state.Machine)(0xf8400daf00)}, Deleted:[]*state.Machine(nil)}08:15
rogpeppedavecheney: that's an easy one to fix08:15
davecheney*Machines don't define equility08:15
rogpeppedavecheney: just expect the pointer type08:16
rogpeppedavecheney: it's doing DeepEquals, right?08:16
davecheneymm08:16
* davecheney reads the godoc for gocheck08:16
* TheMue moved his office to the veranda due to the beautiful weather today.08:25
rogpeppeTheMue: the weather *should* be beautiful today, but the haar has come in. dull again.08:42
TheMuerogpeppe: We are to far away from coast for haar (about 50 to 80 km, depending on if the Jadebusen, a bay, is seen as coast too). So now it's sunny and warm.08:44
TheMues/to far/too far/08:44
rogpeppeTheMue: we had the first decent sunshine in ages yesterday.08:44
TheMuerogpeppe: Hehe, that's England. ;) But we're also not very spoiled by the sun here.08:46
rogpeppeTheMue: it has been *particularly* bad in the last month.08:46
TheMuerogpeppe: We had a short sunny interrupt in March, but in total the spring is too late this year.08:48
rogpeppeTheMue: same here. must be the same across most of northern europe, i'd guess08:48
TheMuerogpeppe: Yep08:48
=== TheMue_ is now known as TheMue
niemeyerHello jujuers!12:37
TheMueniemeyer: Heya12:40
Aramevening.13:25
niemeyerAram: Heya13:28
andrewsmedinaniemeyer: morning13:49
rogpeppeniemeyer: hiya13:58
niemeyerHey guys14:00
andrewsmedinaniemeyer: I sent the code for review14:02
niemeyerandrewsmedina: That's great, thank you14:02
andrewsmedinaniemeyer: :D14:02
niemeyerrogpeppe: ping14:07
rogpeppeniemeyer: pung14:07
niemeyerrogpeppe: Yo14:07
niemeyerrogpeppe: Just wondering what's the status of your branches14:08
rogpeppeniemeyer: how's tricks?14:08
niemeyerrogpeppe: You've mentioned you had a pre-req that was being merged in14:08
rogpeppeniemeyer: yeah, you LGTM'd that and i submitted on friday.14:08
niemeyerrogpeppe: Is the branch named trunk (!?) ready for review?14:08
niemeyerrogpeppe: Right, but did you repush the follow up?14:08
niemeyers/repush/re-proposed/14:08
rogpeppeniemeyer: ahem, forgot to branch -m that one14:08
rogpeppeniemeyer: i *think* that was an orthogonal branch. let me check.14:08
niemeyerrogpeppe: Ok, just want to make sure I'm not reviewing something you don't want me to14:09
rogpeppeniemeyer: yes, i'd love a review of that on if poss.14:09
niemeyerrogpeppe: Sounds good, starting right away14:10
rogpeppeniemeyer: if i was able, i'd rename the branch "go-environs-simplify-provider-interface"14:10
niemeyerrogpeppe: Cool, no worries14:10
rogpeppeniemeyer: i think you'll like it BTW14:10
niemeyerrogpeppe: Sweet14:11
niemeyerrogpeppe: As an unrelated note that I just reminded, I pushed a goamz branch over the weekend to improve and fix s3 a bit14:12
niemeyerrogpeppe: I gave a try at using it for dreamhost's Objects service.. works!14:12
rogpeppeniemeyer: yeah, i'm intending to look at it. sorry about the breakage BTW!14:12
niemeyerrogpeppe: I mean, with the branch..14:12
niemeyerrogpeppe: No worries.. I think we all just have to be more diligent at running tests pre-submit14:12
rogpeppeniemeyer: maybe lbox submit's auto-merge functionality is really unnecessary, 'cos you should merge and test before submitting anyway14:13
niemeyerrogpeppe: Turns out it's quite boring to do that by hand all the time14:15
rogpeppeniemeyer: yeah, i guess.14:15
niemeyerrogpeppe: I know for sure.. been there :)14:16
niemeyer(for years!)14:16
rogpeppeniemeyer: but it certainly makes it easier to submit broken code...14:16
niemeyerrogpeppe: It makes it easier to submit any code.. broken or not14:16
niemeyerrogpeppe: Making that process more painful isn't a great way to solve the issue14:16
rogpeppeniemeyer: case: i merge, test, someone else submits a change to an API i'm using, i submit, lbox auto-merges => broken build.14:18
TheMueniemeyer: Any chance to take a look at https://codereview.appspot.com/6200044/ ?14:18
rogpeppeniemeyer: the gap between me testing and me submitting can be arbitrarily short14:18
niemeyerTheMue: There are great chances, yeah :)14:18
niemeyerTheMue: I've been reviewing the queue regularly14:18
niemeyerTheMue: So if it's in the active branches list, it will get reviewed14:19
TheMueniemeyer: Just wondered, because you already reviewed a follow-up.14:19
niemeyerrogpeppe: Sure, that's a problem.. let's fix it. We can do that without making our lives more painful.14:20
TheMueniemeyer: Right now I've finished Add…Relation() with tests as a next branch.14:20
niemeyerTheMue: Yeah, as I said, I've been reviewing regularly14:20
niemeyerTheMue: Every day14:20
rogpeppeniemeyer: is there a way to fix it without getting lbox to run the tests itself?14:20
niemeyerTheMue: I've also been ordering reviews by branch size14:20
niemeyerTheMue: If you want faster turn arounds, smaller branches will win14:20
TheMueniemeyer: OK14:21
rogpeppei was thinking that branch size should be judged by bzr diff | grep '^>' | wc -l14:21
niemeyerrogpeppe: Branch sizes is ordered by diff size14:21
rogpeppeotherwise we get penalised for many small changes, and also for deleting code14:21
niemeyerrogpeppe: https://code.launchpad.net/juju/+activereviews shows the number of lines14:21
niemeyerrogpeppe: Eventually we can have that.. we'll have to write logic that checks out branches, analyzes them, and builds a list in our preferred fashion14:23
niemeyerrogpeppe: Meanwhile, Launchpad has that nice column :-)14:23
niemeyerrogpeppe: Very nice indeed14:56
rogpeppeniemeyer: cool, thanks14:56
niemeyerrogpeppe: Some trivial suggestions only14:56
rogpeppeniemeyer: am just currently doing the awkward merge between that branch and the one submitted on friday14:56
niemeyerTheMue: Ah, I've already reviewed most of that branch on Friday, btw14:58
rogpeppeniemeyer: i'm a bit surprised that goyaml conventions for naming are different from json and xml14:58
niemeyerTheMue: I've purposefully not submitted the review because I wanted to look through it again after the weekend14:58
niemeyerTheMue: You've (silently?) refactored significantly the way Python stored information about the endpoints, and I want to see that again with a fresh mind today14:59
rogpeppeniemeyer: that case changing stuff was deliberately removed from them to make the mapping clearer, i think.14:59
rogpeppeniemeyer: i'll remove the tags anyway though14:59
TheMueniemeyer: Yes, that's a result of the discussion between William and me during UDS.14:59
niemeyerTheMue: Ok, this is a major change, though15:00
niemeyerTheMue: It shouldn't be submitted silently, without even a note in the description15:00
niemeyerTheMue: I'm still thinking through it. At this point just saying I'd appreciate a note next time.15:01
TheMueniemeyer: OK, will handle it more carefully next time.15:01
niemeyerTheMue: Thanks15:01
niemeyerrogpeppe: xml had stuff that was a *lot* more magical15:01
niemeyerrogpeppe: json too, IIRC15:02
rogpeppeniemeyer: still, i do like the "no magic at all" approach15:02
rogpeppeniemeyer: it makes the code more transparent.15:02
rogpeppeIMHO15:02
niemeyerrogpeppe: There's no magic in goyaml.. it's the lowercased name.15:02
niemeyerrogpeppe: If it doesn't match, it doesn't15:02
rogpeppeniemeyer: does that mean you can't marshal to an Uppercased name ?15:02
niemeyerrogpeppe: That no15:03
niemeyerrogpeppe: Erm15:03
niemeyerrogpeppe: No15:03
rogpeppeniemeyer: so it applies in one direction but not the other?15:03
niemeyerrogpeppe: If you want that, you need to use a tag15:03
niemeyerrogpeppe: It makes sense (to me, anyway) because most yaml is lowercase15:04
rogpeppeniemeyer: i'll remove the tags, but let me lodge an objection for the future. it's nice if marshalling packages are consistent like this.15:04
niemeyerrogpeppe: Same thing with mgo15:04
niemeyerrogpeppe: MongoDB is massively lowercase15:04
niemeyerrogpeppe: So goyaml and bson are consistent ;)15:04
rogpeppeniemeyer: i think having a non-bijective transformation is asking for trouble15:04
niemeyerrogpeppe: Not sure about what you mean. I've just said it's bijective.15:05
niemeyerrogpeppe: The marshaling name is the lowercased field name.15:05
rogpeppeniemeyer: ah. so i *can't* marshal to an upper-cased name?15:06
niemeyerrogpeppe: You have to use a tag name.15:06
niemeyerErm.. s/name//15:06
rogpeppeniemeyer: i see.15:06
rogpeppeniemeyer: sorry, i misunderstood15:06
rogpeppeniemeyer: that's not too bad, i guess.15:06
niemeyerrogpeppe: Yeah, that's how I feel too.15:07
niemeyerAnyway, lunch time15:07
niemeyerBack in a bit15:07
niemeyerTheMue: Will cover your branch first thing in the afternoon15:07
TheMueniemeyer: Thx a lot15:08
rogpeppeniemeyer: not sure about "LoadConfig" as a name. how about NewConfig ?15:16
niemeyerrogpeppe: +115:29
rogpeppeniemeyer: cool, done already :-)15:29
rogpeppeniemeyer: you might want to have a brief once-over of environs/interface.go before i submit, as i didn't quite use the comment text you suggested.15:47
rogpeppelunch15:55
niemeyerrogpeppe: Looking again.16:09
niemeyerrogpeppe: Replied16:14
=== Guest___ is now known as smaddock
rogpeppeniemeyer: thanks. actually i think it can be simpler still: // Every provider must accept the "name" and "type" attributes, the environment name and provider type.16:18
niemeyerrogpeppe: That's misleading. It's not A and B, C and D.16:19
niemeyerrogpeppe: If you're happy with the suggestion, can we please go with it?16:19
rogpeppeniemeyer: i'm not keen on the "with" in your suggestion. am trying to think of a better phrasing.16:20
niemeyerrogpeppe: Alright, please use whatever you fancy then16:20
niemeyerrogpeppe: If "with" is unacceptable I can't really improve on it16:20
rogpeppeniemeyer: it reads oddly, sorry, i can't quite say why.16:21
rogpeppeniemeyer: how about "Every provider must accept the name of the environment ("name") and the environment type ("type")."16:21
niemeyerrogpeppe: Sucks16:21
rogpeppehrm16:22
rogpeppeniemeyer: what about s/with/holding/16:22
rogpeppe?16:22
niemeyerrogpeppe: "provide the foo argument with the key" is extremely usual16:22
niemeyerrogpeppe: holding is equally usual16:23
niemeyerrogpeppe: (which means, I'm fine with it too)16:23
rogpeppeniemeyer: cool, i'll go with that, and ponder why my "awkward-english" alarm went off for "with" :-)16:24
niemeyerrogpeppe: Please let me know if you find out16:24
niemeyerrogpeppe: and thanks16:24
TheMueSo, off for the moment. Next branch is in.16:24
rogpeppeniemeyer: something to do with the fact there are two keys, i think.16:25
rogpeppeniemeyer: but can't pin it down more than that...16:25
niemeyerrogpeppe: Doesn't parse as related in my head16:26
niemeyeror, as Kevin would say, in my "heeeed"16:26
rogpeppe:-)16:26
rogpeppeniemeyer: in the end, i'm not really sure how "holding" is better than "giving", but i'm going with it anyway.16:29
niemeyerrogpeppe: It doesn't *give* anything to anyone.. it contains, and is.16:29
rogpeppeniemeyer: one use of the word "give" is "to impart or communicate"16:31
rogpeppeniemeyer: which is how i was using it.16:32
niemeyerrogpeppe: Try to put "communicates" or "imparts" there..16:32
niemeyerrogpeppe: It's bad too.16:32
rogpeppe/ Every provider must accept the "name" and "type" attributes, communicating the environment name and provider type respectively.16:32
rogpeppeseems to work ok to me.16:33
rogpeppeapart from the length of "communicate" :-)16:33
niemeyerrogpeppe: Still sounds bad to me. But we don't have to agree on that.16:33
rogpeppeniemeyer: it's fine. i'll try to avoid it in the future...16:33
niemeyerrogpeppe: Thakns16:34
rogpeppeniemeyer: submitted. thanks a lot for the review.16:40
niemeyerrogpeppe: np16:44
niemeyerrobbiew: Do you know if we'll have that meeting in 7 mins?16:53
robbiewno clue...I can't make it due to a conflict though16:53
robbiewniemeyer: it looks like a lot of folks declined, so perhaps not16:53
niemeyerrobbiew: There are 20 people in that call.. it seems likely that lots of folks will decline :)16:54
robbiewlol16:54
robbiewgood point16:54
rogpeppeniemeyer: micro branch for review: https://codereview.appspot.com/621905416:56
niemeyerrogpeppe: Neat, LGTM16:56
rogpeppeniemeyer: thanks16:56
rogpeppeniemeyer: yay, fastest turnaround ever!16:57
niemeyerrogpeppe: Small branches FTW! :-)16:57
rogpeppeniemeyer: a larger branch for review: https://codereview.appspot.com/619806417:40
niemeyerrogpeppe: Cheers17:40
rogpeppeniemeyer: though it's not nearly as large as it appears.17:40
rogpeppeniemeyer: i'm off for the day. see you tomorrow!17:41
niemeyerrogpeppe: Have a good one17:41
niemeyerStepping out for a while22:04
andrewsmedinagt23:06

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