Example #1
0
int
drmaa_get_attribute(
  drmaa_job_template_t *jt,
  const char *name, char *value, size_t value_len,
  char *errmsg, size_t errlen
)
  {
  const drmaa_attrib_info_t *attr;
  int attr_no;
  attr = attr_by_drmaa_name(name);

  if (attr == NULL || drmaa_is_vector(attr))
    RAISE_DRMAA(DRMAA_ERRNO_INVALID_ARGUMENT);

  attr_no = attr->code;

  pthread_mutex_lock(&jt->mutex);

  if (jt->attrib[attr_no] != NULL)
    strlcpy(value, jt->attrib[attr_no], value_len);
  else
    strlcpy(value, "", value_len);

  pthread_mutex_unlock(&jt->mutex);

  return DRMAA_ERRNO_SUCCESS;
  }
Example #2
0
int
drmaa_get_vector_attribute(
  drmaa_job_template_t *jt,
  const char *name, drmaa_attr_values_t **out_values,
  char *errmsg, size_t errlen
)
  {
  const drmaa_attrib_info_t *attr;
  unsigned i, n_values;
  char **v, **value;

  attr = attr_by_drmaa_name(name);

  if (attr == NULL || !drmaa_is_vector(attr))
    RAISE_DRMAA(DRMAA_ERRNO_INVALID_ARGUMENT);

  pthread_mutex_lock(&jt->mutex);

  value = (char**)jt->attrib[ attr->code ];

  pthread_mutex_unlock(&jt->mutex);

  if (value == NULL)
    {
    *out_values = NULL;
    return DRMAA_ERRNO_SUCCESS;
    }

  for (n_values = 0;  value[n_values] != NULL;  n_values++)
      {}

  v = (char**)calloc(n_values + 1, sizeof(char*));

  if (v == NULL)
    RAISE_NO_MEMORY();

  for (i = 0;  i < n_values;  i++)
    {
    v[i] = strdup(value[i]);

    if (v[i] == NULL)
      {
      drmaa_free_vector(v);
      RAISE_NO_MEMORY();
      }
    }

  v[n_values] = NULL;

  *out_values = malloc(sizeof(drmaa_attr_values_t));
  (*out_values)->list = (*out_values)->iter = v;
  return DRMAA_ERRNO_SUCCESS;
  }
Example #3
0
int
drmaa_set_vector_attribute(
  drmaa_job_template_t *jt,
  const char *name, const char *value[],
  char *errmsg, size_t errlen
)
  {
  const drmaa_attrib_info_t *attr;
  char **v;
  int attr_no;
  unsigned i, n_values;

  attr = attr_by_drmaa_name(name);

  if (attr == NULL || !drmaa_is_vector(attr))
    RAISE_DRMAA(DRMAA_ERRNO_INVALID_ARGUMENT);

  attr_no = attr->code;

  for (n_values = 0;  value[n_values] != NULL;  n_values++)
      {}

  v = (char**)calloc(n_values + 1, sizeof(char*));

  if (v == NULL)
    RAISE_NO_MEMORY();

  for (i = 0;  i < n_values;  i++)
    {
    v[i] = strdup(value[i]);

    if (v[i] == NULL)
      {
      drmaa_free_vector(v);
      RAISE_NO_MEMORY();
      }
    }

  v[n_values] = NULL;

  pthread_mutex_lock(&jt->mutex);

  if (jt->attrib[attr_no] != NULL)
    drmaa_free_vector((char**)jt->attrib[attr_no]);

  jt->attrib[attr_no] = v;

  pthread_mutex_unlock(&jt->mutex);

  return DRMAA_ERRNO_SUCCESS;
  }
Example #4
0
int
drmaa_exit(char *errmsg, size_t errlen)
  {
  int rc = DRMAA_ERRNO_SUCCESS;
  DEBUG(("-> drmaa_exit"));
  pthread_mutex_lock(&drmaa_session_mutex);

  if (drmaa_session == NULL)
    {
    pthread_mutex_unlock(&drmaa_session_mutex);
    RAISE_DRMAA(DRMAA_ERRNO_NO_ACTIVE_SESSION);
    }

  rc = drmaa_destroy(drmaa_session, errmsg, errlen);

  drmaa_session = NULL;
  pthread_mutex_unlock(&drmaa_session_mutex);
  DEBUG(("<- drmaa_exit =%d", rc));
  return rc;
  }
Example #5
0
int
drmaa_set_job_submit_state(
  drmaa_submission_context_t *c,
  char *errmsg, size_t errlen
)
  {
  const char *submit_state = (const char *)c->jt->attrib[ATTR_JOB_SUBMIT_STATE];
  const char *hold_types;
  int rc = DRMAA_ERRNO_SUCCESS;

  if (submit_state == NULL || !strcmp(submit_state, DRMAA_SUBMISSION_STATE_ACTIVE))
    hold_types = "n";
  else if (!strcmp(submit_state, DRMAA_SUBMISSION_STATE_HOLD))
    hold_types = "u";
  else
    RAISE_DRMAA(DRMAA_ERRNO_INVALID_ATTRIBUTE_VALUE);

  rc = drmaa_add_pbs_attr(c, ATTR_HOLD_TYPES, strdup(hold_types), 0, errmsg, errlen);

  return rc;
  }
