maui/contrib/checkreq/AussieCheckReq.c
dev 9a0042c61e Initial revision
git-svn-id: svn://opensvn.adaptivecomputing.com/maui/trunk@2 3f5042e3-fb1d-0410-be18-d6ca2573e517
2005-07-12 21:12:53 +00:00

73 lines
1.2 KiB
C

/* CONTRIB: AussieCheckReq.c */
/* code to be included in LocalCheckRequirements() in Local.c */
/* This code enofrces the policy 'only one job per user per node' *
* on SMP shared nodes *
*/
/* uses global BQS and Job */
int ContribAussieCheckReq(
job_t *J,
node_t *N,
long StartTime)
{
int rindex;
long Overlap;
res_t *R;
DBG(4,fCONFIG) DPrint("ContribAussieCheckReq(%s,%s)\n",
J->Name,
N->Name);
for (rindex = 0;rindex < MAX_RESERVATION;rindex++)
{
R = N->R[rindex];
if (R == (res_t *)MAX_RES_DEPTH)
continue;
if (R == NULL)
break;
Overlap =
MIN(R->EndTime,StartTime + J->SpecWCLimit[0]) -
MAX(R->StartTime,StartTime);
if (Overlap <= 0)
{
/* reservations do not overlap */
continue;
}
if (R->J == NULL)
{
/* reservation is not a job reservation */
continue;
}
if (((job_t *)R->J)->Cred.U != J->Cred.U)
{
/* users do not match */
continue;
}
/* overlapping job reservation for same user found */
return(FAILURE);
} /* END for (rindex) */
return(SUCCESS);
} /* END ContribAussieCheckReq() */
/* END AussieCheckReq.c */