implement mysql query wrapper function to catch transient errors

0.2
Richard Fuchs 15 years ago
parent 859b66180f
commit cb811f329c

@ -1,6 +1,7 @@
#include <my_global.h>
#include <m_string.h>
#include <mysql.h>
#include <mysql/errmsg.h>
#include "medmysql.h"
#include "config.h"
@ -26,6 +27,27 @@ static MYSQL *prov_handler = NULL;
static int medmysql_flush_cdr(struct medmysql_batches *);
static int medmysql_flush_medlist(struct medmysql_str *);
static int mysql_query_wrapper(MYSQL *mysql, const char *stmt_str, unsigned long length) {
int ret;
int i;
unsigned int err;
for (i = 0; i < 10; i++) {
ret = mysql_real_query(mysql, stmt_str, length);
if (!ret)
return ret;
err = mysql_errno(mysql);
if (err == CR_SERVER_GONE_ERROR || err == CR_SERVER_LOST) {
syslog(LOG_WARNING, "Lost connection to SQL server during query, retrying...");
sleep(10);
continue;
}
break;
}
return ret;
}
/**********************************************************************/
int medmysql_init()
{
@ -117,7 +139,7 @@ int medmysql_fetch_callids(med_callid_t **callids, u_int64_t *count)
/*syslog(LOG_DEBUG, "q='%s'", query);*/
if(mysql_real_query(med_handler, query, strlen(query)) != 0)
if(mysql_query_wrapper(med_handler, query, strlen(query)) != 0)
{
syslog(LOG_CRIT, "Error getting acc callids: %s",
mysql_error(med_handler));
@ -175,7 +197,7 @@ int medmysql_fetch_records(med_callid_t *callid,
/*syslog(LOG_DEBUG, "q='%s'", query);*/
if(mysql_real_query(med_handler, query, strlen(query)) != 0)
if(mysql_query_wrapper(med_handler, query, strlen(query)) != 0)
{
syslog(LOG_CRIT, "Error getting acc records for callid '%s': %s",
callid->value, mysql_error(med_handler));
@ -382,7 +404,7 @@ int medmysql_load_maps(GHashTable *host_table, GHashTable *ip_table)
snprintf(query, sizeof(query), MED_LOAD_PEER_QUERY);
/* syslog(LOG_DEBUG, "q='%s'", query); */
if(mysql_real_query(prov_handler, query, strlen(query)) != 0)
if(mysql_query_wrapper(prov_handler, query, strlen(query)) != 0)
{
syslog(LOG_CRIT, "Error loading peer hosts: %s",
mysql_error(prov_handler));
@ -462,7 +484,7 @@ int medmysql_load_uuids(GHashTable *uuid_table)
snprintf(query, sizeof(query), MED_LOAD_UUID_QUERY);
/* syslog(LOG_DEBUG, "q='%s'", query); */
if(mysql_real_query(prov_handler, query, strlen(query)) != 0)
if(mysql_query_wrapper(prov_handler, query, strlen(query)) != 0)
{
syslog(LOG_CRIT, "Error loading uuids: %s",
mysql_error(prov_handler));
@ -499,9 +521,9 @@ out:
int medmysql_batch_start(struct medmysql_batches *batches) {
if (mysql_real_query(cdr_handler, "start transaction", 17))
if (mysql_query_wrapper(cdr_handler, "start transaction", 17))
return -1;
if (mysql_real_query(med_handler, "start transaction", 17))
if (mysql_query_wrapper(med_handler, "start transaction", 17))
return -1;
batches->cdrs.len = 0;
@ -522,7 +544,7 @@ static int medmysql_flush_cdr(struct medmysql_batches *batches) {
batches->cdrs.len--;
batches->cdrs.str[batches->cdrs.len] = '\0';
if(mysql_real_query(cdr_handler, batches->cdrs.str, batches->cdrs.len) != 0)
if(mysql_query_wrapper(cdr_handler, batches->cdrs.str, batches->cdrs.len) != 0)
{
batches->cdrs.len = 0;
syslog(LOG_CRIT, "Error inserting cdrs: %s",
@ -542,7 +564,7 @@ static int medmysql_flush_medlist(struct medmysql_str *str) {
str->str[str->len - 1] = ')';
if(mysql_real_query(med_handler, str->str, str->len) != 0)
if(mysql_query_wrapper(med_handler, str->str, str->len) != 0)
{
str->len = 0;
syslog(LOG_CRIT, "Error executing query: %s",
@ -565,9 +587,9 @@ int medmysql_batch_end(struct medmysql_batches *batches) {
if (medmysql_flush_medlist(&batches->to_delete))
return -1;
if (mysql_real_query(cdr_handler, "commit", 6))
if (mysql_query_wrapper(cdr_handler, "commit", 6))
return -1;
if (mysql_real_query(med_handler, "commit", 6))
if (mysql_query_wrapper(med_handler, "commit", 6))
return -1;
return 0;

Loading…
Cancel
Save