From 66a4b4481b6422cb429fc3602bcef2ccbd5eebf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Canna=C3=B2?= Date: Sat, 20 Dec 2014 20:39:08 +0000 Subject: [PATCH] Code clean up for issue #14 --- lib/Standard_ProxySQL_Admin.cpp | 115 +++++++++++++++++--------------- 1 file changed, 60 insertions(+), 55 deletions(-) diff --git a/lib/Standard_ProxySQL_Admin.cpp b/lib/Standard_ProxySQL_Admin.cpp index 9fb5245ac..032b56662 100644 --- a/lib/Standard_ProxySQL_Admin.cpp +++ b/lib/Standard_ProxySQL_Admin.cpp @@ -172,6 +172,58 @@ typedef struct _main_args { + +/* + * returns false if the command is a valid one and is processed + * return true if the command is not a valid one and needs to be executed by SQLite (that will return an error) + */ +bool admin_handler_command_proxysql(char *query_no_space, unsigned int query_no_space_length, MySQL_Session *sess, ProxySQL_Admin *pa) { + if (query_no_space_length==strlen("PROXYSQL START") && !strncasecmp("PROXYSQL START",query_no_space, query_no_space_length)) { + proxy_debug(PROXY_DEBUG_ADMIN, 4, "Received PROXYSQL START command\n"); + Standard_ProxySQL_Admin *SPA=(Standard_ProxySQL_Admin *)pa; + bool rc=false; + if (nostart_) { + rc=__sync_bool_compare_and_swap(&GloVars.global.nostart,1,0); + } + if (rc) { + //nostart_=false; + proxy_debug(PROXY_DEBUG_ADMIN, 4, "Starting ProxySQL following PROXYSQL START command\n"); + SPA->send_MySQL_OK(&sess->myprot_client, NULL); + } else { + proxy_debug(PROXY_DEBUG_ADMIN, 4, "ProxySQL was already started when received PROXYSQL START command\n"); + SPA->send_MySQL_ERR(&sess->myprot_client, (char *)"ProxySQL already started"); + } + return false; + } + + if (query_no_space_length==strlen("PROXYSQL RESTART") && !strncasecmp("PROXYSQL RESTART",query_no_space, query_no_space_length)) { + proxy_debug(PROXY_DEBUG_ADMIN, 4, "Received PROXYSQL RESTART command\n"); + __sync_bool_compare_and_swap(&glovars.shutdown,0,1); + glovars.reload=1; + return false; + } + + if (query_no_space_length==strlen("PROXYSQL STOP") && !strncasecmp("PROXYSQL STOP",query_no_space, query_no_space_length)) { + proxy_debug(PROXY_DEBUG_ADMIN, 4, "Received PROXYSQL STOP command\n"); + __sync_bool_compare_and_swap(&glovars.shutdown,0,1); + glovars.reload=2; + return false; + } + + if (query_no_space_length==strlen("PROXYSQL SHUTDOWN") && !strncasecmp("PROXYSQL SHUTDOWN",query_no_space, query_no_space_length)) { + proxy_debug(PROXY_DEBUG_ADMIN, 4, "Received PROXYSQL SHUTDOWN command\n"); + __sync_bool_compare_and_swap(&glovars.shutdown,0,1); + glovars.reload=0; + return false; + } + + if (query_no_space_length==strlen("PROXYSQL KILL") && !strncasecmp("PROXYSQL KILL",query_no_space, query_no_space_length)) { + proxy_debug(PROXY_DEBUG_ADMIN, 4, "Received PROXYSQL KILL command\n"); + exit(EXIT_SUCCESS); + } + return true; +} + void admin_session_handler(MySQL_Session *sess, ProxySQL_Admin *pa, PtrSize_t *pkt) { char *error=NULL; @@ -197,65 +249,18 @@ void admin_session_handler(MySQL_Session *sess, ProxySQL_Admin *pa, PtrSize_t *p - if ((query_no_space_length>8) && (!strncmp("PROXYSQL ", query_no_space, 8))) { + if ((query_no_space_length>8) && (!strncasecmp("PROXYSQL ", query_no_space, 8))) { proxy_debug(PROXY_DEBUG_ADMIN, 4, "Received PROXYSQL command\n"); - if (query_no_space_length==strlen("PROXYSQL START") && !strncasecmp("PROXYSQL START",query_no_space, query_no_space_length)) { - proxy_debug(PROXY_DEBUG_ADMIN, 4, "Received PROXYSQL START command\n"); - run_query=false; - Standard_ProxySQL_Admin *SPA=(Standard_ProxySQL_Admin *)pa; - bool rc=false; - if (nostart_) { - rc=__sync_bool_compare_and_swap(&GloVars.global.nostart,1,0); - } - if (rc) { - //nostart_=false; - proxy_debug(PROXY_DEBUG_ADMIN, 4, "Starting ProxySQL following PROXYSQL START command\n"); - SPA->send_MySQL_OK(&sess->myprot_client, NULL); - } else { - proxy_debug(PROXY_DEBUG_ADMIN, 4, "ProxySQL was already started when received PROXYSQL START command\n"); - SPA->send_MySQL_ERR(&sess->myprot_client, (char *)"ProxySQL already started"); - } - goto __run_query; - } - - if (query_no_space_length==strlen("PROXYSQL RESTART") && !strncasecmp("PROXYSQL RESTART",query_no_space, query_no_space_length)) { - proxy_debug(PROXY_DEBUG_ADMIN, 4, "Received PROXYSQL RESTART command\n"); - run_query=false; - __sync_bool_compare_and_swap(&glovars.shutdown,0,1); - glovars.reload=1; - goto __run_query; - } - - if (query_no_space_length==strlen("PROXYSQL STOP") && !strncasecmp("PROXYSQL STOP",query_no_space, query_no_space_length)) { - proxy_debug(PROXY_DEBUG_ADMIN, 4, "Received PROXYSQL STOP command\n"); - run_query=false; - __sync_bool_compare_and_swap(&glovars.shutdown,0,1); - glovars.reload=2; - goto __run_query; - } - - if (query_no_space_length==strlen("PROXYSQL SHUTDOWN") && !strncasecmp("PROXYSQL SHUTDOWN",query_no_space, query_no_space_length)) { - proxy_debug(PROXY_DEBUG_ADMIN, 4, "Received PROXYSQL SHUTDOWN command\n"); - run_query=false; - __sync_bool_compare_and_swap(&glovars.shutdown,0,1); - glovars.reload=0; - goto __run_query; - } - - if (query_no_space_length==strlen("PROXYSQL KILL") && !strncasecmp("PROXYSQL KILL",query_no_space, query_no_space_length)) { - proxy_debug(PROXY_DEBUG_ADMIN, 4, "Received PROXYSQL KILL command\n"); - exit(EXIT_SUCCESS); - } - - if (query_no_space_length==strlen("SHOW TABLES") && !strncasecmp("SHOW TABLES",query_no_space, query_no_space_length)) { - l_free(query_length,query); - query=l_strdup("SELECT name AS tables FROM sqlite_master WHERE type='table'"); - query_length=strlen(query)+1; - goto __run_query; - } + run_query=admin_handler_command_proxysql(query_no_space, query_no_space_length, sess, pa); goto __run_query; } + if (query_no_space_length==strlen("SHOW TABLES") && !strncasecmp("SHOW TABLES",query_no_space, query_no_space_length)) { + l_free(query_length,query); + query=l_strdup("SELECT name AS tables FROM sqlite_master WHERE type='table'"); + query_length=strlen(query)+1; + goto __run_query; + } strA=(char *)"SHOW CREATE TABLE "; strB=(char *)"SELECT name AS 'table' , sql AS 'Create Table' FROM sqlite_master WHERE type='table' AND name='%s'";