Fixed bug in GetPeers.
authorSandrine Avakian <sandrine.avakian@inria.fr>
Wed, 9 May 2012 09:21:44 +0000 (11:21 +0200)
committerSandrine Avakian <sandrine.avakian@inria.fr>
Wed, 9 May 2012 09:21:44 +0000 (11:21 +0200)
Changed the name of function ADDSliceToNodes to LaunchExperiment,

sfa/rspecs/elements/versions/slabv1Timeslot.py
sfa/senslab/slabdriver.py
sfa/senslab/slabpostgres.py
sfa/senslab/slabslices.py

index a74c729..6f6b802 100644 (file)
@@ -5,10 +5,12 @@ import sys
 class Slabv1Timeslot :
     @staticmethod 
     def get_slice_timeslot(xml, filter={}):
+        timeslot = None
         print>>sys.stderr, "\r\n \r\n \t\t \t SLABV1TIMESLOT.pY >>>>>>>>>>>>>>>>>>>>>>>>>>>>> \t  get_slice_timeslot  "
         xpath = '//default:timeslot | //timeslot' 
         timeslot_elems = xml.xpath(xpath)  
         print>>sys.stderr, "\r\n \r\n \t\t \t SLABV1TIMESLOT.pY >>>>>>>>>>>>>>>>>>>>>>>>>>>>> \t  get_slice_timeslot    timeslot_elems %s"%(timeslot_elems)
+        
         for timeslot_elem in timeslot_elems:  
             timeslot = Timeslot(timeslot_elem.attrib, timeslot_elem) 
             print>>sys.stderr, "\r\n \r\n \t\t \t SLABV1TIMESLOT.pY >>>>>>>>>>>>>>>>>>>>>>>>>>>>> \t  get_slice_timeslot   timeslot  %s"%(timeslot)
index 5742da8..1d2af9a 100644 (file)
@@ -160,7 +160,7 @@ class SlabDriver(Driver):
         
         if requested_attributes:
             for attrib_dict in requested_attributes:
-                if 'timeslot' in attrib_dict:
+                if 'timeslot' in attrib_dict and attrib_dict['timeslot'] is not None:
                     slice.update({'timeslot':attrib_dict['timeslot']})
         print >>sys.stderr, "\r\n \r\n \t=============================== SLABDRIVER.PY create_sliver  ..... slice %s " %(slice)
         # ensure person records exists
@@ -392,7 +392,9 @@ class SlabDriver(Driver):
             else:
                 
                 print >>sys.stderr, "\r\n \r\n SLABDRIVER GetPeers \t INNN  type %s hrn %s " %( record.type,record.hrn )
-                existing_hrns_by_types.update({record.type:(existing_hrns_by_types[record.type].append(record.hrn))})
+                existing_hrns_by_types[record.type].append(record.hrn)
+                print >>sys.stderr, "\r\n \r\n SLABDRIVER GetPeers \t INNN existing_hrns_by_types %s " %( existing_hrns_by_types)
+                #existing_hrns_by_types.update({record.type:(existing_hrns_by_types[record.type].append(record.hrn))})
                         
         print >>sys.stderr, "\r\n \r\n SLABDRIVER GetPeers        existing_hrns_by_types %s " %( existing_hrns_by_types)
         records_list= [] 
@@ -661,7 +663,7 @@ class SlabDriver(Driver):
         return slab_record
 
                    
-    def AddSliceToNodes(self,  slice_dict, added_nodes, slice_user=None):
+    def LaunchExperimentOnOAR(self,  slice_dict, added_nodes, slice_user=None):
        
         site_list = []
         nodeid_list =[]
@@ -670,7 +672,7 @@ class SlabDriver(Driver):
         slice_name = slice_dict['name']
         try:
             slot = slice_dict['timeslot'] 
-            print>>sys.stderr, "\r\n \r\n \t\tAddSliceToNodes slot %s   " %(slot)
+            print>>sys.stderr, "\r\n \r\n \t\tLaunchExperimentOnOAR slot %s   " %(slot)
         except KeyError:
             #Running on default parameters
             #XP immediate , 10 mins
@@ -706,7 +708,7 @@ class SlabDriver(Driver):
             desired_walltime =  int(walltime[0])*3600 + int(walltime[1]) * 60 + int(walltime[2])
             total_walltime = desired_walltime + 140 #+2 min 20
             sleep_walltime = desired_walltime + 20 #+20 sec
