[00:35] thumper: I was going to add a test to make sure the machine unit watcher doesn't show things from other environments but that's opened a whole can of worms in terms of filtering work we need to do and required test infrastructure [00:36] thumper: do you want me to press on or do the minimal work required to get the units env UUID work landed? [00:36] thumper: I'm aware that the identity work needs to get done too === mup_ is now known as mup [01:03] how do you get an agent.Config from state? [01:07] ericsnow: you don't. agent.Config is read from disk, and only from disk [01:08] menn0: how big is that can of worms? [01:08] thumper: at least the rest of the day [01:09] * thumper hears "and Friday" [01:09] axw: my real question is where do I look up the environment's data dir [01:09] thumper: likely [01:09] axw: from what I could tell environs.Config doesn't give it to you [01:09] menn0: well, we know we will need a bunch of extra tests later anyway [01:09] ericsnow: that'd be encoded in the upstart job [01:09] menn0: I say punt on it for now, but leave notes in the code [01:09] thumper: and actually, since writing to you last i've realised that we can't really do this until at machiens have been migrated too [01:10] ericsnow: the agent is told where it is as a command line arg [01:10] menn0: that makes sense [01:10] ericsnow: what are you trying to do? [01:10] menn0: because they all have dependencies on each other [01:10] axw: that's what I gathered [01:10] axw: for backups we currently have a bunch of paths hard-coded [01:10] thumper: I was trying to set up a second env it's own machine, services and units to test with and kept running into collisions with the initial env [01:10] heh [01:10] * thumper nods [01:10] thumper: I will add some TODOs [01:11] axw: I'm looking at how to pull those from elsewhere [01:11] ericsnow: IIRC, datadir is passed into the apiserver as a "resource" ... one sec [01:11] axw: you're right [01:12] thumper: I have a fair idea of how the test infrastructure for this should look (i.e. a new method on ConnSuite to create a new env and an easy way to get a Factory for that) [01:12] * thumper nods [01:12] ericsnow: can you not take it from there then? [01:12] axw: CI blocker: http://reviews.vapour.ws/r/104/diff/ ? [01:13] axw: yeah, I guess I was hoping for a single-source-of-truth for paths [01:13] thumper: looking [01:14] ericsnow: are you guys looking at https://bugs.launchpad.net/juju-core/+bug/1373611 [01:14] Bug #1373611: cannot restore a HA state-server [01:14] perrito666: is this your fix from before? [01:14] thumper: no [01:15] thumper: bugger, I thought our compatibility was only the other way around... [01:15] axw: I pasted back in the code I deleted earlier [01:16] thumper: http://reviews.vapour.ws/r/101/ has a fix [01:16] thumper: yep. LGTM [01:16] axw: yeah... see the bug description https://bugs.launchpad.net/juju-core/+bug/1373424 [01:16] Bug #1373424: method Client.AddMachinesV2 is not implemented [01:16] thumper: for #1373611 [01:16] Bug #1373611: cannot restore a HA state-server [01:16] ericsnow: I was wondering if that was it [01:16] ericsnow: has it been submitted? [01:17] thumper: don't think so: https://github.com/juju/juju/pull/836 [01:21] * thumper submits it [01:32] does anyone know where in the API call steps we unmarshall values? [01:38] wwitzel3: in the magic bit of the code [01:38] wwitzel3: juju/rpc maybe? [01:38] thumper: well, I'm getting ERROR json: cannot unmarshal object into Go value of type names.Tag [01:38] yeah... [01:38] but the logs have no information on where the is being generated from at all [01:39] the wire protocol needs to use strings [01:39] until we fix the wire protocol [01:39] wwitzel3: we could fix it... [01:39] wwitzel3: you just need to provide the json serialization functions for all the concrete types [01:40] wwitzel3: the error is being raised by the json serialization code [01:40] thumper: where is that code? apiserver? the jsoncodec call? [01:40] wwitzel3: the json code? inside the standard library [01:41] json.Marshal [01:41] thumper: I mean within our code, where is the unmarshalling happening? [01:41] wwitzel3: I'm guessing, but probably in juju/rpc where it puts the code on the wire [01:41] wwitzel3: api.client unmarshals actually [01:43] thumper: if I could fucking spell, I'd probably have less questions [01:43] acking for unmarshall exact match wasn't ever going to be helpful [01:44] I'm a moron [01:44] thank you [01:44] Umarshall that is [01:44] I at least had the puncuation right [01:45] thumper: so, is the solution to switch back to strings? or to define how to unmarshal names.Tag? [01:45] wwitzel3: yes... [01:46] wwitzel3: for assistance, version.go:117 [01:46] not sure if you want to go that way or not just yet [01:46] thumper: a Tag is pretty easy type to implement that for [01:47] wwitzel3: yep [01:47] thumper: and it is still that something based on string isn't easily serializable to JSON anyway [01:47] wwitzel3: because we even have the magic parseFooTag mthods [01:47] s/still/silly [01:47] ok, I'll go that route since I think it makes things better [01:47] good luck [01:48] it's just typing [01:48] and tests :) [01:48] yep [01:59] can someone help me [01:59] for some reason I can no longer see both the comments and the diff on the same screen [01:59] davecheney: maybe [02:00] something has happened and reviewboard does not show me the comments that others have made on a review [02:00] unless I go to the "view review" screen [02:00] but then it doesn't show me the code [02:00] and I need to go to the "view diff" screen [02:06] davecheney: I've had to go to view diff screen too [02:06] I thought it was just me getting used to the tools [02:07] thumper: did you merge my fix? [02:07] perrito666: aye [02:07] thumper: thank you sir [02:08] thumper: this worked a few weeks ago [02:08] ie, on the diff screen you would see inline comments [02:08] now they are all hidden on another screen [02:08] btw axw you might have inadvertedly fixed a problem in environs.Environ StateServerInstances congrats, you now subconsciously rock [02:08] how the hell do I change the topic [02:09] perrito666: heh, what was that? [02:09] massive storm in sydney atm [02:09] if i go offline [02:09] please sent paramedics [02:09] heh [02:09] axw: well the bug I fixed should have been triggered long ago but apparently StateServerInstances was returning only one instance :p and after your commit it now returns all the state servers [02:10] ugh [02:10] perrito666: ah :) that only happens for new environments tho [02:10] the bot still things there are ci blockes [02:10] davecheney: dont you prefer us to send an internet technician? I mean I dont see paramedics getting you back online [02:10] but they are both fix committed now [02:10] thumper: takes a bit I think [02:10] perrito666: it was an intentional improvement, didn't know it fixed anything in particular tho :p [02:11] * thumper taps his fingers impatiently [02:12] axw: neither did I, in fact none of us knew it was broken [02:12] axw: the test you added does the same restore did that is why I realized [02:12] thumper: http://reviews.vapour.ws/r/79/diff/# [02:13] can you go to line 100 in filestorage/wrapper.go [02:13] and tell me if the line is properly gofmt'd on your screen [02:14] i'd like you to the line if that was something that RB could do [02:17] * thumper looks [02:18] or this one http://reviews.vapour.ws/r/103/diff/# [02:18] api/backups/list_test.go lines 27 onwards [02:18] it looks liek RB gives up after three levels of indentation [02:18] davecheney: looks properly formatted to me [02:19] davecheney: list_test looks fine to me too [02:20] hang on, screenshotting [02:21] thumper: check your mail [02:21] davecheney: yeah, yours looks different to mine [02:21] davecheney: I see proper formatting [02:22] davecheney: may I suggest it is your shitty browser? [02:22] :) [02:22] chrome, just like everyone else [02:22] hmm... [02:22] it really does look fine here [02:23] chromium here [02:23] fine, i'll just ignore any formatting issues [02:23] the bot will catch them for me [02:55] gah... why is the bot not working out that we have fixed the blockers? [02:58] thumper: http://reviews.vapour.ws/r/93/diff/ PTAL [02:58] menn0: ok [03:01] thumper, i told the buildbot that those blockers were fixed. it seemed to accept builds now [03:01] cmars: how? [03:02] cmars: I thought it looked at LP [03:02] you put $$fixes-$$ in the merge comment [03:05] $$__JFDI__$$ [03:16] ah, crap. buildbot is not remembering the fixes-NNN. i suppose that was already tried.. [03:18] thumper: are you still looking at that PR? [03:19] yup [03:19] thumper: ok [03:19] cmars: I did that [03:19] thumper: just making sure you didn't forget to hit publish [03:19] cmars: that is how it landed the fixes [03:19] cmars, CI is blocked by the two critical bugs in the topic. a fix for 1 of them is being test now [03:20] sinzui: I thought the blockage got removed when we committed them? [03:20] no [03:20] sinzui: are they removed later now? [03:20] ah [03:20] CI was being reopen but the tests dfailed [03:20] we not wait for someone to make the bug fix released when the test is passed [03:24] sinzui: ack [03:24] oh man, so apparently if you implement a method on an interface with a pointer receiver .. every single place in the world you've ever used that break [03:24] wwitzel3: you can't implement a method on an interface [03:24] at least I didn't think so... [03:25] davecheney: ? [03:25] wwitzel3: yeah, the more I think about it, the more I think that you can't do that, it makes no sense [03:26] menn0: published response [03:28] thumper: no, I mean on the concreate implementation [03:28] thumper: sorry, it's late, shitty wording [03:29] wwitzel3: ok [03:29] why does it break? [03:30] thumper: I added the UnmarshalJSON method to the tag interface and then added an implementation on MachineTag. Now I have several dozen errors for does not implement Tag (UnmarshalJSON method has pointer receiver). Every where we reflect tag.(MachineTag) [03:30] which makes sense [03:30] I would need to pass in a pointer [03:30] but there are a ton of touch points in the test :/ [03:31] wwitzel3: you don't need to add the marshal and unmarshal methods to the tag interface... [03:31] wwitzel3: or at least, not yet [03:31] but the params we are sending over the wire are []names.Tag [03:31] wwitzel3: yes, the unmarshal needs a pointer [03:31] wwitzel3: as it changes the instance [03:31] wwitzel3: and not a copy of it [03:32] wwitzel3: hmm... [03:32] maybe you do need it ? [03:33] if I don't add them to the interface, it complains it doesn't know how to Unmarshal a Tag, which makes sense [03:34] I'll figure it out eventually [03:35] tag.(*MachineTag) .. is probably want I want [03:36] thumper: thanks [03:36] thumper: I did make the change in service.go! [03:37] menn0: did you [03:37] thumper: the tests wouldn't be passing without it [03:37] must have missed it [03:37] thumper: but you're right that a migration step would also be needed so I might just undo that [03:37] menn0: ah, so you did [03:37] yeah, it makes me a little sad, but probably faster for now [03:40] thumper: or *evil grin* could we just strip a trailing "/" off the prefix if it's there? [03:40] haha [03:40] thumper: I'm half-serious [03:40] do it [03:41] thumper: alrighty [03:46] that's my favorite exchange of the night [04:04] thumper: http://reviews.vapour.ws/r/93/diff/ [04:05] menn0: do your upgrade test while I have a coffee [04:05] that sounds a bit weird [04:05] but Rachel just got home [04:06] * thumper cracks the whip [04:06] thumper: doing it already :) [04:06] thumper: what's a quick and easy subordinate charm I can add to my test environment? [04:11] menn0: nagios-nrpe [04:12] davecheney: thanks === ChanServ changed the topic of #juju-dev to: https://juju.ubuntu.com | On-call reviewer: see calendar | Open critical bugs: 1373611 [04:30] thumper: well that didn't go so well... [04:30] thumper: some services have disappeared [04:30] thumper: I'm going to check the DB [04:40] oh... [04:43] jam: hey there [04:51] menn0: so... how is the db looking? [04:51] menn0: did you want to talk it through? [04:52] thumper: the db looked as I expected it but obviously something wasn't right [04:52] so the Marshal methods have to be part of the interface definition for the generic names.Tag to support json encoding, and eventually I got it all working on the names package, but there are just too many places where we do something like []names.Tag{NewUnitTag()} .. which no longer works the momemnt you have a pointer receiver [04:52] thumper: I'm just testing the same env with master so that I can be sure it was the units change [04:52] menn0: ok, [04:54] thumper: ok master is fine [04:54] thumper: going to rebase my branch to upstream and recreate the problem again [04:54] kk [04:56] * thumper notices that st.AllServices() definitely leaks services across environments... [04:57] thumper: there's tons and tons of stuff that leaks across envrionments [04:57] thumper: once we have the base DocID changes done we'll need to circle back and deal with all that, writing tests as we go [04:57] agreed [04:58] thumper: I was thinking it might be a good idea to set up an alternate environment in the setup of ConnSuite that doesn't get directly referred to in tests but will expose places that leak [04:59] thumper: unexpected data should show up all over the place and cause tests to fail [05:01] thumper: this canary env should be fairly well set up with several machines, services, subordinate units etc to maximise the stuff it'll expose [05:02] * thumper nods [05:03] the mediawiki charm just won't install at the moment [05:03] that seems reasonable, but potential overkill [05:03] I keep having to ssh to the box and do a "apt-get update" and then run "juju resolved --retry mediawiki/0 to get it to install [05:03] is that expected? [05:03] this is with 1.20.7 [05:04] menn0: local? [05:04] thumper: yep [05:04] menn0: could be due to the apt upgrade / update thing [05:04] your template is out of date [05:04] thumper: right [05:04] thumper: very likely [05:05] thumper: delete the template machine or is there a faster way? (start the template and update it?) [05:05] yeah [05:05] yes to starting the template [05:06] and logging in, and doing an apt-get update/upgrade [05:06] thumper: ok, i'll do that [05:06] then shutting it down again [05:08] (╯°□°)╯︵ ┻━┻ [05:09] ┬─┬ ノ( ゜-゜ノ) [05:09] hey, do we have a stable 1.20.8 yet? wondering when I should expect to need to change to it [05:09] thumper: http://paste.ubuntu.com/8423049/ :( [05:10] thumper: the exact final result doesn't appear to be deterministic either [05:10] menn0: oh crud [05:10] menn0: is it the status collection? [05:10] menn0: units have status [05:11] * menn0 checks [05:11] the status command would be looking there, right? [05:11] yeah but we haven't changed the statuses collection keys yet. [05:11] maybe that's the problem. [05:11] it didn't break services... [05:11] * thumper nods [05:12] menn0: I think... [05:12] menn0: that status should still keep local ids [05:12] but need to check [05:12] it is how it gets the underlying entity [05:12] I'm being called for dinner [05:12] * thumper will be back for team-lead meeting later === thumper is now known as thumper-afk [05:24] morning all [05:26] thumper-afk: the migration steps for units and services have mixed everything up. [05:27] thumper-afk: for example, all services now have a name of "rsyslog-forwarder-ha" I can only tell them apart from the _id. [05:27] thumper-afk: must be something with the generic upgrade function. I'll take a look [06:03] davecheney, hey [06:03] dimitern: o/ [06:04] davecheney, due to the way names.NewEnvironTag() works, you *can* create an invalid tag without panicking, i.e. tag := names.NewEnvironTag(""), then tag.Id() == "" is equivalent to tag == nil if tag used to be names.Tag [06:04] dimitern: thanks for confimring [06:04] i think it is still a bug [06:05] i think the problem is NewEnvironTag("") should fail [06:05] davecheney, I agree [06:05] davecheney, but environ tags are relatively recent, and we still have to support the case when it's not set [06:06] dimitern: i wish thumper was here [06:06] environ tags are basically manditory for mees [06:06] mess [06:06] whatever [06:06] we can't keep continuing to say, oh well, if you don't have an env tag we can just overlook it this time [06:07] davecheney, since I saw your comments too late, I'll do a follow-up to do some of your suggestions and reply about NewEnvironTag [06:08] ok, thanjs [06:08] thanks [06:11] thumper-afk: I've figured out the garbled data following the migration. if you read data into a map using mgo and then save that map in a slice you need to recreate that map before starting the next loop. setting it to nil was sufficient. [06:13] thumper-afk: there's still what looks like a presence issue. after the upgrade the units are marked as down. the agents are started (in the DB too) but the presence check is failing. [06:13] thumper-afk: I'll continue tomorrow. I need to EOD. === menn0 is now known as menn0-eod [06:27] davecheney, wanna have a look? http://reviews.vapour.ws/r/105/ [06:30] looking [06:32] dimitern: looks good, two issues [06:33] davecheney, cheers [06:35] davecheney, I don't think returning an error there is sensible, due to the possibility of not having environ UUID at the endpoint level [06:36] davecheney, and the login *will work* without it, for the same reason [06:36] sure [06:36] davecheney, but maybe adding a warning and continuing will be useful [06:36] var e names.EnvironTag [06:36] e.String() [06:36] no [06:36] e.Id() => "" [06:37] so there is no way to distinguish between presenting an environ id that is "", and the environ id being invalid and passing "" as a fallback [06:37] simply put, there is no point validating if we're not going to reject values which are not valid [06:38] davecheney, given a names.EnvironTag already, Id() == "" is the same as it being invalid === uru_ is now known as urulama [06:38] davecheney, but names.IsValidEnvironment(uuid-or-tag.Id()) works [06:38] crap [06:39] davecheney, the point of that code there is to only use the uuid if it's valid (an improvement from before when we didn't even validate the uuid) [06:40] davecheney, that's why I suggest to do a logger.Warningf("API endpoint has invalid environment UUID %v", uuid) when it's not valid, but still let it through [06:40] i guess that is all we can do [06:40] this will end up being a buig [06:40] i'm sure of this [06:40] but what else can we do [06:40] or maybe "ignoring invalid API endpoint environment UUID %v" [06:41] sure [06:41] yeah, we can incrementally make it better :) [06:48] davecheney, updated - http://reviews.vapour.ws/r/105/diff/1-2/ === uru_ is now known as urulama [06:53] davecheney, is it good to land like this? [06:55] jam: contributions to things like gwacl still need CLA signing, right? [06:56] axw: I'm pretty sure all our stuff is (c) Canonical under the same CLA [06:56] so they don't need to sign it separately [06:56] but it does need to be signed [06:56] jam: ok - someone sent in an MP for gwacl specifically [06:57] if they've signed, it shows up on their LP ~ page right? [06:57] axw: I see "Canonical Contributer Agreement" as one of my groups on https://launchpad.net/~jameinel/+participation [06:57] so I think so [06:58] thanks [06:58] though I don't see it for https://launchpad.net/~axwalk/+participation [06:58] jam, hey, can you have a look at http://reviews.vapour.ws/r/105/diff/ please? [06:58] I'm not sure that everyone in "Canonical" is also in CCA [06:59] dimitern: can you actually compare Tag objects? I thought it was an interface, and you don't want to compare exact internals [06:59] if you can, those changes seem fine [07:00] jam: AFAIK, only required if you don't work for Canonical; employment contract covers employees [07:00] I'm just concerned if doing "t1 := names.Tag("foo"); t2 := names.Tag("foo"); t1 != t2" [07:00] axw: right, you don't need to sign it, I just mean you need to look for one or the other [07:00] ah yep [07:01] jam, only names.Tag is an interface, the others are simple structs implementing it [07:01] dimitern: axw: https://launchpad.net/~not-canonical :) [07:01] hehe [07:02] I got there from jelmer, who used to work at canonical [07:02] Trying to find someone who isn't me or at canonical who should have signed the agreement to confirm participation [07:02] jam, yep that's the "former employees and people often mistaken as employees" list :) [07:03] dimitern: is there a simple way to link part of an RB diff? [07:03] I'm looking at one that is very-much comparing a names.Tag to a names.Tag [07:03] jam, you can link a X-Y diff, like this http://reviews.vapour.ws/r/105/diff/1-2/ [07:04] dimitern: yeah, I want to link a line in the review: http://reviews.vapour.ws/r/105/diff/#1 [07:04] one of those is *definitely* a names.Tag [07:04] jam, apistate.EnvironTag() (names.EnvironTag, error) [07:05] jam, and environ.EnvironTag() (names.EnvironTag) [07:05] jam, confusingly enough, environ has at least 4 more Tag methods - ServerTag, Tag, etc. [07:05] func(tag names.Tag) bool { [07:06] dimitern: ^^ [07:06] from 3 lines above that [07:06] jam, aah, this one [07:07] jam, yeah, but it really is a names.EnvironTag [07:07] jam, because we do tag, err := ParseEnvironTag(strTag) and then call canAccess(tag) [07:08] jam, it's just wrapped inside a names.Tag due to the way AuthFunc is defined [07:09] dimitern: http://play.golang.org/p/wbU4gcGnWe seems to work [07:10] the interface isn't the same, but it seems to compare the underlying object [07:11] jam, http://play.golang.org/p/DzZ6RmhiE3 [07:12] jam, :) yep [07:12] dimitern: in your example you're using concrete types, Tag isn't doing anything [07:13] ah, I guess 'u' was wrapped in a Tag [07:13] jam, exactly [07:14] jam, if I had func(tag Tag) bool { return tag == internalTag }, I could call it like f(Tag(u)) [07:14] oops, I meant just f(u) [07:14] dimitern: so what I was more concerned about was the e1 == e2 [07:14] because the interface comparison *could* compare the underlying pointers [07:14] rather than the objects that those pointers represent [07:15] dimitern: but you can use all kinds of wrappers, "==" seems to just compare the underlying structs [07:16] jam, yeah, but if that's the case st.EnvironTag() will return some different pointer than the tag arg points to [07:16] and they'll never be == [07:17] yeah, I seem to recall some doc or article about golang that comparisons work like that [07:18] jam, so, is it good to land? [07:18] jam, I have at least 2 follow-ups queued :) [07:20] dimitern: this seems strange: if names.IsValidEnvironment(apiInfo.EnvironTag.Id()) { [07:20] convert it from being a tag, just to check if it was a valid tag [07:20] not saying there is a better way [07:20] LGTM [07:20] jam, if you follow the discussion we had earlier with davecheney [07:21] jam, NewEnvironTag does not panic or validate at all what you give it [07:21] it's a bug, but kinda intentional wrt backwards-compatibility for envs without uuid [07:21] jam, thanks! [07:21] dimitern: sure, it just feels like something that should be "tag.IsValid()" [07:22] jam: no [07:22] i disagree [07:22] you should never have to ask tag.IsValid [07:22] there are two possiblitues [07:22] var t names.Tag [07:22] t == nil { // not a valid tag, in fact not a tag at all [07:22] var t names.UserTag [07:22] t _must_ have a valid value [07:22] ie, don't do this [07:22] do this insteat [07:23] t := names.NewUserTag [07:23] -> panic [07:23] better do ParseUserTag [07:23] yes [07:23] dimitern: well, you should never panic in response to user input. [07:23] jam: good point [07:24] +100 [07:24] william thinks we should only use tags over the api [07:24] so in a way they are not user input [07:24] davecheney: validating in the client sending the data != validating in the server receiving the data [07:24] but they are still strings when passed over the wire [07:24] "just don't send bad data" [07:24] yes, and we do that across the api boindaries with ParseUserTag [07:24] and then my servers won't crash [07:25] it gets more interesting when you're writing the implementation of, say [07:25] juju ssh unit/0 [07:25] the command needs to convert that string into a unit tag [07:25] and it isn't as simple as [07:25] i'm itching to write a simple DoS script that given an api endpoint tries API calls with all sort of crazy tags [07:25] :) [07:25] "unit-"+argv[1] [07:26] dimitern: you're welcome to try [07:26] that path is very well tested [07:27] davecheney, yeah, at least for all facades I wrote; not all of them check all cases though [08:21] hey guys; I'm currently working on some tests in which I need to patch the container type as obtained from (juju/api.State).Agent().Entity(machineTag) === ChanServ changed the topic of #juju-dev to: https://juju.ubuntu.com | On-call reviewer: see calendar | Open critical bugs: None [09:34] ah, ffs. "github.com/juju/txn" depends on "github.com/juju/juju/testing" not "github.com/juju/testing"... [09:41] jam: just commented on the PR - we can fix that by disabling TLS. I can do that now if you like [09:41] I don't think there's any need for TLS in these tests [09:43] axw: yeah, I brought that up to bogdan, but seems fine as long as someone else agrees. [09:57] dimitern: was there a particular reason for choosing ^ over ! for excluding networks? [09:58] (I'm just curious) [09:58] heh I was just going to ask that. [09:58] :) [10:01] man, I swear the calendar on my phone said the team meeting was now... must be an old copy [10:01] axw, natefinch, yes, mainly due to ! having special meaning in bash and also fwereade and jam recommended ^ vs. ! IIRC [10:02] dimitern: ok, I had suspected bash. makes sense. [10:05] wow, that is a damn shame [10:05] (bash, that is) [10:06] ! is so much more obvious, but yeah, since bash decided no one ever gets to use !, there's no real alternative [10:07] nobody's very happy with bash today === fabrice is now known as fabrice|lunch [10:27] dimitern: TheMue: taking the dog out, will try to be back in time [10:27] jam, sure [10:28] jam: no problem [10:30] gsamfira: nice point on Juju units not needing rsyslog anymore [10:30] removing external dependencies is already paying dividends :) [10:31] natefinch: I should have removed that dependency in the same commit. I don't know where my head was [10:31] natefinch: less moving parts, the better [10:32] gsamfira: especially since we let people install random stuff on the same machine [10:48] dimitern: standup? [10:53] jam, sorry, brt === thumper-afk is now known as thumper [11:01] TheMue: I think you clicked the link :) [11:01] ouch [11:01] TheMue: I'll give it a look, right now i'm in the team leads meeting [11:02] ok === fabrice|lunch is now known as fabrice === jacekn_ is now known as jacekn [11:54] * thumper -> bed [12:02] jam, hangout? [12:02] cmars: brt === AndChat|9081 is now known as bogdanteleaga === urulama is now known as urulama-afk === jheroux_away is now known as jheroux [12:57] jam, re: login API PR, just pushed a minor comment fix, and confirmed v0 facade fallback on current master [12:58] cmars: thanks [12:58] we just had: FAIL: upgrade_test.go:420: UpgradeSuite.TestLoginsDuringUpgrade fail in a seemingly unrelated change [12:58] is that a known flaky test? [12:59] It failed with: c.Assert(err, gc.IsNil) ... value *params.Error = ¶ms.Error{"", "upgrade in progress - Juju functionality is limited"} ("upgrade in progress - Juju functionality is limited") [13:00] spurious "upgrade in progress" errors is definitely a problem we've hit with the tests before... I forget exactly what causes it [13:00] natefinch: its a race-ish condition iirc [13:01] authenticator enters upgrade mode because of the upgrade worker and this doesnt finish before the test does whatever its trying to do [13:01] dimitern: ping [13:04] perrito666, pong [13:04] dimitern: I see that you assigned me a card during the night/mornign [13:04] was that a mistake or you really wanted to assign that to me? [13:05] perrito666, mistake, sorry - it was about the AddMachinesV2 API not implemented on 1.18; I added a card, found the issue, commented on the bug and realized I won't have time to fix it, but thumper did it [13:06] np, just trying to figure out if action was required from me [13:25] I wonder if this is the image people has of us http://io9.com/scorpion-brings-the-stupidest-most-batshit-insane-hack-1638333877 [13:28] WTF [13:29] seriously, totally unrealistic. If you have to stop as fast as possible, why would you turn your tires SIDEWAYS?! [13:34] perrito666, lol, that was amazing [13:36] I don't care about the ridiculous antics of flying an aircraft 20 feet off the ground w/ ethernet dragging behind... but the fac tthat they think you can't land an airplane without software is just ridiculous. [13:37] especially when they show you can get most of a touch&go [13:38] natefinch: apparently his car doesnt have abs [13:40] also, really? nobody has a laptop? does not seem to be a very large quantity of data [13:40] they can copy it to a sd and then just throw that over the window :p [13:40] I know it is my own fault, but perrito666 .. you own me 2:17 of my life back [13:41] i'm just still amazed at the strength of that rj45 connector [13:41] I believe that these shows are written the following way: "we have the following stunts on budget, lets add some argument around [13:41] cmars: that is the only believable thing from the video .. I've seen the damage a cable accidently hooked around a foot does ;) [13:42] ooh ouch [13:42] cmars: I am equally amazed of the strength of the rj45 adapter of the laptop which should be as strong as a mini usb connection [13:44] jam, what do you think re: https://github.com/juju/juju/pull/392. ok to land? [13:45] perrito666: also if you're driving a 458 you should probably have flipped the ABS to off anyway, otherwise you shouldn't be driving a 458. [13:45] wwitzel3: I drive an opel corsa from BEFORE abs so I wouldnt know [13:48] I have arrays, I'd like all their content to be in a single array .. there are points in the code where we validate each item, in each array .. so should just add an append to the validation loops of each array? [13:48] wwitzel3: you lost me a bit there [13:50] I have 3 []string, I want to make a 4th []string that holds the contents of the all the []string. There are loops that already validate each item in the original []string. [13:50] So, should i just add an append for my new array to each of the original []string loops? [13:50] Or is there a better Go way [13:52] wwitzel3: is it ok to modify in place? [13:52] wwitzel3: you can do "ar1 = append(ar1, ar2...)" [13:52] ar1 = append(ar1, ar3...) [13:52] else, you can create a new ar, and then do appends [13:53] wwitzel3: but "append(foo, slice...)" will append all of slice to foo [13:53] wwitzel3: no loop needed [13:56] wwitzel3: there's no "mash these N slices together". foo = append(foo, bar...); foo = append(foo, baz...); foo = append(foo, bat...) is the best you get [13:56] natefinch: that would be a nice feature to have [13:57] natefinch: not really. The 3 lines are perfectly clear. If you really want, you can make it into a single loop for _, s := range [][]string{bar, baz, bat} { foo = append(foo, s...) } [13:58] talking to self? [13:59] natefinch: you could chain your appends too: append(append(append(foo, bar...), baz...), bat...) [13:59] katco: nice listp [13:59] lisp [13:59] oh camon that's not lisp lol [14:00] append is like a cons... hmm [14:00] haha [14:00] yeah perrito666, lisp is 2 brackets per every other character. [14:00] lol [14:01] I actually like lisp, but it is just so much fun to pick on [14:01] wait, you can actually use it? I thought it was just for the lulz [14:01] :p [14:01] natefinch: ericsnow wwitzel3 stdup? [14:02] perrito666, ericsnow, wwitzel3: there's actually a TOSCA call now, and wwitzel3 and I should probably be on that [14:02] can we delay until the afternoon? [14:02] I have another meeting after tosca today [14:03] natefinch: np, better for me I can continue with my enrique iglesias playlist [14:03] perrito666: nice [14:03] haha [14:05] you guys laugh as if it was a joke [14:05] I'm just sad you don't share during standups [14:05] perrito666: I wasn't laughing :) [14:05] I was [14:06] perrito666, natefinch: now I'm laughing [14:06] its very good to concentrate, there is no way you can get carried away with his music [14:06] heh [14:06] perrito666: so it's like a white noise generator/sound machine [14:07] ericsnow: latino white noise :p [14:07] lol [14:07] its much like listening to fm radio without the guy speaking and the pub [14:34] interesting, so if a method returns type FooBar, which is a concrete implementation of an interface Foo, I can write var f Foo .. then f = GetFooBar() [14:34] but I can't create a function that takes a function that returns type Foo and then pass it a function that returns type FooBar [14:47] wwitzel3: I believe it compares the identity of the function there, what you propose requires a bit more inteligence [14:48] you can double wrap though [14:48] func () (yourinterface){func()(your concrete type)} [15:02] is there an easy way to restart the jujud process running on machine-0 ("service" and "initctl" don't see the upstart job)? [15:03] ericsnow: kill it and let upstart restart it? [15:04] natefinch: isn't initctl an interface for upstart (it doesn't see the job)? [15:04] natefinch: I'll try it [15:05] natefinch: well, that worked [15:05] natefinch: thanks [15:06] ha, since starting with Go I keep typing $GOHOME instead of $GOPATH [15:07] guess my subconscious is trying to tell me something [15:09] ericsnow: something strange indeed, since you work at home [15:10] perrito666: yeah, but in the context of programming languages, Go isn't home :) [15:10] } [15:11] well I hope never need to go home bc I dont really feel like making assembly and BASIC again .p [15:11] :p [15:11] ha === fabrice is now known as fabrice|family [15:48] ericsnow: for me $GOPATH=$HOME ,so in essence, $GOHOME is correct :) [15:48] natefinch: :P [15:49] although, what really revolutionized it for me was $CDPATH=$GOPATH/src [15:49] so I can do cd github.com/juju/juju and it does the right thing [15:57] anyone know lxc and want to help a user in #juju? he has a bunch of lxc containers that aren't coming up, though existing ones work fine [16:00] OCR: trivial change to fix go vet warning http://reviews.vapour.ws/r/106/ [16:02] Anybody? I am the world's least helpful person when it comes to lxc [16:04] natefinch: my only bit of wisdom about lcx containers is when the templates get messed up : http://irclogs.ubuntu.com/2014/07/30/%23juju-dev.html#t02:08 [16:08] does juju not harvest machines if there are no running units on them? [16:09] katco: if you remove the last service on them it will, yes [16:10] it used to not, by default, but now it does, by default, and there's a setting somewhere to turn it off [16:10] well i worked on the harvest mode settings [16:10] i thought it worked like that, but i wanted to 2x check before replying to nick moffitt's email [16:10] hi [16:15] katco: so even if it's supported, it can be important to remove a unit, do a postmortem, and then manually destroy it later [16:15] katco: so having the tools show you the states of things is essential even if you can have it auto-destroy [16:15] Spads: oh hi :) [16:16] my last name has an unique spelling, so I tend to highlight on it :) [16:16] Spads: right i was just about to respond... i love your idea to return 0 if nothing is errored. i'll add that to the spec and look into it [16:16] Spads: :D [16:16] Spads: so does the filtering take care of your post-mortem use-case? exit-code aside [16:17] katco: can you filter machines that are not associated with services? [16:17] Spads: sure, if you specify a state, it just looks for that state [16:18] katco: but "not used by any service" isn't a machine state [16:18] the machine shows up in machines: but nowhere else [16:18] also again, I'm not interested specifically in ERROR [16:18] Spads: oh sorry, i misunderstood [16:18] but also in anything that isn't perfect [16:18] anything in progress [16:18] Spads: so you'd like a filter on un-utilized? [16:18] anything pending [16:19] yeah [16:19] basically when I run juju status it's to learn about things that are out of the ordinary [16:19] so I don't want to see services that are STARTED or machines that are JUST_FINE_THANKS [16:19] haha [16:19] I want to see everything that's *not* those [16:19] like I want to filter *out* states [16:20] does that make sense? [16:20] Spads: hm. wondering if it would be acceptable to add a not conditional to the filter [16:20] yeah [16:20] or if that's too fancy/scope creep [16:20] well I think that filter/filter-out are a common pattern [16:20] grep/grep -v [16:20] etc [16:20] i don't think i can make the decision, but i at least understand what you're saying now [16:20] select where not... [16:21] i'll write up a user-story for you to look at to make sure i have it right, and then i'll check in with a lead [16:21] cool, do you want to summarise it for the list? [16:21] Spads: sure will do [16:21] That's perfect. Many thanks! [16:21] Spads: thank you for the input :) [16:21] if I had my druthers [16:22] juju status would behave as I described above [16:22] and juju status --verbose would dump the whole state [16:22] but I think that ship has sailed :) [16:22] as default [16:22] ? [16:22] yep [16:22] i believe we're planning on moving to --format summary as default [16:22] which makes the sitaution at least a little better [16:22] I'll have to find time to take a closer look at tip [16:22] but i don't think that decision has been made yet (hint hint) [16:23] like a 1.21 or 1.22 thing i think [16:23] * Spads nods [16:23] at any rate. good discussion. i'll update the spec [16:25] excellent. Thanks for your time! [17:12] so what's the policy on gopkg dep versioning? [17:13] I have a breaking change to charm I need to make, and a juju/juju branch ready to land which unbreaks it, I just need to figure out whether I need to move to charm v5 or how to properly integrate my work [17:13] bodie_: what specifically? [17:14] it's just a variable rename but it does cause juju to fail the tests without the core branch, so I'm thinking it would need a new gopkg charm version [17:14] bodie_: on the charm package? [17:14] ah. not sure that's been fully argued yet. in theory, yes, vNEXT and change imports and dependencies.tsv for juju [17:14] but there was a thread recently with jam and rog about charm specifically [17:14] bodie_: because we have stuff on that as well to keep up to date. rogpeppe has done a lot of work around the charm package and versioning and would be good to make sure we're in the loop [17:15] bodie_: what's the variable? [17:16] rogpeppe, renaming ActionRequested to Action per fwereade, and removing it from unitHooks [17:16] bodie_: in general if something's in gopkg.in, we try very hard to keep changes backwardly compatible according to the rules specified in http://gopkg.in/ [17:17] rogpeppe: fwiw, I'm fairly sure no-one has actually depended on that variable in production yet.... [17:17] bodie_: you could just keep the old ActionRequested variable around [17:17] bodie_: and document it as deprecated [17:17] rogpeppe: +1 [17:17] hmm... so use both [17:18] bodie_: it can be deleted if/when we change the version [17:18] ok, and then leave it as v4 since it's not a breaking change? [17:18] bodie_: yeah [17:18] jcw4: i also am tempted to agree with you about known users [17:18] jcw4: but... [17:18] rogpeppe, that makes sense. my other question is whether I need to rebase it on master or on the godeps'd version [17:19] jcw4: i think it's nice to exercise this stuff so we know what to do when we *do* have users... [17:19] rogpeppe: +2 [17:19] rogpeppe, jcw4, there's already code in core using ActionRequested [17:19] fwiw [17:19] bodie_: i don't understand that question [17:19] bodie_: why do you need to rebase anything? [17:20] rogpeppe, I have a commit to charm I want to land on top of the commit history... what I normally do is rebase my changes on top of master to ensure they're compatible with the current version [17:20] FWIW, i agree with fwereade about the name change [17:21] bodie_: that seems usual, yes [17:21] bodie_: (i often don't actually rebase, but merge then reset) [17:22] rogpeppe, but in this case, the version of charm in use by juju core (i.e. the hash from godeps) isn't master, unless I'm mistaken [17:22] i seem to get less conflicts that way [17:22] interesting [17:22] bodie_: that shouldn't influence how you land changes to charm [17:23] bodie_: it just means that juju-core hasn't caught up with recent charm changes [17:23] rogpeppe, I just don't want to make a change to godeps that implicitly includes a charm version that juju isn't built against [17:24] i.e. if Juju is on charm version C and my change is version A (i.e. master), but A includes B because A was rebased onto B instead of onto C.... am I making sense here? [17:24] say B was the previous master [17:25] bodie_: the entry in godeps should always reference a commit in the dependency's history [17:26] bodie_: you'll just be adding to the head of that history, so juju will be pointing somewhat back in time [17:26] bodie_: and when juju is ready, it can change godeps to point to the new charm master [17:27] bodie_: i'm not really understanding your question in fact [17:27] bodie_: godeps *specifies* which charm version juju is built against [17:27] right [17:28] bodie_: and all that matters is the state at that actual referenced commit. if there are some commits in the history that juju was never built against, it doesn't matter [17:29] bodie_: in the end, just commit to the charm repo as if juju didn't exist [17:29] bodie_: then change juju to refer to the newly pushed commit by changing godeps [17:30] bodie_: does that make sense? [17:30] rogpeppe, then, I guess my question is more about juju; I notice godeps indicates a version of charm older than master, so if I land my charm changes on top of charm master, then update godeps to the new charm master, it will implicitly include the charm master that I landed on top of, which previously wasn't in juju's deps [17:30] bodie_: yeah, that's fine. it's water under the bridge [17:31] bodie_: the charm package could change very frequently, but juju wouldn't need to update godeps for every commit [17:31] rogpeppe, I assumed that if godeps points to an older charm hash, it's because juju isn't ready to have the newer charm master [17:31] ah [17:31] hm [17:31] bodie_: you're right that one of those new commits could break juju [17:31] bodie_: it's usually a good idea to update godeps to the latest commits to all dependencies [17:31] bodie_: (one of the ones that you didn't author) [17:32] natefinch, exactly [17:32] bodie_: particularly for gopkg.in deps [17:32] bodie_: for others, you have to be more careful because changes might not be backwardly compatible [17:32] bodie_: there's not really anything you can do about that except try it, and if it breaks, figure out who made the intervening commits, and figure out why it broke [17:32] rogpeppe, regarding gopkg.in deps, that does make sense; I think my confusion about gopkg came because I had previously used gopkg for charm and been advised not to do so [17:33] bodie_: but in theory, the whole pooint of using gopkg.in is that you're *not* supposed to make breaking changes on the same branch [17:33] bodie_: but you can't do anything too bad because the 'bot will throw your PR out if the updated dep breaks something [17:33] bodie_: yeah, davecheney doesn't like gopkg.in [17:33] bodie_: but it's too late now [17:34] true, and it passes all my tests. hmm... the current charm master must be for a juju branch that hasn't landed. [17:34] bodie_: and i think it makes a lot of sense, although there are potential issues too [17:34] I don't see what the difference is, really. We could also just use github.com/juju/charm.v3 instead of a branch called v3 [17:34] natefinch: except then you'd need a different repo for each version [17:34] natefinch: so you couldn't share issues between them [17:35] rogpeppe: right... .my point is, gopkg.in isn't hurting anything. It's just like using a completely different package whenever you change version numbers [17:35] natefinch: yup [17:35] rogpeppe: and it makes many things nicer, like issues on the [17:35] repo [17:35] bodie_: the recent charm changes were probably just me adding to the bundles in the charm testing dir [17:35] single point of failure, bus factor of one... just saying [17:36] natefinch: yeah. dave's objection is to having the version encoded in the package path [17:36] bodie_: it's not a spof [17:36] bodie_: there are fallback servers [17:36] well, assuming whoever's paying for gopkg.in stops paying for it [17:36] bodie_: and the code is almost trivial [17:36] bodie_: you're assuming that it costs something to run [17:36] if gopkg.in goes away ,the biggest thing we have to do is move our branches into separate repos and find/replace in the code [17:37] bodie_: i suppose the domain name costs something [17:37] or run our own redirector [17:37] fair enough [17:37] rogpeppe: servers that fail over to one another generally aren't free [17:38] rogpeppe: though I guess thinks like heroku and GAE do offer free tiers [17:38] yeah, I didn't mean a technical single server but rather the service itself, but I don't see it going away if people depend on it and it's foss [17:38] just the domain is mildly problematic [17:38] potentially [17:38] bodie_: the domain name can go away ,and that's nearly as bad as the service going away. But still, all it requires is a find&replace and you're back in business. [17:38] haha, I'm seriously not saying I *think* this would happen [17:39] yeah, good point [17:40] heh, I always wonder how long github is going to be around [17:40] bodie_: one nice thing about gopkg.in is that it needs no persistent state at all [17:40] bodie_: yeah [17:40] anyway, i gotta [17:40] go [17:40] sure, take care. thanks for the advice [17:41] bodie_: np, good chat [17:41] g'night all [17:41] thanks for the help rogpeppe, night [17:52] for the gopkg deprecated variable, should I mention it in README or is it sufficient to comment the variable with a TODO? === BradCrittenden is now known as bac [17:56] bodie_: I'd say in the code is fine [18:05] natefinch: meeting [18:05] ericsnow: likewise [18:30] is there a situation where juju would not run kvm-ok? like maybe on an amd system? [18:30] http://paste.ubuntu.com/8427274/, line 1484 just says kvm container creation failed [18:30] but thats it [18:52] is trunk broken? [18:52] I tried to bootstrap on ec2 and it takes a long time and then says "no instances found" [18:53] mmm.. godeps out of date.... will retry [18:56] can I get an LGTM on https://github.com/juju/charm/pull/53 please? [18:57] it's a -3/+2 pr [19:01] and yet it took two commits [19:01] * natefinch is just giving you a hard time [19:02] bodie_: is that right, you just removed action-requested from unitHooks? [19:03] heh === katco` is now known as katco [19:03] natefinch, yeah, and added Action kind [19:03] labeled ActionRequested DEPRECATED [19:04] it's just a dep for 617, is the thing, which is horribly overripe and finallyready to land [19:07] ok, I guess? I don't know that I have a good enough idea of how this stuff is used to have any clue if you're breaking everything or not. I guess as long as no one calling UnitHooks() relies on ActionRequested being in there, that's ok. [19:10] natefinch, bodie_ I hope both of you can help with the situation in https://bugs.launchpad.net/juju-core/+bug/1374087 [19:10] Bug #1374087: Joyent is not deploying services reliably [19:10] natefinch, doesn't break juju core [19:10] natefinch, bodie_ I don't have much information :( I can collect what you advise [19:11] natefinch, the goal is to prevent people from calling using an Action as a UnitHook [19:11] "calling using" = using... derp [19:15] bodie_: lgtm'd [19:16] natefinch, thanks [19:16] sinzui: looking === Ursinha is now known as Ursinha-afk [19:26] sinzui: do we have a contact at Joyent we could talk to? You'd think that a change that breaks outside users would be somethign they'd want to communicate with partners [19:27] natefinch, I don't know who it is, but I know who I can ask === Ursinha-afk is now known as Ursinha [19:45] mgz: how do we persuade CI to pick up a merge when there are LOTS of comments on the review? [19:47] jcw4: that should be no blocker [19:47] jcw4, I think mgz merged his paging fix [19:48] perrito666: I vaguely remembered a discussion where lots of comments pushed the $$merge$$ onto a new page [19:48] sinzui: I see [19:48] jcw4: what sinzui said [19:48] sinzui: bodie_ is trying to land 617 [19:48] and it's not being noticed by CI [19:51] sinzui, mgz if you get a chance can you help us out in getting CI to notice that 617 is ready to land? [19:52] jcw4, I don't have access to the machine or experience with the server [19:52] sinzui: okay, thanks! I don't know who else to ask... wallyworld maybe? [19:52] I guess he's not on [19:52] I see the paged comment support is merged https://github.com/juju/jenkins-github-lander/commits/develop [19:57] btw if anyone wants to lend a hand in #juju, it would be appreciated. Trying to debug one guy's mystery machine and now a second guy has come on. [19:57] natefinch: feel like a one armed paper hanger? [19:58] yep [20:10] ug... people really need to remember to update the help on commands [20:10] juju upgrade-juju still says odd minor versions are considered development versions [20:30] dumb golang question.. i'm looking at the ec2 provider / ec2.go ... its got a couple lines like this var _ environs.Environ = (*environ)(nil) [20:30] is that some sort of side effect for the compiler to check? [20:30] ie. another.. var _ simplestreams.HasRegion = (*environ)(nil) [20:31] hazmat: yes, it's a compile-time check that environ fulfills the environs.Environ interface [20:32] just a belt and suspenders check, really, since tests should also be checking that... but it can't hurt to have the compile-time check, too. It's useful for packages that intend to fulfill an interface, but don't actually use their type as that interface inside the package [20:34] magical side effects ;-) [20:34] cool [20:35] more like inline assert instance creation cast [20:37] sure [20:38] except not magical at all. :) [20:48] any sufficiently advanced technology is indistinguishable from magic [20:48] :P [20:51] sinzui: thank you for all your efforts with releasing 1.20.8 [20:52] your welcome katco [21:14] hmmm, so how should I land 617? the CI bot doesn't seem to be picking up my $$merge$$ [21:15] I guess I have to wait for wallyworld? [21:15] bodie_: I wouldn't wait for wallyworld, he on holiday for a bit :) [21:20] thumper, any suggestions? [21:20] bodie_: which PR? [21:21] https://github.com/juju/juju/pull/617 @thumper [21:23] * thumper shrugs... [21:23] I wonder if the bot is awake [21:27] thumper, I think so. jcw4 was saying he landed a trivial earlier today, I believe [21:27] yep [21:27] thumper, we thought it might be the pagination issue with PR comments, but apparently a fix for that was landed [21:28] I almost wonder if the fixed code is running on the ci server? [21:28] bodie_: I have no idea, sinzui? [21:28] already pinged him earlier.. [21:29] thumper, the lander is not connected to CI. It does defer testing to CI though [21:29] ah === jheroux is now known as jheroux_away [21:37] so this is a dead end until wallyworld is back? [21:40] running a local environment, should an "ubuntu" user exist on my box? [21:44] ericsnow, the answer is NO but... [21:46] ericsnow, there is an insane edge case that is not fixed. If your local host is a server ubuntu, you cannot delete the ubuntu user. its ridiculous because localhost on server or desktop always creates the container under the login users name, but when the os is the ubuntu server an the ubuntu user is deleted, juju trys to use it anyway [21:47] got it [21:47] thanks [21:53] bodie_, I have a cunning plan...can you create a new pull request for your branch, and leave a comment with a link to the stuck PR and $$merge$$ [21:54] bodie_, maybe the problem with the lander is that it is a few revs behind trunk, which has the paginated comment fix [21:55] sure, I'll try that. thanks sinzui [21:58] thumper: working on getting back in network went boom or something [21:59] I need to EOD now and it will be a hard reset because I need to switch to OS X to build juju and let my computer get the reboot it wanted on Monday [22:06] oh thank zombie baby jesus, the lander picked it up [22:29] anyone know what the deal is with godeps -t reporting differences even on master? I'm scouring my inbox but not seeing a discussion about a new "right way" [23:00] thumper, waigani, davecheney: standup? [23:00] menn0: geez on the dot of 11 === mup_ is now known as mup