Jelajahi Sumber

modules/db_mysql: Improved handling of driver error counter

Marius Zbihlei 15 tahun lalu
induk
melakukan
b02aeb0fa7
1 mengubah file dengan 13 tambahan dan 6 penghapusan
  1. 13 6
      modules/db_mysql/km_dbase.c

+ 13 - 6
modules/db_mysql/km_dbase.c

@@ -104,7 +104,8 @@ static int db_mysql_submit_query(const db1_con_t* _h, const str* _s)
 	 * Thus the 3 in the loop count. Increasing the loop count over this
 	 * value shouldn't be needed, but it doesn't hurt either, since the loop
 	 * will most of the time stop at the second or sometimes at the third
-	 * iteration.
+	 * iteration. In the case of CR_SERVER_GONE_ERROR and CR_SERVER_LOST the
+	 * driver error counter is increased
 	 */
 	for (i=0; i < (db_mysql_auto_reconnect ? 3 : 1); i++) {
 		if (mysql_real_query(CON_CONNECTION(_h), _s->s, _s->len) == 0) {
@@ -114,12 +115,9 @@ static int db_mysql_submit_query(const db1_con_t* _h, const str* _s)
 		if (code != CR_SERVER_GONE_ERROR && code != CR_SERVER_LOST) {
 			break;
 		}
-	}
-	LM_ERR("driver error on query: %s\n", mysql_error(CON_CONNECTION(_h)));
-	/* Bad queries don't count */
-	if(code == CR_SERVER_GONE_ERROR || code == CR_SERVER_LOST) {
 		counter_inc(mysql_cnts_h.driver_err);
 	}
+	LM_ERR("driver error on query: %s\n", mysql_error(CON_CONNECTION(_h)));
 	return -2;
 }
 
@@ -157,6 +155,7 @@ void db_mysql_close(db1_con_t* _h)
  */
 static int db_mysql_store_result(const db1_con_t* _h, db1_res_t** _r)
 {
+	int code;
 	if ((!_h) || (!_r)) {
 		LM_ERR("invalid parameter value\n");
 		return -1;
@@ -176,6 +175,10 @@ static int db_mysql_store_result(const db1_con_t* _h, db1_res_t** _r)
 			goto done;
 		} else {
 			LM_ERR("driver error: %s\n", mysql_error(CON_CONNECTION(_h)));
+			code = mysql_errno(CON_CONNECTION(_h));
+			if (code == CR_SERVER_GONE_ERROR || code == CR_SERVER_LOST) {
+				counter_inc(mysql_cnts_h.driver_err);
+			}
 			db_free_result(*_r);
 			*_r = 0;
 			return -3;
@@ -274,7 +277,7 @@ int db_mysql_query(const db1_con_t* _h, const db_key_t* _k, const db_op_t* _op,
  */
 int db_mysql_fetch_result(const db1_con_t* _h, db1_res_t** _r, const int nrows)
 {
-	int rows, i;
+	int rows, i, code;
 
 	if (!_h || !_r || nrows < 0) {
 		LM_ERR("Invalid parameter value\n");
@@ -304,6 +307,10 @@ int db_mysql_fetch_result(const db1_con_t* _h, db1_res_t** _r, const int nrows)
 				return 0;
 			} else {
 				LM_ERR("driver error: %s\n", mysql_error(CON_CONNECTION(_h)));
+				code = mysql_errno(CON_CONNECTION(_h));
+				if (code == CR_SERVER_GONE_ERROR || code == CR_SERVER_LOST) {
+					counter_inc(mysql_cnts_h.driver_err);
+				}
 				db_free_result(*_r);
 				*_r = 0;
 				return -3;