hadoop-zookeeper-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Chris Darroch (JIRA)" <j...@apache.org>
Subject [jira] Created: (ZOOKEEPER-318) remove locking in zk_hashtable.c or add locking in collect_keys()
Date Tue, 17 Feb 2009 20:52:59 GMT
remove locking in zk_hashtable.c or add locking in collect_keys()
-----------------------------------------------------------------

                 Key: ZOOKEEPER-318
                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-318
             Project: Zookeeper
          Issue Type: Bug
          Components: c client
    Affects Versions: 3.1.0, 3.0.1, 3.0.0
            Reporter: Chris Darroch
             Fix For: 3.2.0, 4.0.0
         Attachments: zk_hashtable.patch

>From a review of zk_hashtable.c it appears to me that all functions which manipulate the
hashtables are called from the IO thread, and therefore any need for locking is obviated.

If I'm wrong about that, then I think at a minimum collect_keys() should acquire a lock in
the same manner as collect_session_watchers().  Both iterate over hashtable contents (in the
latter case using copy_table()).

However, from what I can see, the only function (besides the init/destroy functions used when
creating a zhandle_t) called from the completion thread is deliverWatchers(), which simply
iterates over a "delivery" list created from the hashtables by collectWatchers().  The activateWatcher()
function contains comments which describe it being called by the completion thread, but in
fact it is called by the IO thread in zookeeper_process().

I believe all calls to collectWatchers(), activateWatcher(), and collect_keys() are made by
the IO thread in zookeeper_interest(), zookeeper_process(), check_events(), send_set_watches(),
and handle_error().  Note that queue_session_event() is aliased as PROCESS_SESSION_EVENT,
but appears only in handle_error() and check_events().

Also note that handle_error() is called only in zookeeper_process() and handle_socket_error_msg(),
which is used only by the IO thread, so far as I can see.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message