Mercurial > bitten > bitten-test
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)