/* Reset slurmdbd logging based upon configuration parameters */ static void _update_logging(bool startup) { /* Preserve execute line arguments (if any) */ if (debug_level) { slurmdbd_conf->debug_level = MIN( (LOG_LEVEL_INFO + debug_level), (LOG_LEVEL_END - 1)); } log_opts.stderr_level = slurmdbd_conf->debug_level; log_opts.logfile_level = slurmdbd_conf->debug_level; log_opts.syslog_level = slurmdbd_conf->debug_level; if (foreground) { log_opts.syslog_level = LOG_LEVEL_QUIET; } else { log_opts.stderr_level = LOG_LEVEL_QUIET; if (!slurmdbd_conf->log_file && (slurmdbd_conf->syslog_debug == LOG_LEVEL_QUIET)) { /* Insure fatal errors get logged somewhere */ log_opts.syslog_level = LOG_LEVEL_FATAL; } else { log_opts.syslog_level = slurmdbd_conf->syslog_debug; } } log_alter(log_opts, SYSLOG_FACILITY_DAEMON, slurmdbd_conf->log_file); log_set_timefmt(slurmdbd_conf->log_fmt); if (startup && slurmdbd_conf->log_file) { int rc; gid_t slurm_user_gid; slurm_user_gid = gid_from_uid(slurmdbd_conf->slurm_user_id); rc = chown(slurmdbd_conf->log_file, slurmdbd_conf->slurm_user_id, slurm_user_gid); if (rc) { error("chown(%s, %d, %d): %m", slurmdbd_conf->log_file, (int) slurmdbd_conf->slurm_user_id, (int) slurm_user_gid); } } debug("Log file re-opened"); }
/* * This function handles the initialization information from slurmd * sent by _send_slurmstepd_init() in src/slurmd/slurmd/req.c. */ static int _init_from_slurmd(int sock, char **argv, slurm_addr_t **_cli, slurm_addr_t **_self, slurm_msg_t **_msg, int *_ngids, gid_t **_gids) { char *incoming_buffer = NULL; Buf buffer; int step_type; int len, proto; slurm_addr_t *cli = NULL; slurm_addr_t *self = NULL; slurm_msg_t *msg = NULL; int ngids = 0; gid_t *gids = NULL; uint16_t port; char buf[16]; log_options_t lopts = LOG_OPTS_INITIALIZER; log_init(argv[0], lopts, LOG_DAEMON, NULL); /* receive job type from slurmd */ safe_read(sock, &step_type, sizeof(int)); debug3("step_type = %d", step_type); /* receive reverse-tree info from slurmd */ slurm_mutex_lock(&step_complete.lock); safe_read(sock, &step_complete.rank, sizeof(int)); safe_read(sock, &step_complete.parent_rank, sizeof(int)); safe_read(sock, &step_complete.children, sizeof(int)); safe_read(sock, &step_complete.depth, sizeof(int)); safe_read(sock, &step_complete.max_depth, sizeof(int)); safe_read(sock, &step_complete.parent_addr, sizeof(slurm_addr_t)); step_complete.bits = bit_alloc(step_complete.children); step_complete.jobacct = jobacctinfo_create(NULL); slurm_mutex_unlock(&step_complete.lock); /* receive conf from slurmd */ if ((conf = read_slurmd_conf_lite (sock)) == NULL) fatal("Failed to read conf from slurmd"); log_alter(conf->log_opts, 0, conf->logfile); log_set_timefmt(conf->log_fmt); debug2("debug level is %d.", conf->debug_level); switch_g_slurmd_step_init(); slurm_get_ip_str(&step_complete.parent_addr, &port, buf, 16); debug3("slurmstepd rank %d, parent address = %s, port = %u", step_complete.rank, buf, port); /* receive cli from slurmd */ safe_read(sock, &len, sizeof(int)); incoming_buffer = xmalloc(sizeof(char) * len); safe_read(sock, incoming_buffer, len); buffer = create_buf(incoming_buffer,len); cli = xmalloc(sizeof(slurm_addr_t)); if (slurm_unpack_slurm_addr_no_alloc(cli, buffer) == SLURM_ERROR) fatal("slurmstepd: problem with unpack of slurmd_conf"); free_buf(buffer); /* receive self from slurmd */ safe_read(sock, &len, sizeof(int)); if (len > 0) { /* receive packed self from main slurmd */ incoming_buffer = xmalloc(sizeof(char) * len); safe_read(sock, incoming_buffer, len); buffer = create_buf(incoming_buffer,len); self = xmalloc(sizeof(slurm_addr_t)); if (slurm_unpack_slurm_addr_no_alloc(self, buffer) == SLURM_ERROR) { fatal("slurmstepd: problem with unpack of " "slurmd_conf"); } free_buf(buffer); } /* Receive GRES information from slurmd */ gres_plugin_recv_stepd(sock); /* Grab the slurmd's spooldir. Has %n expanded. */ cpu_freq_init(conf); /* Receive cpu_frequency info from slurmd */ cpu_freq_recv_info(sock); /* get the protocol version of the srun */ safe_read(sock, &proto, sizeof(int)); /* receive req from slurmd */ safe_read(sock, &len, sizeof(int)); incoming_buffer = xmalloc(sizeof(char) * len); safe_read(sock, incoming_buffer, len); buffer = create_buf(incoming_buffer,len); msg = xmalloc(sizeof(slurm_msg_t)); slurm_msg_t_init(msg); msg->protocol_version = (uint16_t)proto; switch (step_type) { case LAUNCH_BATCH_JOB: msg->msg_type = REQUEST_BATCH_JOB_LAUNCH; break; case LAUNCH_TASKS: msg->msg_type = REQUEST_LAUNCH_TASKS; break; default: fatal("%s: Unrecognized launch RPC (%d)", __func__, step_type); break; } if (unpack_msg(msg, buffer) == SLURM_ERROR) fatal("slurmstepd: we didn't unpack the request correctly"); free_buf(buffer); /* receive cached group ids array for the relevant uid */ safe_read(sock, &ngids, sizeof(int)); if (ngids > 0) { int i; uint32_t tmp32; gids = (gid_t *)xmalloc(sizeof(gid_t) * ngids); for (i = 0; i < ngids; i++) { safe_read(sock, &tmp32, sizeof(uint32_t)); gids[i] = (gid_t)tmp32; debug2("got gid %d", gids[i]); } } *_cli = cli; *_self = self; *_msg = msg; *_ngids = ngids; *_gids = gids; return 1; rwfail: fatal("Error reading initialization data from slurmd"); exit(1); }