/srv/irclogs.ubuntu.com/2014/09/04/#juju-dev.txt

menn0davecheney: see cmd/jujud/agent_test.go:34700:00
davecheneywhy is it writing out a file00:01
davecheneyjust to start a mock api server ?00:01
menn0the jujud tests often fire up real machines00:01
* davecheney puts head in hands00:01
* davecheney starts to sob00:02
menn0I'm just the messenger man :)00:02
menn0davecheney: what we should probably do is use a port of 0 in the config, let the API server get a port itself and then find out what it was and use that for client connections00:03
menn0(as long as we have tests that fire up real API servers)00:04
menn0no idea how hard that will actually be in practice00:04
menn0davecheney: getting back to your earlier point about two tests getting the same port... what about any other processes on the host? we're not just competing for ports against our own tests here.00:07
menn0davecheney: also, you may be right about Close() leaving the port unavailable for a short time afterwards. I think I've seen that before even with SO_REUSEADDR being used (which it is).00:08
davecheneyit's just a fragile pattenr00:08
menn0davecheney: but... given that the apiserver retries the listen I don't think that's what's happening here00:09
menn0davecheney: agreed. the pattern sucks.00:09
menn0davecheney: we either need to expect and handle "socket already in use" or use port 0 when setting up the actual server (where possible)00:10
menn0davecheney: shall I update the ticket with some of what we've discussed?00:13
davecheneysure00:14
hatchhey all - none of the mysql charms (precise/trusty) will deploy 1.20.6-trusty-amd6400:26
hatchwhere should I be filing this bug?00:26
sinzuiwallyworld__, thumper cross your eyes and toes and hope for a Heisenbug I am retesting dimitern's commit to add better logging. CI has 2  test to complete to pass master tip. Dare I say that the commit to add logging decreased the chances of the bug re-occuring00:27
wallyworld__oh dear00:28
hatchlazyPower: marcoceppi you guys look like the last people to modify the mysql charms?00:28
sinzuihatch, did you try hp and aws? hp required more mem because the charm does bogus steps are setup00:28
hatchI'm on aws now on a 1.7GB ram00:29
sinzuiyeah, that is too low00:29
sinzuihatch, 2G seems to be what the charm needs. QA learned that last year with juju 1.1400:30
sinzuihatch, on hp the charm needs 4G00:30
hatchsinzui:  that doesn't seem like the real issue https://gist.github.com/hatched/cff0bc4929b3b3201bd900:30
sinzuihatch, I am just repeating my experience with that charm in clouds with juju 1.14..1.18. It just doesn't run in under 2G anyware reliably00:31
hatchok I can try to spin up a bigger one....I've never done that in the GUI...hmm00:31
hatchsinzui: so is it just the charm that requires so much? Or mysql?00:33
sinzuiwallyworld__, 1 test to go...00:33
wallyworld__sinzui: maybe i forgot - what's the agreed method to tells devs that ci is blocked? the #juju-dev topic?00:34
sinzuihatch, mysql can be configure to be greedy and fast, or modest and slow...the charm tuned mysql to need to much at the start00:34
sinzuiwallyworld__, I have been using the topic00:34
wallyworld__sinzui: ok, could we make the text then reflect that these are the critical bugs blocking ci? since not all criticals do00:35
sinzuiwallyworld__, and I haven't updated the topic since this morning.00:35
wallyworld__s/Open critical bugs/Critical bugs blocking CI00:35
sinzuiwallyworld__, lets be honest, critical means do this now.00:36
sinzuiwallyworld__, now we get to talk about what to do now00:36
wallyworld__yes, but not all devs need to care abut all criticals, but they do need to know if CI is blocked00:36
sinzuiwallyworld__, in a few minutes http://reports.vapour.ws/releases is going to list build 1785 of master 5ecf58fb as blessed. The only change is the api name changes and logging00:38
hatchsinzui: even using a massive instance i get the same error, looks like the mysql charms are just busted on ec2 and lxc00:39
wallyworld__sinzui: that sucks in a way, shows just how fragile our tests are :-(00:39
sinzuiwallyworld__, We can demote the remaining bugs to high, opening master to mass landings00:39
wallyworld__that will make thumper happy00:40
hatchnow where do I file bugs....man this must be super frustrating for new users, finding where the real source is, then trying to find somewhere to file bugs00:40
=== ChanServ changed the topic of #juju-dev to: https://juju.ubuntu.com | On-call reviewer: see calendar | Blocking bugs: None
sinzuiwallyworld__, http://reports.vapour.ws/releases/178500:43
wallyworld__o/00:44
wallyworld__\o/00:44
* wallyworld__ merges katco's harvesting mode branch00:45
sinzuiwallyworld__, I think abentley can release 1.20.7 tomorrow while I prep for 1.21-alpha1 for the day after00:46
wallyworld__sounds good00:46
wallyworld__and 1.20.8 next week sometime00:46
hatchsinzui: so....do you have any idea where I'm supposed to file bugs? Best I can come up with is https://bugs.launchpad.net/charms/trusty/+source/mysql but I'm pretty sure that's not the real repository00:47
wallyworld__axw: you online?00:48
axwwallyworld__: I am00:49
axwgood morning00:49
wallyworld__morning :-)00:49
axwhooray, CI is happy again00:50
axwhum00:50
wallyworld__axw: with the branch to mock out the provisioner api call - there's code to do that for uniter and usermanager facades (but duplicated). can we look to set up some common, shared code to do this?00:50
axwwallyworld__: not sure it's worth it, it still requires in-package code because of the need to access private field00:51
axws00:51
wallyworld__fair enough. perhaps then we should make sure all the implementatons are the same00:52
axwI looked at the usermanager one and wasn't keen on it, I'll take a look at the uniter one00:53
wallyworld__it's pretty much the same00:53
wallyworld__whatever we decide, i think consistency is best00:54
axwspose so. I'll take another shot00:55
menn0sinzui, wallyworld__ : I've updated bug 1364410 with some more details based on a discussion davecheney and I had earlier. We don't think it's PPC related.00:59
mupBug #1364410: Timeout TestManageEnviron MachineSuite in ppc64el <ci> <intermittent-failure> <regression> <juju-core:Triaged> <https://launchpad.net/bugs/1364410>00:59
wallyworld__menn0: i would be surprised if it were00:59
wallyworld__menn0: i like option 1 as well. i wonder why the fark we didn't implement it that way to start with :-(01:01
menn0wallyworld__, sinzui: tags and title updated01:01
menn0wallyworld__: possibly because it's hard to pull the port out of the depths of the API server01:01
wallyworld__menn0: well, that's something that should have been considered in the design01:02
menn0wallyworld__: and possibly because it makes managing the API server configuration more difficult01:02
wallyworld__IMO01:02
menn0wallyworld__: agreed01:02
sinzuihatch, That is the real location of the bug tracker, and this shows the recommended and user branches that were converted to charms https://code.launchpad.net/charms/trusty/+source/mysql01:04
wallyworld__menn0: sometimes a just despair of how stuff has been written without concurrency in mind. i mean, the port issue should have been clearly raising alarm bells when the code was developed01:05
wallyworld__s/a/I01:05
hatchsinzui:  yeah found it I filed a bug https://bugs.launchpad.net/charms/+source/mysql/+bug/136520501:06
mupBug #1365205: Charm cannot be deployed, fails on install hook with gpg error <mysql (Juju Charms Collection):New> <https://launchpad.net/bugs/1365205>01:06
menn0wallyworld__: the docstring for FindTCPPort even mentions that there is a race but that the probility of an actual problem should "hopefully" be small01:08
menn0wallyworld__: that didn't work out :)01:08
* wallyworld__ cries on the inside01:08
wallyworld__ffs01:08
axwmenn0 wallyworld__: not sure if it's helpful or not, but I changed apiserver not too long ago to take a net.Listener as an arg, for the purpose of getting its port01:14
axwi.e. listen on port 0, get the port, then pass the listener to api server01:14
wallyworld__hmmmm, that may be useful indeed01:14
menn0axw: that sounds pretty helpful01:15
menn0axw: the problem is the config is generated and then the server is started later... and I think that config is also used for establishing client connections01:16
menn0so there will be a bit of faff to get the port actually used by the API server to where it's needed to allow clients to connect01:18
axwmenn0: so I see. yuck01:18
axwmenn0: one option is to store a net.Listener there (in primeStateAgent), then override net.Listen so that it returns that listener01:20
axwa bit horrible maybe01:20
menn0axw: yeah a bit... but at least it stops the tests breaking every now again01:22
thumperwallyworld__, sinzui: there is a race condition in our tests...01:30
thumperno surprise there01:30
thumperbut the location is interesting01:30
wallyworld__a??01:30
wallyworld__several01:30
wallyworld__many01:30
wallyworld__lots01:30
thumperwe open a port (:0) to figure out which port to use for mongo01:30
thumperwe then close it01:30
thumperand pass it to mongo01:30
thumperand mongo uses it01:30
thumpersometimes it isn't fully closed before mongo tries01:31
thumperwe could add a retry thingy01:31
thumperaround mongo01:31
thumperchecking for "port in use"01:31
thumperjust a few times01:31
thumpershould reduce the chance of it happening01:31
wallyworld__we could01:32
thumperfunnily enough, we can't test that the port is closed properly without opening it01:32
thumpercan we?01:32
wallyworld__or wait for the port to close before passing to mongo01:33
menn0thumper: are you referring to bug 1364410 or something else?01:33
mupBug #1364410: API server fails to start with "address already in use" in MachineSuite tests <ci> <intermittent-failure> <regression> <juju-core:Triaged> <https://launchpad.net/bugs/1364410>01:33
wallyworld__not sure01:33
thumpermenn0: yes, that one01:33
menn0thumper: because that bug is about the API server, not mongo01:33
thumpersame problem01:33
menn0yes01:33
thumperwe open a random port and pass it on01:33
menn0yes01:33
wallyworld__doesn't mongo support passing in 0 for the port?01:33
menn0we've already been talking about it quite a bit here01:33
thumpermenn0: oh, ok, I wasn't watching...01:34
wallyworld__it chooses one and reports what it is listening on01:34
thumperI'll leave it to someone else :)01:34
wallyworld__maybe it doesn't support that01:34
menn0thumper: read scrollback and check the updates to the ticket :)01:34
menn0for mongo we do actually retry a bunch of times as you suggest01:34
menn0see juju/testing/mgo.go:16701:35
menn0it's a bit harder for the API server01:35
menn0bbs01:35
axwwallyworld__: you can't use port 0 in mongo01:35
wallyworld__i was wishing more than anything01:36
axwwallyworld__: we could maybe do something horrible like get it to use a unix socket and redirect a socket to that01:36
axwbut it would be better just to not use mongo in the unit tests :)01:36
wallyworld__you think? :-)01:37
axwwallyworld__: I updated the api test mocking PR01:37
wallyworld__you mean "unit" tests right?01:37
wallyworld__ok01:37
axwunified them around a common patching thingy01:37
wallyworld__\o/01:37
wallyworld__i'm still looking at 66301:37
axwokey dokey01:37
axwI'll go back to fixing the tools URL stuff I emailed about01:38
wallyworld__ok01:38
perrito666uh am I late for bashing our tests for using mongo?01:38
perrito666ahh I am01:38
davecheneyhas anyone tried the new side by side diffing on github yet ?01:41
axwwhat, this is news01:41
perrito666oh I just did01:41
axwyay01:41
perrito666its glorious01:41
perrito666and it remembers my choice01:42
perrito666sweeeeet01:42
* axw removes octosplit01:42
perrito666and it highlights the diffed parts01:42
* perrito666 cries01:42
perrito666our whining has been heard01:42
davecheneythumper: menn0 https://github.com/juju/juju/pull/67001:52
davecheneya slightly contraversial one01:52
axwwallyworld__: that comment about failing is wrong, it just overwrites now01:53
axwsorry01:53
axwI had originally intended it to, but changed my mind01:54
thumperdavecheney: is it possible to just change it in state, but leave it with the api?01:54
axwthis is why the hash is encoded in the path, so if the put to the blobstore OR to mongo fails, we don't end up with inconsistent blob/metadata01:55
davecheneythumper: nope01:55
davecheneythumper: do you want a long discussion or a short discussion about why this type doesnt' add anything01:55
thumpershort01:56
thumperthe only benefit I see is that it is shorter to type01:56
davecheneythumper: http://play.golang.org/p/4KQ6WrhFGf01:57
davecheneythere are no methods on StatusData01:57
davecheneyall it does is obscure what is actually being stored in the StatusData field01:57
* thumper ndos01:57
davecheneymost of the code churn is in the tests01:58
davecheneyas usual01:58
davecheneythe actual api code, apart from the method sigs01:58
davecheneyis unaware of the change01:58
davecheneythumper: thanks01:59
davecheneythis will probably be the most contraversial change01:59
davecheneythe rest are more mechainical01:59
menn0davecheney, thumper: FWIW, I'm -0 on this. I prefer the type aliases sometimes. They provide documentation and in this case, repeatedly spelling out of an otherwise awkward type.02:02
menn0map[string]interface{} is ugly to look at02:03
menn0especially when it's used a lot02:03
davecheneymenn0: i dunno how to incorprate signed zero feedback02:04
davecheneyeither your +1 or -102:04
menn0it means, I don't like it, but I don't feel strongly enough about it that I'm going to ask you to stop02:04
davecheneyfair enough02:05
menn0too late now anyway02:05
davecheneynoted02:05
davecheneyi don't think there will be many more cases like this02:05
lazyPowerhatch: bug tracker for the charm is on the GUI - http://i.imgur.com/MW05eAO.png, it should be in the README though.02:09
lazyPowerhatch: what's going on with MYSQL? did you get a bug filed that I can look at?02:10
=== menn0 is now known as menn0-afk
thumpergot this interesting intermittent failure: http://paste.ubuntu.com/8228881/02:42
thumperwhy the 2 minute waits?02:42
thumperanyone got any ideas?02:42
wallyworld__thumper: i *think* the waits are added to allow mongo replicaset to come up02:47
wallyworld__from memory02:48
thumperugh02:48
wallyworld__which sucks. it's bad enough we have "unit" tests with mongo required, but to also turn on the replicaset stuff for *all* tests is even worse02:48
wallyworld__if we must use mongo for now for tests, why have the replicaset stuff enabled unnecessarily02:49
davecheneywallyworld__: didn't someone note that recently02:51
davecheneyi have a memory there was a note in the weekly minutes to stop doing that to ourseles02:51
wallyworld__davecheney: probably, but it hasn't been done i don't think02:52
wallyworld__i was hoping nate would be doing it since he's looking at the replicaset tests02:52
wallyworld__i'll ask him02:53
davecheneyta02:54
axwwallyworld__: I don't understand your comment about Tools tests & primitives03:02
axwwhat do you want to see?03:02
wallyworld__axw: it was a suggestion that we use things other than the component under test to test itself. so for Tools(), we would get a blobstore, write some data manually, and check that Tools() can load it. ie a simplified bit of code without error checking and with hard coded values or whatever03:04
wallyworld__AddTools() can still use Tools() in its test because Tools() has been separately tested03:04
axwI see03:05
axwok03:05
wallyworld__does that make sense? do you agree?03:05
davecheneythumper: menn0-afk https://github.com/juju/juju/pull/67103:05
davecheneyone more, less contentious this time03:05
=== Ursinha is now known as Ursinha-afk
wallyworld__otherwise i could write an implementation that passes the tests but which doesn't work03:05
=== menn0-afk is now known as menn0
=== Ursinha-afk is now known as Ursinha
* thumper fears the rebase03:17
* thumper takes a deep breath03:17
davecheneythumper: never go the full rebase03:18
thumperwhy?03:19
davecheneythumper: yes, agent/bootstrap.go depends on state03:19
* davecheney really wishes our package had package comments03:19
davecheneythat way I wouldn't have to guess what the agent package did03:19
davecheneythumper: i agree, to swap one dependency for another would not be a win03:21
davecheneybut agent already depends on state03:21
thumperyep03:21
davecheneynow, i'm not sure if that makes sense03:21
thumperthat is why I'm fine with this03:21
davecheneybut i don't really know what the agent package is03:21
davecheneyi'm guessing it's helpers for jujud agent processes03:21
thumperyeah03:22
thumperideally it wouldn't depend on state03:22
davecheneyno03:22
davecheneyi can put that on the end of the list if you like03:22
davecheneythumper: that might be it for the changes today03:23
davecheneyneed to for arm64 paperwork this afternoon03:23
thumperkk03:23
davecheneyand figure out how to come up with a plan for how to schedule 5 bits of concurrent work03:24
menn0davecheney: that PR you just submitted has 7 commits, 4 of which have a commit message of just "wip"03:24
davecheneymenn0: yup03:24
davecheneyi don't rebase03:24
davecheneyi can't make it work03:24
menn0davecheney: that's awful03:24
davecheneyyup03:24
davecheneywe've discussed this before03:24
menn0git rebase -i HEAD~<number of revs back>03:24
menn0easy03:24
davecheneythere has been no firm guidance here03:24
menn0but you have to admit that a commit with a message of "wip" is pretty useless03:25
davecheneyyup03:25
davecheneyit's my old process from bzr03:25
davecheneymenn0: i'm hoping that the bot will grow the ability to squash commits03:26
menn0davecheney: but squashing commits or even just rewording the commit messages is ridiculously easy03:26
menn0davecheney: nevermind.... I doubt I'm going to change your mind03:28
thumpermenn0: I have a conflict during rebase03:31
thumperand I want to do a three way merge to see03:31
thumperany idea how?03:31
menn0do you have a favourite merge tool? (e.g. meld or kdiff3)03:32
thumperyes03:32
thumpereither of those is fine03:32
menn0if so, type "git mergetool" at the conflict03:33
menn0select the tool you want to use03:33
menn0and it launches so that you can do the merge03:33
menn0that's what I do03:33
thumperwhat do you mean "at the conflict" ?03:33
menn0when the rebase stops due to the conflict03:34
thumperyes...03:34
thumperanything else?03:34
menn0then you type "git mergetool"03:34
menn0does that work for you?03:34
menn0thumper: ^^^?03:37
thumperkinda03:37
* thumper is in meld hoping he is doing the right thing03:37
menn0with meld I usually use "Merge All" and then check how well it did03:38
menn0it normally does a pretty good job03:38
menn0but for really tricky conflicts you sometimes need to do some hand editing or manual merges03:38
menn0I didn't realise for sometime after I started using meld that you can edit in the middle pane03:39
menn0:)03:39
menn0thumper: ^^03:39
* thumper runs make to test03:47
thumperhaha03:49
thumpereverything fails03:49
thumperfixed the two trivials03:50
* thumper waits to try again03:50
thumpercoffee machine is calling03:50
wwitzel3is there an easy way to push a new build to an existing juju environment?04:00
wallyworld__wwitzel3: update-juju --upload-tools04:02
wwitzel3wallyworld__: thanks04:02
wallyworld__i've not used it myself :-)04:02
wwitzel3I'm just peppering the code with Debugf statements and it gets old rebuilding the environment each time04:03
wallyworld__yup04:05
thumperwallyworld__: or axw: https://github.com/juju/juju/pull/673 - trivial move04:17
wallyworld__ok04:17
thumpergah...04:24
* thumper rebased the wrong branch04:24
thumperFFS04:24
thumperhow?04:24
thumpernope04:25
thumperdid the right branch04:25
thumpertried to merge the wrong branch04:25
thumperd'uh04:25
hatchhey anyone here know anything about haproxy? I'm trying to find documentation, release notes, etc, but the 'official' site hasn't been updated since 201304:37
thumperugh...04:41
thumperI need to apply a reverse merge for just one file from a previous commit04:41
thumpergit master help needed04:41
thumperjust hit: [LOG] 0:00.293 ERROR juju.worker exited "apiserver": listen tcp :60622: bind: address already in use04:44
hatchthumper: so you want to remove one file from a previous commit?04:47
thumperhatch: remove the changes to one file from a previous commit, yes04:47
hatchthumper:  is it a recent commit?04:49
thumpertwo back04:49
hatchgit rebase -i HEAD~2 then change 'pick' for the commit in question to 'edit'04:49
hatchif I am remembering correctly04:50
hatchI believe edit will allow you to modify the commit04:50
thumperhmm... ok04:50
hatchthen once you do the changes you do `git commit --ammend` I believe04:52
hatchsorry I don't have a local repo to test with atm :)04:52
hatchthumper: work?04:57
thumperyeah04:57
hatchexcellent04:57
hatchthumper: rebase has a lot of really awesome functionality, if you ever get some free time it's definitely worth reading the docs on it04:58
wallyworld__axw: whenever you're free, i've updated blobstore to just use sha384 checksums https://github.com/juju/blobstore/pull/1405:05
axwlooking05:08
=== uru-bot is now known as urulama
wallyworld__axw: ty, i've merged as we don't have a landing bot yet05:18
axwcool05:18
davecheneymenn0: i'm sorry about the ugly commit05:26
davecheneyi'll try to produce better PR's int he future05:26
menn0davecheney: :)05:27
davecheneymenn0: thumper05:32
davecheneyi'm at the stage where I have a bunch of enumeration types05:33
davecheneylets say params.Life05:33
davecheneythat's an easy one05:33
davecheneythey are defined in params05:33
davecheneybut used in state as they are stored in the database05:33
davecheneynow, the first suggestion would be to move them into state05:33
davecheneywhich makes sense for the apiserver05:33
davecheneybut that means api clients would also be importing state05:33
davecheneyand that feels wrong05:34
thumperyes...05:34
davecheneythoughts ?05:34
thumperthis is why we want a general separate package that handles that :)05:34
davecheneyi think there is general agreements that the api/ packages should know nothing about state05:34
* thumper is being called for dinner05:34
thumperagreed05:34
davecheneythumper: yes, but then both state and the apiserver and api clietns have to import those05:34
davecheneyand that feels like odd coupling05:34
davecheneyi'm thinking about using raw types in state, ie strings05:35
davecheneythen having parse and tostring() in the params pacakge05:35
davecheneyso the api and apiserver deal with enumerated types05:35
davecheneyand we convert them to strings to be stored in the databse05:35
davecheneyor something05:35
davecheneysimilar to the method I wrote that converrts05:35
davecheneystate.StateServingInfo -> params.StateServingInfo05:35
menn0davecheney: seems ok except we then don't have nice friendly constants to use in state code05:37
davecheneymenn0: i agree05:37
menn0which kinda sucks05:38
davecheneyand, taking params.Life as an example again05:38
davecheneyit does have helper methods on it that make it more than just an alias, liek StatusData was05:38
davecheneymenn0: hang on, give me a sec to try something05:38
davecheneyhmm, what about05:39
davecheneypackage state; type Life int const ( LifeAlive << iota .. )05:39
davecheney^ this is what we have in params at the moment05:40
davecheneythen in apiserver/params05:40
davecheneytype Life state.Life05:40
davecheneythese should still marshal across the wire05:40
davecheneyand callers of the api won't be able to tell05:40
davecheneythere will be a transitive dependency from api -> apiserver -> state05:40
davecheneybut not a direct one05:40
davecheneyit will also prevent anyone using api/ types in state05:41
menn0that seems pretty good to me05:41
davecheneylet me try a PR05:41
davecheneysee how it looks05:41
davecheneythat means in the apiserver05:41
davecheneyyou do05:41
davecheneyf(life params.Life) { st.Something(state.Life(life)) }05:41
davecheneywhich is probably acceptable, given the constraints05:41
menn0and if we decide that there needs to be a difference between the constants in the apiserver vs state, it could be unpicked fairly easily05:42
* menn0 is EOD...05:43
davecheneykk05:44
fwereadewallyworld__, I have to go into town to see the dentist shortly; I think there's just one major unresolved thing in the qos/status stuff, but it's a biggie: it's the per-relation statuses05:45
fwereadewallyworld__, I can't see a way to do health well without relation granularity at least05:46
wallyworld__fwereade: ok, i'm updating some comments in the doc now, yet to get to that bit05:46
wallyworld__but i will05:46
fwereadewallyworld__, and I can't see a way to do relation-granular statuses easily and comprehensibly either05:46
wallyworld__fwereade: i have soccer in an hour or so, perhaps we can talk after the TL meeting?05:46
fwereadewallyworld__, yeah sgtm05:46
wallyworld__fwereade: what time is it?05:47
fwereadewallyworld__, FWIW it's not really about stuff in the impl doc, it's unresolved questions in the reqs doc05:47
wallyworld__tooth-hurty :-D05:47
fwereadewallyworld__, haha05:47
wallyworld__thought you'd "appeciate" that05:47
fwereadewallyworld__, oh, I do, I had a 2:30 dentist appointment when I was small and told teh dentist that exact joke05:48
wallyworld__\o/05:48
fwereadewallyworld__, he was very nice and pretended he'd never heard it before05:48
wallyworld__lol05:48
* fwereade has to go05:49
wallyworld__axw: do we need to, or should we be, including the uuid in the tools url? are tools something that we care about segregating per environment?05:58
axwwallyworld__: they are in the URL05:59
wallyworld__axw: yes, that's what i'm referring to05:59
axwhttps://<apiaddr>/environment/<uuid>/tools/<version>05:59
axwwallyworld__: ah, sorry thought you thought they weren't and should be06:00
axwum06:00
wallyworld__one sec, someone at door06:00
axwwallyworld__: I think one user should not affect another user's env by manipulating tools06:01
wallyworld__axw: that's a fair point06:01
wallyworld__and the data is de-deuped anyway06:01
axwthey're going to be deduped in the blobstore06:01
axwyeah06:01
wallyworld__yup :-)06:01
axwwallyworld__: we need to support 1.18 upgrading directly to 1.21? my understanding was that the client needs to be compatible, but upgrade still need to go through the hops06:10
wallyworld__axw: yes, correct, upgrade steps are run one version at a time. i was worried if older clients attempted to use that attribute if it is taken away, i could be wrong06:11
axwwallyworld__: I mean, I thought the client still was required to upgrade to 1.20 first, and then to 1.2106:12
wallyworld__axw: we need to support people using juju 1.18 clients "forever"06:12
wallyworld__even with the back end upgraded06:12
axwwallyworld__: everything except upgrading directly to 1.21 will work still06:13
axwif you want to upgrade you still need to go to 1.20, then to 1.21 (this is my assumption)06:13
wallyworld__axw: sure, but i might upgrade to 1.22 and you may still want to use an older 1.18 client06:13
wallyworld__we need to always ensure 1.18 clients can be used with any 1.20, 1.22 etc06:14
axwwallyworld__: that'll be fine. the bit of code in question is only relevant to the upgrader06:14
wallyworld__axw: ok, np. just being doubly sure by asking the question06:15
axwsure06:15
wallyworld__we'd be in the shit if stuff broke :-)06:15
thumperwallyworld__, davecheney, axw, someone: https://github.com/juju/juju/pull/67506:20
wallyworld__thumper: currently reviewing, will look after i finish unless i have to bail for soccer06:21
thumperwallyworld__: ack06:21
davecheneymenn0: state already has a Life type06:21
davecheneyand it's defined as a uint8 ...06:21
davecheneyso we have params.Life, a string06:22
davecheneyand state.Life, an uint806:22
thumperick06:23
thumperwallyworld__: if you are happy with my branch, please add the merge flags06:24
wallyworld__will do06:24
thumperwallyworld__: I'm off for the evening until meeting time06:24
thumpercheers06:24
mattywmorning all06:24
wallyworld__o/06:24
mattywwallyworld__, thanks for merging my branch - it makes me very happy06:24
wallyworld__mattyw: i landed your branch for you :-)06:24
wallyworld__np06:24
wallyworld__mattyw: i wanted to get in in case CI was blocked again before your SOD :-)06:25
mattywwallyworld__, I appreciate it, thanks very mcuh06:26
wallyworld__anytime06:26
dimiternmorning all06:53
wallyworld__axw: off to soccer, i lgtm'ed your pr with a suggested change07:07
axwwallyworld__: thanks07:07
axwenjoy07:07
tasdomasmorning07:31
tasdomascould somebody take a look at https://github.com/juju/juju/pull/667 ?07:31
dimiterntasdomas, morning, and looking :)07:39
tasdomasdimitern, thanks07:39
dimiterntasdomas, reviewed, i'm afraid it looks like it needs a bit more08:13
tasdomasdimitern, thanks08:16
TheMuemorning btw08:37
voidspaceTheMue: morning08:37
TheMuevoidspace: ah, good to see you. sharing room in Brussels?08:38
* TheMue btw fight with code that yesterday before merging worked but not now anymore *wonder*08:38
voidspaceTheMue: I have a roomie TheMue08:45
voidspaceTheMue: if that was an offer, which I assume it was, thank you08:46
* voidspace is also wrestling, but with lxc not code08:48
TheMuevoidspace: ok, thx for info08:51
gsamfiraif anyone has a few minutes to spare, can I have a review on: https://github.com/juju/utils/pull/27 ?09:18
jam2morning TheMue09:30
TheMuejam2: hi jam09:30
jam2voidspace: I read that for a second as wrestling with your roomie.09:30
jam2TheMue: I missed you yesterday, was I just not around when you were, or did I miss something else?09:31
TheMuejam2: I thought I told on Tuesday that I had a doc appointment09:31
jam2TheMue: it is certainly possible that you did and I just forgot. No problem. Just turned out that Voidspace had a doc appointment, and dimiter had a power outage all during standup time.09:32
jam2I was so lonely.09:32
TheMuejam2: my whole working day moved in the afternoon and evening, at about 11 I finished with merging and fixing conflicts :)09:32
TheMuejam2: hehe, next time I will be with you using my mobile hangout :D09:33
TheMuejam2: I even had to break my work in the afternoon for a short while, I got an urgent call by my daughter09:33
TheMuejam2: she and her friend bought furnitures and wanted to rent a larger transporter. but they are too young09:34
TheMuejam2: so they needed daddy as driver09:34
jam2natefinch: I commented on https://github.com/juju/juju/pull/51209:35
voidspacejam2: heh, not yet wrestling with a roomie09:40
voidspacejam2: that comes soon09:40
voidspacejam2: I finally have juju running on an lxc under trickle09:40
jam2voidspace: beware of thumper, he has a history there09:40
voidspacehah, I can believe it09:40
voidspacejam2: the fact that replicasets are taking *an age* to complete imply that it's working09:40
voidspacecaching makes it slightly hard to tell09:40
jam2voidspace: do you know about drop cache ?09:41
voidspacejam2: I don't, but I will shortly... thanks09:41
jam2voidspace: http://www.linuxinsight.com/proc_sys_vm_drop_caches.html09:41
voidspaceI didn't rate limit it too much whilst I was installing packages and fetching the juju dependencies09:41
voidspace2MB/s09:41
voidspaceI completely failed to get nbd-server to read a config file and actually start09:42
voidspaceI ended up forcing it to skip the config file and specifying the parameters at the command line, which is actually a deprecated way of starting it09:42
voidspacehttps://plus.google.com/114852031032123777881/posts/LgLST5uPHsJ09:42
stubInteresting... my agent died while in debug-hooks. Anything I can do to diagnose? Its lxc.09:43
voidspaceand as a testimony to my experimentation I now have an lxc container I can't destroy (as it's filesystem is on a disk that no-longer exists)09:43
jam2voidspace: and inode handles keep them all alive?09:46
jam2stub: so you can pastebin the panic09:46
stubhttp://pastebin.ubuntu.com/8231693/09:47
stubjam2: this chan prob better ;)09:47
jam2stub: it looks cut off at the start, though I'm not sure09:48
jam2I only see from goroutine 2809:48
stubjam2: yeah, hang on. paste fail.09:49
* stub looks to see if it logged locally, outside of debug hooks terminal09:50
stubhttp://pastebin.ubuntu.com/8231715/09:51
stubjam2: So, yeah. I typed 'relation-get db' or something and killed it :)09:51
jam2stub: so yeah... if a Charm can Panic Jujud, that's *bad*. Can you file a bug with just that first part of the traceback?09:52
jam2I can understand how that code could be triggered09:52
jam2(something assumes that it is getting a valid object, and then turns it into a Tag that assumes the input is well formatted and panics if it isn't)09:53
jam2davecheney: ^^09:53
jam2looks like a case where we might be trying to validate input09:53
jam2but it is getting turned into a Tag before we query the DB09:53
* davecheney looks09:53
jam2but that panic() rather than giving a "no such thing" error09:53
stubrelation-get - db09:53
stubThat was what I typed09:54
davecheneyyup, the bug is github.com/juju/juju/state/api/uniter.(*RelationUnit).ReadSettings09:54
davecheneyis using NewUnitTag09:54
jam2stub: sure, it probably is supposed to be "relation-get unit-db-0"09:54
davecheneynot ParseUnitTag09:54
stubyeah, it was my fat fingers09:54
jam2stub: but regardless, it is a bug in Jujud code09:54
davecheneyjam2: hmm, not sure09:54
jam2that we would panic() because of bad user input09:54
davecheneyi think it should be db/009:54
davecheneythat is the name of the unt09:54
davecheneyunit09:54
jam2davecheney: sure, I'm not quibbling on what Stub should type, but *jujud* should not panic because of a typo in a charm09:55
davecheneyjam2: no argument there09:55
jam2stub: I'd consider this a Critical bug, fwiw, since it means a bad charm makes your environment unreliable09:55
jam2stub: or davecheney: can you file a bug to track this? I'm currently in 2 other conversations09:56
stubhttps://bugs.launchpad.net/juju-core/+bug/136541209:56
mupBug #1365412: relation-get with invalid relation name panics agent <juju-core:New> <https://launchpad.net/bugs/1365412>09:56
TheMueaaaargh, found why it's not working anymore09:56
jam2stub: is this with 1.20 or only with juju trunk?09:59
stubjam2: 1.2009:59
tasdomasdimitern, thanks for the review - I've responded to the comments10:00
voidspacejam2: I think it's lxc configuration that prevents it from destroying the container10:10
voidspacejam2: it shows up under lxc-ls but lxc-destroy reports that the container doesn't exist10:10
davecheneyjam2: stub i have a fix10:10
davecheneyPR coming RSN10:10
jam2great davecheney !10:10
dimiterntasdomas, cheers, will look in a bit10:11
davecheneyjam2: stub https://github.com/juju/juju/pull/67710:21
jam2davecheney: is there a function like NewUnitTag that would do the check for us rather than doing IsValidUnit call?10:23
davecheneyjam2: nope10:23
davecheneythe value we're handling is not a tag10:23
davecheneyso names.ParseUnitTag() is not the right hammer either10:24
stubMy, that looks like parameter validation ;)10:24
davecheneybut, there is a simpler fix10:24
perrito666good morning10:24
jam2davecheney: ah right, it is the name not the tag10:24
davecheneyif you're prepared to send this to the API server10:24
* perrito666 sees a heavy storm outside and announces that he might be suddenly disconnected10:24
davecheneynote that we're turing the uname into a tag, then calling tag.String() on it to pass it to the api10:24
davecheneywhy both ?10:24
davecheneywhy bother10:24
davecheneyactually, not10:25
davecheneywe need to10:25
davecheneybeause the api only accepts tags10:25
davecheneythis fix is correct10:25
jam2davecheney: is there a reason NewUnitTag should panic() rather than having error like other things?10:25
davecheneyyes, it's a testing function10:25
davecheneyit's use in prod code is a smell10:25
davecheneyi discourage anyone from calling it10:25
jam2davecheney: how do you turn user input into name.Tag objects then?10:26
davecheneydepends10:26
davecheneyif the input is a string form of a tag with ParseTag10:26
davecheneyif not, we need to validate it first10:26
davecheneythen handle it with care10:26
TheMue*iiirks*10:27
jam2davecheney: it sounds like we want something similar to ParseTag (ParseName) ?10:27
jam2davecheney: it certainly seems like validating user input for these things should be common code in the names package10:27
jam2anyway, your fix seems fine for now, but it doesn't seem "ideal" in the design sense.10:27
davecheneyjam2: i agree10:28
davecheneythe use of NewXXXTag is very dangrous10:28
davecheneyi discourage everyone from using it10:28
davecheneymy use of it in this case was a mistake because I think at the time i started this work I didn't understand the scope of the problem10:28
TheMuejam2: is it intended that once the client requests a higher version of an API that doesn't exist on the server even if the API and the called function exist in a lower valid version, it fails (means: returns an error)?10:29
jam2TheMue: it is intended, yes10:30
jam2the client is responsible for noticing that the higher version is not available10:30
TheMuejam2: so once introducing a new version maybe the whole client has to changed, because now an error is returned and an explicit call to a lower version (where the code intenionally has been written for) has to be done10:32
jam2TheMue: BestAPIVersion has already worked out what version is available and makes calls against that version10:32
jam2the point is that api/client.go should know about the available versions and give the compatible internal API10:33
jam2TheMue: so you would have Client.DoSomething(), which internally might be calling "Client", 1, "DoSomething", args10:33
jam2or might be calling "Client", 0, "DoSomethingElse", otherargs10:33
TheMuejam2: it does it when starting once by retrieving them from the server, doesn't it?10:34
jam2TheMue: at Login time we find out what facade versions the server has available10:34
TheMuejam2: then here maybe my troubles are10:34
jam2and when instantiating the api.Client object it determines (FacadeCaller) what the matching version is10:34
voidspacejam2: running the AddRemoveSet tests on my machine (normally)  takes 60 seconds10:34
voidspacejam2: running them on an lxc rate-limited to 2MB/s up/down takes 4 minutes10:35
voidspacejam2: limited to 1MB/s dies with unreachable servers10:35
TheMuejam2: the code for temporarilly discarding a version has also to do this on the already retrieved versions10:35
voidspacejam2: (this is with the extraneous Remove removed)10:35
jam2voidspace: sounds like a good start, you can probably increase some timouts to see if unreachable servers can be recovered from.10:35
voidspacejam2: ok, I'll look at that - I might try with an intermediate value as well10:36
voidspacejam2: I'd like to get a good few runs with a slow disk showing that we don't die in test cleanup when we don't have the Remove10:36
jam2voidspace: well for our tests to be reliable more consistenty, I'm think we probably need to change the timeouts, and move it to CI10:36
jam2voidspace: well, first I'd like you to see that we *do* die in cleanup with Remove there10:37
jam2voidspace: always have the test fail first10:37
jam2before you fix it10:37
voidspaceah, ok - good call10:37
jam2voidspace: standard bugfixing, you have to know that you're reproducing the bug before you know that your fix is actually fixing it :).10:39
voidspacejam2: sure :-)10:39
voidspacethat's why changing existing tests is dangerous10:39
voidspaceunless you also make sure you see the *modified test* fail10:39
voidspaceit's easy to change a good test into a no-op without noticing...10:39
voidspaceof course, testing replicasets on a *deliberately slow* system is even more painful than normal10:40
jam2voidspace: dimitern: standup?10:46
jam2voidspace: yeah, replication is painful10:46
voidspaceomw10:46
dimiternjam2, omw, sorry10:47
voidspacejam2: dimitern: TheMue: you can tell the next door neighbours kids have gone back to school - my internet connection is now good enough for google hangouts...11:10
jam2voidspace: :)11:10
TheMuevoidspace: *lol*11:14
dimitern:)11:21
dimiterntasdomas, you've got another review with some suggestions11:21
thumperis anyone else having trouble pushing master to github?11:40
thumperif not, are you using the pre-push hook?11:40
mgz_thumper: I can try now11:41
thumpermgz_: ta11:41
* mgz_ suspects windows syslog changes11:44
mgz_and indeed, seems to be11:44
mgz_lets just double check...11:45
mgz_hm, happy after I did a dep upgrade11:46
mgz_thumper: works for me11:46
mgz_on trusty, after running godeps -u dependencies.tsv11:47
mgz_$ git push origin master11:47
mgz_Everything up-to-date11:47
thumperstate/metrics_test.go:42:11: (*github.com/juju/juju/state.Metric).Key -> <nil>11:47
thumperMethodSet {}11:47
thumperpanic: method sets and lookup don't agree [recovered]11:47
thumperpanic: method sets and lookup don't agree [recovered]11:47
thumperpanic: method sets and lookup don't agree11:47
jam2voidspace: so it sounds like you're really close to the "land the code" state, is that true?11:47
thumperthat is what I get11:47
jam2voidspace: because I have other work for you to be looking into if you do.11:47
mgz_thumper: I have that line, but not the panic. go 1.2.111:49
jam2TheMue: voidspace: dimitern: we're going to be picking up the PortRange changes from domas, so it would be good for a couple of you to read over the patch so far11:49
jam2tasdomas: can you work with those guys ^^ to help share knowledge of what is going on?11:49
mgz_thumper: I guess if you just do `./scripts/pre-push.bash` you get that panic?11:50
dimiternjam2, i've reviewed it twice and am familiar with the previous work11:50
voidspacejam2: well - Remove the Remove is ready to land just need to create the PR11:50
jam2voidspace: yep.11:50
voidspacejam2: the replicaset CheckHealth function (name?) is done but needs a test / logging / deciding where to actually use it11:50
jam2voidspace: sounds reasonable11:50
voidspacejam2: if we just use it in the tests instead of sleeps then I can land that today too11:50
jam2(name wise)11:51
voidspacejam2: and it probably doesn't need its own tests if we just use it in the tests11:51
jam2voidspace: think carefully about it, and I'll let your educated thoughts drive where we put it :)11:51
=== allenap_ is now known as allenap
voidspacejam2: heh, ok11:51
jam2voidspace: The only good way to test it is by mocking out mongo11:51
jam2IMO11:51
tasdomasjam2, TheMue, voidspace: I still need to update the patch w.r.t fwereade's comments and I have a day off tomorrow - could we set aside time to go over this on Monday?11:51
jam2voidspace: I liked your ideas about having Add wait until things should be reliable11:51
voidspacejam2: yep11:52
voidspacejam2: ah, ok - I thought you *weren't* keen on that11:52
jam2voidspace: but I'm not deep in the code to have a good feeling for how it all hangs together11:52
jam2voidspace: sorry, it sounds like we must have been talking past eachother. I think haiing things transition from a known good state to another known good (enough) state is worthy11:53
jam2and Add() seems like the place where you might do that.11:53
voidspacejam2: let me get the function usable, after I PR Remove the Remove, and look at plugging it into Add / Remove11:53
voidspacejam2: ok, cool - what about Remove?11:53
voidspacewhich is already slow11:53
jam2The issue in the code is whether it expects things to be more asynchronous and would work poorly if we waited here and tehre.11:54
voidspaceright11:54
jam2voidspace: changing the replicaset should be really infrequent11:54
jam2so waiting seems great11:54
voidspacewe have code (in tests) that expect stuff to be unstable and just retries the next operations until they succeed11:54
voidspacewhich is horrible11:54
jam2Again, we can make "waiting" be until quorum11:54
voidspacejam2: I'll look around it11:55
jam2or maybe "wait X for everything stable, then back off to Y for quorum"11:55
voidspaceyep, with logging11:55
jam2voidspace: I like the idea with you can spend a bit of time for full stability as long as it doesn't really impact11:55
voidspaceI'll see how they are used in the code and the wait strategies around them11:55
jam2better than always returning immediately because you always have quorum11:55
voidspaceand as the current operations leave the state unstable, we're either *already* waiting11:56
voidspaceor we have code that can sometimes fail horribly11:56
voidspaceso we're either replacing one wait with a better wait, or fixing a bug11:56
voidspaceso it sounds like a win11:56
jam2voidspace: right, and it is certainly possible that in your slow-case testing you'll find we can't reliably work with the system in a pre-commit test timeout11:57
jam2(which IMO, real unit tests should be milliseconds....)11:57
wallyworld_fwereade: i'm just about to do our standup, can i ping you after that, soon?11:57
voidspacejam2: I didn't quite parse that - you mean that waiting for stable should help with the slow system timeouts11:58
voidspacebecause we're waiting for stable state11:58
jam2voidspace: I mean that waiting-for-stable-state may make the test unsuitable for the pre-commit suite and it needs to go into CI11:59
voidspace(specifically I couldn't parse "with the system in a pre-commit test timeout")11:59
jam2and while I don't want to lose you to it, we need people who know how to add stuff to CI, so I'm willing for you to spend the time there.11:59
voidspacejam2: ah11:59
voidspacejam2: yep, parsed it now11:59
voidspacejam2: I thought "pre-commit" was mongo terminolody11:59
voidspace*terminology11:59
voidspacejam2: agreed12:00
jam2voidspace: pre-landing-on-trunk12:00
voidspaceyep12:00
voidspaceBut first, coffee12:00
jam2:)12:01
mgz_wait, what's this pre... I see12:01
mgz_you're suggesting voidspaces adds this as a ci job rather than a unit test12:01
jam2voidspace: I like the idea of having a "ci/" subdirectory that only runs in CI fwiw12:01
mgz_...why did I plural...12:02
jam2mgz: so TestAddRemoveSet is currently in github-merge-juju12:02
jam2mgz: we think that it needs to just be slower, which means it would be better as "run-trusty-tests" or whatever there12:02
mgz_jam2: yeah, it sounds like a reasonable idea to me12:02
mgz_the alternative is leave it in unit test form, but off unless --flag, and switch that on in the post-gating jobs... but that's pretty ugly12:03
jam2mgz_: FWIW I like ENV_VAR more than --flag12:03
jam2just because you can't pass --flag to "go test" reliabl12:03
jam2reliably12:03
mgz_yeah, that's a pain12:04
jam2because it passes it to all packages12:04
jam2not just the one you want12:04
jam2otherwise I'd prefer flag12:04
jam2I'm not a big fan on ENV magic, but go test seems close to requiring it12:04
thumpermgz_: yeah... I have ./scripts/pre-push.bash hooked up as the git pre-push hook12:05
thumpermakes pushes take a lot longer12:05
mgz_thumper: me too12:05
thumperbut it was in the docs12:05
thumpermgz_: so why is mine panicing?12:05
mgz_that's what I want to know :)12:05
* thumper is too tired to work it out12:07
* thumper goes to bed12:07
thumpernight all12:07
voidspaceI made a radical decision, I went for tea instead of coffee12:11
jam2voidspace: omg....12:12
voidspacejam2: yes, I like having CI tests in trunk - so developers can write new ones easily and have a sense of ownership over them12:12
voidspaceheh, indeed12:12
jam2voidspace: that's crazy talk12:12
jam2go back to coffee before you have any more12:12
jam2ownership over tests.... NOOOOO!12:12
voidspace:-)12:12
jam2then we're responsible when they fail12:12
voidspaceit would be nice to reduce sinzui's blood pressure at least a *bit*12:12
jam2voidspace: we need a lot more ownership of CI stability, so I'm very happy to hear it.12:13
voidspaceyep12:13
voidspacejam2: https://github.com/juju/juju/pull/67912:15
jam2voidspace: just to confirm, you saw reliable failures under slow disk with the Remove in, and not with it out?12:16
voidspacejam2: reliable as in about 3 runs out of 412:16
voidspacejam2: but yes12:16
jam2voidspace: that is good reproducibility and good reduction without them, right?12:17
jam2great12:17
voidspacejam2: yep12:17
jam2voidspace: LGTM12:17
voidspacejam2: thanks12:18
=== ChanServ changed the topic of #juju-dev to: https://juju.ubuntu.com | On-call reviewer: see calendar | Blocking bugs: 1365480
perrito666mattyw: ping without hurry12:44
voidspacenatefinch: ping13:07
jam2TheMue: can you have a look at https://github.com/juju/juju/pull/392 ? It is doing versioning of the root Login function, and I think it would be worthwhile to have you think about it, too.13:08
jam2I'm mostly happy, though I had been hoping we wouldn't have to version the *entry point* into the system.13:08
jam2We can only do that *today* because 1.18 would let you Login even if you pass a version, and 1.20 will give you CodeNotImplemented if you did so.13:08
=== wwitzel3_ is now known as wwitzel3
* voidspace lunch13:15
TheMuejam2: yep, will do13:16
mattywperrito666, ping13:55
mattywperrito666, pong, even13:55
natefinchwwitzel3: standup?14:05
wwitzel3yep, sorry14:06
fwereadeaxw, ping? must be late for you14:22
fwereadeaxw, wallyworld_, if either of you are awake: in the context of "drop provider storage", how far are we from the "can do HA manual provider" subgoal?14:23
fwereadeaxw, wallyworld_, wwitzel3: because the cloudsigma thing will be incoming, and last I looked that was still using the manual storage method, which means that won't be HA-capable either14:24
bodie_I thought we were avoiding gopkg.in14:35
fwereadebodie_, I didn't think so?14:38
=== urulama is now known as urulama_afk
bodie_hum, I got some pushback about it a while back, just didn't know whether I should worry about it14:39
voidspacenatefinch: I've submitted a new expenses claim I would appreciate you approving14:45
voidspacenatefinch: travel for Lexington sprint14:46
natefinchvoidspace: ok sure14:48
=== benji_ is now known as benji
perrito666natefinch: ping me when you have a slot available15:06
natefinchperrito666: will do15:06
=== jog_ is now known as jog
katco`hey, any opinions on how to name functions stuffed into var's for patching in tests?15:17
katco`i have environForName as the function now, i'd like to expose it with a var15:18
=== katco` is now known as katco
natefinchkatco: tricky15:19
katconatefinch: i really dislike this pattern =|15:20
katconatefinch: i'm thinking the var should be the name that makes sense since it should be the thing used everywhere, and then the func shouild be called *forPatching or something ugly to disuade use15:21
natefinchkatco: yeah, that's a good idea15:21
natefinchkatco: or *ProductionFunc or something15:21
katconatefinch: i like that a bit better15:21
katconatefinch: we'll see how that looks, thanks dude15:22
natefinchkatco: welcome.  I'm pretty good at coming up with ugly names ;)15:22
katconatefinch: haha aren't we all15:22
bodie_WouldBeUglierIfJava15:34
perrito666ouch is mattyw gone?15:34
tasdomasperrito666, mattyw is probably just having connection problems15:40
perrito666* mattyw has quit (Max SendQ exceeded)15:41
perrito666sounds like flooding15:41
katcoevilnickveitch: ping15:55
TheMue*yeeeeeehaw*16:05
TheMuesorry for being loud, but this crazy versioning test now works as it should16:06
jcw4TheMue: yay!16:07
wwitzel3is there a way to upload new tools without re-bootstrapping? I tried juju update-tools but that isn't a command.16:07
katcowwitzel3: juju upgrade-juju --upload-tools maybe?16:11
=== hatch__ is now known as hatch
wwitzel3katco: yeah, tried that, but it just says they are the same version, which is true16:12
wwitzel3:)16:12
wwitzel3wondering if I hacked the version and incremented it, if it would work then16:12
katcowwitzel3: ah. look at the status, it should be incrementing the version. i think that error is... well erroneous ;)16:12
katcowwitzel3: yeah, before: agent-version: 1.21-alpha1.1; after: agent-version: 1.21-alpha1.316:15
katcowwitzel3: i remember reading up on this; there is a bug or something out there to simplify all this behavior. it's a very confusing command.16:15
katcowwitzel3: also check your path to make sure you're not using the one from apt16:16
perrito666lunch brb16:48
=== uru_ is now known as urulama_afk
wwitzel3katco: sorry, forgot to say thanks :)17:54
katcowwitzel3: haha no worries. although i _was_ wondering if it worked!17:55
katcowwitzel3: btw i tried some bourbon the other day... maker's mark? i think? it wasn't as good as the stuff you bought in boston. but i'm a bourbon newb.17:57
wwitzel3katco: I wish markers was a good as the stuff I buy, well actually, Jessa wishes it more than me :)17:58
katcowwitzel3: haha17:58
katcowwitzel3: i'm guessing the stuff you're into is rather pricey17:59
perrito666natefinch: team meeting?18:06
perrito666anyone else?18:06
wwitzel3ericsnow: ping18:09
ericsnowwwitzel3: coming18:09
perrito666anyone else aroudn here that feels should be on this meeting?18:16
jcw4perrito666: sure ! :)18:22
wwitzel3anyone know what line 50 of worker/uniter/runlistener.go is actually doing?18:39
mattywnight all18:39
natefinchwwitzel3: setting the value of result to the value of runResult18:41
natefinchwwitzel3: er vice versa18:41
natefinchwwitzel3: it's like an out parameter18:41
natefinchwwitzel3: I have no idea why they're not just returning the result and the error18:42
wwitzel3natefinch: yeah, that's what I was wondering, if there was a reason to not just return them there18:44
natefinchwwitzel3: probably... maybe an interface that's being fulfilled or something (though why that interface itself wouldn't allow the result to get returned, I don't know)18:45
wwitzel3the problem is, that if that RunCommands call actually does return nil for the result (as it does in all its error cases), that line throws a NPE18:45
natefinchwwitzel3: heh uh yeah, that's bad.18:45
katcowwitzel3: that code isn't run from within a closure by chance is it?18:46
wwitzel3katco: yes, I think so, right18:47
katcowwitzel3: funny, i recently did this in a personal project. at the time of the creation of the closure, it needed the variable to assign to; i.e.: the closure was being run in such a way that it couldn't return a value due to an interface it had to conform to18:48
katcowwitzel3: and so i did a pointer dereference18:49
natefinchwwitzel3, katco: what's funny is that on line 24 there's an interface that is written in the right way, which returns results and the error18:49
katconatefinch: ok i call shenanigans on that code then :p18:50
wwitzel3hrmm18:50
natefinchkatco, wwitzel3:  JujuRunServer is passed to an rpc server... that's the trick18:50
katconatefinch: so it can't return a result?18:51
natefinchkatco: http://golang.org/pkg/net/rpc/#Server.Register18:52
wwitzel3natefinch: thanks18:52
wwitzel3katco: thanks18:52
katconatefinch: ah there we are. good find natefinch :)18:53
=== arosales_ is now known as arosales
wwitzel3well it still doesn't change the fact that if the results from runner.RunCommand are nil that it panics with a NPE19:02
wwitzel3so I should probably fix that while I'm in here19:02
katcowwitzel3: quit being so proactive.19:03
natefinchwwitzel3: absolutely fix it.  If err != nil, we shouldn't look at the other value at all19:04
natefinchericsnow: what PR did you want me to review?19:13
ericsnowhttps://github.com/juju/juju/pull/60619:13
ericsnownatefinch: thanks!19:13
natefinchericsnow: I think you're trying too hard to hide stuff in that backups code19:51
ericsnownatefinch: I guess I'm trying to avoid the way we leak stuff all over the rest of our code base :)19:52
ericsnownatefinch: anything in particular?19:52
natefinchericsnow: db.connInfo  ... you should pretty much never have exported functions returning non-exported types19:53
ericsnownatefinch: that's a pretty crucial rule-of-thumb I wasn't aware of :(19:54
ericsnownatefinch: though it certainly makes sense19:54
natefinchericsnow: well for one thing, it means you can't see documentation about the type in godoc.   It also means you can't write a function that takes that type19:55
natefinchericsnow: that's a really good example of a struct that really should just have all public fields.  It doesn't need any methods at all19:55
natefinchericsnow: if you really want the Check function, you can make it a standalone function that takes a ConnInfo and does basically what it does now.19:56
ericsnownatefinch: doesn't that put more burden on the caller unnecessarily?19:57
natefinchericsnow: but honestly, the check function seems spurious.  It might be useful as an internal helper function.. but  ConnInfo is just a data bucket.  Whether or not the address being empty is a bad thing depends on the function using it19:57
ericsnownatefinch: considering that the context is backups (specifically dumping the DB), I think the constraint is appropriate19:58
natefinchericsnow: It ties the logic of what makes a valid conn info to the type, rather than to the function.... and it's only the function that cares.19:59
ericsnownatefinch: thanks for this feedback, by the way :)19:59
natefinchericsnow: welcome :)20:00
ericsnownatefinch: but the point is that the type has a very specific use that is tied to that logic20:00
ericsnownatefinch: I'd expect a more general-purpose type to live in a more general-purpose package20:01
natefinchericsnow: I like that Go makes it easy to separate data from logic.  You don't need to have types and methods for everything. You can have a struct with just some fields and a standalone function that verifies the struct has the right things set.  It would be a lot less code.  I *do* think that NewMongoConnInfo is useful.  That's some pretty specific logic there.  The rest is just boilerplate stuff because you're hiding20:05
natefinchthe fields in ConnInfo (and hiding ConnInfo itself).20:05
natefinchericsnow: I know we were all taught that public variables are the devil.  It turns out, well, sometimes they're really not... especially if it's just data, and not internal state.20:06
ericsnownatefinch: hey, I'm a Python guy, so the whole public/private thing is kind of new to me...I guess I've been feeling it out20:09
natefinchericsnow: heh.... it;'s funny, because I come from C# / C++ etc where you have to think about that stuff all the time, and people are much more rigorous about never exposing anything...20:10
ericsnownatefinch: being able to syntactically express expectations like that is the one thing I like about static type systems20:10
natefinchericsnow: I like being able to statically express the type of thing I'm expecting to get.... it's good for me and it's good for the person calling my code :)20:11
natefinchericsnow: certainly, with Go's interfaces, it makes it a lot less burdensome on the caller than in other languages.  "Give me something with a Read() method, I don't care what"  is a lot nicer than "Give me exactly a ByteRead type, and if you don't have one, guess you're gonna have to make one and wrap your thing in it"20:12
ericsnownatefinch: type inference helps a lot too20:18
natefinchericsnow: yep, definitely.20:18
perrito666davecheney: if you have time, I LGTMd this https://github.com/juju/juju/pull/681 and therefore need your validation to assert my self worth21:06
perrito666:p21:06
davecheneyperrito666: sure21:13
davecheneylooking21:13
davecheneyi like it21:14
davecheneyif we on't write our own logic21:14
davecheneywe don't have to test it21:15
davecheneywin/win!21:15
davecheneyhmm21:15
davecheneyi dunno how to review this21:15
davecheneyi don't know if c.Remove respects the transaction system21:16
davecheneyand if it doesn't what the results will be21:16
davecheneyi'll write as such on the PR21:16
perrito666davecheney: you are right, I somehow just assumed that it was not a problem since we are deleting and not changing (and therefore we do not worry about the main benefit of always work on an updated copy)21:18
* perrito666 automatically looses all sense of self worth and crawls under his desk21:19
perrito666wallyworld_: say my name when you are available plz21:21
wallyworld_perrito666: sure, on a call, so soon21:21
* perrito666 actually needs to start using world clocks to know when people are here21:21
perrito666wallyworld_: davecheney what are your tzs?21:22
davecheneyperrito666: ausstralian eastern time21:22
davecheney+10 (+11) I never remeber which21:23
davecheneyyou're in the same tz as US west coast right21:23
perrito666davecheney: gmt -3 which I believe has 1h diff with west coast21:24
perrito666well my clock puts you both tomorrow21:25
davecheneythat is true, ian is from the future21:26
perrito666that explains a lot21:26
=== dpb2 is now known as dpb1
wallyworld_perrito666: hi, what's happening21:39
perrito666wallyworld_: priv21:40
=== pjdc_ is now known as pjdc
thumpermorning folks22:17
rick_h_thumper!22:17
thumperwallyworld_: check with gccgo before caring about power22:18
menn0thumper: good moaning :)22:36
thumpermenn0: 'ello 'ello22:36
wallyworld_thumper: so just finished eating and looking at this bug, the log attached shows compile errors for power which makes me sad22:50
wallyworld_the version on the test machine is 2 ahead of my gccgo which does compile it ok22:53
wallyworld_ffs22:53
wallyworld_awesome, i upgrade my compiler and it still works locally22:57
waiganimenn0: standup?23:01
wallyworld_\o/ lots of seg faults running tests wil gccgo23:19
wallyworld_with23:19
waiganimenn0: where were you going to make that one char change?23:47
menn0waigani: cmd/jujud/machine.go:54623:47
waiganicheers23:48
menn0the call to net.Listen23:48
wallyworld_davecheney: i think gccgo is broken again - it seems it no longer registers the hooks used in some of the tests, hence the code required to make the tests pass is never run23:53
wallyworld_i think this may have come up before?23:54
wallyworld_i have no idea what to do about it - i can't see that this should be a blocker that stops commits to trunk as it's not our code that is broken23:55

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