[
https://issues.apache.org/jira/browse/ZOOKEEPER-1108?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13084920#comment-13084920
]
Mahadev konar commented on ZOOKEEPER-1108:
------------------------------------------
Dheeraj,
Looks like you added, the new state of NOT_CONNECTED_STATE in the header
definitions. That probably needs a little more work, since the java client will
need to have similar changes? I'd say we get rid of the new state in this
patch? Makes sense?
> Various bugs in zoo_add_auth in C
> ---------------------------------
>
> Key: ZOOKEEPER-1108
> URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1108
> Project: ZooKeeper
> Issue Type: Bug
> Components: c client
> Affects Versions: 3.3.3
> Reporter: Dheeraj Agrawal
> Assignee: Dheeraj Agrawal
> Priority: Blocker
> Fix For: 3.4.0
>
> Attachments: ZOOKEEPER-1108.patch, ZOOKEEPER-1108.patch,
> ZOOKEEPER-1108.patch, ZOOKEEPER-1108.patch
>
>
> 3 issues:
> In zoo_add_auth: there is a race condition:
> 2940 // [ZOOKEEPER-800] zoo_add_auth should return ZINVALIDSTATE if
> 2941 // the connection is closed.
> 2942 if (zoo_state(zh) == 0) {
> 2943 return ZINVALIDSTATE;
> 2944 }
> when we do zookeeper_init, the state is initialized to 0 and above we check
> if state = 0 then throw exception.
> There is a race condition where the doIo thread is slow and has not changed
> the state to CONNECTING, then you end up returning back ZKINVALIDSTATE.
> The problem is we use 0 for CLOSED state and UNINITIALIZED state. in case of
> uninitialized case it should let it go through.
> 2nd issue:
> Another Bug: in send_auth_info, the check is not correct
> while (auth->next != NULL) { //--BUG: in cases where there is only one auth
> in the list, this will never send that auth, as its next will be NULL
> rc = send_info_packet(zh, auth);
> auth = auth->next;
> }
> FIX IS:
> do {
> rc = send_info_packet(zh, auth);
> auth = auth->next;
> } while (auth != NULL); //this will make sure that even if there is one auth
> ,that will get sent.
> 3rd issue:
> 2965 add_last_auth(&zh->auth_h, authinfo);
> 2966 zoo_unlock_auth(zh);
> 2967
> 2968 if(zh->state == ZOO_CONNECTED_STATE || zh->state ==
> ZOO_ASSOCIATING_STATE)
> 2969 return send_last_auth_info(zh);
> if it is connected, we only send the last_auth_info, which may be different
> than the one we added, as we unlocked it before sending it.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira