From 380523d39225f04feb293fe2eac13eb2743e2e6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Canna=C3=B2?= Date: Mon, 26 Mar 2018 02:40:15 +0200 Subject: [PATCH] Several fixed to graceful shutdown if proxysql_stats.db is not writable #1431 --- lib/ProxySQL_Statistics.cpp | 18 ++++++++++++++++-- lib/sqlite3db.cpp | 7 ++++--- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/lib/ProxySQL_Statistics.cpp b/lib/ProxySQL_Statistics.cpp index 5148a4c92..05dc7d51f 100644 --- a/lib/ProxySQL_Statistics.cpp +++ b/lib/ProxySQL_Statistics.cpp @@ -466,6 +466,10 @@ void ProxySQL_Statistics::system_cpu_sets() { char *query1=NULL; query1=(char *)"INSERT INTO system_cpu VALUES (?1, ?2, ?3)"; rc=sqlite3_prepare_v2(mydb3, query1, -1, &statement1, 0); + if (rc!=SQLITE_OK) { + proxy_error("SQLITE CRITICAL error: %s . Shutting down.\n", sqlite3_errmsg(mydb3)); + exit(EXIT_SUCCESS); + } time_t ts = time(NULL); @@ -529,6 +533,10 @@ void ProxySQL_Statistics::system_memory_sets() { char *query1=NULL; query1=(char *)"INSERT INTO system_memory VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7)"; rc=sqlite3_prepare_v2(mydb3, query1, -1, &statement1, 0); + if (rc!=SQLITE_OK) { + proxy_error("SQLITE CRITICAL error: %s . Shutting down.\n", sqlite3_errmsg(mydb3)); + exit(EXIT_SUCCESS); + } time_t ts = time(NULL); @@ -713,7 +721,10 @@ void ProxySQL_Statistics::MySQL_Threads_Handler_sets(SQLite3_result *resultset) query1=(char *)"INSERT INTO mysql_connections VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13)"; //query2=(char *)"INSERT INTO myhgm_connections VALUES (?1, ?2, ?3, ?4, ?5, ?6)"; rc=sqlite3_prepare_v2(mydb3, query1, -1, &statement1, 0); - assert(rc==SQLITE_OK); + if (rc!=SQLITE_OK) { + proxy_error("SQLITE CRITICAL error: %s . Shutting down.\n", sqlite3_errmsg(mydb3)); + exit(EXIT_SUCCESS); + } //rc=sqlite3_prepare_v2(mydb3, query2, -1, &statement2, 0); //assert(rc==SQLITE_OK); //rc=sqlite3_prepare_v2(mydb3, query3, -1, &statement3, 0); @@ -838,7 +849,10 @@ void ProxySQL_Statistics::MySQL_Query_Cache_sets(SQLite3_result *resultset) { char *query1=NULL; query1=(char *)"INSERT INTO mysql_query_cache VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9)"; rc=sqlite3_prepare_v2(mydb3, query1, -1, &statement1, 0); - assert(rc==SQLITE_OK); + if (rc!=SQLITE_OK) { + proxy_error("SQLITE CRITICAL error: %s . Shutting down.\n", sqlite3_errmsg(mydb3)); + exit(EXIT_SUCCESS); + } uint64_t qc_values[9]; for (int i=0; i<9; i++) { diff --git a/lib/sqlite3db.cpp b/lib/sqlite3db.cpp index 6c1e12d94..cc01f5626 100644 --- a/lib/sqlite3db.cpp +++ b/lib/sqlite3db.cpp @@ -37,13 +37,14 @@ int SQLite3DB::open(char *__url, int flags) { url=strdup(__url); int rc; rc=sqlite3_open_v2(url, &db, flags , NULL); - if(rc){ + if (rc) { proxy_debug(PROXY_DEBUG_SQLITE, 1, "SQLITE: Error on sqlite3_open_v2(): %s\n", sqlite3_errmsg(db)); if (assert_on_error) { assert(rc==0); } - return -1; - } + proxy_error("SQLITE CRITICAL error: Unable to open %s. Shutting down.\n", url); + exit(EXIT_SUCCESS); + } return 0; }