@@ -2182,6 +2182,7 @@ cdef class job:
21822182 Job_dict[u ' ntasks_per_board' ] = self ._record.ntasks_per_board
21832183 Job_dict[u ' num_cpus' ] = self ._record.num_cpus
21842184 Job_dict[u ' num_nodes' ] = self ._record.num_nodes
2185+ Job_dict[u ' num_tasks' ] = self ._record.num_tasks
21852186
21862187 if self ._record.pack_job_id:
21872188 Job_dict[u ' pack_job_id' ] = self ._record.pack_job_id
@@ -2580,6 +2581,7 @@ cdef class job:
25802581 wckey = job_opts.get(" wckey" ).encode(" UTF-8" , " replace" )
25812582 desc.wckey = wckey
25822583
2584+ # TODO when nodelist is set, min_nodes needs to be adjusted accordingly
25832585 if job_opts.get(" nodelist" ):
25842586 req_nodes = job_opts.get(" nodelist" ).encode(" UTF-8" , " replace" )
25852587 desc.req_nodes = req_nodes
@@ -2601,7 +2603,12 @@ cdef class job:
26012603 licenses = job_opts.get(" licenses" ).encode(" UTF-8" , " replace" )
26022604 desc.licenses = licenses
26032605
2604- # TODO: nodes_set
2606+ if job_opts.get(" min_nodes" ):
2607+ desc.min_nodes = job_opts.get(" min_nodes" )
2608+ if job_opts.get(" max_nodes" ):
2609+ desc.max_nodes = job_opts.get(" max_nodes" )
2610+ elif " ntasks" in job_opts and job_opts.get(" min_nodes" ) == 0 :
2611+ desc.min_nodes = 0
26052612
26062613 if job_opts.get(" ntasks_per_node" ):
26072614 ntasks_per_node = job_opts.get(" ntasks_per_node" )
@@ -2732,20 +2739,22 @@ cdef class job:
27322739 if job_opts.get(" tmpdisk" ):
27332740 desc.pn_min_tmp_disk = job_opts.get(" tmpdisk" )
27342741
2735- # TODO: declare and use MAX macro or use python max()?
2736- # if job_opts.get("overcommit"):
2737- # desc.min_cpus = max(job_opts.get("min_nodes", 1)
2738- # desc.overcommit = job_opts.get("overcommit")
2739- # elif job_opts.get("cpus_set"):
2740- # # TODO: cpus_set
2741- # # check for ntasks and cpus_per_task before multiplying
2742- # desc.min_cpus = job_opts.get("ntasks") * job_opts.get("cpus_per_task")
2743- # elif job_opts.get("nodes_set") and job_opts.get("min_nodes") == 0:
2744- # desc.min_cpus = 0
2745- # else:
2746- # desc.min_cpus = job_opts.get("ntasks")
2747-
2748- # TODO: ntasks_set, cpus_set
2742+ if job_opts.get(" overcommit" ):
2743+ desc.min_cpus = max (job_opts.get(" min_nodes" , 1 ), 1 )
2744+ desc.overcommit = job_opts.get(" overcommit" )
2745+ elif job_opts.get(" cpus_per_task" ):
2746+ desc.min_cpus = job_opts.get(" ntasks" , 1 ) * job_opts.get(" cpus_per_task" )
2747+ elif job_opts.get(" nodelist" ) and job_opts.get(" min_nodes" ) == 0 :
2748+ desc.min_cpus = 0
2749+ else :
2750+ desc.min_cpus = job_opts.get(" ntasks" , 1 )
2751+
2752+ if job_opts.get(" cpus_per_task" ):
2753+ desc.cpus_per_task = job_opts.get(" cpus_per_task" )
2754+
2755+ if job_opts.get(" ntasks" ):
2756+ desc.num_tasks = job_opts.get(" ntasks" )
2757+
27492758 if job_opts.get(" ntasks_per_socket" ):
27502759 desc.ntasks_per_socket = job_opts.get(" ntasks_per_socket" )
27512760
@@ -2833,8 +2842,13 @@ cdef class job:
28332842
28342843 # FIXME: should this be python's getcwd or C's getcwd?
28352844 # also, allow option to specify work_dir, if not, set default
2836- cwd = os.getcwd().encode(" UTF-8" , " replace" )
2837- desc.work_dir = cwd
2845+
2846+ if job_opts.get(" work_dir" ):
2847+ work_dir = job_opts.get(" work_dir" ).encode(" UTF-8" , " replace" )
2848+ desc.work_dir = work_dir
2849+ else :
2850+ cwd = os.getcwd().encode(" UTF-8" , " replace" )
2851+ desc.work_dir = cwd
28382852
28392853 if job_opts.get(" requeue" ):
28402854 desc.requeue = job_opts.get(" requeue" )
@@ -5561,9 +5575,11 @@ cdef class slurmdb_jobs:
55615575
55625576 def __cinit__ (self ):
55635577 self .job_cond = < slurm.slurmdb_job_cond_t * > slurm.xmalloc(sizeof(slurm.slurmdb_job_cond_t))
5578+ self .db_conn = slurm.slurmdb_connection_get()
55645579
55655580 def __dealloc__ (self ):
5566- pass
5581+ slurm.xfree(self .job_cond)
5582+ slurm.slurmdb_connection_close(& self .db_conn)
55675583
55685584 def get (self , jobids = [], starttime = 0 , endtime = 0 ):
55695585 u """ Get Slurmdb information about some jobs.
0 commit comments