/srv/irclogs.ubuntu.com/2012/03/12/#juju-dev.txt

=== asavu_ is now known as asavu
fwereade_morning wrtp, TheMue08:09
wrtpfwereade_: goat moanin'08:09
TheMuefwereade_, wrtp: morning08:09
wrtpTheMue: hiya08:09
* TheMue just fights with a network equipment change08:10
* wrtp managed to wire up the ethernet properly over the weekend. file server in the loft, GB ethernet throughout and no need to rely on dodgy wireless device drivers...08:11
fwereade_wrtp, cool08:12
wrtp(and i learned a new skill: how to wire an RJ45 jack)08:12
fwereade_wrtp, handy :)08:13
=== Leseb_ is now known as Leseb
=== asavu_ is now known as asavu
fwereade_TheMue, in my recent review, did my ramblings about naming make any sense?10:19
TheMuefwereade_: sorry, had only been able to do a first scanning. will discuss it later, currently my network doesn't e'thing right10:20
=== asavu_ is now known as asavu
=== asavu__ is now known as asavu
TheMuefwereade_: around?11:58
fwereade_TheMue, heyhey12:12
fwereade_TheMue, having lunch shortly but good to chat for now12:12
fwereade_TheMue, ...or maybe not12:13
TheMuefwereade_: ok, can wait12:13
fwereade_TheMue, laura's making it complicated;)12:13
TheMuefwereade_: already had lunch ;)12:13
fwereade_TheMue, heyhey, all fed and peaceful now :)12:48
fwereade_TheMue, what can I do for you?12:48
TheMuefwereade_: ha, know that fealing12:48
TheMuefwereade_: discussing about the retry mode12:48
fwereade_TheMue, ah, yes,cool12:48
fwereade_TheMue, what do you think of "resolution" as associated noun?12:49
fwereade_TheMue, I'm against RetryMode now because, really, only one of the 3 states involves retrying anything12:49
TheMuefwereade_: if that's the semantics behind it i'm fine with "resultution"12:50
TheMuefwereade_: sadly inside the node the content is "retry = ..."12:50
fwereade_TheMue, heh, yeah, I'm afraid we're stuck with that12:51
TheMuefwereade_: but i think that's a weakness we can live with12:51
TheMuefwereade_: i selected -1 for NotResolved because 0 is the default for an unset int. and i don't wan't this value by accident. -1 is more expressive here.12:55
fwereade_TheMue, hm, it seemed to me that NotResolved would be a sensible default value for an unst var12:56
fwereade_unset12:56
TheMuefwereade_: NotResolved is ok for an unset reply, yes, but returning an uninitialized int by accident with this value may lead to a wrong handling later.12:57
TheMuefwereade_: so with one of -1, 1000 or 1001 it's more clear12:58
fwereade_TheMue, ok, makes sense, I'm comfortable with that :)12:58
TheMuefwereade_: what do you say to the change after rogs idea of giving it an own type?12:59
fwereade_TheMue, yeah, can't see any harm in that12:59
TheMuefwereade_: i like it, even if it has just three valid values.12:59
fwereade_TheMue, you can tack the Validate func onto thattype too12:59
TheMuefwereade_: oh, havn't i, damn13:00
fwereade_TheMue, heh maybe you have I didn't check13:00
TheMuefwereade_: the new/old naming is ok, will change it13:00
fwereade_TheMue, cool13:00
fwereade_TheMue, just makes it a little easier for me to follow13:01
TheMuefwereade_: it has already the type, phew13:01
fwereade_TheMue, cool, sorry about that :)13:01
TheMuefwereade_: np13:01
TheMuefwereade_: btw, which kind of errors are handled with the Resolved functions of Unit?13:28
fwereade_TheMue, any state transition error13:28
fwereade_TheMue, ie hooks13:28
TheMuefwereade_: ic, thx13:28
fwereade_TheMue, but also potentially things that might go wrong before a hook starts13:29
fwereade_TheMue, failing to download the new version of a charm while upgrading for example13:29
fwereade_TheMue, anything that puts us into an error state13:29
TheMuefwereade_: and in this case the "resolved" flag is set?13:30
fwereade_TheMue, you do "juju resolved <broken-thing>" and tack on a --retry if you want torun the hook again13:31
TheMuefwereade_: does that command set the flag?13:33
niemeyerGood morning everybody13:33
TheMueniemeyer: morning13:33
fwereade_TheMue, yeah, to whichever value, controlled by --retry13:33
fwereade_heya niemeyer13:33
TheMuefwereade_: and then? i still don't have the worklow behind it. something fails and that needs to be resolved. after it's done (manually?) who clears that "resolved"?13:36
=== asavu_ is now known as asavu
fwereade_TheMue, the agent reads the value, clears it, and tries to do what it was asked13:37
fwereade_TheMue, think of the clearing as the unit agent taking over responsibility13:37
TheMuefwereade_: ok, i only wondered about the passive version "resolved" instead of "need error resolution"13:38
niemeyerTheMue: That's intentional.. if you type "juju resolved" you're saying "the problem has been resolved and it's fine to continue"13:39
fwereade_TheMue, not quite sure I follow13:39
fwereade_TheMue, what niemeyer said :)13:39
niemeyerTheMue: It's a statement saying it's good to go now, rather than "fix it for me"13:39
TheMueniemeyer: ok, this way it sounds reasonable. thx13:42
=== asavu_ is now known as asavu
niemeyerTheMue: So, go-state-continued-machine is the bottom of your queue, right?14:44
TheMueniemeyer: just took a look, yes, it is14:45
niemeyerTheMue: Ok, I see it still has comments from fwereade_ unaddressed, though14:45
niemeyerTheMue: Are you working on those now?14:46
TheMueniemeyer: after re-propose the go-state-continued-unit a few moments ago i would now continue with that one.14:46
niemeyerfwereade_: Btw, you've recommended: "It'd be quite nice to move this out into its own little internalMachineId func14:46
niemeyer"14:46
fwereade_niemeyer, yep; disagree?14:47
niemeyerfwereade_: Ah, sorry, nevermind.. I totally missed what you actually meant14:47
fwereade_niemeyer, ah ok,sorry unclear :)14:47
niemeyerfwereade_: No.. I misunderstood.. and talking to myself helped :-D14:47
TheMueniemeyer: *lol*14:47
niemeyerfwereade_: It was clear, I was on crack14:47
niemeyerTheMue: Is go-state-continued-unit dependent on the go-state-continued-machine, or is it an independent branch that I can review on its own?14:48
TheMueniemeyer: it doesn't depend14:50
niemeyerTheMue: Super, thanks14:50
fwereade_need to pop out briefly, bbs15:11
niemeyerTheMue: You've got a review15:40
niemeyerfwereade_: Will pick one of yours when I'm back from lunch15:40
rogpeppeniemeyer, fwereade_, TheMue: small review for you: https://codereview.appspot.com/575408616:01
TheMueniemeyer: thx16:03
TheMueniemeyer: do you know the reason why remove_machine_state returns a boolean which only has the one use that the only caller raises an exception when it's false?16:41
niemeyerTheMue: Isn't that the case we talked about last week?17:43
niemeyerrogpeppe: LGTM, cheers17:57
rogpeppeniemeyer: thanks17:57
fwereade_whoops, eod, I think cath could use some help; nn all, and I'd love it if I came back to some reviews tomorrow ;)17:59
niemeyerfwereade_: You'll have some of them18:13
niemeyer:)18:13
niemeyerfwereade_: Sorry for not getting to those today18:13
niemeyerTheMue: You just got a LGTM, though18:13
TheMueniemeyer: ah, fine18:14
rogpeppeniemeyer: http://paste.ubuntu.com/880728/18:14
rogpeppeniemeyer: but i gotta go 5 minutes ago18:15
rogpeppeniemeyer: see y'all tomorrow18:15
TheMueniemeyer: the topic above is the case of last week. before i change it i just wonna get sure that there's no needed idea behind it.18:15
niemeyerrogpeppe: Please ping me when you have some time..18:17
niemeyerrogpeppe: And enjoy your ROD18:17
niemeyerfwereade_: and you got a review as well18:33
TheMueniemeyer: last propose before submit is in18:35
niemeyerTheMue: Checking18:50
niemeyerTheMue: The comment for Resolved is still bogus18:51
niemeyerTheMue: Arguably, the improvement is small, but since you said "Done", I'm not sure if you didn't appreciate the suggested comment or just overlooked it18:52
TheMueniemeyer: mom, taking a look18:53
niemeyerTheMue: "mom" isn't a great abbreviation for "moment", btw ;-D18:54
TheMueniemeyer: hmm, knowing it as common abbrev: mom pls for one moment please18:55
niemeyerTheMue: https://www.google.com/search?q=define%3Amom18:56
TheMueniemeyer: found my mistake, only looked to the wrong naming that has been a result of the search'n'replace18:57
niemeyerTheMue: np.. please submit it19:01
niemeyerTheMue: (with the fix)19:01
TheMueniemeyer: ok, will go in now19:02
TheMueniemeyer: so, it's in, time to leave19:08
niemeyerTheMue: Have a good time19:14
TheMueniemeyer: thx, have a good ROD too19:15
niemeyerfwereade_: One of your branches seems to be affected by the problem rogpeppe pointed out..19:48
niemeyerfwereade_: https://codereview.appspot.com/5786051/19:48
fwereade_niemeyer, huh, I'll take a look at the testutil weirdness20:48
niemeyerfwereade_: I'm fixing a.. hmm.. questionable behavior I implemented in goetveld20:48
fwereade_niemeyer, about the go-hook-package branch (if you have a mo?)20:48
niemeyerfwereade_: Not sure if for some reason they started to forbid it20:48
niemeyerfwereade_: I do20:48
fwereade_niemeyer, (1) I suspect Env probably actually shouldn't be separate from context, it seemed separate at the time; in practice I think it'll make sense to tack it onto context20:50
fwereade_niemeyer, (2) the temporary path addition is because it seems better to just make meaningless commands entirely unavailable, rather than available-but-guaranteed-to-error20:51
fwereade_niemeyer, "this command doesn't exist" seems like the clearest way to denote thatthere's no good reason to call it20:51
fwereade_niemeyer, and I like the idea of minimising pollution of command space20:52
niemeyerfwereade_: I'm not following (2).. missing more foundational reasoning about why we're using "command" there at all20:52
fwereade_niemeyer, same general idea as not importing stuff you don;t use20:53
niemeyerfwereade_: It's a function to call a hook.. which "command" is that?20:53
fwereade_niemeyer, it's called via jujuc but it's still fundamentally a command line tool20:53
fwereade_niemeyer, (thatis, everything called from a hook is)20:54
niemeyerfwereade_: Yeah, but why is this relevant at all to the function that calls a hook?20:54
fwereade_niemeyer, the function that calls the hook makes (1) the env vars and (2) the relevant "executables" available for use by the hook20:54
niemeyerfwereade_: Precisely.. why is (2) being done at all?20:55
fwereade_niemeyer, for the reasons above... what's the benefit of making available a whole bunch of tools that can't be used?20:55
niemeyerfwereade_: Having the command that runs another command create symlinks as it calls the other command is a bit novel and unexpected20:56
fwereade_niemeyer, do the 3 uses of command there refer to agent, hook, hook-tool respectively?20:57
niemeyerfwereade_: It refers to Linux commands in general20:57
niemeyerfwereade_: Unset your DISPLAY environment variable and call "xeyes"20:57
niemeyerfwereade_: You'll get an error like this: Error: Can't open display:20:58
niemeyerfwereade_: The environment wasn't set properly for it to run20:58
niemeyerfwereade_: We don't hide xeyes away just because we can't run it if there's no good environment for it to run20:58
niemeyerfwereade_: The commands that are available to a hook are normal Linux executables, and they will be found in the PATH20:59
fwereade_niemeyer, but if you could guarantee that the environment was bad, what benefit would there be to making it available?21:00
fwereade_niemeyer, is there a situation in which it would be a good idea to let people hack up a JUJU_CLIENT_ID and call these tools out-of-band?21:01
niemeyerfwereade_: a) Because that's how everything in Linux works; b) Because that won't write and remove several inodes in the disk on every access; c) Because we'll eventually run these commands out of band as we discussed previously21:02
fwereade_niemeyer, heh, I had the impression that we explicitly restricted that idea to making other relations available to hooks21:03
fwereade_niemeyer, do they ever make sense entirely outside hooks?21:03
niemeyerfwereade_: That's always been the idea, at least21:03
niemeyerfwereade_: relation-set $RELATION system-on-fire=true21:03
niemeyerfwereade_: Think about what happens once the system reaches stability..21:04
niemeyerfwereade_: all hooks were run21:04
niemeyerfwereade_: If we don't allow out-of-band changes in relations, we're severely restricting what people can do via relations21:04
niemeyerfwereade_: It basically means a working system can't change relations after started, unless it breaks21:05
fwereade_niemeyer, so relation-set could be called entirely outside juju's control?21:06
niemeyerfwereade_: Let's paint a brighter picture.. relation-set is always under juju's control.. :-)21:06
fwereade_niemeyer, haha, ok, let me restate: relation-set can be *called* as part of an unrelated script on a system, and that should be meaningful?21:07
niemeyerfwereade_: Even then, that's not very relevant to this discussion, to be honest.. even if that wasn't the case, it'd still not make sense to be creating and removing several symlinks *every time a hook is run*21:07
niemeyerfwereade_: Yes, I hope we can make that meaningful in a clean way21:08
niemeyerfwereade_: and I don't think it's hard even21:08
fwereade_niemeyer, well IMO this is the crux of it, please expand; that'll probably convince me to drop it entirely21:09
niemeyerfwereade_: Which statement is "this" referring to?21:10
fwereade_niemeyer, sorry, the meaningful relation-set not inside a hook21:10
fwereade_niemeyer, I don't see what could cause thattohappen21:10
niemeyerfwereade_: Anything that happens on the machine21:11
niemeyerfwereade_: Right now the usefulness of relations is severely restricted to being modifiable inside a hook only21:11
niemeyerfwereade_: Which means all events in a relation happen as a side-effect of the relation going up, or the relation going down21:11
fwereade_niemeyer, a use case would be a great help to me here21:12
niemeyerfwereade_: Everything else in between, which is where the application will hopefully spend most of its time, can't make use of relations because there's no out-of-band changing of relations21:12
niemeyerfwereade_: I just described one above..21:12
niemeyerfwereade_: relation-set $MONITORING_RELATION the-system-is-on-fire21:12
niemeyerfwereade_: relation-set $MONITORING_RELATION the-system-is-on-fire=121:12
niemeyerfwereade_: relation-set $RELATION load-is-too-high=121:13
niemeyerfwereade_: relation-set $RELATION I-got-a-new-user=121:13
niemeyerfwereade_: relation-set $RELATION I-need-another-database=customers21:13
niemeyerfwereade_: relation-set $RELATION send-an-sms-to-fwereade21:13
niemeyer:)21:13
niemeyerAnything, really.. there are many more out-of-band use cases than there are for setup/teardown21:14
fwereade_niemeyer, ok, this involves a somewhat different conception of a charm to what I'd had before... I'm still a bit unclear about the mechanism in play21:15
fwereade_niemeyer, can we look at load-is-too-high in a bit more detail?21:15
niemeyerfwereade_: Sure.. what's the question, more precisely?21:15
fwereade_niemeyer, it seems we're talking about a charm that includes some sort of monitoring of the service, and which can call a shell script in response to ...something happening21:16
fwereade_niemeyer, I'm unclear what that something would be21:16
niemeyerfwereade_: We're talking about a software that can execute a command when something happens..21:17
niemeyerfwereade_: This sounds pretty straightforward21:17
niemeyerfwereade_: What are you unclear about there?21:17
fwereade_niemeyer, sure, not an overwhelmingly original concept when put like that :)21:17
niemeyer:-)21:18
fwereade_niemeyer, ok, I think that scotches the idea, which rested entirely on my conception that hook commands would not be generally useful21:19
fwereade_niemeyer, I maintain that, assuming the above, PATH manipulation is a perfectly normal thing and the cost of writing a few symlinks is not significant in the context of a hook execution, but that's neither here nor there21:22
fwereade_niemeyer, huh, I just realised how that sounded21:22
fwereade_niemeyer, yes, but ASSUMING there was a dragon in your bed it was perfectly reasonable to set of the fire extinguisher21:22
niemeyerfwereade_: PATH manipulation is.. writing a handful of symlinks every single time one of the hooks is run sits at the questionable side for me21:22
fwereade_niemeyer, it rested entirely on the assumption that the set of meaningful commands was context-dependent and potentially subject to change, which was what I took away from the recent discussions21:27
fwereade_ah well :)21:27
niemeyerfwereade_: A lot of /usr/bin/* is context dependent..21:28
niemeyerfwereade_: Just think about how many of those only work under X, or after you started LXC, etc21:29
fwereade_niemeyer, seems different somehow... similar to how you wouldn't even bother to install a gui tool for managing your database on a headless server21:29
niemeyerfwereade_: Many other put binaries under /usr/lib/, that are only ever run by themselves21:30
fwereade_niemeyer, but starting LXC makes commands meaningful in a range of contextx that the LXC-starting cannot control21:30
niemeyerfwereade_: Ok.. let's go the other way around then.. please find me a command that creates symlinks on demand ;-)21:31
fwereade_niemeyer, I'm not sure I buy the idea that if a tool is sometimes relevant it should *always* be available -- just thata tool should always be available in any context in which it *might* make sense21:32
fwereade_niemeyer, er, `ln` :p21:32
fwereade_(sorry)21:32
niemeyerfwereade_: Haha21:32
fwereade_niemeyer, but still, it remains a derail due to my own missed context21:33
fwereade_niemeyer, maybe one day I'll find a situation in which it really does make sense21:34
fwereade_niemeyer, btw, I'm now worrying that you'll disapprove of the general idea of the parallel pipeline -- which makes jujuc *purely* a proxy which sends command lines back tothe agent for interpretation, and gets back output+return code21:41
rogpeppefwereade_: i'm interested to see gustavo's point of view on this :-)21:42
* rogpeppe stands well back21:42
fwereade_niemeyer, the tradeoff is in *slightly* more complexity in cmd, in exchange for removal of (what feels to me like) unnecessarily complex plumbing in the python, and surprisingly neat reuse of supercommand21:43
niemeyerfwereade_: That sounds unrelated, even though if I have to be honest I'd say it's a bit suspect to have the juju server parsing command lines for its clients21:44
fwereade_niemeyer, it's something I did recently that you haven't reviewed yet ;)21:44
* fwereade_ looks resigned21:45
* fwereade_ steps up gamely anyway21:47
fwereade_niemeyer, well, can we agree to begin with that all the meaningful work in a hook command is actually performed by the agent?21:47
niemeyer:-)21:48
niemeyerfwereade_: Yes21:48
fwereade_niemeyer, and the total work is: (1) figure out what the hook's asking for; (2) do it by interacting with the hook context in some way; (3) give the result back21:50
fwereade_niemeyer, in python we have a whole lot of plumbing -- server with 8 methods, client with 8 methods, declaration of params and return types for all those methods, and individual executables that turn a command line into params and results back into output/exit codes21:52
niemeyerfwereade_: You'll need pretty much all of that somewhere21:53
niemeyerfwereade_: Reuse is great.. you can reuse in either side21:53
fwereade_niemeyer, we get all the same functionality with one method -- "run this command line" -- with one result type -- out, err, code21:54
fwereade_niemeyer, and that allows you to write all the commands as Command implementations that interact directly with the context21:54
niemeyerfwereade_: You can write all commands as command implementations interacting with the context either way, and you have to do line parsing either way21:55
fwereade_niemeyer, where the line parsing happens only matters in that *if* we do it in jujuc we need a lot more plumbing to interact with the context21:56
niemeyerfwereade_: Why?21:57
niemeyerfwereade_: What's that lot?  I think that's the crux there21:57
fwereade_niemeyer, whereas doing it in the agent allows us to use Command implementations that already have the relevant context directly accessible21:57
fwereade_niemeyer, mainly juju.hooks.protocol21:58
fwereade_niemeyer, which feels to me like a lot of code whose only effect is to obfuscate what's actually happening :/21:59
niemeyerfwereade_: Ok, I'm fine to see the branch implementing it.. if it's indeed considerably simpler, I'm game22:00
fwereade_niemeyer, I fear I'm going to put you off irretrievably when I say it's 4 branches... but I really did try to make each as focused and independent as possible22:01
niemeyerfwereade_: That doesn't put me off at all22:02
niemeyerfwereade_: I'm all for several small branches22:02
fwereade_niemeyer, good-oh22:02
fwereade_niemeyer, the only trouble with that approach is that it opens the early branches up to a lot of "but why?" questions that are best answered "because $followup", and that ratherdetracts from the benefits of the several-small-branches approach22:03
niemeyerfwereade_: Well, that's what the description is for :)22:04
niemeyerfwereade_: But it has to be a reasonable way to walk towards the achievement22:04
fwereade_niemeyer, I might take another look at those, the first one feels rather more what-than-why in hindsight22:05
niemeyerfwereade_: What causes discussions is that when rallying to implement a larger portion, it's easy to forget about some of the details22:05
niemeyerfwereade_: That's what happened with today's branches, for instance22:05
niemeyerfwereade_: It's quite useless without more stuff22:05
niemeyerfwereade_: BUT22:05
niemeyerfwereade_: It's easy to see where the feature is going.. the debate was about how that was being done, not why22:06
fwereade_niemeyer, yes indeed :)22:06
fwereade_niemeyer, btw, tyvm for the clarification on out-of-band hook commands, was edifying22:07
niemeyerfwereade_: You're very welcome. Glad to have had it too22:08
fwereade_niemeyer, btw, if a branch is already WIP, I presume I still need to `lbox propose -prep` to prevent it being promoted?22:12
niemeyerfwereade_: Right22:13
fwereade_niemeyer, cheers, justchecking :)22:13
niemeyerfwereade_: np22:13
niemeyerfwereade_: Just in case you're still around, would you mind to run "apt-get update; apt-get install lbox" and "lbox propose" in that bogus branch again?23:00
fwereade_niemeyer, sure, justa mo23:01
niemeyerfwereade_: Superb, thanks a lot23:01
niemeyerfwereade_: I've removed a silly hack I had, which might actually be considered a bug23:01
niemeyerfwereade_: It used to embed the revision information at the top of the file23:01
niemeyerfwereade_: I'm not sure if that's what confused Rietveld somehow after some upgrade they made23:02
niemeyerfwereade_: Either way, that means we'll now see which files _actually_ changed across different "propose" commands, which is awesome23:02
fwereade_niemeyer, https://codereview.appspot.com/578605123:06
fwereade_niemeyer, there's a surprising [revision details] in there now23:06
fwereade_niemeyer, but OTOH atleast you can see the diffs23:06
niemeyerfwereade_: Yeah, the surprising revision details isn't so surprising for me ;-)23:16
niemeyerand another review..23:22
fwereade_niemeyer, thanks23:37
fwereade_niemeyer, I'm not strongly inclined to put all the `var _ = Suite(...`s into init()s in *this* branch -- that feels like a separate trivial to me23:38
fwereade_niemeyer, sensible?23:39
bigjoolshi folks23:41
bigjoolscan anyone point me at some docs help me out, I am trying to work out the sequence of events that happens during bootstrap and deployment23:43
fwereade_bigjools, I'm not sure about docs, but I may be able to help?23:45
bigjoolsfwereade_: ah col23:46
bigjoolscool23:46
bigjoolsso for the maas stuff I have bootstrap saying it's worked - I see a node start up on the maas side23:47
bigjoolsbut then trying to use deploy results in it complaining that zookeeper is not running23:47
bigjoolsI thought I'd better try and understand exactly what needs to happen to be able to debug this23:47
fwereade_bigjools, hmm; it's definitely not that zk just isn't running *yet*?23:48
bigjoolsoh how long does it take?23:48
bigjoolsand what initiates that?23:49
fwereade_bigjools, once you have an instance, just about everything that happens should be covered by the cloud-init stuff23:49
bigjoolsah ok, so bootstrap kicks it all off23:50
bigjoolsI'll ssh in to the node and see if it's starting up23:50
fwereade_bigjools, yeah; that's the best place to start23:50
fwereade_bigjools, I'm afraid I know nothing about debugging cloud-init though23:51
bigjoolsyou and me both :)23:51
fwereade_bigjools, I have a feeling something useful should be logged somewhere, but... yeah, that's not very helpful ;)23:51
bigjoolsheh23:51

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