/srv/irclogs.ubuntu.com/2013/06/05/#juju-dev.txt

=== alexlist` is now known as alexlist
thumperwallyworld: ping01:42
wallyworldpong01:43
thumperwallyworld: hangout?01:43
wallyworldsure01:44
wallyworldyou have one handy?01:44
thumpernope,01:44
thumpercan make one01:44
wallyworldok, your turn01:45
thumperhttps://plus.google.com/hangouts/_/697901d4a23e194d51d2d6a8e6e35c8f7cfe0102?hl=en01:45
wallyworlddavecheney: go question for you if you are about03:34
wallyworldnevermind, figured it out03:43
davecheneywallyworld: back03:51
wallyworldhi, i figured it out, thanks03:51
* thumper afk to make dinner, may pop back later to catch fwereade__05:29
=== thumper is now known as thumper-afk
dimitern_morning07:09
dimitern_shit.. my bad, sorry about trunk07:09
dimitern_will fix the test and propose a patch07:09
fwereade__thumper-afk, hey, just woke up, not starting work quite yet, really dropped by to say hi to TheMue07:43
fwereade__TheMue, ping07:43
=== mthaddon` is now known as mthaddon
TheMuefwereade__: pong07:54
fwereade__TheMue, heyhey07:54
TheMuefwereade__: heya07:54
dimitern_https://codereview.appspot.com/9686047/08:08
dimitern_this includes a fix for the broken test as well08:09
dimitern_fwereade__: ^^08:09
dimitern_wallyworld: ping08:09
dimitern_rogpeppe2: need second LGTM on this, if you can have a look? https://codereview.appspot.com/10003044/08:12
=== TheRealMue is now known as TheMue
rogpeppe2dimitern_: looking08:19
rogpeppe2dimitern_: reviewed08:28
dimitern_rogpeppe2: cheers08:28
dimitern_bump https://codereview.appspot.com/9686047/08:54
dimitern_fwereade__: ping08:56
fwereade__dimitern_, I will be on reviews as soon as possible08:56
dimitern_fwereade__: cheers; sorry, just checking, it seems pretty quiet today08:57
dimitern_rogpeppe2: the idea behind embedding baseSuite is to be able to reuse openAs mainly08:59
rogpeppe2dimitern_: errorSuite doesn't use a state connection08:59
dimitern_rogpeppe2: ah, you mean only there08:59
rogpeppe2dimitern_: yea08:59
rogpeppe2h08:59
dimitern_rogpeppe2: ok09:00
dimitern_rogpeppe2, fwereade__: another CL https://codereview.appspot.com/1004404309:15
dimitern_fwereade__, rogpeppe2: and another (the corresponding work on client-side) https://codereview.appspot.com/1002604409:45
dimitern_fwereade__, rogpeppe2: oops, forgot to change MachinerMachine, will repropose09:49
fwereade__dimitern_, ha, I already LGTMed, didn't spot that09:49
fwereade__dimitern_, thanks09:49
rogpeppe2dimitern_: BTW, about the machiner needing only the life status, won't it need to know the provisioning nonce too?09:50
dimitern_fwereade__: I would've missed if not for your comment on the earlier CL09:50
dimitern_rogpeppe2: well, not the machiner per se, the machine agent needs that though09:51
rogpeppe2dimitern_: same difference from the API perspective09:51
dimitern_rogpeppe2: I was thinking of having another facade for the MA09:51
dimitern_fwereade__: thoughts? ^^09:51
rogpeppe2dimitern_: what's the difference between the MA and the machine agent from the API perspective?09:51
rogpeppe2s/machine agent/machiner/09:52
rogpeppe2dimitern_: i think that having a separate facade for each entity that want to talk to the API is verging on insanity, but i realise i'm probably the only one that thinks so09:52
rogpeppe2s/want/wants/09:53
fwereade__rogpeppe2, do you know off the top of your head where agents download cs: charms from? env storage, or the charm store?09:53
rogpeppe2fwereade__: env storage, i'm pretty sure09:53
rogpeppe2fwereade__: but i may be wrong09:54
dimitern_rogpeppe2: well, aiui the facades give us extra security by not exposing methods that the entities that use them don't need09:54
fwereade__rogpeppe2, hmm, how do we do a charm store Get in the api server?09:54
rogpeppe2fwereade__: we've got to09:54
rogpeppe2fwereade__: we've got to fetch the charm in order to push it into env storage09:54
fwereade__rogpeppe2, that shouldn't have a JUJU_HOME, though09:55
fwereade__rogpeppe2, ah! we set a global variable in the charm package09:55
fwereade__rogpeppe2, hmm09:55
fwereade__rogpeppe2, that was the missing piece, thanks09:55
rogpeppe2fwereade__: what's the JUJU_HOME connection09:55
rogpeppe2dimitern_: i'm not convinced that extra security is worth 100s or 1000s of lines of extra code09:56
fwereade__rogpeppe2, I spotted the panic-if-no-charm.CacheDir, and the setting of it in Conn09:56
fwereade__rogpeppe2, but missed the setting of it in jujud09:56
rogpeppe2dimitern_: i'm not even sure it really buys us that much security tbh09:56
rogpeppe2fwereade__: ah09:56
dimitern_rogpeppe2: it's no way near 100s or 1000s of lines, maybe a few extra 100s, which is not so bad for the added benefit imho, and it's better design in general i think09:57
fwereade__rogpeppe2, dimitern_, if we're talking about dropping the pointless extra API call on Machiner construction just so we fail unauthed a little earlier I'm keen to kill it09:57
dimitern_rogpeppe2: well, if there's no method you can call you cannot screw things up, no?09:57
fwereade__rogpeppe2, dimitern_, the Authorizer will handle that anyway, right?09:57
dimitern_fwereade__: no09:58
fwereade__rogpeppe2, dimitern_, if not, ignore me09:58
rogpeppe2dimitern_: that is true, but vast, sprawling APIs have their own cost09:58
rogpeppe2dimitern_: and i fear that is where we are heading09:58
dimitern_fwereade__: we're talking whether it's worth having a separate facade for each worker/agent09:58
fwereade__dimitern_, rogpeppe2: different tasks need different information, and have different auth concerns09:58
dimitern_fwereade__: for the sake of better separation of who needs what and security09:59
fwereade__dimitern_, basically yeah09:59
dimitern_fwereade__: so having Machiner *and* MachineAgent facades09:59
rogpeppe2fwereade__: that can be dealt with inside the various methods, no?09:59
fwereade__dimitern_, although "better security" is here in my mind more in the sense of "comprehensible auth code" rather than actually "different macroscopic behaviour"09:59
rogpeppe2dimitern_: there is really no point in having more than one facade for a given authenticating entity10:00
fwereade__dimitern_, rogpeppe2, firm +1 on separating Machiner from MachineAgent10:00
dimitern_fwereade__: on the api level?10:00
dimitern_fwereade__: i.e. Machiner and MachineAgent as separate facades10:01
fwereade__dimitern_, rogpeppe2: the machiner has a very tightly proscribed set of responsibilities, no sense exposing stuff not needed by it10:01
dimitern_fwereade__: agreed10:01
fwereade__dimitern_, rogpeppe2: there's enough casual conflation of the two already, I would prefer not to extend that10:01
rogpeppe2fwereade__: if we're talking about security, what is the point of duplicating types for two clients that are sharing the same session?10:02
dimitern_rogpeppe2: they *are* different clients10:02
fwereade__rogpeppe2, with different responsibilities and usage patterns10:02
rogpeppe2fwereade__: not really. certainly not from a security perspective.10:03
dimitern_rogpeppe2: and separate connections10:03
fwereade__dimitern_, not separate connections, surely?10:03
dimitern_rogpeppe2: although a bit "virtual"10:03
rogpeppe2dimitern_: they share the exact same websocket connection10:03
dimitern_fwereade__: well the connection is one, but the way they access the api is through different facade factory methods10:03
dimitern_hence the "virtual" part10:03
rogpeppe2fwereade__, dimitern_: it seems to me that this approach amounts to duplicating a subset of the state package for every possible client.10:04
dimitern_so Machiner uses the machiner facade the same way as before it would use api.State10:04
fwereade__rogpeppe2, agreed -- the point is that we separate the context of the call from the call itself, and can do the auth work specific to the context; underneath, behind the API, we can absolutely share implementations for the things that make sense to do so10:04
rogpeppe2it seems like utter crack to me i'm afraid10:04
dimitern_and the MA similarily10:04
fwereade__rogpeppe2, exactly so10:04
fwereade__rogpeppe2, your problem with this is?10:04
rogpeppe2fwereade__: huge amounts of wasted code.10:05
rogpeppe2fwereade__: poor maintainability10:05
fwereade__rogpeppe2, so a change to the provisioner's usage of a machine should always affect how the machiner sees the world? interesting perspective10:05
rogpeppe2fwereade__: i think it shouldn't be too hard to partition the API so that it can be appropriate for all its clients.10:07
fwereade__rogpeppe2, we already failed there -- the stuff we send down with the AllWatcher doesn't match the stuff we were sending to the agents10:08
rogpeppe2fwereade__: the client interface *is* different. but i don't think we need to do the same thing for every agent.10:08
fwereade__rogpeppe2, I think it's suspect to assume that every client needs the same view of the underlying entities they manipulate10:08
fwereade__rogpeppe2, that smacks of special pleading10:08
fwereade__rogpeppe2, most workers use very different subsets of the same state objects today10:09
fwereade__rogpeppe2, the overlap STM to be pretty minimal10:09
rogpeppe2fwereade__: they all deal with the same set of basic types - Machine, Unit, etc10:09
fwereade__rogpeppe2, well... some of them use overlapping subsets of those basic types, but in very different ways10:10
rogpeppe2fwereade__: i think i'm missing something here: where do you see a potential security problem with a shared agent state API?10:11
rogpeppe2fwereade__: AFAICS the main issue we're talking about here is visibility of some fields10:12
rogpeppe2fwereade__: and i can't currently think of fields whose exposure would be a problem. i'll have another look though.10:12
fwereade__rogpeppe2, two sides to it -- one is "don't expose stuff there's not a known need for, security holes are subtle and quick to anger"10:12
fwereade__rogpeppe2, but the more important side is10:13
fwereade__rogpeppe2, that smooshing all the various security contexts into a single method10:13
fwereade__rogpeppe2, is hard to understand and hard to maintain10:13
rogpeppe2fwereade__: i think that maintaining n different versions of the same API is also hard to maintain (and to understand and use too)10:14
fwereade__rogpeppe2, and that putting the auth for a specific context in a context-specific method is noticeably more clear and maintainable, which *is* a second-order security consideration10:15
fwereade__rogpeppe2, how is it hard to maintain when we can share implementations of the bits that really are the same, and keep auth separate from that?10:15
fwereade__rogpeppe2, STM like a maintainability win10:15
rogpeppe2fwereade__: i'm not sure how much we'll really be able to share10:16
fwereade__rogpeppe2, then your argument against maintainability evaporates, no?10:16
rogpeppe2fwereade__: eh?10:17
=== rogpeppe2 is now known as rogpeppe
fwereade__rogpeppe2, if they're different methods, np, no burden10:17
fwereade__rogpeppe, if they're not different at heart, we can share an implementation10:17
rogpeppefwereade__: not necessarily.10:18
fwereade__rogpeppe, either way, putting the auth for a specific context in that context, rather than having one place responsible for all the auth logic, is a clear win10:18
fwereade__rogpeppe, expand on "not necessarily" please?10:19
rogpeppefwereade__: it depends on the types of the methods10:19
rogpeppefwereade__: and whether they contain references to other types that are implemented by the facades10:20
jammgz: poke10:20
fwereade__rogpeppe, are you talking about the client-side implementation burden?10:20
fwereade__rogpeppe, rather than the server?10:20
rogpeppefwereade__: both actually10:21
fwereade__rogpeppe, the types are all in params...10:21
mgzhey jam10:21
rogpeppefwereade__: the plan was to remove params eventually10:22
rogpeppefwereade__: along with statecmd10:22
rogpeppefwereade__: params was a temporary hack to get around a temporarily inevitable cycle10:23
fwereade__rogpeppe, having a common vocabulary with which to talk to the various facades seems not unreasonable to me, especially since it already exists and will ease the burden of implementing common functionality in a common way10:24
fwereade__rogpeppe, is there a deeper philosophical concern here?10:24
rogpeppefwereade__: really, i just feel we're multiplying entities many degrees beyond necessity.10:25
rogpeppefwereade__: and it tickles my spider sense badly10:26
jammgz: care to do a teddy bear chat about tarmac + requirements, etc?10:26
mgzjam: lets do that. mumble?10:26
jammgz: I'm there already :)10:27
rogpeppefwereade__: i feel like we had a nice clear plan for moving forward with this and ending up with a nice clean, coherent and maintainable API, and that suddenly it's all gone to pot and i'm pretty unhappy about it10:27
* TheMue is afk, lunchtime10:27
rogpeppefwereade__: it may be just post-holiday blues though10:27
fwereade__rogpeppe, I felt like we had a short-sighted "let's copy the state api" plan that we only went forward with for want of better ideas10:28
rogpeppefwereade__: that seemed like a really good, low-risk plan to me10:29
fwereade__rogpeppe, the state api is, let's not forget, a port of a port of an api designed for a different language against a different backend10:29
fwereade__rogpeppe, the core concepts of juju can still be dimly seen through the mist10:29
rogpeppefwereade__: the one thing i really did *not* want to do was to redesign the whole thing as we moved to using a network API10:30
rogpeppefwereade__: i feel we're becoming more and more vulnerable to second-system effect in this area10:30
fwereade__rogpeppe, we're designing the *network API itself* -- it is definitely not the same thing as we had before, and I am really glad that we've actually done some design work that takes the different context into consideration10:31
fwereade__rogpeppe, rather than implementing a port of a port of a port10:31
fwereade__rogpeppe, I think it's a huge win that once we've done the machiner we will have *done the machiner*, rather than half-implemented a type which'll be needed in different contexts in the future, all of which can/will evolve in subtly different directions10:33
fwereade__rogpeppe, and which exposes all capabilities to all things, and depends on authorizing all operations for all possible contexts in the same place10:34
rogpeppefwereade__: but then you've got to do the same thing for the provisioner, firewaller, uniter and every other thing we might want to talk to the API. we're not designing "an API" - we're designing many, and the extra burden will continue.10:35
rogpeppefwereade__: it feels like heinous duplication of effort to me10:36
fwereade__rogpeppe, better to have many small APIs with clearly defined and largely non-overlapping responsibilities than to propagate the monolithic state package's design to a context that doesn't suffer the same constraints10:36
jamdavecheney: hey, can you look at: https://code.launchpad.net/~jameinel/juju-core/timeout-bug-1183320/+merge/167264  (or https://codereview.appspot.com/9984046/ if you prefer)10:38
jamyou wrote the original logic and test, but mgo just changed its logic behind our back10:38
rogpeppefwereade__: i might be happier if the API was not segmented by agent name10:38
fwereade__rogpeppe, *task* name not agent name10:38
rogpeppefwereade__: even worse - there's a potentially unbounded set of tasks10:39
fwereade__rogpeppe, as opposed to segmentation by domain object type?10:39
dimitern_fwereade__: so we're not doing MachineAgent facade then after all?10:39
rogpeppefwereade__: yes10:40
fwereade__dimitern_, MachineAgent, I assumed, was for that subset of behaviour specific to the *agent* as opposed to the workers it runs -- did you have a different concept in mind?10:40
fwereade__rogpeppe, so your contention is that the monolithic nature of state is a Good Thing, rather than a sad necessity dictated by the constraints of the backend?10:41
davecheneyjam: yeah i was looking at that earlier today10:43
davecheneyi didn' read the whole thing10:43
davecheneybut my general approach is10:43
rogpeppefwereade__: yes. in particular for clients, i think i should import "launchpad.net/juju-core/state/api" rather than "launchpad.net/juju-core/state/api/mytask"10:43
davecheneythe retry delay cause so many headaches10:43
davecheneylets just rip it out ave live with it10:43
davecheneythis *IS* a problem that must be solved in mgo10:43
dimitern_fwereade__: my idea was to have state/apiserver/machineagent/ facade10:43
davecheneywe've tried as much as we can to avoid asking for a properly configurabl retry delay10:44
dimitern_fwereade__: and the corresponding state/api/machineagent10:44
rogpeppefwereade__: and in fact is there a good reason we can't have that, even if we use different types for each agent on the server side?10:44
fwereade__dimitern_, that sounds fine -- that's where stuff like CheckProvisioned and SetPassword should live, right?10:44
jamdavecheney: k. I think I mostly ripped it out, with the caveat that we still have a custom dial because we need to setup the TLS stuff.10:44
dimitern_fwereade__: exactly10:45
fwereade__rogpeppe, keeping packages small and task-focused isn't a good enough reason?10:45
fwereade__dimitern_, I think that sounds good to me10:45
dimitern_fwereade__: cool10:45
rogpeppefwereade__: state is far too big, i agree. but splitting it into n slightly overlapping subsets of it is not going to help matters IMO10:46
fwereade__dimitern_, (*consider* the overlap between unit and machine, though, it *may* be that we can clearly define an *agent*-specific api that works for units and machines... just something to bear in mind when we implement the second one)10:46
dimitern_fwereade__: i have a list of all state calls by each agent/worker10:47
rogpeppefwereade__: at the very least, i think we should organise the API according to authenticating entity rather than according to the task at the other end.10:47
fwereade__rogpeppe, splitting it into N non-overlapping subsets that are partitioned by underlying data model, rather than business logic, seems like a pretty serious encapsulation violation10:47
dimitern_fwereade__: the MA only uses machines10:47
davecheneyjam: consider that LGTM from me10:48
jamdavecheney: thanks10:48
dimitern_fwereade__: the only overlapping is in the agent.go where we need Life, SetMongoPassword for both units/machines10:48
rogpeppefwereade__: it is a trade off, of course.10:48
davecheneywe should be asking Gustavo to add all these features for us10:48
davecheneywe've tried to do it ourselves, and it blew10:48
rogpeppedavecheney: could you raise an issue against mgo?10:49
rogpeppedavecheney: hiya, BTW10:49
davecheneyrogpeppe: sure, i'll set myself on fire for an encore10:49
fwereade__dimitern_, yeah, that was just a thought, leave it in the back of your mind for now :)10:49
jamrogpeppe: well, he added delay in mgo, which we had done in juju-core, which then broke the test that asserted it delayed the way we were doing it. :)10:49
* davecheney waves at rogpeppe 10:49
davecheneyhad a good break ?10:49
dimitern_fwereade__: sure10:50
jamthough now it isn't configurable, and delays on all error types, etc.10:50
rogpeppedavecheney: i'm not sure you'll beat me to it10:50
rogpeppedavecheney: yeah, it was lovely10:50
davecheneyrogpeppe: the immolation or the vacation ?10:50
rogpeppedavecheney: the latter. we will see about the former.10:50
davecheneyrogpeppe: i'm on my third pint10:51
davecheneyso i may leave it til tomorrow morning10:51
davecheneyi think i will be able to make a lucid argument then10:51
fwereade__rogpeppe, I'm afraid I need to switch subject now, but you might want to keep an eye on the upcoming conversation10:51
fwereade__Makyo, ping10:51
mgzdavecheney: when you have a moment (maybe my evening, when you're up tomorrow?) it would be good to find out what you need from me over release things10:54
dimitern_need second review on these two related CLs: https://codereview.appspot.com/10044043/ https://codereview.appspot.com/10026044/10:57
davecheneymgz: i can't G+ atm11:00
davecheneybut is now a good time ?11:00
mgzdavecheney: are you setup with the canonical mumble server? otherwise irc is fine11:01
mgznow is fine by me11:01
davecheneymgz: I'm at the pub11:03
davecheneyso it's irc or bust11:03
davecheneyhere is how I do a 'release'11:04
davecheney1. push the release now button on the recipe https://code.launchpad.net/~dave-cheney/+recipe/juju-core11:04
davecheney2. wait for that to run11:04
davecheney3. when it's done, for each deb that it produces11:04
davecheneyrun scripts/release-public-tools/release-public-tools.sh $DEB_URL11:05
davecheneyso that is currently 6 debs11:05
davecheneywhich downloads the deb, extracts the tools,and pushes them back up to s311:05
davecheneymgz: do you still have the magic credentials ?11:05
davecheneythen I apt-get update/apt-get upgrade to install that versoin of the client11:06
davecheneythen I do a bootstrap + wordpress + mysql + releations + expose test on s311:06
davecheneysorry ,ec211:06
davecheneyif that all works the then release is 'good'11:06
mgzace, wasn't sure what smoketest bits you did11:07
davecheneyand I submit a branch to bunmp the version11:07
davecheneymgz: i just do the wordpress+mysql test11:07
mgzso, there are a few other things, I just want to document this and get some feedback from you+others, but I'm stil not certain what we're targetting for releases at the moment... just ppa? or in saucy/raring backports too11:08
davecheneyput it in the juju/devel ppa11:08
davecheneyjamespage and davey want a release at some point11:08
davecheneybut we need to give them the full monty tarball11:09
davecheneywhat mramm wants is jst to keep us in the habbit of making a release every week11:09
mgzthat's easy enough to do, with a few tweaks to the process11:09
mgzthe other thing is propogating the release to places other than ec211:10
davecheneymgz: that is something that I dropped the ball on for 1.11.011:10
mgzwe now have semi-official buckets for hp/canonistack, which I don't have credentials on11:10
davecheneyi think i might have said 'hey, can someone, um you konw, run sync-tools, or something'11:10
davecheneymgz: well, i know this is a contentios point11:12
davecheneybut wallyworld and I are going to raise bundling hte tools inside the juju client deb again11:12
davecheneyso that will be lots of run11:12
davecheneyfun11:12
mgz:)11:12
fwereade__Makyo, for when you're around: I've reviewed https://codereview.appspot.com/9975045/ -- give it a quick look, then we should talk and figure out the best way forward. rogpeppe, your input would also be appreciated here.11:16
davecheneymgz: the final part of the release is writing the release notes11:17
davecheneywhich i copy pasta from the week before, change the verstion11:17
davecheneythen go through the cards in leankit11:17
mgzyeah, tis the it I like least :)11:18
dimitern_wallyworld: ping11:19
wallyworldhi11:19
dimitern_wallyworld: you're officially the OCR today :) have a look at these two please:  https://codereview.appspot.com/10044043/ https://codereview.appspot.com/10026044/11:20
wallyworldbut it's waaaay past my EOD :-(11:20
wallyworldi'll look11:21
wallyworldalso trying to watch the Australian version of the SUperbowl11:21
dimitern_wallyworld: thanks! I know, but I couldn't find anybody to review them11:21
davecheneywallyworld: have there been any punch ons yet ?11:22
davecheneymgz: https://code.launchpad.net/~dave-cheney/+recipe/juju-core-daily11:22
wallyworldyes! just before half time. Gallen is a dirty dog11:22
davecheneywallyworld: good to see they are keeping with tradtion then11:23
wallyworldyeah, except for the Qld losing bit :-(11:23
davecheneymgz: thumpers' new log package might need to be added as a nested repo to the build11:23
davecheneyactually, i'll just do that now11:23
davecheneyit can't hurt11:23
davecheneywallyworld: i'm not seeing why that is a bad thing for me11:24
wallyworlddavecheney: i can't answer that in a polite way11:24
davecheneyi don't even follow the rugby and i'm beaming from ear to ear11:24
wallyworldyour mean rugby league? rugby is diferent11:24
davecheneypfft, you all use the same size ball11:25
davecheneywhat is the difference ?11:25
davecheneyit's just a mob of blokes with tape around their heads to stop their ears falling off11:25
wallyworldone is played with 15 men (rugby union, also called rugby), the other (rugby league) with 1311:25
davecheneywallyworld: a significant and crucial difference11:26
wallyworldsimilar concepts but forwards are totally different in their style and attributes11:26
wallyworldtotally different games really11:26
davecheneyclearly11:26
wallyworldyou being sarcastic? they are a lot different11:27
wallyworldreally!11:27
davecheneyi don't know how I could have made such a foolish mistake11:27
dimitern_:)11:27
jam wallyworld, davecheney: I know dave is 3-pints in, I wouldn't be surprised if wallyworld is 2+, so realize IRC humor might get a bit lost :)11:28
wallyworldi haven't had a drink yet - too busy watching the football11:28
jamwallyworld: I would imagine rugby union is closer to rugby league than say American Football11:28
wallyworldoh yes11:29
wallyworldfar less stoppages for a start11:29
wallyworldand only one team takes the field11:29
wallyworldnot a different team for attack, defence etc11:29
jamwallyworld: so one team goes on the field, runs it up and scores11:29
jamthen the other team goes on11:29
jamand does the same?11:29
jam:)11:29
wallyworldha ha11:29
jamseems a bit unsporting :)11:30
dimitern_jam: can you send me the g+ standup link so I can add it to my calendar please?11:30
mgzit's in the calendar already,11:30
mgzunder the blue standup event11:31
dimitern_mgz: I'm not using the team calender due to TZ issues11:31
jamdimitern_: https://plus.google.com/hangouts/_/calendar/am9obi5tZWluZWxAY2Fub25pY2FsLmNvbQ.162l082d3h3c5uidfclmtcds1g11:31
dimitern_jam: thanks11:32
jamwallyworld: did g+ crash?11:36
wallyworldnot for me11:36
jamanyone?11:36
jamwallyworld: I can't hear you if you are speaking11:36
jambut I don't hear anyone11:36
mgzjam: you dropped11:37
wallyworldwe are all fine11:37
rogpeppefwereade__: i'm looking at https://codereview.appspot.com/9975045. are you saying that we need to implement "local" charms before that branch can be landed?11:49
rogpeppefwereade__: FWIW i agree we need to do it - i'm just not entirely sure of the timeline11:50
fwereade__rogpeppe, not necessarily -- I'm saying that including local-repo-specific stuff on the server side is definitely wrong11:51
rogpeppefwereade__: i'm not sure what stuff you're referring to there11:51
fwereade__rogpeppe, I hope to have a quick chat with you and Makyo when he's available so we can figure out the least amount of work that makes progress for the gui and isn't actively wrong11:51
fwereade__rogpeppe, bumpRevision11:51
fwereade__rogpeppe, that has no place in the API, or in code used internally by the API11:52
rogpeppefwereade__: bumpRevision is false on the server side.11:52
rogpeppefwereade__: and isn't in the API, is it?11:52
rogpeppefwereade__: ah, "code used internally by the API"11:53
rogpeppefwereade__: does that really matter?11:53
fwereade__rogpeppe, I think it does, yes... statecmd will be going behind the API, right?11:55
fwereade__rogpeppe1, ^^11:55
fwereade__rogpeppe1, and it's implemented in terms that imply and use functionality that does not, and cannot, exist on the API server11:56
rogpeppe1fwereade__: yeah. this particular statecmd function is so simple i don't really see the point of having it11:56
rogpeppe1fwereade__: but the API server still needs to use conn.PutCharm currently11:57
rogpeppe1fwereade__: which has a bumpRevision flag for the time being11:57
fwereade__rogpeppe1, I must have miscommunicated, tbh, I had thought I'd explained that the necessary API was exactly and precisely a forward to state.Service.SetCharm11:57
rogpeppe1fwereade__: how does the new charm get into the state?11:57
fwereade__rogpeppe1, IMO we need a distinct API call for that11:58
rogpeppe1fwereade__: i'm not convinced we do actually11:58
rogpeppe1fwereade__: i think we want a PutCharm entry point that actually uploads bytes of a local charm11:59
rogpeppe1fwereade__: and gives back a URL11:59
fwereade__rogpeppe1, ok, we *will* need one to support local charms, but we can short-circuit it for cs: charms11:59
rogpeppe1fwereade__: that's my thought11:59
fwereade__rogpeppe1, would you agree that there's definitely no excuse for sending a deploy request, or a setcharm request, with an unrevisioned charm URL?12:00
rogpeppe1fwereade__: i think a charm URL works ok as a charm handle12:00
rogpeppe1fwereade__: i'm not sure i would12:00
fwereade__rogpeppe1, expand please?12:00
fwereade__rogpeppe1, isn't fguring out the charm to use a client-side responsibility?12:00
rogpeppe1fwereade__: i think it's perhaps reasonable for an API client to call Deploy("cs:wordpress")12:01
rogpeppe1fwereade__: without actually looking in the charm store itself and working out the desired revision12:01
fwereade__rogpeppe1, isn't the GUI user presenting charms to usefrom the charm store anyway?12:01
fwereade__rogpeppe1, what's the benefit of deploying a charm that doesn't match the one the user asked for?12:02
rogpeppe1fwereade__: the GUI will not be the only API client12:02
fwereade__rogpeppe1, the user's always deploying a *specific* charm from the GUI, right?12:02
rogpeppe1fwereade__: perhaps. but a command-line user isn't.12:03
rogpeppe1fwereade__: we're essentially making it *necessary* for an API client to talk to the charm store as well as the API.12:03
rogpeppe1fwereade__: i don't really see why we need to do that12:03
fwereade__rogpeppe1, that sounds like a really good thing to me12:03
fwereade__rogpeppe1, know what you're asking for12:03
rogpeppe1fwereade__: i'm not sure i see why you have a problem with allowing a short-form charm URL12:04
fwereade__rogpeppe1, ISTM that smearing the responsibility for figuring out what charm to deploy across layers is self-evidently bad12:05
fwereade__rogpeppe1, it's like all the other crazy magic that got put in the deploy API12:06
fwereade__rogpeppe1, lol here's a different number of units to what you asked for12:06
fwereade__rogpeppe1, service name? meh we'll infer one for you12:06
fwereade__rogpeppe1, I want an API that does what you tell it, not one that makes guesses based on inferred context12:07
fwereade__rogpeppe1, that's a job for the outermost layer12:07
fwereade__whoops, lunch12:07
fwereade__bbiab12:07
rogpeppe1fwereade__: i agree that the heuristics in the Deploy call are misplaced.12:09
rogpeppe1fwereade__: but that's mainly because all that information is already trivially available to the client12:10
rogpeppe1fwereade__: that is not the case for the revision number.12:11
TheMuehmm, just missed fwereade__12:17
TheMueok, then later12:17
* rogpeppe1 goes for lunch too12:18
* dimitern_ lunch12:22
=== dimitern_ is now known as dimitern
fwereade__TheMue, heyhey12:27
=== wedgwood_away is now known as wedgwood
=== tasdomas` is now known as tasdomas
TheMuefwereade__: ah, there he is. but i already found the answer to my question (has been about a statement in state/machine.go.12:53
fwereade__TheMue, cool12:53
fwereade__TheMue, which did you pick up?>12:54
TheMuefwereade__: i've started with the state.Cleanup() and the same maintainer will get the mgo/txn in a second cl12:55
fwereade__TheMue, two workers, please12:56
fwereade__TheMue, small components, single responsibilities12:56
fwereade__TheMue, and check with roger that we're calling it JobManageState -- I think we agreed that yesterday, but it's worth a check12:57
fwereade__TheMue, (fwiw I would be fine with you implementing each worker in a separate CL, and then integrating them both in a single followup)12:57
TheMuefwereade__: the maintainer worker is small and the cleanup method call in there is very small. the txn one would be an extra method12:57
fwereade__TheMue, they're using rather different models, aren't they?12:58
TheMuefwereade__: JobManageState? not JobMaintainState anymore?12:58
fwereade__TheMue, there's currently no such thing as JobMaintainState12:58
TheMuefwereade__: please define models in this context?12:59
fwereade__TheMue, one needs to respond to a watcher, one needs to run periodically12:59
TheMuefwereade__: no, thy are new, take a look in the issues you wrote. you called them JobMaintainState12:59
fwereade__TheMue, I know I did, that's because we didn't know what it'd be called yet13:00
TheMuefwereade__: the current approach is to have a maintainer worker running jobs periodically. right now only the cleanup.13:01
TheMuefwereade__: manager imho is the wrong name for maintenance.13:02
fwereade__TheMue, the idea is just to groups them under the rough umbrella of "things that need a state connection to function"13:03
fwereade__TheMue, but you do understand that jobs are names for *groups* of tasks, right?13:03
fwereade__TheMue, a job with two responsbilties runs two tasks13:03
TheMuefwereade__: so which task do you want to be done in a, yes, how should it be called, statemanager?13:05
fwereade__TheMue, I don't think there's any call for a statemanager type, is there?13:06
TheMuefwereade__: my idea of a maintainer is to periodically run different tasks, like the state cleanup13:06
fwereade__TheMue, we need a worker that watches for cleanup docs, and runs them13:06
fwereade__TheMue, as stated in the bug13:07
TheMuefwereade__: and how would you name that worker?13:07
fwereade__TheMue, Cleaner?13:07
fwereade__TheMue, Janitor if you're feeling cute ;p13:07
TheMuefwereade__: ;)13:08
TheMuefwereade__: but here q quote why i thought the watcher will be interesting later "probably we should have a CleanupWatcher as well, changes on which cause Cleanups to run"13:08
TheMuefwereade__: that's why i thought we need a different approach13:09
TheMuefwereade__: but ok, will change it13:09
fwereade__TheMue, I'm a bit confused there13:09
fwereade__TheMue, it's a task that runs code n response to state changes13:10
fwereade__TheMue, we need a good reason *not* to implement it in trms of a watcher13:10
TheMuefwereade__: what would be the problem doing it periodically?13:11
TheMuefwereade__: which btw doesn't mean that i will not change it13:12
TheMuefwereade__: i'm only interested13:12
TheMuefwereade__: because multiple approaches are possible13:12
fwereade__TheMue, the problem is just that it's picking a different strategy from the conventional one13:12
fwereade__TheMue, there may be a reason to do so, in which case, great13:12
fwereade__TheMue, but in general we should be using the backend's capabilities to run code when we need to rather than just guessing, I think13:13
TheMuefwereade__: it only remembered me of typical database maintenance jobs13:13
TheMuefwereade__: that's why i went that way13:13
fwereade__TheMue, this argument does not apply to the txn resumer, because we can't simply watch that13:13
fwereade__TheMue, cleanup jobs are infrequent -- once per relation removal, basically13:14
fwereade__TheMue, but we have the mechanism in place that stores them watchably13:14
TheMuefwereade__: how often do you think the watcher would raise an event?13:14
fwereade__TheMue, very infrequently13:15
TheMuefwereade__: a number, maybe as ratio to units?13:15
fwereade__TheMue, totally depends on usage patterns13:15
fwereade__TheMue, in most deployments, 0% of the time13:15
TheMuefwereade__: that's indeed very low :D13:16
fwereade__TheMue, but with a watcher-based approach, it'll be run when it needs to be, even if that usage pattern changes13:16
fwereade__TheMue, it's very possible we'll end up with more cleanup types13:16
TheMuefwereade__: the watcher approach may have the problem later of having only one responsible machine (and so a spof). periodical cleanups could run on multiple machines, needing only a good idea of distribute the runs over the day13:18
fwereade__TheMue, why would we run it on only one machine?13:18
TheMuefwereade__: in case of of multiple machines watching for the cleanup demand, how would those machines react? do all start the cleanup in parallel?13:19
TheMuefwereade__: because it's a global operation.13:20
fwereade__TheMue, AFAICT State.Cleanup will work fine when called concurrently13:21
TheMuefwereade__: ok, due to transactional behavior, but imho still no nice coordination13:22
TheMuefwereade__: but we'll start with the machine 0, don't we?13:22
fwereade__TheMue, right now, that is the only machine that will be running this job, yes13:23
TheMuefwereade__: then i'll change it into a cleaner :)13:23
TheMuefwereade__: heh, or duster? :D13:23
fwereade__TheMue, remember we'll need a watcher for those docs too13:24
fwereade__TheMue, might be best to implement that first13:24
fwereade__TheMue, and I don't demand great sophistication here13:24
TheMuefwereade__: sure, otherwise the worker will wait for what? hmm, some nice day in the future.13:24
fwereade__TheMue, something that just sends an event whenever the set of cleanup docs changes should suffice13:24
TheMuefwereade__: will do it as first small cl13:25
fwereade__TheMue, great, thanks13:25
TheMuefwereade__: can start with the cleaner itself then in parallel as followup cl13:25
fwereade__TheMue, I couldn't parse that13:26
fwereade__TheMue, cleaner worker depends on cleanup watcher13:26
fwereade__TheMue, resumer worker is independent and can be done in parallel13:26
fwereade__TheMue, hmm13:27
fwereade__TheMue, yeah, make it a worker for consistency's sake, it'll just periodically pass through a call to st.runner.ResumeAll()13:28
fwereade__mmm, cath has made pud, I'll go take the second half of the lunch break ;p13:30
fwereade__see you all in kanban13:30
=== BradCrittenden is now known as bac
TheMuefwereade__: yes, we match. what i wanted to say is that the watcher will be the first cl, the cleaner worker then follows (i only start it while the first cl is in review). the resumer will then another one13:38
mattywis there someone here I can talk to about plugins in juju-core?13:43
mattywspecifically it looks like any flag I have for my plugin which has - in it causes the arg list to get trimmed13:43
mattywhttp://pastebin.ubuntu.com/5735795/13:44
=== dspiteri is now known as Guest86044
=== thumper is now known as Guest13680
fwereade__mattyw, looks like a bug to me, would you let thumper know about it please?13:55
mattywfwereade__, will do thanks: here's a much better paste http://pastebin.ubuntu.com/5735830/13:55
fwereade__mattyw, it's always a pleasure to see a clear fail case :)13:57
mattywfwereade__, it's also comforting to know I'm not trying to do something insane :)13:58
dimiternrogpeppe1: ping14:21
rogpeppe1dimitern: pong14:21
dimiternrogpeppe1: can I ask you to have a look at these? https://codereview.appspot.com/10044043/ https://codereview.appspot.com/10026044/14:22
rogpeppe1dimitern: will do. i've got another meeting in 8 minutes though, so probably won't get through them before then.14:22
dimiternrogpeppe1: sure, no rush14:22
dimiternmgz: ping14:27
mgzhey dimitern14:28
dimiternmgz: hey, did you manage to look at the API stuff?14:28
mgzhaave looked through the two cls you have up currently14:28
dimiternmgz: they are the last in line though14:28
mgzyeah, not super relevent14:29
dimiternmgz: the actual facade has landed already and the client-side stuff as well14:29
mgzI did see I think the first before week away too14:29
dimiternmgz: no, that was rejected14:29
mgz..confusing :)14:29
dimiternmgz: if you go back in the pipeline of prereqs  you'll find the first one and follow through14:30
dimiternmgz: https://codereview.appspot.com/9896046/ that's the first14:30
mgzokay14:30
mgzthanks14:31
dimiternmgz: np, ping me if you need something clarified as you go14:31
dimiternmgz: these are the next ones in line (in order): https://codereview.appspot.com/9686047/ (client-side machiner), https://codereview.appspot.com/10003044/ (splitting test suites server-side), then the ones still up for review14:33
* TheMue reboots, somehow my box lags and i don't know why14:46
=== flaviami_ is now known as flaviamissi
=== fss is now known as f55
hazmatgary_poster, i think metrics or stats.yaml.. vitals is a term for those in the know..15:00
gary_posterhazmat, I'll note., thanks15:02
Makyofwereade__, rogpeppe1 I'm available for the rest of the day, minus a 15min call in ~50mins.15:12
fwereade__Makyo, heyhey15:17
fwereade__Makyo, would you start a hangout please? I just need a couple of mins15:17
fwereade__rogpeppe1, join us if you can but don't feel obliged15:17
rogpeppe1fwereade__: will do15:18
Makyofwereade__, alright, once I figure out the new hangout interface.  Bleh.15:19
rogpeppe1Makyo: go to the top of the page, and share a hangout15:22
fwereade__Makyo, back15:22
rogpeppe1Makyo: it's unintuitive, i know15:22
fwereade__Makyo, type to search, tick name to add, press the silly video-camera-like icon that appeared magically below the name list, IIRC15:22
MakyoAh, was making it too complicated.  https://plus.google.com/hangouts/_/04c2a36e9afa1c5ace4880ec2c4681cc01fb9f79?authuser=1&hl=en15:23
Makyohttps://codereview.appspot.com/9975045/15:29
Makyofwereade__, rogpeppe1 ^^^15:29
dimiternlast one for today: https://codereview.appspot.com/9937045/15:45
dimiternrogpeppe1, fwereade__ ^^ when you can15:45
dimiternrogpeppe1: last nag for today for these two: https://codereview.appspot.com/10044043/ https://codereview.appspot.com/10026044/15:59
rogpeppe1dimitern: sorry, looking15:59
dimiternrogpeppe1: cheers16:00
dimiternfreenode's being ddosed wow :) interesting16:01
=== benji is now known as Guest54884
=== Guest54884 is now known as benji
=== tasdomas is now known as tasdomas_afk
dimiterni'm off, have a good evening all16:28
=== arosales_ is now known as arosales
rogpeppe1dimitern: you've got a review16:30
rogpeppe1dimitern: g'night16:31
dimiternrogpeppe1: tyvm16:31
=== jamespag` is now known as jamespage
* rogpeppe1 is done for the day. g'night all.17:22
hazmatrogpeppe1, cheers17:46
=== gary_poster is now known as gary_poster|away
=== gary_poster|away is now known as gary_poster
=== marrusl is now known as marrusl_really
hazmatanyone run juju-core against maas?18:27
andreas__hi guys, did juju bootstrap lose the -v (verbose) option?>19:28
=== andreas__ is now known as ahasenack
=== f55_ is now known as fss
=== Guest13680 is now known as thumper
=== thumper is now known as Guest2101
=== Guest2101 is now known as _thumper_
=== Guest85983 is now known as thumper
thumperfwereade__: ping?21:35
wallyworld__thumper: g'day21:48
thumperwallyworld__: hey21:55
wallyworld__quick chat?21:56
thumperwallyworld__: I have a call with mramm in 4 min21:56
wallyworld__ok, after that, ping me. i'll go have breakfast21:56
thumperkk21:56
wallyworld__i was hoping to talk to fwereade__ too21:56
fwereade__thumper, wallyworld__, heyhey22:07
thumperfwereade__: just chatting with mramm22:07
fwereade__wallyworld__, guess I'm here for you then :)22:07
fwereade__wallyworld__, actually, I have to make laura's lunch for tomorrow22:10
fwereade__wallyworld__, but there is an 80% chance I'll be back in 10 mins22:10
wallyworld__fwereade__: ok, ping if you are free after your chore22:11
fwereade__wallyworld__, ping22:25
wallyworld__hey22:25
wallyworld__quick hangout?22:25
fwereade__wallyworld__, sgtm22:25
fwereade__wallyworld__, start it?22:26
wallyworld__https://plus.google.com/hangouts/_/d3f48db1cccf0d24b0573a02f3a46f709af109a622:26
thumperwallyworld__: want me to join in?22:30
wallyworld__yes22:30
=== wedgwood is now known as wedgwood_away

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