/srv/irclogs.ubuntu.com/2012/09/12/#juju-dev.txt

wrtpfwereade: hiya06:41
fwereadewrtp, heyhey06:41
fwereadewrtp, actually, can I get your opinion on a naming issue in uniter?06:42
wrtpfwereade: sure06:42
fwereadewrtp, ok, this is about persistent states06:42
fwereadewrtp, ATM I have Op (Install, Upgrade, RunHook, Abide) and Status (Queued, Pending, Committing)06:42
fwereadewrtp, niemeyer suggests s/Status/OpStep/ (+!) and s/Committing/Done/ (not sure)06:43
fwereadewrtp, I was wondering if a smarter naming scheme might burst fully-formed from your mind, because I think there's something wrong even with the changes that I can't put my finger on06:44
wrtpfwereade: OpStep certainly seems a little odd06:44
fwereadewrtp, well, Step perhaps -- I think it does beat Status -- but I think that maybe there's something larger that's wrong06:45
wrtpfwereade: was this from comments in a review?06:45
fwereadewrtp, yeah -- and its current form is at least partly a mix of what I originally thought and niemeyer's suggestions as well06:45
fwereadewrtp, honestly I can live with it, with niemeyer's suggestions, and be perfectly happy06:46
wrtpfwereade: can you link to his comment where he suggests OpStep?06:46
fwereadewrtp, I'm just checking for a fresh perspective on it, because I think I had already overthought it a while ago06:46
fwereadewrtp, just a mo06:46
fwereadewrtp, https://codereview.appspot.com/6489083/diff/3001/worker/uniter/state.go#newcode31 and a comment just below as well06:47
wrtpfwereade: i think he's suggesting s/Status/Op/ and s/Op/OpStep/06:48
wrtpfwereade: which makes more sense06:49
fwereadewrtp, sorry, that makes no sense to me :(06:49
wrtpfwereade: although i'm still not entirely sure06:49
fwereadeISTM he's clearly referencing Status when he suggests OpStep...06:50
fwereadeand an Op does indeed pass through a number of steps/statuses/whatevers06:51
wrtpfwereade: how about Op and OpStatus ?06:51
fwereadewrtp, I *think* step is a win over status06:51
wrtpfwereade: i'm suggesting that you just do s/Status/OpStatus/06:52
wrtpfwereade: because, if gustavo's right in that comment, the Status is the status *of* the op06:52
fwereadeffs, sorry06:53
wrtplast seen: [07:51:58] <fwereade> wrtp, I *think* step is a win over status06:54
fwereadewrtp, ...the Status is the status *of* the op06:54
wrtpfwereade: that's the last thing i said06:54
fwereadewrtp, IMO step has a valid and helpful semantic payload over status06:54
wrtpfwereade: i'm not suggesting we use step06:54
wrtpfwereade: oh  misread sorry06:55
wrtpfwereade: i'm not suggesting we use step *instead of* status06:55
fwereadewrtp, I know; but I think niemeyer is, and I think step is strictly etter than status06:55
fwereadewrtp, what I'm whining about is a sense that it's still not *good*06:56
fwereadewrtp, and I feel that I should probably recast the naming of all related states such that everything magically makes perfect sense06:56
wrtpfwereade: it doesn't seem quite right to me, but i haven't looked at the code much. how is "queued" a "step"?06:56
fwereadewrtp, but I can't figure out a better way of looking at them06:56
fwereadewrtp, hm, yeah, ISWYM -- but they're steps in that they have a defined order to them06:57
fwereadewrtp, an evil little part of me is suggesting Before/During/After might be a fruitful area for exploration06:58
fwereadewrtp, anyway, don't let this seriously distract you06:58
fwereadewrtp, I'm ok going with niemeyer's suggestions, but I'm hoping that a nice name-fixing followup will someday come to fruition06:59
wrtpfwereade: i prefer OpStatus to OpStep - a step to me indicates an action not a condition06:59
wrtpfwereade: as in "a step towards a better reality" :-)06:59
fwereadewrtp, I see OpStep as specializing the Op action06:59
fwereadewrtp, yeah, understood, might become convinced once it's percolated07:00
wrtpfwereade: i see what you mean, but i think i see OpStatus as *about* the Op action07:00
wrtpfwereade: and makes it clearer, perhaps, that an Op is something you *do* and an OpStatus is something you *move towards*07:01
fwereadewrtp, is it though? I suspect you have an interesting view on this but I'm having difficulty meshing it with my own07:06
fwereadewrtp, feels to me like an OpStep is something that you are *doing* (but, yeah, Queued doesn't fit there)07:08
fwereadewrtp, steps: prepare, run, cleanup?07:08
fwereadewrtp, not quite right either though :(07:08
wrtpfwereade: what do you find not-quite-right about OpStatus?07:09
fwereadewrtp, I find the whole naming scheme ...somewhat off07:10
fwereadewrtp, that's as well as I can characterise it atm07:10
wrtpfwereade: you're certainly coming from a deeper understanding of the problem than me07:11
fwereadewrtp, heh, I think I'm way off in the Slough of Overthinking07:21
wrtpfwereade: i know what you mean07:21
wrtpfwereade: i'm just trying to convince myself of whether gustavo's right and my charm suite branch is in fact crack07:22
wrtpfwereade: i'm just trying to convince myself of whether gustavo's right and my charm suite branch is in fact crack07:23
fwereadewrtp, I *think* you're on the side of the angels there, but I'm not 100% sure07:24
wrtpfwereade: it definitely *felt* good. the main part of his argument comes down to performance, i think, so i'm just checking if it has any measurable impact07:25
fwereadewrtp, oh *crap* I've got to go out, completely forgot07:25
fwereadewrtp, might be a couple of hours :(07:25
fwereadeand am late already, balls07:25
wrtpfwereade: ok, see you later. have as much fun as you can doing what you're doing :-)07:25
Arammorning.08:53
wrtpAram: morning10:22
wrtpfwereade: i'm just about to add upgrading to the uniter - just checking that you're not already working on it.10:25
wrtpfwereade: can you help me to interpret gustavo's last remark here? https://codereview.appspot.com/6501106/diff/1001/worker/machiner/machiner.go#newcode2811:31
wrtpfwereade: i'm not sure i can understand it enough to do something right11:31
fwereadewrtp, heyhey11:47
wrtpfwereade: i *think* i've worked it out11:47
fwereadewrtp, sorry about that, that was quite the unexpectedly complicated morning11:47
wrtpfwereade: np11:47
wrtpfwereade: i think that a container API like this might work: http://paste.ubuntu.com/1200404/11:48
fwereadewrtp, ISWYM, it's not entirely clear t what extent he's agreeing with me and to what extent he's saying something else11:48
wrtpfwereade: wdyt?11:48
* fwereade is thinking11:49
fwereadewrtp, I think that, yes, *probably* we will want it to look like that11:49
wrtpfwereade: i've got to do something like that, as i need to pass in the VarDir somehow11:50
fwereadewrtp, the trouble is I kinda feel the surroundings are still somewhat in flux so I'm still not quite sure11:50
fwereadewrtp, indeed11:50
fwereadewrtp, I'd like it if we did the same with LogDir too11:50
wrtpfwereade: i tried a more minimal change before, but perhaps this will be better looked on11:50
wrtpfwereade: LogDir?11:50
wrtpfwereade: you mean we should have container.Config.LogDir?11:51
fwereadewrtp, /var/log/juju, needed for --log-file in jujud upstart scripts11:51
fwereadewrtp, I *think* so, yes11:51
wrtpfwereade: can't we just derive it from VarDir ?11:51
fwereadewrtp, vardir/../../log/juju?11:52
wrtpfwereade: oh yeah11:52
wrtp:-)11:52
fwereade;p11:52
wrtpfwereade: you're probably right.11:52
wrtpfwereade: i'll add a TODO11:52
fwereadewrtp, cheers11:53
wrtpfwereade: is the log directory currently configurable anywhere in fact?11:53
fwereadewrtp, I think it's just hardcoded in cloudinit11:54
wrtpfwereade: i thought so. i don't mind that too much tbh, but some day11:54
wrtp fwereade: any chance you could have another quick once-over on https://codereview.appspot.com/6501106 ?13:54
wrtpfwereade: i made that container change; i'm hoping it's not yet more crack.13:54
fwereadewrtp, ofc13:55
fwereadewrtp, it's tricky -- I *know* there's something nice waiting to emerge from the marble somewhere around there but I don't think either of us have quite nailed it yet (although I think you are looking in the right place)13:55
wrtpfwereade: it doesn't fix all the container problems (i have another branch for that), but i feel the API entry points are about right now.13:56
fwereadewrtp, +1 on Deploy/Destroy14:05
wrtpfwereade: thanks14:05
fwereadewrtp, just rereading everything else to try to remember what was involved14:05
fwereadeniemeyer, heyhey14:05
wrtpniemeyer: hiya14:05
niemeyerGOod mornings14:05
niemeyerOr afternoons I guess14:05
fwereadeniemeyer, sorry I missed you last night -- I'm still a little bit unsure about the uniter op/step naming, but have resolved to stop vacillating and propose it again more-or-less as you suggest; if I come up with something better that can be a new CL later14:08
niemeyerfwereade: Cool, I'm not super attached to those names either.. they just felt closer to what was going on than the State.Status stuff14:09
fwereadeniemeyer, yeah, I have a deep-seated feeling that there's some simple recasting of everything going on there that will make clear and obvious sense14:10
fwereadeniemeyer, the actual *logic* is really pretty trivial14:10
wrtpniemeyer: i'm hoping that this isn't still crack: https://codereview.appspot.com/650110614:10
wrtpniemeyer: and it would be nice if you could resolve the juju-dir/var-dir question with fwereade. i don't feel strongly either way.14:11
fwereadeniemeyer, well, I don't like VarDir unless it actually refers to /var, but I can live with any name really14:11
wrtpif i had to choose, "jujuDir" feels more descriptive. varDir doesn't really mean anything other than "directory with some variable contents" to me14:12
wrtpjujuRoot might work too14:13
niemeyer"""14:13
niemeyerIt is vague because it is truly vague. The only thing it means is "juju's14:13
niemeyerdirectory under var", because under it we have a bunch of different things with14:13
niemeyermore precise naming (bundles, unit containers, etc). No single precise FooDir14:13
niemeyername will encompass it all.14:13
niemeyer"""14:13
fwereadeniemeyer, well, it's *one* of juju's directories under var14:13
fwereadeniemeyer, if it were the only separate juju-specific dir under var I wouldn't be bothered14:14
wrtpniemeyer: i'm not sure it's entirely relevant that it's under var. it *may* be under var, but that's a platform-specific decision.14:14
wrtpniemeyer: hence we can configure it14:14
niemeyerwrtp, fwereade: Okay, alternatives?14:14
wrtpniemeyer: jujuRoot ?14:14
niemeyerwrtp: That's /14:15
fwereadeniemeyer, we also used jujuHome in a couple of places in python iirc, but then that's not necessarily /var/lib/juju either14:15
niemeyerwrtp: Since that's the only directory that shares ~/.juju, /var/log/juju, /var/lib/juju, and whatever else we need14:15
fwereadeniemeyer, no favour for LibDir/LogDir?14:15
wrtpjujuDataDir ?14:16
wrtpor just dataDir, perhaps14:16
niemeyerDataDir?14:16
fwereadeniemeyer, +114:16
niemeyerwrtp: +1 :-)14:16
wrtp:-)14:16
wrtpok, i'll go for that then14:16
niemeyerWoohay consensus14:16
wrtpniemeyer: shall i change the flag name too?14:17
wrtpperhaps i should do that in another CL actually14:17
wrtprather than bulking this one up more14:17
niemeyerwrtp: --data-dir sounds sane14:20
* Aram food14:23
wrtpfwereade: container fixed, i hope: https://codereview.appspot.com/649811715:03
fwereadewrtp, sweet,k looking15:04
fwereadewrtp, LGTM15:13
fwereadewrtp, very nice15:14
wrtpfwereade: wonderful thanks15:14
wrtpfwereade, niemeyer: i've made the change to dataDir from varDir. https://codereview.appspot.com/650110615:24
niemeyerwrtp: Checking15:28
fwereadewrtp, LGTM15:31
wrtpfwereade: thanks15:31
niemeyerwrtp: done15:41
wrtpniemeyer: what's the difference between container.Simple(VarDir, InitDir) and container.Simple{VarDir: varDir, InitDir: initDir} ?15:43
wrtpniemeyer: given that we're eschewing globals, i can't see what the former can do that the latter can't15:43
niemeyerwrtp: This question seems to assume that we have Simple{}, which we don't.. so I don't understand why you're asking me that15:44
wrtpniemeyer: we *did* have Simple, but you told me it was wrong.15:44
wrtpniemeyer: so i changed to use the current scheme (which BTW i think is significantly better)15:44
niemeyerwrtp: Sorry, I'm pretty lost15:45
niemeyerwrtp: The branch is doing something else entirely15:45
niemeyerwrtp: I've reviewed it, and pointed it has issues15:45
niemeyerwrtp: Now you're blaming me for saying something else was improper, that is not what is in the branch, nor what I'm suggesting15:45
niemeyerwrtp: I'd like to help, but I don't know hwo15:45
niemeyerhow15:45
wrtpniemeyer: *somehow* i've got to pass VarDir and InitDir through to container. i changed container so that that was done in a nice way, i thought.15:46
niemeyerwrtp: Yes, that's exactly what my comment is about15:46
niemeyerwrtp: The package interface was changed entirely15:46
niemeyerwrtp: unnecessarily15:46
niemeyerwrtp: and I'm explaining that.. that's all15:46
niemeyerwrtp: The original interface was better, as it allows containers to be implemented without changing the consumer interface15:47
wrtpniemeyer: i'm not sure i understand that15:47
niemeyerwrtp: It doesn't matter much, really15:47
niemeyerwrtp: your branch is about changing a global to a local.. we don't need to change the package interface for that15:47
niemeyerwrtp: We only need to provide simple with the location15:47
wrtpniemeyer: i don't see why a function constructor is better than a data constructor in this case.15:48
niemeyerwrtp: The original interface was put in place precisely so that we can have multiple containers, with different needs, and the same interface15:48
niemeyerwrtp: We're losing that15:48
niemeyerwrtp: Let's not, please, and let's focus on what you're claiming to do with the bracnh15:48
wrtpniemeyer: k15:48
* wrtp rewinds the dataDir changes15:49
niemeyerwrtp: The data constructor is fine, btw15:49
niemeyerwrtp: If you want Simple{}, that's fine15:49
niemeyerwrtp: I don't think I argued against that15:49
wrtpniemeyer: that's what i had that you objected to!15:49
niemeyerwrtp: Where did I do this?15:50
wrtp""15:50
wrtpThis is true, but the decision is made considering settings, which means15:50
wrtpthat the API won't look like this (won't receive it through15:50
wrtpconstructor), so I agree with William that this seems premature. It's15:50
wrtpalso a bit unrelated to the CL topic.15:50
wrtp""15:50
niemeyerwrtp: That's *completely* unrelated to the container package interface15:51
niemeyerwrtp: That's in *machiner*15:51
niemeyerwrtp: and is still true.. we don't have to pass a container through its constructor15:51
wrtpniemeyer: ok, so why was that code wrong? i must have got the wrong end of the stick15:51
wrtp(i did find that sentence difficult to parse, it's true)15:51
niemeyerwrtp: The machiner will never make good use of a container being passed through its constructor15:51
niemeyerwrtp: Because it needs to decide internally how it's supposed to deploy15:52
wrtpniemeyer: there's only one Simple container though.15:52
niemeyerwrtp: !?15:52
niemeyerwrtp: and the sky is blue..? :)15:52
wrtpniemeyer: there's only one Simple container that the machiner needs to use15:53
wrtpniemeyer: it can use that for all local deployments15:53
wrtpniemeyer: hence it can live in the Machiner struct AFAICS with no loss of generality15:54
niemeyerwrtp: Sorry, I don't understand your point.. yes, there's only ever going to be one Simple container in juju15:54
niemeyerwrtp: What does that mean?15:54
wrtpniemeyer: it means i can store it in the Machiner struct, no?15:54
wrtpniemeyer: which is what i was doing. i seem to be missing some fundamental issue here...15:54
niemeyerwrtp: You can store it wherever you want..15:55
niemeyerwrtp: NewMachiner should not take a container15:55
wrtpniemeyer: it doesn't15:55
niemeyerwrtp: That's William's point, and that's my point15:55
wrtpniemeyer: it never did15:55
wrtpniemeyer: the *internal* constructor took a container15:55
wrtpniemeyer: so that we can see when deploys happen15:55
wrtpniemeyer: (there's otherwise no way of finding that out, i think)15:56
niemeyerhttps://codereview.appspot.com/6501106/diff/1001/worker/machiner/export_test.go?column_width=9015:56
niemeyerwrtp: That's broken15:56
wrtpniemeyer: ok, so how can i test that the machiner is actually doing something?15:57
niemeyerwrtp: Sorry, can we stop the derail?15:57
niemeyerwrtp: This CL is changing VarDir to a local..15:57
niemeyerwrtp: Can we do just that and move on?15:57
niemeyerwrtp: We've been debating about changes in interfaces to various things so far15:57
wrtpniemeyer: the old code changed the instance of Simple in the container package, so it could mock it.15:59
wrtpniemeyer: we can't do that any more.15:59
wrtpniemeyer: so this was my simplest idea for changing that15:59
niemeyerwrtp: I don't understand.. we had a simple container being used15:59
niemeyerwrtp: simple := container.Simple{DataDir: dataDir}15:59
niemeyerwrtp: Done?15:59
niemeyerwrtp: I don't understand where all the debate is coming from15:59
wrtpniemeyer: if we do that, how can the testing code know when the machiner is actually doing a deploy?16:00
niemeyerwrtp: How did we do that before?16:00
wrtpniemeyer: Simple was a global variable of type container.Container. we changed its value in the test to our own local implementation.16:01
niemeyerwrtp: Argh, ok.. so we were already mocking before :(16:01
wrtpniemeyer: yes. and given that container can't work if you're not root, i don't see how we can avoid it16:01
niemeyerwrtp: What's the simple container doing?16:02
* niemeyer looks16:02
wrtpniemeyer: it calls upstart.Install16:02
niemeyerwrtp: Yeah, so why is that being mocked? If we're passing the directories being changed in.. ?16:02
niemeyerwrtp: Hmm.. I suppose container is broken, since it should be starting the upstart script too?16:03
wrtpniemeyer: sorry, i don't understand the second part of your question16:03
niemeyerwrtp: DataDir and InitDir are both variables16:03
wrtpniemeyer: it does start the upstart script too, i think16:03
niemeyerwrtp: That we're now giving the machiner16:03
niemeyerwrtp: It should.. but it's not clear if it does..16:03
wrtpniemeyer: only DataDir actually16:03
* niemeyer looks at what Install does16:03
niemeyera installs and *starts*, ok16:04
niemeyerwrtp: Okay, sorry, the confusion is my fault then16:04
niemeyerwrtp: We are already stuck with the mocking of container, and once we introduce a second one we'll need to change the way we're testing the machiner16:05
niemeyerwrtp: +1 on your original design of passing a container in for tests16:05
wrtpniemeyer: i think the container package can decide which container is appropriate to use, based on the Unit16:05
niemeyerwrtp: It wasn't clear to me that were were replacing what the container.Simpler global meant16:06
wrtpniemeyer: that's the rationale for the most recent change16:06
niemeyerwrtp: It can't16:06
wrtpniemeyer: no? ok.16:06
niemeyerwrtp: Container kind is an environment-defined setting, not per unit16:06
wrtpniemeyer: what info does the uniter have that container doesn't?16:07
wrtpniemeyer: and why couldn't that environment setting live in the Config?16:07
niemeyerwrtp: Sorry, I don't understand the question... container is a deployment package.. uniter has a lot of information that container doesn't16:07
wrtpniemeyer: ok, so do i take it that my original code was ok?16:10
niemeyerwrtp: The original way in which you were testing machiner was ok, if that's your question16:11
niemeyerwrtp: We'll need to rethink it when we introduce LXC, but it doesn't matter for now16:11
niemeyerwrtp: We already have that problem16:11
wrtpniemeyer: i think the most recent approach doesn't have the problems with LXC. the kind of container to use for isolation could be a parameter in the config.16:12
wrtpniemeyer: and the container package could decide whether it's appropriate to isolate a unit16:12
wrtpniemeyer: so the current machiner code would hardly need to change at all for LXC16:13
wrtpniemeyer: i'm still pushing slightly for it because it's going to be a right hassle to rewind and go through another half-hour's worth of conflict resolution.16:13
niemeyerwrtp: If that's all it takes, we can trivially pass a set of containers instead of a single one and get to the same place..16:15
niemeyerwrtp: The changes in design to the container package are not an improvement, and I'd appreciate if we didn't do that16:16
niemeyerwrtp: You're basically dropping the concept of a Container interface, and putting it all inside the package itself as hidden details, with a single jumbo config that acts for all containers16:17
niemeyerwrtp: It also takes away the ability for a container implementation to cache information, such as what are the things it has seen alive or not16:17
niemeyerwrtp: we'll have to land that information in globals instead, if we want to do it16:18
niemeyerwrtp: These aren't improvements16:18
wrtpniemeyer: ok, i finally think i see where you're coming from on this.16:19
wrtpniemeyer: thanks for explaining16:20
niemeyerwrtp: np, and sorry for the partial detail on the test of machiner.. I misunderstood there16:21
niemeyers/detail/derail/16:21
wrtpniemeyer: that's ok.16:21
wrtpniemeyer: luckily i can work late tonight16:21
niemeyerwrtp: Ouch16:23
wrtpniemeyer: it's true that i'm a bit sad about the derail, but i'm also stoked to get past these branches and actually get stuff working. we're really very close.16:29
niemeyerwrtp: +1!16:33
wrtpniemeyer: hopefully this will do the trick: https://codereview.appspot.com/650110616:46
niemeyerwrtp: Done, cheers16:51
wrtpniemeyer: thanks16:52
wrtpniemeyer: do you know about this test failure? http://paste.ubuntu.com/1200932/17:25
niemeyerwrtp: ... Panic: no reachable servers (PC=0x4116D4)17:26
niemeyerwrtp: This is the root17:26
niemeyerwrtp: mgo.Dial is not finding the mongodb server running17:27
wrtpniemeyer: is that a race thing? i only get this error sporadically17:27
wrtpniemeyer: perhaps some timeout should be longer?17:27
niemeyerwrtp: 15 seconds is the default IIRC.. I've never seen a mongodb server take that long to start17:27
wrtpniemeyer: (speaking of which, i got an mstate/presence failure this morning - the test that waits for 1 second)17:27
niemeyerwrtp: It's generally sub-second17:28
wrtpniemeyer: i guess mongo just failed to start then17:28
niemeyerwrtp: Yeah, wonder why17:29
wrtpniemeyer: is there a log somewhere?17:29
niemeyerwrtp: the suite will tell17:29
niemeyerwrtp: Apparently not17:30
wrtpniemeyer: yeah, looks like s.output is dropped on panic.17:31
wrtpniemeyer: that might be a useful thing not to do :-)17:31
niemeyerwrtp: Indeed17:32
wrtpinteresting. first time i've seen this live failure:17:41
wrtp07.05.602 /home/rog/src/go-alt/src/launchpad.net/juju-core/environs/jujutest/livetests.go:162:17:41
wrtp07.05.606     c.Assert(err, IsNil)17:41
wrtp07.05.606 ... value *errors.errorString = &errors.errorString{s:"session error: ZooKeeper connecting"} ("session error: ZooKeeper connecting")17:41
wrtpniemeyer: i thought zk didn't time out.17:41
niemeyerwrtp: ... don't know what to say17:45
wrtpniemeyer: 's'alright. i wondered if you might have seen similar.17:45
niemeyerwrtp: I haven't17:45
wrtpniemeyer: it's not the world's most informative error message :-)17:45
wrtpniemeyer: currently trying to reproduce. we'll see.17:46
niemeyerwrtp: zk definitely has timeouts, and we definitely fail if we get an error from zk17:49
wrtpniemeyer: looks like it was a sporadic failure.17:50
niemeyerwrtp, fwereade: You'll probably like that one: https://codereview.appspot.com/650310917:56
wrtpniemeyer: yay! LGTM17:59
wrtpniemeyer: hmm, i did a apt-get update; apt-get install lbox and it hasn't found a newer version. should i use the Go version?18:02
niemeyerwrtp: There's certainly a new version in the PPA18:03
niemeyerwrtp: 1.0-56.64.39.11~precise118:03
niemeyerwrtp: This is the latest18:03
* wrtp can't remember how to find the currently installed version18:04
wrtpniemeyer: 1.0-47.61.38.10~oneiric118:05
wrtpis what i've got18:05
wrtphmm, i wonder why i'm on an oneiric version18:06
wrtpdarn18:09
wrtp% go get launchpad.net/lbox18:09
wrtppackage launchpad.net/lbox18:10
wrtpimports exp/html: unrecognized import path "exp/html"18:10
wrtpoh well, will wait until it works. can't be bothered to update to go tip for now.18:10
wrtpniemeyer: could we have a chat about this? i'd like to move forward with it if possible. https://codereview.appspot.com/6495086/18:14
niemeyerwrtp:18:23
niemeyer[niemeyer@gopher ..nchpad.net/lbox]% grep html *18:23
niemeyer[niemeyer@gopher ..nchpad.net/lbox]%18:23
niemeyerwrtp: Your machine seems pretty unfriendly today :)18:23
niemeyerwrtp: Ah, could be lpad..18:24
wrtpniemeyer: the actual error is18:24
wrtp../goetveld/rietveld/form.go:7:2: import "exp/html": cannot find package18:24
niemeyerwrtp: form.go:        "launchpad.net/goetveld/rietveld/html"18:25
niemeyerwrtp: The package is in the PPA, and the goetveld package doesn't depend on exp/html for a while18:25
wrtpniemeyer: ah! i should remove goetveld18:25
niemeyerwrtp: Seems like things are out of date in both fronts there18:25
wrtpniemeyer: pity go get -u doesn't work18:25
niemeyerwrtp: Check if you have the PPA configured18:25
niemeyerwrtp: apt-get update won't help otherwise18:26
wrtpniemeyer: which PPA is it?18:26
niemeyerwrtp: ppa:gophers/go18:26
wrtpniemeyer: ah, that'll be the reason then. i guess it was probably lost when my system upgraded.18:28
wrtpniemeyer: thanks18:29
niemeyerwrtp: np18:29
wrtpniemeyer: from the CL:19:18
wrtp""19:18
wrtpTwo options with the current interface - either I add a series19:18
wrtpargument to all the entry points, or I add "WithSeries" variants19:18
wrtpof all the functions. Any preference here before I go off and do the19:18
wrtpwrong thing?19:18
wrtp""19:18
wrtphave you got a preference here?19:18
niemeyerwrtp: Your changes to the actual method interfaces seemed nice19:23
niemeyerwrtp: My complaints was only about the whole refactoring on how the helper is instantiated and hooked everywhere19:23
wrtpniemeyer: i wish i'd realised that. it sounded like you didn't like any change to the existing interface.19:24
niemeyerwrtp: Having series seems fine19:24
wrtpniemeyer: i think i'll go with reverting everything. it's much less work.19:25
niemeyerwrtp: I realize you're trying to fix a problem you found19:25
niemeyerwrtp: I was only arguing that the problem you found seems much simpler than the amount of work we've both put on this already19:25
wrtpniemeyer: perhaps that's true. but i've already done that work, and now i have to do quite a bit more to undo it and put in another fix.19:26
niemeyerwrtp: Yep, you've already done that work *several* times..19:26
niemeyerwrtp: unfortunately the last incarnation doesn't look good19:26
wrtpniemeyer: twice only.19:26
niemeyerwrtp: But I cant' be blamed for not liking every incarnation :)19:26
wrtpniemeyer: i *thought* it was significantly better than the suite idea19:27
niemeyerwrtp: There was a simple change in the beginning, then a refactoring, then another refactoring19:27
niemeyerwrtp: While all you needed was a series argument19:27
wrtpniemeyer: that's true. sometimes it seems like something is worthwhile when actually it's not.19:29
wrtpniemeyer: BTW there *was* only one refactoring - note that most files have only two versions.19:31
niemeyerwrtp: There were pastes before that19:32
niemeyerwrtp: But it's ok, it's really not worth arguing further19:32
wrtpniemeyer: agreed. i'm on it now.19:33
wrtpdammit, it's not as easy as i thought. unmerging is a right pain.19:39
wrtpniemeyer: this is trivial, as discussed earlier: https://codereview.appspot.com/6489117/21:09
niemeyerwrtp: I'm half-way through already.. just be ready in a moment21:09
wrtpniemeyer: ta21:09
niemeyerwrtp: done21:25
wrtpniemeyer: thanks a lot.21:28
niemeyerwrtp: My pleasure, thanks for the fixes21:29
wrtpniemeyer: did you look at the branch i mentioned above (the series argument added to the Repo methods)? it should be trivial.21:30
wrtpniemeyer: (just realised it looks like you might have assumed i was referring to another branch)21:31
wrtpniemeyer: i can submit the authorize-internal-traffic branch which depends on it if it LGTY21:33
wrtpniemeyer: i've discovered a little more about the bizarre bzr behaviour i encountered earlier. it's in the branch in launchpad. if i push to any other branch, it works.21:34
wrtp% lbox propose -wip -req 058-testing-charm-series21:37
wrtperror: Branch check failed: exit status 121:37
wrtp-----21:37
wrtpgofmt is sad:21:37
wrtp  environs/jujutest/livetests.go21:37
wrtpyay!21:37
niemeyer!!21:37
niemeyerwrtp: Hmm, interesting21:37
niemeyerLOL21:38
niemeyerwrtp:21:38
niemeyerhttps://codereview.appspot.com/6498117/21:38
niemeyerhttps://codereview.appspot.com/6489117/21:38
niemeyerwrtp: Both are yours :-)21:38
wrtpniemeyer: erm, yes. is there something i should notice there?21:39
niemeyerwrtp: The numbers21:40
wrtpniemeyer: cool!21:40
wrtpniemeyer: now i see why you assumed i was referring to a different branch!21:40
niemeyerwrtp: RIght :)21:41
wrtpniemeyer: might the "dangling branch reference" be the source of my problem? http://paste.ubuntu.com/1201394/21:42
wrtpniemeyer: (not that i care any more; i'm abandoning that branch because my prereq has changed)21:42
niemeyerwrtp: Uh.. probably21:43
niemeyerwrtp: I don't recall seeing that before21:43
niemeyerwrtp: review sent21:43
niemeyerwrtp: Just suggested inverting the parameters so it matches how we use the two arguments elsewhere (sorry :()21:43
wrtpniemeyer: damn, i wondered about that as i was doing it21:43
niemeyerwrtp: Hopefully sed can do it for you21:45
wrtpniemeyer: yeah, i did it before. shouldn't be much hassle.21:45
wrtpniemeyer: structural regexps - even better than sed :-)21:45
niemeyerwrtp: Oh?21:48
niemeyerwrtp: How does that work?21:49
wrtpniemeyer: http://bit.ly/RSC1iU21:51
niemeyerCHeers21:55
wrtpniemeyer: here was my expression for changing the args around BTW. it doesn't really leverage much though - sed would be just as easy here.22:03
wrtpX/./,x/testing.Charms.*"series"\)/s/(,[^,]*), "series"\)/, "series"\1)/22:03
wrtpniemeyer: but the x pattern is a common one - narrow down scope until you've got something of known form. then hack at it22:03
wrtpniemeyer: it occurs to me that gofmt would probably have been a better approach here!22:07
wrtpniemeyer: gofmt -w -r 'testing.Charms.x(z, a, b) -> testing.Charms.x(z, b, a)' $gofiles22:14
wrtpniemeyer: gofmt rules22:15
niemeyerwrtp: Woah22:34
niemeyerwrtp: Impressive indeed22:34
wrtpniemeyer: the only thing it failed on was when it was using coretesting not testing22:35
wrtpniemeyer: i think i need a UnitWatcher, same kind of thing as the MachineWatcher. sound reasonable to you?22:59
grantgmhey folks! i'm giving a talk about PaaS and wondering if anyone has a reference for when Juju (or Ensemble, at that time) was first released? I don't see it on either the "about" page or the wikipedia page...23:07
SpamapSgrantgm: good question. :)23:08
grantgm:)23:09
SpamapSgrantgm: If you count shipping it in the distro as "first released" then that would be when Ubuntu 11.10 was released23:09
SpamapSgrantgm: 0.5+bzr398-0ubuntu123:09
grantgmhmmm...ok, that sounds like about when I first heard of it. but presumably it was usable via PPA before that, right?23:10
SpamapSgrantgm: yeah, the first time I saw it was January of 2011, from the PPA23:11
grantgmjust want to make sure i'm not short-changing it w.r.t. the big release announcements (before they were really usable) from the other players23:11
grantgmSpamapS, ok, cool, i guess i'll go with that23:12
grantgmSpamapS, thanks!23:12
SpamapSgrantgm: its still, in many ways, just a tech preview :)23:12
SpamapSgrantgm: http://juju.ubuntu.com/docs .. says so :)23:12
grantgmwell, it's a pretty damn impressive tech preview, then! but really, aren't they all? :)23:13
grantgmSpamapS, thanks again!23:13
niemeyerwrtp: Yeah, certainly23:13
niemeyergrantgm: It was first seen working even around march 201023:14
niemeyers/even/ever23:14
niemeyerErm, sorry23:14
niemeyer201123:14
niemeyerWhat SpamapS said, actually23:15
SpamapSniemeyer: right, it was in the PPA in January, but we weren't really talking about it until March. :)23:15
SpamapSit lived in public obscurity23:16
grantgmSpamapS, niemeyer, ok, so maybe i'll go with March then. That still puts it out ahead of Cloud Foundry (April) and  OpenShift (May) :)23:17
SpamapSgrantgm: I'd be interested to see how you're drawing a comparison between juju and cloudfoundry.23:20
SpamapSsince.. juju deploys cloudfoundry23:20
grantgmyea, i know it's definitely not a perfect comparison...the first thing i'm talking about is that the definition of paas is very fuzzy23:20
grantgmbasically anything in the massive void between traditional IaaS and SaaS gets assigned the PaaS moniker, which is really rather silly23:21
SpamapSits a silly human trait23:21
SpamapSwe can't have groups of 123:21
wrtpniemeyer: done: https://codereview.appspot.com/649812423:22
wrtpniemeyer: if it's ok i'll hold off on the mstate unit watcher until the generic watcher logic is back in place there.23:23
wrtpdavecheney: morning!23:24
davecheneywrtp: hello23:32

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