[00:26] <wwitzel3> cherylj: thanks
[00:26] <wwitzel3> alexisb: a large monitor would make it easier to show people, but that isn't even a must have
[00:27] <wwitzel3> I'll be spinning up everything on EC2 a day ahead of time as a backup, like on a cooking show :)
[01:04]  * perrito666 imagines a souschef removing the running command from wwitzel3 and bringing a fully deployed stack while putting the other on the fridge
[01:10] <anastasiamac> perrito666: :D making a meal out of juju :))
[01:45] <natefinch> evening all
[01:45] <natefinch> ericsnow, wwitzel3: either of you around?
[02:05] <wwitzel3> natefinch: omw
[03:06] <mup> Bug #1470601 changed:  UniterSuite.TestLeadership fails on windows <blocker> <ci> <regression> <unit-tests> <juju-core:Fix Released by bteleaga> <https://launchpad.net/bugs/1470601>
[03:10] <mgz> master is blessed.
[03:13] <menn0> mgz, thumper, davechen1y : \o/
[03:14] <menn0> thumper: i'm pretty sure I've found out the reason for the stuck state servers
[03:14] <menn0> thumper: when do mgo.DialWithInfo and don't specify a timeout, and mongodb isn't there, it hangs forever
[03:15] <menn0> thumper: there's 2 places in juju where we don't specify a timeout
[03:15] <menn0> thumper: state.ForEnviron() is one :)
[05:07] <mup> Bug #1470714 opened: Ubuntu downloads are non-obvious <juju-core:New> <https://launchpad.net/bugs/1470714>
[07:08] <tasdomas> hi
[07:08] <tasdomas> menn0, ping?
[07:19] <tasdomas> davechen1y, ping?
[07:48] <davechen1y> tasdomas: ack
[07:48] <tasdomas> davechen1y, sorry to be bothering you past your EOD
[07:49] <tasdomas> davechen1y, as I understand it, service-related commands in cmd/juju have been moved to cmd/juju/service, but in master, cmd/juju/get.go still exists - is there a reason for that?
[08:03] <davechen1y> tasdomas: sorry, i don't thin ki can help
[08:03] <davechen1y> i've no idea what happened there
[08:04] <tasdomas> davechen1y, thanks anyway - I emailed Cheryl with my question
[08:04] <davechen1y> ok
[08:06] <fwereade> TheMue, what was the thinking behind putting that panic in multiEnvRunner.updateOps?
[08:07] <TheMue> fwereade: eh, need the context, could you point me to file and line?
[08:07] <fwereade> TheMue, txns.go, not sure line because I'm looking at a merge conflict
[08:09] <fwereade> TheMue, but it looks like it's a problem with updateStruct that's being addressed one level up and dirtying up the updateOps logic
[08:09] <TheMue> fwereade: aha
[08:10] <TheMue> fwereade: I first time got aware of this multiEnvRunner with the info of automatic setting of env-uuid and prefixing of _id
[08:10] <fwereade> TheMue, I'm well aware of the problem and the context, I'm just asking why you changed updateOps and not updateStruct
[08:11] <TheMue> fwereade: did I?
[08:12] <fwereade> TheMue, because it *seems* wrong -- all the other panics are generated in the updateSpecificThing methods, and the updateOps method has a couple of its own responsibilities
[08:12] <fwereade> TheMue, heh, maybe you didn't even -- I just knew you'd been bumping up against this problem and assumed it was you
[08:13] <TheMue> fwereade: when I found it regarding the IPAddress unique field and we discussed about it I afterwards dropped it and set both explicit in addIPAddress
[08:14] <TheMue> fwereade: hehe, yes, because we found it "interesting" how the txn modifies the passed doc w/o returning it
[09:08] <voidspace> dimitern: https://code.launchpad.net/~mfoord/gomaasapi/devices/+merge/263370
[09:21] <dimitern> voidspace, how about op=claim_sticky_ip ?
[09:21] <voidspace> dimitern: oh yes, need to implement that
[09:21] <voidspace> dimitern: ten minutes work
[09:21] <voidspace> dimitern: :-)
[09:22] <voidspace> dimitern: thanks
[09:22] <dimitern> voidspace, np :)
[09:22] <voidspace> dimitern: (I'll do no error checking, just add it to the device object)
[09:24] <voidspace> dimitern: I burned an hour yesterday on an obscure bug
[09:24] <dimitern> voidspace, that sounds good - you've got a review
[09:24] <voidspace> dimitern: I was writing a byte array (the json result) to the response
[09:24] <voidspace> dimitern: and that works without error and the gomaasapi Parse function will consume it
[09:25] <voidspace> dimitern: I was just getting a null object in Parse
[09:25] <voidspace> dimitern: took me ages to work out why...
[09:25] <dimitern> voidspace, hmm really?
[09:25] <dimitern> voidspace, what was it?
[09:25] <voidspace> dimitern: you need to pass a string to response.Write
[09:25] <voidspace> dimitern: a byte array "works" but does the wrong thing
[09:26] <voidspace> dimitern: it sends a literal "[1 33 42...]" as the response
[09:26] <voidspace> dimitern: which of course is invalid json
[09:26] <voidspace> dimitern: and Parse consumes it happily and swallows the json syntax error
[09:26] <dimitern> voidspace, ah! good catch
[09:27] <voidspace> well, I had failing tests thankfully
[09:27] <dimitern> voidspace, strictly speaking I think response.Write takes an io.Writer
[09:28] <voidspace> dimitern: yeah, logging would be good
[09:28] <voidspace> dimitern: ah, it's fmt.Fprint(w, something)
[09:28] <voidspace> dimitern: and something can be a []byte or string
[09:28] <voidspace> dimitern: and []byte does the wrong thing altogether...
[09:29] <voidspace> dimitern: can't see an inline comment
[09:30] <dimitern> voidspace, right, yeah []byte(..).String() is not what you might expect
[09:30] <voidspace> whereas string([]byte) does the right thing
[09:30] <dimitern> voidspace, it's on line 157 about the deviceTemplate
[09:30] <voidspace> dimitern: I can't see it
[09:30] <voidspace> is it draft?
[09:31] <voidspace> dimitern: ah, I see it
[09:32] <voidspace> dimitern: a text/template would be more code, right?
[09:32] <voidspace> I could switch to that
[09:32] <dimitern> voidspace, yeah - I think it will be nicer
[09:32] <voidspace> dimitern: ok
[09:33] <voidspace> dimitern: I'll add DELETE and claim_sticky_ip first and then do that
[09:33] <voidspace> there maybe other review comments by then
[09:35] <dimitern> voidspace, cheers
[10:18] <voidspace> dimitern: gomaasapi doesn't have logging
[10:22] <dimitern> voidspace, too bad - then ignore my comment about it -  I don't insist on it
[10:42] <tasdomas> fwereade, ping?
[10:45] <voidspace> wwitzel3: ping for when you're around
[10:52] <voidspace> dimitern: so I need to modify the JSONObject in place
[10:52] <voidspace> dimitern: currently JSONObject is effectively read only
[10:52] <voidspace> dimitern: I only need to modify an array, so I'll be adding SetArray to match GetArray
[10:52] <voidspace> dimitern: ok?
[10:54] <dimitern> voidspace, if it works, fine, but I'll like to have a final look when done
[10:54] <voidspace> dimitern: it will work fine
[10:54] <voidspace> dimitern: obviously ;-)
[10:54] <voidspace> dimitern: just make JSONObject a bit asymmetrical
[10:54] <voidspace> dimitern: read only except for arrays
[10:55] <voidspace> dimitern: otherwise I can serialise, do text manipulation and deserialize again
[10:55] <voidspace> dimitern: which seems worse...
[10:55] <voidspace> dimitern: or I can make a private function for use by the test server only as JSONObject is publiic
[10:55] <voidspace> that's maybe better
[10:55] <voidspace> so as not to change the public api
[10:56] <dimitern> voidspace, that sounds better I think
[10:56] <voidspace> dimitern: cool
[10:57] <voidspace> dimitern: although extending JSONObject to make it fully bi-directional and breaking it out into it's own library would be cool
[11:10] <mup> Bug #1470820 opened: Remove github.com/gabriel-samfira/sys/windows once go 1.4 lands <juju-core:New> <https://launchpad.net/bugs/1470820>
[12:20] <dimitern> voidspace, TheMue, please take a look - http://reviews.vapour.ws/r/2088/ - AddSubnets apiserver method
[12:20] <TheMue> dimitern: yup
[12:21] <dimitern> TheMue, ta
[12:23] <TheMue> dimitern: quick wish outside the review, I prefer identifier abbreviated as ID, not Id
[12:23] <TheMue> dimitern: so it would be SebnetProviderID
[12:24] <dimitern> TheMue, I know, but Id seems to be more common in our code; we should change all of them separately though
[12:25] <TheMue> dimitern: we already have a mix, eg katco also uses ID
[12:26] <dimitern> TheMue, I'm not saying we only use Id, just that it's more common
[12:26] <TheMue> dimitern: time to change it :D viva le upper-case
[12:27] <dimitern> TheMue, :) let's not do it now please
[12:28] <TheMue> dimitern: hehe, ok, Ok, OK, oK *rofl*
[12:28]  * TheMue seems to have a melted brain *lol*
[12:29] <dimitern> TheMue, :)
[12:40] <TheMue> dimitern: why all those implementations of GoStringer? we haven'd used it so much in the passed.
[12:41] <dimitern> TheMue, because I found it easier while writing tests and debugging to see that instead of (0xdeadbeef, ..)
[12:42] <TheMue> dimitern: oh, come on, 0xdeadbeef is so good read- and understandable
[12:42] <dimitern> :D
[12:42] <TheMue> dimitern: but yeah, good argument
[13:03] <TheMue> dimitern: phew, you cache is a number. but almost through
[13:05] <voidspace> TheMue: dimitern: I prefer Id :-p
[13:05] <voidspace> TheMue: dimitern: ID is not an acronym it's an abbreviation
[13:06] <voidspace> so only the first letter should be capitalised
[13:06] <voidspace> if we do reach a consensus I'll stick to it
[13:06] <voidspace> but I think it should be Id
[13:07] <TheMue> voidspace: AllocatableIpLow? info.Cidr?
[13:07] <voidspace> TheMue: IP is an acronym, so is CIDR
[13:07] <voidspace> TheMue: hence the distinction
[13:07] <voidspace> so those should be uppercase if they aren't
[13:08] <dimitern> I couldn't give so much importance to the case of a single letter :P
[13:08] <voidspace> dimitern: probably the best attitude, I only have a slight preference for correctness
[13:08] <TheMue> dimitern: it's not the case, it's consistency
[13:08] <voidspace> so let's settle on correctness then
[13:08] <TheMue> dimitern: unlike in python where I often found MyWildType.do_this.strconv()
[13:09] <voidspace> that looks right for Python
[13:09] <voidspace> consistent with pep8
[13:09] <voidspace> ah, except for the debate about when to use underscores and when to concatenate
[13:09] <voidspace> fair enough
[13:09] <voidspace> although I still think that looks fine :-)
[13:13] <TheMue> to me it simply looks ugly and inconsistent (which says nothing about the language itself). but I simply like it more consistent, it's better readable, eye/brain don't have to do many context switches
[13:13]  * TheMue still dreams of the wonderful consistent smalltalk sources, sadly this lang is so bad in concurrency *sigh*
[13:15] <TheMue> dimitern: you've got a review
[13:15] <wwitzel3> ericsnow: ping
[13:16] <dimitern> TheMue, thanks!
[13:16] <TheMue> dimitern: np
[14:01] <katco`> natefinch: standup
[14:27] <rogpeppe1> looks like there's no OCR in this hemisphere today. would anyone be able to take a look at this, please? http://reviews.vapour.ws/r/2089/
[14:28] <perrito666> rogpeppe1: ah beautiful change, ill take a look although I am not sure I am able to +2 it
[14:29] <rogpeppe1> perrito666: thanks. more eyes the better :)
[14:29] <mup> Bug #1470876 opened: Deploy --to zone=<name> <landscape> <juju-core:New> <https://launchpad.net/bugs/1470876>
[14:44] <voidspace> wwitzel3: ping
[14:46] <dimitern> voidspace, TheMue, PTAL -  http://reviews.vapour.ws/r/2090/ - another, much smaller review, this time fixing the subnet add CLI command
[14:46] <TheMue> dimitern: ok
[14:48] <dimitern> TheMue, thanks
[14:48] <katco> ericsnow: can you help me understand why the hook context facade might want to know about the unit{ tag}?
[14:49] <ericsnow> katco: the unit is intrinsic to hook contexts
[14:49] <katco> ericsnow: so the wpm facade is an exception?
[14:49] <ericsnow> katco: not at all
[14:50] <katco> ericsnow: where is the wpm facade using the unit tag?
[14:50] <ericsnow> katco: rather we can provide the unit at the facade level rather than requiring each API method to require passing the unit tag
[14:50] <katco> ericsnow: ah ok. we have the cardinality wrong atm?
[14:51] <ericsnow> katco: I think so
[14:52] <katco> ericsnow: k, ty for the tutelage. making the change
[14:52] <perrito666> rogpeppe1: got my review
[14:52] <ericsnow> katco: thanks!
[14:52] <rogpeppe1> perrito666: ta!
[14:53] <katco> ericsnow: i'm going to propose we use the id. it will be a looser coupling if we're just dealing with strings. agree?
[14:54] <ericsnow> katco: keeping the tag would probably be better
[14:54] <katco> ericsnow: so importing juju/names in components is ok?
[14:54] <ericsnow> katco: if we pass the unit itself it may save us a bit of work too
[14:54] <ericsnow> katco: I think so
[14:54] <ericsnow> katco: it's info rather than machinery
[14:55] <katco> ericsnow: i would really prefer we not do state.Unit as that will couple all components to state
[14:55] <katco> ericsnow: or rather, encourage it. i suppose they should be using interfaces
[14:55] <ericsnow> katco: oh, right; we'd have to make that work via interfaces
[14:56] <rogpeppe1> perrito666: i find myself unable to reply to your comments - the text box for the reply isn't showing (might be a Chrome issue)
[14:56] <katco> ericsnow: actually, reversal. we're already passing in *state.State, this is the same.
[14:56] <katco> ericsnow: i'll pass in the unit
[14:56] <perrito666> rogpeppe1: ah that happens sometimes it is exxtremely annoying
[14:56] <rogpeppe1> perrito666: know of a workaround?
[14:56] <perrito666> rogpeppe1: I just hard refrehs a couple of times
[14:56] <perrito666> refresh*
[14:56] <rogpeppe1> perrito666: tried that
[14:57] <perrito666> tried yelling at the screen?
[14:57] <perrito666> works sometimes
[14:57] <ericsnow> katco: yeah, at that level it would make sense to just go with *state.Unit
[14:57] <ericsnow> katco: then we adapt it in component/all
[14:57] <perrito666> rogpeppe1: I think perhaps some js library is failing to load
[14:57] <perrito666> but I keep forgetting to check
[14:57] <rogpeppe1> perrito666: it seems that i can do it if i reply inline in the full diff
[14:58] <katco> ericsnow: yeah exactly. we'll just have to encourage people to decouple at that point. this shouldn't be hard since that's the entire point of that package
[14:58] <perrito666> rogpeppe1: ah, good tip
[14:58] <ericsnow> katco: again, directory structure FTW :)
[15:01] <perrito666> rogpeppe1: and you are going to do another PR for the ProxySSHKey? :p
[15:01] <rogpeppe1> perrito666: i think it should probably be all the config attributes
[15:01] <rogpeppe1> perrito666: and i'm not entirely convinced it's my responsibility to pay of that tech debt :)
[15:01] <rogpeppe1> s/of that/off that/
[15:02] <perrito666> I have never been able to pull that argument succesfuly :p
[15:06] <wwitzel3> voidspace: pong
[15:09] <katco> ericsnow: changes pushed. review if you please, sir.
[15:09] <ericsnow> katco: will do
[15:10] <katco> ericsnow: looks like process.go had an issue. not sure
[15:10] <ericsnow> katco: you may need to merge/rebase onto the feature branch
[15:10] <katco> ericsnow: ah k lemme do that rq
[15:15] <rogpeppe1> cherylj: thanks v much for doing some QA on my branch
[15:15] <cherylj> rogpeppe1: np :)  I've been in the multi environment stuff recently, so I thought I should take a look
[15:16] <rogpeppe1> cherylj: do you know any way of listing all the multi environments so that i can destroy them prior to destroying the local env?
[15:18] <cherylj> rogpeppe1: they will show up in juju switch -l.  There's a command coming in a feature branch that will show you the environments for a particular system (aka bootstrap env)
[15:19] <rogpeppe1> cherylj: that would be useful. juju switch -l shows me all the dud .jenv files i have lying around too :)
[15:19] <cherylj> rogpeppe1:  yeah, that is a pain.  There's a new juju supercommand called system that will let you list envs for a particular system, and do other system-y things
[15:20] <rogpeppe1> cherylj: cool
[15:24] <rogpeppe1> cherylj: i've replicated your issue. thanks v much again for trying it out. I should have done the same.
[15:24] <cherylj> rogpeppe1: np :)
[15:28] <katco> ericsnow: k sorry, had to grapple with git a bit. review updated
[15:28] <ericsnow> katco: np
[15:33] <ericsnow> katco: basically ship-it (one small detail to address)
[15:33] <ericsnow> katco: thanks for doing that
[15:33] <katco> ericsnow: ah gotcha. i think i tried passing in state before rebasing and (of course) they methods weren't there :p
[15:34] <ericsnow> katco: I had meant to update that bit in my state patch, but apparently forgot
[15:36] <katco> ericsnow: "State does not implement server.State (wrong type for UnitProcesses method)"
[15:36] <katco> ericsnow: i'll leave that to you
[15:36] <ericsnow> katco: k
[15:38] <ericsnow> katco: yeah, just leave that bit the way you have it and I'll put up a patch to fix it
[15:38] <katco> ericsnow: blah. i really butchered the commit history for this branch. i borked that rebase.
[15:40] <ericsnow> katco: I really wish Go would be smarter about compatible types in function signatures
[15:42] <katco> ericsnow: is it a {co|contra}variance problem?
[15:50] <ericsnow> katco: only as it relates to strictly equivalent types (e.g. interfaces, maybe even some typedefs)
[15:50] <ericsnow> katco: I'm not even talking about implicit type coercion
[15:50] <katco> ericsnow: in my experience, that's one of those things that get added to statically typed languages as they mature
[15:50] <ericsnow> katco: right
[15:50] <katco> ericsnow: just a priorities thing
[15:51] <ericsnow> katco: it's on my list of Go things that could happen some day
[15:51] <katco> ericsnow: :) i still want to see that spreadsheet!
[15:51] <ericsnow> katco: I'll share that with you at some point :)
[16:05] <rogpeppe1> cherylj: i've pushed a fix for that issue - it seems to work ok for me now
[16:08] <rogpeppe1> anyone prepared to +2 this? http://reviews.vapour.ws/r/2089/
[16:11] <katco> i have no idea why the build bot thinks gofmt is sad: http://juju-ci.vapour.ws:8080/job/github-merge-juju/3877/consoleFull#-2049291403f64d1c3f-da20-4160-a70c-0ccd218b227e
[16:12] <mgz> katco: looking
[16:12] <katco> mgz: entirely possible i'm missing something, but gofmt -s -w ./process.go produces no changes on my machine
[16:13] <mgz> katco: what go version?
[16:13] <katco> mgz: 1.3.3
[16:13] <mgz> bot uses 1.2.1
[16:13] <mgz> so, go fmt may have changed its mind
[16:13] <katco> mgz: bleh... i'll have to install v1.2.1
[16:14] <katco> mgz: looks like i can only get go 1.2.2
[16:14] <mgz> I may be able to just spot it, sec
[16:15] <mgz> that HookContextAPI{ /* st */ } is ood
[16:18] <mgz> katco: I'll fetch your branch and give you the gofmt diff
[16:18] <katco> mgz: ty... working on getting 1.2.2 installed too
[16:20] <mgz> katco: ah, also, `go fmt` passes
[16:20] <mgz> but the line we use in verify.bash does not
[16:22] <rogpeppe1> katco: i usually just install Go from source - it's dead easy and makes it straightforward to play with any go version you likre
[16:22] <rogpeppe1> like
[16:22] <katco> rogpeppe1: that's what i have done
[16:23] <katco> rogpeppe1: └11:21> ls ~/.local/ |grep go
[16:23] <katco> go
[16:23] <katco> go1.2.2.linux-amd64
[16:23] <katco> go1.3.3.linux-amd64
[16:23] <katco> go1.4.0.linux-amd64
[16:23] <katco> rogpeppe1: where go is a symlink to 1.3.3
[16:23] <rogpeppe1> katco: ah, i have a slightly different approach
[16:24] <mgz> katco: it's dumb, http://paste.ubuntu.com/11810901
[16:24] <rogpeppe1> katco:
[16:24] <rogpeppe1> % cat $h/bin/go-release
[16:24] <rogpeppe1> #!/usr/bin/env rc
[16:24] <rogpeppe1> GOROOT=$home/go-release
[16:24] <rogpeppe1> path=($GOROOT/bin $path)
[16:24] <rogpeppe1> $*
[16:24] <mgz> katco: `go fmt` does not do that, but `gofmt component/all/process.go` does
[16:25] <katco> mgz: lol... oy... i will have to use an editor that does not run go fmt when i save ;)
[16:25] <katco> is it evil that i'm using vi in a terminal in emacs?
[16:26] <mgz> `go fmt` doesn't seem to care either way
[16:26] <mgz> katco: no, it's not evil, it's great that emacs gives you a usable text editor
[16:26] <katco> mgz: lol! well played sir!
[16:27] <katco> mgz: HA! oh god... so i can't push because MY gofmt is sad
[16:27] <mgz> ehehe
[16:27] <katco> mgz: oyyyy
[16:27] <mgz> just remove the dumb inline comment?
[16:28] <katco> mgz: good idea.
[16:30] <katco> rogpeppe1: looks like same thing, just fiddling with env instead of paths?
[16:31] <rogpeppe1> katco: i guess - i'm not sure what your things are actually doing
[16:31] <katco> rogpeppe1: i have all my envars pointing to ~/.local/go, and that's just a symlink to the version i want to use
[16:32] <katco> rogpeppe1: so to flip versions, i just point the symlink elsewhere
[16:32] <katco> rogpeppe1: it looks to me like you just flip the envar
[16:32] <rogpeppe1> katco: yeah
[16:32] <rogpeppe1> katco: i actually like your solution
[16:32] <katco> rogpeppe1: it's how os x does things as well
[16:33] <rogpeppe1> katco: although it would be kinda nice if $GOPATH/pkg was specific to the version too
[16:33] <katco> rogpeppe1: yes, that is an annoyance when flipping versions
[16:33] <katco> rogpeppe1: i end up just deleting that
[16:33] <rogpeppe1> katco: i often move it out of the way and then back again.
[16:34] <katco> rogpeppe1: you could get overly complicated and i guess point $GOPATH/pkg to ~/.local/go/user-pkg
[16:35] <rogpeppe1> katco: that's an interesting idea, yes
[16:35] <katco> rogpeppe1: ty for your comments on gorkin btw
[16:35] <rogpeppe1> katco: np - i'm sorry i didn't look at it for more than a minute or so :)
[16:36] <katco> rogpeppe1: no worries at all. i'm presenting that at gophercon in a lightning talk
[16:36] <rogpeppe1> katco: i do feel quite strongly about the import . thing though - it's commonly used by people trying to get the "feel" of a ruby DSL, but really doesn't feel nice in Go
[16:37] <natefinch> ericsnow: I'd love to see what your workflow is like. You commit like 20x as often as I do :)  re: https://github.com/juju/juju/pull/2674
[16:37] <rogpeppe1> katco: (FWIW we used to use import . for gocheck too, but changed to using gc and I think it's a definite improvement in readability)
[16:38] <rogpeppe1> katco: am jealous of you going to gophercon
[16:38] <rogpeppe1> katco: i couldn't quite bring myself to spend all that cash
[16:38] <katco> rogpeppe1: i think we have an extra ticket
[16:38] <rogpeppe1> katco: really?
[16:38] <ericsnow> natefinch: I try to keep my changes small
[16:38] <ericsnow> natefinch: too many times I've been bitten by getting pieces done, breaking them when working on the next piece, and not being able to get back to the point where it was working
[16:38] <katco> rogpeppe1: yeah, talk to alexisb
[16:38] <rogpeppe1> katco: we're sponsoring it?
[16:39] <katco> rogpeppe1: yes
[16:39] <rogpeppe1> katco: woah....
[16:39] <katco> rogpeppe1: i'm speaking as well
[16:39] <rogpeppe1> katco: great!
[16:39] <rogpeppe1> katco: yeah, i saw that AFAIR
[16:40] <katco> rogpeppe1: re: the import . thing, i like that when what you're trying to accomplish is supposed to feel like an extension to the language
[16:40] <katco> rogpeppe1: but i know it's not idiomatic
[16:40] <katco> rogpeppe1: for examples, i claim a pass, and people can do whatever they want when they use it ;)
[16:41] <rogpeppe1> katco: i really think it's worth trying to make it feel idiomatic
[16:41] <rogpeppe1> katco: and Go doesn't have language extensions :)
[16:41] <katco> rogpeppe1: the import "." isn't requisite to utilizing the lib, people can do w/e they want
[16:41] <katco> rogpeppe1: but it keeps my examples clear
[16:48] <natefinch> ericsnow: yeah, totally get that
[16:49] <natefinch> rogpeppe1: you should go to gophercon.  I wish I could go, but already scheduled a vacation for next week before they announced the date.  Super super jealous of those that can go, especially since I couldn't go last year either.  Hopefully next year, when we don't have any kids under 1yo
[16:50] <ericsnow> natefinch: the small-commits approach also helps tell the story of how your thinking progressed over the course of the branch :)
[16:51] <natefinch> ericsnow: yep
[16:56] <rogpeppe1> natefinch: i'm gonna try to go
[17:09] <natefinch> wwitzel3: in your api client code, is there any reason not to just return the struct, rather than an interface?
[17:09] <wwitzel3> natefinch: because that struct should never be created without using the constructor
[17:10] <wwitzel3> natefinch: and I've never regretted using an interface, but I have regetted using a struct for a return :)
[17:12] <katco> wwitzel3: fwiw, i have not been convinced why returning a struct is better yet, but that is what idiomatic go suggests. brad fitzpatrick and andrew gerrand did some live coding and that came up as a pet peeve: i.e. "just return the struct"
[17:13] <katco> wwitzel3: i think it probably has something to do with the fact that go has duck-typing, so conversions should happen in that manner, but i don't know if it takes into consideration the issues you bring up
[17:13] <wwitzel3> katco: even in a case when you never want that struct instansitated without using the constructor? that seems counter to the point of public and private
[17:13] <natefinch> wwitzel3: I don't know, if you see a constructor, it's usually pretty obvious that you shouldn't just create the struct yourself.  In theory you can always make it return an interface later if needed, but initially, that extra interface just complects the package API.... it also adds a red herring, making me think there might be something different returned sometimes.
[17:13] <ericsnow> katco: not that long ago I heard davechen1y say "in functions take interfaces and return structs"
[17:13] <katco> ericsnow: yeah, basically
[17:14] <katco> wwitzel3: yeah i know. i agree. i haven't thought through that yet. i'd love to get that point clarified
[17:14] <mattyw> ericsnow, are you still available for reviewboard advice?
[17:15] <natefinch> Be conservative in what you [return], be liberal in what you accept from others
[17:15] <ericsnow> mattyw: depends on what you need <wink>
[17:15] <mattyw> ericsnow, this http://reviews.vapour.ws/r/2091/ just doesn't seem to be working in rb at all, you can see in github that it's basically moving loads of files
[17:15] <mattyw> ericsnow, any advice on how I can resolve this?
[17:15] <katco> wwitzel3: maybe it has something to do with: you don't know how your type will be used, and the more specific you are, the more flexible your callers can be
[17:16] <ericsnow> mattyw: what isn't working in RB?
[17:16] <wwitzel3> katco: isn't that what an interface is? a contract for how your type will be used?
[17:16] <katco> wwitzel3: e.g. if i return interface Foo, i can only use it as a Foo. but if i return struct Bar, i can pass Bar into all the things that take interfaces that look like Bar
[17:16] <mattyw> ericsnow, well loads of files it just shows me an errors (for the files that have gone) and for the new files it just display all the code, what's actually happened is those file were moved
[17:16] <ericsnow> mattyw: deleted (moved) files show up with an error (and say "deleted" in the file list)
[17:17] <ericsnow> mattyw: yep, that's how RB works (unfortunately)
[17:17] <ericsnow> mattyw: in this case I'd just point folks to the PR
[17:17] <ericsnow> mattyw: it's not like you made any semantic changes
[17:18] <mattyw> ericsnow, ok will do thanks
[17:18] <katco> wwitzel3: it's a valid question i think. idiomatic go says return structs. i just don't know why.
[17:18] <ericsnow> mattyw: cool
[17:18] <wwitzel3> katco: isn't that what a closure is for? you encapsulate things in a manner so you can easily pass them within your API without having to implement someone elses?
[17:18] <mattyw> ericsnow, just thought it was worth checking, in case there was any git-foo I was missing
[17:18] <mattyw> git-fu rather
[17:18] <natefinch> wwitzel3: if you have to write a closure, you've already lost
[17:18] <ericsnow> mattyw: no worries
[17:18] <katco> wwitzel3: i'm not sure i understand the closure comment. interfaces would be dealing with methods
[17:19] <katco> natefinch: that is a rather inflammatory statement :p
[17:19] <ericsnow> mattyw: it would be nice if RB handles moves (and deletes) better
[17:19] <natefinch> katco: in general, a closure means "someone screwed up their API and now I have to fix it with this gross hack"
[17:19] <wwitzel3> katco: right, but you were saying how if you run the interface vs. a struct, the struct can be passed to anything that accepts an interface that it implements
[17:19] <katco> natefinch: that is absolutely wrong
[17:20] <natefinch> katco: let's discuss after the demo ;)
[17:20] <ericsnow> mattyw: that patch doesn't have semantic changes, right?
[17:20] <katco> wwitzel3: right, i don't think you can solve that with a closure as closures are functions, and interfaces deal with methods on a struct
[17:20] <ericsnow> mattyw: if not, totally LGTM
[17:21] <wwitzel3> katco: no, I am saying your API which accepts interfaces, could accept closures.
[17:21] <natefinch> wwitzel3: gave you a shipit on the client... there were a couple comments, but they're not critical
[17:21] <wwitzel3> katco: creating isolation of the foreign API
[17:22] <natefinch> wwitzel3: i.e. ok to do after the demo (or tell me I'm full of it and "Drop" them ;)
[17:22] <wwitzel3> natefinch: thank you :), taking a look
[17:23] <mattyw> ericsnow, if you want to take a look at the two commits https://github.com/juju/juju/pull/2713 you will see minor things
[17:24] <ericsnow> mattyw: yeah, that's the only difference I noticed so LGTM
[17:25] <katco> ericsnow: wwitzel3: natefinch: api server abstraction finally landed
[17:26] <wwitzel3> \o/
[17:26] <ericsnow> katco: yeah, just saw :)
[17:26] <katco> that took forever
[17:26] <katco> i think i hit every branch of the CI issues tree on the way down
[17:26] <ericsnow> katco: I'll have a patch up shortly that fixes the UnitProcesses issue
[17:26] <katco> ericsnow: sweet
[17:41] <ericsnow> katco: http://reviews.vapour.ws/r/2092/
[17:41] <katco> ericsnow: tal
[17:41] <ericsnow> katco: ta
[17:43] <katco> ericsnow: just reading through this, we should put some thought into another name for "State" within components at some point
[17:44] <ericsnow> katco: agreed
[17:45] <katco> wwitzel3: natefinch: can someone else review this as well? i'm bumping into a meeting, and i'd like another +1
[17:49] <wwitzel3> katco: yep, I will as soon as I address my changes from the rebase
[17:50] <natefinch> katco: looking
[17:50] <katco> ericsnow: i'm scared. this is all understandable by understanding the individual parts.
[17:51] <katco> ericsnow: i need the comfort of the rats nest i've become accustomed to.
[17:51] <ericsnow> katco: if you like that's what I can work on next week <wink>
[17:52] <natefinch> ericsnow: I don't understand how that API can work
[17:53] <ericsnow> natefinch: the unit is intrinsic to the hook context
[17:54] <ericsnow> natefinch: so you don't need the unit to be identified for each API request
[17:54] <natefinch> ericsnow: also means you *can't* query processes for other units
[17:54] <wwitzel3> natefinch: if you can give the client stuff another glance, since I updated it for the renames that happened in server-args
[17:55] <ericsnow> natefinch: is that something we would do in a hook context?
[17:56] <natefinch> ericsnow: I have no idea :)   I guess we can always change it later.
[17:56] <ericsnow> natefinch: yeah, adding support for that use case would be almost trivial
[17:56] <ericsnow> natefinch: (strictly additive)
[17:57] <katco> ericsnow: natefinch: possible counter-example: leadership. leaders may request operations for other units?
[17:58] <ericsnow> katco: worth looking into (I'm not super familiar with unit leadership)
[17:59] <katco> ericsnow: fwereade was mentioning at one point that a service could elect a leader which may then perform operations for the entire service
[18:00] <ericsnow> katco: do we support that for other components (e.g. storage)?
[18:00] <natefinch> I say we leave it as is for now.  It's nice not to have to specify the unit when the unit should be obvious.  If we later want to add the ability to specify the unit, we can do so easily.
[18:00] <katco> ericsnow: really not sure
[18:00] <ericsnow> natefinch: agreed
[18:00] <ericsnow> katco: I'll create a card for the open question
[18:00] <katco> ericsnow: good idea
[18:00] <natefinch> I'm guessing we'll need to be able to specify the unit... but not for the demo :)
[18:03] <ericsnow> natefinch: I expect such functionality will not be part of the hook context API
[18:03] <natefinch> ericsnow: perhaps not
[18:04] <natefinch> I'm a little curious why we need two APIs, but not concerned about it right now
[18:04] <natefinch> (or rather why it seems like we might need more than one)
[18:04] <ericsnow> natefinch: eventually we will have at least 3
[18:04] <ericsnow> natefinch: (hook context, worker, public)
[18:05] <natefinch> ericsnow: seems like they won't differ significantrly
[18:05] <ericsnow> natefinch: probably not
[18:05] <ericsnow> natefinch: but the differences will be subtle
[18:05] <natefinch> ericsnow: those are the worst kinds of differences
[18:06] <ericsnow> natefinch: when we add the others we can look into the best approach (merged or separate)
[18:06] <natefinch> ericsnow: yep
[18:48] <wwitzel3> dang
[18:48] <wwitzel3> I was hoping your stuff wouldn't merge ericsnow , so then you'd have to fix the conflicts
[18:49] <ericsnow> wwitzel3: mwahaha
[18:49] <ericsnow> wwitzel3: I realized that after my patch was queued up
[18:49] <ericsnow> wwitzel3: sorry
[18:51] <wwitzel3> natefinch mentioned on my review so I hurried to merge but you got in like a minute before me, lol
[18:52] <natefinch> haha
[18:53] <ericsnow> wwitzel3: I was thinking to myself "eets a race" (from the movie "Rat Race")
[18:53] <wwitzel3> :)
[19:09] <hallblazzar> WARNING juju.replicaset replicaset.go:98 Initiate: fetching replication status failed: cannot get replica set status: can't get local.system.replset config from self or any seed (EMPTYCONFIG)
[19:09] <hallblazzar> does anyone got this error when run  "juju bootstrap -e maas"?
[19:16] <katco> ericsnow: hey, have time to meet now?
[19:16] <ericsnow> sure
[19:17] <katco> ericsnow: out 1:1
[19:29] <wwitzel3> katco: ping
[19:30] <wwitzel3> katco: in the client constructor for leadership you take in the facade and the caller seperately, do you just pass in st for both?
[19:42] <natefinch> guys, I gotta run. We still need to pack for our trip... I don't think there's much more I can help with at this point anyway, unless you want someone to throw under the bus for a quick rubber stamp ship it.
[19:42] <natefinch> wwitzel3: katco, ericsnow ^^
[19:42] <ericsnow> natefinch: have a great time :)
[19:43] <wwitzel3> natefinch: thanks again, have a good time
[19:43] <natefinch> thanks!
[20:30] <mup> Bug #1471004 opened: apiserver/storageprovisioner unit test fails on ppc64 <juju-core:New> <https://launchpad.net/bugs/1471004>
[20:39] <mup> Bug #1471004 changed: apiserver/storageprovisioner unit test fails on ppc64 <ci> <intermittent-failure> <test-failure> <unit-tests> <juju-core:Triaged> <juju-core 1.24:Triaged> <https://launchpad.net/bugs/1471004>
[20:48] <mup> Bug #1471004 opened: apiserver/storageprovisioner unit test fails on ppc64 <juju-core:New> <https://launchpad.net/bugs/1471004>
[22:45] <mup> Bug #1471030 opened: github.com/juju/juju/cmd/juju tests timeout on ppc64 <ci> <ppc64el> <test-failure> <unit-tests> <juju-core:Triaged> <https://launchpad.net/bugs/1471030>
[23:02] <thumper> menn0: ping
[23:02] <menn0> thumper: pong
[23:02] <thumper> menn0: do you have some time to talk through this upgrade issue?
[23:03] <menn0> thumper: yup. standup hangout
[23:14] <mwhudson> davechen1y: do you know much about cmd/internal/obj/arm ?
[23:15] <mwhudson> like, what is Prog.Scond
[23:15] <mwhudson> i guess it's the arm conditional execution bits?
[23:16] <mwhudson> ah yes
[23:26] <axw> perrito666: sorry I think you were saying something as I left
[23:26] <perrito666> axw: no, I bg noise
[23:26] <axw> ok
[23:26] <axw> perrito666: sounded like someone jumping up and down on a squeaky bed
[23:27] <perrito666> axw: eliptical walking machine
[23:27] <axw> :)
[23:27] <perrito666> I hate it
[23:27] <perrito666> :p
[23:27] <perrito666> I have oiled every possible piece of that thing and still makes noise