/srv/irclogs.ubuntu.com/2012/06/08/#juju-dev.txt

wrtpdavecheney: mornin' boss05:25
davecheneywrtp: woop woop05:28
wrtpdavecheney: how's tricks?05:28
davecheneywrtp: so, i added the a feature to environ.Instances, if you pass nil, you get whatever it knows about at that point05:29
davecheneyyou may find it upsetting05:29
wrtpdavecheney: i think it's probably the best way forward at this point05:29
wrtpdavecheney: the other alternative was to add a bool "all" argument to request all instances in addition to the ones requested.05:30
davecheneyhttp://paste.ubuntu.com/1029872/05:30
wrtps/the other/another/05:30
davecheneythe PA calls environ.Instance(nil) in a loop anyway05:30
davecheneyso I think we can cope with it eventually discovering all machines05:30
wrtpdavecheney: seems reasonable. what a pity ec2 makes everything so darn hard.05:31
davecheneywrtp: is has to be, it's cloud scale05:32
davecheneywrtp: http://paste.ubuntu.com/1029874/05:32
davecheneyI think it's fine to call this in a loop05:32
davecheneyenvirons.Instance(nil) that is05:32
wrtpdavecheney: i suppose so, but the eventual consistency stuff seems a little unnecessary.05:32
davecheneywrtp: it does sound a little overengineered05:33
davecheneyit not like the console is fast or anything because of it05:33
wrtp:-)05:34
wrtpdavecheney: i thought the provisioning agent only needed to get the instance list on startup05:35
wrtpdavecheney: at least, that's how i understood your message on the mailing list05:39
TheMueMorning.05:41
davecheneywrtp: well, the pythonic version did it periodically05:41
wrtpTheMue: hiya05:41
davecheneyTheMue: hello!05:41
davecheneywrtp: also, findUnknownInstances() can probably cache it's results after the first run05:42
wrtpdavecheney: i suppose that's useful if there might be several provisioning agents running concurrently.05:42
davecheneyit's more to fix the problem of05:42
davecheneyadd machine, stop PA, remove machine, start PA == instance is lost and not shutdown05:42
wrtpdavecheney: yeah, but that could happen in a 2nd PA instance, i think, so the "unknown instance" thing could happen for the first PA instance even when it wasn't shut down.05:44
davecheneywrtp: i'm aware of, but not putting any effort towards concurrent PAs at this point05:44
wrtpdavecheney: ok.05:44
davecheneyTheMue_: internet troubles ?05:55
=== TheMue_ is now known as TheMue
TheMuedavecheney: Mobile access. ;)06:07
davecheneyTheMue: i'll speak slowly then06:11
davecheneyTheMue: mobile data speeds in australia are pitiful06:11
TheMuedavecheney: Here it's mostly ok.06:15
davecheneybugger, after implementing code that shuts down unkonwn instances, the other side of the unit tests have broken06:17
davecheneyFAIL: provisioning_test.go:245: ProvisioningSuite.TestProvisioningDoesNotProvisionTheSameMachineAfterRestart06:17
davecheneyError: provisioner started an instance06:17
davecheneyTheMue: wrtp have you ever had visilibity issues between different zookeeper connections06:47
wrtpdavecheney: no06:47
davecheneyie, you write somethig with connection A, but it isn't visible to connection B ?06:47
wrtpdavecheney: using the same server?06:48
davecheneyyup, localhost06:48
wrtpdavecheney: nope. i suspect a bug in your code :-)06:48
davecheneyyeah, good call06:48
fwereadedavecheney, wrtp: I have suspicions that two connections to the same local server *can* have rather different views of what time it is06:51
wrtpfwereade: interesting. more than just transient phase difference you mean?06:52
davecheneyfwereade: the problem I am seeing is, in a test, I start an instance, then write the provider id back to the state with machine.SetInstanceId06:52
fwereadedavecheney, wrtp: they'll see the same history, sure, but I don't think any guarantees are made about distinct connections being synchronized in any way06:52
davecheneythen I close that state connection, open another one, but the Id is not there06:53
wrtpfwereade: aren't they looking at the same underlying state?06:53
davecheneyhttp://codereview.appspot.com/6307049/diff/2001/cmd/jujud/provisioning_test.go06:54
davecheney^ line 245 etc06:54
fwereadewrtp, I'm afraid I don't know exactly what form that underlying state takes; but given the terms in which the guarantees are couched I wouldn't find it surprising06:55
wrtpdavecheney: my first inclination would be to put a debugging print inside zk to print out what attributes are being set06:55
davecheneyyeah, i'll keep digging06:56
wrtpfwereade: i think i would, but then again i haven't delved too deeply into zk storage internals.06:56
davecheneythis is almost certainly my fault06:56
wrtpfwereade: when you've a moment, a chat about upgrade would be good06:57
fwereadewrtp, specifically:06:58
fwereadeTimeliness06:58
fwereade    The clients view of the system is guaranteed to be up-to-date within a certain time bound. (On the order of tens of seconds.) Either system changes will be seen by a client within this bound, or the client will detect a service outage.06:58
wrtpfwereade: surely that applies only when you've got multiple servers?06:58
davecheneywrtp: i'd think so06:58
davecheneycrap06:58
davecheneythat is weird06:59
fwereadeSometimes developers mistakenly assume one other guarantee that ZooKeeper does not in fact make. This is:06:59
fwereadeSimultaneously Conistent Cross-Client Views06:59
fwereadedavecheney, wrtp: but I *hadn't* previously noticed the sync() call they mention for getting round this06:59
fwereadedavecheney, wrtp: all above from Sometimes developers mistakenly assume one other guarantee that ZooKeeper does not in fact make. This is:07:00
fwereadeSimultaneously Conistent Cross-Client Views07:00
fwereadeer, http://zookeeper.apache.org/doc/r3.1.2/zookeeperProgrammers.html#ch_zkGuarantees07:00
wrtpfwereade: "ZooKeeper by itself doesn't guarantee that changes occur synchronously *across all servers*"07:01
davecheneywhich is fair07:01
wrtpfwereade: i still think it's talking about cross-server consistency, not single-server consistency07:01
wrtpfwereade: i may of course be wrong :-)07:02
fwereadewrtp, Single System Image07:02
fwereade    A client will see the same view of the service regardless of the server that it connects to.07:02
wrtpfwereade: i'm not sure i see the relevance of that07:02
wrtpfwereade: we've only got one server.07:03
fwereadewrtp, for that to hold, a client can't just be getting the latest state from whatever server it happens to connect to... can it?07:04
fwereadewrtp, I agree that I haven't seen anything specifically stating that there are no additional guarantees with single servers07:04
wrtpfwereade: i don't see why not. isn't that the whole point, in fact?07:05
fwereadewrtp, I think the whole point is that everyone sees the same history but not necessarily at the same time07:05
wrtpfwereade: i guess i'm just having trouble seeing how this would happen in the single-server case. a write would have to put the data into a slow pipeline, to be written eventually, but the write consistency guarantees mean that a write must always see the latest view, i think, so on a single server i can't see that happening.07:09
wrtpdavecheney: you could try putting a sleep after the zk write and see if that made a difference.07:09
davecheneyfwereade: sounds like 'everyone will see the same events, in the same order, eventually'07:10
davecheneyuh oh, australia is lagging out07:10
davecheneywrtp: nope didn't help, _but_ if I did NOT call st.Close() on the first connection, before opening the second everything worked07:10
fwereadedavecheney, I don't even think it guarantees that everyone will see the same events... just a consistent series of state snapshots, if you like07:11
wrtpdavecheney: interesting. maybe the close is losing events or something.07:11
davecheney'everyone will see most of what happened, probably in order07:11
davecheneywrtp: indeed, I wonder if we need an explicit flush07:11
wrtpdavecheney: the close is happening in the same thread, right?07:12
fwereadedavecheney, I think it does guarantee "in order", if somewhat more weakly than I would prefer07:12
davecheneywrtp: yes, i kill the tomb, which closes in a defer07:12
wrtpdavecheney: you might want to try reproducing the behaviour in a less convoluted setting.07:12
davecheneywrtp: yes07:13
davecheneywrtp: i'm certainly seeing some scarey things hapen around close07:15
davecheneywill do a simple test case07:15
wrtpfwereade: ping08:13
fwereadewrtp, pong08:23
wrtpfwereade: upgrades...08:24
fwereadewrtp, ah yes08:24
wrtpfwereade: this was my first thought: http://paste.ubuntu.com/1030040/08:24
wrtpfwereade: but then i realised that "exit and let upstart start new version" is asking for trouble08:25
fwereadewrtp, really? handing responsibility over to upstart seems pretty sane to me08:25
fwereadewrtp, what are you worried about?08:25
wrtpfwereade: i'm worried about what happens if someone uploads a dodgy set of tools. suddently everything will break.08:26
wrtpsuddenly08:26
fwereadewrtp, hm08:26
wrtpfwereade: i have a solution08:26
wrtpfwereade: which you might or might not like08:26
* fwereade listens08:27
wrtpfwereade: it would be nice if a program could upgrade itself, but it can't do that and still have upstart handle the case where it crashes.08:28
wrtpfwereade: so the idea is to add another "upgrader" command08:29
wrtpfwereade: which handles the rendezvous between the old and the new versions08:29
fwereadewrtp, that sounds fine until there's a problem with the upgrader :p08:30
fwereadewrtp, actually, I think I see another problem08:30
wrtpfwereade: the idea is that the upgrader is simple enough that it never needs upgrading itself.08:30
fwereadewrtp, sometimes the args we use to start the agents will change08:30
wrtpfwereade: that's fine. i've catered for that.08:30
fwereadewrtp, so we can't necessarily just reuse the upstart script08:30
fwereadeah08:30
fwereadecool :)08:30
fwereadewrtp, I'm reasonably happy with the upgrader idea08:31
wrtpfwereade: the idea is that when you upgrade, you actually run both programs together for a while.08:31
wrtpfwereade: the new program connects to the state, does some checks and then says "ok, i'm ready to start"08:31
fwereadewrtp, my only objection is that "the upgrader is simple enough that it never needs upgrading itself" feels a touch optimistic to me08:31
fwereadewrtp, I don't really like running 2 at a time08:32
wrtpfwereade: then the old program shuts down and the upgrader tells the new program to go ahead08:32
wrtpfwereade: the nice thing about running them both at the same time is that you get zero down time08:32
fwereadewrtp, yeah, it's just my gut reaction08:33
fwereadewrtp, I will probably come around to it08:33
wrtpfwereade: i've built the upgrader part already (although i've still got some compiler errors)08:34
wrtpfwereade: i think it's possible to do some exhaustive verification of it to check that it's correct08:34
wrtpfwereade: it's 280 lines of code08:35
wrtpfwereade: which is bigger than i'd hoped, but still pretty small08:35
wrtpfwereade: at the moment, the assumption is that it talks to the commands that it runs via stdin and stdout. that could change.08:36
fwereadewrtp, cool08:37
fwereadewrtp, sorry, I have to go help cath with the car for a bit :/08:37
wrtpfwereade: np08:37
fwereadewrtp, idea sounds broadly sane but I'd like to see an implementation ;)08:38
wrtpfwereade: later this morning, i hope :-)08:38
fwereadewrtp, sweet08:38
=== TheMue_ is now known as TheMue
fwereade_TheMue, is it sane to have settings on a service relation?09:55
TheMuefwereade_: Today we have on a relation. But I don't know yet how they are used.09:56
fwereade_TheMue, it seems to me that *unit* relation settings are sane (and are set by units in their hooks) and *service* settings are sane (set by the user via command line)09:57
fwereade_TheMue, but that we don't currently have a use case for *relation* or *service relation* settings09:57
TheMuefwereade_: Did you check Py state where those settings are changed?09:58
TheMuefwereade_: Not that we only create that node and nothing else.09:58
fwereade_TheMue, what I'm dancing towards is a suggestion that we drop all creation of role/settings nodes in state.AddRelation, because I think they're meaningless until we add units09:59
TheMuefwereade_: Sounds reasonable.10:01
fwereade_TheMue, sweet, I think it makes things simpler10:01
TheMuefwereade_: Yes. Not much, but every bit counts.10:02
Arammorning.10:08
wrtpAram: hiya10:08
TheMueAram: Moin.10:21
fwereade_Aram, heyhey10:27
wrtpfwereade_: here's the WIP. i've compiled it only, no tests yet. https://codereview.appspot.com/630706110:35
fwereade_wrtp, cheers10:37
fwereade_TheMue, are there any existing tests for the scope stuff in AddRelation?11:12
TheMuefwereade_: Only the validation of the value, it's in my last proposals.11:14
TheMuefwereade_: What exactly do you want to see tested?11:15
fwereadeTheMue, sorry, lost history; did you respond?11:19
TheMuefwereade: Hehe, modern technology.11:19
TheMuefwereade: I said that my latest proposal does a value validation, but nothing else.11:19
TheMuefwereade: And I asked what do you want to see tested.11:19
TheMuefwereade: We've not yet reached the parts that add container scoped paths in ZK.11:20
fwereadeTheMue, what is meant to happen when the scope doesn't match11:20
fwereadeTheMue, that's edging its way towards a proposal on my end11:20
TheMuefwereade: One moment.11:22
TheMuefwereade: https://bugs.launchpad.net/juju-core/+bug/1007373 See latest question, it is still open.11:24
TheMuefwereade: Today, in Py as in Go, only one endpoint has to be container, that's enough.11:24
fwereadeTheMue, I think that's correct; but we need to verify that we store ScopeContainer on each11:24
fwereadeTheMue, that's what you do, but it's not tested AFAICS11:25
TheMuefwereade: You're right.11:26
fwereadeTheMue, I was also wondering why we return the ServiceRelations from AddRelation; seems to me it would make more sense to return just the Relation, and give that a Services method11:26
TheMuefwereade: Did you checked the callers of AddRelation()11:27
fwereadeTheMue, there aren't any11:27
TheMuefwereade: In Py?11:28
TheMuefwereade: Interesting.11:28
fwereadeTheMue, but if there were, they could just as easily extract the service relations from the service11:28
fwereadeTheMue, sorry, not in py11:28
TheMuefwereade: The you maybe see the reason.11:28
TheMuefwereade: But a relation has not enough information for all services, it would have to dynamically retrieve them again. So maybe it's better to only return the service relations, they have a Relation() method.11:29
fwereadeTheMue, sorry, I don;t see the reason11:30
fwereadeTheMue, the only client discards the result11:30
TheMuefwereade: Hmm, then the old reason for it may be gone.11:31
fwereadeTheMue, and honestly I don't see what good the Relation type actually does (maybe status?)11:32
fwereadeTheMue, given a service, I will definitely want to know what relations it's in11:32
fwereadeTheMue, but for that I want ServiceRelations, I think11:33
fwereadeTheMue, hmm, actually, even for status a bare Relation type is pretty useless I think11:33
fwereadeTheMue, I think it should actually be AddRelation(...) error11:34
TheMuefwereade: It's used in RemoveRelation() ;)11:34
fwereadeTheMue, why don't we just pass the same endpoints, calculated in the same way?11:34
fwereademorning mramm11:35
TheMuefwereade: We can do, no problem.11:35
TheMuemramm: Moin.11:35
fwereadeTheMue, I don't *think* there are any other use cases... but I may be missing something11:36
TheMuefwereade: But that change would affect all callers too.11:36
fwereadeTheMue, how many?11:36
fwereadeTheMue, AFAICS the only use of get_relation_state is in remove-relation, which then uses it to... remove the relation11:37
TheMuefwereade: I don't know. I only want to take care that a redesign of todays API instead of pure porting doesn't cost too much time (up to 12.10).11:37
TheMuefwereade: And you know, our last API change is now gone almost completely back into the former solution.11:38
fwereadeTheMue, but a bit of checking of the existing API, and seeing that parts of it are 100% useless, saves us an awful lot of implementation time11:38
fwereadeTheMue, which one?11:38
TheMuefwereade: I'm not safe enough in todays Py code and the history which lead to it. So if you see opportinities in those changes please talk to Gustavo.11:39
TheMuefwereade: The topology related relation stuff we talked about at UDS.11:40
fwereadeTheMue, this one:      Services  map[string]*topoRelationService11:41
fwereade ?11:41
TheMuefwereade: That's one of the parts, and some implementation details. The last proposals almost looked like the first ones.11:42
fwereadeTheMue, well, I guess this is the same area... but you are aware that we're burning time implementing putative multi-endpoint relation support that isn't on any roadmap I know of?11:43
fwereadeTheMue, based on that I can deal with the data format change11:44
TheMuefwereade: Yep11:44
fwereadeTheMue, ok, I just don't understand why it's worth spending time on this11:45
TheMuefwereade: By the way, did you read my error handling mail?11:45
fwereadeTheMue, I thought you seemed to make a solid case but I haven't got much more of a response11:45
fwereadeTheMue, anyway, sorry about that whole review cycle11:46
fwereadeTheMue, I have no idea on what basis niemeyer makes that sort of API decision though11:46
fwereadeTheMue, the AddRelation(args...) business is a known ugliness in python which I'm sure niemeyer complained about himself at one stage11:47
TheMuefwereade: That's no problem. It's only that I'm maybe not the best discussion partner for some ideas due to my lack of the project history and many design motivations.11:47
fwereadeTheMue, yeah, understood -- but I think it's worthwhile talking to you about these things anyway11:48
TheMuefwereade: That's true.11:48
* fwereade tries to figure out what he's actually doing11:49
fwereadeTheMue, do we have Service.Relations() yet?11:50
fwereadeTheMue, wait, sorry, ignore me11:51
TheMuefwereade: No11:51
TheMuefwereade: I'm currently taking a deeper look into our code base regarding error handling.11:52
fwereadeTheMue, ok, cool11:53
TheMuefwereade: There are many places where errors just passed up. Not only ZK, topology or os.11:53
fwereadeTheMue, I think the thing I *need* now is Service.Relations; I'll get to work on that11:53
fwereadeTheMue, I think we should also fix the interface to AddRelation and RemoveRelation11:54
TheMuefwereade: IMHO we should seperate between errors containing possible additional informations (as own types) and the visualization of this error as message, log entry, something else on the UI level (commands, logs, web).11:54
fwereadeTheMue, would you have any objection to a CL that combined the two? they're somewhat intertwined11:54
TheMuefwereade: Combining Add and Remove?11:55
fwereadeTheMue, making Add return error, and Remove take endpoints... like add11:56
TheMuefwereade: So instead of a relation to remove I would have to get the endpoints, then (internally) search a matching relation and then delete it? Where do you get the EPs from? And did you take a look into todays RemoveRelation code?11:58
fwereadeTheMue, how do you get a relation instance to remove now?11:59
fwereadeTheMue, the answer is "you can't"11:59
TheMuefwereade: Are there no callers of remove_relation_state in Py today?11:59
fwereadeTheMue, the only called uses a relation it got from get_relation_state, which takes endpoints and returns a relation12:00
fwereadeTheMue, that place is the only client of get_relation_state12:00
fwereadeTheMue, the actual operation is "given these endpoints, which came from the command line, remove the corresponding relation"12:00
fwereadeTheMue, just like Addrelation but in reverse12:01
TheMuefwereade: OK, I see. So it sounds reasonable.12:01
fwereadeTheMue, cool, thanks12:01
AramI wonder why Gustavo made mgo take bson.{M,D} arguments instead of using reflection to determine the type of arguments, it's not like you buy any type safety since you can put whatever crap you want inside the bson objects.12:35
Aramerr = k.nodes.Update(bson.M{"_id": parent}, bson.M{"$push": bson.M{"children": path}})12:35
Aramthere's a lot of bson.M noise.12:36
Aramif you use bson.D it's even worse.12:36
Aramsurely we can do better.12:36
wrtpAram: what would you want that update line to look like?12:54
Aramthinking.12:54
hazmatjimbaker, the branch is looking much nicer13:50
wrtpfwereade: did you have a look at the upgrade interface in https://codereview.appspot.com/6307061/diff/1/upgrade/upgrade.go ? does it look kinda reasonable? all agents would call Start, and then Upgrade when they need to upgrade.14:34
fwereadewrtp, sorry: yeah, it looks sensible, but for some reason I'm a bit suspicious of stdin/stdout14:36
fwereadewrtp, trying to figure out whether I'm just being irrational14:36
wrtpfwereade: yeah, i wondered about that.14:36
wrtpfwereade: it would be perfectly possible to use e.g. unix sockets in the same framework14:37
fwereadewrtp, indeed, but then I'm not reaally sure what that buys us14:37
wrtpfwereade: but in the end, stdin/stdout seem to give us exactly what we want, i think.14:37
fwereadewrtp, indeed :)14:37
wrtpfwereade: i don't think we're gonna use it for anything else14:37
fwereadewrtp, consider my reaction to be "tentative approval" then :)14:38
wrtpfwereade: and i've added some safeguards in there in case anyone prints random stuff14:38
wrtpfwereade: thanks14:38
wrtpfwereade: i think the upgrader implementation is really quite neat, BTW. i'm happy to have written it, even if it goes in the bin on monday.14:39
fwereadewrtp, haha, yeah, it's nice :)14:39
wrtpfwereade: in particular the way that cmd.run recursively calls itself in a new goroutine and talks to the new version of itself via a channel.14:40
wrtpfwereade: i started doing it without goroutines and realised it was surprisingly hard to do nicely.14:41
fwereadewrtp, ++goroutines :)14:43
wrtpfwereade: +114:43
=== Guest_ is now known as smaddock
fwereadeTheMue, if you have a moment I would appreciate a look over https://codereview.appspot.com/6303060 which we discussed earlier15:00
TheMue*click*15:01
wrtphmm, linux really isn't good at coping with runaway processes. whatever happened to time sharing?15:10
TheMuefwereade: It will conflict a bit with my latest validation, but so far LGTM.15:14
TheMuefwereade: I'm interested what niemeyer will say.15:14
AramI've written the longest commit message of my life15:21
Aramhttp://paste.ubuntu.com/1030536/15:22
AramTheMue: fwereade wrtp: I don't understand something about bzr, say I did these 5 commits in my branch. I want to propose a merge. After the merge is done, will my 5 changes appear in the trunk history or just the merge proposal?15:33
wrtpAram: just the merge proposal15:34
Aramhmm.15:34
Aramthat's unfortunate.15:34
wrtpAram: if you want that commit to appear, you should have it as part of the merge proposal description15:35
wrtpAram: that's what we'll read when looking over the CL anyway15:35
wrtpAram: so you might as well put it there.15:35
fwereadeTheMue, cool15:35
Aramthanks. I know this is how contribuiting to the Go project also works, but I find it counter intuitive in a distributed versioning system world. it feels more like cvs to me.15:36
wrtpAram: seems reasonable to me. the commits aren't lost, they're just one level deeper.15:37
Aramoh? You can still access them?15:37
wrtpAram: yeah15:37
Aramhow?15:37
wrtpAram: bzr log -n 015:38
wrtpAram: or -n 2 to show just two levels15:38
Araminteresting.15:38
Aramugh, lbox uses exp/html15:45
AramI guess I should install the ppa?15:45
wrtpAram: yeah, i just install the ppa15:47
Aramwrtp:15:52
Aram2012/06/08 17:50:06 Authenticating in Launchpad...15:52
AramGo to your browser now and authorize access to Launchpad.15:52
Aram 15:52
Aramhow do I do that?15:52
wrtpAram: i guess your browser should have come up with a new window, assuming you're using a standard web browser. i doubt it'll work with lynx :-)15:53
Aramah, damn.15:53
Aramthis is a headless box15:53
Aramhmm...15:53
hazmatAram, you can do it on a box with a head, and transfer the auth token15:53
hazmatAram, actually you don't even need to do that15:53
hazmatAram, you can go to lp, and authorize the app separately15:54
hazmatand copy the token15:54
hazmatmaybe.. ;-015:54
hazmathmm.. no that doesn't quite work15:55
hazmati was looking at https://launchpad.net/~<your_id>/+oauth-tokens15:55
hazmatyou can't actualy retrieve the token there though, just manage the apps15:55
Aramyes, no option to add15:55
* Aram is installing a browser in his headless box15:56
hazmathmm.. it might work with lynx15:57
Aramgreat, chrome doesn't like remote X.15:58
wrtplol15:58
AramI have the URL now though15:58
Aramand I can do it, I think15:59
AramI think I finally did it.16:07
Aramwrtp: fwereade: TheMue: care to review a small branch? (my first, heh...): https://codereview.appspot.com/6298062/16:08
fwereadeAram, gladly :)16:08
wrtpAram: will do16:10
Aramthanks.16:10
TheMueAram: Today only time for a quick look, have to leave now. Will look again tomorrow. So far ok, only seperating comments like // ------ are uncommon in our project.16:11
AramI know, I want to delete those, niemeyer wrote them though16:12
Aramheh16:12
TheMueAram: Even if I like them because I'm adding optical seperators in my private code too. ;)16:12
Aramthere's a lot of dead code.16:12
TheMueSo, I'm off, birthday party of sister-in-law.16:13
Aramenjoy16:13
TheMueHave a nice weekend.16:13
Aramlikewise16:13
TheMueAram: Thx.16:13
wrtpAram: i'd delete 'em. gustavo's deleted them in another project recently AFAIR.16:22
wrtpAram: but maybe in another branch...16:22
Aramyes.16:22
wrtpfwereade: any chance you could have a glance at this before i post it to the list? http://paste.ubuntu.com/1030658/16:36
fwereadewrtp, reading16:36
fwereadewrtp, sorry, another problem has just crystallized in my brain16:38
wrtpfwereade: go on16:38
fwereadewrtp, how will this handle zk data format changes? when we need to stop everything, fix zk, and restart everything?16:38
fwereadewrtp, not that the original proposal was explicit about that either...16:39
fwereadewrtp, and not that I can see anything that will make it *harder* than the original16:39
wrtpfwereade: i did have a plan for that... let me think16:39
fwereadewrtp, but that does all look good otherwise16:40
wrtpfwereade: here's a possibility - if the version is tagged as "pending", then all agents download the new version, stop what they're doing, then wait for the "pending" tag to be removed. *then* they go through the normal upgrade procedure.16:48
wrtpfwereade: it's possible we might want to alternate between two server ports, so that new-major-version agents can connect to the new version of the db while others are still hanging on to the old one.16:50
fwereadewrtp, first bit sounds sane, bit nervous about the second part16:50
fwereadewrtp, I don;t think we ever want 2 things connected to the same db that aren't in agreement about what data formats are in play ;)16:51
wrtpfwereade: me neither. hence before we bring up the new db, we make sure that everything in the system is halted, waiting for the pending tag to be removed.16:51
fwereadewrtp, if we can halt everything we can also tell them to drop their connections, surely?16:52
wrtpfwereade: yes, but we can't then tell them when to reconnect, right?16:52
fwereadewrtp, the laws of logic be a harsh mistress16:53
wrtpfwereade: i'm not sure i can see a way of reliably upgrading the db without using two db instances.16:56
wrtpfwereade: and also we'd like to be able to switch the underlying db technology too.16:58
fwereadewrtp, hmm, yeah, makes sense16:58
wrtpAram: there's a convention of using "pathPkg" as an alternative name when importing "path".17:01
wrtpfwereade: last thing i saw from you was "[17:55:53] <fwereade> wrtp, the laws of logic be a harsh mistress"17:02
wrtpfwereade: in case i missed anything17:02
fwereadewrtp, you missed a "yeah, makes sense"17:02
wrtpfwereade: cool, thanks17:02
wrtpright, i'm off for the weekend. see y'all monday.17:11
wrtpfwereade: have a good weekend. enjoy the lovely sun which we haint got.17:11
fwereadewrtp, cheers, enjoy :)17:13
Aramwrtp: ok, thanks, will change17:31
hazmatwrtp, you stop the activity, wait till everyone is stopped, upgrade, then reboot the agents17:35
hazmatwrtp, have a good weekend17:35
hazmater. upgrade == upgrade, run migrations17:36
=== meetingology` is now known as meetingology

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