[ARVADOS] updated: 84cc9874760687a061dc489f5a19db66cb06108e
git at public.curoverse.com
git at public.curoverse.com
Fri Aug 7 18:37:04 EDT 2015
Summary of changes:
apps/workbench/app/models/arvados_base.rb | 4 +
apps/workbench/app/models/user.rb | 3 +
.../application/_delete_object_button.html.erb | 2 +-
.../views/application/_show_home_button.html.erb | 3 +
.../app/views/application/_show_recent.html.erb | 18 +--
.../controllers/application_controller_test.rb | 41 ++++++
doc/install/install-api-server.html.textile.liquid | 4 +-
...nstall-manual-prerequisites.html.textile.liquid | 11 +-
sdk/python/arvados/__init__.py | 82 ++++++++----
sdk/python/arvados/arvfile.py | 4 +-
sdk/python/arvados/commands/arv_copy.py | 36 +++---
sdk/python/arvados/keep.py | 5 +-
sdk/python/arvados/retry.py | 3 +-
sdk/python/tests/test_retry.py | 6 +-
sdk/python/tests/test_websockets.py | 137 ++++++++++-----------
services/api/test/fixtures/humans.yml | 1 +
16 files changed, 219 insertions(+), 141 deletions(-)
create mode 100644 apps/workbench/app/views/application/_show_home_button.html.erb
create mode 100644 services/api/test/fixtures/humans.yml
via 84cc9874760687a061dc489f5a19db66cb06108e (commit)
via 7d04c8989b082aa32bcc0d9812950e8503fafd64 (commit)
via f8098830e4aa4623b82dc7e81531497ae2f48f07 (commit)
via 9209660a3bd951c3945bce0da2fa9195cb002e44 (commit)
via 0988acb472849dc08d576ee40493e70bde2132ca (commit)
via f46b05c041684ced4cf438ae6cade577156f81a5 (commit)
via fc851b249ea25a40a1fb392906705142113ac5b9 (commit)
via d2d7138c84a55ef87937cdaefd9c58a66916d76f (commit)
via 8fe01fcc1b88a49f1f7eff14d0435e3ac0649721 (commit)
via 8089b2f5c97b1db9bd826a1b6488f1b060830def (commit)
via 97f16e9b6ce0095a40b68781238550d066a15261 (commit)
via 43338e77fc9ac255511395d8a8b1ae4bb8c98577 (commit)
via bbf7272aa2b831102c47fc93f8966ec32e918205 (commit)
via 03d5c4df2f33c5bb2117c45869808fa018e855f1 (commit)
via 261fe4c689858952b19991e0055eda669ab144af (commit)
via 427d9052d59ca7819acba9fb2e5f381d3e44a53e (commit)
via c8bea0c6dd47a9b9a7a892602d9869177d4c231f (commit)
via 93e0931ea059355ffc26add1303a52f13d2964c9 (commit)
via 467b636f7d1b34f7695f55af972ae90132fc8063 (commit)
via 75eaaaa74a4a7ec6821008fe93dbee598ee24dee (commit)
from 4b096c9ab1a9a457b2df2ac7309b340268741665 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
commit 84cc9874760687a061dc489f5a19db66cb06108e
Author: Bryan Cosca <bcosc at curoverse.com>
Date: Fri Aug 7 18:36:53 2015 -0400
Added RetryLoop to current_task, current_job, and task_set_output with logging and retrying, and waiting 1 second between retries. Also added __init__ method to the jobclass(?) to deal with num_retries and put them in execute. Waiting for verification to see if that works, or moving to the RetryLoop model.
diff --git a/sdk/python/arvados/__init__.py b/sdk/python/arvados/__init__.py
index 1245b5a..b7b2c15 100644
--- a/sdk/python/arvados/__init__.py
+++ b/sdk/python/arvados/__init__.py
@@ -20,6 +20,7 @@ import threading
from .api import api, http_cache
from .retry import retry_method
+from retry import RetryLoop
from collection import CollectionReader, CollectionWriter, ResumableCollectionWriter
from keep import *
from stream import *
@@ -39,26 +40,43 @@ logger.setLevel(logging.DEBUG if config.get('ARVADOS_DEBUG')
else logging.WARNING)
@retry_method
-def task_set_output(self,s,num_retries=5):
- api('v1').job_tasks().update(uuid=self['uuid'],
- body={
- 'output':s,
- 'success':True,
- 'progress':1.0
- }).execute()
+def task_set_output(self,s):
+ output_retry_loop = RetryLoop(num_retries=5, backoff_start=1)
+ for tries_left in output_retry_loop:
+ try:
+ api('v1').job_tasks().update(uuid=self['uuid'],
+ body={
+ 'output':s,
+ 'success':True,
+ 'progress':1.0
+ }).execute()
+ except TemporaryError as error:
+ logger.debug("Error in task_set_output api call: {} ({} tries left)".format(error,tries_left))
+ else:
+ output_retry_loop.save_result(result)
+ if output_retry_loop.success():
+ return output_retry_loop.last_result()
_current_task = None
@retry_method
-def current_task(num_retries=5):
+def current_task():
global _current_task
if _current_task:
return _current_task
- t = api('v1').job_tasks().get(uuid=os.environ['TASK_UUID']).execute()
- t = UserDict.UserDict(t)
- t.set_output = types.MethodType(task_set_output, t)
- t.tmpdir = os.environ['TASK_WORK']
- _current_task = t
- return t
+ current_task_retry_loop = RetryLoop(num_retries=5, backoff_start=1)
+ for tries_left in current_task_retry_loop:
+ try:
+ t = api('v1').job_tasks().get(uuid=os.environ['TASK_UUID']).execute()
+ except TemporaryError as error:
+ logger.debug("Error in current_task api call: {} ({} tries left)".format(error,tries_left))
+ else:
+ current_task_retry_loop.save_result(result)
+ if current_task_retry_loop.success():
+ t = UserDict.UserDict(t)
+ t.set_output = types.MethodType(task_set_output, t)
+ t.tmpdir = os.environ['TASK_WORK']
+ _current_task = t
+ return t
_current_job = None
@retry_method
@@ -66,11 +84,19 @@ def current_job(num_retries=5):
global _current_job
if _current_job:
return _current_job
- t = api('v1').jobs().get(uuid=os.environ['JOB_UUID']).execute()
- t = UserDict.UserDict(t)
- t.tmpdir = os.environ['JOB_WORK']
- _current_job = t
- return t
+ current_job_retry_loop = RetryLoop(num_retries=5, backoff_start=1)
+ for tries_left in current_job_retry_loop:
+ try:
+ t = api('v1').jobs().get(uuid=os.environ['JOB_UUID']).execute()
+ except TemporaryError as error:
+ logger.debug("Error in current_job api call: {} ({} tries left)".format(error,tries_left))
+ else:
+ current_job_retry_loop.save_result(result)
+ if current_job_retry_loop.success():
+ t = UserDict.UserDict(t)
+ t.tmpdir = os.environ['JOB_WORK']
+ _current_job = t
+ return t
def getjobparam(*args):
return current_job()['script_parameters'].get(*args)
@@ -87,11 +113,12 @@ class JobTask(object):
class job_setup:
@retry_method
- def _add_task(self, num_retries=5):
- return
+ def __init__(self, num_retries=5):
+ self.num_retries = num_retries
+ @retry_method
@staticmethod
- def one_task_per_input_file(if_sequence=0, and_end_task=True, input_as_path=False, api_client=None):
+ def one_task_per_input_file(if_sequence=0, and_end_task=True, input_as_path=False, api_client=None, num_retries=None):
if if_sequence != current_task()['sequence']:
return
@@ -115,15 +142,16 @@ class job_setup:
'input':task_input
}
}
- api_client.job_tasks().create(body=new_task_attrs).execute()._add_task()
+ api_client.job_tasks().create(body=new_task_attrs).execute(num_retries)
if and_end_task:
api_client.job_tasks().update(uuid=current_task()['uuid'],
body={'success':True}
- ).execute()._add_task()
+ ).execute(num_retries)
exit(0)
+ @retry_method
@staticmethod
- def one_task_per_input_stream(if_sequence=0, and_end_task=True):
+ def one_task_per_input_stream(if_sequence=0, and_end_task=True, num_retries=None):
if if_sequence != current_task()['sequence']:
return
job_input = current_job()['script_parameters']['input']
@@ -138,9 +166,9 @@ class job_setup:
'input':task_input
}
}
- api('v1').job_tasks().create(body=new_task_attrs).execute()._add_task()
+ api('v1').job_tasks().create(body=new_task_attrs).execute(num_retries)
if and_end_task:
api('v1').job_tasks().update(uuid=current_task()['uuid'],
body={'success':True}
- ).execute()._add_task()
+ ).execute(num_retries)
exit(0)
commit 7d04c8989b082aa32bcc0d9812950e8503fafd64
Merge: 4b096c9 f809883
Author: Bryan Cosca <bcosc at curoverse.com>
Date: Fri Aug 7 14:28:49 2015 -0400
Merge branch '6844-py-mem-leak' of git.curoverse.com:arvados into 6600-pysdk-api-retries
Get memory-leak fix
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list