[ https://issues.apache.org/jira/browse/ZOOKEEPER-108?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12619147#action_12619147 ]
Flavio Paiva Junqueira commented on ZOOKEEPER-108: -------------------------------------------------- When calling sync() with multiple asynchronous requests pending, a zookeeper server delivers the requests out of order. For example, if a client submits a request, say an asynchronous create, followed by a sync, then the zookeeper server the client is connected to might deliver the sync and create in the inverse order, causing the client to drop the connection. This happens because pendingSyncs in CommitProcessor is updated in the wrong place. In the attached patch, I have moved pendingSyncs to FollowerZooKeeperServer, and have made pendingSyncs thread safe by using a ConcurrentLinkedQueue. Note that there is also code on Leader.java to handle syncs, and I have added code to process syncs locally in the case the client is connected to the leader. > sync implementation reorders operations > --------------------------------------- > > Key: ZOOKEEPER-108 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-108 > Project: Zookeeper > Issue Type: Bug > Components: server > Reporter: Flavio Paiva Junqueira > Assignee: Flavio Paiva Junqueira > Attachments: ZOOKEEPER-108.patch > > > The current implementation of sync is broken. There is a race condition that > causes a follower to return operations out of order, causing clients to drop > their connections to a server. > I'll be attaching a patch to fix this problem shortly. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.