Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(241)

Unified Diff: recipe_modules/bot_update/resources/bot_update.py

Issue 2324073002: Switch bot_update to use exponential backoff on clone (Closed)
Patch Set: A little cleaner Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: recipe_modules/bot_update/resources/bot_update.py
diff --git a/recipe_modules/bot_update/resources/bot_update.py b/recipe_modules/bot_update/resources/bot_update.py
index 03b14e502fa4907593fe3051d7d64060791a1b38..58952f81c66991a1a0b90d09d1383809f7cc629b 100755
--- a/recipe_modules/bot_update/resources/bot_update.py
+++ b/recipe_modules/bot_update/resources/bot_update.py
@@ -543,10 +543,11 @@ def git_checkout(solutions, revisions, shallow, refs, git_cache_dir):
raise Exception('%s exists after cache unlock' % filename)
first_solution = True
for sln in solutions:
- # This is so we can loop back and try again if we need to wait for the
- # git mirrors to update from SVN.
+ # Just in case we're hitting a different git server than the one from
+ # which the target revision was polled, we retry some.
done = False
- tries_left = 60
+ deadline = time.time() + 60 # One minute (5 tries with exp. backoff).
+ tries = 0
while not done:
name = sln['name']
url = sln['url']
@@ -582,14 +583,18 @@ def git_checkout(solutions, revisions, shallow, refs, git_cache_dir):
done = True
except SubprocessFailed as e:
# Exited abnormally, theres probably something wrong.
- # Lets wipe the checkout and try again.
- tries_left -= 1
- if tries_left > 0:
- print 'Something failed: %s.' % str(e)
- print 'waiting 5 seconds and trying again...'
- time.sleep(5)
- else:
+ print 'Something failed: %s.' % str(e)
+
+ if time.time() > deadline:
+ overrun = time.time() - deadline
+ print 'Ran %s seconds past deadline. Aborting.' % overrun
raise
+
+ # Lets wipe the checkout and try again.
+ tries += 1
+ sleep_secs = 2**tries
+ print 'waiting %s seconds and trying again...' % sleep_secs
+ time.sleep(sleep_secs)
remove(sln_dir)
git('clean', '-dff', cwd=sln_dir)
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698