/srv/irclogs.ubuntu.com/2013/07/19/#juju-dev.txt

davecheneywallyworld: yeah, i plan to day00:22
davecheneyjust waiting for a smoke test build to pass00:23
wallyworlddavecheney: thumper and i had a couple of fixes00:23
wallyworldis it too late?00:23
davecheneywallyworld: it is not too late00:24
davecheneyremember my tagging score card00:24
davecheney0 for 200:24
wallyworlddavecheney: it would be great if you could +1 this then. you're the only person besides thumper who is around to ask sorry. https://codereview.appspot.com/11493043/00:25
davecheneyno wories00:25
wallyworldthanks. do you have a link to the release notes?00:26
davecheneyhttps://docs.google.com/a/canonical.com/document/d/1ZBV6m0D1cfJQGoHW7EzJEc2qZeJFR38teHM_4OiYkeM/edit#00:26
wallyworldi'll add some shit00:26
davecheneycapital!00:26
davecheneyenvirons/azure isn't in environs/all00:29
davecheneybut it is leaking into jujud somewhere00:29
davecheneyi need to fix that quickly00:29
thumperdavecheney: in my trunk, azure is in all00:52
davecheneyyeah, for some reason I couldn't see it last night00:52
davecheneyi'll have to submit a branch to remove it00:52
thumper+1 trivial from me00:52
thumperbut I'll do it when you have it up00:53
davecheneywallyworld: LGTM on your branch00:53
davecheneyooops, sam is up00:53
davecheneyafk for a few mins00:53
wallyworlddavecheney: thanks, will land00:53
sidneithumper: should i flip that mp to approved? iiuc there's a release about to be cut so maybe wait until after that?01:09
davecheneyhttps://codereview.appspot.com/1155704301:11
davecheneywallyworld: thumper could I give some love for this change ?01:12
wallyworldsure, looking01:12
davecheneysidnei: sure, check it in01:12
sidneidavecheney: oh, apparently i don't have perms. do the honors? https://code.launchpad.net/~sidnei/juju-core/mongo-2.4-compat/+merge/17565301:13
davecheneysidnei: screw that, i'll give you perms01:13
sidnei /o\01:13
sidneiok :)01:13
davecheneytry now01:14
sidneidone01:14
sidneior. slow launchpad is slow.01:15
sidneinow for realz.01:15
bigjoolsdavecheney: I had a patch from agl to handle tls renegs... can you take a look please?01:17
davecheneybigjools: FUCKING A01:17
bigjoolsyou can say that if it works01:17
bigjoolscheck your email01:18
davecheneybigjools: please send01:18
davecheneygot it01:18
davecheneybigjools: speaking of azure signup01:18
davecheneydid some dude try to call your to welcome you to the azure failmy01:19
davecheneyfamily01:19
bigjoolsusing what number? *cough*01:19
thumperwallyworld: hangout?01:20
davecheneyi had to give a mobile number so they send me the activation code01:20
wallyworldok01:20
davecheneyi guess that is how they got my phone number01:20
davecheneyi did use my @canonical email01:20
davecheneymaybe this is VIP treatment01:20
bigjoolsummmm maybe I did that01:25
bigjoolsnever got called01:25
bigjoolsI can't remember what I did yesterday let alone 2 months ago01:25
davecheneygood point01:25
davecheneybigjools: patch didn't apply cleanly, but i'll hack it in manually01:26
bigjoolsok01:26
bigjoolsthat's interesting01:26
bigjoolswhat is he hacking on...01:26
wallyworldthumper: url?01:27
thumperhttps://plus.google.com/hangouts/_/e105bdb56dcdc0f23d38c9cdafc18eea12967111?hl=en01:27
davecheneyno idea, the tls package hasn't received any updates for a looooong time01:27
davecheneyI do know that google have their own internal version of Go01:28
davecheneybut this isn't a fork01:28
davecheneyit's just the way they managage external source into the big mega google/ repo01:28
davecheneyso possibly he was working from that copy01:28
davecheneyanyhoo01:28
bigjoolsdavecheney: notice he said it's not suitable for upstream, so we still have a problem01:30
davecheneyyup01:30
bigjoolsif they are that against it, fixing go-curl is the only realistic option01:31
davecheneysidnei: thouest forget the commit message01:31
davecheneybigjools: one elephant at a time01:31
davecheneyok, tagging time02:21
bigjoolsdavecheney: did you get it working?02:27
davecheneybigjools: not yet02:29
davecheneyit's next on my list after tagging 1.11.302:29
bigjoolskk02:29
wallyworlddavecheney: after a spurious bit failure, my last branch for release finally merged02:29
davecheneywallyworld: what is the push location for the _real_ trunk now ?02:29
wallyworlds/it/bot02:29
wallyworld~gobot/juju-core of something i think02:30
davecheneylucky(~/devel/juju-core) % bzr push lp:~gobot/juju-core02:30
davecheneybzr: ERROR: Invalid url supplied to transport: "lp:~gobot/juju-core": No such person or team: gobot02:30
davecheneyahh, hyphen02:31
wallyworldgo-ot sorry02:31
wallyworldi think you also need to add credentials02:31
wallyworldnot sure02:31
davecheneylucky(~/devel/juju-core) % bzr push lp:~go-bot/juju-core/trunk02:31
wallyworldthere's an email somewhere perhaps, i'll try and find it02:31
davecheneybzr: ERROR: Cannot lock LockDir(chroot-76960720:///~go-bot/juju-core/trunk/.bzr/branch/lock): Transport operation not possible: readonly transport02:31
wallyworldyeah, you need credentials02:32
davecheneyjam said that my key shuld be there02:32
davecheneytey fook02:32
wallyworldno, the push needs the correct form of the url02:32
wallyworldbzr+ssh://.... or something i think02:32
davecheneylucky(~/devel/juju-core) % bzr push bzr+ssh://bazaar.launchpad.net/~go-bot/juju-core/trunk02:33
davecheneybzr: ERROR: Cannot lock LockDir(chroot-92566480:///~go-bot/juju-core/trunk/.bzr/branch/lock): Transport operation not possible: readonly transport02:33
wallyworlddavecheney: bzr+ssh://go-bot@bazaar.launchpad.net/~go-bot/juju-core/trunk02:34
wallyworldi think02:34
bigjoolslp:juju-core should work02:34
wallyworldbigjools: it's protected02:34
bigjoolsoh you need to use go-butt02:35
davecheneybigjools: is that like a ro-butt ?02:35
bigjoolsyou could bzr lp-login first then02:35
bigjoolsthen push to lp:juju-core02:36
wallyworldi didn't know you could do that02:36
davecheneylucky(~/devel/juju-core) % bzr lp-login02:36
davecheneydave-cheney02:36
davecheneylucky(~/devel/juju-core) % bzr push bzr+ssh://bazaar.launchpad.net/~go-bot/juju-core/trunk02:36
davecheneybzr: ERROR: Cannot lock LockDir(chroot-67593168:///~go-bot/juju-core/trunk/.bzr/branch/lock): Transport operation not possible: readonly transport02:36
davecheneylucky(~/devel/juju-core) % bzr push lp:juju-core02:36
davecheneybzr: ERROR: Cannot lock LockDir(chroot-92087248:///%2Bbranch/juju-core/.bzr/branch/lock): Transport operation not possible: readonly transport02:36
davecheneyoh, do I have to lp-login as go-but ?02:36
wallyworlddavecheney: did you try my suggestion above?02:36
wallyworldadd the go-bot@02:37
davecheneywallyworld: yes i tried your suggestion02:37
davecheneyoh, not that one02:37
davecheney<< tit02:37
davecheneylucky(~/devel/juju-core) %  bzr push bzr+ssh://go-bot@bazaar.launchpad.net/~go-bot/juju-core/trunk02:38
davecheneyPermission denied (publickey).02:38
davecheneyvery close now02:38
davecheneyConnectionReset reading response for 'BzrDir.open_2.1', retrying02:38
davecheneykey isn't actually there02:38
wallyworldoh, your key is not registered?02:38
wallyworldno, it's not, i just checked02:39
davecheneywallyworld: i don't know how to answer that02:40
davecheneynothing did not work before02:40
wallyworlddavecheney: see https://launchpad.net/~go-bot02:40
wallyworldi can't see your key02:40
davecheneyok, i'll fix it02:42
davecheneyok, how do I fix it ?02:42
davecheneyie, nothing didn't work before hand02:42
davecheneylooks like I need to login as go-bot and rummage around02:43
wallyworldi don't think i have perms to add your key02:57
wallyworldmaybe ask in -ops02:58
thumperdavecheney: If I use go.build package, build.ImportPath(".", 0) and use that in a test, will it always import the directory I think it should?02:58
davecheneythumper: not 100% sure02:59
davecheneynever tried that02:59
davecheneyby rights it shuld use whatever the value of $(pwd) is02:59
davecheneybut that can sometimes be surprising02:59
thumperhmm...03:03
thumperI want to write a test to make sure people don't mistakenly expand the dependencies of a package03:03
thumperso I want to get the list of imports for the current package03:04
thumperit seems to work03:04
thumperbut the "." makes me hessitant03:04
thumperalso annoying if I want to put the test in a helper package03:04
thumperin python there is __file__03:04
thumperanything like that in go?03:04
davecheneywhat about this03:06
davecheneygo list -f '{{ .Imports }}' $PKG03:07
davecheneythumper: you want build.ImportPath("launchpad.net/juju-core/cmd/juju", 0) or something03:08
thumperthat doesn't work03:09
thumper&os.PathError{Op:"open", Path:"launchpad.net/juju-core/agent", Err:0x2} ("open launchpad.net/juju-core/agent: no such file or directory")03:09
davecheneyok03:10
davecheneyyou are right to be concerned about ".'03:10
thumperit seems to work, but I'm not convinced it is always going to work03:11
davecheneyrightly so03:12
thumperhangon,03:13
thumperthink I have it03:13
thumperdavecheney:03:39
thumperfunc (*deps) TestPackageDependencies(c *gc.C) {03:39
thumperc.Assert(03:39
thumperFindJujuCoreImports(c, "launchpad.net/juju-core/agent"),03:39
thumpergc.DeepEquals,03:39
thumper[]string{"log", "state", "version"})03:39
thumper}03:39
thumperwhaddaya think?03:39
* thumper proposes03:43
bigjoolswallyworld: is that cost and constraint evaluation done in the core code or each provider?04:26
bigjools(as opposed to defining the structs I mean)04:27
wallyworldumm. core code i think, let me check04:27
bigjoolsthat's cool if so04:27
wallyworldyeah, core code04:28
wallyworldthere's glue in each provider to plug in the data04:28
wallyworldand the core code does the rest04:28
wallyworldso the common logic is all outside the providers04:28
bigjoolsnice04:29
bigjoolsso we just define the structs and Robert's your father's brother04:29
wallyworldthat's the idea more or less04:30
wallyworldthe openstack and ec2 implementations give some idea of what to do04:31
bigjoolsyeah04:37
bigjoolswallyworld: oh, does cpupower have any meaning outside of ec2?04:37
wallyworldbigjools: nope04:38
bigjoolswallyworld: what should it be set to, anything?04:39
bigjoolsas long as it's the same for each type I guess04:39
wallyworldno, don't set it. it will be ignored04:39
bigjoolsah ok04:39
bigjoolsI used a ¢ symbol in a comment and now I get this "illegal UTF-8 encoding" compile error, what do I do?05:22
=== tasdomas_afk is now known as tasdomas
davecheneybigjools: delete that character ?06:03
davecheneydid your editor put a BOM at the top fo the file ?06:03
bigjoolsnot that I can tell06:03
davecheneylike this ? http://play.golang.org/p/MHE29ZM7Ln06:04
bigjoolsit was working ok until I did a go fmt06:04
davecheneyoooh interesting06:04
davecheneyis the \c all mangled as well ?06:04
bigjoolsit now looks like: ¢06:05
bigjoolsif I remove the  Go bitches at me06:05
davecheneybigjools: can you provoke the problem in another editor ?06:07
* bigjools tries again06:07
davecheneyor can you send me the file pre fmt ?06:07
bigjoolsI used vim to make a basic file06:09
bigjoolsit works06:09
bigjoolspost format it works06:09
dimitern¢ looks like latin1 encoding interpreted as utf-806:10
bigjoolsexcept it added that Â06:10
bigjoolshmmm vim adds it later06:11
bigjoolswith no fmt06:11
* bigjools sighs heavily06:11
jtvdimitern: the other way around, no?06:14
dimiternjtv: ah, yes right06:14
dimiternif it was interpreted as utf there will be <?> things inside06:15
dimiternfwereade_: ping07:02
dimiternrogpeppe: hey07:04
rogpeppedimitern: yo!07:04
dimiternrogpeppe: so about SetAgentAlive again07:05
rogpeppedimitern: okay...07:05
dimiternrogpeppe: did we make a way to expose the same functionality through the api connection?07:06
dimiternrogpeppe: i think that was what we decided last07:06
rogpeppedimitern: i can't entirely remember if we decided to make it explicit or implicit07:06
rogpeppedimitern: both have advantages and disadvantages07:06
dimiternrogpeppe: it was something like auto start a pinger on connect07:06
rogpeppedimitern: yeah, that's the implicit approach07:07
rogpeppedimitern: how do we currently deal with the machine nonce?07:07
dimiternrogpeppe: we set it at provisioning time and can verify it in the agent07:08
rogpeppedimitern: yeah, but do we deal with it in the API at all yet?07:08
dimiternrogpeppe: i don't think so, let me check07:08
dimiternrogpeppe: no07:09
dimiternrogpeppe: why do we need that?07:09
dimiternrogpeppe: i was thinking to do the api migration in steps07:10
dimiternrogpeppe: machiner doesn't need it, only the MA and provisioner07:10
rogpeppedimitern: that's the thing that ensures we don't have two machine agents connected at the same time07:10
dimiternrogpeppe: how so?07:10
rogpeppedimitern: isn't that the whole reason for the nonce?07:11
rogpeppedimitern: my suggestion is that we integrate the nonce with the login request, and start the pinger then.07:12
dimiternrogpeppe: expand please07:12
rogpeppedimitern: currently when you log in, you provide an entity tag and password, right?07:13
dimiternrogpeppe: right07:13
rogpeppedimitern: so it's only at that stage that the API server knows who's at the other end07:14
rogpeppedimitern: we need to know who's at the other end if we're to start a pinger07:14
rogpeppedimitern: but we don't want to start a pinger if an agent comes up with the wrong nonce (because then they'll immediately go away again)07:15
rogpeppedimitern: so we could add the nonce to the login request, so the login will fail without the correct nonce.07:15
rogpeppedimitern: (for machine agents only)07:15
TheMuemorning07:15
rogpeppedimitern: and then start the pinger on a successful login request (and stop it when the connection goes away)07:16
dimiternrogpeppe: hmm07:16
dimiternrogpeppe: so add an optional field to apiinfo?07:16
dimiternrogpeppe: that's alright, but how can juju status get this to show it (i.e. AgentAlive) ?07:17
rogpeppedimitern: we can still have an API AgentAlive call07:17
dimiternrogpeppe: but for the CLI/clients only07:18
rogpeppedimitern: probably, yes07:18
dimiternrogpeppe: and assuming we can start the same pinger out-of-order to get the already running one, should be fine07:18
rogpeppedimitern: i don't understand that07:19
dimiternrogpeppe: i mean the pinger we start on MA login will be running, and then AgentAlive tries to find whether it's running, but it will be in another process perhaps07:20
rogpeppedimitern: that's always been the case07:20
dimiternrogpeppe: so it's fine then07:20
rogpeppedimitern: yeah07:20
rogpeppedimitern: you don't even need a Pinger to ask if something's alive07:21
dimiternrogpeppe: ok then, so the machiner can be simplified a bit07:22
dimiternrogpeppe: sorry, the MA actually07:23
rogpeppedimitern: yeah07:23
dimiternrogpeppe: no need to call CheckProvisioned - if it's not we won't be able to connect07:23
rogpeppedimitern: yup07:23
dimiternrogpeppe: but the error was to be a different one from "login failed", so it won't retry07:23
rogpeppedimitern: good point, yes07:24
dimiternrogpeppe: I think I can see it now, the CL I mean to enable all that07:25
rogpeppedimitern: great07:25
dimiternrogpeppe: if you don't mind I'll try it out and propose it for discussion07:25
rogpeppedimitern: sounds good07:26
dimiternrogpeppe: as a first step towards api -> machiner07:26
rogpeppedimitern: i'm not sure there's any problem with LongWait being 10 seconds BTW07:29
rogpeppedimitern: can you think of one?07:29
dimiternrogpeppe: why so long?07:29
dimiternrogpeppe: why not 1h then? :)07:29
rogpeppedimitern: because some it's important in some cases as a worst case; and it's not long to wait for a failed test.07:30
rogpeppedimitern: it will never happen when tests pass, so it doesn't impact anything in the usual case07:30
dimiternrogpeppe: as long it's only a failure timeout then ok07:31
rogpeppedimitern: that's the whole point of LongWait, isn't it?07:31
dimiternrogpeppe: i assumed so yes, but in some places it seemed less clear07:31
rogpeppedimitern: anywhere it's part of the test-passing path, i'd like to know07:32
dimiternrogpeppe: it should be easy enough to spot - running go test before and after the branch changes a few times and comparing times07:33
rogpeppedimitern: yeah, change it to 1 minute and see which tests take longer07:33
dimiternrogpeppe: have you tried that yourself?07:34
rogpeppedimitern: no - i'll do it now07:34
* TheMue hates import cycles07:40
rogpeppedimitern: useful test - thanks for the suggestion. it found two places we were using LongWait inappropriately07:51
dimiternrogpeppe: nice!07:52
rogpeppedimitern: make that three places - there were two related tests in state that were doing it wrong07:57
dimiternrogpeppe: i'm glad i asked you to do this test then07:58
rogpeppedimitern: me too07:58
rvbaHi guys, would someone be available for a second review of https://codereview.appspot.com/11524044/ ?08:02
dimiternrvba: I'll take a look, but it doesn't seem there is a first review there08:06
rvbadimitern: yeah, the first review is here https://codereview.appspot.com/11433044/.  You know, I've got this problem that each time I run lbox propose it creates another MP.08:08
rvbadimitern: thanks!08:08
dimiternrvba: you could probably just do bzr push and publish your comments manually from rietveld08:09
dimiternrvba: the only drawback is you won't see the updated diff on rietveld i guess08:10
rvbadimitern: well, I think I'll live with the creation of an additional MP each time I run "lbox propose" :)08:10
dimiternrvba: if you rebuild lbox from tip using go 1.1.2 (or whatever the latest release is) I think you should be fine - that's what I did and it works.08:14
rvbadimitern: okay, I'll try that.08:14
dimiternrvba: but just in case it doesn't better keep a copy of the lbox binary around as backup08:15
rvbasure08:15
dimiternrvba: and also set a separate $GOPATH for go 1.1.2, so it'll be easier to switch back to your current go version08:15
rvbaWell, because of the go-curl problem I'm sort of stuck with the old version for now.08:16
dimiternrvba: ah..08:16
dimiternrvba: reviewed08:17
rvbata08:17
=== racedo` is now known as racedo
mgzmornin'09:11
dimiternmgz: moin09:11
dimiternrogpeppe: so far so good - changed OpenAPIAs and all relevent code to use machine nonce for MA logins, tests pass, only need to add the pinger and will propose09:13
rogpeppedimitern: cool09:15
rogpeppedimitern: final look? https://codereview.appspot.com/11529043/09:21
dimiternrogpeppe: sure09:22
* TheMue removed cyclic dependency, but our packages are sometime really tight entangled09:22
* fwereade_ out for breakfast, bbiab09:24
rogpeppeTheMue: what was the issue in this case?09:28
dimiternrogpeppe: reviewed09:31
TheMuerogpeppe: I'm trying to extract the sync tools so that they are better reusable09:32
TheMuerogpeppe: and my wish has been environs/tools09:33
TheMuerogpeppe: sadly I'm using the EC2 HTTP storage reader, and environs/ec2 uses environs/tools. *rofl*09:34
rogpeppedimitern: replied09:37
rogpeppedimitern: (and i'm going to submit it)09:37
rogpeppedimitern: did jam tell you anything about his plans around upgrade worker (in particular the role of his upgrade handler stuff)?09:40
rogpeppefwereade_: ping09:45
dimiternrogpeppe: not much that I remember off hand09:55
rogpeppedimitern: ok, i'll figure it out09:56
dimiternrogpeppe: it model is similar to notifyWorker09:56
rogpeppedimitern: hmm, that seems a bit odd - isn't notifyWorker structured like that because it's generic?09:56
rogpeppedimitern: i think the upgrader is the same in every case, isn't it?09:57
rogpeppedimitern: i'm a bit concerned that we're taking time to refactor significant logic that really doesn't need refactoring at this stage09:57
rogpeppedimitern: when i tried to estimate the time to implement the API, i did not include time to refactor all the client code too09:58
dimiternrogpeppe: i'm not sure, but i think the idea is to refactor the upgrader so it can use the notifyworker, like the machiner09:59
rogpeppedimitern: that's a different thing.10:00
fwereade_rogpeppe, pong10:01
rogpeppefwereade_: i was just wondering why params.AgentTools flattens out all the version fields10:02
fwereade_rogpeppe, I'd be +1 on changing that10:02
fwereade_I asked jam, he said it basically seemed like a good idea at the time but didn't have strong feelings either way10:03
fwereade_dimitern, rogpeppe: fwiw I am -1 on spending time making upgrader a handler-style worker10:03
rogpeppefwereade_: it seems like an embedded version.BinaryVersion would be more obvious10:03
fwereade_dimitern, rogpeppe: it's got 2 things to handle10:03
rogpeppefwereade_: me too10:03
rogpeppefwereade_: i'm not even sure it'll work well using NotifyWorker10:04
fwereade_rogpeppe, ah, we're on go 1.1 now, so marshalling embedded fields works properly, right10:04
fwereade_rogpeppe, hey wait10:04
rogpeppefwereade_: no we're not10:04
fwereade_rogpeppe, Upgrader... *is* that watching 2 things? oh yes it does the download stuff10:04
fwereade_rogpeppe, we're not?10:04
fwereade_rogpeppe, I thought we had everything building with go1.110:05
rogpeppefwereade_: oh, have i missed something?10:05
fwereade_rogpeppe, I *think* so10:05
rogpeppefwereade_: is 1.1 backported to precise etc?10:05
fwereade_rogpeppe, I suspect mgz will be able to give you the precise (heh) details10:05
rogpeppefwereade_: i thought tarmac was still running 1.0.210:06
rogpeppefwereade_: if we're really 1.1 throughout, then \o/10:06
fwereade_rogpeppe, honestly for the tools I'd just as soon send a string10:06
rogpeppefwereade_: don't we need the version *and* the URL?10:06
fwereade_rogpeppe, sure, sorry, I mean send the version as a string10:07
rogpeppefwereade_: ah, you mean for AgentTools10:07
rogpeppefwereade_: version.BinaryVersion marshals as a string anyway AFAIR10:07
fwereade_rogpeppe, ah, that's nice10:07
rogpeppefwereade_: ah, i misremembered - it only does that in mongo (it has SetBSON etc methods)10:09
fwereade_dimitern, rogpeppe: the other option is to drop the un- or poorly-tested download-cancelling stuff, and then upgrader *would* make a nice NotifyWorker, I think10:09
rogpeppefwereade_: it looks like versions aren't currently used in the API yet, so we can still do it for JSON10:09
fwereade_rogpeppe, sgtm10:10
rogpeppefwereade_: the important thing, for the time being, is that the upgrader waits around to complete an upgrade for a while after it's killed (because of the one-kills-all logic in the machine agent)10:11
rogpeppefwereade_: when we fix things so that we can detect non-fatal errors, we can rethink that10:11
fwereade_rogpeppe, I thought we weren't doing that on the api side?10:11
rogpeppefwereade_: we are currently. we need to have a hard think about error handling before we change that.10:13
fwereade_rogpeppe, I don't think it's worth worrying about preserving that, so long as we just defer landing a NotifyWorker version until it's going via the api?10:13
fwereade_rogpeppe, isn't the only reason for the delayed stop to work around the one-error-kills-everything behaviour?10:13
rogpeppefwereade_: not entirely10:14
fwereade_rogpeppe, go on10:14
rogpeppefwereade_: even if there is a fatal error due to the state going away, i think we want to allow the upgrade to proceed10:14
rogpeppefwereade_: because we're not downloading the tools from the state10:15
fwereade_rogpeppe, ok, but that just involves dropping the download-cancelling cleverness, right? if we just do a blocking download and return the error when it's done we're dorted10:16
rogpeppefwereade_: i think we should probably leave existing logic as is. i know it's tempting to do drive-by refactoring of everything, but it all eats into the critical path10:16
dimiternfwereade_, rogpeppe: https://codereview.appspot.com/11424044 please take a look10:16
rogpeppefwereade_: i'm dorted anyway, dunno about you :-)10:16
fwereade_rogpeppe, I think that'd hold more water if upgrader were properly tested... as it is the tested bits needed changing, and if we dropped the untested bits we could also drop the somewhat astonishing delayed stop10:18
fwereade_rogpeppe, which is at least tested but appears not to be delivering much value now that it's only there to support the untested bits10:18
* fwereade_ gets "dorted" now, haha :)10:20
dimiternfwereade_, rogpeppe: ^^ that CL implements the first step towards ditching SetAgentAlive10:21
rogpeppefwereade_: the delayed stop isn't just there to support the download cancellation10:21
rogpeppefwereade_: it's there to make the system more robust in the face of stupid errors.10:21
fwereade_dimitern, cool, I probably won't get to it until later today I'm afraid10:21
rogpeppefwereade_: (and the download cancellation doesn't work anyway AFAIR because we don't provide a means the abort the http download)10:22
fwereade_rogpeppe, those errors being ones in parallel workers, right? we still depend on the outer agent mechanisms working right10:23
dimiternfwereade_: when you can, np, i have a couple more coming10:23
rogpeppefwereade_: well yes, it has to get into the upgrader logic10:24
fwereade_rogpeppe, so... if it starts an upgrader correctly (which we depend on anyway) it won't stop the upgrader unless there's an API problem, right? if there *is* an api problem, no upgrades; if not, we'll get the upgrade, and if we ignore the tomb once we've started downloading there's no further need for delay... is there?10:30
fwereade_rogpeppe, the only thing that'll kill the upgrader is ErrTerminateAgent, and that's a potential stupid error the delayed stop doesn't defend against anyway10:31
rogpeppefwereade_: first: i'm not sure we want to ignore the tomb when we're downloading - a download can take a long time.10:33
rogpeppefwereade_: second: it will stop the upgrader if any API-based agent returns any error10:33
fwereade_rogpeppe, first, var upgraderKillDelay = 5 * time.Minute10:34
fwereade_rogpeppe, second: I thought the whole idea was that it *wouldn't* do that?10:34
rogpeppefwereade_: yes - that happens only for the very first download10:34
rogpeppefwereade_: in fact it doesn't happen if we come up successfully and the version is as expected10:35
rogpeppefwereade_: AFAIR...10:35
fwereade_rogpeppe, yeah, we do indeed usually not wait that long10:35
fwereade_rogpeppe, but if it's acceptable for the upgrader to block everything for 5 mins while it's figuring stuff out, I think it's also ok for it to wait for the duration of a download10:36
rogpeppefwereade_: the 5 minute wait only happens in a very specific circumstance10:37
fwereade_rogpeppe, likewise the wait for a download10:38
rogpeppefwereade_: it might actually be better structured as a statement outside the main upgrader loop actually10:38
rogpeppefwereade_: in my experience, a network download can take lots more than 5 minutes to time out10:39
fwereade_rogpeppe, let's try a different approach -- describe a bug that the delayed stop will actually defend against that *isn't* a bug in the mechanism that starts the upgrader anyway10:40
rogpeppefwereade_: say there's a compatibility problem in the unit agent, for example - it encounters an "impossible" state and bombs out10:41
rogpeppes/unit agent/uniter/10:41
fwereade_rogpeppe, then the uniter waits 5s and gets restarted10:41
fwereade_rogpeppe, the upgrader continues to toddle along just fine10:42
rogpeppefwereade_: except that as things are *currently*, the upgrader is killed too10:42
fwereade_rogpeppe, we have been over that10:42
rogpeppefwereade_: because we have no way of distinguishing temporary from permanent errors10:42
rogpeppefwereade_: i'd like to fix the upgrader logic *after* we've added that error logic10:43
fwereade_rogpeppe, the upgrader is killed too because isFatal always returns true; but when it's an api worker, it won't kill everything10:43
fwereade_rogpeppe, we write a simple upgrader, and defer landing it until we can also land it as an api worker instead of a state worker10:43
rogpeppefwereade_: we don't use isFatal for the APIWorker runner10:43
rogpepperunner := worker.NewRunner(allFatal, moreImportant)10:43
fwereade_rogpeppe, WTF10:44
rogpeppefwereade_: it has to be like that10:44
rogpeppefwereade_: because we can't currently know when an API connection is borked10:44
rogpeppefwereade_: we do need to do that, but we haven't done it yet10:45
fwereade_rogpeppe, so maybe it's not hooked up yet, because we seem tohave some pathology where we still somehow write reams of code and never integrate it10:45
rogpeppefwereade_: what's not hooked up yet?10:46
fwereade_rogpeppe, but "does Ping return an error is I think adequate"10:46
rogpeppefwereade_: i don't believe it is10:46
rogpeppefwereade_: what happens if the underlying state connection that the API server is talking to goes away?10:46
fwereade_rogpeppe, then handling that is the api server's job10:47
rogpeppefwereade_: yes, and we don't know how to do that yet10:47
fwereade_rogpeppe, it is *not* the agent's concern though10:47
rogpeppefwereade_: it is currently - that's the only way we can recover from.... oh, in fact we never do recover. we're stuffed.10:48
fwereade_rogpeppe, the answer to possible crapness in one component is *not* to smear workarounds across the rest of the system, it's to fix the problematic component10:48
rogpeppefwereade_: i agree. but i don't want to remove our current workaround until we've fixed that problematic component10:49
fwereade_rogpeppe, using allFatal just makes the agent crap as well10:50
rogpeppefwereade_: so... it seems to me that there are two fixes we really need10:52
rogpeppefwereade_: 1) add another worker that watches api.State.Broken and exits with a fatal error if it is.10:53
rogpeppefwereade_: 2) change the api server so that if it sees an error that implies the mongo state connection is broken, it quits10:53
fwereade_rogpeppe, yeah, both good things10:54
fwereade_rogpeppe, more important than implementing the API workers how I asked more than a month ago? very much not so10:54
rogpeppefwereade_: i wasn't planning on rewriting all the workers to change them to use the API, and i don't think it's necessary10:55
rogpeppefwereade_: that's what i'm resisting10:56
* TheMue smiles10:56
TheMuetests are passing10:56
fwereade_rogpeppe, we *have* to rewrite the upgrader, because you implemented it so that we have to send secrets out to every single agent10:56
fwereade_rogpeppe, since we're doing it I would prefer to do it right10:57
rogpeppefwereade_: we don't have to change anything other than change it to read on a notify channel and read the tools when we get a notification10:57
rogpeppefwereade_: that's a fairly trivial change, i think10:57
rogpeppefwereade_: definitely not a rewrite10:57
fwereade_rogpeppe, apart from all the magic untested complex code in there10:58
rogpeppefwereade_: that's a totally orthogonal issue10:58
rogpeppefwereade_: it may be the case, but we don't need to fix everything now10:58
fwereade_rogpeppe, you know we could have written a NotifyWatcher implementation in the time you've been kicking up dust over this issue?10:59
rogpeppefwereade_: but it would probably be wrong in some subtle way. i like not rewriting things when possible.11:00
fwereade_rogpeppe, you are free to think I'm wrong about things11:02
fwereade_rogpeppe, you are not free to persistently go off and implement WTF you want to in the face of my instructions11:02
rogpeppefwereade_: no, i think you have good points,11:03
rogpeppefwereade_: and i think we want to go in the same direction11:03
rogpeppefwereade_: to get things straight here: your instructions here are to rewrite the upgrader?11:06
fwereade_rogpeppe, to (1) do the API runner as originally requested, so rogue tasks don't take the others down; to (2) implement a simpler upgrader as a NotifyWorker against the API, that does a blocking download and returns the appropriate upgrade error when done; and to (3) unhook the state one and activate the machine one, for the machine agent only11:09
fwereade_s/the machine one/the api one/11:10
rogpeppefwereade_: ok, thanks11:10
dimiternrogpeppe: ping11:19
rogpeppedimitern: pong11:20
dimiternrogpeppe: how about that review?11:20
dimitern;)11:20
rogpeppedimitern: reviewed11:20
dimiternrogpeppe: thanks11:20
jtvWould any of the Go experts here know how I'd go about debugging this crash?  I went through  it with gdb but it seems to be happening somewhere pretty deep down in the malloc logic... http://paste.ubuntu.com/5890497/11:30
jtvI don't even know why it'd list two goroutines, since as far as I know this code doesn't even use goroutines.11:31
dimiternfwereade_: standup?11:34
jtvPhew.  Go 1.0.2 will produce a proper traceback.  The 1.1.1 from the PPA we're using is a dev version, not a released one, right?11:40
rvbaAnyone up for two really tiny reviews? https://codereview.appspot.com/11404044/ / https://codereview.appspot.com/11511043/12:50
rogpeppervba: will look after lunch12:59
* rogpeppe goes for lunch12:59
rvbaThanks.12:59
* TheMue steps out and continues later13:10
hazmatrogpeppe, is there some sort of cache around the api?13:28
hazmatrogpeppe, i can do actions, like deploy/add_units/add_relation, then do an all watcher immediately after and not get the results back13:29
hazmatie. the api is behaving as though its eventual consistent.13:29
hazmathmm.. nevermind maybe user error13:32
dimiternlooking for a second review on https://codereview.appspot.com/11424044/ and reviews on https://codereview.appspot.com/11572043/13:52
dimiternfwereade_: when you can as well ^^13:54
=== tasdomas is now known as tasdomas_afk
=== tasdomas_afk is now known as tasdomas
rogpeppehazmat: the events coming from the allwatcher are only delivered when the global polling goroutine gets around to checking for changes13:58
rogpeppehazmat: the poll interval is 5s13:59
rogpeppehazmat: so that's your worst case delay13:59
rogpeppehazmat: although...13:59
rogpeppehazmat: the first result should come immediately13:59
hazmatrogpeppe, immediately, but not nesc. reflective of current reality.14:01
fwereade_anybody else unable to connect to irc.canonical.com?14:01
rogpeppehazmat: no, it should be reflective of current reality14:01
hazmatrogpeppe, because the status api call wasn't fully implemented i did status  emulation on the watcher14:01
hazmatusing the initial watch response value14:02
hazmatbut that doesn't always seem to reflect the last ops done14:02
hazmatrunning into this against some unit tests14:02
=== tasdomas is now known as tasdomas_afk
hazmatrogpeppe, here's an example.. http://pastebin.ubuntu.com/14:05
hazmatwhoops14:05
hazmathttp://pastebin.ubuntu.com/5890883/14:05
hazmati deploy two services, add a relation, add a unit.. then do a status immediately after, it reflects only the new machines, a watcher initial result doesn't even show the machines.14:05
hazmatideally these should both show the services, units, relations, and machines of previous api ops14:06
hazmatfor this simple sync usage on the client, watches here use a separate client connection (env.status is a watch translator due to lack of details in rpc status)14:07
rogpeppe1hazmat: what does wait_for_units do?14:11
hazmatrogpeppe, in this case nothing, because its waiting for units to be in the 'started' state, but it can't see any units, so its basically a no-op here.14:12
rogpeppe1hazmat: does it create a new watcher or use an existing one?14:12
hazmatrogpeppe, normally its a watch against units agent-state to reach started14:12
hazmatrogpeppe, new watcher14:12
rogpeppe1hazmat: it seems odd that the first event isn't producing the current status, because it gets the contents of all collections before producing it14:14
rogpeppe1hazmat: could you show me the whole code? (or just a trace of the API messages would be even better)14:14
hazmatrogpeppe1, hence the question is there some sort of cache behavior?14:14
hazmatrogpeppe1, okay..14:14
rogpeppe1hazmat: ah...14:14
rogpeppe1hazmat: i've just realised14:15
rogpeppe1hazmat: yes, of course, there *is* some sort of cache behaviour!14:15
rogpeppe1hazmat: because the allwatcher is shared between all clients14:15
rogpeppe1hazmat: and we keep a single copy of all the data14:15
hazmatrogpeppe1, i thought each client had independent pointer into that data14:15
rogpeppe1hazmat: yes, each  client does14:16
rogpeppe1hazmat: but the underlying data is a cache that's only updated when new events arrive (by that 5s poll interval)14:16
rogpeppe1hazmat: sorry for the mis-info!14:16
hazmatrogpeppe1, okay.. so i think the critical fix here then for would be for status op to report status instead of just machines.14:16
rogpeppe1hazmat: i think the status op should provide the whole status, yes14:17
hazmatotherwise, there's no way a client can see its mods in th eenv.14:17
rogpeppe1hazmat: and then we can make the status command use that14:17
rogpeppe1hazmat: mgz is working on some stuff to enable that14:17
hazmatmgz, ping :-)14:18
mgzhazmat: hey14:18
hazmatmgz, rogpeppe1 mentioned you might be working on cli using api?14:20
rogpeppe1hazmat: no, that's not quite it14:20
mgzwell, mostly as a side effect14:20
hazmatspecifically i was wondering about status support, since the client api is hard to use/verify ops without status working given 5s delay on watcher.14:20
rogpeppe1hazmat: the work mgz is doing makes it possible to get all the status info over the api, but not the status call itself14:20
mgzhazmat: if I read the log correctly, your issue is that just using watcher apis you don't get all the status info you could with manual `juju status` calls?14:21
rogpeppe1hazmat: you can get info on individual machines i think14:21
hazmatrogpeppe1, that's not useful when i'm verifying services, units, relations..14:21
rogpeppe1hazmat: one possibility would be to add a Sync call to the API14:22
hazmatrogpeppe1, that would help.. but i'm not sure its something we want in the api14:22
rogpeppe1hazmat: to sync any watchers14:22
rogpeppe1hazmat: but yeah, i think you may be right14:23
hazmatrogpeppe1, the watchers are already sync'd, its the a dos api against updating the stream.14:23
rogpeppe1hazmat: i don't know how much dos could be done this way that couldn't be done through other api calls.14:24
hazmatwhich to combat would just introduce the delay elsewhere... what this usage needs is non-cached access. hence status14:24
rogpeppe1hazmat: yeah14:24
hazmatrogpeppe1, well we have fetch service info, no fetch unit info, or machine afaik14:24
rogpeppe1hazmat: ironically my original plan was to do the status API call as the first actual use of the API14:25
dimiternrogpeppe1: https://codereview.appspot.com/11572043/ ?14:26
rogpeppe1dimitern: i don't think NewAgentAPI is the right place to start the pinger14:29
hazmatmgz, no.. the watch apis do give all the status, but their cached, so its eventual consistent behavior, which is causing issues with unit tests, the issue would be solved if the rpc status call actually returned status info, instead of just a partial machine info14:29
dimiternrogpeppe1: why?14:29
rogpeppe1dimitern: because it's called once for each machiner API call14:29
rogpeppe1dimitern: so you're quickly going to have many many pingers :-)14:29
dimiternrogpeppe1: isn't that the singleton root?14:30
dimiternrogpeppe1: for the machiner14:30
rogpeppe1dimitern: nope14:30
dimiternrogpeppe1: aaah14:30
dimiternrogpeppe1: got you!14:30
dimiternrogpeppe1: it's the entry point, but for every call14:30
rogpeppe1dimitern: yes14:30
dimiternrogpeppe1: so then after the CheckProvisioned in admin then14:31
rogpeppe1dimitern: in srvAdmin.Login, you mean?14:31
dimiternrogpeppe1: yeah?14:32
rogpeppe1dimitern: yes, i think that's the right place14:32
dimiternrogpeppe1: ok, will move it there14:32
mgzhazmat: I see. seems fixable, but not really what I'm poking right now.14:32
rogpeppe1dimitern: or perhaps in apiRootForEntity14:33
dimiternrogpeppe1: I've go another CL for you as well :) https://codereview.appspot.com/11574044/14:33
dimiternrogpeppe1: in apiRootForEntity with the idea that once it becomes a "root factory" it will be more appropriate?14:34
rogpeppe1dimitern: yeah14:34
dimiternrogpeppe1: good point14:34
rogpeppe1dimitern: i've still got that CL around somewhere14:34
dimiternrogpeppe1: it got rejected i think14:35
rogpeppe1dimitern:  i don't think it was reviewed actually14:35
dimiternrogpeppe1: ah, it might be14:35
rogpeppe1dimitern: yeah, no reviews: https://codereview.appspot.com/1068404414:36
dimiternrogpeppe1: I think fwereade mentioned something he didn't like there, but can't remember details14:36
rogpeppe1dimitern: oh, i'd like to know if there was14:37
rogpeppe1dimitern: this was the crux of it. your NewPinger code would go into the NewMachineRoot function.14:39
rogpeppe1https://codereview.appspot.com/10684044/diff/1015/state/apiserver/facades/machine.go14:39
dimiternrogpeppe1: yeah, well we can still do it next week14:39
dimiternrogpeppe1: haven't look into it in detail myself14:40
rogpeppe1dimitern: reviewed14:45
mattywI just did an lbox propose but it didn't make a Rietveld code review for me?15:05
rvbaAnyone up for a review? https://codereview.appspot.com/11404044/15:07
fwereadehey guys15:07
fwereadeI'm about to go through the reviews from the top15:07
dimiternrogpeppe1: thanks15:08
fwereaderogpeppe1, I thought https://codereview.appspot.com/10684044 looked cool but hit the nice-to-have buttons not the must-have buttons, so I didn't want anyone to take it over15:08
rogpeppe1fwereade: yeah, i appreciate that15:08
fwereaderogpeppe1, but since it's here, and you're here to respond, I'm on it now (it's at the top after all :))15:09
rogpeppe1fwereade: that's appreciated. it wasn't complete though - in particular i hadn't added any more tests15:09
fwereaderogpeppe1, ok, give me 5 mins to reload my state on it just in case there was something I didn't like, but I think I'm happy for you to continue with it, just make it a side task not the main one please ;)15:11
rogpeppe1fwereade: ta15:11
mattywfwereade, I just submitted a small proposoal but lbox propose didn't create a Rietveld code review for me?15:11
rogpeppe1fwereade: i haven't touched it since i got back BTW15:11
fwereademattyw, huh, weird15:11
mattywfwereade, I take it we're still using Rietveld15:11
rogpeppe1fwereade: a proposal against juju-core?15:11
fwereademattyw, I use +activereviews as my task list anyway so rest assured I'll see it15:11
rogpeppe1s/fwereade/mattyw/15:12
mattywfwereade, ok, shall I try to make a Rietveld review for it or just ignore it?15:12
mattywrogpeppe1, yeah juju-core15:12
rogpeppe1mattyw: hmm, weird. can you run lbox propose --debug and paste the result?15:12
rogpeppe1mattyw: fwiw, rvba has been having some perhaps similar issues with lbox15:13
mattywrogpeppe1, hmm, running debug tells me it can't login - I guess that's the problem ;)15:15
fwereaderogpeppe1, yeah, direction looks sane, thanks :)15:15
rogpeppe1mattyw: try removing ~/.lpad_oauth* and trying again15:16
fwereadeoh, incidentally, did everyone see http://foaas.herokuapp.com/15:16
rogpeppe1fwereade: no15:16
fwereaderogpeppe1, it made me smile15:16
rogpeppe1fwereade: me too15:16
=== rogpeppe1 is now known as rogpeppe
dimiternLOL15:17
* fwereade didn't really have a proper lunch and is off to have one now, reviews will have to wait a bit15:18
mattywrogpeppe, got it working without having to resort to removing .lpad_oauth15:18
* fwereade will probably just have a sandwich at his desk though, so don;t fret ;p15:18
fwereadejtv, ping15:40
jtvHi fwereade15:40
fwereadejtv, heyhey, it looks like you have 2 LGTMs on "Drop startInstanceParams"15:40
jtvAh great, thanks15:41
fwereadejtv, unless you particularly want to, please don't feel you need to wait for my review15:41
jtvThans!15:41
jtv*Thanks15:42
fwereadejtv, thank *you*, I'm really appreciating what you're doing15:42
dimiternrogpeppe: all the other client-side facades for workers use the worker name as the facade type name15:42
dimiternrogpeppe: and i think it's reasonable as well, for agent facades (currently MA only) State seems more appropriate15:42
jtvhi-ho, hi-ho, to tarmac-land we go15:43
rogpeppedimitern: i think they should all use State15:43
dimiternrogpeppe: i don't agree15:43
rogpeppedimitern: that was my original plan, agreed with fwereade AFAIR15:43
dimiternrogpeppe: why?15:43
dimiternfwereade: ?15:43
rogpeppedimitern: because the Machiner state API facade is not itself a Machiner15:43
rogpeppedimitern: it is actually the state15:43
rogpeppedimitern: with a facade in front of it15:44
dimiternrogpeppe: it's not state either15:44
rogpeppedimitern: so calling it State in all those places seems like a Good Thing to me15:44
dimiternrogpeppe: it's api15:44
fwereaderogpeppe, dimitern: I don't *love* state but IMO it's at least consistent with existing usage and as a name for the source of truth15:44
rogpeppedimitern: the API is just a front-end for the state15:44
dimiternrogpeppe: so MachinerAPI then15:45
rogpeppedimitern: and naming it State means we don't need to rename all the variables in every piece of client code15:45
dimiternrogpeppe: better than State15:45
dimiternrogpeppe: that's not a big deal imo15:45
dimiternrogpeppe: we don't have to rename them either way15:45
rogpeppedimitern: it means that it's potentially easy to move code from one worker to another15:45
rogpeppedimitern: or factor it out15:46
fwereaderogpeppe, dimitern: I'm ok sticking with state to reduce churn, personally, but I don't have a strong opinion either way15:46
dimiternrogpeppe: i don't see how this should be something to consider15:46
dimiternrogpeppe: facades are specifically done for a worker/agent15:46
rogpeppedimitern: sure. but from the point of view of that agent, it's talking to the state15:46
rogpeppedimitern: so having it called, say machiner.State, seems like it works well to me15:47
dimiternrogpeppe: i think it's misleading15:47
rogpeppedimitern: it means that when you read the code, it's fairly obvious that all these pieces of code are talking to the same underlying thing15:47
dimiternrogpeppe: maybe not Machiner then, MachinerAPI is actually closer to the intent15:47
dimiternrogpeppe: when it has API in its name it's pretty obvious15:48
rogpeppedimitern: i don't see a significant benefit from machiner.API (over machiner.State) (and i'm not keen on machiner.MachinerAPI15:48
rogpeppe)15:48
rogpeppedimitern: as fwereade says, it reduces churn, and that seems like a good thing15:49
rogpeppedimitern: i'd like to be able to change all the client code with minimal fuss15:49
dimiternrogpeppe: who's going to change all the other facades then?15:49
dimiternrogpeppe: which are already using these names15:50
rogpeppedimitern: i'm happy to do it. i've already done the upgrader one.15:50
dimiternrogpeppe: ok then15:50
rogpeppedimitern: given that nothing is using them yet, it's not much of an issue15:50
dimiternrogpeppe: i *still* don't agree15:50
dimiternrogpeppe: but will do it15:50
dimiternrogpeppe: 2:1 against :)15:50
fwereaderogpeppe, did you assign yourself to the time.Format bug?15:50
rogpeppedimitern: thanks a lot. i do think it makes sense though, if only from a grandfathered-in p.o.v.15:51
rogpeppefwereade: no15:51
rogpeppefwereade: but i have merged a fix15:51
rogpeppefwereade: so should mark the bug fix committed15:51
rogpeppefwereade: have you got the link to hand?15:51
fwereaderogpeppe, not offhand -- it's just that sidnei also fixed it but a bit late15:52
rogpeppefwereade: i think mark assigned the bug to me actually15:52
hazmatmgz, gotcha.. could you clarify what your working on?.. from the kanban its not relatable at all? goamz for extra ip.. (which is vpc support incidentally) and lxc container addressability.15:53
fwereaderogpeppe, oh, double-bad luck, sidnei found and fixed it completely independently15:53
hazmatnot sure how either of relates to the api bits15:53
hazmati did a branch on that one too (time.format), but couldn't ever the get the full test suite to pass..15:54
mgzhazmat: specifically I need a mechanism for keeping machine address details updated in state15:54
fwereaderogpeppe, I've marked it fix committed15:54
rogpeppefwereade: thanks15:54
mgzwhich seems easiest to do by monitoring machines in the process of coming up and polling over the cloud's api for changes15:55
dimiternrogpeppe: i've updated this as well https://codereview.appspot.com/11572043/15:56
rogpeppedimitern: looking15:56
mgzthen everything else can just watch state for address stuff, rather than having to go run something provider specific at the unit level15:56
rogpeppedimitern: reviewed16:00
dimiternrogpeppe: thanks\16:00
=== flaviamissi is now known as flaviamissi_
fwereadervba, a question about https://codereview.appspot.com/11578043/16:06
fwereademattyw, I think that one's a trivial, go ahead and merge it16:08
fwereademattyw, tyvm16:08
mattywfwereade, trivial is my middle name16:09
fwereademattyw, haha16:09
mattywfwereade, I don't think I can merge it, I only have the option to say it's already merged in lp16:09
fwereademattyw, ok, I've approved it for you16:10
fwereademattyw, keep half an eye on it just in case the bot doesn't like something16:10
mattywfwereade, thanks :)16:10
jtvOh no.16:19
jtvOur branches are spending too long in review.  Getting really hard conflicts popping up in the meantime.16:20
fwereadedimitern, https://codereview.appspot.com/11424044/ LGTM, but ponder my comments before you merge16:25
dimiternfwereade: thanks; looking16:29
rogpeppefwereade, dimitern: https://codereview.appspot.com/1158604316:43
dimiternfwereade: let's rename it to Nonce when we have UA connecting the same way?16:43
rogpeppedimitern: will we need a nonce for the unit agent?16:43
dimiternrogpeppe: fwereade mentioned that16:43
dimiternrogpeppe: looking16:44
rogpeppefwereade: +1 to omitempty - i nearly mentioned that16:44
dimiternrogpeppe: will do16:45
fwereadedimitern, let's rename it *now* if we're going to16:48
fwereadedimitern, it may be that we never will16:48
fwereadedimitern, but I suspect that one day units will be able to move from one machine to another16:49
dimiternfwereade: will we?16:49
dimiternfwereade: I prefer not to complicate more that CL renaming all MachineNonce instances to Nonce16:49
fwereadedimitern, I remember thinking they might need it but I can't remember why16:50
dimiternfwereade: but can do a follow up16:50
fwereadedimitern, ok, so long as we don't release with MachineNonce in the api, or we'll never get away from it ;p16:50
dimiternfwereade: why?16:50
dimiternfwereade: it's just an argument16:50
dimiterna field even16:50
fwereadedimitern, that some clients will use one version of, and other clients will use another version of16:52
dimiternfwereade: ok, will do a follow-up after the third branch has landed17:00
fwereadedimitern, cool17:01
dimiternfwereade: and rename *all* MachineNonce to Nonce (even at top-level in agent.Conf)17:01
dimiternfwereade: or you meant only the one in API Info actually?17:01
rogpeppedimitern, fwereade: fairly trivial: https://codereview.appspot.com/11589043/17:01
fwereadedimitern, I really just meant the one in api info17:02
fwereadedimitern, agent.conf is alredy compatibility-infected, best not touch it unless we have to17:02
dimiternfwereade: ok17:03
dimiternfwereade: if it's only that one, then I guess it's no bigger change to do it in the current CL17:03
fwereadedimitern, that'd be great17:03
fwereadedimitern, tyvm17:03
dimiternrogpeppe: how will that make the api nicer?17:03
fwereaderogpeppe, LGTM17:04
TheMuerogpeppe: first review ;)17:04
fwereadedimitern, check out params.AgentTools17:04
dimiternrogpeppe: i really don't get that CL17:04
dimiternsorry17:04
rogpeppedimitern: a version will be encoded as a nice string rather than several fields. params.AgentTools can also just use version.Binary rather than explicitly redeclaring all the version fields.17:05
fwereadedimitern, it lets us just have a version.Binary in a params struct, and get it sent nicely over the wire, rather than as like 7 distinct fields17:05
rogpeppefwereade: thanks17:05
dimiternrogpeppe, fwereade: ah! I see, thanks17:06
fwereadedimitern, https://codereview.appspot.com/11572043/ also LGTM with one tweak17:08
fwereadedimitern, and https://codereview.appspot.com/11574044/ LGTM too17:10
dimiternfwereade: tyvm17:11
fwereaderight, that's 6pm: I've survived the week and I'm going to lie down in a park for a bit17:11
fwereadeI'm on holiday mon-weds but will probably be around mon am a bit17:11
rogpeppefwereade: enjoy17:12
fwereadeso I can talk to whoever's here about where we're going with environment config17:12
rogpeppefwereade: i'm also off now17:12
fwereadehappy weekends all!17:12
rogpeppefwereade: i've done the upgrader but not tested it...17:12
fwereaderogpeppe, sweet, tyvm17:12
rogpeppeg'night all17:12
dimiternfwereade: why the need to test is the pinger a resource?17:14
TheMuefwereade: enjoy your holiday17:14
dimiternfwereade: I can add a test that after disconnecting it's no longer alive - will that be enought?17:14
dimiternfwereade: ah, sorry didn't see you're previous msgs17:14
TheMueso, time for me to step out too17:26
TheMueenjoy your weekend, dimitern17:26
dimiternTheMue: thanks, you too!17:26
TheMuedimitern: will do so, tomorrow invented to a breakfast and later to a bbq ;)17:27
TheMueinvited17:27
benjigary_poster: I'll take one17:54

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