I vaguely remember that sync might be called already when a client successfully connects. Don't remember where to look for it though, maybe someone else knows ?
Alex On Fri, Dec 6, 2013 at 4:08 PM, kishore g <[email protected]> wrote: > Nice, it looks like that JIRA covers more use cases. Looks like it requires > lot of changes. > > For the usecase, I described how about simply calling sync under the hood > when a client disconnects from one server and reconnects to another server > before the session expires or atleast we suggest this as work around on the > client side. > > thanks, > Kishore G > > > On Thu, Dec 5, 2013 at 8:11 AM, Alexander Shraer <[email protected]> wrote: > >> I think this is https://issues.apache.org/jira/browse/ZOOKEEPER-22 >> >> On Wed, Dec 4, 2013 at 8:50 PM, kishore g <[email protected]> wrote: >> > Thanks Camille, Is it not violating the assumption that a client reads >> its >> > own write (probably its ok in this case because client never got the ack >> > for write from server) >> > >> > Consider the following simple code where one wants to know if something >> was >> > successfully written. >> > >> > boolean success; >> > try{ >> > zk.write(p) >> > success= true; >> > }catch(Exception e) >> > { >> > //cannot assume write did not go through >> > //read the value and see if you really wrote it >> > success = zk.exists(p) && zk.readStat(p).owner == me >> > } >> > >> > Looks like if the connection breaks at zk.write(p), success can either be >> > true or false. Probably the only way to make sure write was successful is >> > try writing again when there is exception. >> > >> > Does this make sense? >> > >> > thanks, >> > Kishore G >> > >> > >> > >> > >> > >> > >> > >> > On Wed, Dec 4, 2013 at 6:12 PM, Camille Fournier <[email protected]> >> wrote: >> > >> >> As far as I can tell from the code: >> >> c1 will send its last seen zxid to the server that it is trying to >> connect >> >> to. If that zxid is greater than the zxid of the server, the server will >> >> refuse the connection. In this case, if the client has not seen an ack, >> it >> >> is certainly possible that the last zxid seen will be the same as the >> zxid >> >> of the server it is connected to, so it will not see the result of w1 >> yet. >> >> >> >> C >> >> >> >> >> >> On Wed, Dec 4, 2013 at 3:37 PM, kishore g <[email protected]> wrote: >> >> >> >> > Hi, >> >> > >> >> > Consider the following case >> >> > >> >> > >> >> > 1. Client c1 sends a write(w1) to zk1 >> >> > 2. w1 gets ack from zk2 but not yet from zk3, but quorum is reached >> >> > 3. By the time zk1 sends response back to c1, the connection breaks >> >> > 4. c1 did not get the zxid for the latest transaction >> >> > >> >> > Now c1, depending on whether it connects to zk2 or zk3 might see that >> w1 >> >> > was successful or failure. Is this analysis correct or will c1 >> >> > automatically invoke a sync under the hoods when it gets disconnected >> and >> >> > connected to another server? >> >> > >> >> > If no, how should one handle this scenario. >> >> > Thanks, >> >> > Kishore G >> >> > >> >> >>
