[
https://issues.apache.org/jira/browse/ZOOKEEPER-3471?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16947091#comment-16947091
]
Fangmin Lv commented on ZOOKEEPER-3471:
---------------------------------------
Hi Michael, sorry for the lately reply, just saw your comment here.
Here is the detailed flow for this issue:
# client created a local session s1
# it then issued create ephemeral node request, which will go through the
FollowerRequestProcessor, check and upgrade the session
# but before it's finished checking, the client issued close session request
immediately, which will be treated as a local session
# in case the previous upgrading session is finished and committed, then
executing the local close session in step 3 in FinalRequestProcessor,
[LearnerSessionTracker|[https://github.com/apache/zookeeper/blob/master/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/LearnerSessionTracker.java#L76]]
will remove it from both local session and global session
# so the global session will miss on this learner, but exists on others.
Let me know if this is not clear.
> Potential lock unavailable due to dangling ephemeral nodes left during local
> session upgrading
> ----------------------------------------------------------------------------------------------
>
> Key: ZOOKEEPER-3471
> URL: https://issues.apache.org/jira/browse/ZOOKEEPER-3471
> Project: ZooKeeper
> Issue Type: Bug
> Components: server
> Affects Versions: 3.6.0
> Reporter: Fangmin Lv
> Assignee: Fangmin Lv
> Priority: Critical
> Labels: pull-request-available
> Fix For: 3.6.0
>
> Time Spent: 1h
> Remaining Estimate: 0h
>
> There is a race condition which might be triggered if the client create
> session, upgrading the session with ephemeral node, then immediately issued
> close session request before it's removed from local session tracker.
>
> The close session request will be treated as a local session close request
> since it still exists in the local session tracker, which goes through the ZK
> pipeline and delete the session from both local and global session tracker.
> Since the session is not tracked anymore, it will leave the ephemeral nodes
> there.
>
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)