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

davecheneyor make StreamsVersion private00:00
davecheneyeither way00:00
davecheneyonce it's public people will starting using it for things00:00
davecheneythink of the version.Version cluster fuck00:00
=== Ursinha is now known as Ursinha-afk
perrito666davecheney: I did00:06
perrito666wait00:06
perrito666davecheney: expand that00:06
davecheneyperrito666: i cannot see any comments on reviewboard00:06
davecheneythis may not be your fault00:07
davecheneyit could be RB00:07
perrito666davecheney: which one, I sent you two emails00:07
davecheneyperrito666: did you place any comments on http://reviews.vapour.ws/r/18/00:07
perrito666no, I just LGTMd, I see you added a comment, I am checking what I missed now00:07
perrito666I did add several comments to 33 though00:07
davecheneyperrito666: cool00:08
davecheneyto restate, this is not a critisism00:08
davecheneyjust checking that i'm not missing things recorded in reviewboard00:08
davecheneyi find it's interface as comfortable as riding a tractor00:08
perrito666davecheney: that is ok, I just went back to take a look just in case, I a a bit lost in RB still00:08
davecheneyperrito666: 33 is NOT LGTM00:09
perrito666davecheney: last tractor I rode was waaay better than my car00:09
perrito666davecheney: odd, dimitern said that this change was suggested by you00:10
davecheneyyup, he's fixed some todos00:10
davecheneywhich is awesome00:10
davecheneybut changed the tags inside some structures which i'm super protective of00:11
perrito666davecheney: <dimitern> re the tag changes - it was making writing tests unwieldy and dave already commented in a few places we need to fix this00:11
perrito666he got carried away with changes00:11
davecheneyperrito666: the reason we have to use a type assertion is the interface those types conforms to requries the Tag() method return a names.Tag,00:12
davecheneythat can be fixed00:12
davecheneybut the type stored inside the structure must be the concrete tag type that matches the thing it's tagged00:12
davecheneyor in other wods00:12
davecheneytype Machince struct { tag names.MachineTag }00:12
davecheney^ anything else is going backwards00:12
perrito666makes sense00:13
perrito666davecheney: thanks for the explanation though00:20
menn0thumper: another one: http://reviews.vapour.ws/r/25/00:21
perrito666davecheney: btw, do you see the comments I did there?00:22
davecheneyperrito666: nope00:24
davecheneybut i didn't read the whole thing00:24
davecheneyjust rage quit when i saw the change to the tags00:25
perrito666mm, I seem to need to do some changes so others can see those00:25
davecheneygotta push the 'review' button00:25
davecheneywhich actually means 'post review'00:25
davecheneythe00:25
davecheneythe 'review' button is actually labeled 'view diff'00:26
perrito666I did, odd00:26
menn0thumper: with RB, if you're happy with a change you need to click "Ship it" or tick the option (depending on which screen you're on)00:26
menn0thumper: I've just done it for #30 since you were happy with that one.00:26
* perrito666 looks for a way to links to his comments and fails.. and burns the food in the stove00:26
thumperkk00:27
davecheneythumper: i have to go out in 60 mins00:28
davecheneyany chance of a chat before then ?00:29
thumperdavecheney: sure, how about now?00:29
davecheneythumper: i'll see you in the standup channel00:29
thumperkk00:29
waiganimegawatcher tests are passing00:46
=== Ursinha-afk is now known as Ursinha
jcw4wallyworld: is there any precedent for passing in partially filled results structs as filters/tempates for an API  List* or Get* method in Juju?00:57
wallyworldjcw4: do you have a concrete example?00:58
jcw4wallyworld: well for actions, I want to be able to List the actions queued up for a Service and/or a Unit, and possibly filter by Status (pending, running, finished, failed, etc.)00:59
jcw4s%and/or%or%00:59
wallyworldyou'd define a Filter struct to hold the query parameters?01:00
jcw4wallyworld: I was thinking of using the return type struct and partially filling out the fields...?01:00
wallyworldyuk :-)01:00
jcw4:)01:00
wallyworldIMHO01:00
jcw4(that's why I asked)01:01
wallyworld:-)01:01
wallyworldnp01:01
jcw4I know mongo does something like that01:01
jcw4I'm pulled between keeping type explosion down vs. simple API01:02
wallyworldit does? i didn't know that. I've just encountered Find(blah).One(&result) type stuff01:02
wallyworldsometimes simple != intuitive01:02
jcw4wallyworld: I interpreted the blah as a 'template'01:02
wallyworldeg01:03
wallyworlds.db.C("managedStoredResources").Find(bson.D{{"path", "environs/env" + path}}).One(&mrDoc)01:03
wallyworldblah = a list of filter conditions01:03
jcw4wallyworld: okay.. so instead of one Get method, maybe GetActionsOn(service names.Tag), GetFailedActionsOn(service names.Tag), etc...01:04
jcw4or GetActionsByStatus(entity names.Tag, status string) etc.01:04
wallyworldthe latter would be preferable01:05
jcw4and, modified to be all bulk calls of course01:05
wallyworldi would imagine under the covers it would call GetActions(filter)01:05
jcw4wallyworld: yes.01:05
jcw4okay, so slightly more verbose API would be preferable01:06
wallyworldthat works for me personally. i like a wide API at the level of the caller, and a narrow api over the wire01:06
jcw4wallyworld: hence the GetActions(filter) under the covers I suppose?01:07
wallyworldyep01:08
wallyworlda narrow api over the wire is more robust against change01:09
wallyworldeg if a new status were added01:09
jcw4makes sense01:09
wallyworldaxw: hi there, i booted an aws environment from trunk using upload-tools, and when I try and add-machine, I get01:50
wallyworld  "1":01:50
wallyworld    agent-state-info: no matching tools available01:50
axw:/01:50
wallyworldhave you seen that?01:50
axwnope01:51
wallyworldok, i'll poke around01:51
rick_h_wallyworld: what's this placement/ensure availabiity stuff?02:06
rick_h_wallyworld: you guys going to give me a manual api back?02:06
wallyworldrick_h_: the landscape guys want to use ensure-availability and be able to nominate what machines should become the new HA servers02:06
wallyworldwe already have this for bootstrap02:06
rick_h_wallyworld: what about UI guys that want to have ensure-availability by default, but allow people to override if they want to?02:07
wallyworldit's extending that to ensure-availability02:07
rick_h_wallyworld: ah ok, so not what I'm hoping for02:07
wallyworldwhat do you mean ensure-availability by default?02:07
rick_h_so that is on by default on azure02:08
rick_h_which is cool, I like safe defaults and all that02:08
rick_h_but that means by default, no user can specify placement02:08
rick_h_they have to rebootstrap without the ensure-availability and then don't get any help02:08
wallyworldyes, that is an azure limitation :-(02:09
rick_h_right02:09
wallyworldthis change is primarily for maas02:09
rick_h_but my understanding is that it's only a limitation because we made it that way02:09
wallyworldi don't think so, axw would know more02:09
axwno, it was made that way to work around azure's restrictive nature02:10
rick_h_there's no way to setup 'I don't care if these are HA' services manually placed, log a log aggregator or *cough* jenkins *cough* install02:10
axwrick_h_: the way azure does HA is very different to other cloud providers, which means we can't support both at the same time02:11
rick_h_axw: right, but I'm suggestions, or I guess asking, if there's room for some things to not be HA in an env02:11
rick_h_ /suggestions/suggestion02:11
axwrick_h_: yes, with some work we could probably do it on a per-service basis02:12
axwI don't think it's a small amount of work though02:13
rick_h_axw: yea, in brussels I'll probably ask about it. Especially with the planned work for more auto placement, it kind of breaks the whole chunk of work we've done in machine view02:13
rick_h_axw: on the one hand we're looking at trying to enable colocating and collapsing down, but if we start auto placing and turning off overrides, then we break that story for smaller/getting started users02:13
rick_h_and even stuff like the orange box setup where almost every node there has multiple services on it02:14
wwitzel3axw: no need to worry about the versioning stuff for juju run .. I spoke to william and he completely extended the scope of my work and added some rather large, non-trivial things to that PR ;)02:14
axwwwitzel3: lol02:14
wwitzel3axw: good news is, it will be versioned :)02:14
rick_h_axw: wallyworld ok, saw a branch go by with an interesting little title and had to ask what was up.02:14
axwrick_h_: I understand, we do need to do something about it02:15
wallyworldrick_h_: np at all, ask anytime02:15
axwit's a bit crappy having to choose02:15
axwat such a coarse level anyway02:15
wwitzel3axw: I'm just making a new, smaller, focused facade for the run part of the client, instead of leaving it all rolled up under client.02:15
axwwwitzel3: cool, SGTM, just like what wallyworld did for ensure-availability02:15
rick_h_axw: yea, my feeling on it. I think it's good stuff, just a bit :( since it's by default and the answer is "once you realize you DO want to colocate something, rebootstrap"02:16
wallyworldand eric for Backup, and also previously for KeyManager, UserManager etc02:16
axwwallyworld: I hate private image metadata02:17
axw:(02:17
wallyworldsadly we need it :0(02:17
wallyworld:-(02:17
wwitzel3axw: yep, and the usermanager facade02:17
axwit's messing up my nice abstractions02:17
wallyworldwwitzel3: and keymanager and backup02:17
wallyworldaxw: did what we discuss last night about adding it in to the current CustomMetadata work flow turn out?02:18
axwwallyworld: I've got an API client-based one jammed in there. feels a bit wrong to be calling the API from there though...02:19
axwalso, going to need to do something else to read the image metadata at bootstrap time02:19
axwpreviously we'd upload to cloud storage before bootstrapping, don't have that luxury now02:19
wallyworldaxw: we should use a bespoke interface and inject in an implementation02:20
wallyworldfor retrieving image metadata02:20
wallyworldthe interface lives in provider02:20
wallyworldthere's then an api cient adaptor02:20
wallyworldor something like that02:21
axwwallyworld: it's too error prone... we'll end up missing a call to set the source02:21
wallyworldthat's what tests are for :-)02:21
axwtests where? *everything* uses an Environ, and we add it all the time02:21
wallyworldand we can have the thing which constructs the provider even read stuff from state, and pass in static data behind that interface02:21
axwenvirons.New(*config.Config)02:22
wallyworldhmmm02:22
wallyworldmaybe it needs to be done on the provider02:23
wallyworldcause that's where startinstance is02:23
axwno it's not, that's on Environ02:23
wallyworldah, yeah02:23
axwEnvironProvider just opens/prepares02:23
axwmore or less02:24
wallyworldit's at that point we could pass in the metadata02:24
wallyworldthis is all handwavy without looking back at the code02:25
waiganii'm getting the following error: /usr/lib/go/pkg/tool/linux_amd64/6l: conflicting definitions for @"github.com/juju/juju/state".State02:30
waiganiis it safe to delete /usr/lib/go/pkg/ ?02:32
waiganiI deleted ~/go/pkg but it didn't help02:32
waiganidavecheney: ^?02:32
axwwaigani: I don't think you'd want to remove /usr/lib/go/pkg, unless you installed a package there with sudo02:33
waiganiaxw: no I didn't02:33
waiganiaxw: I'm using the go that comes with 14.0402:34
axwwallyworld: I'm going to investigate another approach of having a datasource registry in environs/imagemetadata02:34
wallyworldok02:34
axwwaigani: ok, dunno what that error is, but removing that dir sounds wrong02:35
waiganiyeah, felt wrong, that's why I asked. thanks02:35
waiganiactually its referring to a bunch of stuff in tmp02:35
waiganithat I can delete02:35
waiganie.g /tmp/go-build964096169/github.com/juju/juju/state/_test/github.com/juju/juju/state_test.a(_go_.6):02:35
axwwallyworld: the registry will be keyed on environ. may make it possible to remove the SupportsCustomSources interfaces02:36
wallyworldworth a spike02:37
waiganiexcept that its already been deleted... hmm02:37
waiganifixed it, that was a new one02:41
menn0wallyworld: do you need a review for this? http://reviews.vapour.ws/r/3802:43
wallyworldmenn0: yes please02:43
menn0wallyworld: doing it now02:43
wallyworldty02:44
wallyworldmenn0: i pushed a small fix to the github pull request, what's the command to update the reviewboard diff? just "rbt post" ?02:56
menn0wallyworld: "rbt post -u" might do it... or else "rbt post -r <review number>"02:57
wallyworldta02:57
wallyworldaxw: found the tools problem. i had an older compiled jujud in my path (1.20.8) and it found and uploaded that one and then when that 1.20.8 jujud went to find tools, it looked for 1.20.8 and there were none as juju recorded tools for 1.2103:16
axwwallyworld: ah, ok.03:17
axwthat's a problem with upload-tools, it just assumes whatever it finds is the same as the CLI version03:18
wallyworldyeah, so i found out :-(03:18
wallyworldi didn't even realise i had a binary, and i didn't notice the log message n amongst all the noise03:18
menn0wallyworld: just finished reviewing http://reviews.vapour.ws/r/38/. thumper can you do a meta-review please?03:26
wallyworldthanks menn003:26
* thumper looks03:27
thumpermenn0: I can't see your comments on the main diff03:31
thumperahh...03:32
thumperbecause the comment is on diff one03:32
menn0thumper: ah... wallyworld uploaded a new diff while I was reviewing...03:32
menn0thumper: if you're looking at my review comments, you can click the title (where the filename is) to jump to the code.03:33
wallyworldmenn0: thumper: i am going to back out that change i think - the issue i had from from using an old jujud. i thought i messed up the api versioning as i just guessed based on reading the code, but it turns out i was right after all03:33
wallyworldbut i will keep the extra test03:34
wallyworldmenn0: thumper: although, I do like the fact that the new implementation gets the version directly off the ha client. but it means possibly opening a ha client and closing it again if the version is wrong. what implementation do you guys prefer?03:37
wallyworldthe first one gets the facade version by asking for it by name03:38
wallyworldthe second one gets a client and asks the client03:38
thumpermenn0, wallyworld: why has noone updated the branch in the .reviewboardrc?03:39
wallyworldnfi03:40
menn0thumper: I think we needed to establish whether everyone has the "upstream" remote set up in the same way03:41
thumpermenn0: if they followed the instructions they should have03:42
thumpermenn0: if not, they need to fix it03:42
thumpermenn0: why make the rest of us suffer?03:42
menn0thumper: yeah.. and no-one said anything when I mentioned it on the list03:42
menn0thumper: let's fix it03:42
menn0thumper: I've been running rbt post with --tracking-branch=upstream/master in the mean time03:43
* thumper nods03:43
* thumper submits his first review board review03:43
thumperhttp://reviews.vapour.ws/r/39/diff/03:45
menn0thumper: will take a look soon03:45
thumperta03:46
wallyworldjam: hi, i'd like your input on determining API version. http://reviews.vapour.ws/r/38/ The first diff did this: root.BestFacadeVersion("HighAvailability"), the second diff does this after instantiating a client: client.BestAPIVersion(). Both work. The first way doesn't require creating a client only to potentially not use it if the  API doesn;t exist, but does require knowing the facade by name. What would you prefer?04:16
wallyworldthis is in cmd/juju/ensureavailability.go04:17
jamwallyworld: so, I haven't looked at the whole diff, but is the idea that you're moving EA into another location?04:17
jamso IMO, you would have an api/ha/client.go that would try to use the new location if it existed, else fall back to the old location04:18
jamin which case, you'd still be wanting the client04:18
jamit would just be using the right API call underneath04:18
wallyworldjam: the facade name is different04:19
wallyworldi'm moving methods off the original big client04:19
jamwallyworld: that doesn't mean you need a different client side type04:19
wallyworldand onto a whole new facade04:19
jamwallyworld: sure, but the api/highavailability/client.go can still call APICall("Client", 0, "", "EnsureAvailability", ...)04:20
wallyworldoh,i see04:21
wallyworldthat sounds nicer04:21
wallyworldjam: i'll implement that and get you to +1 if that's ok04:21
jamwallyworld: so it depends *what* we can get away with, but my idea is that we should push the compatibility layer as low as we can04:21
wallyworldyep04:21
wallyworldagreed04:21
wallyworldi didn't know how to do that04:22
jamwallyworld: so if we can hide compat underneath api/foo.go then do so04:22
wallyworld+104:22
jamsometimes it has to be done in client code like cmd/juju level code04:22
jambut for this, I think you can do it lower.04:22
wallyworldthat would be good04:22
jamwallyworld: fwiw,  I would rather it not be called apiserver/highavailability/client.go04:23
jam"client" here seems confusing.04:23
jamwallyworld: api/highavailability/highavailability.go seems slightly better (if a bit longer)04:23
wallyworldfair point, i cargo culted that from somewhere04:23
wallyworldill fix04:23
jamwallyworld: apiserver/client/client.go I'd imagine04:24
wallyworldcould be04:24
wallyworldjam: i've pushed the changes to rb if you would be kind enough to look04:40
menn0thumper: wow, such diffs, very long04:40
menn0thumper: almost done04:40
thumpermenn0: ack, and ta04:41
menn0thumper: done04:46
davechen1ythumper: thanks for the chat earlier04:50
davechen1yi've had a good mull over it04:50
thumperdavechen1y: np04:50
davechen1yi think the multiwatcher should only accept types defined in its package04:51
davechen1yi won't say it is the only sane way to do it04:51
davechen1ybut it feels more sane than what we have at the moment04:51
davechen1yholy shit04:59
davechen1ythumper:04:59
davechen1ytype EntityId struct { Kind string Id   interface{}04:59
davechen1y}04:59
davechen1ylook, it's a tag!!04:59
thumperdavechen1y: yeah, I've been looking at that information now in the watcher...05:00
davechen1ythumper: i keep getting confused between state/megawatcher, and state/multiwatcher05:00
thumperme too05:01
davechen1ythumper: i'll be spending 1/2 of tomorrow and all of friday on arm stuff05:04
thumperack05:04
davechen1ynow we have a machine I suspect aram's output will increase quite a lot05:04
urulamawallyworld: morning ... is there anything that you'd like to discuss today on a regular catchup?05:18
wallyworldurulama: hey, morning.05:18
davechen1ythumper: i'm thinking that params.EntityId should be the state versino of a tag05:22
davechen1ywilliam has said many times he doesn't want tags stored in the db05:22
davechen1ybut it feels like there is a case of a tag like think05:22
davechen1yand entity id may be that thing05:22
davechen1yit's an identified and a type bound together05:22
thumperhmm... interesting05:22
davechen1yhonestly entitydi could be05:22
davechen1ytype MachineEntity interface{}05:23
davechen1ywell maybe, that might be a bad idea05:23
davechen1ybut that sort of thing05:23
davechen1yit's a typed thing05:23
davechen1yand that is _exactly_ what an interface is05:23
* thumper nods05:23
thumpersounds reasonable...05:23
davechen1yi haven't quited figured out what entity id's do yet05:24
davechen1ythey seem to be a way of informing watchers what _type_ of entity changed05:24
thumperI was just looking at the entity stuff as a wip review of jesse's look at adding the env-uuid to the service collection05:24
thumperI'm wanting the id to be environment specific05:24
thumperso the actual document ID is an opaque transformation of the entity id05:24
davechen1yoh yeah, they completely fail to capture that05:24
davechen1ythey are at best a tupple { collection, row }05:24
* thumper nods05:25
thumperit could be looked at like that05:25
davechen1yso, the question is, do we extend the tupple to be05:25
thumperbut I think it would be good to work out the real intent05:25
davechen1y { collection, env-uuid, row }05:25
thumperto work out how best to model this05:25
thumperI don't think that bit is necessary, as the state instance has an implicit env-uuid05:25
davechen1yor stick with { collection, row} and accept that GetAll does not return the complete set of documents in the collection05:25
thumperwhich is why I think the mega watcher needs to be environment specific05:25
thumperthe later of what you said05:26
thumperI think05:26
davechen1yi need to figure out where that data is begin used05:26
davechen1yi'm guessing it's somethinglike05:26
thumperyeah, I agree05:26
davechen1yswitch collection {05:26
davechen1ycase "machines": state.GetMachine(id)05:26
davechen1ycase "unit"L: state.GetUnit(id)05:27
davechen1yand so forth05:27
davechen1ywhich is so like tags it's not funny05:27
davechen1ythumper: why do all the backingNNN methods in megawatcher.go return an error05:32
davechen1yyet they are all hard coded to return nil05:32
davechen1y?05:32
thumperNFI05:32
davechen1y        store.Update(info)05:32
davechen1y        return nil05:32
davechen1y}05:32
* davechen1y feels a branch coming on05:32
thumperbecause someone thought it was a good idea?05:32
thumperdavechen1y: it would almost be "state.FindEntity(tag)" for the switch above05:33
davechen1yi wonder if they have to fit some interface05:33
davechen1y./megawatcher.go:458: cannot use (*backingRelation)(nil) (type *backingRelation) as type backingEntityDoc in assignment:05:34
davechen1yhmmm05:34
thumpermenn0: so when I update this review, do I squish locally first?05:48
thumperwhat is the normal practice?05:48
menn0thumper: you can do whatever you like. review board will just upload the diff of your branch to upstream/master, regardless of how many commits it's in05:49
thumperok05:49
thumpermenn0: is there a keyboard shortcut to take me to the next review comment?05:50
thumperthat'd be handy05:50
menn0I haven't looked but I'd like to know too if there is one05:51
* thumper looks for the rbt command to update05:52
* thumper is off now.05:54
menn0wallyworld: thumper is EOD so could you do a meta-review for this please? http://reviews.vapour.ws/r/34/06:07
wallyworldsure06:07
menn0wallyworld: otherwise ericsnow will have to wait longer to get his review06:07
wallyworldand we don't want that :-)06:07
wallyworldin case we need to ask for a reviewboard fix :-)06:08
menn0wallyworld: :)06:21
menn0wallyworld: cheers06:21
wallyworldmenn0: 3/4 of the way through06:21
jamwallyworld: so your patch doesn't actually get the backwards compatibility stuff quite right.06:27
wallyworldok06:27
jamwallyworld: you mention "regression tested on AWS", does that mean you did "juju-1.20 bootstrap" and "juju-1.21 ensure-availabilty" ?06:28
wallyworldjam: yes06:29
wallyworldbut if i got the backwards compat stuff wrong, i will retest06:29
jamwallyworld: so you don't actually fall back to calling the Client API06:30
jamAFAICT06:30
jamHA didn't exist in 1.20, right?06:30
wallyworldjam: i think you are right,  i tested before i did the last lot of changes after talking to you06:31
jamwallyworld: AFAICT, your legacy test is only patching the client side, so if it makes the new API call, the server still would accept it.06:31
wallyworldyeah, i'll have to rework it i think and retest06:32
jamso you really want a server that doesn't think it has the new functions, so that you know the client isn't requesting them06:32
jamTheMue should have some examples he's putting together06:32
wallyworldor i could patch out the client and check the facade called06:33
jamwallyworld: I feel like that still gets you into a place where you have to be careful to patch everything that might be touched06:33
jamyou could06:33
wallyworldsure, yeah, i'll run up one end-end test06:33
wallyworldi'll look for the doc06:34
wallyworldthanks06:34
wallyworldjam: for some reason, reviewboard doesn't show the client.go files as renamed; the github pr does06:35
dimiternmorning07:09
dimiternjam, hey, would you like to have a look at my http://reviews.vapour.ws/r/33/ please?07:23
jamdimitern: looking07:33
dimiternjam, thanks07:33
dimiternjam, in particular I'm having some trouble understanding why "s.firewaller.Machine(s.machines[0].Tag())" is worse than "s.firewaller.Machine(s.machines[0].Tag().(names.MachineTag))"07:37
jamdimitern: I'm not personally very sure why MachineTag is better/worse than just Tag, for that you'd have to have a discussion with davecheney07:38
jam(I certainly thought the point of Tag was that it was the abstract representation, so having type-specific versions of it seems odd)07:39
jamdimitern: oh, and *IMO* ever doing a plain type assertion:  .(names.MachineTag) in production code is asking for a panic to bring your system down07:40
jampanic() ==> the whole thing dies07:40
dimiternjam, strictly speaking, using names.Tag internally is less safe than names.MachineTag, but the apiserver facade validates all tags it gets, so there's no way to pass a unit tag to a method allowing only machine tags and not get an error07:40
jamerror() => we return "sorry can't do that"07:40
dimiternjam, ok so why state.Machine.Tag() returns names.Tag rather than names.MachineTag ?07:41
dimiternjam, I think in the API we should follow the same logic07:41
jamdimitern: *If* we are supposed to be using names.MachineTag, then it seems like it should07:41
jamdimitern: as stated, *I* don't really understand why07:42
dimiternjam, oh, ok - so we're in the same boat on this :)07:42
jamdimitern: my point was just that a bare type assertion seems to mostly be the wrong thing to do07:42
dimiternwhere are thumper and davecheney when you need them :)07:43
jamdimitern: certainly IMO MachineTag should be an implementation detail of Tag07:43
jamdimitern: also note that NewUnitTag was something that exists, and dave has stated "it is there for tests" but we don't have another way to go from "unit/0" to a UnitTag07:44
dimiternjam, I agree unchecked type assertions are bad, but if state.Machine.Tag() returns anything else than a names.MachineTag wrapped into a names.Tag interface, I'd rather panic than let it slip :)07:44
jam(it also used to panic if you gave it bad data, which meant that charms could crash the API server)07:44
jamdimitern: panic if developers are writing bad assumptions, but don't panic if you were given bad data07:45
dimiternjam, I think I understand their point - the internal tag filed of the Machine struct should be names.MachineTag, but firewaller.Machine() should take names.Tag and possibly ParseMachineTag and verify internally07:46
dimiterns/filed/field/07:46
jamdimitern: so NewFacadeCallerForVersion seems like a bit of a "we don't really want to do it this way", but I suppose the point is to allow the server to go to a new version before the client is ready to handle it? But we can just do that by not incrementing the best-known version in api/facadeversions.go07:46
jamthough I guess the test suite will tell you off for that...07:46
dimiternjam, no, it's not about the client07:47
dimiternjam, it's a way to implement a new server and client version of the api, test it and only switch over to it once it's user (i.e. the worker) is ready07:47
dimiternjam, I thought a lot about how to do it nicely, and I'm keen on your thoughts about my approach (both server-side and client)07:49
jamdimitern: so this is actually because we can't abstract the API difference, and we need 2 different workers, thus we are forced to explicitly chose which version the worker is talking to07:50
jam?07:50
dimiternjam, in this case, having old and new versions of the worker using v0 and v1 is the easiest way, until we can drop the old worker and rely on having apiserver supporting v107:51
dimiternjam, in reality, once we have apiv1 in place and the upgrade step done, I think it will probably be safe to drop the v0-only worker, isn't it?07:52
dimiternjam, the only problematic case is when a MA running v1 firewaller worker is talking to a v0 apiserver, but since upgrades are done in lock-step, can we have this case at all?07:54
jamdimitern: you mean, we are unlikely to be talking to a v0 API server if the Agent is V1 ?07:54
jamI do believe that is true07:54
jamdimitern: well, if they "finished" the upgrade path wrt HA upgrades07:54
jamI'm not sure if menno has landed all of the pieces there07:54
dimiternjam, yeah, so the old v0 worker will be kept only until upgrade is done07:54
mattywmorning all07:55
dimiternjam, if not (i.e. we happen to connect to a v0-only apiserver in HA configuration, which haven't yet updated), I think it will be also safe to terminate the worker and restart it, hoping it will connect to an upgraded api server07:56
dimiternmorning mattyw07:56
jammorning mattyw07:56
dimiternwallyworld, are you around?07:57
wallyworldhey07:57
dimiternwallyworld, hey, can you confirm the behavior in HA setup wrt server upgrades ^^07:57
wallyworldmaybe, i'll read07:58
dimiternwallyworld, I mean, suppose we have a new version that has an upgrade step to migrate stuff in the db, and then a worker starts after the upgrade expecting to find apiserver supporting the new api v1 it needs07:58
dimiternwallyworld, in HA-scenario there can be (I guess) some apiserver not yet upgraded - or we ensure all of them are and we then start any other workers?07:59
wallyworlddimitern: i *think* they are all upgraded, but am not sure. in any case, the worker will exit and restart i would expect08:00
wallyworlddimitern: i think there was some code landed recently about coordinating upgrades08:01
dimiternwallyworld, yeah, and keep doing this until it connects to an api server supporting the facade version the worker needs08:01
wallyworldyes, but if i am correct, upgrades should be coordinated as of recently08:01
wallyworldso either way, i think we are ok08:01
jamdimitern: so for agents we can go with a bit of "it doesn't have to work until the API server is new enough", I don't want us to get *too* used to that kind of programming.08:01
jamdimitern: iow, I'd rather we just make it work with v0 and v1 as much as we can, but this is a case where the difference is large enough it probably isn't worthi t.08:02
jamworth it08:02
wallyworldjam: i would think that some sites may want to run with an older api server for  bit? upgrade in stages?08:02
wallyworldnot sure if we plan to suport that08:02
dimiternwallyworld, my original question was "given 2 versions of a worker - old one using apiv0 and new one using only apiv1; when is it safe to remove the old v0 worker code - is it once we have an upgrade step in place that does migration apiv1 expects?"08:03
wallyworldhmmmm, good question08:03
jamwallyworld: I can see from a "I'm managing my infrastructure" wanting to do rolling upgrades, and testing various pieces. It hasn't been part of how "juju upgrade-juju" works at all.08:03
wallyworldjam: i think it will/could very well come up as a requirement, given people already want rolling charm upgrades perhaps08:04
jamwallyworld: so my personal opinion is that as much as possible clients and servers should support the widest range of versions that we can cope with as programmers.08:05
wallyworldyeah, i tend to agree08:05
jamAnd we're being pickier about that for Client apis vs Agent apis08:05
wallyworldwe have little choice for clients08:05
jamwell, there are people that would have said that if we had gone with an API from the beginning, "juju upgrade-juju" wouldn't exist, and we wouldn't need simplstreams, because the Agents would just be a "apt-get install jujud"08:06
dimiternfor clients, absolutely, but we can be laxer with agents08:06
jamand we'd have to cope with Precise being a different version than Trusty08:07
dimiternjam, wallyworld, so I propose to trust our upgrade code does the right thing (and file bugs when not), and keep the old code only until the upgrade step is in place08:08
jamdimitern: I'd sign off on that, you may want to check with fwereade at some point to help it get codified as appropriate practice.08:09
wallyworld+1 to trusting the upgrade code08:09
voidspacemorning all08:09
wallyworldo/08:09
dimiternok, I'll send a mail to juju-dev08:09
dimiternmorning voidspace08:09
wallyworldwilliam is moving today i think08:10
voidspacedimitern: o/08:10
jammorning voidspace08:10
voidspaceo/08:11
jamTheMue: can you take a look at http://reviews.vapour.ws/r/33/diff/# Dimiter has an interesting approach to doing the versioned testing, which I don't think is quite what we had been discussing.08:11
jam(a base test suite that has a lot of helper functions that take an appropriate interface in each method)08:11
jamand then concrete tests that just thunk over to the helpers08:12
jamdimitern: as far as that goes, I feel like we're still feeling out how we want to do compatibility testing, etc.08:12
dimiternwallyworld, moving where?08:12
wallyworldflight back from UK I think he said08:12
dimiternah, I see08:13
wallyworldhe was away for a bit last week08:13
jamdimitern: I think William was advocating that we could do per API suites, and then aggregate them into versions of facades08:13
jamso you would have a WatchSuite, and an InstanceId suite, etc.08:13
TheMuemorning08:13
jammorning TheMue08:13
TheMuejam: yep, will take a look08:13
dimiternjam, that sounds like a horrible amount of boilerplate code - imagine doing this for the uniter api08:14
dimiternmorning TheMue08:14
jamdimitern: well, you have a fair amount of boilerplate in your testing of Firewaller08:14
TheMuejam, dimitern: seen my document where I tried to describe the testing approach?08:15
jamTheMue: https://github.com/juju/juju/pull/758/files ?08:16
TheMuejam: yes, and thankfully by clicking on "View" the markdown is rendered for better readability08:16
dimiternjam, I can't decide yet whether having a test-suite-per-api-method is more or less boilerplate than having "kinda C++-template-like helpers" taking an interface with a single method that's being tested08:18
dimiternTheMue, no, I'll have a look, but look at my proposal when you have some time (I'm quite proud what I came up with :)08:19
* jam needs food, bbiab08:19
dimiternTheMue, the approach taking a callback func (st *state.State, resources *Resources, authorizer Authorizer) (interface{}, error) is something I tried as well08:20
TheMuedimitern: I'm just doing, but I would like you to read the doc (and the according code) too. it is a bit more coding, but not so very much. and the test suites per method can be wonderfully reused08:21
=== psivaa_ is now known as psivaa_-afk
TheMuedimitern: yeah, I needed it to inject the factory for the API version I want to test08:21
dimiternTheMue, the problem is, you can't pass a constructor returning a concrete type (or pointer thereof)08:21
dimiternTheMue, i.e. firewaller.NewFirewallerAPI(...) (*State, error)08:22
TheMuedimitern: that's why I had to return the interface08:22
TheMuedimitern: and I'm wrapping it in a little func with the signature above08:22
TheMuedimitern: here the static typing hinders us to use the factory directly *sigh*08:23
TheMuedimitern: never tried "type Factory func(...) (interface{}, error)" and then cast "firewaller.NewFirewallerAPI.(Factory)"08:24
dimiternTheMue, won't work - see http://play.golang.org/p/9UQE8Fh2Co08:26
TheMuedimitern: yeah, just tested too. would have been nice08:28
=== psivaa_-afk is now known as psivaa
wallyworldTheMue: i think you're working on this - I have an existing test suite where I want to change the result of RegisterStandardFacade() ie change the version registered. But calling this method a second time gives an error. What's the way we're to use to change the result of BestAPIVersion() for testing? Or even unregister a facade for testing?08:34
wallyworldI need to do both08:35
TheMuewallyworld: it's not yet proposed, I had it in a branch I pulled back but it will come with the next one: a function to de-register an API returning a restore function to call with defer08:36
wallyworldok, will that land soon?08:37
TheMuewallyworld: it has to be called before the API is connected, so that the resolving of the available APIs doesn't return it08:37
TheMuewallyworld: think so, yes, but I can already point you to it. it's a small one08:38
TheMuewallyworld: one moment, will find the code08:38
wallyworldok08:38
wallyworldalthough if it's in common infrastructure it's best to wait08:38
wallyworldbut i do need to be able to land my branch tomorrow hopefully08:38
TheMuewallyworld: take a look here, it's replacing an existing func in common.FacadeRegistry: https://github.com/TheMue/juju/compare/capability-detection-for-networker#diff-dfdd9146133bcedaf779a17388c5a27fR23408:40
wallyworldok, thank you08:40
TheMuewallyworld: and here I used it https://github.com/TheMue/juju/compare/capability-detection-for-networker#diff-13fd488899c8ceea9cc4183707b0b270R20008:41
dimiternTheMue, you can do a wrapper func taking any callable and returning something with (interface{}, error) - see http://play.golang.org/p/ZOqBHnjfyi08:41
wallyworldTheMue: thanks, looks like Discard is already in the code base08:42
wallyworldi might try and use it08:42
TheMuewallyworld: yes, it's only that the current Discard() cannot restore, that's all ;)08:43
wallyworldah08:43
TheMuedimitern: yeah, adding this to our testing package simplifies the injection, nice08:43
dimiternTheMue, well, this is just a quick sketch, but WrapNew should do more checks and take a gc.C as well, but the idea is nice08:44
dimiternhey davecheney08:45
TheMuedimitern: yes, to be part of a testing package it has to08:51
* TheMue just fetched a fresh coffee08:51
TheMuestill a bit tired and having aching legs after the visit of the Photokina fair yesterday. but has been fantastic, with many ideas where I'll spend my money for :D08:53
wallyworldjam: i pushed some changes. i used common.Facades.Discard("HighAvailability", 1) to remove the facade registration and so force the client caller to go through the older client facade09:36
tasdomasshould I close the reviewboard review once it gets a "ship it!"?09:50
jamwallyworld: I think you have 1 typo, but otherwise LGTM09:58
wallyworldjam: ty09:58
voidspacehmmm... so I have a function that after a replicaset reconfig connects to all members of the replicaset10:01
voidspaceand waits for *them all* to report a healthy status for all the other members10:01
voidspaceso we know they're all up and they all know about the other members10:01
voidspaceAnd the test *still* fails with this immediately after that check10:02
voidspace Message:"exception: need most members up to reconfigure, not ok : localhost:33975", Assertion:false}10:02
voidspacethat just seems insane10:02
voidspaceI'm going back to mongo support channels10:03
TheMuedimitern: so, took a deeper look at the server-side versioning and the tests. wrote some notes in the review.10:19
dimiternTheMue, cheers, will have a look10:23
TheMuedimitern: I'm currently thinking about mixing our ideas10:24
dimiternTheMue, I'm in process of changing my PR to use per-method suites to see how it will look like10:25
TheMuedimitern: ah, we're getting closer10:28
aznashwanhello, could somewhat please tell me what email/password rbttools expects of me?10:37
aznashwanit says in the documentation that it's the ones of the rbt server, and I presumed it was the github ones seeing as though we used 0auth; but those don't seem to work D:10:38
davecheneyaznashwan: it is amazingly10:41
davecheney$YOURUSERNAME10:41
davecheneypassword: gh-oauth10:41
=== fabrice is now known as fabrice|lunch
davecheneyaznashwan: sorry, i think the password is oauth:<$YOURGITHUBUSERNAME>10:45
jamvoidspace: standup?10:46
voidspacejam: oops, omw10:48
aznashwandavecheney: I've been spamming the server with requests for a while now, and still no luck D:10:51
aznashwanany chance the upload diff file directly to the webpage will work?10:52
davecheneyaznashwan: you can do that10:57
davecheneybut it needs to be a "full diff"10:57
davecheneythe diff from github won't work10:57
davecheney:(10:57
davecheneyi already tried that10:57
davecheneyaznashwan: don't tell anyone, but if you just do a pull reequest on github10:58
davecheneythen i'll review it and we don't need to worry about review board10:58
aznashwandavecheney: thanks a lot, I've already got two up now, and they've been looked into a little already, minor fixes each, freshly rebased on master so it will just be fast-forwards if they get merged11:00
perrito666morning11:02
davecheneyaznashwan: can you paste the urls11:08
davecheney?11:09
aznashwandavecheney: sure, sorry: https://github.com/juju/juju/pull/748 https://github.com/juju/juju/pull/70411:09
aznashwandavecheney: thanks for the reviews, will get to fixing the PR's immediately :D11:16
davecheneyaznashwan: it's way past end of day for me11:16
davecheneyi'll catch you on the flip slide11:17
davecheneyside11:17
aznashwandavecheney: k, have a nice one :D11:17
perrito666see you tonight davecheney11:18
perrito666some times this irc channel feels like a relay race11:19
davecheneyperrito666: we develop juju 24/711:21
aznashwanperrito666: a rolling stone gathers no moss11:22
aznashwanluckily, I ran out of things to bother you guys with, at least for the time being :v11:23
perrito666aznashwan: I strongly disagree http://cdn2-b.examiner.com/sites/default/files/styles/image_content_width/hash/49/b3/49b30d7598f1527927df8a4cbd98e253.jpg?itok=AIdW4EIi11:23
* voidspace lunch11:52
mattywperrito666, nice11:56
perrito666mattyw: I was hoping someone would get the joke11:57
perrito666.p11:57
perrito666:p11:57
mattywperrito666, I wouldn't go as far as to say joke ;)11:57
perrito666o cmon, rolling stone, moss, picture, instant fun11:57
mattywthat must be some strange usage of the word fun I wasn't previously aware of12:03
=== fabrice|lunch is now known as fabrice
perrito666mattyw: arent you brittish?12:05
mattywperrito666, I am, for now12:06
perrito666:p then you are in no moral grounds to judge about fun then, we actually catalog brittish commedy films in a separate category :p12:06
perrito666mattyw: moving out?12:06
mattywperrito666, until Scotland gets independance12:07
perrito666mattyw: ahh moving out the entire country, very cool move :p12:07
mgz'd still be british surely...12:08
mgzmattyw: what did you want me for yesterday evening btw?12:08
mattywmgz, I was getting crazy errors from the landing bot - seemed to suggested something was up with the server rather than the bot12:09
mattywmgz, but it's fine now12:09
mattywmgz, thanks anyway12:09
mgzI'll have a look at the logs12:09
mattywmgz, here's one http://juju-ci.vapour.ws:8080/job/github-merge-juju/657/console12:10
mgzta12:10
perrito666its interesting, school here actually teaches kids that england, scotland and ireland+nort ireland as 3 separate countries and makes no mention whatsoever to the united kingdom until high school (near the end of it)12:11
perrito666what would happen if there was a command clashing with a plugin? for intance if I was to create a charm command?12:11
fabriceperrito666:  in France england scotland wales are the same and we always use england for uk12:12
=== Ursinha is now known as Ursinha-afk
mattywfolks - after we land a branch reviewed on review board do we just mark it as close -> submitted?12:19
mattyw^^ yes appears to be the answer12:19
=== Ursinha-afk is now known as Ursinha
axwwallyworld: if/when my branch lands, and backups move off provider storage, I believe we can remove Storage from the Environ interface12:25
wallyworldyup \o/12:25
axwjust did a ~100line change which looks like it'll work12:25
wallyworldwhoo hoo12:25
axwmattyw: that's what I did12:26
axwdunno if we're supposed to or not, but I guess so12:26
wallyworldi did that too12:27
tasdomaswhat package should I place a commonly used function in juju?12:31
tasdomasthinking of moving NowToTheSecond out of state12:31
tasdomasit's used both in tests and in production code, so I can't just put it in a testing package12:31
perrito666axw: tell me more about backups12:33
TheMuehmm, not yet friend with rbt. if it tells me "ERROR: There don't seem to be any diffs!" when calling rbt post, how can I still post my pull request?12:53
perrito666TheMue: did you do the upstream configuration magic menn0 suggested?12:54
TheMueperrito666: I'm just following the described workflow in the mail12:56
TheMueperrito666: which "magic" (and why do we need magic when simple tools should do it)?12:56
perrito666TheMue: I meant a configuration in your .Idontrememberwhatrc12:58
TheMueperrito666: I have no .Idontrememberwhatrc *lol*12:59
TheMueperrito666: hehe, no, will take a closer look12:59
perrito666TheMue: apologies, I do not recall the whole thread13:01
TheMueperrito666: but I found the missing line, and no need to appologize, it's my fault to not configure it correctly13:02
TheMueperrito666: but now added the magic line and it ask me to authenticate. so getting closer, yeah.13:03
perrito666TheMue: ah apparently you ned to user13:03
perrito666agh13:03
perrito666need to use username@github13:03
=== Ursinha is now known as Ursinha-afk
=== Ursinha-afk is now known as Ursinha
mattywaxw, cool thanks13:09
mattywaxw, I saw that's what you did so that's what I went for13:10
TheMueperrito666: this tool hates me, cannot login13:18
* perrito666 tried to do a portmanteau between troll and tool but feared to accidentally post a profanity in English13:19
TheMue;)13:19
TheMueI tried with TheMue as well as my E-Mail as username, but still cannot login13:20
=== mbruzek is now known as mbruzek_
=== mbruzek_ is now known as mbruzek
TheMueChanging the password just to make sure doesn't help too. *sniff*13:35
TheMueWhat.does.this.tool.want.from.me?13:35
perrito666TheMue: your soul13:39
perrito666what are you using for a user?13:39
natefinchyou guys talking about rbt?13:40
perrito666TheMue: the logs show ericsnow suggesting:13:40
perrito666to katco  "oauth:katco-@github"13:40
natefinchright, I was going to say that13:41
natefinchfor some reason eric set all our passwords to that ;)13:41
TheMueahh, wil try13:42
natefinch(joking of course, you should use oath:<github_username>@github as your password13:42
TheMueperrito666: thanks, now it works *phew* you saved my soul *grin*13:43
perrito666natefinch: well makes sense, passwords are most likely hashAlgorythm:hash and so oauth: must trigger a django auth plugin if I understand correctly that makes the authorization dance13:45
TheMueok, now it would be nice if markdown files could be directly rendered like in github13:46
=== fabrice is now known as fabrice|afk
wwitzel3natefinch: when you have a chance, http://reviews.vapour.ws/r/42/14:21
natefinchwwitzel3: cool, I'll take a look14:22
wwitzel3natefinch: it is the changes from that ML thread on rsyslod14:22
aznashwancould someone please tell what the hell is rbt post expecting as a username/password?14:39
ericsnowusername: <github username> password: "oauth:<github username>@github"14:40
=== jheroux_away is now known as jheroux
natefinchericsnow: can you just email that out to the list as a one line email?14:47
ericsnownatefinch: good idea :)14:48
=== fabrice|afk is now known as fabrice
TheMueericsnow: when publishing changes after an "rbt post -u" I currently get a HTTP 500. known problem?14:57
ericsnowTheMue: looks like the revision you are trying to post is already associated with a different review request14:58
TheMueericsnow: eh, I accidently posted it without -u but immediately discarded it14:59
ericsnowTheMue: each review request has an associated repo revision (which has a UNIQUE constraint)15:00
TheMueericsnow: as I said, it's discarded. so the software should not care15:00
ericsnowTheMue: unfortunately discarded requests still keep that revision locked up15:00
ericsnowTheMue: it's dumb15:00
ericsnowTheMue: I can "permanently delete" that accidental request if you tell me the number15:01
TheMueericsnow: so HTTP 500 tells me "Hey you dumb guy, make another change, push it, and post it again."? ;)15:01
ericsnowTheMue: I expect that this is going to keep happening to people15:01
ericsnowTheMue: exactly :)15:02
TheMueericsnow: hehe15:02
TheMueericsnow: but deletion is better, it's the 4415:02
perrito666natefinch: wwitzel3 stdup?15:02
ericsnowTheMue: I expect we need to either come up with a github subcommand that wraps rbt intelligently or get github-reviewboard integration rolled out15:03
natefinchperrito666, wwitzel3, ericsnow: would you guys mind if we delayed until later? I have a sleeping child next to me, and I'd rather not wake her15:03
ericsnowTheMue: I expect we'll do the latter at some point (hopefully in the near future) regardless15:03
perrito666natefinch: np15:04
ericsnownatefinch: let a sleeping child lie :)15:04
voidspacecoffee15:05
TheMueericsnow: a seamless integration would be nice, indeed15:05
ericsnowTheMue: I've deleted 44 so you should be good to try "rbt post -u" again.15:06
TheMueericsnow: great, will do, thanks15:07
ericsnowTheMue: np, sorry for the trouble15:07
dimiternTheMue, perrito666, updated http://reviews.vapour.ws/r/33/ care to take a final look?15:15
perrito666dimitern: did you see davecheneys comment?15:15
TheMuedimitern: already started15:16
dimiternperrito666, I did change back the tag fields as they were15:16
TheMuedimitern: regarding the order inside the file, currently the declarations of base and V0 as well as methods of them are in a mixed order. I only meant to write all base definitions first and all V0 definitions then, simply to group them properly15:18
dimiternTheMue, you mean have all func (f *FirewallerAPIBase) Methods() then the FirewallerAPIV0 ones?15:24
TheMuedimitern: yep15:24
dimiternTheMue, ok, I misunderstood then :) will do and post an updated diff15:25
TheMuedimitern: thanks15:25
TheMuedimitern: btw, in your mail, you meant "an" agent API, and not "the" agent API, don't you? not that I'm getting you wrong here.15:27
dimiternTheMue, updated15:28
dimiternTheMue, yes, "an agent api", the AgentAPI (perhaps poorly named) is just one facade15:29
TheMuedimitern: fine15:29
TheMuedimitern: for the testing approach I still would like to know how we'll test a func introduced in V1 in V2 then?15:31
TheMuedimitern: but I've got an idea here15:31
TheMuedimitern: currently your base is a type with methods15:32
wwitzel3I see we have juju/utils/set  and it currently has implemented Strings15:32
dimiternTheMue, le me think a bit15:32
TheMuedimitern: how about changing it into a simple struct which is passed to simple test functions as a first argument15:32
dimiternTheMue, so you have Foo() in V1, which is unchanged in V2?15:33
TheMuedimitern: so for V0 I implement the V0 test functions and use them in the test suite15:33
wwitzel3my question is, if I want to have a set of tags, should I implement that in utils/set and make it have a Tags implementation?15:33
TheMuedimitern: in V1 I only write the new test functions and write my test suite V1 like you've done using these functions too15:34
dimiternTheMue, the we can use testFoo(c, patchFunc(taking NewAPIV1 in v1_test and NewAPIV2 in v2_test)15:34
TheMuedimitern: and so in with the next functions15:34
dimiternTheMue, more or less yes15:34
dimiternTheMue, I'm not saying "this is the way we should test API versions, period." :)15:35
wwitzel3because right now, I'm converting from user input string, to tag, using the tag.String() method with set to create a unique set of tags, then converting them back to tags with ParseTag as I iterate over them15:35
TheMuedimitern: hehe15:35
dimiternTheMue, it's just we're looking for the best way, and I don't think we're quite there yet15:35
TheMuedimitern: no, me neither, only thinking of a good solution too15:35
dimiternTheMue, but for the time being, I'd rather move on with the ongoing tasks and revisit testing later15:35
wwitzel3my thought is, since it lives under juju/utils already, our set implementation knowing about types from juju/names seems ok15:35
wwitzel3thoughts?15:36
TheMuedimitern: so your approach, but with no real base in the sense of inheritence, more as a growing set of versioned test functions used in the individual suites15:36
TheMuedimitern: ok15:36
dimiternTheMue, If we agree on an approach, I promise to take some time to refactor existing facade tests15:36
wwitzel3TheMue: I will act as a witness along with the IRC logs of dimitern's promise ;)15:36
TheMuedimitern, wwitzel3: *rofl*15:37
dimiternwwitzel3, +1 :)15:37
dimiternwwitzel3, that's a very good idea IMO15:37
dimiternwwitzel3, having set.NewTags() etc. so we can use them with names.Tag and derived types, store them as tags, but have the same UX as with Strings15:38
TheMuedimitern: I'll note a quick dummy containing your approach and my latest thoughts. think it's a good way, flexible and less boilerplate15:39
dimiternwwitzel3, I'd rather have map[names.Tag]bool as internal implementation for set.Tags, but optionally, you can have NewTags(names.Tag...) and NewTagsFromStrings(string...) internally using ParseTag on each15:40
dimiternTheMue, cheers :)15:40
* dimitern has reached eod15:45
natefinchdimitern, TheMue, rogpeppe1, mgz:  do you guys know offhand if we try to store charm configuration keys in mongo as key names?15:46
rogpeppe1natefinch: i think we *did* do that AFAIR15:46
natefinchrogpeppe1: hmm interesting15:47
natefinchrogpeppe1: there's an email on the juju ubuntu list entitled "Regression with dots in charm options"15:48
mgznatefinch: yeah, saw that, bug 1308146 being the relevent thing15:49
mupBug #1308146: not okForStorage error when deploying local charm <charms> <deploy> <juju-core:Triaged> <https://launchpad.net/bugs/1308146>15:49
mgznatefinch: what's not clear to me is when then actually started breaking15:50
mgzI guess just in 1.16->1.18?15:50
natefinchyeah, could be.   I care slightly less about when than about why15:51
dimiternnatefinch, we don't do that without escaping $ and .15:51
rogpeppe1natefinch: looking at state/settings.go, it does at least try to replace the dot (with full-width unicode dot)15:51
natefinchdimitern: I had hoped we sanitized it15:51
dimiternnatefinch, take a look at state/settings.go15:51
=== fabrice is now known as fabrice|family
dimiternnatefinch, do you know what this job opening is for ? https://ch.tbe.taleo.net/CH03/ats/careers/requisition.jsp?org=CANONICAL&cws=1&rid=830 (i.e. juju as in core or as in ecosystem or something else?)15:53
dimiterna good friend of mine (also good dev) called to ask if we're hiring15:54
voidspacemgz: ping15:54
natefinchdimitern: we have 1 engineer position open and that one.... that one you linked to is kind of more of a do a little bit of everything job to work with kapil and mark S and mark ramm etc for like product maangement type stuff15:55
natefinchdimitern: so, that one is higher up in juju, but there is a juju core position open IIRC15:55
dimiternnatefinch, I see, well he's based in BG, so I guess no juju-core openings at the moment?15:56
dimiternnatefinch, I'd appreciate if you find it and send me the link by email, as browsing all openings I couldn't find juju-specific openings except this one15:57
mgzvoidspace: hey15:57
natefinchdimitern: I think the location is just a suggestion.  Definitely ping Alexis about it, I know we have a dev position open, and I'm pretty sure it's in core.15:58
voidspace mgz: hey, hi15:58
voidspacemgz: but never mind...15:58
mgz;_;15:58
voidspacemgz: unping :-)15:58
dimiternnatefinch, cheers, will do15:58
wwitzel3dimitern: thanks :)16:00
perrito666dimitern: that is perhaps the most generic role description I have seen in my whole life :p16:00
dimiternperrito666, lol, most of these on taleo we have are like this16:01
=== Ursinha is now known as Ursinha-afk
voidspaceericsnow: ping16:06
ericsnowvoidspace: hey hey hey16:06
voidspaceericsnow: I just failed to create a review board review request16:06
voidspaceericsnow: or at least, I created one entirely unrelated to my branch16:06
voidspaceericsnow: could you walk me through it16:06
voidspaceericsnow: I have a github pull request for the branch16:06
ericsnowvoidspace: what is the review number?16:07
voidspaceericsnow: https://github.com/juju/juju/pull/77616:07
voidspaceericsnow: 4516:07
ericsnowvoidspace: and it is associated with revision 9cac03a, right?16:07
voidspaceericsnow: right16:08
ericsnowvoidspace: did you set TRACKING_BRANCH = "upstream/master" in ~/.reviewboardrc?16:08
voidspaceericsnow: no...16:08
voidspaceericsnow: I'll do that16:09
voidspaceericsnow: should that change be enough?16:09
ericsnowvoidspace: if origin is set to something else (which it should be) and master is not up to date with upstream, you'll get bad diffs16:09
ericsnowvoidspace: yeah16:09
voidspaceericsnow: I made sure my branch was up to date first16:09
voidspaceericsnow: so how do I kill that request and re-create it?16:10
ericsnowvoidspace: well, give the tracking branch thing a try16:10
voidspaceI've done that, do I just post again?16:10
ericsnowvoidspace: reviewboard is kind of dumb in that regard16:10
ericsnowvoidspace: you have to do "rbt post -u" or "rbt post -r #"16:10
ericsnowvoidspace: since RB links review requests to revisions uniquely and even discarded requests count :(16:11
ericsnowvoidspace: just doing rbt post would give you an oh-so-helpful 500 error16:11
voidspaceericsnow: so the diff is now correct - but title and summary are still the old ones16:13
voidspaceI did "rbt post -u"16:13
ericsnowvoidspace: cool16:13
ericsnowvoidspace: just edit them in the web interface16:13
voidspaceif I do "-r #" will it create a new one?16:13
voidspaceok16:13
voidspaceericsnow: thanks for your help16:13
voidspacekatco: I think you're an OCR today16:16
voidspacereviews.vapour.ws/r/45/16:16
katcovoidspace: right you are. currently reviewing a largish change-set16:16
voidspacekatco: ok, cool16:17
voidspace:-)16:17
ericsnowvoidspace: -r just means update that specific review request and -u mean match the revision to a request and update that one16:17
ericsnowvoidspace: glad to help!16:17
voidspaceericsnow: ah right16:17
voidspaceericsnow: much appreciated :-)16:17
voidspacelooking forward to seeing you all again soon16:17
ericsnowvoidspace: same here :)16:21
=== jog_ is now known as jog
voidspaceericsnow: so in summary, it should definitely be done - but I shouldn't do it...17:06
=== psivaa_-afk is now known as psivaa_
voidspaceericsnow: and what do you mean "not sure if I intended this change", after you told me to do it...17:06
voidspaceericsnow: :-p17:06
ericsnowvoidspace: :)  just not in that PR17:06
voidspaceericsnow: heh, ok17:07
voidspaceericsnow: one for you then17:19
voidspaceericsnow: http://reviews.vapour.ws/r/46/17:19
ericsnowvoidspace: that might take a while to review :)17:20
voidspaceericsnow: let me know when you can get to it17:21
voidspaceI've got all night...17:21
ericsnowvoidspace: done17:23
ericsnowvoidspace: I also added a little more explanation to the PR summary (which will become the merge commit message, right?)17:23
ericsnowvoidspace: if you don't like it feel free to edit or remove it :)17:24
voidspaceericsnow: looks good to me17:28
voidspaceericsnow: thanks17:28
ericsnowvoidspace: I was creating the same PR and that was my summary :)17:28
voidspaceHeh17:29
voidspaceericsnow: I'm sorry...17:29
ericsnowvoidspace: don't be :)17:29
voidspaceericsnow: I'll set the issue on review 45 to fixed as it is no longer a diff against upstream/master17:30
voidspaceor at least won't be shortly17:30
ericsnowvoidspace: totally17:31
voidspaceand that's me done for the day17:31
voidspacesee you all tomorrow17:31
ericsnowvoidspace: see ya17:31
katcoholy mother of god there's a second page to this diff.17:37
natefinchlol17:37
katco<-- first time being OCR. gets thrown into the deep end immediately.17:38
ericsnowkatco: looking at one of mine? <wink>17:39
katcolol no, axw's.17:39
=== Ursinha-afk is now known as Ursinha
sinzuinatefinch, can you get someone to look into bug 137063518:01
mupBug #1370635: Unable to connect to environment after local upgrade on precise <ci> <precise> <regression> <upgrade-juju> <juju-core:Triaged> <https://launchpad.net/bugs/1370635>18:01
=== ChanServ changed the topic of #juju-dev to: https://juju.ubuntu.com | On-call reviewer: see calendar | Open critical bugs: 1370635
natefinchsinzui: yep.18:03
=== niedbalski_ is now known as niedbalski
aisraelHas relation-list been deprecated?18:47
aisraelIt's being referenced from a charm MP I'm reviewing, but I only see that command available in the juju-0.7 package18:48
=== Ursinha is now known as Ursinha-afk
=== fuzzy_ is now known as Ponyo
=== Ursinha-afk is now known as Ursinha
=== bodie_ is now known as Guest20692
=== Guest20692 is now known as bodie_
katcomarcoceppi: ping20:00
sinzui1.21-alpha1 is released and it uses devel streams instead of the released streams20:07
=== Ursinha is now known as Ursinha-afk
perrito666natefinch: why is there only one of those bugs you emailed on the topic?20:21
natefinchperrito666: not sure what you're talking anout20:26
natefinchI really have to run, sorry20:27
=== Ursinha-afk is now known as Ursinha
=== jheroux is now known as jheroux_away
menn0waigani: morning21:08
waiganimenn0: hey21:11
menn0did you see the CI blocker: bug 137063521:12
mupBug #1370635: Unable to connect to environment after local upgrade on precise <ci> <precise> <regression> <upgrade-juju> <juju-core:Triaged> <https://launchpad.net/bugs/1370635>21:12
menn0just looking at the details on the ticket it seems like it might be related to recent MESS related changes21:12
menn0waigani: what do you think?21:12
waiganimenn0: yeah, what is this: - '[fe80::f816:3eff:fe1f:67e1]:17070'21:12
waiganilooks like a mac address?21:13
menn0it's a IPv6 address21:13
menn0get used to them :)21:13
waiganioooh21:14
waiganimenn0: so you can't connect to the API if the user is in state but not added to the environment21:18
menn0yep21:18
menn0waigani: perhaps one of the migration steps isn't doing the right thing?21:19
waiganithat would be the first thing I'd check, but he's authing with admin and I'd be surprised if admin was not added as a user to the env21:19
menn0waigani: thumper is out today isn't he?21:19
waiganihaving said that, thumper has been working hard to 'demote' the status of the admin user - and we do not have an admin user by default in an env21:20
waiganimenn0: yep, thumper is away21:20
menn0waigani: true. but I don't think those changes are in 1.21-alpha2.1 are they?21:21
waiganiyeah, no but didn't he land some prelim branches?21:21
menn0waigani: I'm just in the middle of testing my last bit of upgrade sync changes (yay!) and then I can jump on this blocker21:21
menn0waigani: it seems like it won't be too hard to figure out21:21
waiganianyway, it's just a hunch but I'd check if the user is in the environment21:21
menn0(famous last words)21:22
waiganiyeah, sigh21:22
=== Ursinha is now known as Ursinha-afk
perrito666ok, lets try the new propose thing22:04
=== kwmonroe_ is now known as kwmonroe
perrito666TheMue: still around?22:09
menn0davecheney, waigani: thumper is out today. email standup?22:50
davecheneymenn0: sgtm22:56
perrito666hey, someone is pushing without previously checking their code22:59
perrito666state/metrics.go:231: no formatting directive in Warningf call22:59
perrito666worker/uniter/charm/bundles_test.go:120: arg apiCharm.ArchiveURL() for printf verb %q of wrong type: (*net/url.URL, github.com/juju/utils.SSLHostnameVerification, error)22:59
menn0perrito666: I don't think everyone has the pre-commit hook in place23:06
menn0perrito666: so they don't see the vet warning23:06
perrito666menn0: well in this case the push hook did not fail, it just warned me23:06
menn0perrito666: yep I get it too. I don't think the hook is set up to fail on vet errors, just warn as it does.23:07
perrito666menn0: odd, I had the impression it failed23:07
* menn0 shrugs23:08
menn0perrito666: I've only seen it warn so far (I've seen other vet warnings in the past)23:08
perrito666¯\_(ツ)_/¯23:08
perrito666sweet not only github suggests me to PR my recently pushed branch, it also shows a warning with a link to contributing suggesting to review the contributor policy of this repo23:09
perrito666sweeet http://reviews.vapour.ws/r/49/diff/#23:13
davecheneyperrito666: review now, lots of comments23:21
perrito666oh cool, tx davecheney23:22
perrito666davecheney: reviewboard does not seem to agree23:23
davecheneypublised23:24
perrito666aghh replying takes me out of the diff23:26
davecheneyit's a brilliant system23:26
davecheneyi love how thre are two different ways to publish your comments23:27
davecheneyone, with the "review" button23:27
davecheneywhich allows you to add a final comment23:27
davecheneyand the other, the yelow hovering bar at the top of the screen which does not let you add comments23:27
* perrito666 goes read the annotatef godoc after an intriguing comment23:28
davecheneypretty sure23:29
davecheneyerrors.Annotatef(nil, "something") => nil23:29
perrito666excelent, I just read23:29
davecheneyif it doesn't then ignore my comemnt23:29
=== Ursinha-afk is now known as Ursinha
perrito666yup // If the error argument is nil, the result of Annotatef is nil.23:30
menn0davecheney, perrito666: it does. errors.Trace too.23:30
perrito666but isnt it a bit anti idiomatic if I return (Whatever, err) instead of an explicit nil?23:31
perrito666and for the matter an explicit zeroed Whatever when err != nil?23:31
perrito666davecheney: tx, Ill fix those while the food is in the oven23:32
perrito666you people make excelent company while making dinner everyday :p23:33
menn0perrito666: you're right. if you're returning an error it's better to return nil for the other return value if there is one.23:34
menn0that Annotate/Trace feature is best used for funcs that just return an error23:35
menn0perrito666: what's for dinner?23:35
menn0waigani: the upgrade steps aren't even running23:36
waiganiO_o ?23:36
menn0waigani: I think what's happening is a chicken and egg scenario23:36
waiganibecause upgrades needs access to the API?23:36
menn0waigani: the upgrade steps infrastructure wants an api.State connection23:36
menn0waigani: to give to the upgrade steps23:37
menn0waigani: but it can't open one, because the upgrade steps haven't run yet23:37
menn0waigani: fucking awesome23:37
menn0waigani: I'm not fully up to speed with why the API connection can't be opened though23:38
waiganibut if the server is 1.20, a 1.21 client should still be able to connect to start the upgrades?23:38
menn0waigani: starting the upgrade worked fine23:39
menn0jujud restarted into 1.2123:39
menn0it gets to the point of running the upgrade steps23:39
menn0and that's where things go wrong23:39
waiganiah, the order of the upgrade steps?23:39
menn0so the server is no longer 1.2023:39
menn0waigani: nope23:39
waiganido we need to migrate the users to the env as the first step?23:40
menn0before any upgrade steps are run an API connection for machine-0 is set up23:40
perrito666davecheney: btw, partial review means there are more underway?23:40
waiganiand machine-0 is still 1.20 at that point right?23:40
menn0waigani: no23:40
waiganiah23:41
menn0waigani: machine-0 is running 1.2123:41
menn0waigani: but the upgrade steps haven't run yet23:41
waiganiwell that's just stupid23:41
menn0it might be that we need to run DB migrations first, they need a state.State which will still work23:42
waiganiso we need to make an exception to the new auth rule to allow upgrade steps to complete23:42
menn0but that's a fairly major change23:43
menn0waigani: that's probably a wiser move23:43
menn0waigani: I'm not completely up to speed with the recent user changes23:43
menn0waigani: do you understand what "environment not found" means?23:44
waiganimenn0: so we may have to stage the migration to env users across two versions. first upgrade ensures all local users (i.e. admin) are added to environment. Second upgrade locks down API connection to allow connections only by users added to the environment.23:46
menn0waigani: that sounds sensible23:47
menn0waigani: or have some kind of workaround to just allow the migrations to work and then lock down the API23:48
waiganimenn0: yep, that is the basic idea - how we implement that is the question23:48
perrito666menn0: omlette with onnions and what wallyworld calls capsicums and escalopes23:49
* wallyworld doesn't know what an escalopes is23:50
menn0waigani: I've got to meet a friend for coffee23:50
perrito666wallyworld: http://en.wikipedia.org/wiki/Schnitzel23:50
menn0waigani: back in a bit23:51
wallyworldperrito666: oh, i know what Schnitzel is23:51
waiganimenn0: one *horrible* workaround would be if user = "admin" all good23:51
perrito666wallyworld: sorry translated spanish -> french -> english23:51
perrito666:p23:51
waiganibut we'd still have to stage the migration with a workaround23:51
wallyworldperrito666: sounds delicious, what time should i come over?23:52
waiganias the workaround would have to be removed from the code once all users are in the env23:52
waiganimenn0: ^23:52
waiganimenn0: apiserver/admin.go:181 - this is where the error is coming from.23:59

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