ZooKeeper provides a session-coherent single system image guarantee. Any
request from the same session will see the results of all of its writes,
regardless of which server it connects to. See:
http://zookeeper.apache.org/doc/r3.4.6/zookeeperProgrammers.html#ch_zkGuarantees

So, if your session deletes, and the delete is successfully processed by
the quorum, you will not see the path that you have deleted no matter what
server your session connects to. I believe in practice that this means that
the ZK servers that might be behind your session (say server 2 is lagging
behind a few commits) will refuse to allow your session to connect to it,
so that you will not see stale data.

This means that the example Lokesh gave:

"1. Quorum leader has forwarded request to zkserver-2 for "delete /path".
2. If your client connects to "zkserver-2" after step 1 is executed (get
/path). Then your "/path" will not be available.
3. If your client connects to "zkserver-2" before step1 is executed (get
/path) then your "/path" would be available and after some time your path
would not be available (after zkserver-2 is synched with the leader)"

Cannot happen, so long as you are in the same session.

C

On Tue, Aug 4, 2015 at 6:49 AM, Lokesh Shrivastava <
[email protected]> wrote:

> I think it depends on whether your request reaches zkserver-1 and whether
> it is able to send the request to quorum leader. Considering that "delete
> /path" request has reached the quorum leader then following may happen
>
> 1. Quorum leader has forwarded request to zkserver-2 for "delete /path".
> 2. If your client connects to "zkserver-2" after step 1 is executed (get
> /path). Then your "/path" will not be available.
> 3. If your client connects to "zkserver-2" before step1 is executed (get
> /path) then your "/path" would be available and after some time your path
> would not be available (after zkserver-2 is synched with the leader)
>
> Others can correct me if this is not how it works.
>
> Thanks.
> Lokesh
>
> On 4 August 2015 at 12:09, [email protected] <[email protected]>
> wrote:
>
> > Hi,
> >      I'm thinking about a program desgin with libzookeeper, here is my
> > doubts:
> >
> >     1) first, I connnect to zkserver-1, and there exists the path
> "/path".
> >     2) I sends "delete /path", the request reaches(may not, i don't know
> > about that) zkserver-1 and dont't know whether this effected, and then
> lost
> > connection before response returns.
> >     3) reconnect the same session to zkserver-2,  and I sends "get
> /path".
> >
> >     which one will the "get /path" return possibly :
> >     1, "not exists"
> >     2, "exists" and "always exists"
> >     3, "exists" and "not exists" afterwards
> >
> >     my biggist problem is wether the 3) will occur or not, thanks!
> >
> >
> >
> >
> > [email protected]
> >
>

Reply via email to