17118: Changes the way exception raising is done on PySDK's KeepWriterThread.
authorLucas Di Pentima <lucas@di-pentima.com.ar>
Tue, 22 Dec 2020 15:41:01 +0000 (12:41 -0300)
committerLucas Di Pentima <lucas@di-pentima.com.ar>
Tue, 22 Dec 2020 15:41:01 +0000 (12:41 -0300)
This solves the OOM bug where some keepstores fail when uploading data.

Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <lucas@di-pentima.com.ar>

sdk/python/arvados/keep.py

index bc43b849c3a01dd661c4ba080d83f65f597adde6..bd0e5dc1e686befa94e815396bb5d5a208ca9c1d 100644 (file)
@@ -648,7 +648,7 @@ class KeepClient(object):
 
 
     class KeepWriterThread(threading.Thread):
-        TaskFailed = RuntimeError()
+        class TaskFailed(RuntimeError): pass
 
         def __init__(self, queue, data, data_hash, timeout=None):
             super(KeepClient.KeepWriterThread, self).__init__()
@@ -667,7 +667,7 @@ class KeepClient(object):
                 try:
                     locator, copies = self.do_task(service, service_root)
                 except Exception as e:
-                    if e is not self.TaskFailed:
+                    if not isinstance(e, self.TaskFailed):
                         _logger.exception("Exception in KeepWriterThread")
                     self.queue.write_fail(service)
                 else:
@@ -687,7 +687,7 @@ class KeepClient(object):
                                   self.data_hash,
                                   result['status_code'],
                                   result['body'])
-                raise self.TaskFailed
+                raise self.TaskFailed()
 
             _logger.debug("KeepWriterThread %s succeeded %s+%i %s",
                           str(threading.current_thread()),