From 9f12590eb18a8c32771a26c071709ee1a47c99d9 Mon Sep 17 00:00:00 2001 From: John Chilton <jmchilton@gmail.com> Date: Mon, 16 Sep 2013 09:36:33 -0500 Subject: [PATCH] Make some attempt to deal with failed uploads while handling LWR cache insertions. --- lwr/lwr_client/client.py | 4 +++- lwr/lwr_client/manager.py | 9 +++++++-- lwr/lwr_client/util.py | 4 ++++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/lwr/lwr_client/client.py b/lwr/lwr_client/client.py index a4ee845b..0aef72a5 100644 --- a/lwr/lwr_client/client.py +++ b/lwr/lwr_client/client.py @@ -308,13 +308,15 @@ class InputCachingClient(Client): cache_required = self.cache_required(input_path) if cache_required: self.client_manager.queue_transfer(self, input_path) - while True: + while not event_holder.failed: available = self.file_available(input_path) if available['ready']: token = available['token'] args["cache_token"] = token return self._raw_execute(action, args) event_holder.event.wait(30) + if event_holder.failed: + raise Exception("Failed to transfer file %s" % input_path) @parseJson() def cache_required(self, path): diff --git a/lwr/lwr_client/manager.py b/lwr/lwr_client/manager.py index 738a971b..cb74c602 100644 --- a/lwr/lwr_client/manager.py +++ b/lwr/lwr_client/manager.py @@ -51,8 +51,13 @@ class ClientManager(object): def __perform_transfer(self, transfer_info): (client, path) = transfer_info event_holder = self.event_manager.acquire_event(path, force_clear=True) - client.cache_insert(path) - event_holder.event.set() + failed = True + try: + client.cache_insert(path) + failed = False + finally: + event_holder.failed = failed + event_holder.release() def __init_transfer_threads(self, num_transfer_threads): self.num_transfer_threads = num_transfer_threads diff --git a/lwr/lwr_client/util.py b/lwr/lwr_client/util.py index 001db19c..6a610a58 100644 --- a/lwr/lwr_client/util.py +++ b/lwr/lwr_client/util.py @@ -26,6 +26,10 @@ class EventHolder(object): self.event = event self.path = path self.condition_manager = condition_manager + self.failed = False def release(self): self.event.set() + + def fail(self): + self.failed = True -- GitLab