Files
maui/src/moab/MCluster.c
T
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

257 lines
4.9 KiB
C

/* HEADER */
int MClusterUpdateNodeState()
{
int nindex;
int rqindex;
mreq_t *RQ;
mjob_t *J;
short TotalTaskDed[MAX_MNODE];
short TotalProcDed[MAX_MNODE];
double TotalProcUtl[MAX_MNODE];
mnode_t *N;
const char *FName = "MClusterUpdateNodeState";
DBG(3,fSTAT) DPrint("%s()\n",
FName);
memset(TotalTaskDed,0,sizeof(TotalTaskDed));
memset(TotalProcDed,0,sizeof(TotalProcDed));
memset(TotalProcUtl,0,sizeof(TotalProcUtl));
/* add procs of all active jobs (newly updated or not) */
for (J = MJob[0]->Next;(J != NULL) && (J != MJob[0]);J = J->Next)
{
if (MJOBISACTIVE(J))
{
for (rqindex = 0;J->Req[rqindex] != NULL;rqindex++)
{
RQ = J->Req[rqindex];
for (nindex = 0;RQ->NodeList[nindex].N != NULL;nindex++)
{
N = RQ->NodeList[nindex].N;
TotalTaskDed[N->Index] += RQ->NodeList[nindex].TC;
TotalProcDed[N->Index] += RQ->NodeList[nindex].TC * (RQ->DRes.Procs >= 0) ?
RQ->DRes.Procs : N->CRes.Procs;
TotalProcUtl[N->Index] += RQ->NodeList[nindex].TC *
RQ->URes.Procs / 100.0;
} /* END for (nindex) */
} /* END for (rqindex) */
} /* END if (J->State) */
} /* END for (J = MJob[0]->Next;(J != NULL) && (J != MJob[0]);J = J->Next) */
for (nindex = 0;nindex < MAX_MNODE;nindex++)
{
N = MNode[nindex];
if ((N == NULL) || (N->Name[0] == '\0'))
break;
if (N->Name[0] == '\1')
continue;
/* reset job info */
N->JList[0] = NULL;
MNodeAdjustAvailResources(
N,
TotalProcUtl[N->Index],
TotalProcDed[N->Index],
TotalTaskDed[N->Index]);
DBG(6,fPBS) DPrint("INFO: node '%s' C/A/D procs: %d/%d/%d\n",
N->Name,
N->CRes.Procs,
N->ARes.Procs,
N->DRes.Procs);
} /* END for (nindex) */
/* associate job to node */
for (J = MJob[0]->Next;(J != NULL) && (J != MJob[0]);J = J->Next)
{
if (MJOBISACTIVE(J))
{
MJobAddToNL(J,NULL);
}
} /* END for (J) */
return(SUCCESS);
} /* END MClusterUpdateNodeState() */
int MClusterClearUsage()
{
int nindex;
mnode_t *N;
const char *FName = "MClusterClearUsage";
DBG(3,fSTRUCT) DPrint("%s()\n",
FName);
for (nindex = 0;nindex < MAX_MNODE;nindex++)
{
N = MNode[nindex];
if ((N == NULL) || (N->Name[0] == '\0'))
break;
if (N->Name[0] == '\1')
continue;
memset(&N->DRes,0,sizeof(N->DRes));
} /* END for (nindex) */
/* adjust global node */
if (MSched.GN != NULL)
{
N = MSched.GN;
/* reset global node */
N->MTime = MSched.Time;
N->ATime = MSched.Time;
memcpy(&N->ARes,&N->CRes,sizeof(N->ARes));
MNodeSetState(N,mnsIdle,0);
} /* END if (MNodeFind(MDEF_GNNAME,&N) == SUCCESS) */
return(SUCCESS);
} /* END MClusterClearUsage() */
int MClusterShowARes(
char *ResDesc, /* I */
int DFlags, /* I */
int DisplayMode, /* I */
char *Buf, /* O */
int BufSize) /* O */
{
char UName[MAX_MNAME];
char GName[MAX_MNAME];
char AName[MAX_MNAME];
char CName[MAX_MNAME];
char QName[MAX_MNAME];
char PName[MAX_MNAME];
char FeatureString[MAX_MLINE];
long MinTime;
int MinNodes;
int MinProcs;
int ReqMem;
char ReqMemCmp[MAX_MNAME];
int ShowSMP; /* (boolean) */
int Flags; /* (BM) */
char *BPtr;
int BSpace;
const char *FName = "MClusterShowARes";
DBG(2,fUI) DPrint("%s(%s,%d,%d,Buf,BufSize)\n",
FName,
(ResDesc != NULL) ? ResDesc : "NULL",
DFlags,
DisplayMode);
if ((ResDesc == NULL) || (Buf == NULL))
{
return(FAILURE);
}
BPtr = Buf;
BSpace = BufSize;
BPtr[0] = '\0';
/* initialize response */
if (DisplayMode == mwpXML)
{
/* NYI */
}
/* parse resource description */
if (MUSScanF(ResDesc,"%x%s %x%s %x%s %x%s %ld %ld %ld %d %d %x%s %d %d %x%s %x%s %x%s",
sizeof(UName),
UName,
sizeof(GName),
GName,
sizeof(AName),
AName,
sizeof(PName),
PName,
&MinTime,
&MinNodes,
&MinProcs,
&ReqMem,
&ReqMem,
sizeof(ReqMemCmp),
ReqMemCmp,
&ShowSMP,
&Flags,
sizeof(CName),
CName,
sizeof(FeatureString),
FeatureString,
sizeof(QName),
QName) == FAILURE)
{
/* invalid request string */
DBG(3,fUI) DPrint("INFO: cannot parse request\n");
switch (DisplayMode)
{
case mwpXML:
/* NYI */
break;
default:
sprintf(BPtr,"ERROR: cannot parse request\n");
break;
} /* END switch(DisplayMode) */
return(FAILURE);
}
/* NYI */
return(SUCCESS);
} /* END MClusterShowARes() */
/* END MCluster.c */