/srv/irclogs.ubuntu.com/2014/03/13/#juju-dev.txt

wwitzel3wallyworld_: will re-running go get on juju-core ensure the proper dependancies get updated? Or is there an easy way to go get -u all of the entries in dependancies.tsv?00:12
wallyworld_go get -u on launchpad.net/juju-core should do deps, but00:13
wallyworld_go has no proper dependency management like python etc00:14
wallyworld_i think it just pulls trunk00:14
wwitzel3right, thank you00:14
wallyworld_the dependencies.tsv file is used with tooling by the CI00:14
wallyworld_not by go itself00:14
wwitzel3ahh ok, makes sense, was wondering what that was for00:14
wallyworld_i lot of us are very disappointed with go's dep management00:15
wallyworld_the designers think it's ok to build against trunk of all the deps00:15
wallyworld_which is so crackful i don't know where to start00:15
bodie_heh00:15
bodie_crackful00:15
bodie_so if I want to update ALL THE THINGS can I just go get -u launchpad.net/... ?00:16
bodie_or will that go get everything on launchpad.net ?00:16
bodie_I tried asking in #go-nuts, but they were snarky because they didn't know :P00:16
wallyworld_not sure actually00:16
wallyworld_not sure if it just looks on disk00:16
bodie_dyou have a way to update a local tree?00:16
wallyworld_i normally use bzr to get the required rev00:17
wallyworld_by hand :-(00:17
* bodie_ offers wallyworld_ a consolation beer00:17
wallyworld_cause i don't trust just building against trunk of all the deps00:17
bodie_hm00:17
* wallyworld_ slurps the virtual beer00:17
wallyworld_from what i recall, the go guys said that dependency management is hard so let's just ignore it :-(00:18
bodie_looks like go get -u <thing>/... works00:18
wallyworld_great00:19
wwitzel3wallyworld_: yeah, I've seen projects using two accounts on github, -dev and -stable, which I guess works for ensuring you are working off some random rev of master00:20
wwitzel3are not00:20
wallyworld_yeah00:21
_thumper_waigani: next you could do the tests for optional autostart for lxc01:35
_thumper_waigani: although we shouldn't land this until we have "suspend" and "resume"01:35
_thumper_otherwise we have no way to restart a non-autostarting environment01:36
waigani_thumper_: okay, so where do I get started with the "suspend" and "resume" stuff01:41
waiganiwallyworld_: what was the bug you mentioned I could look at?01:42
wallyworld_it's on the 1.17.5 milestone page, let me check01:42
waigani_thumper_: i.e. is there any relevant code or am I introducing this as a new feature, in which case I'll go play with the cli lxc suspend and resume01:43
wallyworld_waigani: https://launchpad.net/bugs/129116501:44
_mup_Bug #1291165: juju bootstrap local cannot bootstrap  <ppc64el> <juju-core:Incomplete> <https://launchpad.net/bugs/1291165>01:45
waiganiwallyworld_: cheers01:45
wallyworld_ah someone has marked it incomplete01:45
wallyworld_but still01:45
wallyworld_if there's an empty jenv file, we should be able to nuke it01:45
thumperdavecheney: hey02:42
thumperdavecheney: how's things going?02:42
thumperwallyworld_: https://codereview.appspot.com/74370044/02:44
wallyworld_looking02:44
thumperaxw: that azure branch is a monster02:46
thumperaxw: no changes in gwacl?02:46
thumperah, can see it02:46
thumperyes there is02:46
thumperaxw: but I guess all the gwacl stuff needed is reviewed and landed already02:47
thumperwallyworld_: I did add some tests around the autostart for the template and the clone02:48
wallyworld_ok, i missed those then :-)02:49
thumperhttps://codereview.appspot.com/74370044/diff2/1:20001/container/lxc/lxc_test.go02:49
wallyworld_great02:49
davecheneythumper: o/02:49
davecheneystill fighting with proxy prolems02:50
davecheneyjust adding some more debug to juju02:50
thumperdavecheney: what sort of problems?02:50
davecheneynot obeying no_proxy02:50
davecheneyi guess02:50
davecheneyyou have to be very explicit in the no_proxy list02:50
axwthumper: sorry, was in the zone02:51
thumperaxw: np02:51
axwyes, monstrous in several ways02:51
thumperdavecheney: but no_proxy is at least being propogated?02:51
thumperaxw: I was going to do the initial review for your branch02:52
thumperand trying not to get put off by the shear size :-)02:52
axwthumper: sorry :(02:52
thumperaxw: :-)02:53
axwI've tried to make it as minimal as I can02:53
thumperhey, at least it is just four files :)02:53
axwhehe02:53
thumperreasonably isolated02:53
axwI just rewrote those four files :)02:53
thumperaxw: so this branch doesn't put multiple machines into a single cloud service yet?02:54
axwthumper: no. well, state servers will - but we don't spawn multiple of them yet02:55
thumperhah02:55
thumperok02:55
thumperjust didn't want to get confused more than usual reading the code02:55
jcastrohey thumper02:56
axwthumper: let me know if you need any explanations on the azure concepts02:56
thumpero/ jcastro02:56
jcastrotheorize with me.02:56
thumperaxw: sure02:56
thumperjcastro: oh... kay...02:56
jcastroso you know how you can add servers via the manual provider02:56
jcastrowhat's to stop me from adding some servers from aws, some from azure, some from hp02:57
jcastroand doing a poor man's cross environment relations?02:57
thumperjcastro: they won't be able to talk to each other02:57
thumperjcastro: the units use the internal private address02:57
axwjcastro: they won't have the same internal addresses02:57
thumperwhich is cloud (or region) private02:57
axwwhat thumper said02:57
jcastroso even if I was to try and trick them with say openvpn or whatever02:58
jcastrobah! so close!02:58
thumperyes, close02:58
axwif you set up all the routing yourself you could do it02:58
thumperI forsee a time when we use our own SDN for juju, so this would work02:58
thumperbut this isn't in the near future02:58
thumperperhaps 6-12 months if we're lucky02:58
* jcastro nods02:59
waiganithumper: lxc-freeze/lxc-unfreeze == suspend/resume?03:00
davecheneythumper: i think so03:01
davecheneyi need to find out which host is getting knocked back by the proxy03:01
waiganidavecheney: cheers03:01
thumperwaigani: no... I don't think so03:01
thumperwaigani: because when a machine stops or is rebooted03:01
thumperwaigani: the machine is in a stopped state, not a frozen state03:01
thumperso better to be consistent03:01
thumperperhaps after the initial approach03:01
thumperwe could use freeze/unfreeze in addition to start/stop03:02
thumperif necessary03:02
thumperbut start/stop are bare minimum necessary03:02
waiganithumper: oh right, I assumed we already had that and you wanted suspend/resume in addition03:03
thumperwaigani: no...03:03
thumperit's complicated03:03
axwthumper: I think it's best to leave this Azure stuff till after 1.18.0 in case it destabilises - what do you think?03:11
thumperhmm...03:12
thumperwell, it would only destabalize azure03:12
thumperand they have kinda asked for it :-)03:12
thumperI'll punt the question to mramm03:12
thumperand extras03:12
axwok03:12
thumperI'll put it on the minutes for tonight's meeting03:12
thumperand we'll make a decision03:12
axwokey dokey03:12
waiganiwallyworld_, thumper: is there a way to look at trunk without switching to it?03:31
wallyworld_you can browse from launchpad03:31
waiganifrom the filesystem?03:31
wallyworld_from the browser03:32
waiganiit would be handy to have trunk in a sublime window03:32
wallyworld_or you can branch it locally somewhere03:32
wallyworld_in that case, just branch locally03:32
waiganiah okay03:32
davecheneythumper:         resp, err := utils.GetNonValidatingHTTPClient().Do(req)03:40
davecheney        if err != nil {03:40
davecheney                return nil, fmt.Errorf("cannot upload charm: %v", err)03:40
davecheney^ this http client doesn't observe the proxy03:40
davecheneyor doesn't obey the proxy exclusion, or something03:42
davecheneyno03:43
davecheneywait03:43
davecheneyits somewhere else03:43
davecheney2014-03-13 03:43:40 ERROR juju.cmd supercommand.go:296 failed to add remote charm "cs:precise/ubuntu-4": cannot upload charm to provider storage: 403 403 Forbidden03:44
thumperhmm..03:51
* thumper is still in axw's first file03:52
davecheneythumper: still chasing03:55
davecheneyit's in storage.Puit03:55
davecheneyand this must be posting to the little web server the local provider stands up03:55
davecheneyi just need to find out which localhost addr it is sitting on03:55
axwdavecheney: should be in lxcbr003:58
thumper10.0.3.1 is the host04:00
thumperdavecheney: can you do 10.0.3.0/24 ?04:01
thumperwaigani: what'cha up to?04:04
thumperwaigani: because I have a few refactorings I'd like to see landed ASAP04:04
thumper :)04:04
* thumper sighs04:05
thumpertwo down, two to go04:05
davecheneythumper: i don't think so04:05
davecheneyi migth be able to do 10.0.304:05
davecheneyi think it's just a substring map04:05
davecheneythumper: i already added 10.0.3.1 to the list04:05
waiganithumper: girl just got off the ice. I have to head home and do dinner/homework daddy thing. After that?04:05
waiganior email me and I'll pick it up this evening04:06
thumperdavecheney: http://unix.stackexchange.com/questions/23452/set-a-network-range-in-the-no-proxy-environment-variable04:07
davecheneythumper: intersting04:08
axwthumper: was it as good for you as it was for me?04:41
thumperaxw: probably a lot less of a pain for me04:41
axwreviews can be quite tiring04:42
wallyworld_thumper: me is sad06:06
wallyworld_ERROR juju.cmd supercommand.go:293 empty http-proxy in environment configuration06:06
wallyworld_save me looking, any idea?06:07
wallyworld_there is no http-proxy in my env config06:07
wallyworld_never has been06:07
wallyworld_ah fark, wrong environment06:08
wallyworld_that was with local06:08
dimiternhey thumper06:45
waigani_thumper: I accidentally cancelled during a commit. branch is locked. bzr break-lock: The lock for [branch] is in use and cannot be broken.07:25
waigani_thumper: bzr info: Could not acquire lock "...go/src/launchpad.net/juju-core/.bzr/checkout/dirstate": [Errno 11] Resource temporarily unavailable07:28
mattywwaigani_, can you try doing this? bzr break-lock bzr+ssh://example.com/bzr/foo with the bzr+ssh pointing to the remote branch07:29
mattyw^^ah right during a commit - not a push - I suspect my "advice" is worthless here07:30
waigani_mattyw: yeah during commit $#@$07:33
waigani_axw? wallyworld_? ^07:34
axwwaigani_: I did that once, and thumper had to walk me through fixing it... I can't remember the details sorry07:36
waigani_hmmmm07:37
waigani_thumper: never mind, I fixed it07:52
waigani_wallyworld_: can I bzr switch -b [branch] in a new terminal while lbox proposing in another?07:56
waigani_axw: ^ ?07:56
axwwaigani_: no07:57
waigani_okay, np07:57
jamdimitern: good morning09:21
dimiternjam, morning!09:21
jamdimitern: I'd like to have vladk do some work with you to get up to speed on juju-core09:21
jamdimitern: do you think you can spend some time pairing with him today ?09:22
dimiternjam, sure, after the weekly meeting perhaps? I need to get this fix done first.09:22
jamdimitern: that should be fine, I think he's still got infrastructure stuff to do today09:23
jamvladk: did you need something ? It sounded like you were just saying something as I closed the window09:38
thumperdimitern: o/09:43
dimiternthumper, hey - seen my mail?09:43
thumperyes, will get on it09:44
jamfwereade: standup ?10:02
jammramm: welcome10:02
dimiternmramm, fwereade, rogpeppe, mgz_, meeting?10:02
rogpeppedimitern: ah yes10:02
dimiternvoidspace, ^^10:03
wallyworld_fwereade: i really want to get this in for 1.18 because API https://codereview.appspot.com/7533004310:14
dimiternwallyworld_, are you working on bug 1291207?10:20
_mup_Bug #1291207: juju-run symlink is broken after upgrade-juju <run> <upgrade-juju> <juju-core:Triaged by wallyworld> <https://launchpad.net/bugs/1291207>10:20
wallyworld_dimitern: no10:20
voidspaceoh, is there a meeting now10:20
dimiternwallyworld_, ok10:20
wallyworld_dimitern: axw was going to i think10:20
wallyworld_voidspace: come and join us :-)10:21
voidspacewallyworld_: coming.10:21
voidspaceI did not know we had meetings at a different time on Thursdays!10:22
wallyworld_Thursdays are special10:22
dimiternvoidspace, it's just this one10:22
axwI wasn't planning to work on that bug...10:22
axwI just reported it :)10:22
voidspacedimitern: you mean just today, or just Thursday?10:22
dimiternaxw, wallyworld_, ok so if I can get to it I'll fix it today10:23
jamvoidspace: thursday is everyone, so we go a bit earlier to make it work for NZ10:23
axw(currently deep into Azure)10:23
axwthanks dimitern10:23
wallyworld_dimitern: \o/10:23
dimiternvoidspace, every thursday10:23
voidspacedimitern: thanks10:23
voidspaceso my code review suggests I should add global state and reduce test coverage!10:24
voidspaceamongst some more sensible comments ;-)10:24
* dimitern raises 2 crossed fingers in disgust...10:27
dimiternhey sinzui, what's your plan for the 1.17.5 release? immediately after fixing the critical issues?10:29
voidspaceah, the suggestion to reduce test coverage *does* suggest removing the code that was being tested too, so not entirely crazy :-)10:31
dimiternaxw, re bug 1291292 - the manual bootstrap writes provider-state-url file with a hardcoded file:///<storage-path>/provider-state10:42
_mup_Bug #1291292: use a utils/http client for all HTTP(S) calls across the codebase <manual-provider> <tech-debt> <juju-core:Triaged> <https://launchpad.net/bugs/1291292>10:42
dimiternaxw, and it does that because I guess p-s-url being an url, it's read with bootstrap.LoadStateFromURL10:43
axwdimitern: it should be http:// though. I will try to remember to take a look later10:45
axwmachine-0 starts an httpstorage listener10:45
dimiternaxw, it starts an sshstorage in either bootstrap or provisioning mode (can't remember)10:46
axwonly command line should be using sshstorage - could be an issue around there10:46
dimiternaxw, seemed so to me as well10:47
dimiternfwereade, i've assigned to myself all bugs i'm working on today - basically i need to get upgrades from 1.16 going smoothly11:01
fwereadedimitern, ok, excellent; you and mgz will need to do vlans as a matter of some urgency though11:01
wallyworld_jam: fwereade: i've tested this live upgrading from all of 1.16, 1.17, 1.18. I would love to get it in to 1.18 so we can delete lots of code post 1.18 https://codereview.appspot.com/7533004311:06
voidspacemgz_: I'm just butchering our mp in response to the review from rogpeppe11:06
wwitzel3rogpeppe: did you see my comment on the br0 bug?11:06
jamdimitern: rogpeppe: vladk: Dimiter has mentioned that he's a bit swamped with some critical bug fixes. Roger, is it possible for you to spend some time with vladk looking over your shoulder about the work your on?11:06
rogpeppejam: sure11:07
rogpeppewwitzel3: no11:07
voidspacemgz_: although rogpeppe and natefinch suggest adding global state to the tests11:07
rogpeppevoidspace: ??11:07
rogpeppevoidspace: what global state?11:07
voidspacerogpeppe: using a global variable instead of a hard coded exception11:07
voidspacerogpeppe: I solved it a different way instead :-)11:07
rogpeppevoidspace: that's not global state actually11:07
voidspacerogpeppe: which you *also* hinted at in a different part of the review11:07
rogpeppevoidspace: but i also suggested another way11:07
rogpeppevoidspace: yeah11:08
wwitzel3rogpeppe: short version, I did the same set of tests we did yesterday using trunk and it all worked.11:08
rogpeppewwitzel3: bugger11:08
rogpeppeoh for a real maas11:08
voidspacerogpeppe: using aggregator.instanceInfo instead of the reqc channel directly improves the tests a lot11:09
voidspacerogpeppe: so thanks for that11:09
rogpeppevoidspace: cool11:09
voidspacerogpeppe: just going through making all those changes11:09
voidspacerogpeppe: and I have a question about the removal of the loop exit - but it's in my reply to the review so you can read it and answer when I'm done11:09
rogpeppevoidspace: the only test coverage i suggested removing was inappropriately messing with private state - if we're going to do that, then there are *many* more tests we can do :-)11:10
thumpernight all11:10
rogpeppethumper: g'night11:10
voidspacerogpeppe: we have code to handle the channel dying11:10
rogpeppevoidspace: i suggested removing that11:10
voidspacerogpeppe: right11:10
rogpeppevoidspace: because we never actually close the channel11:10
voidspacerogpeppe: however, my follow up question is11:11
voidspacerogpeppe: inside newAggregator we have the inner func which wraps the loop call in tomb.Kill with a defered tomb.Done11:11
voidspacerogpeppe: which we didn't see an easy way to test11:11
voidspacerogpeppe: as loop exit is now not *possble* shouldn't that code be removed too?11:11
rogpeppevoidspace: the loop does exit when the tomb is killed11:12
voidspaceright, there's still the tomb exit11:12
voidspaceI forgot about that return11:12
voidspaceok11:12
rogpeppevoidspace: when that happens, tomb.Done will be called11:12
rogpeppevoidspace: and if that's not called, then Wait won't return11:12
rogpeppevoidspace: so we are testing it AFAICS11:12
voidspacerogpeppe: I thought we were removing the only return from the loop, but we aren't11:12
voidspaceso fine, that's my answer - thanks11:13
rogpeppevoidspace: cool11:13
gnuoyHi, I just got stung by Bug#1243827 , is there a work around for it or a fix in the pipeline ?11:13
_mup_Bug #1243827: juju is stripping underscore from options <canonical-webops> <config> <juju-core:Triaged by adeuring> <juju-deployer:Invalid by hazmat> <https://launchpad.net/bugs/1243827>11:13
voidspaceI'm very happy to remove tests if we also remove the code being tested11:13
rogpeppevoidspace: it occurred to me that there are actually no tests that the requests are issued at the expected rate11:13
adeuringgnuoy: put the data into quotation marks11:14
voidspacerogpeppe: that gatherTime is honoured?11:14
rogpeppevoidspace: yeah11:14
voidspacerogpeppe: well, that's a ratelimiter detail - so that should be tested inside ratelimiter11:14
gnuoyadeuring, I'll give that a try, thanks11:14
voidspacerogpeppe: we test that they're batched by the ratelimiter11:14
voidspacerogpeppe: we don't test that our gatherTime is *passed* to the ratelimiter, but if they're batched (which we do test) I think it's fair to just assume that11:14
rogpeppevoidspace: kinda. we test some batching, but we don't really check that we're using the ratelimiter appropriately.11:15
adeuringgnuoy: ...or use double underscores. But that will require a change in the config once the bug is fixed. (and I am quite close to having a fix)11:15
voidspacerogpeppe: so I could test that the time taken for the batched request to return is greater than gatherTime11:15
rogpeppevoidspace: i believe it works, but i woke up this  morning thinking that it didn't, and had to write a little piece of code to convince me itdid11:15
voidspacerogpeppe: a simple assertion that timeTakenToBatch > gatherTIme then?11:15
voidspacerogpeppe: I don't want to test the semantics of the ratelimiter inside the aggregator tests - the ratelimiter should be tested inside ratelimiter11:16
rogpeppevoidspace: i'd actually prefer something that calls instanceInfo several times (say 100 times at 1ms intervals, with gatherTime say to 10ms) and check that the total number of requests issued is no more than 1011:16
voidspacerogpeppe: that does sound like testing the ratelimiter works11:17
rogpeppevoidspace: i do hear you there, but it's actually just testing one incarnation of the ratelimiter, and that we are using it appropriately.11:18
rogpeppevoidspace: it would be quite easy to do it wrongly11:18
rogpeppevoidspace: that said, i believe the code works, so i'm happy to go forward with the existing tests if you're happy with them11:18
voidspacerogpeppe: I could add a (threadsafe *sigh*) counter to testInstanceGetter11:18
voidspacerogpeppe: so it wouldn't be hard to write11:18
voidspacerogpeppe: just fire off a bunch of requests, ensure none of them error and that testInstanceGetter.counter <= 1011:19
rogpeppevoidspace: yeah11:19
rogpeppevoidspace: sync/atomic can be useful for thread-safe counters, if you haven't already added a mutex11:20
voidspacerogpeppe: the existing batch test also ensures that the right response goes back to the right request - so it still has value "as is"11:20
rogpeppevoidspace: definitely11:20
voidspacerogpeppe: I don't think we need a mutex in the place you suggested one11:20
rogpeppevoidspace: ok11:20
voidspacerogpeppe: as we're doing a blocking read so we *can* actually know there is no concurrency issue in that specific place11:20
voidspacerogpeppe: the batched requests that set instanceGetter.ids can only happen after the first request completes11:20
rogpeppevoidspace: that does assume a particular implementation, but i'm happy with that11:21
rogpeppevoidspace: we don't do black-box testing11:21
voidspacerogpeppe: well, it assumes that we can only get a reply after the request has been sent11:21
voidspacerogpeppe: so we're assuming a particular implementation of the *universe*11:22
voidspace;-)11:22
voidspaceas we wait for the reply before making the next request11:22
voidspaceI don't *think* that makes assumptions about the implementation11:22
rogpeppevoidspace: it assumes that the loop doesn't call Instances again after sending the reply11:22
voidspacerogpeppe: we know there are no other requests coming in11:23
rogpeppevoidspace: but that would indeed be a hard mistake to make11:23
rogpeppevoidspace: i was not seriously suggesting adding a mutex, in all honesty11:23
voidspaceok11:23
rogpeppevoidspace: just pointing out the potential issue - it's a common pattern to see, and raises warning signs in my head11:24
voidspaceI've worked with threads before11:24
voidspaceso I'm no stranger to concurrency pain11:24
rogpeppevoidspace: :-)11:24
rogpeppevoidspace: given the above, you probably won't need a thread-safe counter either11:25
rogpeppevoidspace: as you know that instances is always called from a single thread11:25
voidspaceno, we need to batch 100 calls concurrently as we can't use instanceInfo synchronously if we want batching11:25
voidspaceand a plain increment won't be thread safe11:25
voidspaceso I think we will11:26
voidspacealthough you maybe right - let me think about it11:26
rogpeppevoidspace: we can make 100 calls concurrently, but Instances will only be called from a single thread11:26
voidspaceah yes11:26
voidspacewe make the requests from 100 different goroutines - but the instance is accessed just from the loop goroutine11:27
rogpeppevoidspace: yeah11:27
voidspacecool11:27
rogpeppevoidspace: that said, we really are assuming an implementation here - the previous implementation of instanceInfo *would* have called Instances concurrently11:27
rogpeppevoidspace: so probably best to use atomic.AddInt32 or whatever , just to be on the safe side11:28
rogpeppevoidspace: then you can easily verify that the tests fail against the old version of the code if you wish11:28
voidspacefair enough11:28
voidspacea big part of my work with paymentservice was implementing correct locking to solve our concurrent database access problems - that was *worse* though because the concurrent access was from different processes, and actions that acquired the lock could trigger other actions in other processes that needed the lock too11:29
voidspaceso we had to add locking without deadlocking11:29
voidspacewe ended up with a state machine to handle the actions (state transitions) and also do the locking in basically *one place*11:29
voidspacebut before then we had to add careful locking everywhere we found a race condition11:29
voidspacecoffee11:30
rogpeppevoidspace: yeah, mutexes work ok in simple situations, but for more complex situations, a single thread makes things easier11:30
voidspaceand William and I have some fun horror stories about threading from Resolver Systems - we changed the main calculation engine to work in a background thread (to not block the UI and allow multiple concurrent calclulations)11:31
rogpeppevoidspace: database locking is awkward because you don't really want a monitor process either11:31
voidspacebut syncing the results back to the UI had to happen on the UI thread11:31
rogpeppevoidspace: ha ha11:31
voidspacewe spent *days* finding and fixing race conditions11:31
voidspaceincluding multiple iterations of "I can *prove* that what just happened can't happen"11:31
rogpeppevoidspace: a nice idiom in Go can be to send a function on a channel, which then gets executed by the monitor thread11:32
voidspacerogpeppe: yes, being able to send functions on channels is very nice11:32
voidspacesimilar to InvokeOnThread (or whatever it's called) in C# - which kinda-sorta has function pointers in the form of delegates11:33
voidspaceactually, it's functional programming support improved massively after I stopped using it11:33
rogpeppevoidspace: yes, except that InvokeOnThread sounds like you can tell some code to execute on any arbitrary thread11:34
voidspaceonly if there's an event loop running11:34
voidspaceso for the main GUI event loop you can pass a delegate and say "execute this delegate on the GUI thread and return the results to me"11:34
rogpeppevoidspace: right11:34
voidspacewhich yes, isn't the same as sending a function across a channel - just reminded me of it I guess11:35
rogpeppevoidspace: if you have generalised "event loops" it makes sense11:35
voidspaceyep, you could run multiple event loops in different threads11:35
voidspaceanyway, coffee time for me11:36
rogpeppevoidspace: enjoy11:36
voidspace:-)11:36
rogpeppevladk: hi11:39
rogpeppevladk: when you feel that you've caught up with what you want to do, perhaps we could hang out together, as john suggested11:41
vladkrogpeppe: may we hangout in an hour? I'm a little busy right now11:42
rogpeppevladk: sounds good11:43
rogpeppevladk: ping me when you're ready11:43
vladkrogpeppe: ok11:43
wwitzel3rogpeppe: https://codereview.appspot.com/72270044/11:47
wwitzel3rogpeppe: I made those changes we discussed yesterday11:47
rogpeppewwitzel3: looking11:47
wwitzel3rogpeppe: also I was able to replicate the error from your ticket (1271144)12:04
wwitzel3rogpeppe: but am not able to replicate it on your branch :)12:04
wwitzel3rogpeppe: it is intermitten on trunk, but I can make it happen12:04
adeuringgnuoy: doies the string where the "_" is removed start with a "-" of "+" (just to confirm that I'm on the right track)12:04
rogpeppewwitzel3: great!12:04
rogpeppewwitzel3: that's a relief12:04
wwitzel3http://paste.ubuntu.com/7084302/12:05
gnuoyadeuring, yes, it starts with a "-"12:05
adeuringgnuoy: great, thanks!12:05
gnuoynp12:06
wwitzel3rogpeppe: haha, I just looked at the diff for that fix12:08
rogpeppewwitzel3: loadsa code :-)12:11
wwitzel3rogpeppe: well for what it's worth, after the testing, LGTM12:14
rogpeppewwitzel3: you have a review12:17
bodie_o/12:18
voidspacerogpeppe: so no issues with doing test checks inside a goroutine?12:25
voidspacerogpeppe: I assume you do check rather than assert because you shouldn't assert inside a goroutine12:25
rogpeppevoidspace: Check is considered ok; Assert is not12:25
rogpeppevoidspace: yeah12:25
voidspacerogpeppe: but a check can happily add a failure whereas an Assert can't just stop12:25
voidspaceright12:25
rogpeppevoidspace: in fact it doesn't matter, but this is the party line12:26
voidspaceah, ok12:26
voidspaceit does change the semantics of the test slightly (using Check rather than Assert)12:26
voidspacein that we won't fail early12:26
voidspacebut no harm12:26
rogpeppevoidspace: yeah, but i don't think it matters12:26
voidspacerogpeppe: I'm intruiged as to how it doesn't matter12:26
sinzuidimitern, yes, as soon as the blocking bugs are fixed. I may release without the fix for cloud-init in maas, release that in 1.18.012:27
voidspacerogpeppe: if you do an assert does the test runner kill all running goroutines and terminate the test method?12:27
voidspacein fact I wonder how the test runner works at all without exceptiosn - does it use a panic?12:27
rogpeppevoidspace: check out the implementation of Assert12:27
rogpeppevoidspace: it calls runtime.Goexit12:27
voidspacerogpeppe: interesting12:28
rogpeppevoidspace: which is kinda like a panic12:28
rogpeppevoidspace: except that it doesn't actually panic12:28
voidspaceheh12:28
voidspaceis it "magic" implemented by the compiler, or does it use standard go mechanisms?12:28
rogpeppevoidspace: but if we used Assert, it wouldn't stop any of the other goroutines involved in the test12:29
voidspaceright12:29
rogpeppevoidspace: runtime.Goexit is magic12:29
rogpeppevoidspace: as is everything in the runtime package12:29
voidspaceheh12:29
voidspaceok, well maybe fair enough then12:29
voidspaceit's "exposed magic"12:29
voidspacerogpeppe: so your suggested code to avoid using the channel directly when testing the batching of calls12:30
voidspacerogpeppe: spins up two goroutines and uses a WaitGroup12:31
rogpeppevoidspace: yes12:31
voidspacerogpeppe: but in the final assertion we're depending on the order of those calls12:31
rogpeppevoidspace: ah, interesting12:31
voidspacerogpeppe: which is strictly incorrect now I guess12:31
rogpeppevoidspace: yeah12:31
rogpeppevoidspace: you could sort 'em12:31
voidspacerogpeppe: sounds good12:31
voidspaceor use a set12:31
voidspacewhat's the set type?12:31
mgzwouldn't sets be nice12:32
voidspacehah12:32
rogpeppevoidspace: sorting's probably a little easier12:32
bodie_anyone have feeling on whether cobzr should be used?  I'm new to working on launchpad stuff...12:32
voidspaceand you can't use mappings with keys of arbitrary types, so you can't easily simulate them12:32
bodie_Git kid12:32
mgzbodie_: I say no12:32
mgzbut you do need some alternative setup to make go happy with its layout quirks12:33
bodie_happy little quirks12:33
bodie_taking the bob ross approach today12:33
* rogpeppe quirks happily12:33
voidspacequirk as a verb12:34
voidspacewhat fun12:34
bodie_these kids these days with their selfies and their "quirking"12:34
rogpeppevoidspace: the other possibility is just to avoid asserting on the ids passed to Instances12:34
voidspacerogpeppe: that's the assert that the calls were batched12:34
voidspacerogpeppe: so I'd rather leave it in...12:34
voidspacerogpeppe: I could just assert that the length is two12:35
voidspacerogpeppe: as that's what we care about12:35
rogpeppevoidspace: you know that the right results have come back, so the right info has flowed through to instances; all you really care about is the number of calls to Instances (and the number of ids in those calls)12:35
rogpeppevoidspace: yeah12:35
voidspacerogpeppe: right, so the length of testGetter.ids is the relevant part12:35
rogpeppevoidspace: yeah12:35
mgz# launchpad.net/juju-core/state/apiserver/keymanager_test12:40
mgzstate/apiserver/keymanager/keymanager_test.go:20: inconsistent definition for type gocheck.C during import12:40
mgzI guess that's some version skew issue...12:40
mgzI should godepitup12:40
voidspaceoh yeah, if I restart the vm then my ssh sessions die too...12:41
jammgz: can you help me track down a bug I just ran into ?12:51
jamhttps://bugs.launchpad.net/juju-core/+bug/129196712:51
_mup_Bug #1291967: cannot destroy-environment with 1.17.4 of a trunk bootstrapped env "ftp-proxy" <regression> <juju-core:Triaged> <https://launchpad.net/bugs/1291967>12:51
jamI think this is from thumper's changes12:51
jamhe added some new fields, that end up being the empty string, and 1.17.4 says that is a broken environment, and prevents be from destroying it.12:51
jamIn *itself* we don't have to be compatible with 1.17.4, but I don't want us to end up where in 1.18.0 will refuse to destroy an 1.18.1 environment.12:52
mgzjam: ugh, that looks bad12:52
jammgz: you can ignore the Panic() I got, because I think it *might* be unrelated, but handling "empty strings treated as invalid config" is bad.12:53
jamI thought I saw something from axw about "allow unknown fields"12:53
jammgz: I just don't have time to finish tracking it down.12:53
jammgz: for extra fun times, everytime I run "juju destroy-environment" it lists a different key as being invalid.12:54
jam(hash map ordering? )12:54
mgzokay, I'll see if I can repo12:57
jammgz: thanks  "go install launchpad.net/juju-core/..."; ~/dev/go/bin/juju bootstrap -e local; /usr/bin/juju destroy-environment local12:58
jammgz: reproduces it here, FWIW12:58
fwereademgz, jam: you are wonderful, I was just coming to undirectedly complain about exactly that12:58
mgzfwereade: have I ever said how much I love config?12:59
fwereademgz, *everybody* loves config</deadpan>12:59
jammgz, fwereade: it might also be something waigani was working on, but I don't see it in +activereviews or the recent commits to trunk13:03
rogpeppemgz: i was looking at your comment on this review. https://codereview.appspot.com/72230045/13:03
mgzrogpeppe: looking13:03
rogpeppemgz: i wondered if you'd be able to join a hangout to talk about it13:04
rogpeppemgz: as there are a few issues that i'm not sure about13:04
mgzrogpeppe: minially, you can just copy the extra arg junk from the other file13:04
rogpeppemgz: that doesn't solve the target-release issue though13:05
rogpeppemgz: which is a little more tricky13:05
mgzrogpeppe: do you use your canonical account fro hangouts or the other one?13:08
rogpeppemgz: either. in the current one i'm using canonical13:08
mgzdialin'13:08
wwitzel3rogpeppe: https://codereview.appspot.com/72270044/13:08
rogpeppehttps://plus.google.com/hangouts/_/7acpjqgade93ubac2gple0elsc?authuser=1&hl=en13:08
rogpeppemgz: ^13:08
mgzthat's non-pasteable for me, can you invite me?13:09
rogpeppemgz: it might work if you change authuser=1 to authuser=013:10
mgzrogpeppe: as in, it's a pain to type out a url that long13:10
rogpeppemgz: ok, np13:10
mgzubuntu on arm doesn't do hangouts13:10
rogpeppemgz: one mo13:10
rogpeppemgz: https://plus.google.com/hangouts/_/canonical.com/juju-core?authuser=113:11
rogpeppemgz: that's the standup hangout13:11
jamrogpeppe: mgz's IRC machine is a different machine than his Google Hangout machine13:11
rogpeppei couldn't work out how to invite people :-)13:11
rogpeppemgz: https://codereview.appspot.com/72270044/13:15
natefinchrogpeppe: I figured out some of the problems I was having with bootstrapping, which then let me actually test my code, and now I realize there's a problem... the bootstrap command on the bootstrap node tries to connect to state before it starts the machine agent, and since the machine agent is now the one starting mongod, things don't work.13:24
rogpeppewwitzel3: are you around to join a hangout?13:25
fwereadenatefinch, the machine agent can handle starting up with mongod already there, though, right?13:25
marcoceppiwhy are we depricating the -e flag for destroy-environment?13:25
wwitzel3rogpeppe: yep13:25
rogpeppemarcoceppi: an excellent question :-)13:25
rogpeppewwitzel3: https://plus.google.com/hangouts/_/canonical.com/juju-core13:25
fwereadenatefinch, it *should* just be a matter of doing it in bootstrap as well, right?13:25
natefinchfwereade: yeah, we can do it there, too, that's a good point13:26
marcoceppirogpeppe: just got a warning about using destroy-environment with the -e flag13:27
natefinchmarcoceppi, rogpeppe: I don't think we need to deprecate the flag, it's just optional13:27
marcoceppialso, rogpeppe juju bootstrap doesn't take a positional environemtn, it's like the only one that does13:27
natefinchmarcoceppi, rogpeppe: what's not optional is the environment name13:27
marcoceppinatefinch: I'll file a bug about the user wraning then13:27
bodie_What is the point of this line in addmachine_test.go?  it seems redundant13:43
bodie_http://paste.ubuntu.com/7084701/13:43
voidspaceI assume that the following does ten iterations13:43
voidspacefor i := 0; i < 10; i++ {13:43
voidspaceand not 913:43
natefinchvoidspace: yes. Just like in every other language :)13:45
voidspacenatefinch: I normally use languages with less opaque loop syntax ;-)13:45
natefinchvoidspace: I thought you did .Net stuff?  isn't that the exact same syntax?13:46
voidspacenatefinch: that was about six years ago!13:46
voidspacebut yes13:46
natefinchvoidspace: ahh13:46
natefinchvoidspace: I went C -> C++ -> C#, so it's the exact same syntax I've used since I started programming13:46
voidspacemaybe only five13:46
bodie_today I learned: for loop is opaque13:46
bodie_kids these days13:47
voidspaceif you weren't a programmer, what would this mean: "for i := 0; i < 10; i++"13:47
bodie_find a programmer13:47
bodie_:D13:47
voidspace"for i in range(10)" I reckon even my non-programmer friends could hazard a guess...13:47
bodie_hmm, good point13:47
natefinchbodie_: the thing I think is funny is the people complaining about having to write 3 line loops instead of having some magic one liner to do the exact same thing13:47
voidspacenatefinch: well, it depends on the level of magic13:48
bodie_one line + {} = 3 lines13:48
voidspacenatefinch: I do love list comprehensions13:48
voidspacenatefinch: and Go *could* gain slice comprehensions13:49
natefinchvoidspace: very very simple ones are ok, but they tend to get abused into huge monstrosities13:49
natefinchvoidspace: line returns are not evil :)13:49
bodie_list comps are swanky, i'll give ya that13:49
voidspacenatefinch: well, no - but you can write bad code with every construct13:49
voidspacenatefinch: so I never find "but people write bad code" a very convincing argument in itself13:50
natefinchvoidspace: yes, but some constructs encourage hard to read code, and some discourage it13:50
voidspacenatefinch: and yes, I always break up large comprehensions into an explicit loop13:50
bodie_you have to admit syntax like x = [i*i for i in x] is pretty handy13:50
voidspaceloop and filter in a single expression is nice - especially that it is an expression13:50
voidspacef(x for x in y if x)13:51
bodie_I hail from the mystical land of Perl so I'm definitely a little bit twisted in the head13:51
bodie_I mean, there are ungainly list comprehensions, and then there's Perl...13:51
natefinchbodie_: your poor poor soul13:51
voidspacenatefinch: I do like that Go is small, it certainly makes it easier to learn13:51
voidspaceexcept the "you don't need to care about pointers except when you need to care about pointers"13:51
voidspaceI foxed Martin with that yesterday and I'm *pretty sure* the same code also mildly foxed Roger in his review :-)13:52
voidspacehe suggested changing a slice of pointers to a slice of "non-pointers" but I don't think we can do that because we need pointer receivers13:53
natefinchvoidspace:  the smallness of go is hugely handy.  There's no "Oh crap, let's go look up how <somekeyword> works13:54
bodie_that is something I really appreciate13:54
bodie_as a relative newcomer13:54
voidspaceI *bet* Go in five years is substantially bigger though (although not to the extent of other languages I'm sure)13:55
natefinchvoidspace: C# was well into that territory when I left.  They basically threw everything in there.  Dynamic types?  Sure!  Contracts? Sure!  Async calls?  Sure!13:55
natefinchvoidspace: I don't know... it's one of their core tenants to keep the language small13:55
voidspacenatefinch: the C# full language spec was *already* huge when I started with it in 200613:55
voidspacenatefinch: I like that they're very conservative13:55
voidspacenatefinch: but I'd stiill wager good money13:55
voidspace*still even13:55
natefinchvoidspace: it'll be bigger, I don't know about substantially bigger.  I think they're pretty happy keeping it small, and there's not a lot that's missing other than generics.  Most everything else is just syntactic sugar13:56
voidspaceyeah, when generics arrive it will be nice13:57
voidspacebut who doesn't like things just that little bit sweeter - it's *very* hard to resist the call altogether13:57
natefinchvoidspace: I don't know.... they're some pretty grumpy old unix guys.  They don't even like syntax highlighting in their editors :)13:57
voidspace:-)13:57
natefinchvoidspace: I bet we'll see a lot of improvements to the performance and behavior, a lot of improvements in tooling - they're talking about building their own debugger, because GDB isn't a good fit for Go... that's the one thing I'd love to have, is a better debugger.13:58
voidspacenatefinch: a real repl would be good too14:00
voidspaceanyway, I stand by my claim (five years is an age in programming - even going really slowly a lot can change). But we'll see.14:01
bodie_I'm not sure how I feel about a gorepl14:02
bodie_it's so trivially quick to compile and so small that it doesn't feel like I have an excuse to want one14:02
natefinchvoidspace: real repls in compiled languages are tricky.  .Net can sorta do it because it's compiled to an intermediary form, but for truly native code, it's tricky.  Being able to query values is usually enough... being able to change them is really nice, but might not be feasible14:02
voidspacenatefinch: right14:02
natefinchbodie_: it helps a lot when you're 5 minutes into a 10 minute bootstrap and something fails14:03
bodie_word14:03
voidspacenatefinch: but the support you need for a repl and the support you want for a debugger are not so different14:03
bodie_I was actually looking at the bug for lxc-clone14:03
natefinchvoidspace: true14:03
bodie_I think that would be really handy, but I'm not too sure where to start14:03
natefinchvoidspace: there are some go repls out there.... basically recompile after each line you enter, which is kind cool.  I haven't tried them, though, since it's usually pretty trivial to do the recompile yourself14:04
bodie_https://bugs.launchpad.net/juju-core/+bug/120329114:04
_mup_Bug #1203291: local provider moar awesome with lxc-clone <local-provider> <papercut> <performance> <juju-core:Triaged> <https://launchpad.net/bugs/1203291>14:04
bodie_^ that one14:04
voidspacenatefinch: yeah, although the compiler really fights against you I guess14:04
voidspacenatefinch: unused variables, unimported modules14:05
voidspacealthough all those are fixable with code transforms (automatically generate the imports and fake out the variable usage)14:05
bodie_I think that what seems finicky about Go on the surface (grumpy compiler) is actually really useful for figuring out what's wrong with my code14:05
voidspaceyeah, proper compile errors can be great14:06
natefinchthe modules thing you can get around... usually it's just fmt that comes and goes, so you can do var _ = fmt.Printf  and it'll be quiet14:06
voidspacebut they can also make exploratory coding and writing tests harder14:06
bodie_heh... emphasis on proper14:06
natefinchTHere's definitely been times when the unused variables error has shown me a bug in my code14:07
bodie_maybe a linter that runs on every update would be handy, something like what's in gosublime14:07
bodie_although the compile is already so snappy14:07
voidspacenatefinch: makes a great typo catcher14:07
bodie_you could also write a hook to build on save14:07
bodie_but again slightly too involved14:07
voidspaceflake8 does the same for Python - it's the most trivial kind of thing to catch14:08
natefinchthere's a gofmt variant that'll automatically add/remove imports14:08
voidspaceyep, rogpeppe mentioned that - sounds useful14:08
natefinchbodie_: one thing you can check out is that gofmt will only modify the code if it has proper syntax, so if you save and it doesn't gofmt, you know there's a compile error.  It doesn't catch *all* errors, but it catches many.14:08
bodie_neat :)14:11
bodie_what do you think of golint?14:11
natefinchbodie_: I haven't tried it14:11
bodie_I think it's nice14:12
natefinchoh, one more cool thing gofmt does is space out your code according to order of operations, so 5  +  7  /  2  +  8  gets formatted into 5 + 7/2 + 8  to make it more obvious what actually will happen14:12
bodie_that is cool14:12
natefinchthat also saved me a hard to find bug14:13
mgz(+ 5 (/ 7 2) 8)14:17
* natefinch scowls at mgz14:18
natefinchfwereade: of course, making bootstrap create mongo is easy.... *testing* that it does so is a PITA14:22
voidspacegc.LessThan?14:22
natefinchvoidspace: does it not exist?  If not, look for it in juju-core/testing/checkers14:24
voidspaceI was asking if it exists - I assume it does14:24
natefinchvoidspace: try it and find out :)14:24
voidspacethe compiler won't tell me because I'm making an assert on a member that I haven't yet written14:24
voidspacethe compiler will tell me in a minute14:24
voidspaceonce I fix my syntax errors!14:24
natefinchheh14:24
natefinchvoidspace: autocomplete?14:25
voidspacenatefinch: not yet14:25
voidspacehopefully at the weekend or when I get a spare hour or two I will get vim properly configured14:25
voidspaceand work out why godef isn't working properly for me14:25
voidspaceetc14:25
natefinchvoidspace: ahh, sadface.14:25
voidspacegc.LessThan does not exist the compiler tells me14:26
rogpeppe5 7 2 / + 8 +14:26
rogpeppevoidspace: it's in testing/checkers14:27
voidspacerogpeppe: checkers.LessThan ?14:27
voidspacerogpeppe: thanks, I will look anyway14:27
rogpeppevoidspace: yeah, although we usually import it as jc14:27
natefinchvoidspace: the convention is to import the package as jc (to mirror gc for gocheck)14:27
voidspacenatefinch: cool14:28
voidspacejs.Saves14:28
voidspace*jc.Saves dammit14:28
natefinchvoidspace: it's not a pointer type14:28
* natefinch ducks14:28
voidspace:-)14:29
voidspacerogpeppe: so the batch test passes14:30
voidspacerogpeppe: but I couldn't remember what type you suggested for the counter, so I just incremented an int14:30
voidspacerogpeppe: can you remind me please14:31
voidspacerogpeppe: make 100 requests, wait for them to complete14:31
voidspaceah, we probably only made 2 calls, I need a pause in between calls14:31
adeuringthedac: could you have a look at my comment in bug 1243827? I have doubt that using double underscores ever worked14:31
_mup_Bug #1243827: juju is stripping underscore from options <canonical-webops> <config> <goyaml:In Progress by adeuring> <juju-core:Invalid by adeuring> <juju-deployer:Invalid by hazmat> <https://launchpad.net/bugs/1243827>14:31
mrammcore rep on the cross team meeting?14:33
mrammfwereade: rogpeppe: dimitern: ^^^^14:34
dimiternmramm, if possible, i'd like to skip it to finish of the 2 critical bugs i'm working on14:35
thedacadeuring: hi, I orginally submitted that bug thinking it was against juju-deployer. In that context (a juju deployer config) using the doubled underscores worked. I have never tested that with juju core by itself. Also see jacekn's exampel of nagios_check_https_params: "-H 127.0.0.1 --ssl -p {https_port}" Would this include strings that begin with '-'?14:35
natefinchmramm: I can get on it if others aren't available14:36
mrammlooks like william is on it14:38
natefinchawesome14:38
voidspacelunch14:39
* voidspace lurches14:39
* rogpeppe is also lunching14:40
* natefinch reboots14:43
adeuringthedac: yes, it's about strings that start with a '+', '-' or a digit. And thanks for confirming that using double undescores in juju-deployer worked as a workaround. Seems that I need tro dig a bit deeper to avoid possible upgrade problems...14:44
* thedac nods14:45
natefinchis it bad that I want to change the font in my editor because my : and = don't line up nicely?15:03
mgznatefinch: surely having them not line up well is a feature15:06
mgzmake it stick out more15:06
TheMuenatefinch: as long as the reboot hasn't been needed due to the font change ;)15:06
natefinchbodie_: btw, about colocated branches for bzr & go... I think it's really the only sane way to code in go, but others appear to disagree with me.15:07
natefinchTheMue: haha, no, just updates15:07
natefinchmgz: I guess I can know that whenever I get that twitch in my eye, it's because I'm looking at := rather than just =15:07
mgzexactly!15:07
natefinchmgz: ironically, the non-monospaced ubuntu font (which I use in IRC) lines them up quite nicely, but the monospaced version does not15:08
natefinchmgz: I merged some changes from trunk, and forgot I had some local changes, too.  Is there any way to separate out the merge from my local changes?15:10
mgznatefinch: it's a little painful unfortunately15:11
mgzas it's a diff-on-diff operation15:11
mgztry just doing `bzr shelve` and shelving your local changes15:11
mgzthen commiting the (cleaned) merge15:12
mgz2014-03-13 15:24:42 ERROR juju runner.go:220 worker: exited "environ-provisioner": no state server machines with addresses found15:26
mgz~hm...15:26
rogpeppevoidspace: how is lbox propose failing for you? i have a few inline comments i'd like to make15:26
mgzthat's not something I wanted to see with a fresh bootstrap --upload-tools on trunk15:26
natefinchmgz: yuck15:31
rogpeppemgz: hmm, that's not good15:40
natefinchbbiab, picking up my daughter from preschool15:41
mgzrogpeppe: how should I manually restart it to see if it'll work now15:41
rogpeppemgz: manually restart what?15:41
mgzoh, it did it15:41
mgzor at least status now says started, not down15:42
rogpeppemgz: without a bit more context i'm not sure i can help15:47
mgzrogpeppe: when I first ran bootstrap just then, `juju status` reported the agent-state of machine-0 was down15:48
mgzlast line in machine-0.log was that15:48
mgzbut rechecking just then, nothing else in log, but agent-state was started15:48
rogpeppemgz: hmm, odd15:49
rogpeppemgz: i'm not entirely surprised by seeing the machine as down15:49
mgzso, presumably it got to a point where it could find its own address and the worker restarted okay15:49
rogpeppemgz: but i'd have thought there would always be an address in machine 015:49
mgzyeah15:49
mgzI'd also expect more log after it came back up...15:49
rogpeppemgz: that doesn't surprise me15:50
rogpeppemgz: the started status is mediated by the presence poller15:50
rogpeppemgz: the environ-provisioner exiting shouldn't cause the whole machine agent to go down15:51
rogpeppemgz: or even the API worker15:51
rogpeppemgz: was the "worker: exited" line the very last line in the log?15:51
mgzrogpeppe: yes15:55
voidspacerogpeppe: sorry, just seen your message15:55
voidspacerogpeppe: pastebin about to follow15:55
voidspacemaybe I just need to merge trunk again15:56
voidspaceit's the branch check that is failing15:56
rogpeppevoidspace: the branch check?15:56
voidspacerogpeppe: https://pastebin.canonical.com/106421/15:56
rogpeppemgz: usually the Runner code prints "restarting "..." in 3s" immediately after the worker: exited msg15:57
voidspacebrb15:57
rogpeppevoidspace: looks like it's found a genuine error in your code15:57
mgzrogpeppe: that's not his code, it's trunk15:58
rogpeppemgz: ah, well it's bogus anyway, and shouldn't have got through govet15:59
rogpeppemgz: i suspect whoever committed the code has disabled govet15:59
mgz2366.14.2  tim.pen |            logger.Errorf("unexpected output: ", out)15:59
mgzso, real issue, but a pre-existing one16:00
rogpeppemgz: yeah - i think tim has disabled govet16:00
rogpeppevoidspace: you'll need to fix that before proposing your branch16:00
mgzI try to disable all things containing gove16:01
rogpeppevoidspace: it should be logger.Errorf("unexpected output: %s", out)16:01
voidspacerogpeppe: I'll fix that and propose then16:02
mgzor %q arguably16:02
rogpeppemgz: +116:02
rogpeppevoidspace: ^16:02
voidspacerogpeppe: mgz yep16:02
mgzvoidspace: so, you can just `bzr switch trunk; bzr switch -b fixtim` ...edit...commit...propose...16:03
voidspacemgz: too late, I fixed in my branch and started the lbox propose already16:04
voidspacemgz: I mean, I could submit *another* branch for trunk with the same fix16:04
mgznever mind then :)16:04
voidspacethere's another bug in clonetemplate.go too16:05
voidspace*mockContainer does not implement golxc.Container (wrong type for Clone method)16:05
voidspacewho merged this...16:05
mgzbzr blame!16:05
mgzcheck you have your godeps right16:06
mgzseveral tips are not compatible with juju-core atm16:06
voidspacemgz: I haven't changed my deps16:08
voidspacemgz: aren't we pinning our deps anyway?16:08
mgzvoidspace: yes, but that requires some active work when other people change things16:08
rogpeppevoidspace: try (from the juju-core root) godeps -u *.tsv16:09
mgzvoidspace: run `godeps -u dependencies.tsv` from inside the juju-core dir16:09
voidspaceinteresting16:09
voidspacegodeps: cannot update "/home/michael/canonical/src/launchpad.net/golxc": bzr: ERROR: branch has no revision tim.penhey@canonical.com-20140311005930-b14361bwnocu3krh16:09
rogpeppevoidspace: if it fails, you'll have to manually go get -u the packages that it fails for16:09
mgzit may well complain that it doesn't... right, that16:09
rogpeppevoidspace: yeah16:09
rogpeppevoidspace: go get -u launchpad.net/golxc16:10
rogpeppevoidspace: then try again16:10
mgz`pushd ../golxc; bzr pull; popd` also works16:10
rogpeppevoidspace: blame me for not integrating pull support into godeps16:10
voidspacerogpeppe: ah... :-)16:10
voidspaceso we just pull the branch and then we can update to the required revision16:11
rogpeppevoidspace: yeah16:11
mgzyup16:11
voidspacethat may well have fixed the other issues16:11
voidspacetrying16:11
voidspacethanks guys16:11
rogpeppemgz: presumably that was a reference to a conservative MP then...16:11
* rogpeppe is very slow16:12
mgz:P16:12
voidspaceyup, working16:12
voidspacerogpeppe: CL updateed16:13
voidspace*updated even16:13
rogpeppevoidspace: that int type i was suggesting was int32 - use atomic.AddInt32 to increment it16:13
rogpeppevoidspace: cool16:13
voidspacerogpeppe: ah, thanks16:13
voidspaceI will make that change after coffee16:14
hatchHey is anyone working on an nginx charm yet ?16:19
rogpeppevoidspace: reviewed16:33
voidspacerogpeppe: I don't think we can use []instance.Instance16:33
rogpeppevoidspace: no?16:33
voidspacerogpeppe: they need to be created as pointers for the pointer receivers16:33
voidspacewe already tried it IIRC16:33
rogpeppevoidspace: i think it should work fine16:34
voidspacerogpeppe: I think it didn't :-)16:34
voidspacebut I will try again16:34
rogpeppevoidspace: you're assigning *testInstance to instance.Instance16:34
rogpeppevoidspace: so []instance.Instance{instance1} should work ok16:34
mgzrogpeppe: we need to use testInstance as instance.Instance - which requires a pointer unless I'm confused about something16:34
rogpeppevoidspace: when instance1 is a *testInstance16:34
rogpeppemgz: instance.Instance is an interface16:35
rogpeppemgz: it can hold a concrete type that's a pointer16:35
mgzright, what you said then is fine... there was something in the earlier review that was different16:35
rogpeppemgz: the only reason it might not be a great idea is if you wanted to access the results slice after creating it and avoid the dynamic type conversion16:36
mgz(or I misread)16:36
rogpeppemgz: but the code doesn't do that AFAICS16:36
voidspacerogpeppe: mgz: so it looks like it's working16:37
voidspacechanging all the uses...16:37
rogpeppevoidspace: thanks16:37
rogpeppevoidspace: kinda trivial i know, but worth doing i think16:38
natefinchinterfaces are already pointer-ish, so you almost never need a pointer to an interface16:38
voidspacenatefinch: sure, it's just the concrete types you have to worry about16:39
voidspacealthough that maybe the same...16:39
voidspacewhat I didn't know that a pointer to an "instance" (term?) of a concrete type would satisfy an Interface type requirement16:40
natefinchvoidspace: yeah..  one of the things that took some time for me to wrap my head around was pointer receivers.... what helped me was to think of the pointer to a type as being a totally separate type than the non-pointer  value16:40
voidspacenatefinch: right16:40
voidspacenatefinch: that's not the confusion in this case - we *knew* we needed a pointer to the type because of the pointer receiver16:40
natefinchvoidspace: epseically true for pointers to type fulfilling interfaces16:40
voidspacewhat we didn't know was that we could then use []Interface instead of []*ConcreteType16:40
natefinchvoidspace: ahh yeah16:41
natefinchthe way I think of it is that an interface is really just a special struct that gets automatically wrapped around a pointer to the concrete type (and in fact, that's really what they are)16:42
voidspacenatefinch: so something declared as being of type Interface will *always* be a pointer?16:43
natefinchvoidspace: an interface is a struct that holds the type and either a pointer to the value, or the value itself if the value fits in an int64  (the latter applies to pointers to concrete types)16:44
voidspacenatefinch: so, for a concrete type, to know if it's a pointer or not you need to know the struct layout in memory?16:45
natefinchvoidspace: yeah, but it doesn't actually matter if it gets a pointer to the value or not.  Methods are called on the underlying type the same way.16:46
natefinchremember that "type" in this case might be "struct" or "pointer to struct"16:46
voidspacenatefinch: does it *never* make any difference - using an Interface abstracts that away completely?16:46
voidspaceI initially want to build up a mental model of how to use the language, and I'll *then* work on a mental model of what it's doing under the hood16:47
natefinchyes, because the type you pass in has to fulfill the interface.  So calling Foo() on the interface is the same as calling Foo() on whatever you passed in.16:47
voidspacealthough I realise that the two are inextricable entwined16:47
natefinchthe only reason it matters that an interface might hold a pointer to your type is that you then know that passing around an interfacve is cheap, since it's just passing a few bytes of data, even if the underlying type is huge16:48
voidspaceright16:48
voidspacethe classic difference between value and reference types16:49
voidspaceso an interface is always a reference type16:49
hazmatfwereade, did you want to talk about permission denied16:49
hazmatfwereade, i added some additional info to the bug report16:49
fwereadehazmat, possibly, I'm trying to repro now, I'll take another look at the bug report16:49
natefinchvoidspace: yeah16:49
natefinchvoidspace: same with maps, slices, and channels16:50
voidspaceright16:50
voidspaceinteresting16:50
voidspacebut not arrays16:50
voidspacewhere you can't even take a pointer to it, right?16:50
fwereadehazmat, I see nothing new in https://bugs.launchpad.net/juju-core/+bug/1279018 or https://bugs.launchpad.net/juju-core/+bug/123968116:51
_mup_Bug #1279018: relation-departed hook does not surface the departing relation-data to related units <landscape> <relations> <juju-core:Triaged> <https://launchpad.net/bugs/1279018>16:51
_mup_Bug #1239681: relation-get failing with 'permission denied' <landscape> <regression> <juju-core:Triaged by fwereade> <postgresql (Juju Charms Collection):Triaged> <https://launchpad.net/bugs/1239681>16:51
natefincharrays are just sequential memory, so when you copy them you copy the whole dang thing.   You can get a pointer to an array, that's how slices work behind the scenes.16:51
hazmatfwereade, the pastebin link from 3/516:51
hazmatfwereade, http://paste.ubuntu.com/7041709/16:51
fwereadehazmat, ah, sorry, I saw that earlier16:51
natefinchvoidspace: the number of times I've had to interact with arrays in over a year of programming in Go is exactly zero, though.16:51
voidspacenatefinch: hah, cool16:52
hazmatfwereade, i was debugging with them via irc in debug-hooks.. all 1.17.5.. could do relation-ids, see all the rel data minus the problematic one.16:52
natefinchvoidspace: one of the things I like about go is that the memory model is very easy to understand.  It's easy to know how big a struct is, so you can know how much memory you're using, what it costs to pass around, etc.  And yet, it doesn't interfere with actually *using* the language.16:54
voidspacenatefinch: that's good to hear16:54
fwereadehazmat, I will keep trying to repro and come crying to you if I can't -- what I currently see is old relation settings still accessible despite that relation not even being in relation-list (as expected, because departing)16:56
hazmatfwereade, i'm trying to get the partner to publish their charms as they've got very reproducible issue there.. alternatively i guess i can write some charms to help.. landscape team was also running into this issue16:57
hazmatfwereade, i think you mean s/relation-list/relation-ids /16:57
voidspacemramm: do we have any open positions at the moment? I know a superlative candidate...16:57
* rogpeppe pores over a 167MB log file, looking for the needle16:57
fwereadehazmat, I meant to say "unit not even being in relation-list"16:58
natefinchvoidspace: pretty sure we still have open spots16:58
fwereadehazmat, if the *relation* is not in relation-*ids* that's interesting16:58
hazmatfwereade, the relation id is in relation-ids.. the issue is just relation-get against it16:59
fwereadehazmat, it's always relation-get against a specific unit as well though16:59
hazmatfwereade, note ... this isn't failing accessing remote units.. but self unit16:59
hazmatafaics17:00
hazmatalthough the ls bug was specifically against remote units17:00
fwereadehazmat, *self* I had not spotted -- that paste didn't seem to be accessing self specifically17:01
fwereadehazmat, I don't actually see any self accesses there...17:02
hazmathmm.. i guess not17:02
rogpeppevoidspace: when you do feel you want a better handle on what's going under the surface (i find it's very useful for understanding operation costs), these two articles are great: http://research.swtch.com/godata http://research.swtch.com/interfaces17:02
voidspacerogpeppe: cool, will bookmark17:02
hazmatfwereade, i'll see if i can come up with something self-contained to reproduce tomorrow.17:03
natefinchrogpeppe: thanks, I'm sure he explains it better than me :)17:04
fwereadehazmat, still failing to repro... have done everything I can think of to trigger it in both peer and pro/req relations... if you can find something that would be great17:08
wwitzel3is there any known issues with the machineconfig tests? I'm getting a bunch of timeout debug messages and then a PANIC during TearDownTest17:09
wwitzel3http://paste.ubuntu.com/7085765/17:11
natefinchwwitzel3: the known issues are that sometimes it does that.  At least, that's one of the known issues.  For some people it works fine, for some people (like me) it fails all the time.17:15
wwitzel3natefinch: great17:15
natefinchwwitzel3: which is ironic, because I wrote most of those tests :/17:15
wwitzel3natefinch: must be an timezone thing17:15
wwitzel3:P17:15
wwitzel3natefinch: I deleted all of my gocheck folders in /tmp and it passed for me17:18
voidspacerogpeppe: can you look at this and see if you think it's acceptable17:19
voidspacehttps://pastebin.canonical.com/106435/17:19
voidspacerogpeppe: I left the GreaterThan assert in, otherwise doing it all in one call would pass - we expect a minimum of 11 calls17:19
natefinchwwitzel3: interesting17:20
rogpeppevoidspace: thinking17:20
rogpeppevoidspace: with some really weird scheduling decisions, i could see that it might possibly give less than 11 calls, but i think it's probably safe to assume that won't happen17:23
voidspacerogpeppe: you mean if the code blocks inside the call to Instances so that more than ten requests queue up17:23
rogpeppevoidspace: yeah17:24
voidspacerogpeppe: right, I'd be inclined to leave it in the test and just bump it down if it's flaky17:24
rogpeppevoidspace: sgtm17:24
voidspacecoolio17:24
mrammvoidspace: we do17:30
mramm6+3 open positions on core and JAAS teams17:30
mrammso plenty ;)17:31
voidspacemramm: can you send me links to the core ones and I'll send excellent candidates your way17:31
voidspacemramm: or are they easy to deduce from talebo?17:31
voidspaceif they're marked juju-core I'll find them17:31
mrammshould be easy do deduce17:31
mrammbut I'll find them quick17:31
wwitzel3mgz: https://codereview.appspot.com/72270044/17:31
mgzwwitzel3: thanks17:32
mrammhttps://ch.tbe.taleo.net/CH03/ats/careers/requisition.jsp?org=CANONICAL&cws=1&rid=74317:32
voidspacemramm: thanks17:33
mrammshoot me an e-mail too17:33
voidspacemramm: coolio17:35
voidspacewill promote wildly on twitter just for the hell of it17:35
voidspacemramm: I'll only email you about people I actually know though, the rest can just apply normally17:36
mrammvoidspace: cool, thanks17:36
mgzmramm: did you do another round of travel approval approving?17:37
mrammmgz: not yet17:37
* mgz patientlies17:38
wwitzel3mgz: you want to hangout while you review that?17:42
wwitzel3mgz: so you can point and laugh at me in real time17:42
mgzsure17:43
natefinchI need a way to filter my contacts on linked in by people who *haven't* started a new job in the last 8 months.... because that would filter out like 90% of my contacts17:56
bodie_yeah, the job market is a massive game of musical chairs right now, it seems like17:58
dstroppafwereade: when I bootstrap with --upload-tools I get the same error as in the tests. I I force to get to tools .tgz file from streams.canonical.com then I get passed that point18:03
dstroppafwereade: so it looks like it something with the uploaded tools18:03
bodie_I think I'm doing something wrong here, I ran go test launchpad.net/juju-core and it completed in 0.002s18:07
bodie_is there some other way I'm supposed to do this?18:07
bodie_I'm pretty new to the ecosystem18:07
natefinchbodie_: go test ./...18:08
bodie_thanks18:08
natefinchbodie_: go test either tests the package in this directory, or takes the path of a package, where ... is a wildcard that matches everything.  Basically that will just run tests in this directory and all subdirectories18:09
natefinchbodie_: that's 99% of the use I've had for it, but in theory you can do like .../foo/... and test everything with /foo/ in the path18:11
wwitzel3natefinch: https://codereview.appspot.com/72270044/ when you get a chance :)18:13
bodie_natefinch, thanks for the info :)18:14
natefinchbodie_: welcome.  Works for go build, too18:16
natefinchwwitzel3: ok18:17
dstroppafwereade: also updated bug #128580318:18
_mup_Bug #1285803: [Joyent Provider] metadata mismatch when testing again Joyent Public Cloud <joyent-provider> <test-failure> <juju-core:Triaged> <https://launchpad.net/bugs/1285803>18:18
rogpeppevoidspace: ready to land with one tiny fix18:27
bodie_I guess I need to have a juju stateservice running to run tests, right?18:27
natefinchbodie_: go test does everything it needs to run tests, no external actions needed18:28
bodie_hm18:28
natefinchgood lord we have a lot of files called bootstrap.go :/18:29
jcastrodoes anyone know where kvm support is documented?18:32
jcastroI'm not finding it in `juju help deploy`18:32
* Makyo is away: Lunch18:33
natefinchjcastro: juju help add-machine has lxc, but interestingly says we don't support other containers18:34
natefinchjcastro: juju help constraints mentions the container constraint18:34
natefinch(and kvm)18:34
natefinchjcastro: seems like we should have a juju help containers18:35
voidspacerogpeppe: awesome, thanks18:35
rogpeppevoidspace: thanks for bearing with me :-)18:35
jcastrook, and if someone has an existing KVM infrastructure they would just use the manual provider right?18:35
voidspacerogpeppe: I've learned a lot18:36
voidspacerogpeppe: most of which was even useful ;-)18:36
rogpeppevoidspace: ha ha :-)18:36
voidspace:-)18:36
voidspacerogpeppe: I did wonder about that assignment18:37
natefinchjcastro: yeah18:37
voidspacerogpeppe: but I saw the function returned something and I followed the append pattern18:37
rogpeppevoidspace: ah yes18:37
voidspacebut I wondered how it could still be threadsafe :-)18:37
rogpeppevoidspace: append is definitely not atomic18:37
voidspaceright18:37
voidspacethis must be atomic though18:37
voidspaceit says so :-)18:37
voidspacerogpeppe: anyway, fixing and then I'll approve the branch18:37
rogpeppevoidspace: the documentation is quite clear BTW (see the start of the sync/atomic package)18:38
voidspacerogpeppe: I'm a bloke18:38
voidspaceI don't read the instructions unless I *really* need to ;-)18:38
rogpeppevoidspace: luckily it's blokish documentation18:39
voidspacehehe18:39
voidspacemaybe not ideal for the future diversity of the programming pool though18:39
natefinchjcastro: I made a bug for the add-machine documentation error18:39
* Makyo is back (gone 00:07:43)18:40
jcastronatefinch, I filed one for KVM doc in general18:41
jcastroand mentioned your recommendation18:41
natefinchjcastro: good, someone will get a two-fer when they make the doc fixes then :)18:43
* rogpeppe has to finish now18:47
rogpeppestill not succeeded in finding out what's going on with these mongo servers. currently suspecting a bug in mgo, but we will see.18:47
rogpeppeg'night all18:47
evis it possible to tell juju about an apt proxy? Cloud init lets you, but it doesn't seem possible to pass that through.18:47
evhm, probably should've used #juju for that. Soz. Heading there.18:48
jcastroyes, you can define one in environments.yaml18:48
jcastrolet me see if I can find it18:48
jcastro"If the machine you are bootstrapping on uses the apt proxy, we18:49
jcastromagically sniff those settings and pass them to the environment via18:49
jcastrocloud init."18:49
bodie_can someone help me break down what's going on here?  http://paste.ubuntu.com/7086357/19:00
bodie_(could this be caused by running my own instance of mongo?)19:01
natefinchbodie_: you running mongo shouldn't affect it.  The test takes that into account and used custom directories and ports.  However, it is a pretty flaky test.  some people have had luck cleaning out their /tmp directory and retrying, though I don't know if there's actual cause and effect there19:02
* bodie_ sets up cargo altar19:02
bodie_hmm, looks like that might have an effect actually19:03
bodie_removed directory: ‘/tmp/test-mgo959273350’ ...19:03
natefinchbodie_: that may be more of a symptom than a cause, but cleaning it up is a good thing19:03
bodie_hrm19:05
bodie_[LOG] 0:00.026 INFO juju mongod: error command line: unknown option sslOnNormalPorts19:10
bodie_normal?19:10
natefinchbodie_: ahh, no.  That means you're not using a version of mongo that supports SSL19:11
bodie_maybe that means I don't have ssl enabled mongo?  but I thought it uses its own mongo19:11
bodie_well that's annoying19:11
natefinchbodie_: only if you have the special juju mongo installed19:11
natefinchbodie_: I think if you install juju-local from the ppa, it installs the correct mongo19:12
bodie_I see19:12
bodie_d'you know if there's a way to retrieve that mongo somehow?19:12
bodie_I was just going to build from source...19:12
natefinchbodie_: building from source also works, that's what I did19:13
natefinchbodie_: http://www.mongodb.org/about/tutorial/build-mongodb-on-linux/    this link is mostly right... there were some minor inconsistencies and unclear things, and I swear I wrote them up somewhere, but now I can't find them19:18
bodie_seems to be working ok for me :) we'll see if this build chokes19:18
natefinchcool19:21
voidspaceEOD folks19:46
voidspaceg'night19:46
bodie_nite19:46
bodie_so let's say I push to my new remote branch and my friend wants to check out my commit19:48
bodie_using bazaar .... how would I figure that out19:49
bodie_sorry for the n00b questions here19:49
hazmatfwereade, so the other possibility is that your working against an assumption that the charms are doing correct things, when perhaps they are not19:49
natefinchbodie_: bzr branch <your branch> <local_dir>19:50
bodie_right, let's say I push that to the remote19:50
bodie_can I have my buddy check out my branch?19:51
natefinchbodie_: yeah, anyone can check out any branch, they just won't be able to push back up to your branch19:51
bodie_nice!19:51
bodie_do you know if there's a way to create a shared branch?19:51
natefinchbodie_: the joys of a distributed version control system19:52
bodie_heh... yes, that's what I'm trying to get at19:52
bodie_oh, so you have access to all the branches by default once they're pushed19:52
bodie_all right, I think I get that19:52
natefinchbodie_: probably you can make one, but there's rarely a reason to, and I don't know how  (I'm actually pretty new to bazaar myself)19:52
bodie_ah, well all extra lift is appreciated :)19:53
natefinchman I hate forgetting to use --upload-tools.  I wish there was a way to like permanently turn that on20:11
wwitzel3natefinch: function juju-bootstrap() { juju bootstrap "$@" --upload-tools ;}20:14
thumperhaha20:14
wwitzel3natefinch: also ping on that review I'd like to be done with bug #1289316 so we can actually pair tomorrow (I know you're lookin forward to me slowing you down).20:16
_mup_Bug #1289316: lxc not installed from ubuntu-cloud.archive on precise <lxc> <maas> <precise> <regression> <juju-core:In Progress by wwitzel3> <https://launchpad.net/bugs/1289316>20:16
natefinchwwitzel3: yeah, working on it. I'll see if I can finish it up.  Just struggling with my own demons here.20:16
wwitzel3natefinch: I can be a rubber duck if you need20:18
natefinchwwitzel3: thanks, but it's really more of a matter of not doing stupid stuff like forgetting --upload-tools :)20:18
wwitzel3natefinch: ahh well I already helped with that one ;D20:20
natefinchwwitzel3: haha yeah20:20
natefinchwwitzel3: sorry, I don't mean to be a sourpuss :)20:24
wwitzel3natefinch: np, you're good20:30
natefinchEOD for me21:00
wwitzel3natefinch: later21:01
natefinchwwitzel3: see you later. We'll pair tomorrow. Maybe you'll see what I'm missing ;)21:01
bodie_still struggling to hurdle these build errors21:10
bodie_it's the azure provider21:10
bodie_is there a revision where it's not broken, or something?  or can I lend a hand to get it working?21:10
bodie_http://paste.ubuntu.com/7086950/21:11
thumperbodie_: possible that you don't have up to date dependencies21:11
bodie_i'm on r241621:11
bodie_hm21:11
* thumper now looks at the actual error21:11
thumperbodie_: possible your gwacl is either too old or too new :-)21:12
thumperthere is a file 'dependencies.tsv' that lists the deps21:12
thumperwallyworld_: got a minute?21:12
thumperwallyworld_: hangout?21:12
wallyworld_ok21:12
bodie_I see -- do you know if there are plans to integrate the DO provider into the source tree? (when you're finished there)21:13
bodie_(or if anyone else has input)21:13
wallyworld_thumper: you got a url for me?21:14
thumperbodie_: possible, but not a priority right now21:14
thumperwallyworld_: just getting it21:15
* wallyworld_ taps fingers impatiently21:15
thumperwallyworld_: geez, sorry... https://plus.google.com/hangouts/_/76cpid01ju5bni12d56tdh441c?hl=en21:15
* wallyworld_ was trolling21:15
waiganithumper: checkers branch is already merged22:34
thumperwaigani: but you didn't remove juju-core/testing/checkers22:34
waiganiah22:35
thumpero/ DarrenS22:39
waiganithumper: should all other instances of "launchpad.net/juju-core/testing/testbase" be replaced with "github.com/juju/testing" - instances not using LoggingSuite that is22:39
thumperoops22:39
thumpertab fail22:39
thumpero/ davecheney22:39
thumperwaigani: no22:39
thumpernot yet22:39
thumperthere are some things that need changing22:39
thumperit isn't that trivial22:39
waiganithumper: hangout?22:39
thumperum... if we can keep it quick22:40
waiganiyep22:40
thumperhttps://plus.google.com/hangouts/_/76cpjj9kf8th4q7frgnv40r7mc?hl=en22:40
wallyworldfwereade: thanks for looking at my branch. the embedded interface in httpHandler is because httpHandler itself is an embedded struct and the containing struct provides the interface implementation. and Go doesn't have abstract methods :-( I added a comment22:49
fwereadewallyworld, LGTM22:56
wallyworldfwereade: awesome, thanks22:56
fwereadewaigani, I LGTMed https://code.launchpad.net/~waigani/juju-core/change-ConfigValidator-cfg-obj-to-type-string/+merge/208983 a week ago, you might not have noticed?22:58
waiganifwereade: yep, I saw that thanks. Since then I've dug a whole for myself with this monster of a branch: https://codereview.appspot.com/70190050/23:00
waiganifwereade: I'm learning the hard way why is important to have small branches.23:01
fwereadewaigani, yeah, it's one of those things that only really becomes clear the hard way23:02
waiganiheh23:02
waigani*hole23:02
wallyworldthumper: are you able to look at bug 1291207 (critical for 1.17.5) so i can start on the ppc work?23:21
_mup_Bug #1291207: juju-run symlink is broken after upgrade-juju <run> <upgrade-juju> <juju-core:Triaged by wallyworld> <https://launchpad.net/bugs/1291207>23:21
davecheneygz: u there ?23:32
davecheneymgz_: u there ?23:32

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