Example #6
0
int
drmaa_set_file_staging(
  drmaa_submission_context_t *c,
  char *errmsg, size_t errlen
)
  {
  void **attrib = c->jt->attrib;
  char *transfer_files = (char*)attrib[ ATTR_TRANSFER_FILES ];
  char *input_file  = NULL;
  char *output_file = NULL;
  char *error_file  = NULL;
  char *output_staging = NULL;
  char *error_staging  = NULL;
  char *stageout = NULL;
  int rc = DRMAA_ERRNO_SUCCESS;

  if (transfer_files)
    {
    char *i;

    for (i = transfer_files;  *i;  i++)
      switch (*i)
        {

        case 'i':
          input_file  = (char*)attrib[ ATTR_INPUT_PATH  ];
          break;

        case 'o':
          output_file = (char*)attrib[ ATTR_OUTPUT_PATH ];
          break;

        case 'e':
          error_file  = (char*)attrib[ ATTR_ERROR_PATH  ];
          break;

        default:
          RAISE_DRMAA(DRMAA_ERRNO_INVALID_ATTRIBUTE_VALUE);
        }
    }
  else
    return DRMAA_ERRNO_SUCCESS;

  if (input_file)
    {
    rc = drmaa_add_pbs_attr(c, ATTR_STAGEIN,
                            drmaa_translate_staging(input_file),
                            DRMAA_PLACEHOLDER_MASK_HD |
                            DRMAA_PLACEHOLDER_MASK_WD |
                            DRMAA_PLACEHOLDER_MASK_INCR,
                            errmsg, errlen);

    if (rc)
      return rc;
    }

  if (output_file)
    output_staging = drmaa_translate_staging(output_file);

  if (error_file)
    error_staging = drmaa_translate_staging(error_file);

  if (output_staging && error_staging)
    asprintf(&stageout, "%s,%s", output_staging, error_staging);
  else if (output_staging)
    stageout = output_staging;
  else if (error_staging)
    stageout = error_staging;

  rc = drmaa_add_pbs_attr(c, ATTR_STAGEOUT, stageout,
                          DRMAA_PLACEHOLDER_MASK_HD |
                          DRMAA_PLACEHOLDER_MASK_WD |
                          DRMAA_PLACEHOLDER_MASK_INCR,
                          errmsg, errlen);

  if (output_staging  &&  output_staging != stageout)
    free(output_staging);

  if (error_staging  &&  error_staging != stageout)
    free(error_staging);

  return rc;
  }
Example #7
0
/** Writes job's PBS script to temporary file. */
int
drmaa_create_job_script(
  drmaa_submission_context_t *c,
  char *errmsg, size_t errlen
)
  {
  size_t script_size;
  const char *job, *wd, **argv;
  char *input_path;
  char *script, *s;
  const char **i;
  int rc;
  void **attrib = c->jt->attrib;

  job         = (const char*) attrib[ ATTR_JOB_PATH        ];
  wd          = (const char*) attrib[ ATTR_JOB_WORKING_DIR ];
  argv        = (const char**)attrib[ ATTR_ARGV            ];
  input_path  = (char *)      attrib[ ATTR_INPUT_PATH      ];

  if (job == NULL)
    RAISE_DRMAA(DRMAA_ERRNO_INVALID_ATTRIBUTE_VALUE);

  /* compute script length */
  script_size = 0;

  if (wd != NULL)
    script_size += strlen("cd ") + strlen(wd) + strlen("; ");

  script_size += strlen("exec ") + strlen(job);

  if (argv != NULL)
    for (i = argv;  *i != NULL;  i++)
      script_size += 1 + strlen(*i);

  if (input_path != NULL)
    script_size += sizeof(" <") + strlen(input_path);

  script = (char*)malloc(script_size + 1);

  if (script == NULL)
    RAISE_NO_MEMORY();

  s = script;

  if (wd != NULL)
    s += sprintf(s, "cd %s; ", wd);

  s += sprintf(s, "exec %s", job);

  if (argv != NULL)
    for (i = argv;  *i != NULL;  i++)
      s += sprintf(s, " %s", *i);

  if (input_path != NULL)
    {
    char *colon = strchr(input_path, ':');

    if (colon != NULL)
      input_path = colon + 1;

    s += sprintf(s, " <%s", input_path);
    }

  DEBUG(("script before substitution = {%s}", script));

  script = drmaa_expand_placeholders(c, script,
                                     DRMAA_PLACEHOLDER_MASK_HD |
                                     DRMAA_PLACEHOLDER_MASK_WD |
                                     DRMAA_PLACEHOLDER_MASK_INCR);
  DEBUG(("script after substitution = {%s}", script));

  rc = drmaa_write_tmpfile(&c->script_filename,
                           script, strlen(script), errmsg, errlen);
  free(script);
  return rc;
  }