[ARVADOS] created: 51641ba5579cb9ebe14234e0888a162b46d1627d
git at public.curoverse.com
git at public.curoverse.com
Fri Jul 24 14:09:35 EDT 2015
at 51641ba5579cb9ebe14234e0888a162b46d1627d (commit)
commit 51641ba5579cb9ebe14234e0888a162b46d1627d
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date: Fri Jul 24 14:08:18 2015 -0400
6706: Bonus websockets bugfix, close connection immediately instead of waiting
for server shutdown response that might never come, then block until websocket
thread is in terminate state.
diff --git a/sdk/python/arvados/events.py b/sdk/python/arvados/events.py
index e319be3..15bcf2c 100644
--- a/sdk/python/arvados/events.py
+++ b/sdk/python/arvados/events.py
@@ -28,6 +28,7 @@ class EventClient(WebSocketClient):
super(EventClient, self).__init__(url, ssl_options=ssl_options)
self.filters = filters
self.on_event = on_event
+ self.stop = threading.Event()
self.last_log_id = last_log_id
def opened(self):
@@ -36,12 +37,14 @@ class EventClient(WebSocketClient):
def received_message(self, m):
self.on_event(json.loads(str(m)))
- def close_connection(self):
- try:
- self.sock.shutdown(socket.SHUT_RDWR)
- self.sock.close()
- except:
- pass
+ def closed(self, code, reason=None):
+ self.stop.set()
+
+ def close(self, code=1000, reason=''):
+ super(EventClient, self).close(code, reason)
+ self.close_connection()
+ while not self.stop.is_set():
+ self.stop.wait(1)
def subscribe(self, filters, last_log_id=None):
m = {"method": "subscribe", "filters": filters}
diff --git a/services/fuse/arvados_fuse/__init__.py b/services/fuse/arvados_fuse/__init__.py
index de0bf72..c4b9f7e 100644
--- a/services/fuse/arvados_fuse/__init__.py
+++ b/services/fuse/arvados_fuse/__init__.py
@@ -327,7 +327,7 @@ class Operations(llfuse.Operations):
@catch_exceptions
def destroy(self):
if self.events:
- self.events.terminate()
+ self.events.close()
self.events = None
self.inodes.clear()
commit 0ae899078093ac04cfdf416940f4faa821400641
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date: Fri Jul 24 11:42:58 2015 -0400
6706: Fixup websocket tests of PollClient
diff --git a/sdk/python/tests/test_websockets.py b/sdk/python/tests/test_websockets.py
index fc246ac..ffa310b 100644
--- a/sdk/python/tests/test_websockets.py
+++ b/sdk/python/tests/test_websockets.py
@@ -74,7 +74,8 @@ class WebsocketTest(run_test_server.TestCaseWithServers):
additional_filters=[['created_at', '>=', lastHour.strftime('%Y-%m-%d')]])
@mock.patch('arvados.events.EventClient.__init__')
- def test_poll_websocket_with_start_time_date_only(self, event_client_constr):
+ def test_poll_with_start_time_date_only(self, event_client_constr):
+ event_client_constr.side_effect = Exception('All is well')
lastHour = datetime.today() - timedelta(hours = 1)
self._test_subscribe(
poll_fallback=1, expect_type=arvados.events.PollClient, last_log_id=1,
@@ -88,6 +89,7 @@ class WebsocketTest(run_test_server.TestCaseWithServers):
@mock.patch('arvados.events.EventClient.__init__')
def test_subscribe_poll_with_start_time_last_hour(self, event_client_constr):
+ event_client_constr.side_effect = Exception('All is well')
lastHour = datetime.today() - timedelta(hours = 1)
self._test_subscribe(
poll_fallback=1, expect_type=arvados.events.PollClient, last_log_id=1,
@@ -102,6 +104,7 @@ class WebsocketTest(run_test_server.TestCaseWithServers):
@mock.patch('arvados.events.EventClient.__init__')
def test_subscribe_poll_with_start_time_next_hour(self, event_client_constr):
+ event_client_constr.side_effect = Exception('All is well')
nextHour = datetime.today() + timedelta(hours = 1)
with self.assertRaises(Queue.Empty):
self._test_subscribe(
@@ -117,6 +120,7 @@ class WebsocketTest(run_test_server.TestCaseWithServers):
@mock.patch('arvados.events.EventClient.__init__')
def test_subscribe_poll_with_start_time_tomorrow(self, event_client_constr):
+ event_client_constr.side_effect = Exception('All is well')
tomorrow = datetime.today() + timedelta(hours = 24)
with self.assertRaises(Queue.Empty):
self._test_subscribe(
commit a467cb24c0a2db71c39ce1bf86507bff6f3cea05
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date: Fri Jul 24 11:31:29 2015 -0400
6706: Clear inode/inode cache dicts on destroy() instead of setting inodes to None.
diff --git a/services/fuse/arvados_fuse/__init__.py b/services/fuse/arvados_fuse/__init__.py
index b24aaa6..de0bf72 100644
--- a/services/fuse/arvados_fuse/__init__.py
+++ b/services/fuse/arvados_fuse/__init__.py
@@ -188,6 +188,11 @@ class InodeCache(object):
def find(self, uuid):
return self._by_uuid.get(uuid)
+ def clear(self):
+ self._entries.clear()
+ self._by_uuid.clear()
+ self._total = 0
+
class Inodes(object):
"""Manage the set of inodes. This is the mapping from a numeric id
to a concrete File or Directory object"""
@@ -244,6 +249,17 @@ class Inodes(object):
def invalidate_entry(self, inode, name):
llfuse.invalidate_entry(inode, name)
+ def clear(self):
+ self.inode_cache.clear()
+
+ for k,v in self._entries.items():
+ try:
+ v.finalize()
+ except Exception as e:
+ _logger.exception("Error during finalize of inode %i", k)
+
+ self._entries.clear()
+
def catch_exceptions(orig_func):
"""Catch uncaught exceptions and log them consistently."""
@@ -311,15 +327,10 @@ class Operations(llfuse.Operations):
@catch_exceptions
def destroy(self):
if self.events:
- self.events.close()
+ self.events.terminate()
self.events = None
- for k,v in self.inodes.items():
- try:
- v.finalize()
- except Exception as e:
- _logger.exception("Error during finalize of inode %i", k)
- self.inodes = None
+ self.inodes.clear()
def access(self, inode, mode, ctx):
return True
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list