/srv/irclogs.ubuntu.com/2016/10/07/#juju-dev.txt

wallyworldi removed the tabular text bit as all user commands like that are tabular00:00
wallyworldno need to mention it every time imho00:00
menn0wallyworld: LGTM. just needs a line wrapping fix.00:01
wallyworldta00:01
wallyworlddamn, i meant to delete that bit00:01
alexisbalrigty all I am off for the day00:04
menn0thumper or wallyworld: https://github.com/juju/juju/pull/639800:07
wallyworldlooking00:13
babbageclunkmenn0: Ugh - I can't get my watcher to see a model I create in my test.00:15
menn0babbageclunk: stink00:16
menn0babbageclunk: do you want me to look at the code?00:16
babbageclunkmenn0: Yes please! just pushing it now.00:17
babbageclunkmenn0: After I create a new model here: https://github.com/juju/juju/commit/94f48e609342c26c494c36155fb0df21608f3624#diff-6734d4932d3aead490d5ec768a7df6b7R51900:19
babbageclunkmenn0: I never see it logged in the changes from here: https://github.com/juju/juju/commit/94f48e609342c26c494c36155fb0df21608f3624#diff-19f910c28876da8a8d94937e102b2ebeR68600:20
babbageclunkmenn0: More importantly, I never see it die after the model.Destroy.00:20
wallyworldmenn0: your pr looks really nice00:22
menn0wallyworld: cheers... I got a bit obsessive :)00:23
wallyworldthat is a good thing :-)00:23
menn0babbageclunk: i've been digging for a bit00:30
menn0babbageclunk: what you've got looks reasonable00:30
menn0still loooking00:30
menn0also looking00:30
menn0:)00:30
babbageclunkThanks!00:31
babbageclunkI think I need to go to bed - maybe it'll be obvious (later) in the morning.00:32
babbageclunkmenn0: ^00:32
menn0babbageclunk: ok, i'll email if I see anything00:32
menn0babbageclunk: good night00:32
babbageclunknight!00:33
* babbageclunk craches00:33
babbageclunkugh00:33
babbageclunkdumb fingers00:33
menn0wallyworld or axw: are the status values shown under machine-status in the yaml status output provider specific?01:09
menn0wallyworld/axw: never mind I figured it out. they're not.01:10
wallyworldmenn0: we map provider specific codes onto those generic status values01:20
menn0wallyworld: yep thanks. I figured out immediately after asking01:24
redirwallyworld: needs more tests, but PTAL and I'll follow up tomorrow: https://github.com/juju/juju/pull/639901:46
rediror axw ^01:46
wallyworldok01:46
redirwallyworld: expect typos... Just got things changed and the currect tests updates. Haven't made a pass for spelling or grammar01:48
wallyworldok, np01:48
natefinchaxw: you around?  I have questions on login/logout tests01:56
axwnatefinch: yes, but about to go into a meeting01:57
natefinchaxw: ok, let me know when you're out01:57
axwnatefinch: finished02:23
natefinchaxw: want to do a hangout?  Might be easier02:24
axwnatefinch: sure02:24
axwnatefinch: https://plus.google.com/hangouts/_/canonical.com/andrew-nate&authuser=102:25
axweek, that doesn't work02:25
natefinchheh02:25
natefinchhttps://hangouts.google.com/hangouts/_/canonical.com/core?pli=1&authuser=202:25
menn0wallyworld: follow on from my earlier PR: https://github.com/juju/juju/pull/640002:49
wallyworldmenn0: ok, just eating will look real soon02:49
menn0wallyworld: no rush02:49
wallyworldmenn0: swap you https://github.com/juju/juju/pull/6401, an easy one03:10
menn0wallyworld: ok03:10
menn0wallyworld: but Brokener is such a great name :)03:11
* wallyworld gets the sick bag03:11
menn0Breakable :p03:12
wallyworldmuch better03:12
menn0CanHazBroken03:12
wallyworldeven betta!!!03:12
wallyworldlove that one03:12
wallyworldwhy was that not a convention03:12
wallyworldCanHazAddress is much better than Addresser03:13
menn0wallyworld: I'll come up with something else03:16
menn0wallyworld: I don't understand your PR :-/03:16
wallyworld:-(03:16
menn0wallyworld: well what came before it03:16
wallyworldmenn0: i like Breakable :-)03:16
menn0wallyworld: i'll probably go with that actually03:16
wallyworldis it the --show-secrets behaviour?03:17
menn0wallyworld: well yes03:18
wallyworldso, by default list-credentials will not prints passwords etc03:18
wallyworldit needs to query the provider to get the schema to know what attrs are secret03:18
wallyworldto query the provider, it needs to look up the cloud details03:18
wallyworldso if the cloud name is invalid, it can't get the credential schema03:19
wallyworldso it errs not to print anything other than a message03:19
menn0wallyworld: but why show creds for a removed cloud at all?03:20
wallyworldbecause that entry is in the file03:20
wallyworldand list-credentials needs to display the contents of the file IMHO03:20
wallyworldmaybe the user wants to add that cloud back later03:21
menn0wallyworld: ok03:21
menn0wallyworld: I'll suggest a simpler wording on the PR03:21
wallyworldok03:21
menn0wallyworld: I think that's what threw me03:21
wallyworldi think what's there gives the necessary info, so if it's just a wording tweak03:22
wallyworldi wouldn't want to not convey that info03:22
menn0how about:03:24
menn0The following clouds no longer exists but credentials for them still exist.03:24
menn0Use --show-secrets to display credentials these credentials.03:24
menn0...03:24
menn0wallyworld: ^03:24
menn0ignoring the doubled up word :-/03:24
wallyworldsgtm03:24
menn0ok03:25
menn0wallyworld: done03:25
wallyworldta03:25
menn0now to land this Brokener change....03:25
menn0:-p03:25
blahdeblahWho wouldn't want a Brokener?03:26
blahdeblahwallyworld: I can't believe you don't like that name03:27
wallyworldcall me fussy :-)03:27
wallyworldi really hate how Go appends "er" to everything03:27
wallyworldsounds horrible most of the time03:27
blahdeblahYeah - I think it should have used "inator" instead03:28
wallyworldor "CanHaz...."03:28
blahdeblahA Brokeinator would totally pwn a Brokener or a CanHazBroken03:29
thumperwallyworld, menn0, axw: https://github.com/juju/juju/pull/640203:37
thumpersomeone03:37
axwlooking03:37
wallyworldanyone03:37
thumper:P03:38
menn0thumper: done03:41
* thumper off to jitz03:45
thumperwill land when I'm back03:45
thumperafter tweaking year03:45
=== thumper is now known as thumper-afk
menn0wallyworld: another look at https://github.com/juju/juju/pull/6400 pls03:58
wallyworldok03:58
menn0now with Breakable03:58
menn0and I caught some tests that needed updating03:58
wallyworldthank goodness03:58
wallyworldmenn0: still looks good, ta04:00
mupBug #1190985 changed: Confusing upgrade-charm and deploy -u behavior <deploy> <docs> <improvement> <upgrade-charm> <juju-core:Expired> <https://launchpad.net/bugs/1190985>04:21
mupBug #1521610 changed: Upgrade hung when moving from 1.18.4.3 to 1.24.7 <canonical-is> <juju-core:Expired> <https://launchpad.net/bugs/1521610>04:21
mupBug #1583683 changed: juju thinks it is upgrading after a reboot <juju-core:Expired> <juju-core 1.25:Won't Fix> <https://launchpad.net/bugs/1583683>04:21
mupBug #1190985 opened: Confusing upgrade-charm and deploy -u behavior <deploy> <docs> <improvement> <upgrade-charm> <juju-core:Expired> <https://launchpad.net/bugs/1190985>04:30
mupBug #1521610 opened: Upgrade hung when moving from 1.18.4.3 to 1.24.7 <canonical-is> <juju-core:Expired> <https://launchpad.net/bugs/1521610>04:30
mupBug #1583683 opened: juju thinks it is upgrading after a reboot <juju-core:Expired> <juju-core 1.25:Won't Fix> <https://launchpad.net/bugs/1583683>04:30
mupBug #1190985 changed: Confusing upgrade-charm and deploy -u behavior <deploy> <docs> <improvement> <upgrade-charm> <juju-core:Expired> <https://launchpad.net/bugs/1190985>04:33
mupBug #1521610 changed: Upgrade hung when moving from 1.18.4.3 to 1.24.7 <canonical-is> <juju-core:Expired> <https://launchpad.net/bugs/1521610>04:33
mupBug #1583683 changed: juju thinks it is upgrading after a reboot <juju-core:Expired> <juju-core 1.25:Won't Fix> <https://launchpad.net/bugs/1583683>04:33
=== thumper-afk is now known as thumper
thumperaxw: I have a question about your review05:46
axwthumper: yup?05:46
thumperaxw: I didn't change the time that RunHook took at all05:47
thumperit was already returning cmd.Wait()05:47
thumperall I do is save the output after the Wait call05:47
thumperbefore we were discarding the output05:47
thumperthat's all05:47
axwthumper: what I'm saying is that the client won't get to see the stdout/stderr of the hook until after it's finished05:47
thumperah05:48
thumperhmm...05:48
axwthumper: oh ... yeah, we weren't setting stdout/stderr05:48
axwhuh, how do we see the output05:48
thumperisn't it the tmux session that is started?05:49
thumperI'm not sure05:49
axwthumper: ahhh yes05:49
axwthumper: never mind me then05:49
thumperhow can I do QA on this05:49
thumperI'd like to check before landing05:49
thumperI don't think I've ever used debug-hooks in anger05:49
axwthumper: umm. I guess create a charm with a config-changed hook that generates some stdout. then deploy it, debug-hooks, and force a config-changed05:50
axwthumper: we don't actually run the hook at all ... we just trap and then you can run it yourself05:50
axwthumper: so my review was garbage05:50
thumperyeah...05:50
thumpermy problem is now that it is almost 7pm on friday05:50
thumperand I have run out of fucks05:51
thumperbut I don't want to land something that could potentially screw tings up05:51
thumperso I need to test it05:51
wallyworldaxw: if you get a chance, could you look at this for me? after you recover from being hassled by thumper https://github.com/juju/juju/pull/640505:52
axwheh05:52
axwwallyworld: sure05:52
wallyworldta05:52
axwthumper: I think it's fine to land as is. a smoke test of debug-hooks would be good, but I think fine to skip in this case05:54
axwthumper: I do think it would be a bit neater to pass Stdout/Stderr in as a param, but not fussed05:54
axw(just so you don't have to reach in via export_test)05:54
thumperI thought that RunHook might have been an interface function05:55
thumperso signature mattered05:55
axwthumper: it is. I meant pass in via the HookContext05:55
thumperah...05:56
thumperok05:56
thumperyeah, that's better05:56
thumperaxw: reworked how to get the combined output, https://github.com/juju/juju/pull/640206:07
axwlooking06:07
thumperso no change to the code for non-test06:07
axwthumper: looks better, thanks. approved06:09
thumperaxw: ta06:09
thumperand on that note06:09
thumperI'm off to start drinking06:09
thumperlater folks06:09
axwenjoy06:10
wallyworldaxw: with error code, you never get a not found from that api - it is always ErrPerm if the model is not there06:29
axwwallyworld: yeah I know, I'm just saying using that function would make it clearer why you're looking for that error06:30
axwwallyworld: alternatively, please add a comment06:30
wallyworldok06:30
wallyworldaxw: also, i was trying to avoid having to add an api. ModelInfoResult does contain the number of machines in the model, but not number of applications. I could just print the number of machines06:31
wallyworldor I guess I could add to the struct and the applications bit won't be there for rc1 and rc206:32
axwwallyworld: could we just make a call to FullStatus?06:33
wallyworldwe could. seems expensive though just to poll for info like that06:34
axwwallyworld: on the client facade06:34
wallyworldi'd prefer not to tbh06:34
axwwallyworld: why? we want to know the model status...06:34
wallyworldthe thing we really want is for the command to block06:35
wallyworldprinting the number of machines and apps is a bonus06:35
wallyworldimho06:35
wallyworldi'm worried about calling full status every 2 seconds06:36
wallyworldmaybe it's nothing to worry about06:36
axwwallyworld: what's your concern?06:36
axwI don't think we should be concerned about getting status frequently06:36
wallyworldsec06:37
wallyworldstatus is fairly heavy weight last time i looked - it did a bit to gather all the info, and then all we would do is throw most of it away here simply to print a machine/app count06:39
wallyworldif we do want to do that, we have a ModelInfo api with machine info06:39
wallyworldwe'd just need to add application count06:40
axwwallyworld: I'm fine with that. and it would be ok if you only showed the machine count for an rc3 server06:40
wallyworldon large models, status used to tke minutes and minutes to run06:40
wallyworldok06:40
axwwallyworld: that's a problem that we need to fix :)06:41
axwif it's still a problem06:41
wallyworldright, but for this bug fix, i'd rather use something lightweight. status might be fixed, but it is still heavy weight i think06:41
axwyep, fair enough06:42
=== frankban|afk is now known as frankban
axwwallyworld: sorry, but Controller.ModelStatus isn't suitable :(   it requires superuser08:12
axwso you wouldn't be able to destroy your own models if you're non super user08:13
wallyworldreally? sigh08:13
wallyworldaxw: yeah, you're right. but i think we should change the perm on that method08:14
wallyworldif you had permissions on the model, you should be able to get its status08:14
axwwallyworld: fine by me. superuser || model-owner08:14
axwor08:14
wallyworldwill have to fix after soccer08:14
axwmodel admin or whatever08:15
wallyworldat least i didn't need a new api08:15
axwwallyworld: yeah. it does mean that rc3 would be brokenish, but I think that's ok08:15
wallyworldi think so too08:15
wallyworldwe can release note it08:15
wallyworldright, off to soccer, bbiab08:16
dooferladvoidspace / babbageclunk: Small branch for review if you have the time: https://github.com/juju/juju/pull/640609:43
babbageclunkdooferlad: looking09:52
babbageclunkdooferlad: lgtm10:04
babbageclunkdooferlad: with a couple of comments10:05
macgreagoirdooferlad: I guess there is no golang way to get the fs reserved space number, rather than a magic 90%. I won't look too hard if you already have. You might assume 5% in the fs, so 10% isn't a bad one.10:11
dooferlad macgreagoir: I am sticking to magic for now because it gets us out of the woods. It would be great to be able to pass in something on the CLI so the user can restrict / expand as wanted or do something based on monitoring the host.10:20
macgreagoirtune2fs -l :-) but we don't want to assume that.10:21
macgreagoirAssuming to reserve twice the fs default as reserved is not so bad.10:22
dooferladmacgreagoir: I was talking about the Juju CLI10:23
dooferladmacgreagoir: I know about the tune2fs thing and leaving some space on the host seems good too.10:24
macgreagoirOh, aye, I mean a way to get a non-magic number.10:24
voidspacedooferlad: as part of provisioning a new machine (cloud-init) we reboot, right?10:42
dooferladvoidspace: I don't think we reboot at the end of cloud-init10:44
voidspacedooferlad: ah10:44
dooferladvoidspace: pretty sure that cloud-init runs on first boot after install.10:45
voidspacedooferlad: we'd like to up the open file limit, but that requires a reboot - unless we get into the image I guess10:45
dooferladvoidspace: you can do that on the fly10:46
dooferladvoidspace: just looking that up10:46
voidspacedooferlad: not inotify user_watches or max_instances10:46
dooferladvoidspace: sysctl -w fs.file-max=10000010:47
voidspacedooferlad: ah, ok - interesting I'll try it10:47
voidspacedooferlad: we've been looking at setting it in /etc/security/limits.conf which requires a reboot10:47
dooferladvoidspace: I don't know which file in /etc/ wins on reboot. http://askubuntu.com/questions/594765/ubuntu-14-04-cant-get-past-4096-max-open-files-for-non-root-user has more info10:51
voidspacedooferlad: thanks10:51
voidspaceappreciated10:51
voidspaceooh, agent lost on 11 machines - I think I just hit the limit10:53
voidspacepast 20 containers though10:53
voidspaceah no, they're back - just the machine grinding to a halt I think10:53
voidspaceI'm at 2510:54
perrito666Morning10:54
voidspaceperrito666: morning!10:56
voidspaceat 30 containers I ran out of disk space11:07
rogpeppe1this PR introduces a new field in api.Info, SNIHostName. reviews appreciated, thanks. https://github.com/juju/juju/pull/640711:53
=== rogpeppe1 is now known as rogpeppe
wallyworldaxw: i updated the api server to allow model admins or owners to make that status call. rc3 servers will not break the destroy as it will just print a message and continue without blocking12:05
perrito666K doctor appointment bbl12:33
perrito666well gotta love when doctors use old houses as practices.... lte wont go through walls13:41
rick_h_voidspace: ping for standup14:01
voidspacerick_h_: omw14:01
rogpeppecould someone review this please? i've got another one backed up behind it. https://github.com/juju/juju/pull/640714:27
alexisbperrito666, ping14:45
rick_h_katco: can you peek at rogpeppe's link ^ please?14:46
katcorick_h_: sure14:46
babbageclunkvoidspace, dooferlad, katco``: anyone feel like a review? https://github.com/juju/juju/pull/640814:46
rick_h_ty!14:46
babbageclunkd'oh14:47
katcorogpeppe: is this fixing a bug?14:47
alexisbbabbageclunk, that is why I was pinging perrito666 :)14:51
natefinchrick_h_: btw, I forgot that updating the featuretests for the logout stuff was actually very easy, so I just did it.  landing now15:00
rick_h_natefinch: <315:00
rogpeppekatco: no, it's an enhancement to make it easier to deal with controller with public certs15:02
natefinchahh crap, realized I need to get the change to persistent-cookiejar to land before the juju core stuff will work, oops.15:17
natefinchrogpeppe: I made the suggested changes to persistent cookiejar, in a new PR from a better named branch: https://github.com/juju/persistent-cookiejar/pull/18/files15:23
rogpeppenatefinch: ok, looking15:23
rogpeppenatefinch: swap ya! https://github.com/juju/juju/pull/640715:23
katcorogpeppe: natefinch: i am also looking at this ^^15:23
rogpeppei need two reviews to land it :)15:24
natefinchrogpeppe: deal15:24
rogpeppenatefinch: i'm also working on getting people on board for general use of my new retry package API... (which I think is actually kinda cool :-]) https://github.com/juju/utils/pull/24515:25
natefinchrogpeppe: we really need to move juju/utils/clock to a top level repo15:26
rogpeppenatefinch: LGTM15:27
natefinchrogpeppe: thanks15:27
rogpeppenatefinch: yeah, probably15:27
rogpeppenatefinch: although i don't think it's a big issue15:27
natefinchrogpeppe: utils churn has been an issue in the past... backporting stuff in utils often requires one-off ugly branches and godeps.15:28
natefinchrogpeppe: newWebsocketDialer0?15:31
natefinchrogpeppe: are dialwebsocket and dialapi unchanged?  They moved, so it's hard to see the diff.15:36
rogpeppenatefinch: they're pretty similar if not entirely unchanged. sorry about the move, but they really belong together.15:36
natefinchoh, no, I see some diffs15:36
natefinchmostly unchanged though15:37
rogpeppenatefinch: i thought that "newWebsocketDialer0" vs newWebsocketDialer is better than the arbitrary newWebsocketDialer vs createWebsocketDialer15:38
rogpeppenatefinch: i often use "0" as a "this is different but essentially the same thing" suffix15:38
katcorogpeppe: review up15:42
rogpeppekatco: ta!15:42
katcoi really dislike how comments break up the code... makes it really hard to read reviews15:43
rogpeppekatco: "We need to instead take this in as a dependency to the call-chain." - does that mean every caller to NewServer has to manually wire that dependency up?15:43
katcorogpeppe: that bubbles up to Open(...) doesn't it?15:44
rogpeppekatco: oh yes, sorry, it does... every call to Open then15:45
katcorogpeppe: it would fit nicely into DialOpts i think15:45
katcorogpeppe: yes, that is what it means15:45
rogpeppekatco: i really feel like it's very much an internal implementation detail15:45
katcorogpeppe: if it were, then the code you're writing against it wouldn't have to patch a global variable15:45
rogpeppekatco: it's an internal test15:46
katcorogpeppe: tests are just code15:46
rogpeppekatco: it's allowed to depend on internal implementation details15:46
rogpeppekatco: for me, not exposing it is about encapsulation of implementation detail15:46
rogpeppekatco: if we expose it, we can't change it any more15:47
katcorogpeppe: sure we can, you just pass in something different15:47
rogpeppekatco: clients become dependent on that particular detail of the implementation15:47
katcorogpeppe: if it were an implementation detail, the code you've written wouldn't have to patch out a global variable15:47
rogpeppekatco: ok, we can't change it without changing the clients15:47
katcorogpeppe: yes, but the code you've written shows that different clients have different needs15:48
katcorogpeppe: this is fundamental to IoC15:48
rogpeppekatco: the test in question is a unit test. i think it's legimate for unit tests to depend on internal details that we would not want to expose outside the package.15:48
katcorogpeppe: a test is just code, and in this case it's exposing a design flaw15:49
rogpeppekatco: i don't think all tests should be external tests. that way lies hideously complex APIs15:49
katcorogpeppe: i think that decision was already made15:50
rogpeppekatco: really? *strictly* external tests?15:52
katcorogpeppe: yeah15:52
rogpeppekatco: i mean, i know we define tests as if they were external, but i didn't realise we weren't allowed to test any internal implementation detail directly15:53
katcorogpeppe: i went through that pain and came out the other side agreeing with it a little more. i haven't run into a counter-example, but i don't doubt they're out there15:53
rogpeppekatco: if that's really the case then i give up. i think it's a path to ruin.15:53
katcorogpeppe: :( i don't know how to respond to that. i didn't like it either, but i pushed through15:54
rogpeppekatco: so you really think we should add a field like this to api.DialOpts?15:55
rogpeppeDialWebsocket func(cfg *websocket.Config, opts DialOpts) func(<-chan struct{}) (io.Closer, error)15:55
katcorogpeppe: i am less sure about how it gets passed in, but DialOpts does look like the right spot as a place to specify "options to dial"?15:55
rogpeppekatco: even though there are >70 instantiations of DialOpts in the code and they'll all need to change and websockets are just an implementation detail of the API that we might want to change in the future?15:56
katcorogpeppe: how about this? create a 2nd function that calls the existing one with the correct function passed in?15:56
rogpeppekatco: ?15:57
rogpeppekatco: tbh rather than adding that i think it would be preferable to do a more integration-style test with a real server (but that's hard with code that relies on officially signed certs)15:58
katcorogpeppe: i.e. rename Open => OpenWithWebsocketDialer(..., func()) and then modify Open to call OpenWithWebsocketDialer with the correct func?15:58
rogpeppekatco: why would you want to export that function?15:58
katcorogpeppe: integration tests can be done in the top level featuretests/ but not anywhere else15:58
rogpeppekatco: that still exposes an implementation detail that really should be hidden inside the api package15:59
rogpeppekatco: websockets are not essential to the api abstraction15:59
katcorogpeppe: the code you have written shows that it is not an implementation detail15:59
rogpeppekatco: you're saying that tests aren't allowed to test specific implementation details AFAICS15:59
rogpeppekatco: and i disagree. tests of specific implementation details are often the ones that give you most confidence in the higher level code.16:00
katcorogpeppe: they are certainly free to test the behavior, but if that behavior need be modified by patching out global variables, that's a design smell and proves that it's not an implementation detail16:00
rogpeppekatco: you're saying they're free to check externally visible behaviour but nothing else.16:01
katcorogpeppe: yes, the behavior of the thing you're testing, not how it's implemented16:01
rogpeppekatco: i think there's room for both approaches. we often write tests knowing about the structure of the code we're testing.16:02
rogpeppekatco: because otherwise you would never get decent test coverage and you'd write lots of redundant tests.16:02
rogpeppekatco: i think this is that kind of case.16:03
rogpeppekatco: patching out global variables is a smell, yes, but so is exposing abstraction-breaking details as part of your public API.16:04
rogpeppekatco: as usual, there's a trade-off to be made.16:04
katcorogpeppe: i've heard this argument a lot -- that it breaks encapsulation -- yes, by design it does. the code you've written has shown that it's a detail that should not be encapsulated16:04
rogpeppekatco: you're assuming that a package's tests are exactly the same as any other client of the code.16:05
rogpeppekatco: but as i've tried to say, they really aren't - they are necessarily privy to details of the code structure.16:06
katcorogpeppe: not the same, but it is one of the first consumers16:06
rogpeppekatco: that's very true, and it's great to write tests as much as possible to be strictly external.16:06
rogpeppekatco: but i don't think that it's necessary to have a hard and fast rule there.16:07
rogpeppekatco: in the end what really counts is the overally simplicity and maintainability of the code.16:07
rogpeppes/overally/overall/16:07
katcorogpeppe: definitely16:07
rogpeppekatco: and a big part of "simplicity" is simplicity of exported APIs.16:08
katcorogpeppe: but, we tried the other way. our tests are extremely brittle, so a decision was made and we must abide by it16:08
katcorogpeppe: no, that's "easy". simplicity is a different beast16:08
rogpeppekatco: no, simple APIs are not "easy"16:08
rogpeppekatco: FWIW making this an exposed external thing is likely to make code more brittle not less16:09
katcorogpeppe: there are valid arguments against ioc, but i don't think lack of simplicity is one of them. lack of ease is i think16:09
rogpeppekatco: ioc?16:09
katcorogpeppe: inversion of control16:10
katcorogpeppe: dependency injection16:10
katcorogpeppe: please don't take this as dismissive, but i could sit here and enjoy this conversation all day, but i need to get to some other reviews/code. that's my review, i think we have decisions to back it. we can appeal to someone (?) if that helps16:11
rogpeppekatco: for me, i have the most problem with exposing abstraction-breaking details in the API16:11
rogpeppekatco: thanks for the review16:11
katcorogpeppe: ta for the conversation16:11
perrito666alexisb: sorry for the delay I was at the doctor being yelled at because I am fat and lazy16:12
alexisbperrito666, :)16:13
alexisbthose darn doctors always concerned about your health16:13
alexisbperrito666, I was going to ask you to review babbageclunk PR16:13
perrito666alexisb: if still ther eill be glad to16:14
babbageclunkperrito666: It's still there: https://github.com/juju/juju/pull/640816:27
babbageclunkalexisb: I haven't sorted out the http.Transport leaks yet - should I just make a binary now and push it to the OIL CI without a fix for that.16:28
babbageclunk?16:28
perrito666babbageclunk: reviewed, lgtm but I would love to have a second pair of eyes there since it is a critical path16:39
babbageclunkperrito666: Thanks - ok, I'll ping Menno about it, he knows that code.16:40
=== frankban is now known as frankban|afk
natefinchsinzui: CI seems broken... it didn't post that my build had failed and it's not taking new builds, AFAICT.17:01
sinzuinatefinch: ci? I think you mean the bot lander.17:21
natefinchsinzui: it's all CI to me17:22
natefinchsinzui: but yes17:22
sinzuithe bot is a third part tool that uses git. Ci Launchpad, tarfiles and our machines.17:23
sinzuinatefinch: I am looking for the job the bt started, sometimes it fails so quickly ti cannot call home. If so I will just requeue17:23
natefinchsinzui: it should have failed to compile, I honestly didn't look at the output since I realize it would fail before I even saw it fail17:24
sinzuioh, it doesn't compile17:24
sinzuinatefinch: yes, the compilation error prevented the call back. http://juju-ci.vapour.ws/view/Juju%20Ecosystem/job/github-merge-juju/9452/console. When this happens Add "Build failed: Tests failed" in a comment. That will let you requeue17:26
natefinchoh neat, thanks17:26
sinzuinatefinch: I think I fixed this scenaio. if Juju fails to build, It will call back. I will need to watch a few runs to be sure though17:29
natefinchsinzui: even better.  Thanks again. always glad to help break things in new and interesting ways.17:29
sinzui:)17:30
redirsmallish review anyone? https://github.com/juju/juju/pull/6399 PTAL...18:23
rick_h_katco: ping, can I bug you please?18:25
katcorick_h_: sure thing18:32
rick_h_katco: can you join https://hangouts.google.com/hangouts/_/canonical.com/rick?authuser=1 please18:34
katcorick_h_: this might help: https://github.com/juju/juju/blob/master/cloud/clouds.go#L2418:58
katcorick_h_: we generate this file https://github.com/juju/juju/blob/master/cloud/fallback_public_cloud.go#L818:58
katcorick_h_: off the yaml file18:58
katcorick_h_: so if go generate was not run when we built rc3, the file would be stale; not sure if i got the use-case/problem completely straight, but that seemed like a detail that might be important18:59
rick_h_katco: yea, that's 'duplication' in the looks of what's in the code, but it's generated so that's less actual dupe than it seems I guess19:00
katcorick_h_: right... the idea is to bring that information in at compile time rather than run-time by reading the yaml file19:01
rick_h_katco: yea, just not sure if that's the peachiest thing imo. I understand folks think different there though so understand19:02
katcorick_h_: moving down the chain of execution is usually better when you can do it. removes chance of errors at runtime, cost of reading every time, etc.19:02
natefinchrick_h_: thoughts on what I should take next?19:12
rick_h_natefinch: pick your favorite critical please19:13
rick_h_natefinch: the streams one might be interesting but up to you19:13
natefinchrick_h_: which one is the streams one?19:14
rick_h_natefinch: generate-tools, second down on the right19:14
natefinchrick_h_: I have no idea how the generate-tools stuff works, but I'm happy to look into it19:15
* redir lunches19:59
=== beisner- is now known as beisner
=== xnox_ is now known as xnox
=== kragniz1 is now known as kragniz
redirmust be friday afternoon:)22:32
alexisbredir, heh23:36
redir:)23:36
perrito666god people, on irc so late on a log weekend friday? you have no life :p23:40
alexisb:)23:41

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