Modified SFA Rspec format for requesting leases.
authorSandrine Avakian <sandrine.avakian@inria.fr>
Tue, 16 Oct 2012 12:41:21 +0000 (14:41 +0200)
committerSandrine Avakian <sandrine.avakian@inria.fr>
Tue, 16 Oct 2012 12:41:21 +0000 (14:41 +0200)
Propagating changes.

sfa/rspecs/elements/versions/slabv1Node.py
sfa/senslab/slabaggregate.py
sfa/senslab/slabdriver.py
sfa/senslab/slabslices.py

index ce5a215..ca217d2 100644 (file)
@@ -187,6 +187,9 @@ class Slabv1Node:
                     node['boot_state'] = 'boot'
                 else: 
                     node['boot_state'] = 'disabled' 
+                    
+        logger.debug("SLABV1NODE \tget_nodes_objs  \
+                                #nodes %s"%(nodes))
         return nodes
 
 
index 52c76bc..a21b298 100644 (file)
@@ -60,8 +60,8 @@ class SlabAggregate:
 
         slices = self.driver.GetSlices(slice_filter= str(slice_name), \
                                                 slice_filter_type = 'slice_hrn')
-        logger.debug("Slabaggregate api \tget_slice_and_slivers  slices %s " \
-                                                                    %(slices))
+        logger.debug("Slabaggregate api \tget_slice_and_slivers  slices %s self.driver.hrn %s" \
+                                                                    %(slices, self.driver.hrn))
         if not slices:
             return (sfa_slice, slivers)
         #if isinstance(sfa_slice, list):
@@ -75,13 +75,15 @@ class SlabAggregate:
             try:
                    
                 for node in sfa_slice['node_ids']:
+                    sliver_xrn = Xrn(slice_urn, type='sliver', id=node)
+                    sliver_xrn.set_authority(self.driver.hrn)
                     #node_id = self.driver.root_auth + '.' + node_id
