Ignore:
Timestamp:
Mar 18, 2010 8:35:10 AM (14 years ago)
Author:
Ted Faber <faber@…>
Branches:
axis_example, compt_changes, info-ops, master, version-3.01, version-3.02
Children:
114d24b
Parents:
3159f5d
Message:

Improved SSL error handling (more try blocks, BIOError exception)
Separate get_url into util
Work with remote splitter.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • fedd/federation/emulab_access.py

    r3159f5d r1dcaff4  
    13181318
    13191319    def StartSegment(self, req, fid):
    1320         def get_url(url, cf, destdir, fn=None):
    1321             po = urlparse(url)
    1322             if not fn:
    1323                 fn = po.path.rpartition('/')[2]
    1324             ok = False
    1325             retries = 0
    1326             while not ok and retries < 5:
    1327                 try:
    1328                     conn = httplib.HTTPSConnection(po.hostname, port=po.port,
    1329                             cert_file=cf, key_file=cf)
    1330                     conn.putrequest('GET', po.path)
    1331                     conn.endheaders()
    1332                     response = conn.getresponse()
    1333 
    1334                     lf = open("%s/%s" % (destdir, fn), "w")
    1335                     buf = response.read(4096)
    1336                     while buf:
    1337                         lf.write(buf)
    1338                         buf = response.read(4096)
    1339                     lf.close()
    1340                     ok = True
    1341                 except IOError, e:
    1342                     print e
    1343                     raise service_error(service_error.internal,
    1344                             "Error writing tempfile: %s" %e)
    1345                 except httplib.HTTPException, e:
    1346                     print e
    1347                     raise service_error(service_error.internal,
    1348                             "Error retrieving data: %s" % e)
    1349                 except SSLError, e:
    1350                     print "SSL error %s" %e
    1351                     retries += 1
    1352 
    1353             if retries > 5:
    1354                 raise service_error(service_error.internal,
    1355                         "Repeated SSL failures")
    13561320
    13571321        configs = set(('hosts', 'ssh_pubkey', 'ssh_secretkey'))
     
    13961360                for s in getattr(e, 'software', []):
    13971361                    sw.add(s.location)
    1398             if len(sw) > 0:
    1399                 os.mkdir(softdir)
     1362            os.mkdir(softdir)
    14001363            for s in sw:
    14011364                self.log.debug("Retrieving %s" % s)
    1402                 get_url(s, certfile, softdir)
     1365                try:
     1366                    get_url(s, certfile, softdir)
     1367                except:
     1368                    t, v, st = sys.exc_info()
     1369                    raise service_error(service_error.internal,
     1370                            "Error retrieving %s: %s" % (s, v))
    14031371
    14041372            # Copy local federation and portal node software to the tempdir
     
    14101378            for a in attrs:
    14111379                if a['attribute'] in configs:
    1412                     get_url(a['value'], certfile, tmpdir)
     1380                    try:
     1381                        get_url(a['value'], certfile, tmpdir)
     1382                    except:
     1383                        t, v, st = sys.exc_info()
     1384                        raise service_error(service_error.internal,
     1385                                "Error retrieving %s: %s" % (s, v))
    14131386                if a['attribute'] == 'ssh_pubkey':
    14141387                    pubkey_base = a['value'].rpartition('/')[2]
     
    14471420                                    "Cannot create temp file for " +
    14481421                                    "userconfig certificates: %s e")
     1422                        except:
     1423                            t, v, st = sys.exc_info()
     1424                            raise service_error(service_error.internal,
     1425                                    "Error retrieving %s: %s" % (s, v))
    14491426                        finally:
    14501427                            if tn: os.remove(tn)
Note: See TracChangeset for help on using the changeset viewer.