[00:47] <hazmat> davecheney, the pa needs a lock around a the ma
[00:47] <hazmat> er. around the machine state its processing
[00:47] <hazmat> to allow for concurrent pa
[00:49] <davecheney> hazmat: yes
[00:49] <davecheney> hazmat: even simpler the PA stores the provider instance id into the state once it is known
[00:49]  * hazmat tries to catch up the on the conversation
[00:49] <davecheney> which can be used as a sentinal to say 'hey, at least I started this vm, it might be dead now, but I tried'
[00:50] <hazmat> davecheney, sure.. that's what it does currently
[00:50] <davecheney> that would be problematic with multiple PA's all racing to provision machines
[00:50] <davecheney> TBH, i haven't thought about how to solve that yet
[00:51] <hazmat> its just a per machine lock op lock, or a even a queue..
[00:51] <davecheney> hazmat: would that be implemented in ZK ?
[00:51] <hazmat> davecheney, sure
[00:52] <davecheney> finger in the air, maybe that could be done with a new content node /machines/machine-X/state
[00:52] <hazmat> there's recipes for building all of these structures for zk on the zk wiki.. the py zk lib (txzk) has several implemented..
[00:52] <davecheney> i;ll go check that out
[00:52] <hazmat>  /machines/machine-x/lock i would think
[00:52] <davecheney> but i'll have to moderate that with gustavo's desire to not be too closely tied to SK
[00:52] <hazmat> or even /machines/provisioning-queue/
[00:52] <davecheney> ZK
[00:53] <davecheney> hazmat: sounds like maildir
[00:53]  * hazmat giggles
[00:53] <hazmat> well he wants to maintain the current client api
[00:53] <hazmat> so assuming the guarantees are the same, the principles should carry over..
[00:54] <hazmat> mongo is consistent and has atomic ops..
[00:54] <davecheney> it's on my pondering queue, but right now we have 0 PA's, so i'm not really focusing on having N PA's yet
[00:54] <hazmat> doing locks, and queues with it is straight forward
[00:54] <hazmat> sure..
[00:54] <davecheney> hazmat: that might be simpler
[00:54] <hazmat> the goal seems to be to get to the parity..
[00:54] <davecheney> in mongo, when the client disconnects, do the locks go away ?
[00:54] <hazmat> and then flip the bits ;-)
[00:54] <davecheney> my concernt with lock files and shit is recovering from a stale lock
[00:54] <hazmat> davecheney, you record the client and a timestamp on the lock..
[00:54] <hazmat> davecheney, have a look at  the store code..
[00:55] <hazmat> it has some locking
[00:55] <davecheney> i'll do so
[00:55] <davecheney> hazmat: in python, what was the result of the tcp connection to zookeeper going away ?
[00:56] <davecheney> did the agent exit, or did you try to recover ?
[00:58] <hazmat> davecheney, it recovers
[00:58] <hazmat> davecheney, there's a connection wrapper that  basically creates an immortal connection
[00:58] <davecheney> where is that handled ? in the zk library, by trying other replicas ?
[00:58] <davecheney> ahh right
[00:58] <hazmat> davecheney, it handles transient disconnects and session expirations
[00:59] <hazmat> for transient disconnect the reconnection is handled by the libzk
[00:59] <hazmat> for session expirations its handled by the wrapper
[01:00] <hazmat> also triggers watches on session reconnect, its a fairly straightforward impl.. http://bazaar.launchpad.net/~juju/txzookeeper/trunk/view/head:/txzookeeper/managed.py
[01:06] <hazmat> re mongo.. here's a simple queue impl i wrote with  locking.. effectively each client has to be cooperative about breaking stale locks.. their easy to detect.. and the breaking is just part of the queue impl.
[01:06] <hazmat> rog's upgrade solution is odd..
[01:07] <hazmat> i guess that makes sense.. ma responsible for code upgrade, others sync on that
[01:14] <davecheney> hazmat: what if the tools were a .deb, upgrades would be as simple as something running an apt-get upgrade on every machine
[01:18] <hazmat> davecheney, debs are frought with problems in this context
[01:19] <hazmat> davecheney, across multiple versions of the distro... needs an apt repo maintenance..
[01:19] <davecheney> hazmat: sure, i guess that was a nieve solution
[01:19] <hazmat> the actual download isn't a huge problem
[01:19] <hazmat> its just trying to ensure the coordination around it
[01:19] <davecheney> i'm just wondering if we're reinventing dpkg hooks
[01:20] <hazmat> davecheney, how does apt handle multiple versions avail..
[01:20] <hazmat> it picks the latest..
[01:20] <davecheney> indeed
[01:20] <hazmat> by default anyways..
[01:20] <hazmat> dpkg hooks aren't really about cross machine coordination
[01:21] <hazmat> the whole thing becomes much more interesting, and indeed.. simpler when you consider it from a db upgrade perspective
[01:21] <davecheney> no, really just for poking upstart
[01:21] <davecheney> 'Everyone! Switch to version X!
[01:21] <hazmat> where you need to everything having the new code ready.. you do a centralized db upgrade.. and then restart everything..
[01:21] <davecheney> i like the use of the state for signalling things like that
[01:27] <hazmat> indeed.. that's why we have zk..
[06:43] <wrtp> davecheney: morning!
[06:43] <wrtp> TheMue: yo!
[06:43] <TheMue> davecheney, wrtp, fwereade: Morning.
[06:43] <wrtp> fwereade: hey!
[06:48] <davecheney> wrtp: TheMue fwereade Aloha!
[06:48] <davecheney> wrtp: TheMue I have questions about the state
[06:48] <davecheney> who is sober enough to answer them ?
[06:49] <wrtp> davecheney: woke up with a head full of crack after last night's recursive agent discussions...
[06:49] <TheMue> davecheney: Let's try it.
[06:49] <wrtp> davecheney: i'm sober enough but i might not know the answers
[06:50] <davecheney> so, in the latest propose for the PA, gustavo had this concern
[06:50] <davecheney> https://codereview.appspot.com/6250068/diff/5004/cmd/jujud/provisioning.go#newcode37
[06:50] <davecheney> TheMue: wrtp after trying all day, I can't actually make the state break, that is, ever return an error
[06:50] <davecheney> nor can I observe any of the watchers close on me through rough handling of the zookeeper server
[06:51] <wrtp> davecheney: that's true currently, but might not be in the future, when we're not talking directly to zk (or zk is actually mgo under the covers)
[06:52] <davecheney> wrtp: yup, after talking to hazmat he said that in python they also have a wrapper than makes the state immortal and can cope with transient disconnections from the server
[06:52] <wrtp> davecheney: that's controversial...
[06:53] <davecheney> wrtp: TheMue my intention was to add a state.IsValid() method somewhere so that the PA could drop out of the loop, make another state connection and try again
[06:53] <davecheney> but without the ability to ever make the damn thing crap itself, it's hard
[06:53] <wrtp> davecheney: what would IsValid test?
[06:53] <wrtp> davecheney: isn't that what the channel returned from zk.Dial is supposed to do?
[06:53] <davecheney> wrtp: my idea was it would be set to false it an error (of the sort that GetW or ExistW give)
[06:53] <TheMue> wrtp: Yes, good question.
[06:54] <davecheney> but as I can't get it to generate an error ...
[06:54] <davecheney> wrtp: IsValid is supposed to detect the 'broken' Gustavo spoke of in that comment
[06:55] <TheMue> davecheney: That's depending on todays gozk. But as Roger said this will change (or at least wrapped as a first step).
[06:56] <TheMue> davecheney: In case of a broken connection the state is not invalid. It's "only" a connection error. Indeed the watcher may be notified if we don't have a mechanism to automatically reestablish it.
[06:56] <davecheney> TheMue: yup, i'm always planning that ZK has a limited shelf life
[06:56] <TheMue> davecheney: But reading and writing of the state is always life.
[06:57] <wrtp> davecheney: i think fwereade did some experiments around breaking zk connections, but i may remember wrong
[06:57] <davecheney> TheMue: so here is the logic, something is receiving from the watcher channel, and it detects channel closed, so we call Stop on the watcher to clean up
[06:57] <davecheney> then before going back into the loop, i need someting like state.IsValid or !isClosed() to say 'don't try this again, it won't do any better this time'
[06:58] <TheMue> davecheney: isDisconnected() or something like that, but please not IsValid().
[06:58] <TheMue> davecheney: Because the state in ZK is still valid.
[06:59] <wrtp> davecheney: you should get an error from the watcher's Stop method, i think
[07:00] <davecheney> wrtp: yes, that is another way to do it, but is fraught with difficulties as the error might be wrapped
[07:00] <davecheney> wrtp: but if you're saying on _any_ error from stop we should consider the state disconnected and tear everything down
[07:01] <wrtp> davecheney: we should make sure that we make *sure* that a fatal error from zk is passed through in a recognisable way to the Stop return value
[07:01] <davecheney> wrtp: can you elaborate on what you mean by recognisable way
[07:02] <wrtp> davecheney: i mean that it should have a known type or a known value
[07:03] <wrtp> (probably the former, so we can encapslate the actual zk error)
[07:03] <davecheney> wrtp: that is what I was thinking too, rather than error, state.Error
[07:03] <wrtp> davecheney: well, *state.Error returned as an error.
[07:03] <wrtp> gotta go to breakfast
[07:04] <davecheney> wrtp: of course
[07:08] <davecheney> btw, did aram write Doozer ?
[07:14] <fwereade> hey all
[07:15] <davecheney> has anyone been able to sign up to the HP cloud ?
[07:15] <davecheney> I tried twice today, with my canonical and personal email addresses, but I haven't got a confirmation email back yet :(
[07:17] <wrtp> davecheney: i haven't tried
[07:18] <davecheney> wrtp: i emailed jorge to see if he could reach out to a tech contact there
[07:21] <wrtp> davecheney: gustavo says "sign up, give them your credit card details, then send me the account id and the tennant id"
[07:21] <davecheney> wrtp: i'm blocked at the 'sign up' stage
[07:21] <wrtp> davecheney: (but obviously that might be hard if they won't let you sign up!)
[07:21] <davecheney> it never sends me the confirmation email
[07:22] <davecheney> jynx!
[07:23] <davecheney> OT: at mailguard, our bot would mute someone if you call jynx
[07:23] <davecheney> it used a levenstein computation to see who to mute
[07:25] <wrtp> davecheney: cool
[07:26] <davecheney> further proof that with enough time and perl you can achieve even the most useless of things
[07:26] <wrtp> davecheney: i wonder if there's a go package for computing levenstein distance
[07:28] <davecheney> wrtp: wouldn't be hard, i don't think its very complicated to do in code
[07:29] <wrtp> davecheney: agreed. it's nice to be able to take stuff off the shelf though
[07:32] <davecheney> ask uriel
[07:37] <wrtp> davecheney: gotta go. have fun.
[07:37] <davecheney> wrtp: cya
[08:12] <niemeyer> Hellos!
[08:29] <rog> Aram, niemeyer: it'd be nice to be able to talk, eh?
[08:29] <Aram> heh, yeah
[08:29] <niemeyer> rog: Yeah.. well.. I'm just responding to Dave's email, and then we can move elsewhere to chat as well
[08:42] <niemeyer> fwereade: ping
[08:42] <fwereade> niemeyer, pong
[08:42] <niemeyer> fwereade: Heya, good morning
[08:43] <fwereade> niemeyer, and yourself :)
[08:43] <niemeyer> fwereade: Do you have the RT# for the juju-dev ML?
[08:43] <fwereade> niemeyer, it was set up this morning
[08:43] <niemeyer> fwereade: Oh
[08:43] <fwereade> niemeyer, I appear to be an administrator, which I guess I should have expected :/
[08:43] <niemeyer> fwereade: Yeah :-)
[08:43] <fwereade> niemeyer, something wrong?
[08:44] <niemeyer> fwereade: No, I want to use it :)
[08:44] <niemeyer> fwereade: Have you subscribed people to it?
[08:44] <fwereade> niemeyer, not yet
[08:44] <niemeyer> fwereade: Ok, would you mind to do that so we can start using it?
[08:44] <fwereade> niemeyer, on it
[08:44] <niemeyer> fwereade: Subscribing the obvious candidates, and then mailing juju@ should do it
[08:45] <niemeyer> fwereade: Thanks a lot
[08:45] <niemeyer> I'll hold off sending the email to Dave to send it to the list instead
[08:50] <fwereade> niemeyer, added
[08:50]  * fwereade worries that he's forgotten someone who will be mortally offended
[08:52] <niemeyer> fwereade: juju-dev@lists.ubuntu.com?
[08:52] <fwereade> niemeyer, yeah
[08:52] <niemeyer> fwereade: Send an email to juju@ inviting people.. no body will be offended
[08:52] <niemeyer> nobody
[08:53] <niemeyer> fwereade: Is Aram in?
[08:53] <fwereade> niemeyer, yeah
[08:53] <niemeyer> fwereade: Superb
[08:53] <niemeyer> fwereade: Thanks a lot for taking care of this
[08:53] <niemeyer> Sending first email
[08:53] <fwereade> niemeyer, a pleasure :)
[08:54] <niemeyer> Done
[08:54] <niemeyer> Let's see if email still works these days ;-)
[09:08]  * TheMue has the mail in his folder for this list, nice.
[09:48] <niemeyer> TheMue: ping
[09:49] <TheMue> niemeyer: pong
[09:49] <niemeyer> TheMue: I spent some time yesterday with rog and aram
[09:49] <niemeyer> TheMue: around the concept of relations and how they were inverted
[09:50] <TheMue> niemeyer: I'm listening.
[09:50] <niemeyer> TheMue: We got to the conclusion that the original design was actually more future proof that what we have in place in the CL now
[09:50] <niemeyer> TheMue: It's very hard to imagine that we'll have a single service participating in a single relation with two roles
[09:52] <niemeyer> TheMue: But it's not so much of a stretch to imagine that two services may participate in a relation with the same role
[09:52] <TheMue> niemeyer: IC
[09:52] <niemeyer> TheMue: E.g. a master with two slaves, two peers, etc
[09:52] <niemeyer> TheMue: The new design makes that unfeasible
[09:53] <TheMue> niemeyer: Hmm, a change from map[role]serviceKey to map[role][]sericeKey wouldn't help (as a quick thought)?
[09:54] <TheMue> niemeyer: With all depending changes naturally.
[09:54] <niemeyer> TheMue: Sounds worse than just doing what we had
[09:54] <niemeyer> TheMue: map[service key]stuff
[09:55] <TheMue> niemeyer: OK
[09:55] <niemeyer> TheMue: That said, hold on a moment
[09:55] <niemeyer> TheMue: I'll re-review the latest state of that branch.. I'm hoping we can integrate the current version, and then refactor it over
[09:56] <TheMue> niemeyer: The idea of William and me has been to move away from seperate AddRelation() and AddEndpoint(). So that the risk of having a relation w/o EP or only a provider or requirerer is lower.
[09:58] <TheMue> niemeyer: Maybe following the current model but with a new API could do this too.
[10:08] <niemeyer> TheMue: I don't see how that's related to the point above
[10:09] <TheMue> niemeyer: It's only the motivation how the change started. The model change has then rised out of a discussion (as it seems sadly with a wrong direction).
[10:10] <TheMue> niemeyer: So maybe the model could now better stay as it is in Py, but the API changes to reduce the risk of adding illigal relation sinks.
[10:17] <niemeyer> TheMue: Agreed, not suggesting further changes.. just the topology has to be adapted to invert the map
[10:20] <TheMue> niemeyer: OK, start a new branch based on the zk to topo renaming to change the topology first. Afterwards new branches for AddRelation() and RemoveRelation() while the two current open ones will be abandoned.
[10:21] <niemeyer> TheMue: Please hold on
[10:21] <niemeyer> TheMue: What are you abandoning?
[10:23] <TheMue> niemeyer: The AddRelation() and the RemoveRelation() branches. They have older branches as prerequisites.
[10:24] <TheMue> niemeyer: I don't know how good the newer refactoring branch then works with those two.
[10:24] <niemeyer> TheMue: No, please don't drop them
[10:24] <niemeyer> TheMue: We've spent a lot of time polishing those branches
[10:24] <niemeyer> TheMue: Let's get them in, and have the change on top of them
[10:24] <TheMue> niemeyer: Merging is now problem?
[10:25] <niemeyer> TheMue: Me not understand
[10:25] <TheMue> niemeyer: Ah, but I understand you now. You want to get both in the trunk first before I start refactoring.
[10:26] <niemeyer> TheMue: Yeah
[10:26] <TheMue> niemeyer: Am I right?
[10:26] <TheMue> niemeyer: Good.
[10:26] <TheMue> niemeyer: Otherwise I would have kept the source and then bring it in with new branches.
[10:28] <TheMue> niemeyer: The "new" RemoveRelation() propose will come in in a few moments, just testing.
[10:28] <niemeyer> TheMue: Ah, cool
[10:35] <TheMue> niemeyer: Aaargh, it's in, but again with a lot of file too much in the review list.
[10:36] <niemeyer> TheMue: Ok, can you please clean it up so I can review and unblock you?
[10:37] <TheMue> niemeyer: Will try. It depends on the AddRelation() proposal.
[10:37] <niemeyer> Aram: https://launchpad.net/mgokeeper
[10:37] <niemeyer> Aram: bzr branch lp:mgokeeper and profit :)
[10:38] <niemeyer> TheMue: The pre-requisite is merged.. it's the same problem you had last time, and the same solution as well
[10:39] <TheMue> niemeyer: Yep
[10:56] <niemeyer> TheMue: "Today this isn't done. I would like to do it in a new small branch after this
[10:56] <niemeyer> and RemoveRelation() are in."
[10:57] <niemeyer> TheMue: Ok, but please note that down as the next task after fixing the topology details
[10:57] <hazmat> new 'juju-dev' mailing list?
[10:57] <TheMue> niemeyer: Hmm, merged, pushed, proposed, everything is there. But also still those files not part of the branch. It's only that they are with one delta in rietveld while the changed file have two.
[10:58] <niemeyer> TheMue: You have to push the pre-req after merging trunk in it, as you did last time
[10:58] <TheMue> niemeyer: I've done.
[10:58] <niemeyer> TheMue: The diff is the diff that bazaar generates
[10:58] <niemeyer> TheMue: So whatever is being pushed is the actual diff between the two branches
[10:59] <TheMue> niemeyer: I have to digg deeper.
[10:59] <niemeyer> TheMue: That's all that there is to it really
[10:59] <niemeyer> TheMue: If you merge trunk on the pre-req, push it to Launchpad, merge trunk on the follow up, repropose, it should wokr
[10:59] <TheMue> niemeyer: Why the quotes around the sentence above? "Today this …"
[10:59] <niemeyer> TheMue: Because it's your sentence
[11:00] <niemeyer> hazmat: Yeah, William sent a note to juju@
[11:01] <niemeyer> TheMue: The task should not be lost.. a few times we've said something was going to be done as a follow up and it ended up going missing
[11:02] <niemeyer> TheMue: So please write down to keep track this should be in the queue after the current branch and the topology changes
[11:02] <niemeyer> We really need an organized bug tracker that we can look at
[11:02] <niemeyer> Hmm.. maybe we should create a juju-core project in Launchpad
[11:03] <TheMue> niemeyer: Yep, missing that. Workied with it since the 90s and introduced it in several projects. It's indeed helping.
[11:04] <niemeyer> TheMue: LOL.. yeah :)
[11:04] <niemeyer> TheMue: We have a bug tracker.. it's just a mess because of the mix up of juju py
[11:05] <TheMue> niemeyer: So time for juju go?
[11:05] <niemeyer> TheMue: Hm?
[11:05] <niemeyer> TheMue: So, do you know the task I'm talking about above?
[11:07] <TheMue> niemeyer Not yet, will look into the logs. Right now I'm fighting with bzr. It says in the prerequisite as well as in the current branch that there's nothing to merge from the trunk and in the prerequisite that there's nothing to push.
[11:07] <TheMue> niemeyer: Drives me mad.
[11:07] <niemeyer> TheMue: Ok.. I'll file a bug and assign to you.
[11:07] <TheMue> niemeyer: Thx
[11:08] <niemeyer> TheMue: Have you merged trunk onto the pre-requisite?
[11:08] <TheMue> niemeyer: Yes.
[11:09] <TheMue> niemeyer: Just tried again, nothing to do. *sigh*
[11:09] <TheMue> niemeyer: Same in my branch.
[11:10] <TheMue> niemeyer: And bzr push says that there is nothing to push.
[11:11] <niemeyer> TheMue: Merge the pre-req onto your branch now
[11:12] <TheMue> niemeyer: Oh, something new, a warning about criss-cross, but everything merged successful.
[11:12] <niemeyer> TheMue: Yep.. that's the problem
[11:13] <niemeyer> TheMue: Try pushing the new content
[11:13] <niemeyer> and proposing it
[11:13] <niemeyer> I hope that works
[11:15] <TheMue> niemeyer: Ah, yeah, better now. Thank you.
[11:15] <niemeyer> TheMue: Woohay!
[11:17] <TheMue> niemeyer: Worked too long w/o branching. But by now I've also started to branch my private software. ;)
[11:24] <niemeyer> TheMue: I see you're renaming from zkRelation to topoRelation.. are tests broken at the moment without that?
[11:25] <TheMue> niemeyer: Without renaming it has been broken.
[11:25] <TheMue> niemeyer: Yes.
[11:25] <niemeyer> TheMue: Ok :(
[11:26] <niemeyer> TheMue: Trunk is being broken way too often :(
[11:26] <niemeyer> 	 382                 t.RemoveRelation(relation.key)
[11:26] <niemeyer>  383                 return nil
[11:26] <niemeyer> TheMue: Is RemoveRelation returning no errorr?
[11:27] <TheMue> niemeyer: No, it's only removing inside a map. Today it's also not checked at that point if it exists in that dir.
[11:28] <niemeyer> TheMue: OK
[11:28] <niemeyer> / Relation returns the relation with key from the topology.
[11:28] <niemeyer> func (t *topology) Relation(key string) (*topoRelation, error) {
[11:28] <niemeyer>         if t.topology.Relations == nil || t.topology.Relations[key] == nil {
[11:28] <niemeyer>                 return nil, fmt.Errorf("relation %q does not exist", key)
[11:28] <niemeyer> TheMue: We don't want the user to be getting this error message
[11:29] <TheMue> niemeyer: Oh, please wait.Just seen an assert_relation there. Will add it too.
[11:29] <niemeyer> TheMue: The relation key is completely uninteresting as far as a user is concerned
[11:30] <niemeyer> TheMue: The state method should verify the state in those cases, and error early with a sensible message
[11:30] <TheMue> niemeyer: OK
[11:30] <niemeyer> TheMue: If we get an Relation from relation we should display prefixed with something saying that an unexpected action happened while doing whatever
[11:31] <niemeyer> TheMue: In which case the relation key might go out, but we have no idea about why it was failing since we've checked it early
[11:31] <niemeyer> TheMue: So it's debugging rather than something we'd like the user to be commonly looking at
[11:31] <TheMue> niemeyer: IC. Do you note it in the review?
[11:31] <niemeyer> TheMue: I'll copy & paste what I just said
[11:31] <TheMue> niemeyer: I have to break for lunch, wife is calling.
[11:31] <TheMue> niemeyer: Yes, thx.
[11:32] <niemeyer> TheMue: Sure, I'll see you on Monday, have a good lunhc
[11:35] <niemeyer> fwereade: Have you added andrewmelina?
[11:35] <niemeyer> fwereade: To the list?
[11:44] <fwereade> niemeyer, sorry, no I didn't
[11:45] <niemeyer> fwereade: no problem, I thought we might have missed it
[11:46] <fwereade> niemeyer, is that the same person as andrewsmedina at gmail?
[11:46] <fwereade> niemeyer, can do that now
[11:46] <niemeyer> fwereade: Yeah, I suspect so
[11:47] <niemeyer> fwereade: Thanks!
[11:50] <niemeyer> TheMue: https://bugs.launchpad.net/juju-core/+bug/1007373
[11:56] <niemeyer> TheMue: https://codereview.appspot.com/6223055/ is still dirty
[12:07] <TheMue> niemeyer: So, 6223055 is cleaned up.
[12:09] <niemeyer> TheMue: Thanks
[12:09] <TheMue> niemeyer: Same problem with its prerequisite again.
[12:09] <niemeyer> TheMue: Yeah, I do apologize for the problem.. I should have fixed it already
[12:13] <TheMue> niemeyer: Gna, it's also my inexpertness with branching. So don't mind. The more often I have this problem the better I learn how to avoid it. ;)
[12:20] <niemeyer> TheMue: It's not actually your fault.. the pre-req support in lbox should handle that case correctly without you having to worry about it
[12:21] <TheMue> niemeyer: So I'm happily awaiting the next release.
[12:22] <niemeyer> TheMue: Review delivered, and you have a LGTM with a few trivial comments
[12:23] <TheMue> niemeyer: Just reading them.
[12:23] <TheMue> niemeyer: Thanks.
[12:33] <niemeyer> fwereade: You got a LGTM too
[12:33] <fwereade> niemeyer, sweet tyvm
[12:34] <niemeyer> fwereade: it's on the smaller branch, though :(
[12:34]  * niemeyer <= cheater
[12:34]  * niemeyer <= hungry too
[12:34] <niemeyer> We'll step out for lunch
[12:34] <fwereade> niemeyer, no worries :)
[12:34] <fwereade> LGTMs invariably LGTM ;p
[12:34] <niemeyer> Hehe :)
[12:34] <niemeyer> SGTM! ;)
[13:07] <fwereade> rog, is DefaultSeries making its way somewhere that's accessible via a juju.Conn?
[13:07] <fwereade> bah, that was a *we*'ll step out for lunch, wasn't it?
[13:09] <TheMue> fwereade: Looks like.
[13:33] <niemeyer> fwereade: You've got another LGTM.. hopefully it's sensible
[13:33] <niemeyer> fwereade: (the comments, I mean)
[13:34] <niemeyer> fwereade: Regarding DefaultSeries, yeah, CurrentSeries is going to be available
[13:36] <fwereade> niemeyer, cool, thanks
[13:36] <fwereade> niemeyer, is that going to be directly on Environ?
[13:37] <fwereade> niemeyer, CurrentSeries^^
[13:37] <niemeyer> fwereade: No, it's a global based on the current machine IIRC
[13:38] <niemeyer> fwereade: So should be usable from elsewhere, as long as we have no loops
[13:38] <fwereade> niemeyer, hmm, ok; I presume it will be an env setting at some stage soon, though?
[13:38] <niemeyer> fwereade: Ah, yep
[13:38] <niemeyer> fwereade: That's something else, sorry, I misunderstood
[13:39] <niemeyer> fwereade: DefaultSeries coming from the env config will certainly be accessible via Conn, since it's stored in the State
[13:39] <fwereade> niemeyer, I have a feeling that rog and dave are both circling that general area so I'm rather reluctant to start implementing that sort of stuff
[13:39] <niemeyer> fwereade: I don't *think* either of them are looking at it now
[13:40] <fwereade> niemeyer, hm, ok, I though I saw a CL from dave that was State.Environment
[13:40] <fwereade> niemeyer, just a ConfigNode for now but clearly a start
[13:40] <niemeyer> fwereade: Uh.. maybe I missed it
[13:40]  * niemeyer looks at review queue
[13:40] <niemeyer> add-environment.. suspect.. looking
[13:40] <fwereade> niemeyer, https://codereview.appspot.com/6261055/
[13:41] <niemeyer> fwereade: Yep, looks good
[13:43] <niemeyer> fwereade: Hmmm
[13:43] <niemeyer> fwereade: I'm a bit sad that we'll be poking at that configuration manually
[13:43] <niemeyer> fwereade: For well-known keys
[13:44] <fwereade> niemeyer, I was a bit uncertain about it; trying to remember the discussion we had at UDS
[13:44] <niemeyer> fwereade: Wondering if DefaultSeries + SetDefaultSeries are reasonable
[13:44] <niemeyer> fwereade: and whether they should be adding to that same setting, or living outside
[13:44] <niemeyer> fwereade: These settings will be common for all providers, I suspect
[13:45] <fwereade> niemeyer, I'm hoping for a separate type for common env settings that we can manipulate nicely
[13:45] <niemeyer> fwereade: I'd like that too
[13:45] <niemeyer> fwereade: We don't even need a separate type, I suppose.. state.DefaultSeries() might work
[13:46] <fwereade> niemeyer, hmm... DefaultSeries and Constraints are both common env settings, and PlacementPolicy may end up becoming one too... with 3 candidates for that sort of thing I'm reluctant to tack it directly onto State
[13:47] <niemeyer> fwereade: Why? What do we get by injecting them in another type?
[13:47] <rog> TheMue, fwereade, niemeyer: here's how it looks when we store units inside services rather than as a global thing. https://codereview.appspot.com/6247066
[13:47] <fwereade> niemeyer, it's just that State feels big enough already :)
[13:48] <niemeyer> fwereade: It does, because indeed it has a lot of stuff.. but I'm not sure that having to do state.EnvironSettings().SetDefaultSeries(...) is any better
[13:48] <fwereade> niemeyer, yeah, maybe so
[13:49] <rog> fwereade: can DefaultSeries be modelled as a constraint?
[13:50] <niemeyer> fwereade: Maybe the fact we can change multiple things at once and then flush might justify having a separate type
[13:50] <fwereade> rog, IIRC I couldn't quite find a clean way to do so
[13:50] <fwereade> rog, but it's clearly that species of kidney from a certain perspective
[13:50] <rog> fwereade: do you remember why, by any chance?
[13:51] <niemeyer> rog: Ah, no, it's actually not part of the constraint, and there's a good reason
[13:51] <niemeyer> rog: It's part of the charm URL
[13:51] <fwereade> rog, I think it's that it's the only thing that's a charm constraint as well as a machine constraint
[13:51] <fwereade> rog, so it ends up feeding into the constraints
[13:52] <fwereade> rog, but it isn't really one itself
[13:53] <rog> fwereade, niemeyer: couldn't we just take it from the constraints anyway? if we have no constraints, then we'll need to decide somehow and then that will have to be an instance constraint, presumably
[13:54] <fwereade> rog, IMO that is likely to end up a bit convoluted
[13:54] <fwereade> rog, we've already decided, based on the charm, before other constraints really come into play
[13:55] <rog> fwereade: so does it ever make sense to have a "series" constraint that doesn't match DefaultSeries?
[13:55] <niemeyer> rog: No, can't come from the constraints, because the charm has a URL
[13:55] <niemeyer> rog: That's where the decision comes from
[13:55] <fwereade> rog, juju deploy oneiric/wordpress
[13:56] <rog> fwereade: so maybe one way of looking at it is that the *charm* implies some constraints.
[13:56] <fwereade> rog, absolutely so
[13:57] <fwereade> rog, ubuntu-series is a computed constraint that's never exposed in the UI but is used in picking image
[13:59] <niemeyer> fwereade: I'm tempted to suggest we just state.SetDefaultSeries => state.EnvironConfig().Set("default-series", ...)
[13:59] <niemeyer> fwereade: Or maybe not even that, actually.. it's not clear we'll ever set this value through the API outside of environment changes
[14:00] <niemeyer> fwereade: Given that the client API is actually "juju set-env default-series=oneiric"
[14:00] <niemeyer> fwereade: Right?
[14:00] <niemeyer> fwereade: Or did you have something else in mind?
[14:00] <fwereade> niemeyer, yeah, I think so
[14:00] <niemeyer> fwereade: The reading aspect seems to make sense, though
[14:01] <niemeyer> fwereade: I mean
[14:01] <fwereade> niemeyer, all I'm really saying is that I'll want to know how to read it at some point soon :)
[14:01] <niemeyer> fwereade: Having state.DefaultSeries() => EnvironConfig().Get("default-series")
[14:01] <niemeyer> fwereade: jinx
[14:01] <niemeyer> ;)
[14:01] <fwereade> niemeyer, :p
[14:01] <rog> sounds good to me
[14:13] <fwereade> niemeyer, btw, ty for Resolve review; ok to sumbit if I err out on empty local path (and make the other changes ofc ;))?
[14:16] <fwereade> rog, btw, the unit path change looks really nice to me
[14:16] <fwereade> rog, is this something we've agreed to go with or just something you're throwing out there for discussion?
[14:17] <fwereade> rog, if the former I'll give it a more detailed look :)
[14:28] <niemeyer> fwereade: Yeah, that's implied by the LGTM
[14:28] <niemeyer> fwereade: If you think something might be done differently, or disagree with one of the points, a new review makes sense, otherwise a change+submit is fine on LGTM
[14:29] <fwereade> niemeyer, cool, cheers, wasn't quite sure how to interpret the "should we" ;)
[14:30] <rog> fwereade: just been discussing with gustavo
[14:30] <niemeyer> Very warmly.. I feel sorry for Aram :)
[14:30] <rog> fwereade: couple of changes coming up in a mo
[14:30] <niemeyer> We agree, though, as usual
[14:34] <niemeyer> OKAY!
[14:34] <niemeyer> Time to head home
[14:35] <niemeyer> A good weekend to all, and wish me luck on hiding the big aluminum cigar
[14:35] <Beret> heh
[14:35] <niemeyer> s/hiding/riding
[14:35]  * Beret won't ask
[14:35] <niemeyer> Beret: airplane..
[14:43]  * robbiew adds mramm to his buddy list ;)
[14:47] <TheMue> mramm: Hiya
[14:48] <mramm> Hy
[14:48] <mramm> how's everything going?
[14:49] <TheMue> mramm: Fine, thank you. Welcome on board.
[14:49] <mramm> Thanks
[14:52] <robbiew> we are now just waiting for him to get access to the inner sanctum...aka irc.canonical.com & wiki.canonical.com :P
[14:52] <Beret> from there, his soul is forever tainted
[14:52] <mramm> very interested in looking around the inner sanctum
[14:53] <robbiew> lol
[14:53] <mramm> sure, but there's interesting stuff
[14:53] <Beret> thus the tainting
[14:53] <mramm> to look at while my soul is being eaten away
[14:53] <robbiew> it's where we hide the oompa loompas
[14:53] <mramm> ahh
[14:53] <mramm> I wondered
[14:59] <fwereade> robbiew, ping
[15:01] <robbiew> fwereade: pong
[15:02] <robbiew> fwereade: one sec ;)
[15:05] <robbiew> fwereade: invite sent
[15:22] <rog> Beret: lol
[16:16] <fwereade> happy weekends all!
[16:34] <rog> fwereade: and you!
[17:32] <TheMue> fwereade, rog: Happy weekend too.
[17:33] <rog> TheMue: and you. i'm away monday and tues
[17:33] <rog> TheMue: so see you wed!
[17:35] <rog> trying hard to lbox propose from the train through my phone...
[17:35] <rog> it's not liking it much!
[17:36] <TheMue> rog: Greet the queen.
[17:37] <rog> TheMue: of course. i always pop in for a quick cuppa if i'm in town
[17:38] <TheMue> rog: *lol*
[17:39] <rog> TheMue: yay! https://codereview.appspot.com/6247066
[17:42] <TheMue> rog: Uh, there are flies on the front page. Your train is too fast.
[17:42] <rog> TheMue: lol
[17:44] <rog> TheMue: that CL make the unit key look like unit-00000-00000 where the first number is the service key number and the second is the id within the service
[17:44] <rog> s/make/makes
[22:42] <Aram> hello.
[22:42]  * Aram is back in austria.
[22:44] <andrewsmedina> Aram: hi