extern int mysql_db_query_check_after(mysql_conn_t *mysql_conn, char *query) { int rc = SLURM_SUCCESS; slurm_mutex_lock(&mysql_conn->lock); if ((rc = _mysql_query_internal( mysql_conn->db_conn, query)) != SLURM_ERROR) rc = _clear_results(mysql_conn->db_conn); slurm_mutex_unlock(&mysql_conn->lock); return rc; }
extern int mysql_db_ping(mysql_conn_t *mysql_conn) { int rc; if (!mysql_conn->db_conn) return -1; /* clear out the old results so we don't get a 2014 error */ slurm_mutex_lock(&mysql_conn->lock); _clear_results(mysql_conn->db_conn); rc = mysql_ping(mysql_conn->db_conn); slurm_mutex_unlock(&mysql_conn->lock); return rc; }
extern int mysql_db_commit(mysql_conn_t *mysql_conn) { int rc = SLURM_SUCCESS; if (!mysql_conn->db_conn) return SLURM_ERROR; slurm_mutex_lock(&mysql_conn->lock); /* clear out the old results so we don't get a 2014 error */ _clear_results(mysql_conn->db_conn); if (mysql_commit(mysql_conn->db_conn)) { error("mysql_commit failed: %d %s", mysql_errno(mysql_conn->db_conn), mysql_error(mysql_conn->db_conn)); errno = mysql_errno(mysql_conn->db_conn); rc = SLURM_ERROR; } slurm_mutex_unlock(&mysql_conn->lock); return rc; }
/* NOTE: Insure that mysql_conn->lock is set on function entry */ static int _mysql_query_internal(MYSQL *db_conn, char *query) { int rc = SLURM_SUCCESS; if (!db_conn) fatal("You haven't inited this storage yet."); /* clear out the old results so we don't get a 2014 error */ _clear_results(db_conn); if (mysql_query(db_conn, query)) { const char *err_str = mysql_error(db_conn); errno = mysql_errno(db_conn); if (errno == ER_NO_SUCH_TABLE) { debug4("This could happen often and is expected.\n" "mysql_query failed: %d %s\n%s", errno, err_str, query); errno = 0; goto end_it; } error("mysql_query failed: %d %s\n%s", errno, err_str, query); if (errno == ER_LOCK_WAIT_TIMEOUT) { fatal("mysql gave ER_LOCK_WAIT_TIMEOUT as an error. " "The only way to fix this is restart the " "calling program"); } /* FIXME: If we get ER_LOCK_WAIT_TIMEOUT here we need * to restart the connections, but it appears restarting * the calling program is the only way to handle this. * If anyone in the future figures out a way to handle * this, super. Until then we will need to restart the * calling program if you ever get this error. */ rc = SLURM_ERROR; } end_it: return rc; }
void kdset_free(kdset* set) { _clear_results(set); free(set); }