[00:52] <wallyworld> thumper: you around?
[00:54] <wallyworld> i was hoping to see what i could get reviewed out of my remaining 4 (+ another 2 partially reviewed) branches
[01:14] <thumper> wallyworld: I am now
[01:14] <thumper> busy freaking week
[01:14] <thumper> got back from the gym
[01:14] <thumper> and Rachel is like "you forgot about Caitlin's end of year assembly didn't you"
[01:14] <thumper> which is going now
[01:14] <thumper> but there is no room
[01:14] <wallyworld> oh no :-)
[01:14] <thumper> ended up standing outside for a bit
[01:14] <thumper> but I hadn't eaten
[01:15] <thumper> so the combination of not being able to see and being hungry drove me home
[01:15] <thumper> so here I am
[01:15] <wallyworld> ta da
[01:15] <wallyworld> thumper: i reviewed your branches. i looked at the first one john reviewed. i sorta agree it's a shame there is yet another socket/listener
[01:16] <thumper> wallyworld: yeah, been thinking about that
[01:16] <thumper> part of the issue was around lifetimes
[01:16] <thumper> there is a note there somewhere to refactor the jujuc listener
[01:16] <thumper> we should look to do that
[01:16] <wallyworld> i got so confused trying to sort through that hooks code. hard to know what runs where when just reading it
[01:16] <thumper> but somewhat out of scope for this change
[01:16]  * thumper nods
[01:16] <thumper> I know what you mean
[01:16] <wallyworld> i wish there was some doc
[01:17] <wallyworld> to explain all the moving parts
[01:18] <wallyworld> thumper: so i'd be happy to discuss the current state of play with my branches if you want
[01:18] <thumper> ok
[01:18] <thumper> lets do it
[01:18] <wallyworld> https://plus.google.com/hangouts/_/7ecpibd25ularnidet2ikrkeq8
[02:56] <axw_> thumper: do you know who I need to ask to get access to the HP Cloud account?
[02:56] <thumper> axw_: antonio?
[02:56] <thumper> that'd be my best guess
[02:56] <axw_> probably, I'll try him
[02:56] <axw_> thanks
[02:56] <thumper> or davecheney?
[02:58] <axw_> speak of the devil
[02:58] <axw_> davecheney: do I need to talk to arosales to get HP cloud access?
[02:58] <thumper> axw_: and he shall appear :)
[02:58] <axw_> or are you able to hook me up?
[03:14] <wallyworld> thumper: any chance of doing the last branches?
[03:14] <wallyworld> :-D
[03:14]  * wallyworld flutters eyelashes
[03:14] <thumper> wallyworld: yep, let me just finsih off these tests
[03:37] <thumper> wallyworld: I'll look at the next one while I run make check
[03:37] <wallyworld> ok ta
[03:37] <wallyworld> big queue in the bot
[03:57] <thumper> wallyworld: did you want jam to sign off on https://codereview.appspot.com/40870047/ ?
[03:57] <wallyworld> thumper: nah. i reckon my explanation is ok
[03:57] <thumper> so I don't need to look at that one do i?
[03:58] <thumper> wallyworld: here is the last of the juju-run ones:  https://codereview.appspot.com/41660044
[03:58] <wallyworld> thumper: don't think so
[03:58] <thumper> kk, looking at your last
[03:59] <wallyworld> and i'm looking at yours :-)
[04:05] <thumper> it has been a busy landing day today
[04:05] <thumper> you'd think we've been doing real work or something...
[04:12] <wallyworld> thumper: with cloud init, will jujud be in place at the time the sym link is created?
[04:12] <thumper> wallyworld: yes, but given the magic of symlinks, it doesn't matter if it isn't :)
[04:12] <wallyworld> ok
[04:13] <thumper> it is quite valid to make a symlink that points to something that doesn't exist
[04:18] <wallyworld> thumper: done. you can almost EOW :-) is the sprint approved?
[04:18] <thumper> wallyworld: yes, and I sent you an email about it
[04:19] <thumper> you need to do the travel request form
[04:19] <wallyworld> ah, too busy landing code to check :-)
[04:19] <wallyworld> i'llbook my own flights
[04:24] <thumper> wallyworld: you say to use cfg.jujuTools
[04:24] <thumper> wallyworld: my answer is "no"
[04:24] <thumper> wallyworld: jujuTools is the versioned directory
[04:24] <thumper> we specifically want the one through the symlink
[04:24] <wallyworld> ah ok
[04:24] <wallyworld> sorry
[04:24] <thumper> otherwise juju-run will never get updated when the machine updates
[04:24] <wallyworld> igmore me
[04:24] <thumper> I'll add a comment
[04:25] <thumper> wallyworld: if you were confused by it, sure as eggs, the next person will be too
[04:25] <thumper> hence the comment :)
[04:25] <wallyworld> yeah, or i could just be stupid
[04:27] <thumper> wallyworld: no, a very valid point, and the comment helps explain why
[04:28] <wallyworld> well, the two assertions aren't mutually exclusive :-)
[04:52] <thumper> hell pizza ordered
[04:52] <thumper> $13 large pizzas for Friday the 13th
[04:54] <thumper> ok, so last juju-run branch is in the landing chain
[04:54]  * thumper EOWs
[05:51] <wallyworld> axw: hey, any chance of a review of my last branch before i go away for a few days? it is hopefully the final piece in a series of branches to add ssh key management https://codereview.appspot.com/40690050
[05:51] <axw> wallyworld: looking
[05:51] <wallyworld> thanks :-)
[05:52] <wallyworld> the bot is being a bitch for my previous branches
[05:52] <wallyworld> a few spurious failures
[05:57] <axw> wallyworld: dumb question: why is the default user "admin". shouldn't it be ubuntu?
[05:57] <wallyworld> axw: it's the juju user which i believe is admin
[05:58] <wallyworld> right now juju only has one user
[05:58] <wallyworld> i think
[05:58] <wallyworld> there is and AddUser api but i'm not sure what if anything uses it
[05:59] <wallyworld> RBAC is coming though
[05:59] <axw> wallyworld: all our ssh commands log in as "ubuntu@"
[05:59] <axw> I'm a bit confused
[05:59] <axw> I'm not aware of us creating an admin user
[05:59] <wallyworld> it's the api user
[05:59] <axw> ohhh
[05:59] <axw> sorry
[05:59] <axw> got it
[05:59] <wallyworld> np :-) it is confusing
[06:15] <axw> wallyworld: done
[06:16] <wallyworld> axw: great thanks very much
[06:16] <axw> np
[06:16] <wallyworld> i'm not sure why the cmd doesn't support multiple keys
[06:16] <wallyworld> perhaps it should
[06:17] <wallyworld> i might make that change before landing
[06:21] <axw> not a major issue, since it can be added later easily
[06:26] <wallyworld> sure. but i'll add it as it's annoying me now :-)
[06:27] <wallyworld> i'll also fix add and delete i think while i'm there
[06:28] <axw> hehe
[06:28] <axw> cool
[06:54] <wallyworld> axw: commands fixed :-) i'll land unless you have an objections
[06:54] <axw> wallyworld: go for it
[06:55] <wallyworld> \o/
[10:05] <TheMue> rogpeppe: ping
[10:05] <rogpeppe> TheMue: pong
[10:05] <TheMue> rogpeppe: I separated the goroutine, it's running fine
[10:06] <TheMue> rogpeppe: but I would like to discuss the idea of the WriteCloser with you
[10:06]  * rogpeppe tries to remember which goroutine
[10:06] <rogpeppe> TheMue: ok
[10:06] <TheMue> rogpeppe: the reader goroutine in the tests
[10:06] <rogpeppe> TheMue: ah, of course
[10:06] <rogpeppe> TheMue: go on
[10:06] <TheMue> rogpeppe: the assert now uses the returned one and only string channel
[10:07] <TheMue> rogpeppe: ok, WriteCloser
[10:08] <TheMue> rogpeppe: the philosophy to use it has been, that it is simply an interface which allows the tailer to signal the writer that it doesn't has to expect more of the tailer
[10:09] <rogpeppe> TheMue: i think that the tailer finishing is probably just as good a way to do that
[10:09] <TheMue> rogpeppe: if I want multiple source write into one writer (which never has been the idea of the tailer, only all-machines.log) it's no problem to implement that interface with a kind of multiplexer
[10:09] <rogpeppe> TheMue: ISTM that the tailer is just a specialised form of io.Copy
[10:10] <TheMue> rogpeppe: w/o a Close the writer doesn't know that the tailer finished
[10:10] <rogpeppe> TheMue: io.Copy doesn't close the stream it's writing to
[10:10] <rogpeppe> TheMue: that's why I suggested adding a Wait method
[10:10] <rogpeppe> TheMue: similarly to most other similar interfaces we have
[10:11] <TheMue> rogpeppe: hmm, ok, that's an argument. but in that case the writer (or the using environment) needs perhaps a different way to know if the tailer has been stopped
[10:11] <rogpeppe> TheMue: different from Wait?
[10:11] <TheMue> rogpeppe: no, had written in while you wrote ;)
[10:12] <rogpeppe> TheMue: ah, sorry
[10:12] <TheMue> rogpeppe: so does the Tailer has a Wait? how would it be used?
[10:12] <rogpeppe> TheMue: we'll almost certainly want a Wait method anyway, so the agent can know when it needs to restart the tailer
[10:13] <TheMue> rogpeppe: hmm, can't follow
[10:13] <rogpeppe> TheMue: Wait would work just like any other Wait method that we implement - func (t *Tailer) Wait() {return t.tomb.Wait()}
[10:14] <rogpeppe> TheMue: we might want to also expose func (t *Tailer) Dead() <-chan struct{} {return t.tomb.Dead()}
[10:14] <rogpeppe> TheMue: for convenience
[10:14] <TheMue> rogpeppe: yes, but how would a writer implementation use it to get aware, that the Tailer has been Stopped by calling Stop()?
[10:14] <rogpeppe> TheMue: so, (responding to your "can't follow"), something is running the tailer right/
[10:15] <rogpeppe> ?
[10:15] <rogpeppe> TheMue: why does it need to know that?
[10:15] <TheMue> rogpeppe: yep, and passes a Writer, in my case one to write into a StringsWatcher
[10:16] <TheMue> rogpeppe: to stop work when it runs in a loop (like the one you proposed in your review)
[10:16] <rogpeppe> TheMue: so, assuming we have the machine agent running a Tailer, it presumably needs to know when the Tailer exits, so it can restart it
[10:17] <rogpeppe> TheMue: it's trivial to Wait for the Tailer, then call Close on the Writer if that's what you need to do
[10:18] <rogpeppe> TheMue: sorry, i'm not quite sure what you mean by "to stop work when it runs in a loop" - what's "it" there?
[10:20] <TheMue> rogpeppe: take a look at the reading goroutine in your review. how do you think will it terminate?
[10:21] <rogpeppe> TheMue: go func() {tailer.Wait(); pipeWriter.Close()}
[10:23] <TheMue> rogpeppe: ah, ok, not as is but with a second goroutine
[10:27] <TheMue> rogpeppe: feels a bit inconvenient to me, but it's ok. for an own implementation still would use the WriteCloser because I like to let a user implement an interface the best fitting way. but that's a different design philosophy
[10:27] <TheMue> rogpeppe: so thanks, will add it and then repropose
[10:30] <rogpeppe> TheMue: thanks
[10:32] <rogpeppe> TheMue: i suspect when we use this for real, we won't want to close the Tailer immediately it finishes - we might want to append a message saying what's happened, for example.
[10:34] <TheMue> rogpeppe: here I'm more defensive, the problematic word is "might" ;) the tailer already today does more than the existing requirements
[10:46] <rogpeppe1> TheMue: i guess I'm saying that by doing less, it's actually more flexible
[10:50] <TheMue> rogpeppe1: maybe. I so far reach mostly the same in my code by focus on interfaces
[10:51] <rogpeppe1> mgz: standup?
[11:23] <TheMue> rogpeppe1: next run, just proposed
[11:23] <rogpeppe1> TheMue: ok, looking
[11:54]  * TheMue => lunch
[13:07] <rogpeppe1> I'm going to be travelling this afternoon, so proabably incommunicado most of the time
[13:07] <rogpeppe1> natefinch: ^
[13:15] <TheMue> rogpeppe1: thx for the review, and the index error inside the test data (missing the lines w/o termination) convinced me to use the mixed notation :D
[13:15] <rogpeppe1> TheMue: thanks
[13:15] <TheMue> rogpeppe1: I've got to thank you, has been a very good process
[13:16] <rogpeppe1> TheMue: cool - sorry it took a while :-)
[13:16] <TheMue> rogpeppe1: hehe, np
[13:31] <TheMue> hmm, very quiet here today. did i miss a public holiday?
[13:35] <rogpeppe1> TheMue: various people are on hols
[13:35] <rogpeppe1> TheMue: malta has a public holiday i think
[13:39]  * rogpeppe1 goes for lunch
[13:39] <TheMue> rogpeppe1: ah, ic
[13:39] <TheMue> rogpeppe1: thx and enjoy
[13:39] <rogpeppe1> then i'll be out of touch for a while, depending on motorway 3G connectivity
[13:41] <TheMue> gets empty here
[16:12] <marcoceppi> If anyone with MAAS experience, heh, could help out in #juju, that'd be great
[16:30] <jcastro> hi guys, I am still getting: agent-state-info: '(error: container "jorge-local-machine-3" is already created)' style errors with the local provider
[16:30] <jcastro> fresh install, saucy
[17:17] <rogpeppe2> natefinch: here's what i've ended up with for the concurrent connecting stuff: http://paste.ubuntu.com/6567727/
[17:18] <rogpeppe> natefinch: it's probably not obvious how it is intended to be used, though
[17:51] <jcastro> heya natefinch
[17:51] <jcastro> https://bugs.launchpad.net/juju-core/+bug/1259350
[17:51] <_mup_> Bug #1259350: juju bootstrap fails in Azure (BadRequest - The affinity group name is empty or was not specified.) <azure-provider> <bootstrap> <juju-core:Triaged> <https://launchpad.net/bugs/1259350>
[17:51] <jcastro> any ideas on this one?
[17:52] <fcorrea> hey there. Anyone here using the postgresql charm with an attached volume? A nova volume in this case
[17:53] <fcorrea> I'm having trouble trying to get it to work and wanted to double check I'm not doing it wrong
[18:06] <natefinch> fcorrea: sorry, most of the juju devs are out today for one reason or another.  You might try asking on #juju if anyone else has tried that.  I don't really know anything about nova, so not sure I can help much.
[18:06] <natefinch> jcastro, looking
[18:07] <fcorrea> natefinch, Will do. Thanks
[18:25] <natefinch> jcastro: I wonder if azure changed their API... they've done that before