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

Unified 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 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: rietveld.py
diff --git a/rietveld.py b/rietveld.py
index d49e5dd3aaaf064cd04b4d52560807d1e7dcf76a..8e99e4bc2a1663b8fb8d094b5d9155154a6aecca 100644
--- a/rietveld.py
+++ b/rietveld.py
@@ -431,18 +431,23 @@ class Rietveld(object):
except urllib2.URLError, e:
if retry >= (self._maxtries - 1):
raise
- if (not 'Name or service not known' in e.reason and
- not 'EOF occurred in violation of protocol' in e.reason and
- not 'timed out' in e.reason and
- not 'The handshake operation timed out' in e.reason and
- # On windows we hit weird bug http://crbug.com/537417
- # with message '[Errno 10060] A connection attempt failed...'
- not (sys.platform.startswith('win') and
- isinstance(e.reason, socket.error) and
- e.reason.errno == errno.ETIMEDOUT
- )
- ):
- # Usually internal GAE flakiness.
+
+ def is_transient():
+ # The idea here is to retry if the error isn't permanent.
+ # Unfortunately, there are so many different possible errors,
+ # that we end up enumerating those that are known to us to be
+ # transient.
+ # The reason can be a string or another exception, e.g.,
+ # socket.error or whatever else.
+ reason_as_str = str(e.reason)
+ for retry_anyway in [
+ 'Name or service not known',
+ 'EOF occurred in violation of protocol',
+ 'timed out']:
+ if retry_anyway in reason_as_str:
+ return True
+ return False # Assume permanent otherwise.
+ if not is_transient():
raise
except socket.error, e:
if retry >= (self._maxtries - 1):
« 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