• Carles Fenoy's avatar
    Fix for incorrect partition point for job · dd1d573f
    Carles Fenoy authored
    If job is submitted to more than one partition, it's partition pointer can
    be set to an invalid value. This can result in the count of CPUs allocated
    on a node being bad, resulting in over- or under-allocation of its CPUs.
    Patch by Carles Fenoy, BSC.
    
    Hi all,
    
    After a tough day I've finally found the problem and a solution for 2.4.1
    I was able to reproduce the explained behavior by submitting jobs to 2 partitions.
    This makes the job to be allocated in one partition but in the schedule function the partition of the job is changed to the NON allocated one. This makes that the resources can not be free at the end of the job.
    
    I've solved this by changing the IS_PENDING test some lines above in the schedule function in (job_scheduler.c)
    
    This is the code from the git HEAD (Line 801). As this file has changed a lot from 2.4.x I have not done a patch but I'm commenting the solution here.
    I've moved the if(!IS_JOB_PENDING) after the 2nd line (part_ptr...). This prevents the partition of the job to be changed if it is already starting in another partition.
    
    job_ptr = job_queue_rec->job_ptr;
    
    part_ptr = job_queue_rec->part_ptr;
    job_ptr->part_ptr = part_ptr;
    xfree(job_queue_rec);
    
    if (!IS_JOB_PENDING(job_ptr))
    
    continue; /* started in other partition */
    
    Hope this is enough information to solve it.
    
    I've just realized (while writing this mail) that my solution has a memory leak as job_queue_rec is not freed.
    
    Regards,
    Carles Fenoy
    dd1d573f
To find the state of this project's repository at the time of any of these versions, check out the tags.