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

davecheneyfwereade: aloha!06:50
fwereadedavecheney, heyhey06:50
fwereadedavecheney, how's it going?06:50
davecheneygood06:50
davecheneyspent the weekend looking at ARM assembly06:51
davecheneyso a change is as good as a holiday06:51
fwereadedavecheney, excellent :)06:54
TheMueMorning.07:33
fwereadeheya TheMue07:33
fwereadeTheMue, ping08:05
TheMuefwereade: pong08:05
fwereadeTheMue, figuring out what I should work on; wondering how the relation stuff is going08:05
TheMuefwereade: One moment please, have to change rooms.08:06
fwereadeTheMue, np08:06
TheMuefwereade: So, back again. My wife has been in the home office before. ;)08:10
TheMuefwereade: Currently the State.AddRelation() and State.RemoveRelation() are in review and short before LGTM.08:11
TheMuefwereade: But Roger and Gustavo discussed and want to keep open, that a service might have relations of the same role mltiple times in future.08:12
TheMuefwereade: So I'll now change the topology for it and afterwards the AddRelation() and RemoveRelation() to use this new model.08:12
fwereadeTheMue, ok, cool, so not *imminent* -- cheers :)08:14
TheMuefwereade: Next step will then be to enhance AddRelation() by a better verification of the endpoints. Today it has the same checks as the Py code, but it's not enough.08:14
TheMuefwereade: What is not so imminent?08:16
fwereadeTheMue, sorry, got diverted; I mean that a usable state.Relation type is still some way off08:32
TheMuefwereade: There's enough to do, yes.08:33
fwereadeTheMue, cool; I should probably do something that doesn't depend on it then :)08:33
TheMuefwereade: Or participate. ;)08:33
fwereadeTheMue, if you think the work can be usefully divided that would be cool -- what's the plan?08:34
TheMuefwereade: That's the problem, there is no real plan. I'm just doing the functionality top-down. I've started with the relation manager, those methods move into our new State.08:35
TheMuefwereade: Next step would be relation type by type.08:35
TheMuefwereade: I've seen that the service relation has a lot of functionality.08:36
fwereadeTheMue, I could happily try to do some rudimentary types08:36
fwereadeTheMue, see how far I can take them08:36
fwereadeTheMue, what's the latest stable-ish unmerged relations branch? if you think some will go in soon, it seems sensible to branch from there08:37
TheMuefwereade: The latest is go-state-remove-relation. But it has a line of prerequisites.08:38
fwereadeTheMue, and is that likely to be merged by the time I have a new type to propose on top of it? and not to change too much between now and then?08:39
TheMuefwereade: So maybe you should wait until the all are in the trunk.08:39
TheMuefwereade: I hope to keep the API stable, as well as the types so far.08:40
TheMuefwereade: Right now only the topology below is changed.08:40
fwereadeTheMue, ok; in that case I can probably just go from trunk, right?08:40
TheMuefwereade: In trunk there's the current topology, but not yet the relation types as well as Add and Remove.08:41
fwereadeTheMue, I'm just re-checking your current proposals to get myself more up to speed08:42
TheMuefwereade: Yes, take a look. I think both will go in today or tomorrow.08:43
TheMuefwereade: Just wait for the LGTM. The Add… had a pre-LGTM by Gustavo.08:43
fwereadeTheMue, hmm, so I should maybe branch from add-relation and add functionality to ServiceRelation?08:43
TheMuefwereade: Sounds like a plan. ;) In Remove… it only has one method more to return the according Relation.08:44
fwereadeTheMue, cool, I'll ping you if I have any trouble08:45
TheMuefwereade: Cheers.08:46
TheMuefwereade: You'll see that those zkXyz are now topoXyz, as we talked about in Oakland.08:46
fwereadeTheMue, sweet08:46
fwereadeTheMue, just mailed juju-dev; would apreciate your thoughts10:34
TheMuefwereade: Will take a look.10:35
TheMuefwereade: To summarize: Interface changes (with checks) are ok, but no subordinate changes. Am I right?10:38
fwereadeTheMue, that's what I *think* we should do10:38
fwereadeTheMue, you tell me whether that's right :)10:39
TheMuefwereade: Hehe, then you have to help me with subordinates before. Where do we find it in our model?10:40
fwereadeTheMue, we don't really yet10:40
fwereadeTheMue, I think that I need to incorporate them before we can move much further ahead on the relations10:41
TheMuefwereade: Could you please tell me more about subordinates?10:41
fwereadeTheMue, I'm just changing Service.AddUnit to take (container *Unit) and seeing where I go from there10:41
fwereadeTheMue, ok, I'll try10:41
fwereadeTheMue, charms can be subordinate10:42
fwereadeTheMue, if they are, their characteristics change10:42
fwereadeTheMue, when deployed, no units are created10:42
TheMuefwereade: Do you have an example?10:42
fwereadeTheMue, when added to a relation, units of the subordinate are deployed inside the containers of every unit of the principal service10:43
fwereadeTheMue, rsyslog would make a good subordinate charm10:43
fwereadeTheMue, there are a number of other consequences which I only really discovered today10:44
fwereadeTheMue, and am not quite sure I have a handle on10:44
fwereadeTheMue, so stop me if anything sounds like crack10:44
fwereadeTheMue, one of the issues is that the "connections" are different to in a normal relation10:45
fwereadeTheMue, in a normal relation between P and Q, every unit of P can see every unit of Q, and react to settings changes; and vice-versa10:45
TheMuefwereade: It's ok so far. I only try to understand it right. Typically I've used to work a lot with my colleagues around a whiteboard. I need to visualize it.10:45
fwereadeTheMue, in a subordinate relation, each unit of P sees only the unit of Q that it shares a container with10:46
fwereadeTheMue, and settings changes are processed entirely within, and do not leak beyond, that container10:46
fwereadeTheMue, (everything is still mediated by ZK, obviously; but a settings change for one unit of P will not e noted by a unit of Q outside its container10:47
fwereadeTheMue, so... when storing unit relations, we have different ZK paths to the settings etc10:48
TheMuefwereade: IC10:48
fwereadeTheMue, we currently handle the /relations/rel-id case, which is what we want globally; but we also need /relations/rel-id/unit-id (I think)10:49
* fwereade goes to check10:49
fwereadeTheMue, yeah; and the unit-id I referred to above is specifically the unit id of the principal (ie the one that "owns" the container10:51
fwereade)10:51
TheMuefwereade: In Py there's code handling /relations/rid/cid/role10:51
TheMuefwereade: Where cid is the container id10:51
fwereadeTheMue, and also /relations/rid/role, right?10:51
TheMuefwereade: For global relations, yes.10:52
fwereadeTheMue, AIUI the structure of the nodes underneath that should be similar10:52
fwereadeTheMue, does that seem right to you?10:52
fwereadeTheMue, look for _get_scope_path and how it's used10:53
TheMuefwereade: Thought it is, but not yet covered the container scoped relations.10:54
fwereadeTheMue, I'll proceed as though it is; can't be sure of every use of it yet but we'll see how it goes10:55
fwereadeTheMue, the topology also changes to accommodate knowledge of what container a given unit is actually deployed10:56
fwereadeTheMue, in10:56
fwereadeTheMue, anyway, I'm just making those changes to begin with10:56
TheMuefwereade: So this is also a topology change to the current Py version?10:58
fwereadeTheMue, no, it's part of the topology already in py10:58
TheMuefwereade: OK, then I got you wrong, sorry.10:58
TheMueLunchtime11:04
Aramheyhey.11:54
TheMueAram: Hiya.12:11
hazmatg'morning12:16
fwereadeAram, hazmat: heyhey12:25
fwereadeheya niemeyer12:39
niemeyerYo12:39
niemeyer!12:39
fwereadeniemeyer, TheMue, Aram: conundrum follows12:51
fwereadein the topology, in python, we store Machine and Container for each unit12:52
fwereadeonly one of those can ever be valid12:52
fwereadeI just got an urge to store Location, which is just a unit key or a machine key (and we can tell which is which, right?)12:53
fwereadethis feels kinda evil, but so does allowing the content to be insane by having both or neither set12:53
fwereadeniemeyer, TheMue, Aram: opinions? ^^12:53
fwereadeniemeyer, TheMue, Aram: I'm leaning towards storing them under separate keys and just being careful about what we write, but...12:54
niemeyerfwereade: Having a single key feels bad indeed12:55
fwereadeniemeyer, TheMue, Aram: hmm, *at the moment* only one can ever be correct12:55
fwereadeniemeyer, TheMue, Aram: forget I said anything :)12:55
niemeyerfwereade: They're different fields meaning different things.. having to guess what the field means based on the value isn't great12:55
fwereadeniemeyer, indeed12:55
fwereadeniemeyer, we could still have garbage set in that one field anyway12:55
TheMuefwereade: Forgotten. ;)12:55
niemeyerfwereade: can you please expand? Maybe I misunderstand12:56
fwereadeniemeyer, I'm agreeing -- the extra guard against insanity of the icky magic field doesn't eliminate the possibility of insanity anyway, so so even that is not an argument for the icky magic field over two separate fields12:57
* fwereade should go and borrow a cuddly toy from laura to ask these questions to before polluting irc :)12:57
niemeyerfwereade: Hehe. Jamu used to call that "talking to the bear" :-)12:58
fwereadeniemeyer, yeah, it's a noble technique, we had a cat called mutex at resolver who sometimes served that purpose12:58
TheMuefwereade: Hehe, or take your pet to talk to (if you got one). Cats are good listeners.12:59
fwereadeTheMue, just a cuddly cat actually12:59
fwereadeTheMue, I'm not sure a real cat would have the patience anyway ;)12:59
TheMuefwereade: I'm sure -- it doesn't. *lol*12:59
niemeyerfwereade: That's a great name for a cat :)13:03
fwereadeniemeyer, isn't it :)13:04
TheMueniemeyer: One question about the topo service inversion. Shall I open the combination of roles even if e not yet use them or shall I keep the current validation for provider/requirer or peer?13:33
niemeyerTheMue: The validation is fine13:33
niemeyerTheMue: I mean, it will have to be adapted, of course13:33
niemeyerTheMue: Given the map change13:33
TheMueniemeyer: Sure, but I'll keep it and later we can extend it. OK.13:34
niemeyerTheMue: But we don't have to pretend it's general right now.. we just don't want to shoot ourselves in the foot13:34
TheMueniemeyer: Could hurt, indeed. ;)13:34
TheMueniemeyer: So, change is done. Influence on State.AddRelation() is small, only three lines.14:04
fwereadeniemeyer, TheMue: https://codereview.appspot.com/6268050 has subordinate units14:21
niemeyerfwereade: Woohay14:23
niemeyerTheMue: Woohay too :)14:23
TheMue:D14:23
fwereadeniemeyer, er, there'll be a small diff upcoming, missed a signature change in the rest of the project14:23
fwereadeniemeyer, should be a trivial additional file changed14:23
fwereadeniemeyer, ie shouldn't block sane reviewing if you're of a mind :)14:24
niemeyerfwereade: Not yet.. still trying to catch up on post-sprint stuff14:25
niemeyerfwereade: But I'll get there14:25
fwereadeniemeyer, no worries :)14:25
fwereadeniemeyer, btw, tyvm for reviewing what you did during the sprint, hope it didn't take too much time away14:27
niemeyerfwereade: No problem. It didn't take much time away because I've used the evenings for the largest chunks14:28
fwereadeniemeyer, jolly good, thanks :)14:28
fwereadeniemeyer, TheMue, Aram: oh, blast: I've put myself in a situation in which I need two prereqs for the next branch14:30
fwereadeniemeyer, TheMue, Aram: did we ever come up with a nice way of dealing with this?14:30
niemeyerfwereade: Is any of them small enough that I can review quickly?14:30
niemeyerfwereade: There's no way to handle that automatically with current infra14:31
niemeyerfwereade: Launchpad doesn't support it14:31
fwereadeniemeyer, one of them is TheMue's add-relation branch14:31
niemeyerfwereade: Hmm14:31
fwereadeniemeyer, which IIRC has an LGTM from you already actually14:31
niemeyerfwereade: I thought that was in already14:31
TheMuefwereade: There's only a final lgtm missing.14:31
niemeyerLink?14:31
TheMueniemeyer: I only proposed it for the final one after the last open points.14:32
TheMueniemeyer: https://codereview.appspot.com/6223055/14:32
TheMueniemeyer, fwereade: I'm ready for submitting it.14:33
fwereadeTheMue, if it has an LGTM you should be good to go unless you disagreed with any of the points in the LGTM14:34
fwereadeTheMue, I have been known to be too hesitant on this front :)14:34
* TheMue likes clean LGTMs. ;)14:35
* fwereade lives in hope of them, and is most joyful when they come to pass14:35
niemeyerTheMue: LGTM14:35
TheMueniemeyer: Ah, thx, here it comes.14:35
fwereadeniemeyer, thanks, sorry context switch :(14:36
niemeyerfwereade point applies in this case, FWIW.. your branch reflected the agreement of the last review14:36
niemeyerfwereade: No problem, happy to prevent blockage14:36
TheMueniemeyer: Updated the latest propose (topology). Now the new trunk containing State.AddRelation() is merged, the changes adopted and all lamps are green.15:01
niemeyerTheMue: Beautiful, thank you15:02
niemeyer!15:02
TheMueniemeyer: np :D15:02
niemeyermramm: ping20:31
mrammpong21:45
mrammneimeyer: pong21:46
niemeyermramm: Heya22:00
niemeyermramm: Are you subscribed to juju-dev?22:01
niemeyerdavecheney: ping22:02
davecheneyniemeyer: ack22:18
davecheneyhang on22:18
davecheneylet me change terminals22:18
davecheneyx has shat itself22:18
davecheneyniemeyer: back22:21
niemeyerdavecheney: Heya22:21
niemeyerdavecheney: Morning22:21
davecheneyyes! finally it wasn't raining, so it was my first chance to go for a ride before work for weeks!22:21
davecheneyniemeyer: how was your trip ?22:21
niemeyerdavecheney: Oh, congrats! :)22:21
niemeyerdavecheney: It was great indeed.. very happy that I managed to meet Aram and rogpeppe in addition to the unrelated sprint22:22
davecheneyniemeyer: didn't you meet roger at UDS ?22:22
davecheney:P22:22
davecheneybtw, is Aram the Aram taht wrote doozer ?22:23
niemeyerdavecheney: Yeah, but it was great even then.. we managed to cover some interesting ground there22:23
niemeyerdavecheney: He's the Aram that patched doozer for persistence, yeah22:23
niemeyer;)22:23
davecheneyniemeyer: i had a great day with rog when we went to the computer history museum22:23
niemeyerdavecheney: By the way, I've pushed a gozk branch that does the semantic change I mentioned22:23
davecheney5 hours on SF public transport left ample time for getting to know each other22:23
davecheneyniemeyer: sweet, i'll go get -u now22:24
niemeyerdavecheney: I didn't submit yet, but if you LGTM it I'll push it on22:24
davecheneyniemeyer: does the notification go to gophers ?22:24
davecheneyi haven't seen an email22:24
niemeyerdavecheney: I'd hope so22:24
davecheneyi guess not22:24
davecheneylet me double check22:25
davecheneyhttps://codereview.appspot.com/629204422:25
davecheneybut no email, i just foudn that from your reply to my handover note22:25
niemeyerHmm22:28
niemeyerWeird22:28
davecheneyam i a member of golang-gophers? or just the juju project ?22:28
niemeyerdavecheney: I'm somewhat concerned with the lack of tests in the provisioner brancher.. there are tons of edge cases there that are being carefully considered but untested22:40
niemeyerdavecheney: I'm sure you've tested by hand or at least put good thought on these edge cases22:41
davecheneyniemeyer: yes, i wonder how I can decompose the functions to test them22:42
niemeyerdavecheney: Have you used TDD before?22:42
davecheneynope22:42
niemeyerdavecheney: Ok.. there are a couple of good books that might be useful.. I like the one from Kent Beck, but just last week I've received good feedback on Growing Object-Oriented Software, Guided by Tests by Steve Freeman22:43
niemeyerdavecheney: I suspect Kent Beck might be more to-the-point in terms of TDD specifically, though22:43
niemeyerdavecheney: Regarding decomposing the functions, that may not be necessary22:44
niemeyerdavecheney: I'm more concerned about testing the real edge cases than the *implementation*22:44
niemeyerdavecheney: A simple example: if a misconfigured environment somehow arrives, the new configuration is ignored, but a follow up configuration actually takes place22:45
niemeyerdavecheney: We can integrate this branch before that, though.. I'm happy to have those increments nicely done on top of that, given that what we have in place was well debated over already22:46
davecheneyniemeyer: cool22:46
niemeyerdavecheney: Right now I'm just doing some minor commenting on trivial stuff like log messages and whatnot22:46
davecheneyniemeyer: ... wondering how to observe a misconfigured environment being rejected22:47
niemeyerdavecheney: What we care about is not that it is rejected, but that the provisioner itself stays up22:47
niemeyerdavecheney: and that a follow up correct configuration is loaded22:48
davecheneyniemeyer: gotcha22:48
davecheneyunderstood22:48
davecheneymaking a list now22:49
davecheney* provisioning does not occur with broken env22:49
davecheney* provisioning does occur when env is valid, then broken22:49
davecheney* provisioning does occur when env is valid, then broken, then valid22:49
davecheneyniemeyer: are you comfortable with me integrating those into the woodenman branch ?22:50
niemeyerdavecheney: woodenman? Do we already have another branch up? Sorry, I'm still catching up22:50
davecheneyyeah, strawman is the basic provisioning agent that just obseverves environment changes22:51
davecheneywoodenman is the follow on that actually pokes the Environ when it needs to add machines, etc22:51
niemeyerdavecheney: I'd prefer to fix these outstanding issues before we increase the functionality22:52
niemeyerdavecheney: We have quite a few pending things there22:52
davecheneysure22:52
niemeyerdavecheney: Tests, state issues within the loop (maybe?), state reconnection22:52
davecheneyok22:52
niemeyerdavecheney: If we add more logic, we'll be increasing the debt22:53
niemeyerdavecheney: It's not clear to me we need IsValid anymore, btw, assuming the gozk branch22:53
niemeyerdavecheney: We'll have to think about it..22:53
niemeyerdavecheney: Well.. and maybe a test22:53
davecheneyniemeyer: no, as long as the watchers close, then I can return to the Run function, tear everything down, and start again22:54
davecheneyniemeyer: re: gozk, I guess that looks good22:56
davecheneyi don't think i can comment authoratively22:57
niemeyerdavecheney: Actually, we may still need a note from the state23:02
davecheneyniemeyer: that is what I thought of from IsValid()23:02
niemeyerdavecheney: Yeah, may be good to be explicit23:02
davecheneyso the innerLoop becomes for state.IsValid() { .... }23:03
niemeyerdavecheney: Yeah, or IsConnected23:03
davecheneyniemeyer: yup, i'm not fussed about the name23:04
niemeyerdavecheney: I know, just brainstorming as we go23:04
davecheneyI had the idea that that would return false after some event that caused the state to be 'broken'23:04
niemeyerdavecheney: We can watch the session channel for that23:05
niemeyerdavecheney: Should be an easy walk23:05
niemeyerdavecheney: Anything returning event.Ok() != true can set the flag to red23:05
niemeyerdavecheney: Actually, now that I think of it.. I don't think the complexity of machinesChanges and environChanges makes sense anymore, with those decisions23:08
niemeyerdavecheney: Just imagine in which circumstances these channels will break23:09
davecheneyniemeyer: you mean making them recreate themselves23:09
niemeyerdavecheney: Oh, duh.. please ignore me23:09
niemeyerdavecheney: No, wait.. I'm confused23:09
niemeyerdavecheney: These channels are internally reestablished..23:10
niemeyerdavecheney: Yeah, the initial idea seems to proceed23:10
niemeyerdavecheney: We only need to recreate on !ok, right?23:10
davecheneyniemeyer: they are only recreated if, a, they were nil to begin with (just started up) or b, their Stop() method was called, in response to them being closed23:13
niemeyerdavecheney: Yeah, in that second scenario, it doesn't really make sense to bring them back23:14
niemeyerdavecheney: If they're dead, the state itself must be dead too23:14
davecheneyniemeyer: with your change, that is now true23:14
niemeyerdavecheney: That said, it's a trivial simplification we can do in a second moment.. not hurting reliability, so let's move on23:15
davecheneythey anre't recreated util you go through the loop again, so if the loop has a condition that is false if the state is closed23:15
davecheneythey wont' be recreated23:15
niemeyerdavecheney: It was always true..23:15
niemeyerdavecheney: We've changed !ok to happen more frequently, but it was always the case that with !ok the state is dead23:16
davecheneyniemeyer: absolutely, just those channels never closed23:16
niemeyerdavecheney: Exactly, and stop is only called when they closed23:16
davecheneyso, we can use !ok as a proxy for state is closed23:16
davecheneyok, that makes things simpler23:16
niemeyerdavecheney: Yeah, I think so too23:17
davecheneyif a watcher closes, it's underlying state is closed, so collapse back to the top, cleaning up as we go, then start again23:17
niemeyerdavecheney: Right23:17
niemeyerdavecheney: I think we pretty much never have to retry in place23:17
niemeyerdavecheney: These scenarios are edge cases anyway, and we need to handle harsher scenarios too23:17
niemeyerdavecheney: So we can safely handle hiccups in conservative ways23:18
davecheneyniemeyer: i also wanted to ask you about retring23:18
davecheneyretrying23:18
niemeyerdavecheney: and proceed as if they were major breakups23:18
davecheneyroger suggested there was some retry logic in the ec2 code, but unless he's talking about goamz, I couldn't find it23:18
niemeyerdavecheney: Hopefully we'll also be better off when the major break does happen23:18
niemeyerdavecheney: No, there is indeed, inside environs/ec223:19
davecheneygrep -i -r retry didn't help me, i'll try again23:19
niemeyerdavecheney: grep for shortAttempt23:19
davecheneyok23:19
niemeyerdavecheney: Should give you the seed23:19
davecheneyi want to reuse that for the loop at the top of the PA, so we dont' jump straight back in23:19
niemeyerdavecheney: Nice; feel free to refactor it off23:20
davecheneyniemeyer: ok23:20
davecheneyniemeyer: https://launchpad.net/~gophers << i'm still pending approval23:22
davecheney:(23:22
niemeyerdavecheney: Hah, sorry23:22
niemeyerdavecheney: That explains it23:22
* davecheney feels slighted23:22
niemeyerdavecheney: Ok, review delivered23:22
davecheneythank you very much23:23
davecheneywho is going to look at IsConnected ?23:23
niemeyerdavecheney: I think the branch can go in with those changes, but I'm fine as well if you decide to refactor it further with some of these ideas we just discussed23:23
davecheneyniemeyer: I would liek to land it today, if there are no objections, then follow up with the other things we have discussed23:24
niemeyerdavecheney: Feel free to do it if you feel like it, or we can ask TheMue to have a look at it23:24
davecheneyniemeyer: re IsConneced, i'll take a look today and hand over to TheMue at 4pm if I get stuck23:24
niemeyerdavecheney: Okay, so let's move ahead.. fixing the comments/messages/etc, so we can get it in with a state we're both happy with23:25
davecheneyok23:25
niemeyerdavecheney: Okay.. the idea is really simple: we have a loop with event, ok <- session in open.go already.. we just have to add a check to see if event.Ok() for each event received, and set a protected variable in case it's false23:25
niemeyerdavecheney: You can find some Stop/Start tests within zk_test.go that may be useful23:26
niemeyerdavecheney: Look for Reconnect in the test name23:26
niemeyer/ .. but we take all session events that occur before a session is established23:27
niemeyeras errors.23:27
davecheneyniemeyer: in state/open.go ?23:27
niemeyerdavecheney: Hmm23:27
niemeyerdavecheney: The comment seems clear.. all session event on non-session watches are fatal23:28
davecheneyi guess i don't understand what a zk session is23:28
niemeyerdavecheney: THere are two kinds of watches: a requested watch (e.g. GetW), and the session watch that is obtained via Dial23:29
niemeyerdavecheney: Both of these receive events23:29
davecheneyso a session watch observes everything, a getw is scoped to a path ?23:29
niemeyerdavecheney: The session watch receive *only* connectivity state changes23:29
davecheneyahh, of course, events about this session, this connection23:30
niemeyerdavecheney: The session watch receives both these and the actual requested watch23:30
niemeyerdavecheney: Yeah.. I call them session events because they actually have a code of EVENT_SESSION23:30
niemeyerdavecheney: It is confusing indeed, sorry23:31
niemeyerdavecheney: Is there a way I can improve that comment in a more understandable way?23:31
davecheneyniemeyer: no, it makes sense now.23:32
davecheneyso if you're a watcher, and you receive an EVENT_SESSION, it's a signal that you should close23:33
davecheneyyour comment is correct23:33
davecheneyafk 15 mins23:36
niemeyerdavecheney:23:38
niemeyer                // All session events on non-session watches will be delivered23:38
niemeyer                // and cause the watch to be closed early. We purposefully do23:38
niemeyer                // that to enforce a simpler model that takes hiccups as23:38
niemeyer                // important events that cause code to reestablish the state23:38
niemeyer                // from a pristine and well known good start.23:38
niemeyer                if event.State == STATE_CONNECTED {23:38
niemeyer                        // That means the watch was established while we were still23:38
niemeyer                        // connecting to zk, but we're somewhat strict about only23:38
niemeyer                        // dealing with watches when in a well known good state.23:38
niemeyer                        event.State = STATE_CONNECTING23:38
niemeyer                }23:39
niemeyerdavecheney: Hope that's more understandable23:39
davecheney+1e923:45
davecheneyniemeyer: my only change would be23:45
davecheney // important events which cause code to reestablish the state23:46

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