-            print>>sys.stderr, "\r\n \r\n \t\tAddSliceToNodes desired_walltime %s  total_walltime %s sleep_walltime %s  " %(desired_walltime,total_walltime,sleep_walltime)
+            print>>sys.stderr, "\r\n \r\n \t\tLaunchExperimentOnOAR desired_walltime %s  total_walltime %s sleep_walltime %s  " %(desired_walltime,total_walltime,sleep_walltime)
             #Put the walltime back in str form
             #First get the hours
             walltime[0] = str(total_walltime / 3600)
@@ -716,7 +718,7 @@ class SlabDriver(Driver):
             total_walltime =  total_walltime - 60 * int(walltime[1])
             #Get the seconds
             walltime[2] = str(total_walltime)
-            print>>sys.stderr, "\r\n \r\n \t\tAddSliceToNodes  walltime %s " %(walltime)
+            print>>sys.stderr, "\r\n \r\n \t\tLaunchExperimentOnOAR  walltime %s " %(walltime)
 
             reqdict['resource']+= ",walltime=" + str(walltime[0]) + ":" + str(walltime[1]) + ":" + str(walltime[2]) 
             reqdict['script_path'] = "/bin/sleep " + str(sleep_walltime)
@@ -731,7 +733,7 @@ class SlabDriver(Driver):
                 #assume it is server timezone
                 server_timestamp,server_tz = self.GetTimezone()
                 from_zone=tz.gettz(server_tz) 
-                print>>sys.stderr, "\r\n \r\n \t\tAddSliceToNodes  timezone not specified  server_tz %s from_zone  %s" %(server_tz,from_zone) 
+                print>>sys.stderr, "\r\n \r\n \t\tLaunchExperimentOnOAR  timezone not specified  server_tz %s from_zone  %s" %(server_tz,from_zone) 
             else:
                 #Get zone of the user from the reservation time given in the rspec
                 from_zone = tz.gettz(slot['timezone'])  
@@ -746,7 +748,7 @@ class SlabDriver(Driver):
             #Readable time accpeted by OAR
             reqdict['reservation']= utc_date.strftime(self.time_format)
         
-            print>>sys.stderr, "\r\n \r\n \t\tAddSliceToNodes  reqdict['reservation'] %s " %(reqdict['reservation'])
+            print>>sys.stderr, "\r\n \r\n \t\tLaunchExperimentOnOAR  reqdict['reservation'] %s " %(reqdict['reservation'])
             
         else:
             # Immediate XP
@@ -762,7 +764,7 @@ class SlabDriver(Driver):
             utc_server= datetime.datetime.fromtimestamp(float(server_timestamp)+20,UTC_zone)
             server_localtime=utc_server.astimezone(s_tz)
     
-            print>>sys.stderr, "\r\n \r\n \t\tAddSliceToNodes server_timestamp %s server_tz %s slice_name %s added_nodes %s username %s reqdict %s " %(server_timestamp,server_tz,slice_name,added_nodes,slice_user, reqdict )
+            print>>sys.stderr, "\r\n \r\n \t\tLaunchExperimentOnOAR server_timestamp %s server_tz %s slice_name %s added_nodes %s username %s reqdict %s " %(server_timestamp,server_tz,slice_name,added_nodes,slice_user, reqdict )
             readable_time = server_localtime.strftime(self.time_format)
 
             print >>sys.stderr,"  \r\n \r\n \t\t\t\tAPRES ParseTimezone readable_time %s timestanp %s  " %(readable_time ,server_timestamp)
@@ -775,17 +777,17 @@ class SlabDriver(Driver):
        
          
         # first step : start the OAR job and update the job 
-        print>>sys.stderr, "\r\n \r\n AddSliceToNodes reqdict   %s \r\n site_list   %s"  %(reqdict,site_list)   
+        print>>sys.stderr, "\r\n \r\n LaunchExperimentOnOAR reqdict   %s \r\n site_list   %s"  %(reqdict,site_list)   
        
         answer = self.oar.POSTRequestToOARRestAPI('POST_job',reqdict,slice_user)
-        print>>sys.stderr, "\r\n \r\n AddSliceToNodes jobid   %s "  %(answer)
+        print>>sys.stderr, "\r\n \r\n LaunchExperimentOnOAR jobid   %s "  %(answer)
         try:       
             jobid = answer['id']
         except KeyError:
              print>>sys.stderr, "\r\n AddSliceTonode Impossible to create job  %s "  %( answer)
              return
         
