diff --git a/src/common/slurmdbd_defs.c b/src/common/slurmdbd_defs.c index 7a4fbe660b008a6474ed0ece608a5e5e63c3e210..9c4abac7af5b811833b096821fa7c9eb435c0f50 100644 --- a/src/common/slurmdbd_defs.c +++ b/src/common/slurmdbd_defs.c @@ -379,7 +379,7 @@ again: } else { fd_set_nonblocking(slurmdbd_fd); if (_send_init_msg() != SLURM_SUCCESS) { - error("slurmdbd: Sending DdbInit msg: %m"); + debug2("slurmdbd: Sending DbdInit msg: %m"); _close_slurmdbd_fd(); } else { debug("slurmdbd: Sent DbdInit msg"); @@ -1309,6 +1309,8 @@ static int _send_init_msg() dbd_init_msg_t req; int tmp_errno = SLURM_SUCCESS; + errno = tmp_errno; + buffer = init_buf(1024); pack16((uint16_t) DBD_INIT, buffer); req.rollback = rollback_started; @@ -1330,6 +1332,8 @@ static int _send_init_msg() rc = _get_return_code(SLURMDBD_VERSION, read_timeout); if(tmp_errno) errno = tmp_errno; + else if(rc != SLURM_SUCCESS) + errno = rc; return rc; } diff --git a/src/database/mysql_common.c b/src/database/mysql_common.c index 28a3402d05956da080a2064e91eb9683150b1949..edace7f48b92520c748d6bd14e874533a30cc33d 100644 --- a/src/database/mysql_common.c +++ b/src/database/mysql_common.c @@ -432,7 +432,8 @@ extern int mysql_get_db_connection(MYSQL **mysql_db, char *db_name, db_host = db_info->backup; continue; } - rc = SLURM_ERROR; + + rc = ESLURM_DB_CONNECTION; break; } } else { @@ -440,6 +441,8 @@ extern int mysql_get_db_connection(MYSQL **mysql_db, char *db_name, } } } + + errno = rc; return rc; } diff --git a/src/plugins/accounting_storage/mysql/accounting_storage_mysql.c b/src/plugins/accounting_storage/mysql/accounting_storage_mysql.c index 722cb4177be4aa6e42dd53e726077c135b22202f..174b6a3606b566f30403ff849e2b48ee370be283 100644 --- a/src/plugins/accounting_storage/mysql/accounting_storage_mysql.c +++ b/src/plugins/accounting_storage/mysql/accounting_storage_mysql.c @@ -526,6 +526,7 @@ static int _check_connection(mysql_conn_t *mysql_conn) { if(!mysql_conn) { error("We need a connection to run this"); + errno = SLURM_ERROR; return SLURM_ERROR; } else if(!mysql_conn->db_conn || mysql_db_ping(mysql_conn->db_conn) != 0) { @@ -533,6 +534,7 @@ static int _check_connection(mysql_conn_t *mysql_conn) mysql_db_name, mysql_db_info) != SLURM_SUCCESS) { error("unable to re-connect to mysql database"); + errno = ESLURM_DB_CONNECTION; return ESLURM_DB_CONNECTION; } } @@ -3614,13 +3616,15 @@ extern void *acct_storage_p_get_connection(bool make_agent, int conn_num, mysql_conn->conn = conn_num; mysql_conn->update_list = list_create(destroy_acct_update_object); + errno = SLURM_SUCCESS; mysql_get_db_connection(&mysql_conn->db_conn, mysql_db_name, mysql_db_info); + if(mysql_conn->db_conn) { if(rollback) mysql_autocommit(mysql_conn->db_conn, 0); - errno = SLURM_SUCCESS; } + return (void *)mysql_conn; } @@ -11157,9 +11161,10 @@ extern List jobacct_storage_p_get_jobs_cond(mysql_conn_t *mysql_conn, acct_job_cond_t *job_cond) { List job_list = NULL; - - if(_check_connection(mysql_conn) != SLURM_SUCCESS) + + if(_check_connection(mysql_conn) != SLURM_SUCCESS) { return NULL; + } job_list = mysql_jobacct_process_get_jobs(mysql_conn, uid, job_cond); return job_list; diff --git a/src/sacct/options.c b/src/sacct/options.c index 9c0a37084214b8209c903ef1a706ab368cffea96..0a1d97405a24b6832cff2ee1a4ba8a1b036b49e4 100644 --- a/src/sacct/options.c +++ b/src/sacct/options.c @@ -926,7 +926,6 @@ void parse_command_line(int argc, char **argv) xfree(acct_type); } else { slurm_acct_storage_init(params.opt_filein); - acct_db_conn = acct_storage_g_get_connection(false, 0, false); acct_type = slurm_get_accounting_storage_type(); if ((strcmp(acct_type, "accounting_storage/none") == 0) @@ -936,6 +935,9 @@ void parse_command_line(int argc, char **argv) exit(1); } xfree(acct_type); + acct_db_conn = acct_storage_g_get_connection(false, 0, false); + if(errno != SLURM_SUCCESS) + exit(1); } /* specific clusters requested? */ diff --git a/src/slurmdbd/proc_req.c b/src/slurmdbd/proc_req.c index a34eacaffc07c4963f14f73c014a332980fa7b2d..f9029874e77abc076caebfd719a0d8783a7e8513 100644 --- a/src/slurmdbd/proc_req.c +++ b/src/slurmdbd/proc_req.c @@ -1167,11 +1167,11 @@ static int _get_jobs(slurmdbd_conn_t *slurmdbd_conn, list_msg.my_list = jobacct_storage_g_get_jobs_cond( slurmdbd_conn->db_conn, *uid, &job_cond); - slurmdbd_free_get_jobs_msg(slurmdbd_conn->rpc_version, - get_jobs_msg); if(errno == ESLURM_ACCESS_DENIED && !list_msg.my_list) list_msg.my_list = list_create(NULL); + else if(!list_msg.my_list) + error("got this:%m"); if(job_cond.cluster_list) list_destroy(job_cond.cluster_list); @@ -1180,6 +1180,9 @@ static int _get_jobs(slurmdbd_conn_t *slurmdbd_conn, if(job_cond.groupid_list) list_destroy(job_cond.groupid_list); + slurmdbd_free_get_jobs_msg(slurmdbd_conn->rpc_version, + get_jobs_msg); + *out_buffer = init_buf(1024); pack16((uint16_t) DBD_GOT_JOBS, *out_buffer); slurmdbd_pack_list_msg(slurmdbd_conn->rpc_version, @@ -1196,6 +1199,7 @@ static int _get_jobs_cond(slurmdbd_conn_t *slurmdbd_conn, dbd_cond_msg_t *cond_msg = NULL; dbd_list_msg_t list_msg; char *comment = NULL; + int rc = SLURM_SUCCESS; debug2("DBD_GET_JOBS_COND: called"); if (slurmdbd_unpack_cond_msg(slurmdbd_conn->rpc_version, @@ -1208,24 +1212,30 @@ static int _get_jobs_cond(slurmdbd_conn_t *slurmdbd_conn, DBD_GET_JOBS_COND); return SLURM_ERROR; } - + list_msg.my_list = jobacct_storage_g_get_jobs_cond( slurmdbd_conn->db_conn, *uid, cond_msg->cond); + if(!errno) { + if(!list_msg.my_list) + list_msg.my_list = list_create(NULL); + *out_buffer = init_buf(1024); + pack16((uint16_t) DBD_GOT_JOBS, *out_buffer); + slurmdbd_pack_list_msg(slurmdbd_conn->rpc_version, + DBD_GOT_JOBS, &list_msg, *out_buffer); + } else { + *out_buffer = make_dbd_rc_msg(slurmdbd_conn->rpc_version, + errno, slurm_strerror(errno), + DBD_GET_JOBS_COND); + rc = SLURM_ERROR; + } + slurmdbd_free_cond_msg(slurmdbd_conn->rpc_version, DBD_GET_JOBS_COND, cond_msg); - - if(errno == ESLURM_ACCESS_DENIED && !list_msg.my_list) - list_msg.my_list = list_create(NULL); - - *out_buffer = init_buf(1024); - pack16((uint16_t) DBD_GOT_JOBS, *out_buffer); - slurmdbd_pack_list_msg(slurmdbd_conn->rpc_version, - DBD_GOT_JOBS, &list_msg, *out_buffer); if(list_msg.my_list) - list_destroy(list_msg.my_list); + list_destroy(list_msg.my_list); - return SLURM_SUCCESS; + return rc; } static int _get_probs(slurmdbd_conn_t *slurmdbd_conn, @@ -1234,6 +1244,7 @@ static int _get_probs(slurmdbd_conn_t *slurmdbd_conn, dbd_cond_msg_t *get_msg = NULL; dbd_list_msg_t list_msg; char *comment = NULL; + int rc = SLURM_SUCCESS; debug2("DBD_GET_PROBS: called"); @@ -1262,20 +1273,28 @@ static int _get_probs(slurmdbd_conn_t *slurmdbd_conn, list_msg.my_list = acct_storage_g_get_problems( slurmdbd_conn->db_conn, *uid, get_msg->cond); + + if(!errno) { + if(!list_msg.my_list) + list_msg.my_list = list_create(NULL); + *out_buffer = init_buf(1024); + pack16((uint16_t) DBD_GOT_PROBS, *out_buffer); + slurmdbd_pack_list_msg(slurmdbd_conn->rpc_version, + DBD_GOT_PROBS, &list_msg, *out_buffer); + } else { + *out_buffer = make_dbd_rc_msg(slurmdbd_conn->rpc_version, + errno, slurm_strerror(errno), + DBD_GET_PROBS); + rc = SLURM_ERROR; + } + slurmdbd_free_cond_msg(slurmdbd_conn->rpc_version, DBD_GET_PROBS, get_msg); - if(errno == ESLURM_ACCESS_DENIED && !list_msg.my_list) - list_msg.my_list = list_create(NULL); - - *out_buffer = init_buf(1024); - pack16((uint16_t) DBD_GOT_PROBS, *out_buffer); - slurmdbd_pack_list_msg(slurmdbd_conn->rpc_version, - DBD_GOT_PROBS, &list_msg, *out_buffer); if(list_msg.my_list) list_destroy(list_msg.my_list); - return SLURM_SUCCESS; + return rc; } static int _get_qos(slurmdbd_conn_t *slurmdbd_conn, @@ -1614,7 +1633,10 @@ static int _init_conn(slurmdbd_conn_t *slurmdbd_conn, slurmdbd_conn->db_conn = acct_storage_g_get_connection( false, slurmdbd_conn->newsockfd, init_msg->rollback); slurmdbd_conn->rpc_version = init_msg->version; - + if(errno) { + rc = errno; + comment = slurm_strerror(rc); + } end_it: slurmdbd_free_init_msg(slurmdbd_conn->rpc_version, init_msg);