[ARVADOS] updated: 8820ca5276510fd4ffad4040603508f2dd6ef3fa
Git user
git at public.curoverse.com
Wed Apr 27 11:57:43 EDT 2016
Summary of changes:
sdk/python/arvados/commands/put.py | 42 ++++++++++++++++++--------------------
sdk/python/tests/test_arv_put.py | 5 +++--
2 files changed, 23 insertions(+), 24 deletions(-)
via 8820ca5276510fd4ffad4040603508f2dd6ef3fa (commit)
from 3fc755d673dbdb29e467e26d8124f3c7d6eaab6a (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 8820ca5276510fd4ffad4040603508f2dd6ef3fa
Author: radhika <radhika at curoverse.com>
Date: Wed Apr 27 11:56:01 2016 -0400
8937: refactor cache check logic into a check_cache method and update all references.
diff --git a/sdk/python/arvados/commands/put.py b/sdk/python/arvados/commands/put.py
index 8fa1c8f..d3510db 100644
--- a/sdk/python/arvados/commands/put.py
+++ b/sdk/python/arvados/commands/put.py
@@ -197,25 +197,10 @@ class ResumeCacheConflict(Exception):
class ResumeCache(object):
CACHE_DIR = '.cache/arvados/arv-put'
- def __init__(self, file_spec, api_client=None, num_retries=0):
+ def __init__(self, file_spec):
self.cache_file = open(file_spec, 'a+')
self._lock_file(self.cache_file)
self.filename = self.cache_file.name
- try:
- state = self.load()
- locator = None
- try:
- if "_finished_streams" in state and len(state["_finished_streams"]) > 0:
- locator = state["_finished_streams"][0][1][0]
- elif "_current_stream_locators" in state and len(state["_current_stream_locators"]) > 0:
- locator = state["_current_stream_locators"][0]
- if locator is not None:
- kc = arvados.keep.KeepClient(api_client=api_client)
- kc.head(locator, num_retries=num_retries)
- except Exception as e:
- raise arvados.errors.KeepRequestError("Head request error for {}: {}".format(locator, e))
- except (ValueError):
- pass
@classmethod
def make_path(cls, args):
@@ -241,6 +226,23 @@ class ResumeCache(object):
self.cache_file.seek(0)
return json.load(self.cache_file)
+ def check_cache(self, api_client=None, num_retries=0):
+ try:
+ state = self.load()
+ locator = None
+ try:
+ if "_finished_streams" in state and len(state["_finished_streams"]) > 0:
+ locator = state["_finished_streams"][0][1][0]
+ elif "_current_stream_locators" in state and len(state["_current_stream_locators"]) > 0:
+ locator = state["_current_stream_locators"][0]
+ if locator is not None:
+ kc = arvados.keep.KeepClient(api_client=api_client)
+ kc.head(locator, num_retries=num_retries)
+ except Exception as e:
+ self.restart()
+ except (ValueError):
+ pass
+
def save(self, data):
try:
new_cache_fd, new_cache_name = tempfile.mkstemp(
@@ -452,14 +454,10 @@ def main(arguments=None, stdout=sys.stdout, stderr=sys.stderr):
resume_cache = None
if args.resume:
try:
- cachepath = ResumeCache.make_path(args)
- resume_cache = ResumeCache(cachepath, api_client=api_client, num_retries=args.retries)
+ resume_cache = ResumeCache(ResumeCache.make_path(args))
+ resume_cache.check_cache(api_client=api_client, num_retries=args.retries)
except (IOError, OSError, ValueError):
pass # Couldn't open cache directory/file. Continue without it.
- except arvados.errors.KeepRequestError:
- # delete the cache and create a new one
- shutil.rmtree(cachepath)
- resume_cache = ResumeCache(cachepath)
except ResumeCacheConflict:
print >>stderr, "\n".join([
"arv-put: Another process is already uploading this data.",
diff --git a/sdk/python/tests/test_arv_put.py b/sdk/python/tests/test_arv_put.py
index f1ed35a..a6c1233 100644
--- a/sdk/python/tests/test_arv_put.py
+++ b/sdk/python/tests/test_arv_put.py
@@ -160,8 +160,9 @@ class ArvadosPutResumeCacheTest(ArvadosBaseTestCase):
self.last_cache = arv_put.ResumeCache(cachefile.name)
self.last_cache.save(thing)
self.last_cache.close()
- with self.assertRaises(arvados.errors.KeepRequestError):
- arv_put.ResumeCache(self.last_cache.filename)
+ resume_cache = arv_put.ResumeCache(self.last_cache.filename)
+ self.assertNotEqual(None, resume_cache)
+ self.assertRaises(None, resume_cache.check_cache())
def test_basic_cache_storage(self):
thing = ['test', 'list']
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list