[00:00] perrito666: from argentina, the electrons have so much further to go, and they get tred and need at rest in miami [00:01] that must be it, or the fact that the country has only one freaking connection to the outside world [00:02] it is a shame that when I am in countries with good internet Is always countries where bittorrent is illegal [00:02] it's illegal here too, doesn't stop me [00:03] wallyworld_: its legal in argentina [00:03] and in holland, it's not illegal to download, only upload [00:03] wallyworld_: for what I heard in France is "we send you the police" illegal [00:03] bt is illegal??? [00:03] perrito666: you serious??? wtf [00:04] it's illegal to download pirated stuff but not illegal to use [00:04] bigjools: yeah that is what I meant [00:12] these countries give bt a 1:1 with pirating? that is rediculous... [00:14] nono I meant bt for things like movies [00:14] the fun thing is, I actually have an account in a digital movies service :p I just dont know my creds [00:15] It comes with my internet+cable subscription [00:15] well there's better places to get this stuff than BT nowadays *cough* [00:17] * perrito666 sms his wife to get the creds for his service [00:18] wallyworld_: does juju have a concept of in-memory services (overloaded term: not juju services, but a SoA service) i could reference? [00:19] wallyworld_: i want to have only 1 instance of the lease manager running [00:19] katco: we sorta do that using a worker [00:19] the state server starts named workers [00:20] each worker can host a service [00:20] wallyworld_: is that pattern worth repeating? [00:20] yes, it's what we use right at the moment [00:20] wallyworld_: cool, ty sir. maas [00:20] np. it fits with current practice, and works [00:20] katco: ping [00:21] bigjools: hey, how can i help you? [00:21] katco: unping [00:21] the service can be written indeoendent of the worker [00:21] oops :) [00:21] lol [00:21] the worker glues the service into the state server [00:21] katco: just say MAAS to get him back [00:21] bigjools: you have a very maas day :) [00:21] lol [00:22] /ignore wallyworld_ [00:22] wallyworld_: ah ok. b/c the apiserver instantiates a new object for every api call, i need to get a singleton of some sort at init time [00:23] katco: that's the remoting layer [00:23] wallyworld_: because i think we want the leasing service to handle synchronization in memory [00:23] and yes, i disagree with that implementation. but think of it like a session [00:24] wallyworld_: right, it's the remoting layer. but at the time the leadership remote layer gets instantiated, it has to know about the single lease service [00:25] the service should be stateless, so it could instantiate a new lease service fascade. or else rely on the fact that a lease service work (only one) has been run [00:26] maybe easier to discuss face-face [00:27] wallyworld_: since the ctor requires a specific signature, i'm going to use a closure to make it a bit more clear where the lease service reference is coming from [00:27] wallyworld_: yeah probably, maybe at the stand-up [00:27] ok [00:27] wallyworld_: or actually i have time now, daughter just being put to bed [00:27] wallyworld_: if you're free [00:28] sure, let's meet in standup hangout [00:28] okie doke [00:28] that sounds maas to me [00:28] i mean nice. nice to me. [00:33] /ignore katco === arosales_ is now known as arosales === kadams54 is now known as kadams54-away === kadams54-away is now known as kadams54 === kadams54 is now known as kadams54-away === kadams54-away is now known as kadams54 [01:20] ericsnow: ok, I got rid of finish restore :) [01:20] tomorrow preparerestore [01:20] but for now sleep [01:20] perrito666: sweet! [01:20] its 2am here [01:21] perrito666: sleep! === kadams54 is now known as kadams54-away [02:14] menn0: could you take one more look at http://reviews.vapour.ws/r/268/? [02:14] menn0: I've addressed all review feedback [02:14] menn0: it should be good to go === kadams54 is now known as kadams54-away === kadams54-away is now known as kadams54 [02:22] ericsnow: ok will do. but not for an hour or so. [02:22] menn0: no worries [02:22] menn0: I'm probably EOD pretty soon so no hurry [02:22] ericsnow: kk === kadams54 is now known as kadams54-away [07:06] fwereade: got a few minutes? === liam_ is now known as Guest91925 [08:13] wallyworld, heyhey [08:14] fwereade: hi, i would love to check a few things regarding the health status spec, but dinner is almost ready, can i ping you soon? [08:14] wallyworld, ofc [08:14] ta, will get back to you [08:40] fwereade: ok to talk now? 1:1 hangout [08:42] wallyworld, with you in a minute [08:42] no hurry [08:54] wallyworld, can you hear me? [08:54] wallyworld, Iguess not [08:54] wallyworld, endpoint: --waiting-for=db [08:54] no [08:54] sound died [08:54] wallyworld, relation: --waiting-for=db:3 [08:55] wallyworld, unit: --waiting-for=db:3:mysql/2 [08:55] wallyworld, rejoining [09:09] fwereade: wallyworld: are you guys in a hangout about the "juju status" doc? (I see editing going on while I'm commenting) [09:09] jam, just finished [09:09] jam: we were, but fwereade has a sucky connection [09:09] jam, my hangout keeps dying :/ [09:12] morning all [09:27] hey guys, IS have a problem with juju in #is-outage [09:28] this is the error they have https://pastebin.canonical.com/119944/ [09:28] do we still redirect (and throw away) mongo logging? [09:37] fwereade: fancy having a look at this, touching on some of what we chatted about yesterday? https://github.com/juju/charm/pull/73 [09:37] anyone available for a review on http://reviews.vapour.ws/r/349/ ? [09:38] dimitern: jam: you ever seen this mongo error (or similar)? [09:38] Wed Nov 5 09:13:37.209 Error: DBClientBase::findN: transport error: 127.0.0.1:37017 ns: admin.$cmd query: { whatsmyuri: 1 } at src/mongo/shell/mongo.js:147 [09:38] rogpeppe, based on the description I have no problem with that [09:38] voidspace, nope :/ [09:38] voidspace: I have not [09:39] rogpeppe, gonna be a beast to integrate it with core though [09:39] fwereade: i don't think so [09:39] dimitern: jam: IS have lots of mongo timeouts on a production server [09:39] fwereade: i've actually already made the changes [09:39] rogpeppe, sweet [09:39] fwereade: the first step is just to copy the entire repo into juju code (inside github.com/juju/juju/testing/charm-repo [09:39] ) [09:40] rogpeppe, heh, that makes it easier then ;p [09:40] fwereade: wallyworld: "what is the "mroe subt" in the title" ? [09:40] fwereade: then change all tests to use testing.Charms rather than charmtesting.Charms [09:40] dimitern: jam: restarting the the jujud-machine-0 service seems to have helped a bit anyway [09:40] wallyworld: also, can we call the document something other than "Juju Status"? Since that is a thing that we have which is not this ? [09:40] fwereade: subsequent changes can trim down the repo and make extra repos where appropriate [09:40] fwereade: the salient changes in that PR are right at the end, BTW [09:40] jam, heh, I think it's some mistargeted typing [09:41] voidspace, hmm.. it looks like a heavy load issue [09:41] jam, maybe mine [09:41] jam: yeah fixed, cursor fail [09:41] thanks [09:41] wallyworld: "Juju Charm Status" comes to mind [09:42] dimitern: thanks, they're happy (well, less unhappy) for the moment [09:42] sure [09:42] fwereade: i haven't got all tests compiling yet though - the main obstacle is finding a decent pair of identifiers when importing both github.com/juju/juju/testing and github.com/juju/juju/juju/testing :) [09:42] * fwereade twitches gently [09:43] perhaps coretesting and jujutesting, but i'm not that happy about that [09:43] jujujujutesting and jujutesting - what's wrong with these :D [09:43] coretesting and corejujutesting [09:43] even better :) [09:43] dimitern: "core" isn't really a thing any more [09:44] juE3testing ? [09:44] dimitern: it would've worked if it was github.com/juju/juju-core [09:44] rogpeppe, heh, sorry - I'm just happy all my tests pass finally :) [09:44] dimitern: cool [09:45] dimitern: are commits still blocked on critical bugs, BTW? [09:45] rogpeppe, according to my handy bookmarklet, no: https://bugs.launchpad.net/juju-core/+bugs?field.status%3Alist=TRIAGED&field.status%3Alist=INPROGRESS&field.importance%3Alist=CRITICAL&field.tag=ci+regression+&field.tags_combinator=ALL [09:45] * rogpeppe thinks that when the critical bugs are fixed, the 'bot should go through all the PRs it denied because of that, and retry them [09:46] dimitern: thanks [09:47] dimitern: ha, i tried to bookmark that, and discovered that not only had i bookmarked it, it was on my bookmarks bar as "juju-core blocks"! [09:47] rogpeppe, hehe, I assume you'r using firefox then [09:47] dimitern: nope, chrome [09:48] rogpeppe, ah, sorry chrome has this now as well yeah [09:49] wallyworld: so I made a bunch of comments, but I hope they feel constructive rather than critical. The only thing I'm actually concerned about is that we poll to find the current status, when to be useful it needs to be more "lively" than that. [09:50] (my service is down, wtf is wrong, "juju status", nope everything is ok for 5 more minutes until we wake up to check) [09:50] morning [09:50] morning TheMue [09:52] jam: i think they are constructive, thank you. i didn't interpret as critical. i'd rather answer many questions and make a better spec. the charm calls status-set in a hook, so i'm not sure of a way other than polling where a status can be communicated, once the charm is up and running [09:53] fwereade: wallyworld: I'd like william's input here, maybe "juju-run" is the escape hatch? But I do think we need a way that essentially a running application (postgres) can trigger data being sent to the Juju API server. [09:53] bbiab, dessert time [09:53] wallyworld: sounds yummy [09:54] dimitern: so, my final conclusion was that testing AssignPrivateIPAddresses with the mock server is not possible (in any useful way) [09:54] dimitern: so I'm mocking it [09:55] voidspace, because of the needed changes to RunInstances ? [09:55] dimitern: no, I got past that [09:55] dimitern: setting a mock server default-vpc as an initial parameter adds a network interface [09:55] dimitern: but with the mock server you can't get it to simulate error conditions [09:55] voidspace, yeah? [09:56] voidspace, for IPLimitReached etc ? [09:56] dimitern: correct, or address already assigned [09:56] dimitern: I've looked through the code [09:57] dimitern: and when it does work, you can't test what it did - because I don't have access to the EC2 instance to fetch the network interface back [09:57] dimitern: and it doesn't show on the Instance which I can reach via the mock server [09:57] voidspace, ok, so for now mocking is fine, and later we can extend the test server in goamz to reply as needed to allow better testing [09:58] dimitern: right [09:59] voidspace: dimitern: is there a reason to start with mocking rather than start with extending? [09:59] It feels like if we want to do is have it in the goamz test server [09:59] then we're doing extra work by also doing it via mocking [09:59] jam: well, we can make the error conditions testable - but with a black box test it still seems hard to test the happy path [10:00] jam: although that maybe just that I haven't found the right "trick" [10:00] jam: what the call to ec2Inst.AssignPrivateIPAddresses should do is add the requested IP to the NIC [10:00] jam: to get the NIC back I need access from the test to an authenticated EC2 instance to fetch the network interface [10:00] jam: and the auth credentials are buried [10:00] voidspace: doesn't that just mean that it records it enough such that listing it shows the IP? [10:00] jam, voidspace, considering we don't really implement yet the subnet range tracking of IPs, mocking it for now and extending goamz later seems a good step [10:01] jam: "listing it" is the issue [10:01] voidspace: dimitern: standup [10:01] didn't mean that to sound quite so much like an order :) [10:01] :-) [10:01] but it is [10:01] ;-) [10:01] voidspace: would you like to join us in the standup hangout now ? [10:01] :) [10:06] jam, wallyworld: yeah, I see juju-run as the way the system can feed backinto itself [10:08] fwereade: isn't juju-run being deprecated for actions? [10:08] fwereade: wallyworld: is it just that we add that as a discussion point in the spec? Should we try to encourage use of that instead of polling ? [10:09] wallyworld, jam: "juju run" may well be [10:09] polling is a safety net so to speak [10:10] wallyworld, jam: "juju-run" is not going anywhere [10:10] wallyworld: sure, but it gives us a much better "what should the polling rate be?" its just a backstop, and the actual event based triggers is via a different mechanism that triggers immediately. [10:10] fwereade: and fwiw, I don't see "juju run" as an ad hoc do-some-stuff that I need right now, ever going away. [10:11] jam, indeed [10:11] jam, although I would still rather consider it to be a shortcut to invoking an implicit action [10:11] jam, but I know that's some way away [10:12] jam, wallyworld: far more important is how we actually execute juju-run stuff anyway [10:12] jam: fwereade: given juju-run executes in a context (I think), would it be "juju run status-set busy" or something? [10:12] wallyworld, yeah, that should do it [10:12] wallyworld: well, to be clear "juju run" is the user/client command [10:13] jam, good point [10:13] "juju-run" is a binary on the machine that is invoked in response to "juju run" via the API server, etc. [10:13] that potentially processes on that machine can also use [10:13] wallyworld: the fact that it is confusing is partly why we should clearly document it :) [10:14] yes, i've not got a handle on what the charms would do. is there a juju run charm helper? or woud the charm just shell out and run "juju run blah"? [10:14] wallyworld: there is no ".jenv" file on the machines for "juju" the CLI to use [10:14] or should i say jujud somthing [10:14] so you have to use this other thing that is almost-the-same [10:14] wallyworld, "juju-run" [10:16] jam, wallyworld: and fwiw "juju-run" was always meant to be a purely charm-side tool [10:17] jam, wallyworld: "juju run" was an outgrowth of that, and not a *particularly* necessary or helpful one, given the existence of "juju ssh" [10:17] jam: agree about documenting things from a charmer's perspective, but i see that as subtley different to this requirements doc [10:17] jam, wallyworld: but people seem to like it, however hard it fucks with reproducibility of deployments [10:17] wallyworld: so the thing is, I see "status" as needing an immediate mode, and part of the doc is describing how status is going to work [10:17] wallyworld: so if the way to do immediate mode is "use juju-run" then it should be part of the doc (IMO) [10:18] its not so much telling them how to write their code, but how they can get something done [10:18] jam: sure, ok. i saw the doc as describing what work needed to be done, and user doc would also come too, but perhaps separately, but i'll add it [10:20] if nothing else, will make everything unambiguously clear, and make user doc easy [10:34] fwereade: any chance of a LGTM on https://github.com/juju/charm/pull/73 ? (we need two reviews) [10:34] rogpeppe, done, sorry, saw the existing one and moved on [10:35] fwereade: thanks [11:14] jam: fwereade: i've added some comments to the status spec, need to do some editing, will revisit tomorrow [11:14] thanks wallyworld [11:15] np, thanks for detailed review [11:19] fwereade, anyone else: this is the logical follow-on from the charm package change above: https://github.com/juju/juju/pull/1048 [11:19] large but mechanical [11:21] mattyw: this is relevant for you too [11:21] rogpeppe, thanks very much [11:21] rogpeppe, I'm also ocr today so I guess it's relevant twice :) [11:21] mattyw: cool [11:54] mattyw, hey, as OCR would you take a look at http://reviews.vapour.ws/r/349/ please? [11:54] rogpeppe, couple of things from me on https://github.com/juju/juju/pull/1048 [11:54] mattyw: ta [11:55] dimitern, don't worry - that is on my list - I started looking but decided I'd need to wake up a bit more first ;) [11:55] mattyw, cheers :) [11:56] mattyw: the repo is an exact (cp -r) copy of the repo from the charm.v4 repo. i'd prefer to keep it like that, rather than randomly applying changes at this point, because it's good to keep such a large PR as mechanical as possible IMHO [11:57] rogpeppe, I understand that. If you think those changes are valid can you do them in a follow up - or at least add a bug/ task somewhere so someone else can pick them up [11:58] mattyw: hopefully a bunch of the testing charms can be deleted or moved into repos for specific packages [11:59] mattyw: are juju-core bugs still being tracked in launchpad? [11:59] rogpeppe, afaik yes [12:04] rogpeppe: yes [12:12] dimitern: http://reviews.vapour.ws/r/351/diff/# [12:12] dimitern: if you have time [12:12] dimitern: bike shedding on error names welcomed [12:13] mattyw: responded [12:13] voidspace, already looking :) [12:14] voidspace: I voted for my color [12:14] voidspace: FWIW, error values should always be prefixed with "Err" [12:14] rogpeppe: thanks [12:14] rogpeppe: that was the color I preferred as well ;) [12:14] voidspace: and aren't capitalised [12:15] voidspace: (the error text, that is) [12:15] rogpeppe: ok, cool [12:15] I thought you meant the names weren't capitalised, which seemed odd [12:16] voidspace: also, when specific errors are returned, they should be compared with == (or gc.Equals) not DeepEquals [12:17] rogpeppe: cool, I wasn't sure [12:17] voidspace: and it's worth comparing with c.Assert(errors.Cause(err), gc.Equals, ErrFoo) so that the errors can be wrapped if desired [12:18] rogpeppe: we won't wrap here as they'll be used by the next level up to construct a user facing error [12:18] rogpeppe: should I / can I use errors.Cause anyway? [12:18] voidspace: nonetheless, it's a good general policy - you might wrap inside the implementation itself [12:18] voidspace: yeah, i think so [12:18] kk [12:22] changes maded [12:22] *made [12:23] natefinch: I don't like your colour [12:23] voidspace: that's because you put a u in it ;) [12:23] natefinch: which only improves it [12:24] voidspace: but does it improuve it? [12:24] natefinch: only [12:25] natefinch: I mean, if you want consistency in your language it should be culor or even kulor [12:25] voidspace: sounds double plus good [12:25] :-) [12:26] voidspace: not to double up on the paint job, but is "address" really needed in those names? Pretty sure we know we're not talking about intellectual property :) [12:26] voidspace, reviewed [12:27] natefinch: hmmm... I tend to talk about IP addresses and less so IPs [12:27] natefinch: but I don't care overly [12:28] dimitern: thanks [12:28] dimitern: why test with empty address? [12:29] dimitern: we're unlikely to call it with an empty address - and do you want parameter checking inside our implementation [12:29] dimitern: and if we'll rely on ec2 parameter checking, it isn't actually a different case [12:29] voidspace, 1) because it can happen, and the code doesn't seem to handle this; 2) as a reminder if we change the behavior later [12:29] dimitern: we'll get back InvalidParameterValue [12:29] dimitern: which we do handle [12:30] dimitern: which is why I say I don't think that's a different case [12:30] voidspace, hmm, that's true yeah - the test server doesn't handle this, but it will [12:30] dimitern: I can duplicate the test if you think it's important [12:31] voidspace, well, at least add a test case for empty address inside the test for ErrIPAddressUnavailable [12:31] ok [12:33] voidspace, thanks! [12:36] so I have a return nil erroneously in the code - meaning it can't work [12:37] but the tests checking it does work (exercising the unreachable return below) pass! [12:38] and those tests are definitely being run [12:38] ah no [12:38] it's a remnant of old code and the second return is unneeded [12:42] dimitern: rogpeppe: "in two sentence" error messages you wouldn't capitalise the second sentence? [12:42] voidspace: for example? [12:42] dimitern: rogpeppe: as in "unexpected AWS response. instance not found" rather than "... Instance not found." [12:42] voidspace: we wouldn't usually use a full stop, but a colon [12:43] rogpeppe: that avoids the problem [12:43] voidspace: unexpected AWS response: instance not found [12:46] you know your approach is basically sound when all the review comments are about the wording of your error messages ;-) [12:46] (not quite all to be fair) [12:47] natefinch: Errorf without formatting passes go vet fine [12:47] natefinch: I'm happy to switch to errors.New anyway [12:47] natefinch: go vet runs as a pre-push hook [12:49] dimitern: network.NewAddress is worse because I have to pass a Scope [12:50] dimitern: so I replace network.Address{Value:"foo"} with network.NewAddress("foo", network.ScopeUnknown) [12:50] dimitern: which I can do [12:53] voidspace, ah, fair point [12:59] mattyw: does PR #1048 look ok to you now? [13:00] mattyw: (i'd like to land it soon if possible, before it becomes conflicted) [13:00] rogpeppe, good call, looking again [13:02] rogpeppe, did you rebase it down to 1 commit? [13:02] mattyw: yes [13:02] mattyw: was that bad? [13:03] dimitern: so I've fixed everything from the reviews except your suggestion to add the ip address and instance id to the error messages [13:03] dimitern: my reasoning was that this information is known to the caller, so they can annotate the error if needed [13:03] dimitern: I'm happy to add it there if you prefer [13:04] rogpeppe, not normally, but it means I have to look through the whole thing again to see what you changed :) [13:04] rogpeppe, seems like it was the package docs and that's it [13:04] mattyw: i changed just the comment [13:04] mattyw: yeah [13:04] voidspace, my reasoning was - this will end up in the log file at some point, so let's make it comprehensive [13:04] dimitern: ok, I'll add it [13:04] voidspace, thanks! I'll have another look [13:05] rogpeppe, and you raised lp:1389656 [13:05] mattyw: yes [13:06] so instead of printing a nice message about my bug number mup decides to leave - trying not to take it personal [13:07] dimitern: done and pushed [13:08] rogpeppe, lgtm, land at your convenience [13:08] mattyw: ta! [13:08] ashipika, did you get your prs and reviews sorted? [13:09] mattyw: editing code.. will submit a bit later.. [13:09] mattyw: fwereade had some useful comments.. as always [13:10] voidspace, lgtm [13:13] dimitern: cool [13:14] dimitern: after lunch I'll look at goamz test server [13:14] voidspace, awesome! [13:26] i'm presuming that this juju-core test failure is just "one of those things" http://juju-ci.vapour.ws:8080/job/github-merge-juju/1192/console [13:26] natefinch: have you seen that failure mode? [14:14] fwereade: this is what i'm thinking of for the in-memory charm testing stuff: http://paste.ubuntu.com/8836186/ [14:15] fwereade: that would be defined in charm.v4/testing [14:16] fwereade: there could be additional constructors if desired, to make charms with more easily specified relations or whatever [14:16] fwereade: or additional fields in the CharmSpec struct as desired [14:23] bodie_: ^ [14:27] can someone please fix the landing 'bot please; i'm seeing "write error: No space left on device" [14:27] mgz: ^ [14:27] http://juju-ci.vapour.ws:8080/job/github-merge-juju/1194/console [14:34] rogpeppe: sorry was away [14:38] rogpeppe, that works for me I think [14:53] natefinch, perrito666: I don't know how to verify that the win-agents in streams are good. I hoped I could use add-machine to manually provision a windows instance to verify the machine agent was installed and it called home [14:56] dimitern: thanks for explanations [15:04] perrito666: FYI, I think I've covered your entire restore patch at a high level now :) [15:05] ericsnow: no tosca call today, so standup? :) [15:40] ericsnow: is findfile landed? I am already using it :p [15:40] perrito666: working on it [15:45] sinzui: I would hope that add-machine would work [15:46] natefinch, consider that add-machine wants ssh. I happen to have an win image with ssh, but even that failed [15:49] sinzui: ahh hmm yes [15:49] fwereade: cool [15:50] bodie_: here's what i ended up with: http://paste.ubuntu.com/8837430/ [15:50] sinzui: can you ssh there w/o a password from your machine normally? [15:51] natefinch, yes [15:52] natefinch, the juju env and the win machine are using the same key too [15:52] sinzui: hmm weird [15:54] sinzui: the landing bot seems to be broken, if that's under your control [15:56] rogpeppe++ [15:56] bodie_: cool, thanks [15:58] rick_h_: https://jujucharms.com/solutions, did we lose our count of # deploys? [15:59] those 0's make me sad :( [16:00] katco: yes, it's a new store and we don't have any counts atm. we'll either try to backfill or start new or I'm not sure yet. [16:01] rick_h_: cool. looks great btw. nice work to you and your team :) [16:01] katco: thanks, yea lots of kinks to work out but glad to get it out the door [16:01] it has that new software smell :) [16:01] hah [16:06] rogpeppe, what I was imagining was CharmSpec as an interface implemented by a set of pre-baked testing charms, or the user can implement by composing requirement functions (must have Actions.yaml for X action, must have config with A and B parameters) that way the user never has to implement these things, they're a toolkit for generating fake charms [16:07] rogpeppe, but that's probably significantly more work without a lot more reward [16:07] bodie_: in a call, will get back to you [16:07] mgz, can you look into the landing bot? [16:11] alexisb: ping, I'm available === liam_ is now known as Guest86958 === seelaman` is now known as seelaman [16:25] jam: would you mind taking a look at a couple of mattyw's reviews? http://reviews.vapour.ws/r/342/ and http://reviews.vapour.ws/r/346/ [16:27] natefinch: I've addressed your comments on http://reviews.vapour.ws/r/343/ [16:30] ericsnow, for the record you can get anyone else to review them as well I think. [16:30] someone refactored the test infrastructure so my build failed [16:30] goddamthem [16:30] mattyw: yeah [16:31] mattyw: I realized I had never followed up with a review mentor so I figured I would try it this time :) [16:32] ericsnow: looks good.... though the else in that if statement is spurious :) [16:33] natefinch: it's visually innocuous while still conveying the right meaning :) [16:34] natefinch: however, in this case I agree :) [16:35] natefinch: I could use a switch <0.5 wink> [16:44] fwereade, ping? [16:44] mattyw, pong [17:06] folks - is anyone waiting for me to review code that I promised to do and haven't yet? [17:14] bodie_: i think that what i'm suggesting is still compatible with your thoughts there [17:15] bodie_: it's straightforward to add new constructors that make a testing.Charm, with whatever higher level specification we think might be useful [17:25] rogpeppe, agree but maybe the members of CharmSpec shouldn't be exported, is my thought [17:25] bodie_: why not? [17:25] probably a future change [17:25] bodie_: i don't see that that's limiting [17:26] bodie_: it's just one possible set of constructor arguments for creating a new testing Charm [17:26] I see, so that would give the package user the ability to use this form and write it by hand [17:26] then, move toward a more automatic version if needed [17:30] bodie_: yes [17:30] bodie_: the two forms aren't incompatible with one another [17:31] bodie_: the main problem i've just come across (again) is that we can't currently generate a YAML marshaled form of the metadata from a charm.Meta value [17:32] bodie_: so if we want to specify relations programmatically (for example) we have a bit of a problem. [17:35] bodie_: there are two ways forward here - either implement a proper GetYAML method on *charm.Metadata, or (the cheat's way) just use a different representation when generating charms, then marshal it before reading it [17:56] bodie_, fwereade, anyone else: https://github.com/juju/charm/pull/74 [18:04] rogpeppe, lgtm [18:04] bodie_: ta! [18:04] :) [18:07] rogpeppe, why can't *charm.Meta be marshaled by yaml? [18:07] bodie_: it can, but it doesn't produce anything like a metadaya.yaml file [18:07] ah [18:08] maybe that's the problem [18:09] but I guess you can't just deprecate metadata.yaml [18:09] er, the current format, anyway [18:09] bodie_: indeed, it's about the oldest file format we have [18:09] bodie_: it predates the Go version of juju [18:09] even if you did, you'd still need to have a transformer for the unmarshaled form to the new format [18:09] bodie_: yup === natefinch is now known as natefinch-afk [18:10] bodie_: we actually do marshal the metadata directly into JSON in various places. [18:10] rogpeppe, so if you use the "cheat's way", then you are really laying the groundwork for that transformer ;) [18:11] bodie_: i'm not sure [18:11] bodie_: thing is, we'd probably not choose the current data format as a file format by choice, as it has redundancy in various places [18:12] bodie_: for instance, relations are keyed by name but the name of the relation is also in the value [18:18] heh === kadams54 is now known as kadams54-away === kadams54-away is now known as kadams54 [19:21] g'night all === kadams54 is now known as kadams54-away === natefinch-afk is now known as natefinch === kadams54-away is now known as kadams54 === kadams54 is now known as kadams54-away === kadams54-away is now known as kadams54 [21:47] wallyworld: here's that PR to separate state-based upgrade steps from API-based upgrade steps. http://reviews.vapour.ws/r/355/ [21:48] ok, ta, will look soon [21:48] wallyworld: there's still another PR to come which changes how upgrade targets are handled (as discussed in email) [21:48] ok === jog__ is now known as jog === fuzzy is now known as Ponyo === kadams54 is now known as kadams54-away === kadams54-away is now known as kadams54 [22:43] wallyworld, Its been a bad day. I hope you or someone can give some answers to the speculation and testing I have done in https://bugs.launchpad.net/juju-core/+bug/1389807 [22:43] Bug #1389807: stable juju cannot bootstrap because it selects the devel stanza in index.json [22:43] sinzui: i'm trying to ramp up now [22:43] what's the tl;dr? [22:43] i'm reading the bug report [22:44] comment 4 https://bugs.launchpad.net/juju-core/+bug/1389807/comments/4 [22:44] sinzui: yes, released needs to be first [22:45] since in 1.20 there was no discrimination on stream [22:45] when parsing the index file and choosing a matching stanza [22:45] wallyworld, okay, I am glad you agree with my testing. I will prep for the validation and do you agree we can rewrite the content so that we don't need to wait for beta1? [22:46] i am pretty sure, yes, 99.9% [22:46] 1.20/1.18 looked for a matching stanza based on cloud details [22:47] in there are devel, released,proposed etc - they will all have the same cloud details === kadams54 is now known as kadams54-away [22:47] so released needs to go first [22:47] it seems obvious now [22:48] in hindsight [22:48] i think it should be tested though to be 100% sure [22:48] wallyworld, well that pastebin is from a reproduction of a test from Saturday...I failed to notice the switch in the details [22:48] oh... [22:49] wallyworld, actually, I can do something right now. I control the CPCs. I will fix the order and make the CPCs happy [22:49] ok, i'll continue reading the bug etc to make sure my thoughts are correct, i've only just skimmed so far [22:50] i need to understand why clouds without a mirror are the ones affected [22:51] wallyworld, yes, please, wait and be sure. My best idea was to stop the release last night and wait to update streams.canonical.com until moew qa team were about [22:52] sinzui: the bug says private clouds - but private clouds will have their own metadata though, so i need to understand why they are reaching out to streams.canonical.com [22:53] wallyworld, no so. a lot of landscape and oil testing are open, using public streams [22:54] wallyworld, they cannot use the mirror, so the read the first item in index.json [22:54] yeah, you are right, i was thinking of private clouds behind a firewall [22:54] wallyworld, and I was think that is how stakeholders were testing myself [22:54] s/think/thinking/ [23:04] sinzui: i fear that putting the released stanza first may not work on ppc [23:05] that approach relies on json deserialisation and map ordering [23:05] wallyworld, :( [23:05] it might work, needs to be tested [23:06] with the compiled ppc binaries [23:06] i'll keep digging, see if anything else comes to light [23:08] sinzui: one nuclear option is to use a new name for the index file for 1.21 onwards, so we publish 2 index files [23:09] wallyworld, I like that option [23:09] 1.21 would look for index2.json and fall back to index.json [23:09] if index2.jsin wasn't there [23:09] the nice bit would be that only that 1 extra file is needed [23:10] wallyworld, that would require beta1. I hope ppc testing will let me change the ordering to continue releasing alpha3 [23:10] yes, it would require a beta 1 [23:11] sinzui: we will need to do the index2 option anyway, because if as i suspect map ordering is an issue, it will break on amd64 if we ever compile 1.20 with go 1.3 [23:11] maybe we won't ever do that [23:11] wallyworld, json via js is officially ordered. I wrote the mirror generation with Pythons OrderedDicts to be certain I serialised exactly what I put in it [23:11] I hope go's json is ordered [23:12] sinzui: I've learnt to never assume anything with Go [23:12] yeah, this issue comes up every other day [23:12] sinzui: a quick ppc test would be to run validate-tools on ppc using the reordered index [23:13] * sinzui added env to stilson-6 [23:14] wallyworld: can we chat about the upgrade steps review? I want to make sure I understand your comments. [23:15] menn0: sure, but i need to keep an eye on irc [23:15] https://plus.google.com/hangouts/_/canonical.com/tanzanite-stand [23:18] oops, I just tested aws which is mirrored. ppc likes it BTW [23:25] \o/ [23:26] i still fear ppc won't like the non mirrored case [23:28] wallyworld, we are about to find out. I am going to attempt an aws bootstrap first using the true aws location followed by the mirror [23:29] ok [23:30] wallyworld, I would normally use my streams and mirrors on people.canonical.com, but stilsons cannot see it. It can see aws [23:30] ah [23:31] sinzui: regardless, if it works, it is still built on a fragile foundation and it people pull 1.20 source and recompile it may very well break, so i think index2.json will be needed for beta1; this will just buy time till then [23:32] wallyworld, we loose. I my first attempt setting the real location shows that devel was selected even though released is first in index.json [23:32] yeah, not surprised [23:32] d sorts before r [23:32] :( [23:32] :-( [23:32] so does alpa [23:32] and beta [23:32] ZEVELOPMENT! [23:33] davecheney: well, it is json unmarshaling into a mao, then then we iterate the map, so no assumptions can be made at all [23:34] crap [23:34] sinzui: i can add support for index2.(s)json files to be used, when were you thinking of releasing beta1? === jog__ is now known as jog [23:35] wallyworld, officially tomorrow! [23:35] sinzui: i can have a fix done today [23:36] wallyworld, but I can wait till Friday. Lets not rush. [23:36] i can do a fix and it can be tested [23:36] wallyworld, davecheney this is the official proof that we ppc wont be happy http://pastebin.ubuntu.com/8842960/ [23:36] * sinzui adds link the bug [23:38] sinzui: poop [23:41] wallyworld, I wont release tomorrow because I need to change juju-release-tools. It needs to ensure index.json is preserved for historic juju. [23:42] sinzui: sure, np. i want to get the fix done asap to give as much time as possible for testing etc [23:44] thank you very much wallyworld. I am going to drink now because it is dinner and I want to feel good that we have a plan [23:44] sure, enjoy