[01:03] lucky(~/charms/raring/gccgo) % juju destroy-service gccgo2 [01:03] juju delucky(~/charms/raring/gccgo) % juju destroy-machine 2 [01:03] lucky(~/charms/raring/gccgo) % juju destroy-service gccgo2 [01:03] juju delucky(~/charms/raring/gccgo) % juju destroy-machine 2 [01:03] juju sttauserror: no machines were destroyed: machine 2 has unit "gccgo2/0" assigned [01:03] blarg, thanks asynchrony [01:27] phase 1. complicated problem [01:27] phase 2 .... [01:27] phase 3. gnome shell! [01:45] this week in silly juju tricks http://dave.cheney.net/2013/09/09/using-juju-to-build-gccgo [02:11] has anyone tried compiling juju with gccgo ? [05:30] morning all [05:31] morning jam [05:58] hey wallyworld_ I'm in whenever you're around [05:58] ok [06:23] axw: i have an urgent request [06:23] 2013-09-09 06:05:37 DEBUG juju.provisioner provisioner_task.go:300 Stopping instances: [0xc2002a1be0 0xc2002a1c10 0xc2002a1c60 0xc2002a1c70 0xc2002a1c80 0xc2002a1cc0 0xc2002a1cd0 0xc2002a1b80 0xc2002a1ba0 0xc2002a1c20 0xc2002a1c50 0xc2002a1c90 0xc2002a1ca0 0xc2002a1cb0 0xc2002a1b60 0xc2002a1b70 0xc2002a1b90 0xc2002a1bb0 0xc2002a1bd0 0xc2002a1c30 0xc2002a1bc0 0xc2002a1bf0 0xc2002a1c40] [06:24] 2013-09-09 06:05:38 DEBUG juju.provider.maas environ.go:303 error releasing instance &{0xc20030e870 0xc2002beb40} [06:24] 2013-09-09 06:05:38 DEBUG juju.provider.maas environ.go:303 error releasing instance &{0xc20030e8a0 0xc2002beb40} [06:24] 2013-09-09 06:05:38 DEBUG juju.provider.maas environ.go:303 error releasing instance &{0xc20030e960 0xc2002beb40} [06:24] ^ can you pease figure out what type this is in gomaasapi and add a String() method too it [06:24] ok [06:24] axw: thanks [06:25] sorry, that i haven't raised a bug [06:25] this has been an all day job to get to this point [06:25] axw: if you raise a bug for it [06:25] please mark it critical for 1.14.0 [06:26] jam: you froze? [06:34] davecheney: https://bugs.launchpad.net/juju-core/+bug/1222664 [06:34] <_mup_> Bug #1222664: maas provider's instance is not a Stringer [06:34] should call them Peters [06:36] axw: ta [06:36] that'll make life easier [06:49] axw: thanks for the quick turnaround, just checking with bigjools to make sure id() is good enough [06:49] davecheney: ok [06:49] it is [06:50] sweet [06:51] ID and hostname is better. typing this in two channels. .. [06:51] yeah ok, that would be useful I guess [06:51] I'll add it in [06:52] axw: thanks [06:52] i know it's double underpants [06:52] but it cost 2 man days to figure this out [06:53] actually more [06:53] at least 4 people were involved [06:56] bigjools: is it possible for an instance's MAAS object to not have a hostname? I assume not... [06:56] (I need to justify a panic) [06:57] axw: impossible [06:57] (famous last words) [06:57] :) [06:57] thanks [06:57] i give that a week before we revert that [06:58] https://bugs.launchpad.net/gomaasapi/+bug/1222671 [06:58] davecheney: alternatively I can encode the error in place of the hostname? [06:58] <_mup_> Bug #1222671: maas provider must only attempt to stop machines it owns [06:58] axw: that would be better, just put UNKNOWN or something [06:58] i know that in ec2 you can have an instance without a hostname [06:58] for short periods [07:26] mornin' all! [07:31] hey rogpeppe1 [07:31] axw: hiya [08:43] rogpeppe1: hey, welcome back! [08:43] dimitern: yo! [08:43] rogpeppe1: good holiday? [08:43] dimitern: great thanks; just about recovered now :-) [08:43] rogpeppe1: good :) [08:44] rogpeppe1: we have a complete uniter api - finished off the client-side last week [08:44] dimitern: fantastic! [08:44] rogpeppe1: now on to the actual uniter migration from state to the api [08:46] dimitern: BTW, interesting tidbit from my hols - my cousin was staying with us and her partner (also there) is product manager for a significant sized startup; i found out they were doing the whole thing in Go. [08:46] dimitern: which was a nice surprise [08:47] rogpeppe1: nice! what's the product? [08:47] dimitern: i think it might be https://hailocab.com/ [08:47] rogpeppe1: even the iphone apps? :) [08:48] dimitern: naah, just the back end [08:48] dimitern: my cousin herself is in charge of migrating the BBC to use cloud services for scaling; i tried to get in a word for juju... [08:49] rogpeppe1: sweet! did she seemed interested? [08:50] dimitern: i'm not sure it really fits their goals [08:50] rogpeppe1: how so? [08:51] dimitern: i don't think we're mature enough for them to consider yet [08:52] rogpeppe1: ah, well we'll get there [09:25] rogpeppe1: a trivial review? https://codereview.appspot.com/13292044/ [09:25] dimitern: looking [09:26] dimitern: LGTM [09:26] rogpeppe1: cheers [09:35] fwereade: ping [09:51] rogpeppe1: how do you feel about having an api call taking a relation id and returning a uniter.Relation proxy? we already migrated to using relation tags as "relation-svc1.rel1#svc2.rel2", but relations are special in that we cannot convert between id and tag without a state call [09:52] rogpeppe1: now we have a Relation API call taking a tag and returning the proxy [09:52] dimitern: what would the API call actually do? [09:53] rogpeppe1: it will take an int relation id and return the same as Relation() currently returns [09:53] rogpeppe1: params.RelationResults [09:53] dimitern: oh of course. that seems... reasonable at first glance [09:54] dimitern: what needs to do that operation? [09:54] rogpeppe1: what bugs me is we decided to always use tags over the wire [09:54] dimitern: (the mapping from relation id to relation tag, that is) [09:54] rogpeppe1: but not doing that and instead refactoring a big chunk of the uniter to always use tags seems costlier [09:54] rogpeppe1: uniter:401 and uniter [09:54] :446 [09:55] rogpeppe1: it's when it loads or updates the local relations disk cache [09:55] dimitern, pong [09:55] fwereade: hey [09:55] dimitern, hey dude [09:55] fwereade: take a look a bit up^^ [09:56] dimitern: presumably the local disk cache could record the relation tag too... but then it would be backwardly incompatible i guess [09:56] dimitern, I'm with rogpeppe1 [09:56] dimitern, cache it locally [09:56] fwereade: where? [09:56] dimitern, it's unchanging, and I think constructed from info that's guaranteed to be available [09:57] dimitern, inside the relation state dir [09:57] fwereade: what about upgrading? [09:57] fwereade: good morning, BTW [09:57] rogpeppe1, heya :) [09:58] fwereade: so add RelationTag as a field to hook.Info and StateDir ? [09:58] fwereade: and yeah - what about upgrading? [09:59] dimitern, I hadn't been originally thinking on hook.Info [09:59] dimitern, I had been imagining that the conversion to id would take place before then [09:59] fwereade: ah [09:59] dimitern, doesn't a hook queue get constructed with a state dir? or is it just the idealized contents of one? [09:59] fwereade: well, if we have a RelationById() API call it'll solve all this [10:00] dimitern, yeah, guess so, but it feels kinda ludicrous [10:00] dimitern, that said go with it [10:00] fwereade: it is kinda, but the relations are a special case [10:00] fwereade: ok then, will do [10:01] dimitern, yeah, they're somewhat unhelpfully shaped by the relationy-bits architecture in uniter I'm afraid [10:01] dimitern, we shall iterate as we can [10:01] sorry bbiab contract thingy [10:40] rogpeppe1: and there it is https://codereview.appspot.com/13238046/ [10:40] dimitern: looking [10:40] rogpeppe1: btw we changed the standup time to be in 5m from now, 45m earlier [10:40] dimitern: ah, good to know, thanks [10:45] rogpeppe1: I have a feeling you won't like the fact getting relations involves 2 server calls, but I'm happy to discuss that and possibly do a follow up that doesn't do that [10:45] standup time everyone: https://plus.google.com/hangouts/_/fe0782db82ad005f124b51fd3035bf811cb05e5d [10:45] dimitern: you're psychic :-) [10:45] dimitern, rogpeppe1, fwereade ^^ [10:45] dimitern: was just writing comment to that effect [10:45] rogpeppe1: which involves not using LifeGetter for relations as well [10:47] rogpeppe1: and changing both Relation() and RelationById() [11:23] jam: since you asked :-) https://codereview.appspot.com/13619043/ [11:29] fwereade: can I get a quick chat with you about HTTPS access? [11:29] jam, ofc [11:30] fwereade: https://plus.google.com/hangouts/_/50214d40bcd2c952197a41169820a83b41457d6b [12:17] rogpeppe1: updated https://codereview.appspot.com/13238046/ [12:17] rogpeppe1: thnaks for the review btw [12:28] dimitern: responded [12:29] rogpeppe1: so what's your suggestion? [12:29] rogpeppe1: I'd like not to change state.Endpoint if possible [12:29] rogpeppe1: better comment? [12:30] dimitern: perhaps a comment in both state.Endpoint (to say it can only fail if the endpoint isn't found) and in getOneRelationById (to say why ErrPerm is appropriate) ? [12:31] rogpeppe1: ok, will do [12:38] rogpeppe1: btw there's already a comment like this: state/relation.go:232 [12:38] rogpeppe1: so I'll just edit the comment in prepareRelationResult [12:38] dimitern: good point. yeah, that seems ok [12:44] rogpeppe1: updated again https://codereview.appspot.com/13238046/ - is it good to land now? [12:45] dimitern: yes, but without the "most likely" qualifier - the logic is only correct if that's the only possibility [12:46] rogpeppe1: "most likely" means the state connection might have dropped [12:46] rogpeppe1: i.e. unrelated connection error [12:46] dimitern: if that's a possibility (it is not currently) then the logic is wrong [12:46] rogpeppe1: ok, will drop the most likely then [12:47] dimitern: the point is that we *never* want to mask state connection errors [12:48] rogpeppe1: even when not authorized in the first place? [12:49] rogpeppe1: and here's the follow-up https://codereview.appspot.com/13511044 [12:49] dimitern: if it wasn't authorized, we either know that (in which case we should already have returned ErrPerm) or we don't, in which case we need to return the connection error, because it might be a legitimate request and we can't tell because of the connection problem. [12:50] rogpeppe1: ok [12:55] rogpeppe1: so then LGTM -"most likely" ? :) [12:55] dimitern: yeah [12:56] rogpeppe1: thanks [12:56] rogpeppe1: and the other CL - does it look ok? [12:56] dimitern: just looking [13:06] rogpeppe1: thanks again - updated https://codereview.appspot.com/13511044/ [13:10] dimitern: hmm, i don't quite see why we're making Life not work on relations any more [13:11] rogpeppe1: we don't need it [13:11] rogpeppe1: we have Relation() and RelationById() that returns life [13:12] dimitern: i guess that's reasonable, though it seems like an arbitrary restriction when the Life call works on all the other kinds of entities that have a Life [13:13] dimitern: i suppose it depends whether we're trying to think of the API as something coherent in itself, rather than just an exact mirror of the agents' requirements [13:13] rogpeppe1: relations are different from all other entities [13:13] rogpeppe1: I don't see why we can't balance both [13:14] rogpeppe1: coherency and agents' requirements [13:14] dimitern: all entities are different from each other :-) [13:15] rogpeppe1: yes, but relations have 2 identifiers which are not convertable between each other without accessing state [13:15] dimitern: i don't really mind (and it's less code, which is always good) but i'm not quite sure why relations are different in this particular case. [13:16] rogpeppe1: well, i this particular case i chose less code, yes [13:16] dimitern: fair enough === marcoceppi_ is now known as marcoceppi [13:26] rogpeppe1: so LGTM then? :) [13:28] dimitern: yup [13:29] rogpeppe1: cheers === hazmat` is now known as hazmat [15:29] is there a currently a juju command that lists the available tools? [15:32] ha, i've just discovered that once you've used --upload-tools once, you can never go back. [15:32] i know why we implemented that logic, but it still seems a bit dubious [15:33] how never is never? [15:34] just deleting the bucket manually should do, shouldn't it? [16:53] mgz: yeah, probably, although you can't do that with juju itself, and deleting tools that are currently being used seems dubious itself. === flaviamissi is now known as flavia_ === flavia_ is now known as flaviamissi [22:47] * thumper waves [23:40] i love how even looking vaguely at the logging output from cmd/juju makes a raft of unrelated tests fail [23:44] OI! [23:44] what the frack has haapened to bootstrapo [23:44] http://paste.ubuntu.com/6085693/ [23:45] why did it suddenly start doing that [23:46] thumper: how was the weekend away? [23:46] davecheney: which bit about bootstrap? [23:47] The MAAS integration tests currently use pyjuju. Should we switch them to use gojuju yet? [23:47] WCPGW? [23:47] you sound confident [23:47] do the tests use tags? [23:48] don't think so [23:48] it bootstraps and deploys a couple of charms [23:48] in that case, it would be interesting to see how it goes [23:49] it would