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

Side by Side Diff: rietveld.py

Issue 1497763003: Rietveld: refactor and improve retries with UrlError exception. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: drive-by Created 5 years 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 | Annotate | Revision Log
« 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 # coding: utf-8 1 # coding: utf-8
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 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 """Defines class Rietveld to easily access a rietveld instance. 5 """Defines class Rietveld to easily access a rietveld instance.
6 6
7 Security implications: 7 Security implications:
8 8
9 The following hypothesis are made: 9 The following hypothesis are made:
10 - Rietveld enforces: 10 - Rietveld enforces:
(...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 if retry >= (self._maxtries - 1): 424 if retry >= (self._maxtries - 1):
425 raise 425 raise
426 flake_codes = [500, 502, 503] 426 flake_codes = [500, 502, 503]
427 if retry_on_404: 427 if retry_on_404:
428 flake_codes.append(404) 428 flake_codes.append(404)
429 if e.code not in flake_codes: 429 if e.code not in flake_codes:
430 raise 430 raise
431 except urllib2.URLError, e: 431 except urllib2.URLError, e:
432 if retry >= (self._maxtries - 1): 432 if retry >= (self._maxtries - 1):
433 raise 433 raise
434 if (not 'Name or service not known' in e.reason and 434
435 not 'EOF occurred in violation of protocol' in e.reason and 435 def is_transient():
436 not 'timed out' in e.reason and 436 # The idea here is to retry if the error isn't permanent.
437 not 'The handshake operation timed out' in e.reason and 437 # Unfortunately, there are so many different possible errors,
438 # On windows we hit weird bug http://crbug.com/537417 438 # that we end up enumerating those that are known to us to be
439 # with message '[Errno 10060] A connection attempt failed...' 439 # transient.
440 not (sys.platform.startswith('win') and 440 # The reason can be a string or another exception, e.g.,
441 isinstance(e.reason, socket.error) and 441 # socket.error or whatever else.
442 e.reason.errno == errno.ETIMEDOUT 442 reason_as_str = str(e.reason)
443 ) 443 for retry_anyway in [
444 ): 444 'Name or service not known',
445 # Usually internal GAE flakiness. 445 'EOF occurred in violation of protocol',
446 'timed out']:
447 if retry_anyway in reason_as_str:
448 return True
449 return False # Assume permanent otherwise.
450 if not is_transient():
446 raise 451 raise
447 except socket.error, e: 452 except socket.error, e:
448 if retry >= (self._maxtries - 1): 453 if retry >= (self._maxtries - 1):
449 raise 454 raise
450 if not 'timed out' in str(e): 455 if not 'timed out' in str(e):
451 raise 456 raise
452 # If reaching this line, loop again. Uses a small backoff. 457 # If reaching this line, loop again. Uses a small backoff.
453 time.sleep(min(10, 1+retry*2)) 458 time.sleep(min(10, 1+retry*2))
454 except urllib2.HTTPError as e: 459 except urllib2.HTTPError as e:
455 print 'Request to %s failed: %s' % (e.geturl(), e.read()) 460 print 'Request to %s failed: %s' % (e.geturl(), e.read())
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
732 self, issue, patchset, reason, clobber, revision, builders_and_tests, 737 self, issue, patchset, reason, clobber, revision, builders_and_tests,
733 master=None, category='cq'): 738 master=None, category='cq'):
734 logging.info('ReadOnlyRietveld: triggering try jobs %r for issue %d' % 739 logging.info('ReadOnlyRietveld: triggering try jobs %r for issue %d' %
735 (builders_and_tests, issue)) 740 (builders_and_tests, issue))
736 741
737 def trigger_distributed_try_jobs( # pylint:disable=R0201 742 def trigger_distributed_try_jobs( # pylint:disable=R0201
738 self, issue, patchset, reason, clobber, revision, masters, 743 self, issue, patchset, reason, clobber, revision, masters,
739 category='cq'): 744 category='cq'):
740 logging.info('ReadOnlyRietveld: triggering try jobs %r for issue %d' % 745 logging.info('ReadOnlyRietveld: triggering try jobs %r for issue %d' %
741 (masters, issue)) 746 (masters, issue))
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