X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fmanagers%2Fslice_manager.py;h=02729b004f2213ea6dcf3f39f765e87068c97dee;hb=f2282434e40e06365e0fdd3f9bc273a793f41235;hp=5abbf56881d26716bf8b1275f005f691c53b2b36;hpb=1ce5c06107cdd89e6cac994276fb6ee79720d1ca;p=sfa.git diff --git a/sfa/managers/slice_manager.py b/sfa/managers/slice_manager.py index 5abbf568..02729b00 100644 --- a/sfa/managers/slice_manager.py +++ b/sfa/managers/slice_manager.py @@ -135,7 +135,7 @@ class SliceManager: # look in cache first cached_requested = options.get('cached', True) - if not xrn and self.cache and cached_request: + if not xrn and self.cache and cached_requested: rspec = self.cache.get(version_string) if rspec: api.logger.debug("SliceManager.ListResources returns cached advertisement") @@ -261,18 +261,28 @@ 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 +291,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 +318,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: @@ -344,7 +365,14 @@ class SliceManager: # mmh, it is expected that all results carry the same urn overall['geni_urn'] = results[0]['geni_urn'] - overall['pl_login'] = results[0]['pl_login'] + overall['pl_login'] = None + for result in results: + if result.get('pl_login'): + overall['pl_login'] = result['pl_login'] + break + elif isinstance(result.get('value'), dict) and result['value'].get('pl_login'): + overall['pl_login'] = result['value']['pl_login'] + break # append all geni_resources overall['geni_resources'] = \ reduce (lambda x,y: x+y, [ result['geni_resources'] for result in results] , [])