changeset 457:b267ad4b93e9

Make the slave differentiate between benign and fatal network errors and only exit on the latter. This closes #180.
author jonas
date Tue, 18 Sep 2007 12:18:34 +0000
parents dcde61c928af
children c9ac97df8a5e
files bitten/slave.py
diffstat 1 files changed, 14 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/bitten/slave.py
+++ b/bitten/slave.py
@@ -11,11 +11,13 @@
 """Implementation of the build slave."""
 
 from datetime import datetime
+import errno
 import urllib2
 import logging
 import os
 import platform
 import shutil
+import socket
 import tempfile
 import time
 
@@ -29,6 +31,10 @@
 
 log = logging.getLogger('bitten.slave')
 
+# List of network errors which are usually temporary and non critical.
+temp_net_errors = [errno.ENETUNREACH, errno.ENETDOWN, errno.ETIMEDOUT,
+                   errno.ECONNREFUSED]
+
 
 class SaneHTTPErrorProcessor(urllib2.HTTPErrorProcessor):
     "The HTTPErrorProcessor defined in urllib needs some love."
@@ -134,8 +140,14 @@
                 try:
                     self._create_build()
                 except urllib2.URLError, e:
-                    log.error(e)
-                    raise ExitSlave()
+                    # Is this a temporary network glitch or something a bit
+                    # more severe?
+                    if isinstance(e.reason, socket.error) and \
+                        e.reason.args[0] in temp_net_errors:
+                        log.warning(e)
+                    else:
+                        log.error(e)
+                        raise ExitSlave()
             except ExitSlave:
                 break
             time.sleep(self.poll_interval)
Copyright (C) 2012-2017 Edgewall Software