From: Sandrine Avakian Date: Fri, 27 Jul 2012 14:38:13 +0000 (+0200) Subject: Corrected error in GetLeases which was causing reservation list to be empty X-Git-Tag: sfa-2.1-24~3^2~106 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=cd7182643313728b84ccbd852bd1c3880b7bdb46;p=sfa.git Corrected error in GetLeases which was causing reservation list to be empty whenever leases where filtered using a slice name. Implemented DeleteLeases in SlabDriver. Corrected verify_slice_leases according to the new prototype of DeleteLeases. --- diff --git a/sfa/senslab/slabdriver.py b/sfa/senslab/slabdriver.py index 3f06ce2e..dc2cc5ca 100644 --- a/sfa/senslab/slabdriver.py +++ b/sfa/senslab/slabdriver.py @@ -179,8 +179,9 @@ class SlabDriver(Driver): requested_slivers = [node.get('component_name') \ for node in rspec.version.get_nodes_with_slivers()] + l = [ node for node in rspec.version.get_nodes_with_slivers() ] logger.debug("SLADRIVER \tcreate_sliver requested_slivers \ - requested_slivers %s " %(requested_slivers)) + requested_slivers %s listnodes %s" %(requested_slivers,l)) nodes = slices.verify_slice_nodes(sfa_slice, requested_slivers, peer) @@ -1130,19 +1131,46 @@ class SlabDriver(Driver): reservation_list = [] #Find the slice associated with this user senslab ldap uid logger.debug(" SLABDRIVER.PY \tGetLeases ") + #Create user dict first to avoir looking several times for + #the same user in LDAP SA 27/07/12 + resa_user_dict = {} for resa in unfiltered_reservation_list: - ldap_info = self.ldap.LdapSearch('(uid='+resa['user']+')') - ldap_info = ldap_info[0][1] - - user = dbsession.query(RegUser).filter_by(email = \ - ldap_info['mail'][0]).first() - #Separated in case user not in database : record_id not defined SA 17/07//12 - query_slice_info = slab_dbsession.query(SliceSenslab).filter_by(record_id_user = user.record_id) - if query_slice_info: - slice_info = query_slice_info.first() - + logger.debug("SLABDRIVER \tGetLeases USER %s"\ + %(resa['user'])) + if resa['user'] not in resa_user_dict: + logger.debug("SLABDRIVER \tGetLeases userNOTIN ") + ldap_info = self.ldap.LdapSearch('(uid='+resa['user']+')') + ldap_info = ldap_info[0][1] + user = dbsession.query(RegUser).filter_by(email = \ + ldap_info['mail'][0]).first() + #Separated in case user not in database : record_id not defined SA 17/07//12 + query_slice_info = slab_dbsession.query(SliceSenslab).filter_by(record_id_user = user.record_id) + if query_slice_info: + slice_info = query_slice_info.first() + else: + slice_info = None + resa_user_dict[resa['user']] = {} + resa_user_dict[resa['user']]['ldap_info'] = user + resa_user_dict[resa['user']]['slice_info'] = slice_info + + logger.debug("SLABDRIVER \tGetLeases resa_user_dict %s"\ + %(resa_user_dict)) + for resa in unfiltered_reservation_list: + + #ldap_info = self.ldap.LdapSearch('(uid='+resa['user']+')') + #ldap_info = ldap_info[0][1] + + #user = dbsession.query(RegUser).filter_by(email = \ + #ldap_info['mail'][0]).first() + ##Separated in case user not in database : record_id not defined SA 17/07//12 + #query_slice_info = slab_dbsession.query(SliceSenslab).filter_by(record_id_user = user.record_id) + #if query_slice_info: + #slice_info = query_slice_info.first() + #Put the slice_urn + resa['slice_hrn'] = resa_user_dict[resa['user']]['slice_info'].slice_hrn + resa['slice_id'] = hrn_to_urn(resa['slice_hrn'], 'slice') #Put the slice_urn - resa['slice_id'] = hrn_to_urn(slice_info.slice_hrn, 'slice') + #resa['slice_id'] = hrn_to_urn(slice_info.slice_hrn, 'slice') resa['component_id_list'] = [] #Transform the hostnames into urns (component ids) for node in resa['reserved_nodes']: @@ -1157,7 +1185,7 @@ class SlabDriver(Driver): logger.debug("SLABDRIVER \tGetLeases lease_filter_dict %s"\ %(lease_filter_dict)) for resa in unfiltered_reservation_list: - if lease_filter_dict['name'] == resa['slice_id']: + if lease_filter_dict['name'] == resa['slice_hrn']: reservation_list.append(resa) else: reservation_list = unfiltered_reservation_list @@ -1491,3 +1519,10 @@ class SlabDriver(Driver): """ logger.warning("SLABDRIVER AddPersonKey EMPTY - DO NOTHING \r\n ") return + + def DeleteLeases(self, leases_id_list, slice_hrn ): + for job_id in leases_id_list: + self.DeleteJobs(job_id, slice_hrn) + + logger.debug("SLABDRIVER DeleteLeases leases_id_list %s slice_hrn %s \r\n " %(leases_id_list, slice_hrn)) + return \ No newline at end of file diff --git a/sfa/senslab/slabslices.py b/sfa/senslab/slabslices.py index b6a0bcb9..9428ffb8 100644 --- a/sfa/senslab/slabslices.py +++ b/sfa/senslab/slabslices.py @@ -141,7 +141,7 @@ class SlabSlices: def verify_slice_leases(self, sfa_slice, requested_leases, kept_leases, \ peer): - + logger.debug("SLABSLICES \tverify_slice_leases requested_leases %s kept_leases %s sfa_slice%s peer%s" %(requested_leases, kept_leases,sfa_slice,peer) ) leases = self.driver.GetLeases({'name':sfa_slice['name']}, ['lease_id']) grain = self.driver.GetLeaseGranularity() if leases : @@ -150,9 +150,11 @@ class SlabSlices: try: if peer: - self.driver.UnBindObjectFromPeer('slice', \ - sfa_slice['slice_id'], peer['shortname']) - deleted = self.driver.DeleteLeases(deleted_leases) + #peer = RegAuyhority object is unsubscriptable + #TODO :UnBindObjectFromPeer Quick and dirty auth='senslab2 SA 27/07/12 + self.driver.UnBindObjectFromPeer('senslab2', 'slice', \ + sfa_slice['record_id_slice'], peer.hrn) + deleted = self.driver.DeleteLeases(deleted_leases, sfa_slice['name']) for lease in requested_leases: added = self.driver.AddLeases(lease['hostname'], \ sfa_slice['name'], int(lease['start_time']), \ @@ -188,16 +190,16 @@ class SlabSlices: username = tmp[(len(tmp)-1)] #Update the table with the nodes that populate the slice self.driver.db.update_job(sfa_slice['name'], nodes = added_nodes) - logger.debug("SLABSLICES \tverify_slice_nodes slice %s "\ - %(sfa_slice)) + logger.debug("SLABSLICES \tverify_slice_nodes slice %s \r\n \r\n deleted_nodes %s"\ + %(sfa_slice,deleted_nodes)) #If there is a timeslot specified, then a job can be launched - try: - #slot = sfa_slice['timeslot'] - self.driver.LaunchExperimentOnOAR(sfa_slice, added_nodes, \ - username) - except KeyError: - logger.log_exc("SLABSLICES \verify_slice_nodes KeyError \ - sfa_slice %s " %(sfa_slice)) + #try: + ##slot = sfa_slice['timeslot'] + #self.driver.LaunchExperimentOnOAR(sfa_slice, added_nodes, \ + #username) + #except KeyError: + #logger.log_exc("SLABSLICES \verify_slice_nodes KeyError \ + #sfa_slice %s " %(sfa_slice)) if deleted_nodes: