本文整理汇总了C++中slurm_seterrno函数的典型用法代码示例。如果您正苦于以下问题:C++ slurm_seterrno函数的具体用法?C++ slurm_seterrno怎么用?C++ slurm_seterrno使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了slurm_seterrno函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: slurm_create_reservation
/*
* slurm_create_reservation - create a new reservation, only usable by user root
* IN resv_msg - description of reservation
* RET name of reservation on success (caller must free the memory),
* otherwise return NULL and set errno to indicate the error
*/
char *
slurm_create_reservation (resv_desc_msg_t * resv_msg)
{
int rc;
char *resv_name = NULL;
slurm_msg_t req_msg;
slurm_msg_t resp_msg;
reservation_name_msg_t *resp;
slurm_msg_t_init(&req_msg);
slurm_msg_t_init(&resp_msg);
req_msg.msg_type = REQUEST_CREATE_RESERVATION;
req_msg.data = resv_msg;
rc = slurm_send_recv_controller_msg(&req_msg, &resp_msg);
switch (resp_msg.msg_type) {
case RESPONSE_CREATE_RESERVATION:
resp = (reservation_name_msg_t *) resp_msg.data;
resv_name = strdup(resp->name);
break;
case RESPONSE_SLURM_RC:
rc = ((return_code_msg_t *) resp_msg.data)->return_code;
if (rc)
slurm_seterrno(rc);
break;
default:
slurm_seterrno(SLURM_UNEXPECTED_MSG_ERROR);
}
slurm_free_msg_data(resp_msg.msg_type, resp_msg.data);
return resv_name;
}
示例2: _suspend_op2
/*
* _suspend_op2 - perform a suspend/resume operation for some job.
* IN op - operation to perform
* IN job_id_str - job on which to perform operation in string format or NULL
* OUT resp - slurm error codes by job array task ID
* RET 0 or a slurm error code
* NOTE: Supply either job_id NO_VAL or job_id_str as NULL, not both
*/
static int _suspend_op2(uint16_t op, char *job_id_str,
job_array_resp_msg_t **resp)
{
int rc = SLURM_SUCCESS;
suspend_msg_t sus_req;
slurm_msg_t req_msg, resp_msg;
slurm_msg_t_init(&req_msg);
slurm_msg_t_init(&resp_msg);
sus_req.op = op;
sus_req.job_id = NO_VAL;
sus_req.job_id_str = job_id_str;
req_msg.msg_type = REQUEST_SUSPEND;
req_msg.data = &sus_req;
rc = slurm_send_recv_controller_msg(&req_msg, &resp_msg);
switch (resp_msg.msg_type) {
case RESPONSE_JOB_ARRAY_ERRORS:
*resp = (job_array_resp_msg_t *) resp_msg.data;
break;
case RESPONSE_SLURM_RC:
rc = ((return_code_msg_t *) resp_msg.data)->return_code;
if (rc)
slurm_seterrno(rc);
break;
default:
slurm_seterrno(SLURM_UNEXPECTED_MSG_ERROR);
}
return rc;
}
示例3: slurm_update_job2
/*
* slurm_update_job2 - issue RPC to a job's configuration per request,
* only usable by user root or (for some parameters) the job's owner
* IN job_msg - description of job updates
* OUT resp - per task response to the request,
* free using slurm_free_job_array_resp()
* RET 0 on success, otherwise return -1 and set errno to indicate the error
*/
extern int
slurm_update_job2 (job_desc_msg_t * job_msg, job_array_resp_msg_t **resp)
{
int rc = SLURM_SUCCESS;
slurm_msg_t req_msg, resp_msg;
slurm_msg_t_init(&req_msg);
slurm_msg_t_init(&resp_msg);
req_msg.msg_type = REQUEST_UPDATE_JOB;
req_msg.data = job_msg;
rc = slurm_send_recv_controller_msg(&req_msg, &resp_msg);
switch (resp_msg.msg_type) {
case RESPONSE_JOB_ARRAY_ERRORS:
*resp = (job_array_resp_msg_t *) resp_msg.data;
break;
case RESPONSE_SLURM_RC:
rc = ((return_code_msg_t *) resp_msg.data)->return_code;
if (rc)
slurm_seterrno(rc);
break;
default:
slurm_seterrno(SLURM_UNEXPECTED_MSG_ERROR);
}
return rc;
}
示例4: slurm_requeue2
/*
* slurm_requeue2 - re-queue a batch job, if already running
* then terminate it first
* IN job_id_str - job on which to perform operation in string format or NULL
* IN state - state in which to place the job
* RET 0 or a slurm error code
*/
extern int slurm_requeue2(char *job_id_str, uint32_t state,
job_array_resp_msg_t **resp)
{
int rc = SLURM_SUCCESS;
requeue_msg_t requeue_req;
slurm_msg_t req_msg, resp_msg;
slurm_msg_t_init(&req_msg);
slurm_msg_t_init(&resp_msg);
requeue_req.job_id = NO_VAL;
requeue_req.job_id_str = job_id_str;
requeue_req.state = state;
req_msg.msg_type = REQUEST_JOB_REQUEUE;
req_msg.data = &requeue_req;
rc = slurm_send_recv_controller_msg(&req_msg, &resp_msg);
switch (resp_msg.msg_type) {
case RESPONSE_JOB_ARRAY_ERRORS:
*resp = (job_array_resp_msg_t *) resp_msg.data;
break;
case RESPONSE_SLURM_RC:
rc = ((return_code_msg_t *) resp_msg.data)->return_code;
if (rc)
slurm_seterrno(rc);
break;
default:
slurm_seterrno(SLURM_UNEXPECTED_MSG_ERROR);
}
return rc;
}
示例5: _valid_uid_gid
/* returns 0 if invalid gid, otherwise returns 1. Set gid with
* correct gid if root launched job. Also set user_name
* if not already set. */
static int
_valid_uid_gid(uid_t uid, gid_t *gid, char **user_name)
{
struct passwd *pwd;
struct group *grp;
int i;
#ifdef HAVE_NATIVE_CRAY
/* already verified */
if (*user_name)
return 1;
#endif
pwd = getpwuid(uid);
if (!pwd) {
error("uid %ld not found on system", (long) uid);
slurm_seterrno(ESLURMD_UID_NOT_FOUND);
return 0;
}
if (!*user_name)
*user_name = xstrdup(pwd->pw_name);
if (pwd->pw_gid == *gid)
return 1;
grp = getgrgid(*gid);
if (!grp) {
error("gid %ld not found on system", (long)(*gid));
slurm_seterrno(ESLURMD_GID_NOT_FOUND);
return 0;
}
/* Allow user root to use any valid gid */
if (pwd->pw_uid == 0) {
pwd->pw_gid = *gid;
return 1;
}
for (i = 0; grp->gr_mem[i]; i++) {
if (!strcmp(pwd->pw_name, grp->gr_mem[i])) {
pwd->pw_gid = *gid;
return 1;
}
}
/* root user may have launched this job for this user, but
* root did not explicitly set the gid. This would set the
* gid to 0. In this case we should set the appropriate
* default gid for the user (from the passwd struct).
*/
if (*gid == 0) {
*gid = pwd->pw_gid;
return 1;
}
error("uid %ld is not a member of gid %ld",
(long)pwd->pw_uid, (long)(*gid));
slurm_seterrno(ESLURMD_GID_NOT_FOUND);
return 0;
}
示例6: _slurm_open_stream
slurm_fd_t _slurm_open_stream(slurm_addr_t *addr, bool retry)
{
int retry_cnt;
slurm_fd_t fd;
uint16_t port;
char ip[32];
if ( (addr->sin_family == 0) || (addr->sin_port == 0) ) {
error("Error connecting, bad data: family = %u, port = %u",
addr->sin_family, addr->sin_port);
return SLURM_SOCKET_ERROR;
}
for (retry_cnt=0; ; retry_cnt++) {
int rc;
if ((fd =_slurm_create_socket(SLURM_STREAM)) < 0) {
error("Error creating slurm stream socket: %m");
slurm_seterrno(errno);
return SLURM_SOCKET_ERROR;
}
if (retry_cnt) {
if (retry_cnt == 1) {
debug3("Error connecting, "
"picking new stream port");
}
_sock_bind_wild(fd);
}
rc = _slurm_connect(fd, (struct sockaddr const *)addr,
sizeof(*addr));
if (rc >= 0) /* success */
break;
if (((errno != ECONNREFUSED) && (errno != ETIMEDOUT)) ||
(!retry) || (retry_cnt >= PORT_RETRIES)) {
slurm_seterrno(errno);
goto error;
}
if ((_slurm_close_stream(fd) < 0) && (errno == EINTR))
_slurm_close_stream(fd); /* try again */
}
return fd;
error:
slurm_get_ip_str(addr, &port, ip, sizeof(ip));
debug2("Error connecting slurm stream socket at %s:%d: %m",
ip, ntohs(port));
if ((_slurm_close_stream(fd) < 0) && (errno == EINTR))
_slurm_close_stream(fd); /* try again */
return SLURM_SOCKET_ERROR;
}
示例7: slurm_update_job2
/*
* slurm_update_job2 - issue RPC to a job's configuration per request,
* only usable by user root or (for some parameters) the job's owner
* IN job_msg - description of job updates
* OUT resp - per task response to the request,
* free using slurm_free_job_array_resp()
* RET SLURM_SUCCESS on success, otherwise return SLURM_ERROR with errno set
*/
extern int
slurm_update_job2 (job_desc_msg_t * job_msg, job_array_resp_msg_t **resp)
{
int rc = SLURM_SUCCESS;
slurm_msg_t req_msg, resp_msg;
slurmdb_cluster_rec_t *save_working_cluster_rec = working_cluster_rec;
slurm_msg_t_init(&req_msg);
req_msg.msg_type = REQUEST_UPDATE_JOB;
req_msg.data = job_msg;
tryagain:
slurm_msg_t_init(&resp_msg);
rc = slurm_send_recv_controller_msg(&req_msg, &resp_msg,
working_cluster_rec);
switch (resp_msg.msg_type) {
case RESPONSE_SLURM_REROUTE_MSG:
{
reroute_msg_t *rr_msg = (reroute_msg_t *)resp_msg.data;
/* Don't expect mutliple hops but in the case it does
* happen, free the previous rr cluster_rec. */
if (working_cluster_rec &&
working_cluster_rec != save_working_cluster_rec)
slurmdb_destroy_cluster_rec(
working_cluster_rec);
working_cluster_rec = rr_msg->working_cluster_rec;
slurmdb_setup_cluster_rec(working_cluster_rec);
rr_msg->working_cluster_rec = NULL;
goto tryagain;
}
case RESPONSE_JOB_ARRAY_ERRORS:
*resp = (job_array_resp_msg_t *) resp_msg.data;
break;
case RESPONSE_SLURM_RC:
rc = ((return_code_msg_t *) resp_msg.data)->return_code;
if (rc)
slurm_seterrno(rc);
break;
default:
slurm_seterrno(SLURM_UNEXPECTED_MSG_ERROR);
}
if (working_cluster_rec != save_working_cluster_rec) {
slurmdb_destroy_cluster_rec(working_cluster_rec);
working_cluster_rec = save_working_cluster_rec;
}
return rc;
}
示例8: slurm_load_assoc_mgr_info
/* slurm_load_assoc_mgr_info()
*
* Load requested controller assoc_mgr state.
*
*/
extern int
slurm_load_assoc_mgr_info(assoc_mgr_info_request_msg_t *req,
assoc_mgr_info_msg_t **resp)
{
int cc;
slurm_msg_t msg_request;
slurm_msg_t msg_reply;
slurm_msg_t_init(&msg_request);
slurm_msg_t_init(&msg_reply);
msg_request.msg_type = REQUEST_ASSOC_MGR_INFO;
msg_request.data = req;
cc = slurm_send_recv_controller_msg(&msg_request, &msg_reply);
if (cc < 0)
return SLURM_ERROR;
switch (msg_reply.msg_type) {
case RESPONSE_ASSOC_MGR_INFO:
*resp = msg_reply.data;
break;
case RESPONSE_SLURM_RC:
cc = ((return_code_msg_t *)msg_reply.data)->return_code;
slurm_free_return_code_msg(msg_reply.data);
if (cc) /* slurm_seterrno_ret() is a macro ... sigh */
slurm_seterrno(cc);
return -1;
default:
slurm_seterrno_ret(SLURM_UNEXPECTED_MSG_ERROR);
break;
}
return SLURM_PROTOCOL_SUCCESS;
}
示例9: proctrack_p_wait
extern int
proctrack_p_wait(uint64_t cont_id)
{
pid_t pgid = (pid_t)cont_id;
int delay = 1;
if (cont_id == 0 || cont_id == 1) {
slurm_seterrno(EINVAL);
return SLURM_ERROR;
}
/* Spin until the process group is gone. */
while (killpg(pgid, 0) == 0) {
proctrack_p_signal(cont_id, SIGKILL);
sleep(delay);
if (delay < 120) {
delay *= 2;
} else {
error("%s: Unable to destroy container %"PRIu64" "
"in pgid plugin, giving up after %d sec",
__func__, cont_id, delay);
break;
}
}
return SLURM_SUCCESS;
}
示例10: checkpoint_tasks
extern int checkpoint_tasks (uint32_t job_id, uint32_t step_id,
time_t begin_time, char *image_dir,
uint16_t wait, char *nodelist)
{
int rc = SLURM_SUCCESS, temp_rc;
checkpoint_tasks_msg_t ckpt_req;
slurm_msg_t req_msg;
List ret_list;
ret_data_info_t *ret_data_info = NULL;
slurm_msg_t_init(&req_msg);
ckpt_req.job_id = job_id;
ckpt_req.job_step_id = step_id;
ckpt_req.timestamp = begin_time;
ckpt_req.image_dir = image_dir;
req_msg.msg_type = REQUEST_CHECKPOINT_TASKS;
req_msg.data = &ckpt_req;
if ((ret_list = slurm_send_recv_msgs(nodelist, &req_msg, (wait*1000),
false))) {
while ((ret_data_info = list_pop(ret_list))) {
temp_rc = slurm_get_return_code(ret_data_info->type,
ret_data_info->data);
if (temp_rc)
rc = temp_rc;
}
} else {
error("slurm_checkpoint_tasks: no list was returned");
rc = SLURM_ERROR;
}
slurm_seterrno(rc);
return rc;
}
示例11: _handle_rc_msg
/*
* Handle a return code message type.
* Sets errno to return code and returns it
*/
static int
_handle_rc_msg(slurm_msg_t *msg)
{
int rc = ((return_code_msg_t *) msg->data)->return_code;
slurm_free_return_code_msg(msg->data);
slurm_seterrno(rc);
return rc;
}
示例12: acct_gather_check_acct_freq_task
extern int acct_gather_check_acct_freq_task(uint64_t job_mem_lim,
char *acctg_freq)
{
int task_freq;
static uint32_t acct_freq_task = NO_VAL;
if (acct_freq_task == NO_VAL) {
char *acct_freq = slurm_get_jobacct_gather_freq();
int i = acct_gather_parse_freq(PROFILE_TASK, acct_freq);
xfree(acct_freq);
/* If the value is -1 lets set the freq to something
really high so we don't check this again.
*/
if (i == -1)
acct_freq_task = (uint16_t)NO_VAL;
else
acct_freq_task = i;
}
if (!job_mem_lim || !acct_freq_task)
return 0;
task_freq = acct_gather_parse_freq(PROFILE_TASK, acctg_freq);
if (task_freq == -1)
return 0;
if (task_freq == 0) {
error("Can't turn accounting frequency off. "
"We need it to monitor memory usage.");
slurm_seterrno(ESLURMD_INVALID_ACCT_FREQ);
return 1;
} else if (task_freq > acct_freq_task) {
error("Can't set frequency to %d, it is higher than %u. "
"We need it to be at least at this level to "
"monitor memory usage.",
task_freq, acct_freq_task);
slurm_seterrno(ESLURMD_INVALID_ACCT_FREQ);
return 1;
}
return 0;
}
示例13: scontrol_requeue
/*
* scontrol_requeue - requeue a pending or running batch job
* IN job_id_str - a job id
*/
extern void
scontrol_requeue(char *job_str)
{
char *job_id_str;
int rc, i;
job_array_resp_msg_t *resp = NULL;
if (!job_str[0]) {
exit_code = 1;
return;
}
if (xstrncasecmp(job_str, "jobid=", 6) == 0)
job_str += 6;
if (xstrncasecmp(job_str, "job=", 4) == 0)
job_str += 4;
if (_is_job_id(job_str)) {
job_id_str = _next_job_id();
while (job_id_str) {
rc = slurm_requeue2(job_id_str, 0, &resp);
if (rc != SLURM_SUCCESS) {
exit_code = 1;
if (quiet_flag != 1) {
fprintf(stderr, "%s for job %s\n",
slurm_strerror(slurm_get_errno()),
job_id_str);
}
} else if (resp) {
for (i = 0; i < resp->job_array_count; i++) {
if ((resp->error_code[i] == SLURM_SUCCESS)
&& (resp->job_array_count == 1))
continue;
exit_code = 1;
if (quiet_flag == 1)
continue;
fprintf(stderr, "%s: %s\n",
resp->job_array_id[i],
slurm_strerror(resp->
error_code[i]));
}
slurm_free_job_array_resp(resp);
resp = NULL;
}
job_id_str = _next_job_id();
}
} else {
exit_code = 1;
rc = ESLURM_INVALID_JOB_ID;
slurm_seterrno(rc);
if (quiet_flag != 1) {
fprintf(stderr, "%s for job %s\n",
slurm_strerror(rc), job_str);
}
}
}
示例14: proctrack_p_signal
extern int proctrack_p_signal ( uint64_t id, int signal )
{
pid_t pid = (pid_t) id;
if (!id) {
/* no container ID */
} else if (pid == getpid() || pid == getpgid(0)) {
error("slurm_signal_container would kill caller!");
} else {
return killpg(pid, signal);
}
slurm_seterrno(ESRCH);
return SLURM_ERROR;
}
示例15: scontrol_hold
/*
* scontrol_hold - perform some job hold/release operation
* IN op - suspend/resume operation
* IN job_id_str - a job id
* RET 0 if no slurm error, errno otherwise. parsing error prints
* error message and returns 0
*/
extern int
scontrol_hold(char *op, char *job_id_str)
{
int rc = SLURM_SUCCESS;
char *next_str;
job_desc_msg_t job_msg;
uint16_t job_state;
slurm_init_job_desc_msg (&job_msg);
/* set current user, needed e.g., for AllowGroups checks */
job_msg.user_id = getuid();
if (job_id_str) {
job_msg.job_id = (uint32_t) strtol(job_id_str, &next_str, 10);
if ((job_msg.job_id == 0) || (next_str[0] != '\0')) {
fprintf(stderr, "Invalid job id specified\n");
exit_code = 1;
return 0;
}
} else {
fprintf(stderr, "Invalid job id specified\n");
exit_code = 1;
return 0;
}
job_state = scontrol_get_job_state(job_msg.job_id);
if (job_state == (uint16_t) NO_VAL)
return SLURM_ERROR;
if ((job_state & JOB_STATE_BASE) != JOB_PENDING) {
slurm_seterrno(ESLURM_JOB_NOT_PENDING);
return ESLURM_JOB_NOT_PENDING;
}
if ((strncasecmp(op, "holdu", 5) == 0) ||
(strncasecmp(op, "uhold", 5) == 0)) {
job_msg.priority = 0;
job_msg.alloc_sid = ALLOC_SID_USER_HOLD;
} else if (strncasecmp(op, "hold", 4) == 0) {
job_msg.priority = 0;
job_msg.alloc_sid = 0;
} else
job_msg.priority = INFINITE;
if (slurm_update_job(&job_msg))
return slurm_get_errno();
return rc;
}