/* */ int __OMCLoadArgs( char Flag, /* I */ char *OptArg, /* I */ int *sindex) { int index; switch ((char)Flag) { case 'a': switch(*sindex) { case svcDiagnose: /* a-ACCOUNT */ DiagMode = mxoAcct; break; case svcShowBackfillWindow: /* a-ACCOUNT */ if ((OptArg == NULL) || (OptArg[0] == '\0')) { MCShowUsage(*sindex); exit(1); } else { MUStrCpy(Account,OptArg,sizeof(Account)); } break; case svcSetJobHold: case svcReleaseJobHold: /* a-ALL */ HType = mhAll; break; case svcShowStats: /* a-ACCOUNT */ ObjectType = mxoAcct; if ((OptArg != NULL) && (OptArg[0] != '\0')) { MUStrCpy(ObjectID,OptArg,sizeof(ObjectID)); } break; case svcResCreate: /* a-ACCOUNTLIST */ if (OptArg == NULL) { MCShowUsage(*sindex); exit(1); } MUStrCpy(AccountList,OptArg,sizeof(AccountList)); break; default: MCShowUsage(*sindex); exit(1); break; } /* END switch(*sindex) */ break; case 'A': switch(*sindex) { case svcJobShow: case svcNodeShow: /* A-AVP */ Flags |= (1 << mcmParse); break; case svcShowBackfillWindow: /* A-ALL */ strcpy(UserName,ALL); strcpy(Group,ALL); strcpy(Account,ALL); break; case svcResCreate: /* A-CHARGEACCOUNT */ if (OptArg == NULL) { MCShowUsage(*sindex); exit(1); } MUStrCpy(ChargeAccount,OptArg,sizeof(ChargeAccount)); break; default: MCShowUsage(*sindex); exit(1); break; } /* END switch(*sindex) */ break; case 'b': switch (*sindex) { case svcSetJobHold: case svcReleaseJobHold: /* b-BATCH */ HType = mhBatch; break; case svcShowQ: /* b-BLOCKING */ QueueMode = 3; break; default: MCShowUsage(*sindex); exit(1); break; } break; case 'c': switch(*sindex) { case svcShowStats: /* c-CLASS */ ObjectType = mxoClass; if ((OptArg != NULL) && (OptArg[0] != '\0')) { MUStrCpy(ObjectID,OptArg,sizeof(ObjectID)); } break; case svcMJobCtl: /* c-CANCEL */ JobCtlMode = mjcmCancel; break; case svcMGridCtl: /* c-COMMIT */ MGridMode = mcCommit; break; case svcRunJob: /* c-CLEAR */ Flags = mcmClear; break; case svcBNFQuery: /* c-COMMAND */ if (OptArg == NULL) { MCShowUsage(*sindex); exit(1); } MUStrCpy(QLine,OptArg,sizeof(QLine)); break; case svcDiagnose: /* c-CLASS */ DiagMode = mxoClass; break; case svcResCreate: /* c-CLASSLIST */ if (OptArg == NULL) { MCShowUsage(*sindex); exit(1); } MUStrCpy(ClassList,OptArg,sizeof(ClassList)); break; case svcShowBackfillWindow: if (!strcmp(OptArg,"ALL")) { strcpy(ClassString,ALL); } else { MUStrCpy(ClassString,OptArg,sizeof(ClassString)); } break; default: MCShowUsage(*sindex); exit(1); break; } break; case 'd': switch(*sindex) { case svcShowStats: /* d-DEPTH (Requires Arg) */ if (OptArg == NULL) { MCShowUsage(*sindex); exit(1); } if (OptArg[0] == '\0') { MCShowUsage(*sindex); exit(1); } Flags |= atoi(OptArg); break; case svcResCreate: case svcShowBackfillWindow: /* d-DURATION (Requires Arg) */ if (OptArg == NULL) { MCShowUsage(*sindex); exit(1); } Duration = MUTimeFromString(OptArg); break; default: MCShowUsage(*sindex); exit(1); break; } /* END switch(*sindex) */ break; case 'e': switch(*sindex) { case svcResCreate: /* e-ENDTIME */ if (OptArg == NULL) { MCShowUsage(*sindex); exit(1); } if (MUStringToE(OptArg,&EndTime) != SUCCESS) { MCShowUsage(*sindex); fprintf(stderr,"ERROR: invalid endtime specified, '%s'\n", OptArg); exit(1); } break; default: MCShowUsage(*sindex); exit(1); break; } break; case 'f': switch(*sindex) { case svcSched: /* f-FAILURE */ SchedMode = msctlFailure; if (OptArg != NULL) { MUStrCpy(SchedArg,OptArg,sizeof(SchedArg)); } break; case svcDiagnose: /* f-FAIRSHARE */ DiagMode = mxoFS; break; case svcRunJob: /* f-FORCE */ Flags = mcmForce; break; case svcShowBackfillWindow: case svcResCreate: MUStrCpy(FeatureString,OptArg,sizeof(FeatureString)); break; default: MCShowUsage(*sindex); exit(1); break; } /* END switch(*sindex) */ break; case 'F': /* F-LOGFACILITY */ if (OptArg == NULL) { MCShowUsage(*sindex); exit(1); } mlog.FacilityList = atoi(OptArg); DBG(2,fCONFIG) DPrint("INFO: LOGFACILITY set to %ld\n", mlog.FacilityList); break; case 'g': switch(*sindex) { case svcDiagnose: /* g-GROUP */ DiagMode = mxoGroup; break; case svcResCreate: /* g-GROUPLIST */ if (OptArg == NULL) { MCShowUsage(*sindex); exit(1); } MUStrCpy(GroupList,OptArg,sizeof(GroupList)); break; case svcShowStats: /* g-GROUP */ ObjectType = mxoGroup; if ((OptArg != NULL) && (OptArg[0] != '\0')) { MUStrCpy(ObjectID,OptArg,sizeof(ObjectID)); } break; case svcResShow: /* g-GREP */ Mode |= (1 << mcmGrep); break; case svcShowBackfillWindow: /* g-GROUP */ if ((OptArg == NULL) || (OptArg[0] == '\0')) { MCShowUsage(*sindex); exit(1); } MUStrCpy(Group,OptArg,sizeof(Group)); break; default: MCShowUsage(*sindex); exit(1); break; } break; case 'i': switch(*sindex) { case svcShowQ: /* i-IDLE */ QueueMode = 1; break; case svcSched: /* i-INIT */ SchedMode = msctlInit; if (OptArg[0] != '-') MUStrCpy(SchedArg,OptArg,sizeof(SchedArg)); break; default: MCShowUsage(*sindex); exit(1); break; } break; case 'j': switch(*sindex) { case svcSched: /* j-Job */ SchedMode = msctlSubmit; MUStrCpy(SchedArg,OptArg,sizeof(SchedArg)); break; case svcDiagnose: /* j-JOB */ DiagMode = mxoJob; break; case svcResCreate: MUStrCpy(JobFeatureString,OptArg,sizeof(JobFeatureString)); break; default: MCShowUsage(*sindex); exit(1); break; } /* END switch(*sindex) */ break; case 'k': switch(*sindex) { case svcSched: /* k-KILL */ SchedMode = msctlKill; break; default: MCShowUsage(*sindex); exit(1); break; } break; case 'l': switch(*sindex) { case svcMGridCtl: /* l-LIST */ MGridMode = mcList; break; case svcJobShow: case svcDiagnose: switch(OptArg[0]) { case 'o': case 'O': /* o-OFFPOLICY */ PType = ptOFF; break; case 'h': case 'H': /* h-HARDPOLICY */ PType = ptHARD; break; case 's': case 'S': /* s-SOFTPOLICY */ PType = ptSOFT; break; default: MCShowUsage(*sindex); exit(1); break; } break; case svcSched: /* l-LIST */ SchedMode = msctlList; if (OptArg != NULL) { MUStrCpy(SchedArg,OptArg,sizeof(SchedArg)); } break; default: MCShowUsage(*sindex); exit(1); break; } break; case 'm': switch(*sindex) { case svcMJobCtl: /* m-MODIFY */ JobCtlMode = mjcmModify; break; case svcMGridCtl: /* m-MODIFY */ MGridMode = mcModify; break; case svcDiagnose: /* m-FRAME */ DiagMode = mxoFrame; break; case svcShowBackfillWindow: /* m-MEMORY */ if (OptArg == NULL) { MCShowUsage(*sindex); exit(1); } if (isdigit(OptArg[0])) { /* if no comparison given */ Memory = (int)strtol(OptArg,NULL,0); MIndex = mcmpGE; } else { char tmpLine[MAX_MLINE]; /* if comparison given */ for (index = 0;ispunct(OptArg[index]);index++); strncpy(tmpLine,OptArg,index); tmpLine[index] = '\0'; DBG(1,fCONFIG) DPrint("INFO: arg: '%s' comparison '%s' (%d)\n", OptArg, tmpLine, index); for (MIndex = 0;MComp[MIndex] != NULL;MIndex++) { if (!strcmp(tmpLine,MComp[MIndex])) break; } if (MComp[MIndex] == NULL) MIndex = 0; sscanf((OptArg + index),"%d", &Memory); } break; case svcSched: /* m-MODIFY */ SchedMode = msctlModify; if (OptArg == NULL) { MCShowUsage(*sindex); exit(1); } MUStrCpy(SchedArg,OptArg,sizeof(SchedArg)); break; default: MCShowUsage(*sindex); exit(1); break; } /* END switch(*sindex) */ break; case 'M': switch(*sindex) { case svcShowBackfillWindow: /* m-DMEMORY */ if (OptArg == NULL) { MCShowUsage(*sindex); exit(1); } DMemory = atoi(OptArg); break; default: MCShowUsage(*sindex); exit(1); break; } /* END switch(*sindex) */ break; case 'n': switch(*sindex) { case svcResCreate: /* n-Reservation Name */ if (OptArg == NULL) { MCShowUsage(*sindex); exit(1); } else { MUStrCpy(ObjectID,OptArg,sizeof(ObjectID)); } break; case svcSched: /* n-NODETABLE */ SchedMode = msctlNodeTable; break; case svcRunJob: case svcJobShow: /* n-NODELIST */ if (OptArg == NULL) { MCShowUsage(*sindex); exit(1); } if (strlen(OptArg) >= sizeof(NodeRegEx)) { fprintf(stderr,"ERROR: expression too long. (%d > %d)\n", (int)strlen(OptArg), (int)sizeof(NodeRegEx)); exit(1); } MUStrCpy(NodeRegEx,OptArg,sizeof(NodeRegEx)); break; case svcShowStats: case svcResShow: /* n-NODE (No Argument) */ ObjectType = mxoNode; break; case svcDiagnose: /* n-NODE */ DiagMode = mxoNode; break; case svcShowBackfillWindow: /* n-NODE */ if (OptArg == NULL) { MCShowUsage(*sindex); exit(1); } NodeCount = atoi(OptArg); break; default: MCShowUsage(*sindex); exit(1); break; } break; case 'N': switch(*sindex) { case svcResCreate: if ((OptArg == NULL) || (OptArg[0] == '\0')) { MCShowUsage(*sindex); exit(1); } MUStrCpy(NodeSetString,OptArg,sizeof(NodeSetString)); break; default: MCShowUsage(*sindex); exit(1); break; } break; case 'o': switch(*sindex) { default: MCShowUsage(*sindex); exit(1); break; } break; case 'p': switch(*sindex) { case svcResCreate: /* p-PARTITION (REQUIRED ARG) */ if (OptArg == NULL) { MCShowUsage(*sindex); exit(1); } if (OptArg[0] != '\0') { MUStrCpy(ParName,OptArg,sizeof(ParName)); } break; case svcShowQ: case svcResShow: case svcShowBackfillWindow: case svcRunJob: /* p-PARTITION (REQUIRED ARG) */ if (OptArg == NULL) { MCShowUsage(*sindex); exit(1); } if (OptArg[0] != '\0') { MUStrCpy(ParName,OptArg,sizeof(ParName)); } else { MCShowUsage(*sindex); exit(1); } DBG(4,fCONFIG) DPrint("INFO: partition set to %s\n", ParName); break; case svcDiagnose: /* p-PRIORITY */ DiagMode = mxoPriority; break; default: MCShowUsage(*sindex); exit(1); break; } /* END switch(*sindex) */ break; case 'q': switch(*sindex) { case svcShowStats: /* q-QOS */ ObjectType = mxoQOS; if ((OptArg != NULL) && (OptArg[0] != '\0')) { MUStrCpy(ObjectID,OptArg,sizeof(ObjectID)); } break; case svcResCreate: /* q-QUEUELIST */ if (OptArg == NULL) { MCShowUsage(*sindex); exit(1); } MUStrCpy(ClassList,OptArg,sizeof(ClassList)); break; case svcMGridCtl: /* q-QUERY */ MGridMode = mcQuery; break; case svcDiagnose: /* q-QUEUE */ DiagMode = mxoQueue; break; case svcShowBackfillWindow: /* q-QOS */ MUStrCpy(QOSName,OptArg,sizeof(QOSName)); break; default: MCShowUsage(*sindex); exit(1); break; } break; case 'Q': switch(*sindex) { case svcResCreate: /* Q-QOSLIST */ if (OptArg == NULL) { MCShowUsage(*sindex); exit(1); } MUStrCpy(QOSList,OptArg,sizeof(QOSList)); break; case svcDiagnose: /* q-QOS */ DiagMode = mxoQOS; break; default: MCShowUsage(*sindex); exit(1); break; } break; case 'r': switch(*sindex) { case svcJobShow: /* reservation */ MUStrCpy(ResList,OptArg,sizeof(ResList)); break; case svcSetJobSystemPrio: /* r-RELATIVE */ PrioMode = mjpRelative; break; case svcResCreate: /* r-RESOURCELIST */ if (OptArg == NULL) { MCShowUsage(*sindex); exit(1); } MUStrCpy(ResourceList,OptArg,sizeof(ResourceList)); break; case svcMGridCtl: /* r-RELEASE */ MGridMode = mcRemove; break; case svcMJobCtl: /* r-RESUME */ JobCtlMode = mjcmResume; break; case svcResShow: /* r-RELATIVEMODE */ Mode |= (1 << mcmRelative); break; case svcShowBackfillWindow: /* r-pRoc */ if (OptArg == NULL) { MCShowUsage(*sindex); exit(1); } ProcCount = atoi(OptArg); break; case svcDiagnose: /* r-RESERVATION */ DiagMode = mxoRsv; break; case svcSched: /* r-RESUME */ SchedMode = msctlResume; MUStrCpy(SchedArg,OptArg,sizeof(SchedArg)); break; case svcShowQ: /* r-RUNNING */ QueueMode = 2; break; default: MCShowUsage(*sindex); exit(1); break; } break; case 'R': switch(*sindex) { case svcDiagnose: /* R-RM */ DiagMode = mxoRM; break; case svcSched: /* R-RECONFIG */ SchedMode = msctlReconfig; break; default: MCShowUsage(*sindex); exit(1); break; } break; case 's': switch(*sindex) { case svcRunJob: /* s-SUSPEND */ Flags = mcmBlock; break; case svcMJobCtl: /* s-SUBMIT */ JobCtlMode = mjcmSubmit; break; case svcMGridCtl: /* s-SET */ MGridMode = mcSet; break; case svcSetJobHold: case svcReleaseJobHold: /* s-SystemHold */ HType = mhSystem; break; case svcShowStats: /* s-SCHEDULER */ ObjectType = mxoSched; break; case svcResCreate: /* s-STARTTIME (Arg Required) */ if (OptArg == NULL) { MCShowUsage(*sindex); exit(1); } if (MUStringToE(OptArg,&BeginTime) != SUCCESS) { fprintf(stderr,"ERROR: invalid StartTime specified, '%s'\n", OptArg); exit(1); } break; case svcSched: SchedMode = msctlStop; if (OptArg == NULL) { MCShowUsage(*sindex); exit(1); } if (OptArg[0] != '-') MUStrCpy(SchedArg,OptArg,sizeof(SchedArg)); break; case svcResShow: /* s-SUMMARY */ Flags |= (1 << mcmSummary); break; default: MCShowUsage(*sindex); exit(1); break; } /* END switch(*sindex) */ break; case 'S': switch(*sindex) { case svcMJobCtl: /* S-SUSPEND */ JobCtlMode = mjcmSuspend; break; case svcMGridCtl: /* S-STAGE */ MGridMode = mcSubmit; break; case svcShowBackfillWindow: /* S-SMP */ BFMode = 1; break; case svcSched: /* S-STEP */ SchedMode = msctlStep; if (OptArg == NULL) { MCShowUsage(*sindex); exit(1); } MUStrCpy(SchedArg,OptArg,sizeof(SchedArg)); break; case svcShowStats: /* S-SUMMARY */ Flags |= 1; break; case svcDiagnose: /* s-SYS */ DiagMode = mxoSys; break; default: MCShowUsage(*sindex); exit(1); break; } /* END switch(*sindex) */ break; case 't': switch(*sindex) { case svcMGridCtl: /* t-TYPE (REQUIRED ARG) */ if (OptArg == NULL) { MCShowUsage(*sindex); exit(1); } MUStrCpy(Type,OptArg,sizeof(Type)); break; case svcResCreate: /* t-TASKCOUNT */ if (OptArg == NULL) { MCShowUsage(*sindex); exit(1); } TaskCount = (int)strtol(OptArg,NULL,0); break; case svcDiagnose: /* p-PARTITION (REQUIRED ARG) */ if (OptArg == NULL) { MCShowUsage(*sindex); exit(1); } if (OptArg[0] != '\0') { MUStrCpy(ParName,OptArg,sizeof(ParName)); DBG(4,fCONFIG) DPrint("INFO: partition set to %s\n", ParName); } else { DiagMode = mxoPar; } break; default: MCShowUsage(*sindex); exit(1); break; } /* END switch(*sindex) */ break; case 'T': switch(*sindex) { case svcMGridCtl: /* T-TIME (REQUIRED ARG) */ if (OptArg == NULL) { MCShowUsage(*sindex); exit(1); } MUStrCpy(RangeList,OptArg,sizeof(RangeList)); break; default: MCShowUsage(*sindex); exit(1); break; } break; case 'u': switch(*sindex) { case svcSetJobHold: case svcReleaseJobHold: /* u-USERHOLD */ HType = mhUser; break; case svcResCreate: /* u-USERLIST */ if (OptArg == NULL) { MCShowUsage(*sindex); exit(1); } MUStrCpy(UserList,OptArg,sizeof(UserList)); break; case svcShowStats: /* u-USER */ ObjectType = mxoUser; if ((OptArg != NULL) && (OptArg[0] != '\0')) { MUStrCpy(ObjectID,OptArg,sizeof(ObjectID)); } break; case svcShowBackfillWindow: /* u-USER */ if ((OptArg == NULL) || (OptArg[0] == '\0')) { MCShowUsage(*sindex); exit(1); } MUStrCpy(UserName,OptArg,sizeof(UserName)); break; case svcDiagnose: /* u-USER */ DiagMode = mxoUser; break; case svcShowQ: /* u-USER */ /* HvB */ if ((OptArg == NULL) || (OptArg[0] == '\0')) { MCShowUsage(*sindex); exit(1); } MUStrCpy(ShowUserName,OptArg,sizeof(ShowUserName)); break; default: MCShowUsage(*sindex); exit(1); break; } /* END switch(*sindex) */ break; case 'v': switch(*sindex) { case svcJobShow: case svcNodeShow: case svcDiagnose: case svcShowConfig: case svcShowStats: case svcResShow: case svcShowBackfillWindow: case svcShowQ: /* v-VERBOSE */ Flags |= (1 << mcmVerbose); break; default: fprintf(stderr,"%s client version %s\n", MSCHED_SNAME, MSCHED_VERSION); exit(1); break; } /* END switch(*sindex) */ break; case 'V': switch(*sindex) { default: fprintf(stderr,"%s client version %s\n", MSCHED_SNAME, MSCHED_VERSION); exit(1); break; } /* END switch(*sindex) */ break; case 'x': switch(*sindex) { case svcRunJob: /* x-FORCE2 */ Flags = mcmForce2; break; case svcResCreate: /* x-FLAGS */ strncpy(ResFlags,OptArg,sizeof(ResFlags)); break; case svcClusterShow: /* x-XML */ UseXML = TRUE; break; default: MCShowUsage(*sindex); exit(1); break; } /* END switch(*sindex) */ break; default: DBG(1,fCONFIG) DPrint("WARNING: unexpected flag detected '%c'\n", Flag); MCShowUsage(*sindex); exit(1); break; } /* END switch (Flag) */ return(SUCCESS); } /* END __OMCLoadArgs() */ int __OMCProcessArgs( int ArgCount, /* I */ char *Args[], /* I */ int *sindex) /* I */ { int ArgIndex; int index; ArgIndex = 1; switch(*sindex) { case svcShowStats: if (ArgCount != 1) { MCShowUsage(*sindex); exit(1); } if (ObjectType == -1) ObjectType = mxoSched; if (ObjectID[0] == '\0') MUStrCpy(ObjectID,NONE,sizeof(ObjectID)); if (ObjectType == mxoNode) { /* set default EvaluationDepth to MAX_MJOB */ if (Flags < (1 << 1)) Flags |= (MAX_MJOB << 1); } sprintf(MsgBuffer,"%d %s %s %d", ObjectType, ObjectID, ParName, Flags); break; case svcShowQ: if (QueueMode == -1) QueueMode = 0; sprintf(MsgBuffer,"%d %s %d %s", QueueMode, ParName, Flags, ShowUserName); break; case svcSetJobSystemPrio: case svcSetJobUserPrio: /* Format: */ if (ArgCount != 3) { MCShowUsage(*sindex); exit(1); } /* route through mjobctl */ sprintf(MsgBuffer,"\n", Args[ArgIndex], Args[ArgIndex + 1], (PrioMode == mjpRelative) ? "relative" : "absolute"); *sindex = svcMJobCtl; /* sprintf(MsgBuffer,"%s %s %d", Args[ArgIndex], Args[ArgIndex + 1], PrioMode); */ DBG(2,fCONFIG) DPrint("INFO: setting priority on job %s to %s (%d)\n", Args[ArgIndex + 1], Args[ArgIndex], PrioMode); break; case svcSetJobQOS: /* Format: */ if (ArgCount != 3) { MCShowUsage(*sindex); exit(1); } /* route through mjobctl */ sprintf(MsgBuffer,"\n", Args[ArgIndex], Args[ArgIndex + 1]); *sindex = svcMJobCtl; /* sprintf(MsgBuffer,"%s %s", Args[ArgIndex], Args[ArgIndex + 1]); */ DBG(2,fCONFIG) DPrint("INFO: setting QOS on job %s to %s\n", Args[ArgIndex + 1], Args[ArgIndex]); break; case svcSetJobHold: case svcReleaseJobHold: /* Format: */ if (ArgCount != 2) { MCShowUsage(*sindex); exit(1); } if (HType == -1) HType = mhAll; DBG(2,fCONFIG) DPrint("INFO: hold type %s selected\n", MHoldType[HType]); /* route through mjobctl */ sprintf(MsgBuffer,"\n", MHoldType[HType], (*sindex == svcSetJobHold) ? "set" : "unset", Args[ArgIndex]); *sindex = svcMJobCtl; /* NOTE: HType not supported */ /* sprintf(MsgBuffer,"%s %d\n", Args[ArgIndex], HType); */ DBG(3,fCONFIG) DPrint("INFO: Buffer '%s' (%d)\n", MsgBuffer, (int)strlen(MsgBuffer)); break; case svcSetJobDeadline: /* Format: */ if (ArgCount == 3) { if (MUStringToE(Args[ArgIndex + 1],&BeginTime) != SUCCESS) { fprintf(stderr,"ERROR: Invalid Job Deadline Specified\n"); exit(1); } } else { MCShowUsage(*sindex); exit(1); } sprintf(MsgBuffer,"%s %ld\n", Args[ArgIndex], BeginTime); DBG(2,fCONFIG) DPrint("INFO: deadline %ld set on job %s\n", BeginTime, Args[ArgIndex + 1]); break; case svcReleaseJobDeadline: /* Format: */ if (ArgCount == 2) { MUStrCpy(MsgBuffer,Args[ArgIndex],sizeof(MsgBuffer)); } else { MCShowUsage(*sindex); exit(1); } break; case svcSched: /* Format: -k | -r | -R | -s [] | -S [] ] */ if (SchedMode == -1) { MCShowUsage(*sindex); exit(1); } sprintf(MsgBuffer,"%d %s", SchedMode, SchedArg); DBG(2,fCONFIG) DPrint("INFO: sending schedctl command: '%s'\n", MsgBuffer); break; case svcDiagnose: if (DiagMode == -1) { MCShowUsage(*sindex); exit(1); } if (DiagMode == mxoQueue) { if (PType == -1) PType = ptSOFT; sprintf(MsgBuffer,"%d %d %s", DiagMode, PType, ParName); } else { sprintf(MsgBuffer,"%d %d %s %s", DiagMode, Flags, ParName, (Args[ArgIndex] == NULL) ? NONE : Args[ArgIndex]); } break; case svcResCreate: if (ArgCount != 2) { MCShowUsage(*sindex); exit(1); } { time_t tmpT; time(&tmpT); ClientTime = (long)tmpT; } /* END BLOCK */ if (BeginTime == 0) BeginTime = ClientTime; if (Duration != 0) EndTime = BeginTime + Duration; else if (EndTime == MAX_MTIME) EndTime = BeginTime + 100000000; DBG(6,fALL) DPrint("INFO: ChargeAccount: %s\n", ChargeAccount); RegEx = Args[ArgIndex]; if (strlen(RegEx) >= sizeof(NodeRegEx)) { fprintf(stderr,"ERROR: regular expression too long. (%d > %d)\n", (int)strlen(Args[ArgIndex]), (int)sizeof(NodeRegEx)); exit(1); } sprintf(MsgBuffer,"%ld %ld %ld %s %s %s %s %s %s %s %s %s %s %s %s %s %d %s", ClientTime, BeginTime, EndTime, ParName, UserList, GroupList, AccountList, ClassList, QOSList, ObjectID, ResourceList, ChargeAccount, RegEx, FeatureString, NodeSetString, ResFlags, TaskCount, JobFeatureString); break; case svcResDestroy: /* copy reservation name into buffer */ if (ArgCount >= 2) { MsgBuffer[0] = '\0'; for (index = ArgIndex;index < ArgCount;index++) { MUStrCat(MsgBuffer,Args[index],sizeof(MsgBuffer)); MUStrCat(MsgBuffer," ",sizeof(MsgBuffer)); } } else { MCShowUsage(*sindex); exit(1); } break; case svcResShow: /* copy job if provided */ if (ArgCount > 2) { MCShowUsage(*sindex); exit(1); } if (ObjectType == -1) { ObjectType = mxoJob; } if (C.Format == mwpXML) Flags |= (1 << mcmXML); sprintf(MsgBuffer,"%d %s %d %s", ObjectType, ParName, Flags, (Args[ArgIndex] != NULL) ? Args[ArgIndex] : NONE); break; case svcShowJobDeadline: if (ArgCount == 2) { MUStrCpy(MsgBuffer,Args[ArgIndex],sizeof(MsgBuffer)); } break; case svcNodeShow: /* copy node */ if (ArgCount == 2) { sprintf(MsgBuffer,"%s %d", Args[ArgIndex], Flags); } else { MCShowUsage(*sindex); exit(1); } break; case svcJobShow: if (PType == -1) PType = ptSOFT; if (ArgCount == 2) { sprintf(MsgBuffer,"%d %s %d %s %s", PType, Args[ArgIndex], Flags, ResList, (NodeRegEx[0] != '\0') ? NodeRegEx : NONE); } else { MCShowUsage(*sindex); exit(1); } break; case svcShowEarliestDeadline: if (ArgCount == 2) { sprintf(MsgBuffer,"%s %s", Args[ArgIndex], ParName); } else { MCShowUsage(*sindex); exit(1); } break; case svcRunJob: /* copy job */ if (ArgCount == 2) { sprintf(MsgBuffer,"%s %s %s %s", Args[ArgIndex], MClientMode[Flags], ParName, (NodeRegEx[0] != '\0') ? NodeRegEx : NONE); } else { MCShowUsage(*sindex); exit(1); } break; case svcCancelJob: if (ArgCount >= 2) { /* copy job regex into buffer */ MsgBuffer[0] = '\0'; for (index = ArgIndex;index < ArgCount;index++) { MUStrCat(MsgBuffer,Args[index],sizeof(MsgBuffer)); MUStrCat(MsgBuffer," ",sizeof(MsgBuffer)); } } else { MCShowUsage(*sindex); exit(1); } break; case svcShowGrid: /* Format: */ if (ArgCount == 2) { /* Copy Statistics Type */ MUStrCpy(MsgBuffer,Args[ArgIndex],sizeof(MsgBuffer)); } else { MCShowUsage(*sindex); exit(1); } break; case svcChangeParameter: /* Format: [ ] ... */ if (ArgCount < 3) { MCShowUsage(*sindex); exit(1); } /* copy parameter and all values into buffer */ for (index = ArgIndex;index < ArgCount;index++) { MUStrCat(MsgBuffer,Args[index],sizeof(MsgBuffer)); MUStrCat(MsgBuffer," ",sizeof(MsgBuffer)); } /* terminate line with newline character */ MUStrCat(MsgBuffer,"\n",sizeof(MsgBuffer)); break; case svcMigrateJob: if (ArgCount != 3) { MCShowUsage(*sindex); exit(1); } /* Copy Job and Server into Buffer */ sprintf(MsgBuffer,"%s %s", Args[ArgIndex], Args[ArgIndex + 1]); break; case svcShowEstimatedStartTime: if (ArgCount != 2) { MCShowUsage(*sindex); exit(1); } /* copy job into buffer */ MUStrCpy(MsgBuffer,Args[ArgIndex],sizeof(MsgBuffer)); break; case svcShowBackfillWindow: sprintf(MsgBuffer,"%s %s %s %s %ld %d %d %d %d %s %d %d %s %s %s", UserName, Group, Account, ParName, Duration, NodeCount, ProcCount, DMemory, Memory, MComp[MIndex], BFMode, Flags, ClassString, FeatureString, QOSName); break; case svcShowConfig: /* allow verbose flag */ if (Flags & (1 << mcmVerbose)) { MUStrCpy(MsgBuffer,"VERBOSE",sizeof(MsgBuffer)); } /* single optional parameter accepted */ if (ArgCount == 2) { strcat(MsgBuffer," "); strcat(MsgBuffer,Args[ArgIndex]); } else if (ArgCount > 2) { MCShowUsage(*sindex); exit(1); } break; case svcResetStats: /* no arguments accepted */ if (ArgCount != 1) { MCShowUsage(*sindex); exit(1); } break; case svcClusterShow: /* no arguments accepted */ if (ArgCount != 1) { MCShowUsage(*sindex); exit(1); } sprintf(MsgBuffer,"%s", (UseXML == TRUE) ? "XML" : "DEFAULT"); break; case svcBNFQuery: MUStrCpy(MsgBuffer,QLine,sizeof(MsgBuffer)); break; case svcMJobCtl: if (JobCtlMode == mjcmNONE) { MCShowUsage(*sindex); exit(1); } switch (JobCtlMode) { case mjcmCancel: sprintf(MsgBuffer,"%s %s", MJobCtlCmds[JobCtlMode], Args[ArgIndex]); break; case mjcmSuspend: sprintf(MsgBuffer,"%s %s", MJobCtlCmds[JobCtlMode], Args[ArgIndex]); case mjcmSubmit: sprintf(MsgBuffer,"%s [NONE] [NONE] %s", MJobCtlCmds[JobCtlMode], Args[ArgIndex]); break; default: MCShowUsage(*sindex); exit(1); /*NOTREACHED*/ break; } /* END switch(JobCtlMode) */ break; case svcMNodeCtl: /* FORMAT: */ if (ArgCount != 4) { MCShowUsage(*sindex); exit(1); } sprintf(MsgBuffer,"%s %s %s", Args[ArgIndex], Args[ArgIndex + 1], Args[ArgIndex + 2]); break; case svcMGridCtl: if (MGridMode == mcNONE) { MCShowUsage(*sindex); exit(1); } switch (MGridMode) { case mcCommit: sprintf(MsgBuffer,"%s %s", MGridCtlCmds[MGridMode], Args[ArgIndex]); break; case mcList: sprintf(MsgBuffer,"%s %s %s %s", MGridCtlCmds[MGridMode], Args[ArgIndex], Args[ArgIndex + 1], (Args[ArgIndex + 2] == NULL) ? "ALL" : Args[ArgIndex + 2]); break; case mcModify: if (ArgCount != 3) { MCShowUsage(*sindex); exit(1); } sprintf(MsgBuffer,"%s %s %s", MGridCtlCmds[MGridMode], Args[ArgIndex], Args[ArgIndex + 1]); break; case mcRemove: sprintf(MsgBuffer,"%s %s %s", MGridCtlCmds[MGridMode], Args[ArgIndex], Args[ArgIndex + 1]); break; case mcSubmit: sprintf(MsgBuffer,"%s %s", MGridCtlCmds[MGridMode], Args[ArgIndex]); break; case mcSet: /* FORMAT: */ sprintf(MsgBuffer,"%s %s %s %s", MGridCtlCmds[MGridMode], Type, Args[ArgIndex], Args[ArgIndex + 1]); break; case mcQuery: /* FORMAT: */ sprintf(MsgBuffer,"%s %s %s WIKI %s", MGridCtlCmds[MGridMode], Type, RangeList, (Args[ArgIndex] == NULL) ? "DEFAULT" : Args[ArgIndex]); break; } /* END switch(MGridMode) */ break; default: fprintf(stderr,"ERROR: service %d not handled\n", *sindex); break; } /* END switch(*sindex) */ return(SUCCESS); } /* END Initialize() */ int OMCShowUsage( int sindex) { int index; DBG(3,fCORE) DPrint("OMCShowUsage(%d)\n", sindex); switch(sindex) { case svcSetJobSystemPrio: fprintf(stderr,"Usage: %s [ -r ] \n", MService[sindex]); break; case svcSetJobUserPrio: fprintf(stderr,"Usage: %s \n", MService[sindex]); break; case svcSetJobQOS: fprintf(stderr,"Usage: %s \n", MService[sindex]); break; case svcSetJobHold: /* fprintf(stderr,"Usage: %s [-a][-b][-s][-u] \n", MService[sindex]); */ fprintf(stderr,"Usage: %s [FLAGS] \n", MService[sindex]); fprintf(stderr," [ -b ] // BATCH\n"); fprintf(stderr," [ -h ]\n"); break; case svcReleaseJobHold: /* fprintf(stderr,"Usage: %s [-a][-b][-s][-u] \n", MService[sindex]); */ fprintf(stderr,"Usage: %s [FLAGS] \n", MService[sindex]); fprintf(stderr," [ -a ] // ALL HOLD TYPES\n"); fprintf(stderr," [ -h ]\n"); break; case svcReleaseJobDeadline: case svcShowEarliestDeadline: fprintf(stderr,"Usage: %s \n", MService[sindex]); fprintf(stderr," [ -h ]\n"); break; case svcCancelJob: fprintf(stderr,"Usage: %s []...\n", MService[sindex]); fprintf(stderr," [ -h ]\n"); break; case svcRunJob: fprintf(stderr,"Usage: %s [ FLAGS ] \n", MService[sindex]); fprintf(stderr," [ -c ] // CLEAR (clear stale job attributes)\n"); fprintf(stderr," [ -f ] // FORCE (ignore policies)\n"); fprintf(stderr," [ -n ]\n"); fprintf(stderr," [ -p ]\n"); fprintf(stderr," [ -x ] // FORCE2 (ignore policies and reservations)\n"); fprintf(stderr," [ -h ]\n"); break; case svcShowJobDeadline: fprintf(stderr,"Usage: %s \n", MService[sindex]); fprintf(stderr," [ -h ]\n"); break; case svcShowJobHold: fprintf(stderr,"Usage: %s\n", MService[sindex]); fprintf(stderr," [ -h ]\n"); break; case svcShowConfig: fprintf(stderr,"Usage: %s [ -v ] []\n", MService[sindex]); break; case svcShowGrid: fprintf(stderr,"Usage: %s \n", MService[sindex]); fprintf(stderr,"\nvalid statistics types:\n\n"); for (index = 0;MStatType[index] != NULL;index++) { fprintf(stderr,"%s\n", MStatType[index]); } /* END for (index) */ break; case svcSetJobDeadline: fprintf(stderr,"Usage: %s