Fix few problems and cleanup.

- remove unnecessary variables
- change snprintf to std::stringstream
- extend autotests configuration
- fixing several bugs
pull/2413/head
Valentin Rakush 7 years ago
parent f8ea3d8c75
commit 4e45f7f1d4

@ -3810,28 +3810,28 @@ void admin_session_handler(MySQL_Session *sess, void *_pa, PtrSize_t *pkt) {
if (query_no_space_length==strlen("SELECT CONFIG FILE") && !strncasecmp("SELECT CONFIG FILE", query_no_space, query_no_space_length)) {
std::string data;
data.reserve(100000);
run_query = false;
data += config_header;
if (pa->Write_Global_Variables_to_configfile(data))
goto __run_query;
if (pa->Write_MySQL_Users_to_configfile(data))
goto __run_query;
if (pa->Write_MySQL_Query_Rules_to_configfile(data))
goto __run_query;
if (pa->Write_MySQL_Servers_to_configfile(data))
goto __run_query;
if (pa->Write_Scheduler_to_configfile(data))
goto __run_query;
if (pa->Write_ProxySQL_Servers_to_configfile(data))
goto __run_query;
char *pta[1];
pta[0]=NULL;
pta[0]=(char*)data.c_str();
SQLite3_result* resultset = new SQLite3_result(1);
resultset->add_column_definition(SQLITE_TEXT,"Data");
resultset->add_row(pta);
sess->SQLite3_to_MySQL(resultset, error, affected_rows, &sess->client_myds->myprot);
delete resultset;
int rc = pa->Write_Global_Variables_to_configfile(data);
rc = pa->Write_MySQL_Users_to_configfile(data);
rc = pa->Write_MySQL_Query_Rules_to_configfile(data);
rc = pa->Write_MySQL_Servers_to_configfile(data);
rc = pa->Write_Scheduler_to_configfile(data);
rc = pa->Write_ProxySQL_Servers_to_configfile(data);
if (rc) {
std::stringstream ss;
ss << "ProxySQL Admin Error: Cannot write proxysql.cnf";
sess->SQLite3_to_MySQL(resultset, (char*)ss.str().c_str(), affected_rows, &sess->client_myds->myprot);
} else {
char *pta[1];
pta[0]=NULL;
pta[0]=(char*)data.c_str();
SQLite3_result* resultset = new SQLite3_result(1);
resultset->add_column_definition(SQLITE_TEXT,"Data");
resultset->add_row(pta);
sess->SQLite3_to_MySQL(resultset, error, affected_rows, &sess->client_myds->myprot);
delete resultset;
}
run_query = false;
goto __run_query;
}
@ -9724,10 +9724,10 @@ char * ProxySQL_Admin::load_mysql_query_rules_to_runtime() {
}
void ProxySQL_Admin::addField(std::string& data, const char* name, const char* value, const char* dq) {
char strBuf[10000] = {0};
std::stringstream ss;
if (!value || !strlen(value)) return;
snprintf(strBuf, sizeof(strBuf), "\t\t%s=%s%s%s\n", name, dq, value, dq);
data += strBuf;
ss << "\t\t" << name << "=" << dq << value << dq << "\n";
data += ss.str();
}
int ProxySQL_Admin::Write_Global_Variables_to_configfile(std::string& data) {
@ -9758,9 +9758,9 @@ int ProxySQL_Admin::Write_Global_Variables_to_configfile(std::string& data) {
}
}
if (r->fields[1] && strlen(r->fields[1])) {
char strBuf[10000];
snprintf(strBuf, sizeof(strBuf), "\t%s=\"%s\"\n",r->fields[0] + p1.size() + 1, r->fields[1]);
data += strBuf;
std::stringstream ss;
ss << "\t" << r->fields[0] + p1.size() + 1 << "=\"" << r->fields[1] << "\"\n";
data += ss.str();
}
}
@ -9806,7 +9806,6 @@ int ProxySQL_Admin::Read_Global_Variables_from_configfile(const char *prefix) {
}
//fprintf(stderr,"%s = %s\n", n, value_string.c_str());
char *query=(char *)malloc(strlen(q)+strlen(prefix)+strlen(n)+strlen(value_string.c_str()));
fprintf(stderr, "irefix %s, name %s, value %s\n", prefix, n, value_string.c_str());
sprintf(query,q, prefix, n, value_string.c_str());
//fprintf(stderr, "%s\n", query);
admindb->execute(query);
@ -9830,11 +9829,9 @@ int ProxySQL_Admin::Write_MySQL_Users_to_configfile(std::string& data) {
return -1;
} else {
if (sqlite_resultset) {
std::string prefix;
data += "mysql_users:\n(\n";
bool isNext = false;
for (auto r : sqlite_resultset->rows) {
char strBuf[256] = {0};
if (isNext)
data += ",\n";
data += "\t{\n";
@ -9850,7 +9847,7 @@ int ProxySQL_Admin::Write_MySQL_Users_to_configfile(std::string& data) {
addField(data, "backend", r->fields[9], "");
addField(data, "frontend", r->fields[10], "");
addField(data, "max_connections", r->fields[11], "");
addField(data, "comment", r->fields[12], "");
addField(data, "comment", r->fields[12]);
data += "\t}";
isNext = true;
}
@ -9929,7 +9926,6 @@ int ProxySQL_Admin::Write_Scheduler_to_configfile(std::string& data) {
return -1;
} else {
if (sqlite_resultset) {
std::string prefix;
data += "scheduler:\n(\n";
bool isNext = false;
for (auto r : sqlite_resultset->rows) {
@ -10409,7 +10405,6 @@ int ProxySQL_Admin::Write_MySQL_Servers_to_configfile(std::string& data) {
return -1;
} else {
if (sqlite_resultset) {
std::string prefix;
data += "mysql_servers:\n(\n";
bool isNext = false;
for (auto r : sqlite_resultset->rows) {
@ -10446,7 +10441,6 @@ int ProxySQL_Admin::Write_MySQL_Servers_to_configfile(std::string& data) {
return -1;
} else {
if (sqlite_resultset) {
std::string prefix;
data += "mysql_replication_hostgroups:\n(\n";
bool isNext = false;
for (auto r : sqlite_resultset->rows) {
@ -10475,7 +10469,6 @@ int ProxySQL_Admin::Write_MySQL_Servers_to_configfile(std::string& data) {
return -1;
} else {
if (sqlite_resultset) {
std::string prefix;
data += "mysql_group_replication_hostgroups:\n(\n";
bool isNext = false;
for (auto r : sqlite_resultset->rows) {
@ -10509,7 +10502,6 @@ int ProxySQL_Admin::Write_MySQL_Servers_to_configfile(std::string& data) {
return -1;
} else {
if (sqlite_resultset) {
std::string prefix;
data += "mysql_galera_hostgroups:\n(\n";
bool isNext = false;
for (auto r : sqlite_resultset->rows) {
@ -10543,7 +10535,6 @@ int ProxySQL_Admin::Write_MySQL_Servers_to_configfile(std::string& data) {
return -1;
} else {
if (sqlite_resultset) {
std::string prefix;
data += "mysql_aws_aurora_hostgroups:\n(\n";
bool isNext = false;
for (auto r : sqlite_resultset->rows) {
@ -10573,7 +10564,6 @@ int ProxySQL_Admin::Write_MySQL_Servers_to_configfile(std::string& data) {
delete sqlite_resultset;
return 0;
}
int ProxySQL_Admin::Read_MySQL_Servers_from_configfile() {
@ -10851,7 +10841,6 @@ int ProxySQL_Admin::Write_ProxySQL_Servers_to_configfile(std::string& data) {
return -1;
} else {
if (sqlite_resultset) {
std::string prefix;
data += "proxysql_servers:\n(\n";
bool isNext = false;
for (auto r : sqlite_resultset->rows) {

@ -13,7 +13,7 @@
using nlohmann::json;
CommandLine::CommandLine() :
host(NULL), username(NULL), password(NULL) {}
host(NULL), username(NULL), password(NULL), admin_username(NULL), admin_password(NULL) {}
CommandLine::~CommandLine() {
if (host)
@ -22,6 +22,10 @@ CommandLine::~CommandLine() {
free(username);
if (password)
free(password);
if (admin_username)
free(admin_username);
if (admin_password)
free(admin_password);
}
int CommandLine::parse(int argc, char** argv) {
@ -52,8 +56,14 @@ int CommandLine::parse(int argc, char** argv) {
case 'n':
no_write = true;
break;
case 'U':
admin_username = strdup(optarg);
break;
case 'S':
admin_password = strdup(optarg);
break;
default: /* '?' */
fprintf(stderr, "Usage: %s -u username -p password -h host [ -P port ] [ -A port ] [ -c ] [ -s ] [ -n ]\n", argv[0]);
fprintf(stderr, "Usage: %s -u username -p password -h host [ -P port ] [ -A port ] [ -U admin_username ] [ -S admin_password ] [ -c ] [ -s ] [ -n ]\n", argv[0]);
return 0;
}
}
@ -109,6 +119,18 @@ int CommandLine::getEnv() {
if(!value) return -1;
password=strdup(value);
value=getenv("TAP_ADMINUSERNAME");
if(!value)
admin_username=strdup("admin");
else
admin_username=strdup(value);
value=getenv("TAP_ADMINPASSWORD");
if(!value)
admin_password=strdup("admin");
else
admin_password=strdup(value);
port=6033;
checksum=true;
@ -117,12 +139,16 @@ int CommandLine::getEnv() {
value=getenv("TAP_PORT");
if(value)
env_port=strtol(value, &endstr, 10);
else
env_port=6033;
if(env_port>0 && env_port<65536)
port=env_port;
value=getenv("TAP_ADMINPORT");
if(value)
env_port=strtol(value, &endstr, 10);
else
env_port=6032;
if(env_port>0 && env_port<65536)
admin_port=env_port;

@ -13,6 +13,8 @@ class CommandLine {
char* host;
char* username;
char* password;
char* admin_username;
char* admin_password;
int port;
int admin_port;

@ -221,7 +221,7 @@ mysql_users:
backend=1
frontend=1
max_connections=10
comment=comm1
comment="comm1"
}
)
mysql_query_rules:

@ -75,7 +75,7 @@ int main(int argc, char** argv) {
if (!mysql)
return exit_status();
if (!mysql_real_connect(mysql, cl.host, cl.username, cl.password, NULL, cl.admin_port, NULL, 0)) {
if (!mysql_real_connect(mysql, cl.host, cl.admin_username, cl.admin_password, NULL, cl.admin_port, NULL, 0)) {
fprintf(stderr, "File %s, line %d, Error: %s\n",
__FILE__, __LINE__, mysql_error(mysql));
return exit_status();
@ -127,7 +127,7 @@ int main(int argc, char** argv) {
{
std::ifstream inFile;
inFile.open("./proxysql_reference_select_config_file.cnf"); //open the input file
inFile.open("./tests/proxysql_reference_select_config_file.cnf"); //open the input file
std::stringstream strStream;
strStream << inFile.rdbuf(); //read the file

Loading…
Cancel
Save