From a47de4c1fcb5ca9a9faaa7740570d823ec593a4a Mon Sep 17 00:00:00 2001 From: Sumit Vij Date: Mon, 16 Nov 2020 13:48:36 -0800 Subject: [PATCH 1/2] Add pid file path cli arg --- proxysql_binlog_reader.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/proxysql_binlog_reader.cpp b/proxysql_binlog_reader.cpp index 68dd0a0..ae49eda 100644 --- a/proxysql_binlog_reader.cpp +++ b/proxysql_binlog_reader.cpp @@ -223,9 +223,9 @@ bool daemonize_phase3() { return true; } -void daemonize_phase1(char *argv0) { +void daemonize_phase1(char *argv0, std::string pid_file) { int rc; - daemon_pid_file_ident="/tmp/proxysql_mysqlbinlog.pid"; + const char *daemon_pid_file_ident=pid_file.c_str(); daemon_log_ident=daemon_ident_from_argv0(argv0); rc=chdir("/tmp"); if (rc) { @@ -287,7 +287,7 @@ class Client_Data { ip = (char *)malloc(strlen(a)+16); sprintf(ip,"%s:%d",a,p); } - + bool writeout() { bool ret = true; if (len==0) { @@ -378,7 +378,7 @@ void read_cb(struct ev_loop *loop, struct ev_io *watcher, int revents) { } void accept_cb(struct ev_loop *loop, struct ev_io *watcher, int revents) { - typedef union { + typedef union { struct sockaddr_in in; struct sockaddr_in6 in6; } custom_sockaddr; @@ -432,7 +432,7 @@ void accept_cb(struct ev_loop *loop, struct ev_io *watcher, int revents) { //proxy_info("Adding client with FD %d\n", client->fd); Clients.push_back(client); } else { - proxy_info("Error accepting client with FD %d\n", client->fd); + proxy_info("Error accepting client with FD %d\n", client->fd); delete custom_data; free(client); } @@ -485,7 +485,7 @@ void async_cb(struct ev_loop *loop, struct ev_async *watcher, int revents) { } server_uuids.clear(); trx_ids.clear(); - + pthread_mutex_unlock(&pos_mutex); return; } @@ -606,7 +606,7 @@ std::string gtid_executed_to_string(slave::Position &curpos) { void usage(const char* name) { - std::cout << "Usage: " << name << " -h -u -p -P -l -L " << std::endl; + std::cout << "Usage: " << name << " -h -u -p -P -l -L -i " << std::endl; } @@ -620,6 +620,7 @@ int main(int argc, char** argv) { std::string user; std::string password; std::string errorstr; + std::string pid_file="/tmp/proxysql_mysqlbinlog.pid"; unsigned int port = 3306; @@ -627,7 +628,7 @@ int main(int argc, char** argv) { int c; - while (-1 != (c = ::getopt(argc, argv, "fh:u:p:P:l:L:"))) { + while (-1 != (c = ::getopt(argc, argv, "fh:u:p:P:l:L:i:"))) { switch (c) { case 'f': foreground=true; break; case 'h': host = optarg; break; @@ -639,6 +640,7 @@ int main(int argc, char** argv) { case 'P': port = std::stoi(optarg); break; case 'l': listen_port = std::stoi(optarg); break; case 'L' : errorstr = optarg; break; + case 'i': pid_file = optarg; break; default: usage(argv[0]); return 1; @@ -663,7 +665,7 @@ int main(int argc, char** argv) { if (foreground==false) { - daemonize_phase1((char *)argv[0]); + daemonize_phase1((char *)argv[0], pid_file); if ((pid = daemon_fork()) < 0) { /* Exit on error */ daemon_retval_done(); From 181cbf238a0e2cdc005b86301dcf54d4ecb3c229 Mon Sep 17 00:00:00 2001 From: Sumit Vij Date: Mon, 16 Nov 2020 14:16:04 -0800 Subject: [PATCH 2/2] Add cli param for cwd --- proxysql_binlog_reader.cpp | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/proxysql_binlog_reader.cpp b/proxysql_binlog_reader.cpp index ae49eda..0f49157 100644 --- a/proxysql_binlog_reader.cpp +++ b/proxysql_binlog_reader.cpp @@ -123,7 +123,7 @@ void daemonize_wait_daemon() { } -bool daemonize_phase2() { +bool daemonize_phase2(std::string cwd) { int rc; /* Close FDs */ if (daemon_close_all(-1) < 0) { @@ -133,9 +133,9 @@ bool daemonize_phase2() { return false; } - rc=chdir("/tmp"); + rc=chdir(cwd.c_str()); if (rc) { - daemon_log(LOG_ERR, "Could not chdir into datadir: %s . Error: %s", "/tmp", strerror(errno)); + daemon_log(LOG_ERR, "Could not chdir into datadir: %s . Error: %s", cwd.c_str(), strerror(errno)); exit(EXIT_FAILURE); } @@ -223,13 +223,13 @@ bool daemonize_phase3() { return true; } -void daemonize_phase1(char *argv0, std::string pid_file) { +void daemonize_phase1(char *argv0, std::string pid_file, std::string cwd) { int rc; const char *daemon_pid_file_ident=pid_file.c_str(); daemon_log_ident=daemon_ident_from_argv0(argv0); - rc=chdir("/tmp"); + rc=chdir(cwd.c_str()); if (rc) { - daemon_log(LOG_ERR, "Could not chdir into datadir: %s . Error: %s", "/tmp", strerror(errno)); + daemon_log(LOG_ERR, "Could not chdir into datadir: %s . Error: %s", cwd.c_str(), strerror(errno)); exit(EXIT_FAILURE); } daemon_pid_file_proc=proxysql_binlog_pid_file; @@ -606,7 +606,7 @@ std::string gtid_executed_to_string(slave::Position &curpos) { void usage(const char* name) { - std::cout << "Usage: " << name << " -h -u -p -P -l -L -i " << std::endl; + std::cout << "Usage: " << name << " -h -u -p -P -l -L -i -c " << std::endl; } @@ -621,6 +621,7 @@ int main(int argc, char** argv) { std::string password; std::string errorstr; std::string pid_file="/tmp/proxysql_mysqlbinlog.pid"; + std::string cwd="/tmp"; unsigned int port = 3306; @@ -628,7 +629,7 @@ int main(int argc, char** argv) { int c; - while (-1 != (c = ::getopt(argc, argv, "fh:u:p:P:l:L:i:"))) { + while (-1 != (c = ::getopt(argc, argv, "fh:u:p:P:l:L:i:c:"))) { switch (c) { case 'f': foreground=true; break; case 'h': host = optarg; break; @@ -641,6 +642,7 @@ int main(int argc, char** argv) { case 'l': listen_port = std::stoi(optarg); break; case 'L' : errorstr = optarg; break; case 'i': pid_file = optarg; break; + case 'c': cwd = optarg; break; default: usage(argv[0]); return 1; @@ -665,7 +667,7 @@ int main(int argc, char** argv) { if (foreground==false) { - daemonize_phase1((char *)argv[0], pid_file); + daemonize_phase1((char *)argv[0], pid_file, cwd); if ((pid = daemon_fork()) < 0) { /* Exit on error */ daemon_retval_done(); @@ -676,7 +678,7 @@ int main(int argc, char** argv) { daemonize_wait_daemon(); } else { - if (daemonize_phase2()==false) { + if (daemonize_phase2(cwd)==false) { goto finish; }