Ignore:
Timestamp:
Mar 5, 2010 4:58:48 AM (14 years ago)
Author:
Ted Faber <faber@…>
Branches:
axis_example, compt_changes, info-ops, master, version-3.01, version-3.02
Children:
c5b28bf
Parents:
444790d
Message:

checkpoint and SLSL error catching

File:
1 edited

Legend:

Unmodified
Added
Removed
  • fedd/federation/remote_service.py

    r444790d r8e6fe4d  
    298298        self.tracefile = tracefile
    299299        self.__call__ = self.call_service
     300        self.max_retries = 5
    300301
    301302    def serialize_soap(self, req):
     
    343344        port = ServerProxy(url, transport=transport)
    344345        # Make the call, and convert faults back to service_errors
    345         try:
    346             remote_method = getattr(port, self.service_name, None)
    347             if self.request_body_name:
    348                 resp = remote_method(self.apply_to_tags(\
    349                         { self.request_body_name: r}, self.encap_fedids))
    350             else:
    351                 resp = remote_method(self.apply_to_tags(r, self.encap_fedids))
    352         except socket_error, e:
    353             raise service_error(service_error.connect,
    354                     "Cannot connect to %s: %s" % (url, e[1]))
    355         except SSLError, e:
    356             raise service_error(service_error.connect,
    357                     "SSL error contacting %s: %s" % (url, e.message))
    358         except Fault, f:
    359             raise service_error(f.faultCode, f.faultString)
    360         except Error, e:
    361             raise service_error(service_error.protocol,
    362                     "Remote XMLRPC Fault: %s" % e)
     346        if self.request_body_name:
     347            r  = self.apply_to_tags(\
     348                    { self.request_body_name: r}, self.encap_fedids)
     349        else:
     350            r = self.apply_to_tags(r, self.encap_fedids)
     351
     352        ok = False
     353        retries = 0
     354
     355        while not ok and retries < self.max_retries:
     356            try:
     357                remote_method = getattr(port, self.service_name, None)
     358                resp = remote_method(r)
     359            except socket_error, e:
     360                raise service_error(service_error.connect,
     361                        "Cannot connect to %s: %s" % (url, e[1]))
     362            except SSLError, e:
     363                print "SSL error contacting %s: %s" % (url, e.message)
     364                retries += 1
     365            except Fault, f:
     366                raise service_error(f.faultCode, f.faultString)
     367            except Error, e:
     368                raise service_error(service_error.protocol,
     369                        "Remote XMLRPC Fault: %s" % e)
     370
     371        if retries > self.max_retries :
     372            raise service_error(req.connect, "Too many SSL failures")
    363373
    364374        return self.apply_to_tags(resp, self.decap_fedids)
     
    413423                            self.request_body_name)
    414424        set_element(self.pack_soap(msg, self.request_body_name, req))
    415         try:
    416             resp = remote_method(msg)
    417         except socket_error, e:
    418             raise service_error(service_error.connect,
    419                     "Cannot connect to %s: %s" % (url, e[1]))
    420         except SSLError, e:
    421             raise service_error(service_error.connect,
    422                     "SSL error contacting %s: %s" % (url, e.message))
    423         except ParseException, e:
    424             raise service_error(service_error.protocol,
    425                     "Bad format message (XMLRPC??): %s" % e)
    426         except FaultException, e:
    427             ee = self.unpack_soap(e.fault.detail[0]).get('FeddFaultBody', { })
    428             if ee:
    429                 raise service_error(ee['code'], ee['desc'])
    430             else:
    431                 raise service_error(service_error.internal,
    432                         "Unexpected fault body")
     425        ok = False
     426        retries = 0
     427        while not ok and retries < self.max_retries:
     428            try:
     429                resp = remote_method(msg)
     430                ok = True
     431            except socket_error, e:
     432                raise service_error(service_error.connect,
     433                        "Cannot connect to %s: %s" % (url, e[1]))
     434            except SSLError, e:
     435                print "SSL error contacting %s: %s" % (url, e.message)
     436                retries += 1
     437            except ParseException, e:
     438                raise service_error(service_error.protocol,
     439                        "Bad format message (XMLRPC??): %s" % e)
     440            except FaultException, e:
     441                ee = self.unpack_soap(e.fault.detail[0]).get('FeddFaultBody',
     442                        { })
     443                if ee:
     444                    raise service_error(ee['code'], ee['desc'])
     445                else:
     446                    raise service_error(service_error.internal,
     447                            "Unexpected fault body")
     448
     449        if retries > self.max_retries :
     450            raise service_error(req.connect, "Too many SSL failures")
     451
    433452        # Unpack and convert fedids to objects
    434453        r = self.apply_to_tags(self.unpack_soap(resp), self.fedid_to_object)
     454
    435455        #  Make sure all strings are unicode
    436456        r = self.make_unicode(r)
Note: See TracChangeset for help on using the changeset viewer.