diff options
author | dane dane@31f1291d-b8d6-0310-a050-a5561fc1590b <dane dane@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864> | 2006-08-14 18:08:02 +0000 |
---|---|---|
committer | dane dane@31f1291d-b8d6-0310-a050-a5561fc1590b <dane dane@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864> | 2006-08-14 18:08:02 +0000 |
commit | 2197e82de33715ba879797383804bc29f504a097 (patch) | |
tree | aee2de109c5ba718ae7dfa9ac06b93fd9448da0d /src/mysql.c | |
parent | efbe346d45a3ec350a502ac89c3c19817c2118ab (diff) |
BUILD : 1.7.15 (1133) BUGS : N/A NOTES : Improved robustness on db_mysql_query()
git-svn-id: svn://svn.anope.org/anope/trunk@1133 31f1291d-b8d6-0310-a050-a5561fc1590b
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@856 5417fbe8-f217-4b02-8779-1006273d7864
Diffstat (limited to 'src/mysql.c')
-rw-r--r-- | src/mysql.c | 115 |
1 files changed, 61 insertions, 54 deletions
diff --git a/src/mysql.c b/src/mysql.c index af319d5b6..fc2ca9477 100644 --- a/src/mysql.c +++ b/src/mysql.c @@ -55,11 +55,11 @@ int db_mysql_init() if (!MysqlHost) { do_mysql = 0; alog("MySQL: has been disabled."); - return 0; + return 0; } else { do_mysql = 1; alog("MySQL: has been enabled."); - alog("MySQL: client version %s.",mysql_get_client_info()); + alog("MySQL: client version %s.", mysql_get_client_info()); } /* The following configuration options are required. @@ -69,12 +69,12 @@ int db_mysql_init() if ((do_mysql) && (!MysqlName || !MysqlUser)) { do_mysql = 0; alog("MySQL Error: Set all required configuration options."); - return 0; + return 0; } if (!db_mysql_open()) { do_mysql = 0; - return 0; + return 0; } return 1; @@ -93,20 +93,22 @@ int db_mysql_open() db_mysql_error(MYSQL_WARNING, "Unable to create mysql object"); if (!MysqlPort) - MysqlPort = 3306; + MysqlPort = MYSQL_DEFAULT_PORT; if (MysqlSock) { if ((!mysql_real_connect (mysql, MysqlHost, MysqlUser, MysqlPass, MysqlName, MysqlPort, MysqlSock, 0))) { - log_perror("MySQL Error: Cant connect to MySQL: %s\n", mysql_error(mysql)); + log_perror("MySQL Error: Cant connect to MySQL: %s\n", + mysql_error(mysql)); return 0; } } else { if ((!mysql_real_connect (mysql, MysqlHost, MysqlUser, MysqlPass, MysqlName, MysqlPort, NULL, 0))) { - log_perror("MySQL Error: Cant connect to MySQL: %s\n", mysql_error(mysql)); + log_perror("MySQL Error: Cant connect to MySQL: %s\n", + mysql_error(mysql)); return 0; } } @@ -133,35 +135,42 @@ int db_mysql_query(char *sql) } - result = mysql_query(mysql, sql); + /* Try as many times as configured in MysqlRetries */ + for (lcv = 0; lcv < MysqlRetries; lcv++) { + + if (db_mysql_open()) { + + /* Attempt to run query */ + result = mysql_query(mysql, sql); + if (result) { + switch (mysql_errno(mysql)) { + case CR_COMMANDS_OUT_OF_SYNC: + case CR_SERVER_GONE_ERROR: + case CR_UNKNOWN_ERROR: + case CR_SERVER_LOST: + + /* If we get here, we could not run the query */ + log_perror("Unable to run query: %s\n", + mysql_error(mysql)); - if (result) { - switch (mysql_errno(mysql)) { - case CR_SERVER_GONE_ERROR: - case CR_SERVER_LOST: + break; - for (lcv = 0; lcv < MysqlRetries; lcv++) { - if (db_mysql_open()) { - result = mysql_query(mysql, sql); + default: + + /* Success... return result */ return (result); + } - sleep(MysqlRetryGap); } + } - /* If we get here, we could not connect. */ - log_perror("Unable to reconnect to database: %s\n", - mysql_error(mysql)); - db_mysql_error(MYSQL_ERROR, "connect"); - - /* Never reached. */ - break; + /* Wait for MysqlRetryGap seconds and try again */ + sleep(MysqlRetryGap); - default: - /* Unhandled error. */ - return (result); - } } + db_mysql_error(MYSQL_ERROR, "query"); + return (0); } @@ -237,10 +246,10 @@ char *db_mysql_secure(char *pass) memset(epass, '\0', BUFSIZE); #ifdef USE_ENCRYPTION - if (pass) { - /* If we use the builtin encryption don't double encrypt! */ - snprintf(epass, sizeof(epass), "'%s'", pass); - } + if (pass) { + /* If we use the builtin encryption don't double encrypt! */ + snprintf(epass, sizeof(epass), "'%s'", pass); + } #else if (!pass) { @@ -413,12 +422,12 @@ void db_mysql_save_cs_info(ChannelInfo * ci) *cbadwords, *efounderpass; ciname = db_mysql_quote(ci->name); - if(ci->founder) { + if (ci->founder) { cifoundernick = db_mysql_quote(ci->founder->display); } else { cifoundernick = db_mysql_quote(""); } - if(ci->successor) { + if (ci->successor) { cisuccessornick = db_mysql_quote(ci->successor->display); } else { cisuccessornick = db_mysql_quote(""); @@ -435,7 +444,7 @@ void db_mysql_save_cs_info(ChannelInfo * ci) cimlock_flood = db_mysql_quote(ci->mlock_flood); cimlock_redirect = db_mysql_quote(ci->mlock_redirect); cientrymsg = db_mysql_quote(ci->entry_message); - if(ci->bi) { + if (ci->bi) { cibotnick = db_mysql_quote(ci->bi->nick); } else { cibotnick = db_mysql_quote(""); @@ -615,8 +624,8 @@ void db_mysql_save_cs_info(ChannelInfo * ci) } free(ciname); - free(cifoundernick); /* mark */ - free(cisuccessornick); /* mark */ + free(cifoundernick); /* mark */ + free(cisuccessornick); /* mark */ free(efounderpass); free(cidesc); free(ciurl); @@ -627,7 +636,7 @@ void db_mysql_save_cs_info(ChannelInfo * ci) free(cimlock_flood); free(cimlock_redirect); free(cientrymsg); - free(cibotnick); /* mark */ + free(cibotnick); /* mark */ free(ciforbidby); free(ciforbidreason); @@ -884,7 +893,7 @@ void db_mysql_load_bs_dbase(void) if (db_mysql_query(sqlcmd)) { log_perror("Can't create sql query: %s", sqlcmd); db_mysql_error(MYSQL_WARNING, "query"); - return; + return; } mysql_res = mysql_store_result(mysql); if (mysql_num_rows(mysql_res) == 0) { @@ -921,7 +930,7 @@ void db_mysql_load_hs_dbase(void) if (db_mysql_query(sqlcmd)) { log_perror("Can't create sql query: %s", sqlcmd); db_mysql_error(MYSQL_WARNING, "query"); - return; + return; } mysql_res = mysql_store_result(mysql); if (mysql_num_rows(mysql_res) == 0) { @@ -956,7 +965,7 @@ void db_mysql_load_news(void) if (db_mysql_query(sqlcmd)) { log_perror("Can't create sql query: %s", sqlcmd); db_mysql_error(MYSQL_WARNING, "query"); - return; + return; } mysql_res = mysql_store_result(mysql); nnews = mysql_num_rows(mysql_res); @@ -996,7 +1005,7 @@ void db_mysql_load_exceptions(void) if (db_mysql_query(sqlcmd)) { log_perror("Can't create sql query: %s", sqlcmd); db_mysql_error(MYSQL_WARNING, "query"); - return; + return; } mysql_res = mysql_store_result(mysql); nexceptions = mysql_num_rows(mysql_res); @@ -1031,7 +1040,7 @@ void db_mysql_load_os_dbase(void) if (db_mysql_query(sqlcmd)) { log_perror("Can't create sql query: %s", sqlcmd); db_mysql_error(MYSQL_WARNING, "query"); - return; + return; } mysql_res = mysql_store_result(mysql); if ((mysql_row = mysql_fetch_row(mysql_res))) { @@ -1053,7 +1062,7 @@ void db_mysql_load_os_dbase(void) if (db_mysql_query(sqlcmd)) { log_perror("Can't create sql query: %s", sqlcmd); db_mysql_error(MYSQL_WARNING, "query"); - return; + return; } mysql_res = mysql_store_result(mysql); slist_setcapacity(&akills, akc); @@ -1078,7 +1087,7 @@ void db_mysql_load_os_dbase(void) if (db_mysql_query(sqlcmd)) { log_perror("Can't create sql statement: %s", sqlcmd); db_mysql_error(MYSQL_WARNING, "query"); - return; + return; } mysql_res = mysql_store_result(mysql); while ((mysql_row = mysql_fetch_row(mysql_res))) { @@ -1097,7 +1106,7 @@ void db_mysql_load_os_dbase(void) if (db_mysql_query(sqlcmd)) { log_perror("Can't create sql statement: %s", sqlcmd); db_mysql_error(MYSQL_WARNING, "query"); - return; + return; } mysql_res = mysql_store_result(mysql); while ((mysql_row = mysql_fetch_row(mysql_res))) { @@ -1116,7 +1125,7 @@ void db_mysql_load_os_dbase(void) if (db_mysql_query(sqlcmd)) { log_perror("Can't create sql statement: %s", sqlcmd); db_mysql_error(MYSQL_WARNING, "query"); - return; + return; } mysql_res = mysql_store_result(mysql); while ((mysql_row = mysql_fetch_row(mysql_res))) { @@ -1149,7 +1158,7 @@ void db_mysql_load_cs_dbase(void) if (db_mysql_query(sqlcmd)) { log_perror("Can't create sql query: %s", sqlcmd); db_mysql_error(MYSQL_WARNING, "query"); - return; + return; } mysql_res = mysql_store_result(mysql); if (mysql_num_rows(mysql_res) == 0) { @@ -1209,7 +1218,7 @@ void db_mysql_load_cs_dbase(void) if (db_mysql_query(sqlcmd)) { log_perror("Can't create sql query: %s", sqlcmd); db_mysql_error(MYSQL_WARNING, "query"); - return; + return; } res = mysql_store_result(mysql); n_levels = mysql_num_rows(res); @@ -1228,7 +1237,7 @@ void db_mysql_load_cs_dbase(void) if (db_mysql_query(sqlcmd)) { log_perror("Can't create sql query: %s", sqlcmd); db_mysql_error(MYSQL_WARNING, "query"); - return; + return; } res = mysql_store_result(mysql); j = 0; @@ -1256,7 +1265,7 @@ void db_mysql_load_cs_dbase(void) if (db_mysql_query(sqlcmd)) { log_perror("Can't create sql query: %s", sqlcmd); db_mysql_error(MYSQL_WARNING, "query"); - return; + return; } res = mysql_store_result(mysql); j = 0; @@ -1385,7 +1394,7 @@ void db_mysql_load_ns_req_dbase(void) if (db_mysql_query(sqlcmd)) { log_perror("Can't create sql query: %s", sqlcmd); db_mysql_error(MYSQL_WARNING, "query"); - return; + return; } mysql_res = mysql_store_result(mysql); if (mysql_num_rows(mysql_res) == 0) { @@ -1422,7 +1431,7 @@ void db_mysql_load_ns_dbase(void) if (db_mysql_query(sqlcmd)) { log_perror("Can't create sql query: %s", sqlcmd); db_mysql_error(MYSQL_WARNING, "query"); - return; + return; } mysql_res = mysql_store_result(mysql); if (mysql_num_rows(mysql_res) == 0) { @@ -1606,5 +1615,3 @@ unsigned int mysql_rand(void) mysql_free_result(mysql_res); return num; } - - |