-                    sliver = Sliver({'sliver_id': Xrn(slice_urn, type='slice', id=node['hostname'], authority=self.driver.hrn).urn, 
+                    sliver = Sliver({'sliver_id':sliver_xrn.urn, 
                                     'name': sfa_slice['slice_hrn'],
                                     'type': 'slab-node', 
                                     'tags': []})
                    
-                    slivers[node['hostname']] = sliver
+                    slivers[node] = sliver
             except KeyError:
                 logger.log_exc("SLABAGGREGATE \t \
                                         get_slice_and_slivers KeyError ")
@@ -165,10 +167,13 @@ class SlabAggregate:
         # Make a list of all the nodes in the slice before getting their attributes
         rspec_nodes = []
         slice_nodes_list = []
+        logger.debug("SLABAGGREGATE api get_rspec slice_nodes_list  %s "\
+                                                             %(slices )) 
         if slices:
             for one_slice in slices:
-                for node in one_slice['node_ids']:
-                    slice_nodes_list.append(node['hostname'])
+                slice_nodes_list = one_slice['node_ids']
+                #for node in one_slice['node_ids']:
+                    #slice_nodes_list.append(node)
                    
         reserved_nodes = self.driver.GetNodesCurrentlyInUse()
         logger.debug("SLABAGGREGATE api get_rspec slice_nodes_list  %s "\
@@ -271,8 +276,8 @@ class SlabAggregate:
             for node in lease['reserved_nodes']: 
                 rspec_lease = Lease()
                 rspec_lease['lease_id'] = lease['lease_id']
-                site = node['site_id']
-                slab_xrn = slab_xrn_object(self.driver.root_auth, node['hostname'])
+                #site = node['site_id']
+                slab_xrn = slab_xrn_object(self.driver.root_auth, node)
                 rspec_lease['component_id'] = slab_xrn.urn
                 #rspec_lease['component_id'] = hostname_to_urn(self.driver.hrn, \
                                         #site, node['hostname'])
index 9bd11ac..c8b58df 100644 (file)
@@ -212,6 +212,7 @@ class SlabDriver(Driver):
         # add/remove leases
         requested_lease_list = []
         kept_leases = []
+        logger.debug("SLABDRIVER.PY \tcreate_sliver AVANTLEASE " )
         for lease in rspec.version.get_leases():
             single_requested_lease = {}
             logger.debug("SLABDRIVER.PY \tcreate_sliver lease %s " %(lease))
@@ -225,6 +226,7 @@ class SlabDriver(Driver):
             if single_requested_lease.get('hostname'):
                 requested_lease_list.append(single_requested_lease)
                 
+        logger.debug("SLABDRIVER.PY \tcreate_sliver APRESLEASE" )       
         #dCreate dict of leases by start_time, regrouping nodes reserved
         #at the same
         #time, for the same amount of time = one job on OAR
@@ -661,16 +663,15 @@ class SlabDriver(Driver):
         for node in full_nodes_dict_list:
             oar_id_node_dict[node['oar_id']] = node
             
-        logger.debug("SLABDRIVER \t  __get_hostnames_from_oar_node_ids\
-                        oar_id_node_dict %s" %(oar_id_node_dict))
+        #logger.debug("SLABDRIVER \t  __get_hostnames_from_oar_node_ids\
+                        #oar_id_node_dict %s" %(oar_id_node_dict))
 
         hostname_dict_list = [] 
         for resource_id in resource_id_list:
             #Because jobs requested "asap" do not have defined resources
             if resource_id is not "Undefined":
-                hostname_dict_list.append({'hostname' : \
-                        oar_id_node_dict[resource_id]['hostname'], 
-                        'site_id' :  oar_id_node_dict[resource_id]['site']})
+                hostname_dict_list.append(\
+                        oar_id_node_dict[resource_id]['hostname'])
                 
             #hostname_list.append(oar_id_node_dict[resource_id]['hostname'])
         return hostname_dict_list 
@@ -697,7 +698,7 @@ class SlabDriver(Driver):
         """
         node_dict_by_id = self.oar.parser.SendRequest("GET_resources_full")
         node_dict_list = node_dict_by_id.values()
-        
+        logger.debug (" SLABDRIVER GetNodes  node_filter_dict %s return_fields_list %s "%(node_filter_dict,return_fields_list))
         #No  filtering needed return the list directly
         if not (node_filter_dict or return_fields_list):
             return node_dict_list
@@ -828,8 +829,14 @@ class SlabDriver(Driver):
                 #the slice record 
                 
             
-            
+                
                 slicerec_dict['oar_job_id'] = lease['lease_id']
+                #reserved_list = []
+                #for reserved_node in lease['reserved_nodes']:
+                    #reserved_list.append(reserved_node['hostname'])
+                reserved_list = lease['reserved_nodes']
+                #slicerec_dict.update({'node_ids':[lease['reserved_nodes'][n]['hostname'] for n in lease['reserved_nodes']]})
+                slicerec_dict.update({'list_node_ids':{'hostname':reserved_list}})   
                 slicerec_dict.update({'node_ids':lease['reserved_nodes']})
                 slicerec_dict.update(fixed_slicerec_dict)
                 slicerec_dict.update({'hrn':\
@@ -837,7 +844,7 @@ class SlabDriver(Driver):
                     
     
                 slicerec_dictlist.append(slicerec_dict)
-                logger.debug("SLABDRIVER.PY  \tGetSlices  slicerec_dict %s slicerec_dictlist %s" %(slicerec_dict, slicerec_dictlist))
+                logger.debug("SLABDRIVER.PY  \tGetSlices  slicerec_dict %s slicerec_dictlist %s lease['reserved_nodes'] %s" %(slicerec_dict, slicerec_dictlist,lease['reserved_nodes'] ))
                 
             logger.debug("SLABDRIVER.PY  \tGetSlices  RETURN slicerec_dictlist  %s"\
                                                         %(slicerec_dictlist))
@@ -862,7 +869,13 @@ class SlabDriver(Driver):
                 for lease in leases_list:   
                     if owner == lease['user']:
                         slicerec_dict['oar_job_id'] = lease['lease_id']
+                        reserved_list = []
+                        for reserved_node in lease['reserved_nodes']:
+                            reserved_list.append(reserved_node['hostname'])
+                        #slicerec_dict.update({'node_ids':{'hostname':reserved_list}})    
+                        #slicerec_dict.update({'node_ids':[lease['reserved_nodes'][n]['hostname'] for n in lease['reserved_nodes']]})
                         slicerec_dict.update({'node_ids':lease['reserved_nodes']})
+                        slicerec_dict.update({'list_node_ids':{'hostname':reserved_list}}) 
                         slicerec_dict.update(fixed_slicerec_dict)
                         slicerec_dict.update({'hrn':\
                                     str(fixed_slicerec_dict['slice_hrn'])})
@@ -1143,9 +1156,9 @@ class SlabDriver(Driver):
                  %( hostname_list, slice_record , lease_start_time, \
                  lease_duration))
 
-        tmp = slice_record['PI'][0].split(".")
+        tmp = slice_record['reg-researchers'][0].split(".")
         username = tmp[(len(tmp)-1)]
-        self.LaunchExperimentOnOAR(hostname_list, slice_record['name'], lease_start_time, lease_duration, username)
+        self.LaunchExperimentOnOAR(hostname_list, slice_record['slice_hrn'], lease_start_time, lease_duration, username)
         start_time = datetime.fromtimestamp(int(lease_start_time)).strftime(self.time_format)
         logger.debug("SLABDRIVER \t AddLeases hostname_list start_time %s " %(start_time))
         
@@ -1213,7 +1226,7 @@ class SlabDriver(Driver):
             for node in resa['reserved_nodes']:
                 #resa['component_id_list'].append(hostname_to_urn(self.hrn, \
                          #self.root_auth, node['hostname']))
-                slab_xrn = slab_xrn_object(self.root_auth, node['hostname'])
+                slab_xrn = slab_xrn_object(self.root_auth, node)
                 resa['component_id_list'].append(slab_xrn.urn)
         
         #Filter the reservation list if necessary
index f8815b1..4c6322b 100644 (file)
@@ -137,11 +137,14 @@ class SlabSlices:
 
        
         #First get the list of current leases from OAR          
-        leases = self.driver.GetLeases({'name':sfa_slice['name']})
+        leases = self.driver.GetLeases({'name':sfa_slice['slice_hrn']})
+        logger.debug("SLABSLICES  verify_slice_leases requested_jobs_dict %s leases %s "%(requested_jobs_dict, leases ))
         #leases = self.driver.GetLeases({'name':sfa_slice['name']},\
                                      #['lease_id'])
         if leases : 
             current_leases = [lease['lease_id'] for lease in leases]
+            logger.debug("SLABSLICES  verify_slice_leases  current_leases %s kept_leases %s requested_jobs_dict %s"\
+                                        %(current_leases,kept_leases,requested_jobs_dict))
             #Deleted leases are the ones with lease id not declared in the Rspec
             deleted_leases = list(set(current_leases).difference(kept_leases))
     
@@ -154,9 +157,12 @@ class SlabSlices:
                     #Commented out UnBindObjectFromPeer SA 09/10/12
                     #self.driver.UnBindObjectFromPeer('senslab2', 'slice', \
                                     #sfa_slice['record_id_slice'], peer.hrn)
-                
+                logger.debug("SLABSLICES  verify_slice_leases slice %s deleted_leases %s"\
+                                        %(sfa_slice, deleted_leases))
                 self.driver.DeleteLeases(deleted_leases, \
                                         sfa_slice['name'])
+                #self.driver.DeleteLeases(deleted_leases, \
+                                        #sfa_slice['name'])
                
             #TODO verify_slice_leases: catch other exception?
             except KeyError: 
@@ -174,9 +180,9 @@ class SlabSlices:
     def verify_slice_nodes(self, sfa_slice, requested_slivers, peer):
         current_slivers = []
         deleted_nodes = []
-        
-        if sfa_slice['node_ids']:
-            nodes = self.driver.GetNodes(sfa_slice['node_ids'], ['hostname'])
+
+        if 'node_ids' in sfa_slice:
+            nodes = self.driver.GetNodes(sfa_slice['list_node_ids'], ['hostname'])
             current_slivers = [node['hostname'] for node in nodes]
     
             # remove nodes not in rspec
@@ -192,8 +198,10 @@ class SlabSlices:
                                         %(sfa_slice,deleted_nodes))
 
             if deleted_nodes:
-                self.driver.DeleteSliceFromNodes(sfa_slice['name'], \
-                                                                deleted_nodes)
+                #Delete the entire experience
+                self.driver.DeleteSliceFromNodes(sfa_slice)
+                #self.driver.DeleteSliceFromNodes(sfa_slice['slice_hrn'], \
+                                                                #deleted_nodes)
             return nodes