From e31d0f4c292c8ccc417c030ece2beed4263a31e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Canna=C3=B2?= Date: Tue, 11 Aug 2015 07:19:43 +0000 Subject: [PATCH] Usability improvements - Replaced some proxy_error() with daemon_log() - glovars.proxy_restart_on_error is configurable via command line - glovars.proxy_restart_delay is hardcoded to 1 second - disabled listeners on telnet - Option --admin-socket overwrite the default admin socket --- include/proxysql_structs.h | 2 +- lib/ProxySQL_Admin.cpp | 31 ++++++++++++++++++------------- lib/ProxySQL_GloVars.cpp | 10 +++++++++- src/main.cpp | 21 ++++++++++----------- 4 files changed, 38 insertions(+), 26 deletions(-) diff --git a/include/proxysql_structs.h b/include/proxysql_structs.h index b6b9cd5b2..a328b6ca5 100644 --- a/include/proxysql_structs.h +++ b/include/proxysql_structs.h @@ -499,7 +499,7 @@ struct _global_variables_t { char *proxy_errorlog; char *proxy_debuglog; char *proxy_configfile; - int proxy_restart_on_error; + bool proxy_restart_on_error; int proxy_restart_delay; int http_start; //GHashTable *usernames; diff --git a/lib/ProxySQL_Admin.cpp b/lib/ProxySQL_Admin.cpp index 404f97c87..628aeca15 100644 --- a/lib/ProxySQL_Admin.cpp +++ b/lib/ProxySQL_Admin.cpp @@ -1308,18 +1308,19 @@ __end_while_pool: int s = ( atoi(port) ? listen_on_port(add, atoi(port), 50) : listen_on_unix(add, 50)); if (s>0) { fds[nfds].fd=s; fds[nfds].events=POLLIN; fds[nfds].revents=0; callback_func[nfds]=0; socket_names[nfds]=strdup(sn); nfds++; } } - for (j=0; jifaces->len; j++) { - char *add=NULL; char *port=NULL; char *sn=(char *)S_amll.ifaces_telnet_admin->ifaces->index(j); - c_split_2(sn, ":" , &add, &port); - int s = ( atoi(port) ? listen_on_port(add, atoi(port), 50) : listen_on_unix(add, 50)); - if (s>0) { fds[nfds].fd=s; fds[nfds].events=POLLIN; fds[nfds].revents=0; callback_func[nfds]=1; socket_names[nfds]=strdup(sn); nfds++; } - } - for (j=0; jifaces->len; j++) { - char *add=NULL; char *port=NULL; char *sn=(char *)S_amll.ifaces_telnet_stats->ifaces->index(j); - c_split_2(sn, ":" , &add, &port); - int s = ( atoi(port) ? listen_on_port(add, atoi(port), 50) : listen_on_unix(add, 50)); - if (s>0) { fds[nfds].fd=s; fds[nfds].events=POLLIN; fds[nfds].revents=0; callback_func[nfds]=2; socket_names[nfds]=strdup(sn); nfds++; } - } +// FIXME: disabling this part until telnet modules will be implemented +// for (j=0; jifaces->len; j++) { +// char *add=NULL; char *port=NULL; char *sn=(char *)S_amll.ifaces_telnet_admin->ifaces->index(j); +// c_split_2(sn, ":" , &add, &port); +// int s = ( atoi(port) ? listen_on_port(add, atoi(port), 50) : listen_on_unix(add, 50)); +// if (s>0) { fds[nfds].fd=s; fds[nfds].events=POLLIN; fds[nfds].revents=0; callback_func[nfds]=1; socket_names[nfds]=strdup(sn); nfds++; } +// } +// for (j=0; jifaces->len; j++) { +// char *add=NULL; char *port=NULL; char *sn=(char *)S_amll.ifaces_telnet_stats->ifaces->index(j); +// c_split_2(sn, ":" , &add, &port); +// int s = ( atoi(port) ? listen_on_port(add, atoi(port), 50) : listen_on_unix(add, 50)); +// if (s>0) { fds[nfds].fd=s; fds[nfds].events=POLLIN; fds[nfds].revents=0; callback_func[nfds]=2; socket_names[nfds]=strdup(sn); nfds++; } +// } S_amll.wrunlock(); } @@ -1356,7 +1357,11 @@ ProxySQL_Admin::ProxySQL_Admin() { spinlock_rwlock_init(&rwlock); variables.admin_credentials=strdup("admin:admin"); variables.stats_credentials=strdup("stats:stats"); - variables.mysql_ifaces=strdup("127.0.0.1:6032"); + if (GloVars.__cmd_proxysql_admin_socket) { + variables.mysql_ifaces=strdup(GloVars.__cmd_proxysql_admin_socket); + } else { + variables.mysql_ifaces=strdup("127.0.0.1:6032"); + } variables.telnet_admin_ifaces=NULL; variables.telnet_stats_ifaces=NULL; //variables.telnet_admin_ifaces=strdup("127.0.0.1:6030"); diff --git a/lib/ProxySQL_GloVars.cpp b/lib/ProxySQL_GloVars.cpp index 220fec1ea..cc6558a49 100644 --- a/lib/ProxySQL_GloVars.cpp +++ b/lib/ProxySQL_GloVars.cpp @@ -66,8 +66,9 @@ ProxySQL_GlobalVariables::ProxySQL_GlobalVariables() { #endif /* DEBUG */ opt->add((const char *)"",0,0,0,(const char *)"Starts only the admin service",(const char *)"-n",(const char *)"--no-start"); opt->add((const char *)"",0,0,0,(const char *)"Run in foreground",(const char *)"-f",(const char *)"--foreground"); + opt->add((const char *)"",0,0,0,(const char *)"Do not restart ProxySQL if crashes",(const char *)"-e",(const char *)"--exit-on-error"); opt->add((const char *)"~/proxysql.cnf",0,1,0,(const char *)"Configuraton file",(const char *)"-c",(const char *)"--config"); - opt->add((const char *)"",0,0,0,(const char *)"Enable custom memory allocator",(const char *)"-m",(const char *)"--custom-memory"); +// opt->add((const char *)"",0,0,0,(const char *)"Enable custom memory allocator",(const char *)"-m",(const char *)"--custom-memory"); opt->add((const char *)"",0,1,0,(const char *)"Datadir",(const char *)"-D",(const char *)"--datadir"); opt->add((const char *)"",0,0,0,(const char *)"Rename/empty database file",(const char *)"--initial"); opt->add((const char *)"",0,0,0,(const char *)"Merge config file into database file",(const char *)"--reload"); @@ -105,6 +106,13 @@ void ProxySQL_GlobalVariables::process_opts_pre() { global.gdbg=true; } + if (opt->isSet("-e")) { + glovars.proxy_restart_on_error=false; + } else { + glovars.proxy_restart_on_error=true; + glovars.proxy_restart_delay=1; + } + if (opt->isSet("-c")) { std::string configfile; opt->get("-c")->getString(configfile); diff --git a/src/main.cpp b/src/main.cpp index 6cc69fa81..77fef1aa1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -435,7 +435,7 @@ bool ProxySQL_daemonize_phase2() { /* Send OK to parent process */ daemon_retval_send(0); GloAdmin->flush_error_log(); - proxy_error("Starting ProxySQL\n"); + daemon_log(LOG_INFO, "Starting ProxySQL\n"); daemon_log(LOG_INFO, "Sucessfully started"); return true; @@ -444,7 +444,7 @@ bool ProxySQL_daemonize_phase2() { bool ProxySQL_daemonize_phase3() { int rc; int status; - proxy_error("Angel process started ProxySQL process %d\n", pid); + daemon_log(LOG_INFO, "Angel process started ProxySQL process %d\n", pid); rc=waitpid(pid, &status, 0); if (rc==-1) { perror("waitpid"); @@ -455,14 +455,14 @@ bool ProxySQL_daemonize_phase3() { if (rc) { // client exit()ed rc=WEXITSTATUS(status); if (rc==0) { - proxy_error("Shutdown angel process\n"); + daemon_log(LOG_INFO, "Shutdown angel process\n"); exit(EXIT_SUCCESS); } else { - proxy_error("ProxySQL exited with code %d . Restarting!\n", rc); + daemon_log(LOG_INFO, "ProxySQL exited with code %d . Restarting!\n", rc); return false;; } } else { - proxy_error("ProxySQL crashed. Restarting!\n"); + daemon_log(LOG_INFO, "ProxySQL crashed. Restarting!\n"); return false; } return true; @@ -483,7 +483,7 @@ int main(int argc, const char * argv[]) { if ((pid = daemon_fork()) < 0) { /* Exit on error */ daemon_retval_done(); - return EXIT_FAILURE; + exit(EXIT_FAILURE); } else if (pid) { /* The parent */ @@ -498,18 +498,17 @@ int main(int argc, const char * argv[]) { } laststart=0; -// if (glovars.proxy_restart_on_error) { - if (true) { + if (glovars.proxy_restart_on_error) { gotofork: if (laststart) { - proxy_error("Angel process is waiting %d seconds before starting a new ProxySQL process\n", glovars.proxy_restart_delay); + daemon_log(LOG_INFO, "Angel process is waiting %d seconds before starting a new ProxySQL process\n", glovars.proxy_restart_delay); sleep(glovars.proxy_restart_delay); } laststart=time(NULL); pid = fork(); if (pid < 0) { - proxy_error("[FATAL]: Error in fork()\n"); - return EXIT_FAILURE; + daemon_log(LOG_INFO, "[FATAL]: Error in fork()\n"); + exit(EXIT_FAILURE); } if (pid) {