Skip to content

Commit

Permalink
added non thread safe code to the mysql api linker
Browse files Browse the repository at this point in the history
  • Loading branch information
dannyauble committed Oct 13, 2008
1 parent 1bbfb6e commit d585e3e
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 15 deletions.
1 change: 1 addition & 0 deletions auxdir/x_ac_databases.m4
Expand Up @@ -93,6 +93,7 @@ AC_DEFUN([X_AC_DATABASES],
AC_MSG_RESULT([MySQL (non-threaded) test program built properly.])
AC_SUBST(MYSQL_LIBS)
AC_SUBST(MYSQL_CFLAGS)
AC_DEFINE(MYSQL_NOT_THREAD_SAFE, 1, [Define to 1 if with non thread-safe code])
AC_DEFINE(HAVE_MYSQL, 1, [Define to 1 if using MySQL libaries])
else
MYSQL_CFLAGS=""
Expand Down
3 changes: 3 additions & 0 deletions config.h.in
Expand Up @@ -273,6 +273,9 @@
/* Enable multiple slurmd on one node */
#undef MULTIPLE_SLURMD

/* Define to 1 if with non thread-safe code */
#undef MYSQL_NOT_THREAD_SAFE

/* Define to 1 if you are building a production release. */
#undef NDEBUG

Expand Down
5 changes: 5 additions & 0 deletions configure
Expand Up @@ -25633,6 +25633,11 @@ echo "${ECHO_T}MySQL (non-threaded) test program built properly." >&6; }



cat >>confdefs.h <<\_ACEOF
#define MYSQL_NOT_THREAD_SAFE 1
_ACEOF


cat >>confdefs.h <<\_ACEOF
#define HAVE_MYSQL 1
_ACEOF
Expand Down
49 changes: 35 additions & 14 deletions src/database/mysql_common.c
Expand Up @@ -43,7 +43,9 @@
#include "src/common/timers.h"
#include "src/common/slurm_protocol_api.h"

#ifdef MYSQL_NOT_THREAD_SAFE
pthread_mutex_t mysql_lock = PTHREAD_MUTEX_INITIALIZER;
#endif

#ifdef HAVE_MYSQL

Expand Down Expand Up @@ -184,7 +186,9 @@ static int _create_db(char *db_name, mysql_db_info_t *db_info)
char create_line[50];
MYSQL *mysql_db = NULL;

// slurm_mutex_lock(&mysql_lock);
#ifdef MYSQL_NOT_THREAD_SAFE
slurm_mutex_lock(&mysql_lock);
#endif
if(!(mysql_db = mysql_init(mysql_db)))
fatal("mysql_init failed: %s", mysql_error(mysql_db));

Expand All @@ -203,12 +207,16 @@ static int _create_db(char *db_name, mysql_db_info_t *db_info)
"user = %s pass = %s port = %u",
db_info->host, db_info->user,
db_info->pass, db_info->port);
#ifdef MYSQL_NOT_THREAD_SAFE
slurm_mutex_unlock(&mysql_lock);
#endif
fatal("mysql_real_connect failed: %d %s\n",
mysql_errno(mysql_db),
mysql_error(mysql_db));
}
// slurm_mutex_unlock(&mysql_lock);
#ifdef MYSQL_NOT_THREAD_SAFE
slurm_mutex_unlock(&mysql_lock);
#endif
return SLURM_SUCCESS;
}

Expand Down Expand Up @@ -292,8 +300,9 @@ extern int mysql_db_query(MYSQL *mysql_db, char *query)
{
if(!mysql_db)
fatal("You haven't inited this storage yet.");
#ifdef MYSQL_NOT_THREAD_SAFE
slurm_mutex_lock(&mysql_lock);

#endif
/* clear out the old results so we don't get a 2014 error */
_clear_results(mysql_db);
//try_again:
Expand All @@ -306,11 +315,15 @@ extern int mysql_db_query(MYSQL *mysql_db, char *query)
mysql_errno(mysql_db),
mysql_error(mysql_db), query);
errno = mysql_errno(mysql_db);
#ifdef MYSQL_NOT_THREAD_SAFE
slurm_mutex_unlock(&mysql_lock);
#endif
return SLURM_ERROR;
}
slurm_mutex_unlock(&mysql_lock);

#ifdef MYSQL_NOT_THREAD_SAFE
slurm_mutex_unlock(&mysql_lock);
#endif
return SLURM_SUCCESS;
}

Expand All @@ -323,40 +336,48 @@ extern int mysql_db_ping(MYSQL *mysql_db)

extern int mysql_db_commit(MYSQL *mysql_db)
{
//slurm_mutex_lock(&mysql_lock);

#ifdef MYSQL_NOT_THREAD_SAFE
slurm_mutex_lock(&mysql_lock);
#endif
/* clear out the old results so we don't get a 2014 error */
_clear_results(mysql_db);
if(mysql_commit(mysql_db)) {
error("mysql_commit failed: %d %s",
mysql_errno(mysql_db),
mysql_error(mysql_db));
errno = mysql_errno(mysql_db);
//slurm_mutex_unlock(&mysql_lock);
#ifdef MYSQL_NOT_THREAD_SAFE
slurm_mutex_unlock(&mysql_lock);
#endif
return SLURM_ERROR;
}
//slurm_mutex_unlock(&mysql_lock);

#ifdef MYSQL_NOT_THREAD_SAFE
slurm_mutex_unlock(&mysql_lock);
#endif
return SLURM_SUCCESS;
}

extern int mysql_db_rollback(MYSQL *mysql_db)
{
//slurm_mutex_lock(&mysql_lock);

#ifdef MYSQL_NOT_THREAD_SAFE
slurm_mutex_lock(&mysql_lock);
#endif
/* clear out the old results so we don't get a 2014 error */
_clear_results(mysql_db);
if(mysql_rollback(mysql_db)) {
error("mysql_commit failed: %d %s",
mysql_errno(mysql_db),
mysql_error(mysql_db));
errno = mysql_errno(mysql_db);
//slurm_mutex_unlock(&mysql_lock);
#ifdef MYSQL_NOT_THREAD_SAFE
slurm_mutex_unlock(&mysql_lock);
#endif
return SLURM_ERROR;
}
//mysql_db_query(mysql_db, "unlock tables;");
//slurm_mutex_unlock(&mysql_lock);

#ifdef MYSQL_NOT_THREAD_SAFE
slurm_mutex_unlock(&mysql_lock);
#endif
return SLURM_SUCCESS;

}
Expand Down
4 changes: 3 additions & 1 deletion src/slurmdbd/proc_req.c
Expand Up @@ -1159,7 +1159,9 @@ static int _init_conn(slurmdbd_conn_t *slurmdbd_conn,
}
*uid = init_msg->uid;

debug("DBD_INIT: VERSION:%u UID:%u", init_msg->version, init_msg->uid);
debug("DBD_INIT: VERSION:%u UID:%u IP:%s CONN:%u",
init_msg->version, init_msg->uid,
slurmdbd_conn->ip, slurmdbd_conn->newsockfd);
slurmdbd_conn->db_conn = acct_storage_g_get_connection(
false, slurmdbd_conn->newsockfd, init_msg->rollback);
slurmdbd_conn->rpc_version = init_msg->version;
Expand Down

0 comments on commit d585e3e

Please sign in to comment.