-        print>>sys.stderr, "\r\n \r\n AddSliceToNodes jobid    %s added_nodes  %s slice_user %s"  %(jobid,added_nodes,slice_user)
+        print>>sys.stderr, "\r\n \r\n LaunchExperimentOnOAR jobid    %s added_nodes  %s slice_user %s"  %(jobid,added_nodes,slice_user)
         self.db.update_job( slice_name, jobid ,added_nodes)
         
           
@@ -807,7 +809,7 @@ class SlabDriver(Driver):
         #ret=subprocess.check_output(["/usr/bin/java", "-jar", ", str(jobid), slice_user])
         output = subprocess.Popen([javacmdline, "-jar", jarname, str(jobid), slice_user],stdout=subprocess.PIPE).communicate()[0]
 
-        print>>sys.stderr, "\r\n \r\n AddSliceToNodes wrapper returns   %s "  %(output)
+        print>>sys.stderr, "\r\n \r\n LaunchExperimentOnOAR wrapper returns   %s "  %(output)
         return 
                  
  
@@ -997,7 +999,7 @@ class SlabDriver(Driver):
                     'person_ids':[recslice['record_id_user']]})
                     
                 elif str(record['type']) == 'user':
-                    #print >>sys.stderr, "\r\n \t\t  SLABDRIVER.PY fill_record_info USEEEEEEEEEERDESU!" 
+                    print >>sys.stderr, "\r\n \t\t  SLABDRIVER.PY fill_record_info USEEEEEEEEEERDESU!" 
 
                     rec = self.GetSlices(slice_filter = record['record_id'], filter_type = 'record_id_user')
                     #Append record in records list, therfore fetches user and slice info again(one more loop)
index 513c858..38340bb 100644 (file)
@@ -172,6 +172,7 @@ class SlabDB:
         return
     
     #Updates the job_id and the nodes list 
+    #The nodes list is never erased.
     def update_job(self, hrn, job_id= None, nodes = None ):
         slice_rec = slab_dbsession.query(SliceSenslab).filter_by(slice_hrn = hrn).first()
         print>>sys.stderr, " \r\n \r\n \t SLABPOSTGRES  update_job slice_rec %s"%(slice_rec)
index 96e0034..6e6d20c 100644 (file)
@@ -262,14 +262,23 @@ class SlabSlices:
             #so that the OAR/LDAP knows the user: remove the authority from the name
             tmp=  slice['PI'][0].split(".")
             username = tmp[(len(tmp)-1)]
-            self.driver.AddSliceToNodes(slice, added_nodes, username)
-            #self.driver.AddSliceToNodes(slice['name'], added_nodes, username)
+            #Update the table with the nodes that populate the slice
+            self.driver.db.update_job(slice['name'],nodes = added_nodes)
+            print>>sys.stderr, "\r\n \\r\n \r\n \t\t\t VERIFY_SLICE_NODES slice %s \r\n \r\n \r\n " %(slice)
+            #If there is a timeslot specified, then a job can be launched
+            try:
+                slot = slice['timeslot']
+                self.driver.LaunchExperimentOnOAR(slice, added_nodes, username)
+            except KeyError:
+                pass
+
             
             if deleted_nodes:
                 self.driver.DeleteSliceFromNodes(slice['name'], deleted_nodes)
 
         except: 
             logger.log_exc('Failed to add/remove slice from nodes')
+            
 
     def free_egre_key(self):
         used = set()
@@ -406,7 +415,7 @@ class SlabSlices:
        
         return slice
 
-    #def get_existing_persons(self, users):
+
     def verify_persons(self, slice_hrn, slice_record, users,  peer, sfa_peer, options={}):
         users_by_id = {}
         users_by_hrn = {}
@@ -442,7 +451,10 @@ class SlabSlices:
                     existing_user_ids.append (users_dict[user['hrn']]['person_id'])
                     #print>>sys.stderr, " \r\n \r\n \t slabslices.py verify_person  existing_user_ids.append (users_dict[user['hrn']][k]) %s \r\n existing_users %s " %(  existing_user_ids,existing_users) 
          
-
+            #User from another federated site , does not have a senslab account yet
+            else:
+                pass
+                
         # requested slice users        
         requested_user_ids = users_by_id.keys() 
         requested_user_hrns = users_by_hrn.keys()
@@ -700,7 +712,7 @@ class SlabSlices:
             #if peer:
                 #self.driver.UnBindObjectFromPeer('slice', slice['slice_id'], peer)
 
-            #self.driver.AddSliceToNodes(slicename, added_nodes) 
+            #self.driver.LaunchExperimentOnOAR(slicename, added_nodes) 
 
             ## Add recognized slice tags
             #for node_name in node_names: