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

Side by Side 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2014 The Chromium Authors. All rights reserved. 2 # Copyright 2014 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 # TODO(hinoka): Use logging. 6 # TODO(hinoka): Use logging.
7 7
8 import cStringIO 8 import cStringIO
9 import codecs 9 import codecs
10 import collections 10 import collections
(...skipping 525 matching lines...) Expand 10 before | Expand all | Expand 10 after
536 # Before we do anything, break all git_cache locks. 536 # Before we do anything, break all git_cache locks.
537 if path.isdir(git_cache_dir): 537 if path.isdir(git_cache_dir):
538 git('cache', 'unlock', '-vv', '--force', '--all', 538 git('cache', 'unlock', '-vv', '--force', '--all',
539 '--cache-dir', git_cache_dir) 539 '--cache-dir', git_cache_dir)
540 for item in os.listdir(git_cache_dir): 540 for item in os.listdir(git_cache_dir):
541 filename = os.path.join(git_cache_dir, item) 541 filename = os.path.join(git_cache_dir, item)
542 if item.endswith('.lock'): 542 if item.endswith('.lock'):
543 raise Exception('%s exists after cache unlock' % filename) 543 raise Exception('%s exists after cache unlock' % filename)
544 first_solution = True 544 first_solution = True
545 for sln in solutions: 545 for sln in solutions:
546 # This is so we can loop back and try again if we need to wait for the 546 # Just in case we're hitting a different git server than the one from
547 # git mirrors to update from SVN. 547 # which the target revision was polled, we retry some.
548 done = False 548 done = False
549 tries_left = 60 549 deadline = time.time() + 60 # One minute (5 tries with exp. backoff).
550 tries = 0
550 while not done: 551 while not done:
551 name = sln['name'] 552 name = sln['name']
552 url = sln['url'] 553 url = sln['url']
553 if url == CHROMIUM_SRC_URL or url + '.git' == CHROMIUM_SRC_URL: 554 if url == CHROMIUM_SRC_URL or url + '.git' == CHROMIUM_SRC_URL:
554 # Experiments show there's little to be gained from 555 # Experiments show there's little to be gained from
555 # a shallow clone of src. 556 # a shallow clone of src.
556 shallow = False 557 shallow = False
557 sln_dir = path.join(build_dir, name) 558 sln_dir = path.join(build_dir, name)
558 s = ['--shallow'] if shallow else [] 559 s = ['--shallow'] if shallow else []
559 populate_cmd = (['cache', 'populate', '--ignore_locks', '-v', 560 populate_cmd = (['cache', 'populate', '--ignore_locks', '-v',
(...skipping 15 matching lines...) Expand all
575 git('fetch', 'origin', cwd=sln_dir) 576 git('fetch', 'origin', cwd=sln_dir)
576 for ref in refs: 577 for ref in refs:
577 refspec = '%s:%s' % (ref, ref.lstrip('+')) 578 refspec = '%s:%s' % (ref, ref.lstrip('+'))
578 git('fetch', 'origin', refspec, cwd=sln_dir) 579 git('fetch', 'origin', refspec, cwd=sln_dir)
579 580
580 revision = get_target_revision(name, url, revisions) or 'HEAD' 581 revision = get_target_revision(name, url, revisions) or 'HEAD'
581 force_revision(sln_dir, revision) 582 force_revision(sln_dir, revision)
582 done = True 583 done = True
583 except SubprocessFailed as e: 584 except SubprocessFailed as e:
584 # Exited abnormally, theres probably something wrong. 585 # Exited abnormally, theres probably something wrong.
586 print 'Something failed: %s.' % str(e)
587
588 if time.time() > deadline:
589 overrun = time.time() - deadline
590 print 'Ran %s seconds past deadline. Aborting.' % overrun
591 raise
592
585 # Lets wipe the checkout and try again. 593 # Lets wipe the checkout and try again.
586 tries_left -= 1 594 tries += 1
587 if tries_left > 0: 595 sleep_secs = 2**tries
588 print 'Something failed: %s.' % str(e) 596 print 'waiting %s seconds and trying again...' % sleep_secs
589 print 'waiting 5 seconds and trying again...' 597 time.sleep(sleep_secs)
590 time.sleep(5)
591 else:
592 raise
593 remove(sln_dir) 598 remove(sln_dir)
594 599
595 git('clean', '-dff', cwd=sln_dir) 600 git('clean', '-dff', cwd=sln_dir)
596 601
597 if first_solution: 602 if first_solution:
598 git_ref = git('log', '--format=%H', '--max-count=1', 603 git_ref = git('log', '--format=%H', '--max-count=1',
599 cwd=sln_dir).strip() 604 cwd=sln_dir).strip()
600 first_solution = False 605 first_solution = False
601 return git_ref 606 return git_ref
602 607
(...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after
1190 except Exception: 1195 except Exception:
1191 # Unexpected failure. 1196 # Unexpected failure.
1192 emit_flag(options.flag_file) 1197 emit_flag(options.flag_file)
1193 raise 1198 raise
1194 else: 1199 else:
1195 emit_flag(options.flag_file) 1200 emit_flag(options.flag_file)
1196 1201
1197 1202
1198 if __name__ == '__main__': 1203 if __name__ == '__main__':
1199 sys.exit(main()) 1204 sys.exit(main())
OLDNEW
« 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