[00:00] wallyworld: it sounds like you have a lot on your plate [00:00] i'll look at testing ec2 and hp deployments today now that RT is closed [00:00] ido [00:00] awesome :-) [00:00] wallyworld: fair warning, there are some remaining tools selectino bugs on ppc [00:00] ok [00:00] mainly because precise/ppc64el is not a thing [00:00] i'll do what I can to resolve them myself [00:01] davecheney: i'm happy to fix also [00:01] wallyworld: lemmie figure out what they are first [00:01] ok [00:01] all I can see at the moment is tests pass with gccgo/amd64 [00:01] and fail with gccgo/ppc64el whinging that no tools are available [00:13] davecheney: is there simplestreams metadata for ppc64el? [00:13] that would be a likely cause [00:34] wallyworld: in the test fixures ? [00:35] sinzui: https://bugs.launchpad.net/juju-core/+bug/1298708 [00:35] <_mup_> Bug #1298708: bzr: bzr unit tests are not properly isolated [00:35] this is sort of a big failure [00:35] how does this pass in CI ? [00:35] davecheney: i think so. what tests are failing? [00:35] wallyworld: hang on [00:35] talking at cross purpises [00:35] what are you talking about [00:36] the missing ppc64el tools metadata [00:36] wallyworld: in that case I agree [00:36] let me check quickly [00:39] * davecheney flails around a bit [00:40] wallyworld: where in the source are the test fixtures ? [00:40] depends on what tests are filing [00:41] wallyworld: you mentioned that there was sample simples streams data [00:41] where in the source are those fixtures kept ? [00:41] there's several tests with different sources [00:42] sure [00:42] there's some in environs/simplestreams/testing [00:42] but each provider also sets up its own data [00:42] ubuntu@winton-02:~/src/launchpad.net/juju-core/environs/simplestreams/testing$ ls [00:42] testing.go [00:42] ahh, rigth [00:42] now I understand [00:44] afk for a bit [01:36] eu1Ahloo [01:36] eu [01:37] ouch [01:37] :p [01:37] not a bad password, as passwords go.. [01:39] sarnold: nah, altough I think I should definitely not use it for something else than my laptop :) since apparently I can have the screen locker on but the focus on the chat [01:41] perrito666: ah :) https://bugs.launchpad.net/ubuntu/+source/unity/+bug/1292217 [01:41] <_mup_> Bug #1292217: lightdm screen lock has triggered but keyboard is still connected to the main session [01:41] sarnold: lol === vladk|offline is now known as vladk [03:08] when using goyaml and json is there a way I can tell struct tags to marshal/unmarshal the same for both systems - the syntax in my head is something like `json,yaml:foo-bar` [03:18] mattyw: yes [03:18] the syntax is slightly different [03:18] from memory `yaml:foo-bar,json:foo-bar` [03:18] there might even be some "'s in there as well [03:18] davecheney, I found that `json:"foo" yaml:"foo"` works - but it would be nice not to have to repeat the key [03:19] it would be nice to not need to repeat the key - but I guess that isn't the way the world works [03:19] mattyw: well puyt === vladk is now known as vladk|offline [03:20] davecheney, thanks dave - I'll let you get back to implementing generics [03:20] mattyw: you're welcome [03:20] mattyw: you're welcome [03:38] axw: wallyworld i am looking at this bug [03:38] http://paste.ubuntu.com/7165797/ [03:38] and I am really concerned that public and private addresses are being mixed up [03:38] looking at the code, so far I see they are handled separately [03:39] but I woner if at some point they are mushed into a map, then someone is grabbing the first key from the map and assuming that is the first item pushed into the map [03:39] could be [03:39] wallyworld: it looks liek they are stored in separate fields in the machine/unit document [03:39] sorry it would be the machine document [03:39] i think so yes [03:39] davecheney: they are indeed put into a map [03:40] axw: ORLY [03:40] davecheney: to remove dupes. does order matter here? SelectPublic/SelectInternal should still do the right thing...? [03:40] axw: is that in state, or in instance ? [03:40] it looks just like another map orderin fting [03:41] thing [03:41] wallyworld: the first bug is [03:41] in the test only [03:41] the seconds are a little weirder [03:41] davecheney: they're merged in state.Machine.Addresses [03:41] state/machine.go [03:41] addresses := []instance.Address{ [03:41] instance.NewAddress("127.0.0.1"), [03:41] instance.NewAddress("8.8.8.8"), [03:41] } [03:41] err = machine.SetAddresses(addresses) [03:41] c.Assert(err, gc.IsNil) [03:41] address, ok = s.unit.PublicAddress() [03:42] c.Check(address, gc.Equals, "8.8.8.8") [03:42] this is weird [03:42] what defined the public and private addresses ? [03:42] it feels like the order in which the are added [03:42] the first is always private [03:42] the rest are public [03:42] there's an lgorithm [03:43] internalAddressIndex [03:43] davecheney: addresses have a scope which says whether they're public/private [03:43] i think it's just the test [03:43] wallyworld: the test is failing because s.unit.PublicAddress() returns the priovate address [03:43] davecheney: see NetworkScope in instance/address.go [03:43] the test is inserting 2 addresses into a map without enough info for one to be considered private over another [03:43] the test needs improving i think [03:43] wallyworld: there aren't any maps on that code sample I showed [03:43] i'm concerned that this is a bug in the code [03:44] not the expected in the test [03:44] davecheney: that's not the point [03:44] the code picks an address based on the internalAddressIndex algorithm [03:44] and the addresses in the test don't appear to have enough info for one to be picked over another [03:44] so an arbitary one is chosen [03:45] wallyworld: right, so that is a bug in unit.PublicAddress [03:45] if they're all public or private, I think order matters [03:45] not the test [03:45] that's based on a very quick look at the code [03:45] but that's arbitrary [03:45] it's not a bug [03:45] if more than 1 address matches, it just picks one [03:45] so the test needs to insert addresses with more info [03:46] davecheney: instance.NewAddress just gives you an address of "unknown" type [03:46] so that 1 is definitely private vs public [03:46] the address type needs to be set [03:46] so neither 127.0.0.1 nor 8.8.8.8 in that test are public [03:46] it just happened to be picking 8.8.8.8 before because it was the last in the list [03:46] axw: right, thanks [03:46] axw: wallyworld thanks [03:46] now I understand [03:46] i'll fix it [03:47] * axw hopes nothing actually relies on that [03:47] davecheney: sorry about bad explanation, test is shit [03:47] axw: you'll be surprised :) [04:11] Spot the bug, Holiday [04:11] May 2014 07/05/2014 - 07/03/2014 Awaiting Sign Off [04:21] axw: wallyworld instance.NewAddresses would appear to be a footgun [04:22] davecheney: yeah, it should probably be in a testing package, if that [04:22] it doesn't really set the scope does it [04:22] it's only used by tests [04:24] axw: should I delete it ? [04:24] it never sets the scope [04:25] so its value would be ... dubiois [04:25] instance.Address{Value: "x.y.z.q"} does the same thing [04:29] hmm, NewAddress does do more that I just said [04:29] but it always sets the scope to unknown [04:36] davecheney: sorry, was making lunch. I don't know, depends on how it makes the tests look. I'd opt for just moving it, so it's not accidentally used in a place where it matters [04:46] axw: moving it out of the instance API and as a helper [04:46] that would certainly reduce it's lethality [04:49] let's see what breaks [05:04] axw: http://paste.ubuntu.com/7166620/ line 174 [05:04] i wonder if this related to the last issue [05:10] * axw looks [05:11] davecheney: broken test; it's setting the wrong scope on the "public" address [05:18] axw: yet it passed up until now .... [05:18] davecheney: yes, by implicitly relying on map ordering [05:19] it just happened to pick the internal address previously [05:19] waaaaaaaaaaaaaah [05:19] ok, will fix [05:20] wallyworld: i don't think i'm going to get to adding simple streams data for ppc64el [05:20] i'll log a but [05:20] bug [05:20] but I know you have better things to do [05:20] ok [05:20] i'm finishing the joyent provider [05:20] i'll try and get to it real soon now [05:21] wallyworld: no no [05:21] that is what I am saying [05:21] i need to log a bug for my status report [05:22] but don't think you need to do it [05:22] ok [05:41] axw: OMG [05:41] cloudLocalAddress := instance.NewAddress("cloudlocal") [05:41] cloudLocalAddress.NetworkScope = instance.NetworkCloudLocal [05:41] ^ even other callers of NewAddress don't trust it [05:45] :) [05:45] it's a bit pointless there isn't it [05:45] davecheney: if you do move it, maybe rename it too. NewUnknownAddress [05:51] axw: i'm thinking instead adding a manditory scope parameter instead [05:51] then it can't be misused [05:51] davecheney: sounds sensible [05:51] famous last words [06:02] cummon and land my change you mongrel [06:21] jam1: has the bot crapped itself ? [06:21] or is it just reeeeeeeeeeely slow ? [06:25] axw: instance.NewAddress is barely used, only one case in the whole codebase [06:26] davecheney: apart from tests? yeah, that one can just be changed to create an address struct literal [06:30] yeah, quite a few tests [06:30] i'm going to go with the plan of adding an explict scope argument [06:30] this will probably make people questino the values passed to NewAddress [06:47] axw: git 101 question - i've forked a github branch, cloned locally into the src tree i use for juju-core development, comitted and push some changes. How do i now revert the branch on disk to the original from github? [06:48] i'd use bzr switch [06:48] what's the git equivalent? [06:50] wallyworld: git checkout $BRANCH ? [06:50] davecheney: ok, ta. i'm a total git noob. [06:50] wallyworld: i *may* not have told you the right thing [06:50] there is also git reset --hard [06:51] wallyworld: depends on whether you branched to start with [06:51] but that might be a hammer to crack an egg [06:51] i must say, having created a couple of pull requests on github, bzr + laucnhapd is MUCH nicer :-( [06:51] axw: i just did a go get -u originally [06:52] i guess i could rerun that? [06:52] wallyworld: so, I think what you probably should've done is branched, and pushed the branch to GitHub [06:52] but it's a bit late [06:52] no, your push would've pushed to the master branch [06:52] axw: i forked [06:52] and then cloned [06:53] that's what the online help said to do [06:53] wallyworld: right, but forking on github creates a repo + branch [06:53] branches [06:53] so you've modified the master branch in your fork [06:53] my push went to my copy of the branch [06:53] yes [06:53] yep... now what do you want to do exactly? [06:54] wallyworld: bear in mind I'm a git noob too :) [06:54] revert, on disk, back to what was there before i deleted the go get version and clone my version [06:54] ah, i thought you were a git master :-) [06:54] i used git *for the very first time* just 10 minute ago [06:54] wallyworld: probably better just to create a new branch off the old commit [06:55] wouldn't checkout/clone be better? i wonder what go get does [06:55] i could just rm the dir and run go get again [06:56] you could, but you'll get the same stuff back [06:56] that's what i want for now [06:56] wallyworld: you want the same thing you pushed? [06:56] that's what you'll get back [06:56] i'm just trying to figure out how the do the equivalent of "bzr switch" [06:57] "git checkout " [06:57] and that will overwrite what's there? [06:57] ta, will try that [06:57] that'll change your working tree [06:57] coolio, that's what i want [06:58] it's going to be "fun" switching over [06:59] it's not so bad, just a bit different [06:59] i've read and heard that bzr's model and workflow is *much* nicer, so it will be a pain i think [07:19] wallyworld: jam1 axw, https://code.launchpad.net/~dave-cheney/juju-core/104-fix-lp-1298703/+merge/213195 [07:19] still hasn't landed [07:19] can someone kick the bot ? [07:19] sure [07:20] ta much [07:23] Preparing to merge https://code.launchpad.net/~dave-cheney/juju-core/105-fix-lp-1298789 [07:23] tests running [07:24] wallyworld: right [07:24] thanks for checking [07:24] np [07:25] tests take 30 mins on my laptop with one cpu [07:25] i can imagine they are even slower on canonistack [07:25] oh yes [07:32] mornin' all [07:33] rogpeppe: o/ [07:33] while we're waiting for the bot, https://codereview.appspot.com/81330044 [07:34] davecheney: good call - i've been meaning to do that for a while [07:34] rogpeppe: and then I can change SetAddresses to be var arg [07:34] and remove all the use of NewAddresses [07:35] davecheney: that doesn't seem quite right - addresses have more info than is just in the string [07:36] rogpeppe: indeed, that was the subject of todays bug [07:36] NewAddress always creates an address with scope NetworkUnknown [07:36] https://code.launchpad.net/~dave-cheney/juju-core/105-fix-lp-1298789/+merge/213198 [07:36] davecheney: are we using NewAddress in production code? [07:36] https://code.launchpad.net/~dave-cheney/juju-core/104-fix-lp-1298703/+merge/213195 [07:36] davecheney: we shouldn't really. [07:36] rogpeppe: i'm going to do two things [07:36] 1. make the caller always specify the scope [07:37] 2. make sure we're only using it in tests [07:38] rogpeppe: actually, if we do 1 then 2 may not be necssary because it will become less dangerous to call that function [07:38] davecheney: that seems ok to me, except that i always presumed that Unknown was there for when a provider genuinely doesn't know the scope of an address [07:39] rogpeppe: unknown can be returned for both a public and private address [07:39] that seems wrong [07:39] davecheney: i'm not sure [07:39] davecheney: we should talk to mgz about this - it's his scheme [07:40] davecheney: the other thing i'd like to do with addresses is drop the explicit type field [07:40] rogpeppe: have a look at the bug attached to this one, https://code.launchpad.net/~dave-cheney/juju-core/104-fix-lp-1298703/+merge/213195 [07:41] davecheney: that's not a production code bug, is it? === vladk|offline is now known as vladk [07:42] goog morning [07:42] good morning [07:44] vladk: hiya [07:54] axw: you've got a review: https://codereview.appspot.com/81700043/ [07:55] thanks [07:58] dimitern: morning [07:59] rogpeppe: for client caching addrs, is it reasonable to only do it when using the configstore? and assume that Environ.StateInfo will get updated addresses too? [07:59] morning [07:59] dimitern: hiya [07:59] morning vladk, dimitern [08:00] dimitern: i'd appreciate your thoughts on this: https://codereview.appspot.com/81570043/ [08:00] rogpeppe, looking [08:00] dimitern: (particularly after our chat yesterday...) [08:01] axw: for the former, i think so [08:01] axw: without the configstore, i don't there *is* any way to cache addresses [08:01] axw: didn't you fix this ? http://paste.ubuntu.com/7167180/ [08:01] rogpeppe: hah, good point :) [08:01] axw: i'm not sure what you mean by the latter [08:01] rogpeppe: well actually... [08:02] rogpeppe: we may have the configstore, but it may have out of date info [08:02] rogpeppe: so we try using StateInfo to get addrs from external storage [08:02] davecheney: looking [08:02] axw: nothing should be using StateInfo [08:02] axw: i saw you proposed a fix yesterday [08:02] maybe that hasn't laneded [08:02] i'm pretty sure i'm up to date [08:02] davecheney: I thought so too, but maybe not :( [08:02] axw: because nothing connects directly to mongo [08:03] rogpeppe: I'm talking about environs.Environ.StateInfo, which gets provider-state from storage [08:03] you know, the one we chatted about the other day [08:03] * rogpeppe feels bad about tests depending on map ordering. [08:03] rogpeppe: go 1.3 for the win [08:04] axw: ah yes, i think it's reasonable to assume that the info from StateInfo (actually we'll rename it to APIInfo soon) is maintained [08:05] * rogpeppe will try running tests on tip [08:07] rogpeppe: excellente, thanks [08:08] rogpeppe: you may not have seen my email yet, so: is the APIHostPorts client API still necessary if we return them via Login? [08:08] I would prefer to do it via Login [08:08] axw: i think it does no harm - we can leave it in [08:08] ok [08:08] axw: but i think we should return the results from Login anyway [08:09] rogpeppe: yeah, that's what I am working on right now [08:09] rogpeppe: simpler and more efficient [08:09] axw: <3 [08:20] guys, today may be challenging, cath is away and laura is a bit sick [08:21] upside: she's fairly subdued [08:21] downside: I will be off and on at complete random today [08:21] just flag me in here with reviews you need and I'll get to them as I can [08:25] fwereade, take a look at this https://codereview.appspot.com/81570043/ i'd like to know your thoughts as well [08:28] dimitern: fwereade has already reviewed it (although perhaps not completely) [08:29] rogpeppe, ah, sorry, haven't reached the end [08:39] rogpeppe, i don't really get why do you have a clone method on the configsetteronly? [08:40] rogpeppe, imo once you have configsetteronly, you should've got it from a clone of an existing config [08:40] rogpeppe, what if you forget to call clone? [08:40] dimitern: there's not really any point on having it on the Config, because when you've got a Config, it should be immutable [08:41] dimitern: if you've got a mutable config (ConfigSetter or ConfigSetterWriter) you are responsible for cloning the config to hand out to potentially concurrent clients [08:42] rogpeppe, and you're handing out a clone with a clone method itself? [08:42] dimitern: that's reasonable, i think, because that's the case in only a very small amount of code [08:42] dimitern: ? [08:42] dimitern: Clone returns Config, which doesn't have a clone method [08:43] rogpeppe, oh ok [08:59] rogpeppe, reviewed [09:10] dimitern: thanks a lot [09:11] dimitern: responded [09:13] rogpeppe, will look in a moment [09:15] rogpeppe, i'm confused about upgrades + migrate config [09:15] rogpeppe, istm now we're migrating the config in-memory only and then what? [09:16] dimitern: the caller is responsible for actually writing the config [09:16] rogpeppe, i'm asking about that particular caller [09:16] rogpeppe, the upgrade step [09:17] dimitern: the upgrade step doesn't need to write the config [09:17] rogpeppe, you've changed migrate not to write, but not changed agentconfig upgrade step calling migrate to write after calling migrate [09:17] rogpeppe, that's its only purpose in life [09:17] dimitern: the write happens outside of PerformUpgrade [09:17] rogpeppe, migrate and write the updated config [09:18] dimitern: which is why PerformUpgrade is called in a ChangeConfig-called function [09:18] rogpeppe, have you tested this with an actual live test upgrading 1.16 to 1.18? [09:18] dimitern: not yet [09:19] rogpeppe, please do :) [09:19] dimitern: will do [09:19] dimitern: is there a particular reason you can see why this scheme won't work? [09:20] rogpeppe, i'm not saying it won't work, i'm just concerned not to introduce regressions [09:20] dimitern: ok, that's cool [09:25] rogpeppe: last one, https://codereview.appspot.com/81780043 [09:26] rogpeppe: I'll look at parallel connection in the API client on Monday, unless you have something else more important? [09:26] axw: thankjs [09:26] axw: i'll have a think [09:26] nps [09:29] rogpeppe, lgtm [09:36] hello [09:40] stupid bot, how long is this going to take, https://code.launchpad.net/~dave-cheney/juju-core/104-fix-lp-1298703/+merge/213195 [09:42] davecheney: looks like the bot is hung [09:42] davecheney: i'll kick it [09:43] thanks [09:43] otherwise i'll check it tomorrow [09:43] davecheney, hey [09:43] dimitern: hello [09:43] i'm not really here [09:43] davecheney, how do you run juju on ppc btw? [09:43] i have a scotch downstairs which is getting impatient [09:43] dimitern: how do I run it ? [09:43] go build launchpad.net/juju-core/... [09:44] mayube I don't understand the question [09:44] ds [09:44] morning all [09:44] davecheney: bot now going again [09:44] thanks [09:44] this is the changing of the guard [09:44] davecheney: it's got to axw's branch first though, i'm afraid [09:44] rogpeppe: no worries [09:44] not much hurry now [09:44] me -> EOW [09:44] voidspace: hiya [09:44] davecheney, I mean on a vm or what machine [09:45] dimitern: we have ppc hardware available [09:45] davecheney, nice! [09:45] dimitern: do you want a machine [09:45] or are you just curious [09:45] you can have a machine [09:45] they are for the juju team [09:45] davecheney, nah, just curious :) [09:45] but it is a non zero amout of work [09:45] davecheney, i have enough on my plate already [09:46] dimitern: right, yes, we have some ppc machines which are cut up into vms so we can each work without having to negotiate for port 17017 and things [09:46] davecheney, good to know, i assume arm vms as well? [09:46] dimitern: not so much [09:46] these ppc machines are kvm vms [09:46] so they are mostly wire speed [09:46] the arm stuff is all inside the arm fast model simulator [09:47] it uses a lot more cpu power, and produce much less impressive results [09:47] for 32 bit arm ubuntu has an AMI which runs userland inside QEMU which is ok [09:47] but still very slow [09:47] that is what sinzui uses for testing and releasing the current arm builds [09:49] adieu [10:09] rogpeppe, 530-lose-hardware-characteristics [10:11] fwereade: oh darn, it failed [10:11] fwereade: will fix [10:11] rogpeppe, cheers [10:15] fwereade: re-approved [10:17] afk [10:23] back [10:39] aghh, test, why wont you fail [10:40] perrito666: not a problem I often have, sadly [10:41] natefinch: I am really having problems replicating it :p [10:47] mgz, fwereade: standup [10:52] gah [10:55] mgz: aghh our ticket is still on todo :p [10:56] well, we're not really doing what that ticket says :) [10:56] haha [10:57] mgz: did you get my full of not wonderful news mail? [10:59] I did, sorry, should have replied [10:59] I think the subcommand thing should just work though? [11:00] ill re read it, i already forgot what I wrote in :p [11:00] it was late [11:07] new rule - we're not allowed to create any more types called "State" [11:11] no new files called cloudinit.go or bootstrap.go [11:20] so just for myself, I started fixing go vet warnings, mainly as a way to force myself to look them up and learn them and explore different types user types in juju-core. My question is, do we ever merge cleanup like that? should I propse this or should I just toss it? [11:22] mergeit [11:23] definitely. Go vet is almost always complaining about something useful that might bite us later (or might even be biting us now and we don't realize it) [11:24] I thought lbox ran go vet? [11:25] I was of that thought as well, but when I went to run go vet manually I didn't even have it installed and lbox never complained I didn't have it. [11:25] natefinch: so it might only run it if you have it? [11:28] natefinch, rogpeppe: how does MA-HA fit in with that agent-config branch of roger's? [11:28] fwereade: it's gonna need some work [11:28] fwereade: rogpeppe said it breaks some stuff in our branch [11:29] natefinch, rogpeppe: yeah, I'm getting conflict twitches as I read it [11:29] fwereade: i think i know what to do - i plan on working on it next [11:29] fwereade: in conjunction with nate'n'wayne [11:30] fwereade: the MA-HA branch as is has potential problems with overwriting previous config settings, which was why i did what i did yesterday as a priority [11:30] rogpeppe: was there stuff that was broken in our branch? I really wanted to get it in ASAP and adding more work to it is disappointing [11:30] natefinch: i believe there was [11:31] rogpeppe, natefinch, wwitzel3: do you guys all have something productive to work on in the face of this? [11:32] fwereade: I have to tweak the local provider's mongo name, from a review comment from andrew, that should be orthogonal to roger's stuff [11:32] natefinch, wwitzel3: if you find yourself at a loose end, there are a good few things that are independently workable on [11:32] simple review for someone: https://codereview.appspot.com/81850043 [11:32] natefinch, wwitzel3: i'm just writing a final test for my config branch, then i'll be with you [11:33] rogpeppe, fwereade : ok, I was planning on doing a review of the agent config stuff this morning and then after that I can work on what ever is needed or pair. [11:33] rogpeppe: ok [11:33] wwitzel3: more eyes always appreciated :-) [11:34] PTAL https://codereview.appspot.com/81570045/ (non-priority cleanup branch) [11:36] voidspace: LGTM [11:41] rogpeppe, natefinch: so, shall I WIP MA-HA? [11:41] fwereade: i think that's fair [11:42] yep [11:53] rogpeppe: thanks [11:54] rogpeppe: but if I remove that error path then my branch is even more trivial! [11:54] rogpeppe: but yeah, true enough... :-) [11:54] voidspace: trivial branches are good :) [11:54] rogpeppe: I can hear the flaming lips... [11:54] voidspace: you can [11:54] voidspace: through my headphones, or is there some bleedthrough to the computer? [11:55] voidspace: from the headphones I assume [11:55] voidspace: i'll mute [11:55] rogpeppe: hah, I wasn't complaining :-) [11:55] but fine [11:55] rogpeppe: I'm making both changes you suggest and then I'll approve [11:55] voidspace: great === vladk is now known as vladk|lunch [12:16] rogpeppe: re APIHostPorts failing in Login, and it being a warning vs. error ... [12:16] axw: oh yes? [12:16] rogpeppe: say the state method had a bug in it. how would we fix it? [12:16] upgrading requires that we connect to the API [12:16] kind of a problem in general... [12:17] axw: interesting point [12:17] axw: login also requires interacting with the state [12:17] axw: i think at some point we have to rely on our infrastructure working [12:18] yeah, I'm just thinking about minimising the surface area for defects. but this isn't really increasing it much [12:18] I'll make it fatal [12:18] axw: as a last resort, it would be possible to directly connect to mongo to change the agent version [12:19] yep [12:19] axw: thanks. i think it's more useful as a fatal error than potentially returning empty API addresses [12:20] fwereade: am adding a test for PerformUpgrades returning an error. unfortunately i'm pretty sure that a substantial proportion of jujud UpgradeSuite is crackful [12:21] fwereade: it seems to rely on knowing what upgrades will be performed, but that's information that will change over time, and is really private to the upgrades package [12:21] rogpeppe, ha, only testable by side-effect again? goddamn jujud [12:21] fwereade: no, it's easy enough to test properly [12:22] fwereade: (by mocking PerformUpgrades) [12:22] fwereade: i've already done that, but i'm just checking that you agree the upgrade-specific tests shouldn't be there [12:24] fwereade: i'm just trying to verify that the upgrades package itself has equivalent tests [12:30] rogpeppe, I agree, they should only be tested enough in jujud to reassure us that jujud does run upgrades [12:30] fwereade: thanks [12:31] man I must be the first person ever to be frustrated that a test is passing [12:32] heh, intermittent failure? :) [12:33] axw: sort of, only fails on CI and sinzui's machine [12:33] I even created a stream to test this hoping to make it fail... yet it works [12:33] oh environmental, even better [12:34] altough it is fun, makes suspense, I have to wait a decent amount of time for the test to finish, so it builds suspense a lot while I do other things [12:35] rogpeppe: for what it's worth, review for the agent stuff is up [12:41] wwitzel3: thanks [12:43] fwereade: if it's ok, i'd like to leave adding that test for another CL - it's a substantial refactor of UpgradeSuite, and pretty much orthogonal to the rest of that branch (and it's a preexisting thing too) === vladk|lunch is now known as vladk [13:09] rogpeppe, I has a bit of a sad about removing the old tests and not replacing them [13:10] fwereade: i don't *think* i've removed any tests [13:10] rogpeppe, ah, ok then, I got the impression that there were some in jujud that you were getting rid of [13:11] fwereade: not right now, but i intend to [13:11] fwereade: because they're inappropriate [13:11] rogpeppe, that's great, cheers, sorry misunderstanding [13:11] fwereade: (the tests for specific upgrade behaviour) [13:11] morning all [13:11] fwereade: i just don't want to burden this CL with the UpgradeSuite revamp [13:12] bodie_: hiya [13:12] bodie_, heyhey [13:12] rogpeppe, +1 [13:12] fwereade: does it LGTY then, given that? [13:12] :) [13:13] rogpeppe, it's had 2 LGTMs and I liked the direction, I can rereview if there's something in particular? [13:14] fwereade: no, that's fine [13:14] rogpeppe, cool [13:14] fwereade: i always like it if everyone explicitly LGTMs :-) [13:37] wwitzel3, rogpeppe: do you guys have a hangout I should join? I'm just working on undoing my changes to local provider mongo service name [13:38] rogpeppe, fwereade, mgz, vladk, quick review https://codereview.appspot.com/81550046 ? [13:38] natefinch: i'm in a hangout with michael currently, but i can join you two [13:38] natefinch: (i'm just testing environment upgrades) [13:40] fwereade, that's what you wanted ^^ [13:40] dimitern, looking [13:40] rogpeppe: not necessary right now. Once we need to figure out what changes to make for the config stuff you did [13:41] natefinch: ok [13:41] natefinch: i'll start working on that, because i think i know what needs to happen [13:41] natefinch: unless you want to do it, of course [13:42] rogpeppe: I think you're in a much better position to do it, since you made the config changes [13:42] natefinch: yeah [13:43] dimitern, LGTM [13:44] fwereade, thanks! [13:51] hmm [13:51] 2014-03-28 13:42:07 INFO juju.worker.upgrader error.go:32 upgraded from 1.17.7.1-precise-amd64 to 1.16.6-precise-amd64 ("https://juju-dist.s3.amazonaws.com/tools/releases/juju-1.16.6-precise-amd64.tgz") [13:53] ummmm [13:55] mgz, dimitern any idea if the landing bot is on holiday today? [13:55] mattyw: i'll have a look [13:56] mattyw: yeah, it's stuck [13:57] mattyw: i'll kick it [13:57] * rogpeppe wished he knew why we get mongods left over from tests [13:58] mattyw: it's going again [14:20] this is worryingly weird. here's an excerpt from the relevant machine-0 log: http://paste.ubuntu.com/7168627/ [14:20] can anyone think of some way that that sequence of events is possible? [14:20] fwereade, dimitern: ^ [14:21] dimitern: FWIW, apart from this issue the upgrade worked fine [14:25] how do I edit my last commit message (presuming I haven't pushed yet)? [14:26] natefinch: you can use uncommit [14:26] natefinch: and then just do another commit [14:27] wwitzel3: thanks, I saw uncommit moments after I asked. [14:27] natefinch: no shame in teddy bear questions [14:27] rogpeppe, that's moot [14:28] wwitzel3: yep [14:28] dimitern: how so? [14:28] rogpeppe, you'll need to change the version from 1.17.7 to 1.18.0 before the upgrade (and rebuild) [14:28] wwitzel3, rogpeppe: btw I merged trunk into my branch again.... trying to keep up to date so it won't bitrot [14:28] dimitern: upgrade steps don't trigger upgrading to 1.17? [14:29] dimitern: ok, i'll start again [14:29] dimitern: it's still a *really* weird issue [14:29] dimitern: and it worries me [14:29] rogpeppe, no, because 1.18 is the target [14:29] dimitern: right, ok [14:30] rogpeppe, what's the weird thing about that log excerpt? [14:30] dimitern: i actually think that upgrade steps should be targetted to minor versions too [14:31] dimitern: the weird thing is that the environ config returned with an agent-version of 1.17; but then a subsequent call to DesiredAgentVersion returned 1.16 [14:31] dimitern: which caused a unit agent to try to downgrade [14:31] dimitern: which caused it to break [14:32] dimitern: rather, it *did* downgrade, but the 1.16 logic then assumed that the config file was 1.12 because there was no version file, and 1.16 config isn't valid 1.12 config. [14:32] rogpeppe, hmm.. well, 1.17 is not a desired version to upgrade to from 1.16 for sure [14:33] dimitern: yes it is, if you've done upgrade-juju --upload-tools [14:33] rogpeppe, it still isn't [14:34] rogpeppe, it's a dev version [14:34] dimitern: really? you're not allowed to upgrade to a dev version, even if you ask to? [14:34] rogpeppe, so upgrade-juju won't try to upgrade you to it automatically [14:34] rogpeppe, that's not the way to ask [14:34] rogpeppe, the way to ask is --version= (i.e. force it) [14:34] dimitern: i thought --upload-tools asked [14:35] dimitern: otherwise upgrade-juju --upload-tools is useless [14:35] rogpeppe, no, it just uploads doesn't change the logic [14:35] dimitern: because you don't know the version that it will choose [14:35] does anyone else see this error in cmd/juju? http://paste.ubuntu.com/7168714/ [14:35] dimitern: (anyway, it demonstrably *does* upgrade, even if it perhaps should not) [14:36] rogpeppe, --upload-tools --version=x.y.z does what you'd expect, but for the upgrade steps to trigger, change version to 1.18.0, then you just need to rebuild and use --upload-tools only, no --version [14:38] dimitern: so why did my environment upgrade to 1.17 when i didn't specify --version? would you consider that a bug? [14:39] dimitern: i still think that if you use --upload-tools, it should use that version, otherwise why would you use that flag? [14:39] rogpeppe, read the help [14:39] rogpeppe, of upgrade-juju - it's all explained [14:40] rogpeppe, you get the default behavior when running it without --version and --upload-tools [14:40] rogpeppe, otherwise you'd get what you'd get :) [14:40] dimitern: so do you think there's a bug currently? [14:41] rogpeppe, because that's the way to upload tools so they can be among the ones to be considered? [14:41] rogpeppe, no [14:41] rogpeppe, it's as designed [14:41] dimitern: i thought you said that using --upload-tools shouldn't consider the uploaded tools if you're currently on a non-dev version [14:42] dimitern: but in my case, it definitely did [14:42] * rogpeppe tries to understand the upgrade-juju help [14:42] rogpeppe, look at the code as well [14:42] [14:32:56] rogpeppe, hmm.. well, 1.17 is not a desired version to upgrade to from 1.16 for sure [14:43] dimitern: doesn't that mean there's a bug? [14:43] rogpeppe, upload-tools does not change the behavior of what's considered desired [14:44] dimitern: right, so since i didn't specify --version, it should not have chosen 1.17 [14:44] dimitern: because the current version was 1.16 [14:44] rogpeppe, the logic is still the same, it just uploads or not; --version changes what gets considered [14:44] dimitern: but since it *did* choose 1.17, i think that counts as a bug [14:44] rogpeppe, the current version was "juju version" [14:44] rogpeppe, i.e. cli's current version [14:44] dimitern: oh really? [14:45] dimitern: that's too bizarre for words [14:45] dimitern: the "current agent version" is the command line tool's version? [14:46] rogpeppe, look at initVersions - that's where most of the magic happens [14:46] rogpeppe, I'm too maas-distracted to be a credible source without switching too much context [14:47] dimitern: FWIW i think it's initVersions1dot16 that's relevant here [14:49] rogpeppe, that's correct [15:11] natefinch: am currently resolving conflicts, FYI [15:12] rogpeppe: coool [15:18] natefinch: well, the conflicts are resolved. now for the meat of it... [15:19] rogpeppe: heh [15:20] rogpeppe, natefinch: is it about time for a hangout session then? [15:20] wwitzel3: i'd be happy to [15:21] wwitzel3: https://plus.google.com/hangouts/_/canonical.com/juju-core?authuser=1 ? [15:22] natefinch: https://plus.google.com/hangouts/_/7ecpj5hnavq7rdcfes1ctdva0s?authuser=1&hl=en === vladk is now known as vladk|offline === Ursinha is now known as Ursinha-afk === Ursinha-afk is now known as Ursinha [16:10] voidspace: ping [16:25] rogpeppe: pong :-) [16:35] fwereade, can I get an LGTM on https://codereview.appspot.com/80600044/ so I can integrate it with supportnetworks() and land it later? [16:36] rogpeppe: you mentioned there were some HA tasks that could be done that you wanted to discuss? [16:36] rogpeppe: you ready to talk about those yet? [16:53] wwitzel3: yeah, gimme a minute or too [16:53] two [16:53] rogpeppe: he's getting lunch, so no rush === hatch__ is now known as hatch [17:34] rogpeppe: ping [17:34] voidspace: pong [17:35] rogpeppe: we need to handle the case where we're unmarshaling and marshaling data with an address instead of statePort [17:35] rogpeppe: what format are the stateDetails addresses? [17:35] rogpeppe, can you review https://codereview.appspot.com/80600044 by any chance? [17:35] rogpeppe: and as it's a slice of addresses, which should I use? [17:35] rogpeppe: is it the standard foo:port [17:36] rogpeppe: and can I use a naive split to get it - or should I find a proper address parsing function somewhere? [17:36] rogpeppe: connectionDetails is defined in agent.go (at the top) [17:36] dimitern: currently overloaded. will do in a bit. [17:36] heh, sorry to add to your burden [17:36] I can dig into this myself if you prefer? [17:37] rogpeppe, cheers, no rush [17:40] * dimitern is away for a while [17:40] voidspace: i'll join you [17:40] kk [17:41] so it is populated from MgoServer.Addr() [18:19] rogpeppe, natefinch https://codereview.appspot.com/81550047 replicaset MasterHostPort [18:26] rogpeppe: if SplitHostPort(format.StateAddresses[0]) errors should we ignore it or should the unmarshal function return an error? [18:27] rogpeppe: this would mean returning an error for data that we *used* to be able to unmarshal fine [18:27] rogpeppe: on the other hand it would leave us without a StatePort which is probably an error... [18:27] rogpeppe: I'm going to turn it into an error [18:28] voidspace: yeah we should definitely error [18:28] rogpeppe: cool [18:33] rogpeppe: actually, we have tests to ensure that we can't write/read an invalid address [18:33] rogpeppe: so it shouldn't be an issue [18:33] voidspace: cool [18:37] right, going jogging - back later === Ursinha is now known as Ursinha-afk === Ursinha-afk is now known as Ursinha [19:56] * rogpeppe is done for the day [19:56] g'night all [19:56] happy weekends to all too [19:57] EOD for me as well [20:00] see ya wwitzel3 [20:00] & rogpeppe [21:20] why does provider/local/environ.go Destroy() execute sudo itself? [21:27] sarnold: bc you cannot operate with lxc without sudo (perhaps I missed where was your question going) [21:28] perrito666: I'm just surprised it doesn't just fail. it seems odd to me to hard-code an authentication mechanism in the source code. [21:29] sarnold: well, I guess since it cannot be run without sudo it makes sense, it is better to run sudo for a particular part than for the whole program (just my opinion) [21:30] perrito666: heh, could be, but it appears to just be recursively calling juju destroy again :) [21:32] sarnold: ah, that is not nice === hatch__ is now known as hatch === Ursinha is now known as Ursinha-afk === Ursinha-afk is now known as Ursinha === arosales_ is now known as arosales