Trying to fix the "platform crash" pbm.
authorSandrine Avakian <sandrine.avakian@inria.fr>
Wed, 22 Feb 2012 11:47:02 +0000 (12:47 +0100)
committerSandrine Avakian <sandrine.avakian@inria.fr>
Wed, 22 Feb 2012 11:47:02 +0000 (12:47 +0100)
Scheduling an experiment to take place in 3 min on OAR instead
of being immediate.
------------------
Since it seems I don't have admin rights on OAR from sfa-vm2,
I can't test the code. I am pushing these things hoping I can test
it on sfa-vm, NT's VM.
......Seriously -_-....
SA.

sfa/senslab/OARrestapi.py
sfa/senslab/slabdriver.py
sfa/senslab/slabslices.py

index cc0fa0b..da10b0e 100644 (file)
@@ -2,6 +2,8 @@
 import sys
 import httplib
 import json
+import datetime
+from time import gmtime, strftime 
 from sfa.senslab.parsing import *
 from sfa.senslab.SenslabImportUsers import *
 import urllib
@@ -9,6 +11,7 @@ import urllib2
 from sfa.util.config import Config
 from sfa.util.plxrn import PlXrn
 from sfa.util.xrn import hrn_to_urn, get_authority,Xrn,get_leaf
+
 #OARIP='10.127.255.254'
 OARIP='192.168.0.109'
 
@@ -48,11 +51,17 @@ class OARrestapi:
         self.oarserver['port'] = 80
         self.oarserver['uri'] = None
         self.oarserver['postformat'] = 'json'
+        
+        self.jobstates = ["Terminated", "Running", "Error", "Waiting", "Launching","Hold"]
+             
         self.parser = OARGETParser(self)
        
             
     def GETRequestToOARRestAPI(self, request, strval=None  ): 
         self.oarserver['uri'] = OARrequests_get_uri_dict[request] 
+        #if request is "GET_jobs_details":
+            #data = json.dumps([])
+        #else:
         data = json.dumps({})
         if strval:
           self.oarserver['uri'] = self.oarserver['uri'].replace("id",str(strval))
@@ -74,6 +83,7 @@ class OARrestapi:
             raise ServerError("GET_OAR_SRVR : Could not reach OARserver")
         try:
             js = json.loads(resp)
+            
             if strval:
                 print>>sys.stderr, " \r\n \r\n \t GETRequestToOARRestAPI strval %s js %s" %(strval,js)
             return js
@@ -81,10 +91,11 @@ class OARrestapi:
         except ValueError:
             raise ServerError("Failed to parse Server Response:" + js)
 
+   
                
-               
-    def POSTRequestToOARRestAPI(self, request, datadict, username):
+    def POSTRequestToOARRestAPI(self, request, datadict, username=None):
         #first check that all params for are OK 
+      
         print>>sys.stderr, " \r\n \r\n POSTRequestToOARRestAPI username",username
         try:
             self.oarserver['uri'] = OARrequest_post_uri_dict[request] 
@@ -194,7 +205,10 @@ class OARGETParser:
         
             
     def ParseTimezone(self) : 
-        print " ParseTimezone" 
+        api_timestamp=self.raw_json['api_timestamp']
+        #readable_time = strftime("%Y-%m-%d %H:%M:%S", gmtime(float(api_timestamp))) 
+
+        return api_timestamp
             
     def ParseJobs(self) :
         self.jobs_list = []
@@ -204,7 +218,8 @@ class OARGETParser:
         print "ParseJobsTable"
                 
     def ParseJobsDetails (self): 
-        print "ParseJobsDetails"
+       
+        print >>sys.stderr,"ParseJobsDetails %s " %(self.raw_json)
         
 
     def ParseJobsIds(self):
@@ -361,3 +376,4 @@ class OARGETParser:
             print>>sys.stderr, "\r\n OARGetParse __init__ : ERROR_REQUEST "    ,request
             
 
+  
\ No newline at end of file
index cd9dcb6..7154c01 100644 (file)
@@ -1,5 +1,8 @@
 import sys
 import subprocess
+import datetime
+from time import gmtime, strftime 
+
 from sfa.util.faults import MissingSfaInfo
 from sfa.util.sfalogging import logger
 from sfa.storage.table import SfaTable
@@ -368,8 +371,13 @@ class SlabDriver(Driver):
             print>>sys.stderr, " \r\n GetPersons person_filter %s return_fields %s return_person_list %s " %(person_filter,return_fields,return_person_list)
             return return_person_list
 
+    def GetTimezone(self):
+        time = self.oar.parser.SendRequest("GET_timezone")
+        return time
+    
 
-    def GetJobs(self,job_id= None, resources=True,return_fields=None, details = None):
+            
+    def GetJobs(self,job_id= None, resources=True,return_fields=None):
         #job_resources=['reserved_resources', 'assigned_resources','job_id', 'job_uri', 'assigned_nodes',\
         #'api_timestamp']
         #assigned_res = ['resource_id', 'resource_uri']
