Author: phunt
Date: Wed May  5 21:53:04 2010
New Revision: 941510

URL: http://svn.apache.org/viewvc?rev=941510&view=rev
Log:
ZOOKEEPER-763. Deadlock on close w/ zkpython / c client

Added:
    hadoop/zookeeper/trunk/src/contrib/zkpython/src/test/close_deadlock_test.py
Modified:
    hadoop/zookeeper/trunk/CHANGES.txt
    hadoop/zookeeper/trunk/src/contrib/zkpython/src/c/zookeeper.c
    hadoop/zookeeper/trunk/src/contrib/zkpython/src/test/acl_test.py

Modified: hadoop/zookeeper/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/CHANGES.txt?rev=941510&r1=941509&r2=941510&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/CHANGES.txt (original)
+++ hadoop/zookeeper/trunk/CHANGES.txt Wed May  5 21:53:04 2010
@@ -49,6 +49,9 @@ BUGFIXES: 
   ZOOKEEPER-764. Observer elected leader due to inconsistent voting view 
   (henry via mahadev)
 
+  ZOOKEEPER-763. Deadlock on close w/ zkpython / c client
+  (henry via phunt)
+
 IMPROVEMENTS:
   ZOOKEEPER-724. Improve junit test integration - log harness information 
   (phunt via mahadev)

Modified: hadoop/zookeeper/trunk/src/contrib/zkpython/src/c/zookeeper.c
URL: 
http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/contrib/zkpython/src/c/zookeeper.c?rev=941510&r1=941509&r2=941510&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/contrib/zkpython/src/c/zookeeper.c (original)
+++ hadoop/zookeeper/trunk/src/contrib/zkpython/src/c/zookeeper.c Wed May  5 
21:53:04 2010
@@ -1258,12 +1258,15 @@ PyObject *pyzoo_set_acl(PyObject *self, 
 /* Closes a connection, returns integer error code */
 PyObject *pyzoo_close(PyObject *self, PyObject *args)
 {
-  int zkhid;
+  int zkhid, ret;
   if (!PyArg_ParseTuple(args, "i", &zkhid)) {
     return NULL;
   }
   CHECK_ZHANDLE(zkhid);
-  int ret = zookeeper_close(zhandles[zkhid]);
+  zhandle_t *handle = zhandles[zkhid];
+  Py_BEGIN_ALLOW_THREADS
+  ret = zookeeper_close(handle);
+  Py_END_ALLOW_THREADS
   zhandles[zkhid] = NULL; // The zk C client frees the zhandle
   return Py_BuildValue("i", ret);
 }

Modified: hadoop/zookeeper/trunk/src/contrib/zkpython/src/test/acl_test.py
URL: 
http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/contrib/zkpython/src/test/acl_test.py?rev=941510&r1=941509&r2=941510&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/contrib/zkpython/src/test/acl_test.py (original)
+++ hadoop/zookeeper/trunk/src/contrib/zkpython/src/test/acl_test.py Wed May  5 
21:53:04 2010
@@ -103,7 +103,7 @@ class ACLTest(zktestbase.TestBase):
                         "/zk-python-aclverifytest",
                         "",
                         invalid_acl,
-                        zookeeper.EPHEMERAL))
+                        zookeeper.EPHEMERAL)
 
 if __name__ == '__main__':
     unittest.main()

Added: 
hadoop/zookeeper/trunk/src/contrib/zkpython/src/test/close_deadlock_test.py
URL: 
http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/contrib/zkpython/src/test/close_deadlock_test.py?rev=941510&view=auto
==============================================================================
--- hadoop/zookeeper/trunk/src/contrib/zkpython/src/test/close_deadlock_test.py 
(added)
+++ hadoop/zookeeper/trunk/src/contrib/zkpython/src/test/close_deadlock_test.py 
Wed May  5 21:53:04 2010
@@ -0,0 +1,50 @@
+#!/usr/bin/python
+#
+#  Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+
+#     http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import zookeeper, zktestbase, unittest, threading
+import time
+
+
+class CloseDeadlockTest(zktestbase.TestBase):
+  """
+  This tests for the issue found in
+  https://issues.apache.org/jira/browse/ZOOKEEPER-763
+
+  zookeeper.close blocks on waiting for all completions to
+  finish. Previously it was doing so while holding teh GIL, stopping
+  any completions from actually continuing.
+
+  This test is a failure if it does not exit within a few seconds.
+  """
+  def deadlock():
+    cv = threading.Condition()
+
+    def callback(*args):
+        cv.acquire()
+        cv.notifyAll()
+        cv.release()
+        time.sleep(1)
+
+    cv.acquire()
+    zookeeper.aget(handle, "/", None, callback)
+    cv.wait()
+    zookeeper.close(handle)
+
+
+if __name__ == '__main__':
+  unittest.main()


Reply via email to