示例#1
0
文件: Rlsf.c 项目: cran/Rlsf
SEXP
lsf_job_submit(SEXP sexp_debug, SEXP sexp_command, SEXP sexp_ncpus)
{
  int jobId, debug, i;
  struct submit submitRequest;
  struct submitReply submitReply;

  debug = INTEGER(sexp_debug)[0];
  memset(&submitRequest, 0, sizeof(submitRequest));
  for (i = 0; i < LSF_RLIM_NLIMITS; i++)
    submitRequest.rLimits[i] = DEFAULT_RLIMIT;
  submitRequest.command = CHAR(STRING_ELT(sexp_command, 0));
  submitRequest.options |= SUB_OUT_FILE;
  if (debug) {
    submitRequest.outFile = "Rlsf_job_output.%J";
  } else {
    submitRequest.outFile = "/dev/null";
  }
  submitRequest.numProcessors = INTEGER(sexp_ncpus)[0];
  submitRequest.maxNumProcessors = INTEGER(sexp_ncpus)[0];

  jobId = lsb_submit(&submitRequest, &submitReply);
  if (jobId == -1) {
    Rprintf("lsf_job_submit: lsb_submit: %s\n", lsb_sysmsg());
    return AsInt(0);
  }

  return AsInt(jobId);
}
示例#2
0
int
do_sub (int argc, char **argv, int option)
{
  static char fname[] = "do_sub";
  struct submit req;
  struct submitReply reply;
  LS_LONG_INT jobId = -1;

  if (lsb_init (argv[0]) < 0)
    {
      sub_perror ("lsb_init");
      fprintf (stderr, ". %s.\n", (_i18n_msg_get (ls_catd, NL_SETN, 1551, "Job not submitted")));	/* catgets  1551  */
      return (-1);
    }

  if (logclass & (LC_TRACE | LC_SCHED | LC_EXEC))
    ls_syslog (LOG_DEBUG, "%s: Entering this routine...", fname);

  if (fillReq (argc, argv, option, &req) < 0)
    {
      fprintf (stderr, ". %s.\n",
	       (_i18n_msg_get (ls_catd, NL_SETN, 1551, "Job not submitted")));
      return (-1);
    }


  memset (&reply, 0, sizeof (struct submitReply));

  TIMEIT (0, (jobId = lsb_submit (&req, &reply)), "lsb_submit");
  if (jobId < 0)
    {
      prtErrMsg (&req, &reply);
      fprintf (stderr, ". %s.\n",
	       (_i18n_msg_get (ls_catd, NL_SETN, 1551, "Job not submitted")));
      return (-1);
    }

  if (req.nxf)
    free (req.xf);

  return (0);

}
示例#3
0
文件: Rlsf.c 项目: cran/Rlsf
SEXP
lsf_job_submit2(SEXP ctrl) {
	char *name;
	char *val;
	char *vals[100];
	int jobId, debug, i, j;
	SEXP elmt = R_NilValue;
	SEXP names = getAttrib(ctrl, R_NamesSymbol);
	struct submit submitRequest;
	struct submitReply submitReply;

	memset(&submitRequest, 0, sizeof(submitRequest));
	for (i = 0; i < LSF_RLIM_NLIMITS; i++)
		submitRequest.rLimits[i] = DEFAULT_RLIMIT;
	for (i = 0; i < length(names); i++) {
		name = CHAR(STRING_ELT(names, i));
		elmt = VECTOR_ELT(ctrl, i);
		val = CHAR(STRING_ELT(elmt, 0));
		if (0) {
		} else if (!strcmp(name, "jobName")) {
			submitRequest.options |= SUB_JOB_NAME;
			submitRequest.jobName = val;
		} else if (!strcmp(name, "queue")) {
			submitRequest.options |= SUB_QUEUE;
			submitRequest.queue = val;
		} else if (!strcmp(name, "askedHosts")){
			submitRequest.options |= SUB_HOST;
			char **chars;
			chars = (char **)calloc(length(elmt), sizeof(char *));
			for (j = 0; j < length(elmt); j++){
				val=CHAR(STRING_ELT(elmt, j));
				chars[j] = val;
			}
			submitRequest.numAskedHosts = length(elmt);
			submitRequest.askedHosts = chars;
		} else if (!strcmp(name, "resReq")){
			submitRequest.options |= SUB_RES_REQ;
			submitRequest.resReq = val;
		} else if (!strcmp(name, "rlimit_cpu")) {
			submitRequest.rLimits[LSF_RLIMIT_CPU] = atoi(val);
		} else if (!strcmp(name, "rlimit_fsize")) {
			submitRequest.rLimits[LSF_RLIMIT_FSIZE] = atoi(val);
		} else if (!strcmp(name, "rlimit_data")) {
			submitRequest.rLimits[LSF_RLIMIT_DATA] = atoi(val);
		} else if (!strcmp(name, "rlimit_stack")) {
			submitRequest.rLimits[LSF_RLIMIT_STACK] = atoi(val);
		} else if (!strcmp(name, "rlimit_core")) {
			submitRequest.rLimits[LSF_RLIMIT_CORE] = atoi(val);
		} else if (!strcmp(name, "rlimit_rss")) {
			submitRequest.rLimits[LSF_RLIMIT_RSS] = atoi(val);
		} else if (!strcmp(name, "rlimit_nofile")) {
			submitRequest.rLimits[LSF_RLIMIT_NOFILE] = atoi(val);
		} else if (!strcmp(name, "rlimit_open_max")) {
			submitRequest.rLimits[LSF_RLIMIT_OPEN_MAX] = atoi(val);
		} else if (!strcmp(name, "rlimit_swap")) {
			submitRequest.rLimits[LSF_RLIMIT_SWAP] = atoi(val);
		} else if (!strcmp(name, "rlimit_run")) {
			submitRequest.rLimits[LSF_RLIMIT_RUN] = atoi(val);
		} else if (!strcmp(name, "rlimit_process")) {
			submitRequest.rLimits[LSF_RLIMIT_PROCESS] = atoi(val);
		} else if (!strcmp(name, "hostSpec")) {
			submitRequest.options |= SUB_HOST_SPEC;
			submitRequest.hostSpec = val;
		} else if (!strcmp(name, "numProcessors")){
			submitRequest.numProcessors = atoi(val);
		} else if (!strcmp(name, "dependCond")){
			submitRequest.options |= SUB_DEPEND_COND;
			submitRequest.dependCond = val;
		} else if (!strcmp(name, "beginTime")) {
			submitRequest.beginTime = atoi(val);
		} else if (!strcmp(name, "termTime")) {
			submitRequest.termTime = atoi(val);
		} else if (!strcmp(name, "sigValue")) {
			submitRequest.options |= SUB_WINDOW_SIG;
			submitRequest.sigValue= atoi(val);
		} else if (!strcmp(name, "command")){
			submitRequest.command = val;
		} else if (!strcmp(name, "inFile")){
			submitRequest.options |= SUB_IN_FILE;
			submitRequest.inFile = val;
		} else if (!strcmp(name, "outFile")){
			submitRequest.options |= SUB_OUT_FILE;
			submitRequest.outFile = val;
		} else if (!strcmp(name, "errFile")){
			submitRequest.options |= SUB_ERR_FILE;
			submitRequest.errFile = val;
		} else if (!strcmp(name, "chkpntPeriod")){
			submitRequest.options |= SUB_CHKPNTABLE;
			submitRequest.options |= SUB_CHKPNT_PERIOD;
			submitRequest.chkpntPeriod = atoi(val);
		} else if (!strcmp(name, "chkpntDir")){
			submitRequest.options |= SUB_CHKPNTABLE;
			submitRequest.options |= SUB_CHKPNT_DIR;
			submitRequest.chkpntDir = val;
		} else if (!strcmp(name, "xFile")){
			/*not implemented*/
			/* SUB_OTHER_FILES probably should be set  */
			/* submitRequest.nxf should be assigned */
		} else if (!strcmp(name, "preExecCmd")){
			submitRequest.options |= SUB_PRE_EXEC;
			submitRequest.preExecCmd = val;
		} else if (!strcmp(name, "mailUser")){
			submitRequest.options |= SUB_MAIL_USER;
			submitRequest.mailUser = val;
		} else if (!strcmp(name, "delOptions")){
			submitRequest.delOptions = atoi(val);
		} else if (!strcmp(name, "projectName")){
			submitRequest.options |= SUB_PROJECT_NAME;
			submitRequest.projectName = val;
		} else if (!strcmp(name, "maxNumProcessors")){
			submitRequest.maxNumProcessors = atoi(val);
		} else if (!strcmp(name, "loginShell")){
			submitRequest.options |= SUB_LOGIN_SHELL; 
			submitRequest.loginShell = val; }
		else if (!strcmp(name, "userGroup")){
			submitRequest.options |= SUB_USER_GROUP;
			submitRequest.loginShell = val;
		} else if (!strcmp(name, "exceptList")){
			submitRequest.exceptList = val;
		} else if (!strcmp(name, "exclusive")){
			submitRequest.options |= SUB_EXCLUSIVE;
		} else if (!strcmp(name, "notifyBegin")){
			submitRequest.options |= SUB_NOTIFY_BEGIN; 
		} else if (!strcmp(name, "notifyEnd")){
			submitRequest.options |= SUB_NOTIFY_END; 
		} else if (!strcmp(name, "restart")){
			submitRequest.options |= SUB_RESTART;
		} else if (!strcmp(name, "restartForce")){
			submitRequest.options |= SUB_RESTART_FORCE;
		} else if (!strcmp(name, "rerunnable")){
			submitRequest.options |= SUB_RERUNNABLE;
		/*} else if (!strcmp(name, "chkpnt_copy")){
			submitRequest.options |= SUB_CHKPNT_COPY;*/
		/*} else if (!strcmp(name, "chkpnt_force")){
			submitRequest.options |= SUB_CHKPNT_FORCE;*/
		} else if (!strcmp(name, "interactive")){
			submitRequest.options |= SUB_INTERACTIVE;
		} else if (!strcmp(name, "pty")){
			submitRequest.options |= SUB_PTY;
		} else if (!strcmp(name, "pty_shell")){
			submitRequest.options |= SUB_PTY_SHELL;
		} else if (!strcmp(name, "hold")){
			submitRequest.options2 |= SUB2_HOLD;
		} else if (!strcmp(name, "wait")){
			/* This will require forking */
			/*submitRequest.options2 |= SUB2_BSUB_BLOCK;*/
		} else if (!strcmp(name, "debug")){
			/* is debug used anymore? */
			if (val) debug = 1;
		}
		val = "";
	}

	jobId = lsb_submit(&submitRequest, &submitReply);
	if (jobId == -1) {
	 Rprintf("lsf_job_submit: lsb_submit: %s\n", lsb_sysmsg());
	 return AsInt(0);
	}
	return AsInt(jobId);
}