/srv/irclogs.ubuntu.com/2012/05/28/#juju-dev.txt

rogpeppefwereade: good morning08:19
fwereaderogpeppe, heyhey08:19
rogpeppefwereade: back home now?08:19
fwereaderogpeppe, yeah, it's quite a relief :)08:20
rogpeppefwereade: parents can be stressful...08:20
fwereaderogpeppe, my parents are fine really... it's the aggregate of travelling around and england in general and having to see far too many people in too few days08:21
rogpeppefwereade: yeah, i can see that...08:21
rogpeppefwereade: still, you got some good weather...08:22
fwereaderogpeppe, oh, indeed, it was lovely... but I'm still really happy to be back home :)08:22
rogpeppefwereade: exciting event of the morning: i've just submitted the branch that actually runs the Go s/w on the server...08:25
rogpeppefwereade: as of 30s ago08:25
* fwereade whoops, hollers08:25
rogpeppefwereade: bootstrap phase 1, complete08:26
rogpeppefwereade: i thought i'd move on to some constraint stuff now08:27
fwereaderogpeppe, that sounds like a good plan08:27
rogpeppefwereade: unfortunately i lost all the notes i made over UDS08:28
rogpeppefwereade: not that there were many, mind. i *think* i remember the general gist.08:29
fwereaderogpeppe, heh :) hopefully the approximate parmeters remain accurate08:29
fwereaderogpeppe, if I can be of any assistance let me know08:29
rogpeppefwereade: thanks. i think i'll take a dive into the python code for a little, just to see. have you got a suggestion as to the crux of the contraint code there?08:30
fwereaderogpeppe, basically everything core is is juju/machine/constraints.py08:31
rogpeppefwereade: lovely, thanks08:31
fwereaderogpeppe, the big thing that should definitely change behaviour-wise is the unit-level constraint stickiness08:32
rogpeppefwereade: is that something we can change without breaking things?08:32
fwereaderogpeppe, yeah, I think so -- it just removes a guarantee that I don't think is made explicitly anywhere08:33
rogpeppefwereade: ok. i take it that the current code implements unit-level stickiness, and you're saying that it should be removed, as per discussions here earlier.08:34
rogpeppe?08:34
fwereaderogpeppe, it *is* a guarantee that I assumed we'd need to provide, and perhaps some users share my assumptions08:34
fwereaderogpeppe, yeah08:34
fwereaderogpeppe, but it doesn't fit niemeyer's model and I think he is right about it :)08:36
rogpeppefwereade: yeah, probably. i remember the discussion.08:36
rogpeppefwereade: can i treat this as the authoritative spec? https://juju.ubuntu.com/docs/constraints.html08:38
rogpeppefwereade: for instance, can i assume that no value will contain white space?08:39
fwereaderogpeppe, I think you should be safe there, yes08:39
fwereaderogpeppe, anything related to units should be dropped, and you should maybe hold off on the provider-badged constraints until you've had a chance to sync up with niemeyer08:40
rogpeppefwereade: seems good08:41
fwereaderogpeppe, (IIRC he wants ec2-zone to be availability-zone... but I'm not sure how long-term that plan is)08:41
fwereaderogpeppe, (and who knows what maas constraints we'll end up with)08:41
rogpeppefwereade: so, the plan is to have a single struct that represents constraints across all providers.08:43
rogpeppefwereade: i guess that means that conflicts are provider non-specific too08:44
fwereaderogpeppe, I *think* the conflicts were always fundamentally non-specific, am I missing something?08:45
fwereaderogpeppe, ah, I think I see08:45
rogpeppefwereade: we should get the python version to change ec2-zone to availability-zone so that the Go version doesn't break things08:45
fwereaderogpeppe, what actually conflicts with what may take some more thinking now I guess08:45
fwereaderogpeppe, that sort of question is why I feel we should sync up with niemeyer08:45
* bigjools has a couple of MPs up if someone could take a looksie please08:46
fwereaderogpeppe, and I feel it'd be best to start with a constraints struct that skips all the potentially contentious ones08:46
rogpeppefwereade: i think what i'll do as a first step is move the existing "constraint" stuff out of ec2 and into environs08:46
rogpeppefwereade: so we've got the skeleton types and API there08:46
fwereaderogpeppe, great08:46
fwereadebigjools, I'll see if I can manage a quick review at some stage but I'm not *really* meant to be thinking about python... so you might end up having to wait for the US to wake up08:47
fwereadebigjools, sorry :(08:47
bigjoolsfwereade: poor Python!08:50
bigjoolsthey are small, if that helps :)08:50
* fwereade is flattered :)08:50
fwereadebigjools, cool08:50
rogpeppebigjools: lucky Go! :-)08:50
bigjoolsare you planning to switch to Go and forget the Python one at some point?08:51
rogpeppebigjools: that's the plan08:51
rogpeppefwereade: just looking at the INSTANCE_TYPES list in providers/ec2/utils.py. where did you get the stats from. the memory numbers look a bit weird. what units are they in?08:54
fwereaderogpeppe, IIRC they're MB; and, er, I forget :/. I've seen a couple of different sets of numbers quoted... amazon is not much help, they just say things like "1.6GB" which is tricky to translate with certainty08:55
rogpeppefwereade: ok, thanks.08:55
fwereaderogpeppe, I guess the *other* issue with constraints is whether or not the resource-map thing is planned for 12.1008:55
rogpeppefwereade: BTW with conflicts, i'm wondering if the best approach is simply to let a conflicting requirement be satisfied by nothing.08:56
fwereaderogpeppe, because I'm pretty sure we don't want hardcoded numbers; but nor do we rally want to saddle go with new features08:56
fwereaderogpeppe, please expand re conflicts08:57
fwereaderogpeppe, I don't think what you said works08:57
rogpeppefwereade: currently, if you specify two conflicting constraints, it's an error, right?08:57
fwereaderogpeppe, yeah08:57
rogpeppefwereade: so i'm wondering if it would be easier if it wasn't an error, but simply resulted in a constraint that was impossible to satisfy08:58
rogpeppefwereade: which means that conflicts don't need to be defined in a provider-non-specific way08:59
fwereaderogpeppe, not sure that works... consider an m1.small with at least 512MB. that's not unsatisfiable in any sane universe; but it does I think betray confusion on the user's part, which should be flagged an whined about09:00
rogpeppefwereade: and also means that, potentially, some attributes may conflict only if they have some values09:00
fwereaderogpeppe, I fear that that in particular will become hideously complex and easy to screw up09:00
rogpeppefwereade: i'm not sure.09:01
rogpeppefwereade: i think that if we have tags, for example, a tagged class of machine may or may not conflict09:01
rogpeppefwereade: with some other attribute09:01
rogpeppefwereade: and if someone tries to deploy an m1.small with at least 512MB, they'll quickly find out it's impossible...09:02
fwereaderogpeppe, I don't see how that's an improvement over immediately finding it's ill-specified09:02
rogpeppefwereade: dunno, just thinking09:02
fwereaderogpeppe, consider also arch/instance-type interactions09:03
fwereaderogpeppe, it's not insane to ask for an i386 m1.small, but it is to ask for an i386 cc2.8xlarge09:04
fwereaderogpeppe, the first cut had arch conflicting with instance-type, and we dropped that conflict for exactly that reason09:05
rogpeppefwereade: i think the difficulty with the "immediately finding it's ill-specified" thing is that that there's an overlap between several constraining attributes in terms of the machines that can satisfy them, and that overlap won't always be clear-cut, i think09:05
fwereaderogpeppe, and so that falls back to "we can't satisfy those constraints" vs "that request doesn't even make sense, pick one or the other"09:05
rogpeppefwereade: ok, so that's precisely my point09:05
rogpeppefwereade: i don't mind if we always do the former09:06
fwereaderogpeppe, I see your point of view09:07
rogpeppefwereade: the reason we're able to do the conflict think with instance-type is that it specifies almost everything. but it seems to me that it's a special case.09:07
rogpeppefwereade: hmm, i see the advantage though of being able to say to the user "a constraint with these *never* be able to be satisfied, regardless of the values you choose".09:09
rogpeppefwereade: but even then that's not actually true.09:09
fwereaderogpeppe, I think I may still be missing some details... how should we then handle a case where the env specified 1386 and a service asks for cc2.8xlarge?09:09
rogpeppefwereade: it would fail to choose any instances (assuming cc2.8xlarge is always amd64)09:10
fwereaderogpeppe, the conflict mechanism currently drops the more-general arch constraint because it conflicts with a more-specific instance-type constraint09:10
fwereaderogpeppe, if we're not using conflicts at all, I'm not sure how we deal with that situation09:10
rogpeppefwereade: i would treat all the constraints as independent09:10
rogpeppefwereade: given that ec2 is filtering instance types, not machines, i'd start with a list of all instance types, filter out all those without instance-type=cc2.8xlarge, then filter out all those with arch!=i386, leaving nothing.09:12
fwereaderogpeppe, so you'd just break it? :p09:12
rogpeppefwereade: no need to encode any knowledge of constraint conflicts AFAICS - they just come out in the wash, by resulting in nothing09:12
rogpeppefwereade: it's broken by the user specifying an impossible constraint09:13
rogpeppefwereade: same as if specified mem=8000009:13
rogpeppes/if/if you/09:13
fwereaderogpeppe, I don't think they're the same situation09:14
fwereaderogpeppe, more realistic example09:14
fwereaderogpeppe, env: "instance-type=m1.small"; service "mem=8G"09:14
rogpeppefwereade: oh yeah "setting an instance-type constraint will clear out any inherited cpu or mem values, and vice versa,"09:15
fwereaderogpeppe, it's entirely unhelpful for us to whine about not having an m1.small with 8G, when IMO it's perfectly clear that the service-level 8G should result in an instance type that does satisfy09:15
fwereaderogpeppe, exactly09:15
rogpeppefwereade: i think that actually makes constraints harder to reason about.09:16
rogpeppefwereade: BTW what other constraints other than instance-type might result in conflicts?09:16
fwereaderogpeppe, the other uses were orchestra-name/orchestra-classes, but orchestra-name got dropped09:17
fwereaderogpeppe, in general I think that name constraints will conflict with just about everything else09:17
rogpeppefwereade: i think i'm coming to the thought that certain attributes are symbolic aliases for a set of other attribute values.09:17
fwereaderogpeppe, and while I understand the arguments against name constraints I also think we may be stuck with them09:17
rogpeppeAram: yo!09:18
Arammorning.09:18
fwereaderogpeppe, hmm, I'm not certain the linked attribute values are *necessarily* knowable09:19
fwereadeAram, heyhey09:19
rogpeppefwereade: yeah, but perhaps that's true of the attributes they conflict with too.09:19
rogpeppefwereade: i.e. on some providers, instance-type *may* conflict with arch09:20
fwereaderogpeppe, I'm thinking about MAAS here -- we can't currently find out cpu/mem, but then that's why we don't even expose them, so probably that will all come out in the wash when MAAS gets more sophisticated09:20
fwereaderogpeppe, I think that's a dangerous road to go down... that was what we had, and we dropped it because we don't want the conflict mechanism to come into play unless specifying one side *always* implicitly specifies the other09:21
rogpeppefwereade: oh, interesting. i thought current behaviour was entirely provider-specific09:22
fwereaderogpeppe, I guess it is but only as a side-effect of different providers exposing different constraint sets09:22
rogpeppefwereade: yeah09:23
fwereaderogpeppe, it's an accidental property, not an essential one09:23
rogpeppefwereade: ok.09:23
rogpeppefwereade: 'cos we're proposing to go with a single type for constraints across all architectures09:23
rogpeppes/architectures/providers/09:23
fwereaderogpeppe, indeed09:23
fwereaderogpeppe, and while this makes me a little uncomfortable I don't have any solid arguments against doing so :)09:24
rogpeppefwereade: which means that the conflicts logic needs to happen in a provider-independent way09:24
fwereaderogpeppe, yeah; and I suppose it comes down to what precisely an instance-type does specify09:24
rogpeppefwereade: yup09:25
fwereaderogpeppe, AFAICT it's just cpu/mem/local-storage09:25
rogpeppefwereade: and currently we're taking that cue from ec209:25
fwereaderogpeppe, and we don't handle local-storage at the moment anyway09:25
rogpeppefwereade: but it might be different on other providers09:25
fwereaderogpeppe, having poked around a little, I think some providers may have tighter requirements (on foo-cloud, perhaps, instance-type will always specify arch)09:26
rogpeppefwereade: so do we treat instance-type as conflicting with arch on those providers?09:26
rogpeppefwereade: does instance-type overwrite arch on those providers?09:26
fwereaderogpeppe, personally I think it shouldn't, because that feels like a coincidence they could drop at any time09:27
rogpeppefwereade: i'm sure it's too late now, but i *think* things would be much more straightforward if all constraints were totally independent, and constraints unknown to a provider were ignored.09:27
fwereaderogpeppe, like amazon actually did -- originally the only arch variation was with t1.micro, which we were happy to special-case because nobody's going to be deploying important services to those anyway09:27
fwereaderogpeppe, I think the instance-type concept becomes meaningless once it's divorced from cpu/mem09:29
rogpeppefwereade: it just seems a bit weird we're proposing a general rule ("instance-type implies cpu/mem but not arch") based only on the way that amazon has specified instance types09:29
fwereaderogpeppe, it's intended to be the minimum attribute set implies by instance-type09:30
rogpeppefwereade: across all providers? surely some providers might not use instance-type to imply either cpu or mem?09:31
fwereaderogpeppe, that's the question... what then does instance-type actually mean?09:31
rogpeppefwereade: indeed09:31
rogpeppefwereade: in the aws case, it's a provider tag.09:32
rogpeppefwereade: ah, no it's not.09:32
rogpeppefwereade: because if we say cg1.4xlarge, we might not get the GPU h/w09:33
fwereaderogpeppe, sorry, not following you there09:33
rogpeppefwereade: if it was a tag, then any machine we get would be guaranteed to get that tag.09:33
fwereaderogpeppe, if we ask for cg1.4xlarge, we will surely get GPUs09:34
rogpeppefwereade: but as far as i can see, all the constaints specified by cg1.4xlarge are also satisfied by cc2.8xlarge09:34
fwereaderogpeppe, if we ask for cpu/mem such that cg1.4xlarge is the cheapest way of satisfying them, we will also get the GPUs, but nobody cares09:34
rogpeppefwereade: but i'm presuming from the comment that that instance type doesn't have the fancy GPU h/w09:35
rogpeppefwereade: if we ask for cg1.4xlarge, are we guaranteed to not get cg1.8xlarge ?09:35
fwereaderogpeppe, er, yes, I think so09:35
fwereaderogpeppe, barring crackfulness on amazon's side09:35
rogpeppefwereade:  ah, so an instance-type isn't just an alias for the mem, cpu etc attributes of that instance-type09:36
rogpeppefwereade: it is really a tag.09:36
fwereaderogpeppe, still not following... isn't it an alias for a certain amount of GPU as well?09:37
fwereaderogpeppe, it's just that we don't happen to expose gpu09:37
rogpeppefwereade: it implies that, yeah.09:37
fwereaderogpeppe, back to instance-type, briefly... across all providers I'm aware of, instance-type implies cpu/mem09:39
fwereaderogpeppe, in many cases it implies more09:39
fwereaderogpeppe, but the common properties are cpu/mem, and I'm having trouble imagining an instance-type that doesn't09:39
fwereaderogpeppe, can you flesh out your earlier what-if with a plausible scenario?09:40
rogpeppefwereade: i guess i'm uncomfortable with that as a minimum. for instance, on some providers, instance-type may imply arch, but arch won't be cleared out when we specify instance-type09:42
rogpeppefwereade: and in that case, we'll fall back to the situation i'm suggesting we do for everything - it just won't satisfy anything09:42
rogpeppefwereade: hold on, there's parcel at the door09:43
fwereaderogpeppe, it's a first layer of defence against knowably nonsensical requests... we don't have any guarantees that anything will actually be provisionable ever09:45
fwereaderogpeppe, and it gives us sl. more helpful behaviour when dealing with the interplay between env and service constraints09:46
fwereaderogpeppe, I think the second point is the one you need to address if you want to drop the conecpt09:47
rogpeppefwereade: it's more than a layer of defense, i think - the "setting an instance-type constraint will clear out any inherited cpu or mem values" thing is awkward09:47
rogpeppefwereade: yeah, that is the second point, i think09:48
fwereaderogpeppe, indeed... it may be awkward for us but I think it's useful for actual users in realistic scenarios09:48
rogpeppefwereade: hmm, not entirely convinced. in that scenario earlier, it would be easy for the deployer to do "instance-type= mem=8g"09:50
rogpeppefwereade: i.e. to explicitly clear out the instance-type constraint rather than remembering that mem will override instance-type. (and arch won't...)09:51
fwereaderogpeppe, it forces them to think more to get the same result09:51
rogpeppefwereade: really? i think it gives more "stuff" to remember.09:51
rogpeppefwereade: i.e. there's interplay between the attributes as well as the inheritance of attributes.09:52
fwereaderogpeppe, the intent is that users shouldn't actually have to worry about it... if they want a machine with 8G, we give them one, without forcing them to take additional context into account09:53
rogpeppefwereade: but that's the context that they themselves have specified...09:53
fwereaderogpeppe, that they or someone else specified at some point arbitrarily long ago...09:53
rogpeppefwereade: also, when they get told that no machines will be deployed, that's a pretty big hint they've got something wrong...09:54
rogpeppefwereade: anyway, i've missed the boat here. i think we have to implement the current python semantics09:55
fwereaderogpeppe, the point is to reduce the incidence of hat sort of situation09:55
rogpeppefwereade: i'm not sure that adding more magic helps here09:55
fwereaderogpeppe, and, yes, I think so; but tbh if we're planning to change ec2-zone to availability-zone, et cetera, I feel like we've reopened the whole thing really :/09:56
rogpeppefwereade: the user will encounter this situation with other conflicting attributes, so they've got to know how to deal with this kind of situation anyway09:56
fwereaderogpeppe, they may do, but reducing the incidence of "oh ffs, wasn't it obvious what I meant?"s feels worthy to me09:57
fwereaderogpeppe, it's not as if it's an unpredictable scenario09:58
* rogpeppe finds value in a simple conceptual model, even if it makes some things a little harder.09:58
fwereaderogpeppe, so, we should just drop instance-type entirely? :p10:00
rogpeppefwereade: no.10:00
rogpeppefwereade: just treat it as independent10:00
rogpeppefwereade: if someone wants to specify instance-type=t1.micro mem=8G, let them do so10:00
rogpeppefwereade: they won't get many machines working for them10:01
rogpeppefwereade: and i think, on further reflection, i'd have providers treat any constraints unknown to them as unsatisfiable.10:01
fwereaderogpeppe, unknown-constraints=unsatisfiable definitely works for me10:03
fwereaderogpeppe, the issue is really that it's not always obvious that you're specifying instance-type=t1.micro at the same time as mem=8G10:04
fwereaderogpeppe, sure, some users will have to dig in and figure out the details at some point10:04
fwereaderogpeppe, delaying the point at which they do feels to me like a good thing :)10:04
rogpeppefwereade: we could make it very easy for clients to find out the total set of constraints applying to a service. a tool to debug this stuff would seem very useful to me.10:05
fwereaderogpeppe, well, yeah, get-constraints exists10:05
fwereaderogpeppe, forcing users to check and calculate things in order to deploy machines feels counterproductive to me10:06
fwereaderogpeppe, especially since the effects are not immediately visible in the first place10:06
rogpeppefwereade: ah, now there's an interesting point10:07
fwereaderogpeppe, the inheritance is the really annoying bit here10:07
rogpeppefwereade: you don't get any immediate feedback if no machines might satisfy the constraint10:07
rogpeppefwereade: yeah10:07
fwereaderogpeppe, yeah: changing env constraints could break an existing service (which you might only need to add a unit to in a week)10:08
fwereaderogpeppe, we can't entirely eliminate it but we should really try to guard against it10:08
fwereadewhere we can10:08
rogpeppefwereade: or someone might be doing it deliberately - it's always possible10:09
rogpeppefwereade: here's a possibility: when you specify a set of constraints that can't be satisfied, you get an immediate warning.10:09
fwereaderogpeppe, if I want to make a specific service undeployable I think I'll be eplicitly setting screwed-up settings on that service, not figuring out the right env change to break that and only that10:09
rogpeppefwereade: and when setting environment constraints, you'll get a warning for all services that have been broken.10:10
rogpeppefwereade: that seems potentially more useful (and less provider-specific) than saying that instance-type overrides cpu and mem10:10
fwereaderogpeppe, I can get behind that, but IMO it's orthogonal to the is-this-little-bit-of-magic-actually-useful-in-realistic-scenarios10:11
fwereaderogpeppe, I would really prefer to avoid forcing users to think when we don;t have to10:11
fwereaderogpeppe, please give me a plausible scenario in which we have an instance-type that doesn't specify cpu/mem10:12
rogpeppefwereade: hmm. we're not talking MS-Word users here. these, hopefully are people that *can* think!10:12
Arambtw, I did did yesterday: code.google.com/p/rbits/godefs . It's a go style command that prints only type definitions from go programs. it's very useful with acme rogpeppe.10:12
rogpeppefwereade: it's not that instance-type won't always specify cpu and mem, but that it often implies more10:12
AramI plan to sort the output to be more useful.10:13
Arambut it's massively useful even in this stage10:13
Aramto me10:13
rogpeppeAram: i can better that (but only by sending you a binary - my code won't build any more)10:14
Aramplease.10:14
fwereaderogpeppe, my contention is, I guess, that cpu/mem/instance-type constraints are the most obvious and commonly-used ones, and kinder behaviour with those is valuable even if it doesn't include a full DWIM engine for every possible constraint10:17
rogpeppefwereade: and i think that having the special rule in this case will mean that people will be more confused when they move beyond the bounds of this special case10:20
rogpeppeAram: i've sent you a tarball.10:20
rogpeppeAram: assuming you're running ubuntu under amd64, it should work10:20
Aramthanks10:20
rogpeppeAram: the way it works is like this10:20
rogpeppeAram: you click on an identifier, and middle-click on "def" in the window tag.10:21
rogpeppeAram: it prints the file address of the definition of that identifier10:21
rogpeppeAram: (and also the file address where you are currently, so you can jump back in context)10:21
rogpeppeAram: it works for almost any identifier10:22
rogpeppeAram: (it doesn't work if you've imported to ".")10:22
rogpeppeAram: you can do "def -a" to find out the actual type and all members of the value.10:22
rogpeppeAram: i really need to port it to Go 1.10:22
Aramhi niemeyer10:25
rogpeppeniemeyer: yo!10:25
fwereadeniemeyer, heyhey10:25
rogpeppeniemeyer: how's london?10:25
rogpeppeniemeyer: looks hot to me10:26
Aramrogpeppe: your def thing works great.10:29
rogpeppeAram: cool10:30
rogpeppeAram: i think you're probably user number 1.10:30
Aramheh.10:30
rogpeppeAram: i wrote it years ago10:30
rogpeppeAram: unfortunately i forked the go parser to do it, and my changes were not acceptable.10:31
rogpeppeAram: and i've been waiting for something equivalent to appear since then.10:31
Aramcan go/parser do the job now?10:32
rogpeppeAram: nope.10:32
Aramwhat does it lack?10:32
niemeyerHeya10:33
rogpeppeAram: a place to put type definitions. my version of go/parser resolves all symbols at read time.10:33
Aramhmm...10:33
niemeyerrogpeppe: Great, sprint running smoothly10:33
rogpeppeniemeyer: cool. what's the sprint BTW?10:34
niemeyerand it's warm, yeah10:34
rogpeppeAram: i just need to bite the bullet and have an independent symbol table. but i haven't had the incentive since the  binary continues to work (the joy of static linking!)10:35
Aramindeed.10:35
Aramrogpeppe: I wonder if I can't do some plumbing tricks so middle clicking on def is not required?10:36
rogpeppeAram: i don't think you want a right-click to take you to the definition of that identifier. usually you want the next *use* of that identifier10:36
rogpeppeAram: otherwise i'd've done it.10:37
Aramyes, indeed.10:37
rogpeppeniemeyer: now that go-ec2-use-go-client is in, i thought i'd look towards constraints. i was just having a useful conversation with fwereade about same.10:40
Aramniemeyer: what's the stance on zookeeper? do we want to replace it if we can?11:01
niemeyerrogpeppe: I'd prefer if we focused on getting the basic image actually running first11:14
rogpeppeniemeyer: what do you mean?11:15
rogpeppeniemeyer: you mean get the agents going?11:15
niemeyerrogpeppe: Constraints give us some freedom about which images and so on to pick11:15
niemeyerrogpeppe: But none of us can get a running deployment yet, on any machine11:16
niemeyerrogpeppe: That sounds more important to get sorted first11:16
rogpeppeniemeyer: AFAICS we need the agents to do that11:16
niemeyerrogpeppe: Hmm, yes? :-)11:16
rogpeppeniemeyer: perhaps i should look at doing an agent then11:16
rogpeppeniemeyer: machine agent seems like it's next in line11:17
rogpeppeniemeyer: i'd be happy to start on that11:17
niemeyerrogpeppe: Indeed11:17
rogpeppeniemeyer: great, will do11:17
niemeyerrogpeppe: That'd be brilliant, thank you11:17
niemeyerrogpeppe: fwereade was going to do it, but he ended up focusing on the agent tools and whatnot, which are nice things to spin off too11:18
rogpeppeniemeyer: that's true. and there's quite a lot more in that area11:18
niemeyerAram: There's a tentative plan to get an implementation of the gozk API on top of MongoDB11:19
rogpeppeniemeyer: we need to think about where there might be an Aram-sized hole somewhere too :-)11:19
niemeyerAram: I got started on that front, but ended up not moving on much since the flight from UDS :)11:20
niemeyerrogpeppe: Agreed11:20
AramI don't know anything about mongodb, does it offer the same features and constraints as zookeeper/doozer?11:21
niemeyerAram: It's a pretty different beast, for better and for worse11:21
AramI read somewhere that mongo uses "eventual consistency" while the algorithms used by zookeeper/doozer are consistent at all times.11:21
Aramindeed.11:21
niemeyerAram: Hmm.. that's not *entirely* the case11:22
niemeyerAram: It has a master11:22
niemeyerAram: and replication11:22
niemeyerAram: It has leader election within a replica set with consensus-style logic11:23
niemeyerAram: So it's not entirely unlike it11:23
niemeyerAram: Either way, as a first step, I suggest reading through the code base and trying to understand the relationship between things11:24
niemeyerAram: and covering the usual startup tasks11:24
Aramyes.11:25
niemeyerAram: Then, let's see.. I'd prefer if you helped pushing us forward towards feature parity11:25
niemeyerAram: But we need to identify a nicely-sized problem chunk for that11:25
niemeyerAram: If we can't find an isolated-enough problem, then maybe pushing that gozk alternative might be a good option given your previous experience11:26
niemeyerAram: Perhaps, as a way to get started, you might start looking at a few of the missing command line entry points11:27
niemeyerAram: We have pretty minimum support for that, and might be a nice way to push some small branches while you get used to the workflow and whatnot11:27
niemeyerAnyway.. I'll get some food or will miss lunch11:28
niemeyerbiab11:28
Arambtw niemeyer, is this expected: http://pastebin.com/hgWd0qpg11:28
Arampeople on #go-nuts complained about it as well11:28
fwereadeniemeyer, I saw that as well, probably should have mentioned it :/11:34
fwereadeAram, please keep in touch with me re command line tools; I'm working on stuff that's needed for `juju deploy` at the moment (while relation state doesn't exist yet)11:36
Aramok.11:36
fwereadeAram, there are certainly commands that are orthogonal though11:36
fwereadeAram, I can't think of any blockers for add-unit and remove-unit11:37
fwereadelunch, bbiab11:38
niemeyerAram: Yeah, it's a small bug in wait.js11:49
niemeyerAram: It should say "got tired of waiting" or something11:49
Aramah, so it's nothing on my side that causes the test to fail, ok.11:50
rogpeppefwereade, niemeyer: this looks wrong to me. it looks like it's parsing the internal machine id to get the value returned from Machine.Id. am i on crack? http://bazaar.launchpad.net/+branch/juju/go/view/head:/state/machine.go#L6411:50
niemeyerrogpeppe: Why is it wrong?11:51
rogpeppeniemeyer: because it's parsing the internal id (the zk path) which i don't *think* has a one-to-one correspondence with the external id11:52
rogpeppeniemeyer: but maybe i'm wrong and it does11:52
rogpeppeniemeyer: certainly the python code seems to keep them separate11:52
niemeyerrogpeppe: state/machine.py, line 27611:53
rogpeppeniemeyer: ah, fair enough11:53
rogpeppeniemeyer: i was sure we had a discussion recently which decided they were different11:53
niemeyerrogpeppe: They are different..11:53
rogpeppeniemeyer: something to do with failing half way through allocating a new machine id11:53
niemeyerrogpeppe: As the comment says, it's an implementation detail that today we map one to the other11:54
niemeyerWe should copy the rest of the comment saying that this is an implementation detail11:55
rogpeppeniemeyer: what's responsible for actually creating the machine directory?11:55
rogpeppei would assume the provisioning agent, but perhaps not11:56
* rogpeppe goes back to the source11:56
niemeyerrogpeppe: state/machine.py, line 1811:57
niemeyerrogpeppe: No code outside of state should be manipulating ZooKeeper nodes directly11:58
rogpeppeniemeyer: agreed.11:58
rogpeppeniemeyer: i'm slightly surprised that clients are doing non-atomic actions though.11:58
rogpeppeniemeyer: i guess that means that machine ids may not be allocated in strict sequence.11:59
niemeyerrogpeppe: Yep.. there is/was no multinode atomic operation in zk12:00
niemeyerrogpeppe: It's no big deal, though..12:00
rogpeppeniemeyer: that's true12:00
niemeyerCrap, we're moving rooms..12:01
niemeyerWithout a battery, that means a restart :-(12:01
niemeyerbiab12:01
rogpeppek12:01
rogpeppeoff for some lunch12:09
Aramgodep launchpad.net/... | grep '^launchpad' | awk '{ printf("%s\n\n", $0)}' | awk 'BEGIN { RS=" " } { printf("%s\n", $0) }' | egrep '(^launch)|(^os/exec)|^C|(^net)|(^io/ioutil)|(^$)'12:51
Aramoops12:51
Aramwrong window :).12:51
Aramwrong paste, rather.12:51
niemeyerNo passwords at least! ;-)12:57
Aramniemeyer: I don't understand what path is used for in Coerce.13:46
niemeyerAram: Presenting debugging details in case of errors13:53
niemeyerAram: "a.b.c is wrong"13:53
Aramwhy is path always initialized like this in tests? path := []string{"<pa", "th>"}13:54
niemeyerAram: No good reason..14:15
Aramok, I though it had some meaning and could find any :).14:17
Aramgreat.14:17
Aramrogpeppe: I am already in love with your acme def tool, I used codesearch for similar behavior, but that was noisy, yours is 100% accurate, no visual grepping needed.14:21
rogpeppeAram: cool. yeah, i love it too.14:22
rogpeppeAram: it was even better when i hacked godoc so that the identifiers in the html source code were links14:23
rogpeppeAram: but that went by-the-by sadly14:23
Aramyeah, I imagine.14:23
rogpeppeAram: i find it really useful for working my way around strange code bases.14:23
rogpeppeniemeyer, fwereade: in machine/unit.py, UnitMachineDeployment seems identical to SubordinateContainerDeployment. is there a reason for the separation? is there something that is likely to come later, for example?14:25
* fwereade looks14:26
niemeyerrogpeppe: I haven't seen that code at all, FWIW14:26
niemeyerrogpeppe: Haven't reviewed that code14:26
rogpeppethe init methods are byte-for-byte identical14:26
niemeyerrogpeppe: I hope we can take the hindsight to clean and simplify things up in the agents, as a general comment14:27
rogpeppeniemeyer: i certainly intend to do what i can towards that14:27
rogpeppeniemeyer: first blocker i can see is there's no unit watcher14:27
fwereaderogpeppe, yeah, I don't see the point of Subordinate...14:28
rogpeppefwereade: thanks14:28
fwereaderogpeppe, and it's new to me14:28
Aramwhy is CurrentArch in environs runtime.GOARCH (dependant on where the user runs juju) but CurrentSeries is hardcoded to precise (independent of where the user runs juju), why aren't both hardcoded since they are related only to the cloud environment and not to the local environment?14:32
AramIs it because the default is used in things like testing in a lxc container? Why not set up correct arch in that particular test?14:32
rogpeppeAram: CurrentSeries is TODO14:32
rogpeppeAram: it's only just gone in14:32
rogpeppeAram: and i haven't done that bit yet14:33
rogpeppein fact, i should probably clean that up before starting on the machine agent14:33
AramI see.14:33
rogpeppeAram: CurrentArch needs looking at too, as runtime.GOARCH may not map well to linux arch14:33
Aramwell yes, I didn't question CurrentSeries, but CurrentArch seemed peculiar to me :).14:35
rogpeppefwereade: i was just looking at your upstart package again15:07
rogpeppefwereade: the %q seems dubious (is upstart quoting exactly the same as Go's?) but i couldn't find a definitive reference...15:08
rogpeppefwereade: (i'm referring to the %q as used to quote env vars in the upstart script BTW)15:11
niemeyerrogpeppe: Isn't the string well known?15:25
rogpeppeniemeyer: Conf.Env looks like it might contain arbitrary text to me.15:26
rogpeppeniemeyer: but i've probably misinterpreted15:26
smaddockniemeyer: ping15:27
niemeyerrogpeppe: No, I think you got it mostly right.. the package is the thing that is a bit questionable I guess15:27
niemeyerrogpeppe: We're really using it mostly for our own configuration15:27
niemeyerrogpeppe: But it might change in the future15:27
niemeyersmaddock: Heya15:27
rogpeppeniemeyer: that's true. but *if* we're going to do this package, i think it should be correct for any input.15:27
* rogpeppe hates it when people define a config format but don't properly define the quoting rules.15:28
fwereaderogpeppe, hmm, that sounds like a nice catch15:28
niemeyerrogpeppe: Yeah, or add a BUG note15:29
rogpeppefwereade: am currently looking at libnih trying to work out what the actual quoting rules are...15:29
fwereaderogpeppe, heh :(15:29
rogpeppeniemeyer: that too.15:29
niemeyerGiven what's there should for the foreseeable future15:29
fwereadeniemeyer, rogpeppe: I'll add a bug note15:30
rogpeppei thought originally that it was shell script, where using %q would be more problematic15:30
rogpeppealways fun when someone rings up and tells you you've got a virus and they can fix it17:11
rogpeppei couldn't quite work out what the scam was though. what nasty thing could they do by looking at the eventvwr app?17:12
rogpeppedarn, gotta go, i'm late!17:13
fwereadelater all :)17:27
davecheneyAram: did you get the tests to pass ?21:21
Aramdavecheney: it's upstream, not in my environment. niemeyer confirmed.21:34
davecheneyreitveld is having a seniors moment22:37

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