@@ -379,18 +387,24 @@ class SlabDriver(Driver):
        if job_id and resources is False:
             req = "GET_jobs_id"
             node_list_k = 'assigned_network_address'
+           
         if job_id and resources :
             req = "GET_jobs_id_resources"
-            node_list_k = 'reserverd_resources'
-            
+            node_list_k = 'reserved_resources' 
+
+      
+               
         #Get job info from OAR    
         job_info = self.oar.parser.SendRequest(req, job_id)
-        if job_info['state'] == 'Terminated':
-            print>>sys.stderr, "\r\n \r\n \t\t GetJobs TERMINELEBOUSIN "
-            return None
-        if job_info['state'] == 'Error':
-            print>>sys.stderr, "\r\n \r\n \t\t GetJobs ERROR "
-            return None
+        print>>sys.stderr, "\r\n \r\n \t\t GetJobs  %s " %(job_info)
+        
+        if 'state' in job_info :
+            if job_info['state'] == 'Terminated':
+                print>>sys.stderr, "\r\n \r\n \t\t GetJobs TERMINELEBOUSIN "
+                return None
+            if job_info['state'] == 'Error':
+                print>>sys.stderr, "\r\n \r\n \t\t GetJobs ERROR message %s " %(job_info)
+                return None
         
         #Get a dict of nodes . Key :hostname of the node
         node_list = self.GetNodes() 
@@ -573,8 +587,17 @@ class SlabDriver(Driver):
         reqdict['property'] =  reqdict['property'][0: len( reqdict['property'])-2] +")"
         reqdict['resource'] ="network_address="+ str(len(nodeid_list))
         reqdict['resource']+= ",walltime=" + str(00) + ":" + str(05) + ":" + str(00)
-        reqdict['script_path'] = "/bin/sleep 320"
-        reqdict['type'] = "deploy"
+        reqdict['script_path'] = "/bin/sleep 400"
+        reqdict['type'] = "deploy" 
+        timestamp = self.GetTimezone()
+
+        readable_time = strftime(self.time_format, gmtime(float(timestamp))) 
+        print >>sys.stderr," \r\n \r\n \t\t\t\t AVANT ParseTimezone readable_time %s timestanp %s " %(readable_time, timestamp )
+        timestamp =  timestamp+ 3780 #Add 3 min to server time
+        readable_time = strftime(self.time_format, gmtime(float(timestamp))) 
+
+        print >>sys.stderr,"  \r\n \r\n \t\t\t\tAPRES ParseTimezone readable_time %s timestanp %s  " %(readable_time , timestamp)
+        reqdict['reservation'] = readable_time
          
         # first step : start the OAR job
         print>>sys.stderr, "\r\n \r\n AddSliceToNodes reqdict   %s \r\n site_list   %s"  %(reqdict,site_list)   
@@ -584,6 +607,7 @@ class SlabDriver(Driver):
         self.db.update('slice',['oar_job_id'], [answer['id']], 'slice_hrn', slice_name)
         
         jobid=answer['id']
+        print>>sys.stderr, "\r\n \r\n AddSliceToNodes jobid    %s added_nodes  %s"  %(jobid,added_nodes)  
         # second step : configure the experiment
         # we need to store the nodes in a yaml (well...) file like this :
         # [1,56,23,14,45,75] with name /tmp/sfa<jobid>.json
index 5853676..ccc97b3 100644 (file)
@@ -7,6 +7,7 @@ from sfa.util.policy import Policy
 from sfa.rspecs.rspec import RSpec
 from sfa.plc.vlink import VLink
 from sfa.util.xrn import Xrn
+from sfa.util.sfalogging import logger
 
 MAXINT =  2L**31-1
 
@@ -189,11 +190,12 @@ class SlabSlices:
             tmp=  slice['PI'][0].split(".")
             username = tmp[(len(tmp)-1)]
             self.driver.AddSliceToNodes(slice['name'], added_nodes, username)
+            
             if deleted_nodes:
                 self.driver.DeleteSliceFromNodes(slice['name'], deleted_nodes)
 
         except: 
-            self.logger.log_exc('Failed to add/remove slice from nodes')
+            logger.log_exc('Failed to add/remove slice from nodes')
 
     def free_egre_key(self):
         used = set()
@@ -243,7 +245,7 @@ class SlabSlices:
                             self.driver.BindObjectToPeer( 'key', key['key_id'], peer['shortname'], remote_key_id)
                         except:
                             self.driver.DeleteKey(key['key_id'])
-                            self.logger("failed to bind key: %s to peer: %s " % (key['key_id'], peer['shortname']))
+                            logger("failed to bind key: %s to peer: %s " % (key['key_id'], peer['shortname']))
                 except Exception,e:
                     self.driver.DeletePerson(person['person_id'])
                     raise e