From: smbaker Date: Tue, 10 Jan 2012 23:52:56 +0000 (-0800) Subject: add optional minimum expiration to getCredential, better handling of returns in slice... X-Git-Tag: before-alchemy~2^2~1 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=815c0c40e7f76056f98ef501173161f3db9fc273;p=sfa.git add optional minimum expiration to getCredential, better handling of returns in slicemanager renew --- diff --git a/sfa/managers/slice_manager.py b/sfa/managers/slice_manager.py index 5abbf568..e9e446ac 100644 --- a/sfa/managers/slice_manager.py +++ b/sfa/managers/slice_manager.py @@ -261,18 +261,26 @@ class SliceManager: call_id = options.get('call_id') if Callids().already_handled(call_id): return True - def _RenewSliver(server, xrn, creds, expiration_time, options): - return server.RenewSliver(xrn, creds, expiration_time, options) - - (hrn, type) = urn_to_hrn(xrn) + def _RenewSliver(aggregate, server, xrn, creds, expiration_time, options): + try: + result=server.RenewSliver(xrn, creds, expiration_time, options) + if type(result)!=dict: + result = {"code": {"geni_code": 0}, value: result} + result["aggregate"] = aggregate + return result + except: + logger.log_exc('Something wrong in _RenewSliver with URL %s'%server.url) + return {"aggregate": aggregate, "exc_info": traceback.format_exc(), "code": {"geni_code": -1}, "value": False, "output": ""} + + (hrn, urn_type) = urn_to_hrn(xrn) # get the callers hrn valid_cred = api.auth.checkCredentials(creds, 'renewsliver', hrn)[0] caller_hrn = Credential(string=valid_cred).get_gid_caller().get_hrn() - + # attempt to use delegated credential first cred = api.getDelegatedCredential(creds) if not cred: - cred = api.getCredential() + cred = api.getCredential(minimumExpiration=31*86400) threads = ThreadManager() for aggregate in api.aggregates: # prevent infinite loop. Dont send request back to caller @@ -281,13 +289,24 @@ class SliceManager: continue interface = api.aggregates[aggregate] server = api.server_proxy(interface, cred) - threads.run(_RenewSliver, server, xrn, [cred], expiration_time, options) - # 'and' the results - results = [ReturnValue.get_value(result) for result in threads.get_results()] - return reduce (lambda x,y: x and y, results , True) - + threads.run(_RenewSliver, aggregate, server, xrn, [cred], expiration_time, options) + + results = threads.get_results() + + geni_code = 0 + geni_output = ",".join([x.get("output","") for x in results]) + geni_value = reduce (lambda x,y: x and y, [result.get("value",False) for result in results], True) + for agg_result in results: + agg_geni_code = agg_result["code"].get("geni_code",0) + if agg_geni_code: + geni_code = agg_geni_code + + results = {"aggregates": results, "code": {"geni_code": geni_code}, "value": geni_value, "output": geni_output} + + return results + def DeleteSliver(self, api, xrn, creds, options): - call_id = options.get('call_id') + call_id = options.get('call_id') if Callids().already_handled(call_id): return "" def _DeleteSliver(server, xrn, creds, options): @@ -297,7 +316,7 @@ class SliceManager: # get the callers hrn valid_cred = api.auth.checkCredentials(creds, 'deletesliver', hrn)[0] caller_hrn = Credential(string=valid_cred).get_gid_caller().get_hrn() - + # attempt to use delegated credential first cred = api.getDelegatedCredential(creds) if not cred: diff --git a/sfa/server/sfaapi.py b/sfa/server/sfaapi.py index 3bd89687..ad5cbe1a 100644 --- a/sfa/server/sfaapi.py +++ b/sfa/server/sfaapi.py @@ -91,9 +91,9 @@ class SfaApi (XmlrpcApi): return server - def getCredential(self): + def getCredential(self, minimumExpiration=0): """ - Return a valid credential for this interface. + Return a valid credential for this interface. """ type = 'authority' path = self.config.SFA_DATA_DIR @@ -104,7 +104,7 @@ class SfaApi (XmlrpcApi): cred = Credential(filename = cred_filename) # make sure cred isnt expired if not cred.get_expiration or \ - datetime.datetime.utcnow() < cred.get_expiration(): + datetime.datetime.utcnow() + datetime.timedelta(seconds=minimumExpiration) < cred.get_expiration(): return cred.save_to_string(save_parents=True) # get a new credential