#define MYHGM_MYSQL_SERVERS "CREATE TABLE mysql_servers ( hostgroup_id INT NOT NULL DEFAULT 0, hostname VARCHAR NOT NULL , port INT NOT NULL DEFAULT 3306, weight INT CHECK (weight >= 0) NOT NULL DEFAULT 1 , status INT CHECK (status IN (0, 1, 2, 3)) NOT NULL DEFAULT 0, mem_pointer INT NOT NULL DEFAULT 0, PRIMARY KEY (hostgroup_id, hostname, port) )"
#define MYHGM_MYSQL_SERVERS_INCOMING "CREATE TABLE mysql_servers_incoming ( hostgroup_id INT NOT NULL DEFAULT 0, hostname VARCHAR NOT NULL , port INT NOT NULL DEFAULT 3306, weight INT CHECK (weight >= 0) NOT NULL DEFAULT 1 , status INT CHECK (status IN (0, 1, 2, 3)) NOT NULL DEFAULT 0, PRIMARY KEY (hostgroup_id, hostname, port))"
#define MYHGM_MYSQL_SERVERS "CREATE TABLE mysql_servers ( hostgroup_id INT NOT NULL DEFAULT 0, hostname VARCHAR NOT NULL , port INT NOT NULL DEFAULT 3306, weight INT CHECK (weight >= 0) NOT NULL DEFAULT 1 , status INT CHECK (status IN (0, 1, 2, 3)) NOT NULL DEFAULT 0, compression INT CHECK (compression IN (0,1)) NOT NULL DEFAULT 0 , mem_pointer INT NOT NULL DEFAULT 0, PRIMARY KEY (hostgroup_id, hostname, port) )"
#define MYHGM_MYSQL_SERVERS_INCOMING "CREATE TABLE mysql_servers_incoming ( hostgroup_id INT NOT NULL DEFAULT 0, hostname VARCHAR NOT NULL , port INT NOT NULL DEFAULT 3306, weight INT CHECK (weight >= 0) NOT NULL DEFAULT 1 , status INT CHECK (status IN (0, 1, 2, 3)) NOT NULL DEFAULT 0, compression INT CHECK (compression IN (0,1)) NOT NULL DEFAULT 0 , PRIMARY KEY (hostgroup_id, hostname, port))"
classMySrvConnList;
@ -43,9 +43,11 @@ class MySrvC { // MySQL Server Container
proxy_debug(PROXY_DEBUG_MYSQL_CONNPOOL,7,"Adding in mysql_servers_incoming server %s:%d in hostgroup %u with weight %u and status %u\n",add,p,hid,_weight,status);
char*q=(char*)"INSERT INTO mysql_servers_incoming VALUES (%u, \"%s\", %u, %u, %u)";
proxy_debug(PROXY_DEBUG_MYSQL_CONNPOOL,7,"Adding in mysql_servers_incoming server %s:%d in hostgroup %u with weight %u , status %u, %s compression and charset %d\n",add,p,hid,_weight,status,(_comp?"with":"without")/*, _charset */);
char*q=(char*)"INSERT INTO mysql_servers_incoming VALUES (%u, \"%s\", %u, %u, %u, %u)";
// INSERT OR IGNORE INTO mysql_servers SELECT ... FROM mysql_servers_incoming
proxy_debug(PROXY_DEBUG_MYSQL_CONNPOOL,4,"INSERT OR IGNORE INTO mysql_servers(hostgroup_id, hostname, port, weight, status) SELECT hostgroup_id, hostname, port, weight, status FROM mysql_servers_incoming\n");
mydb->execute("INSERT OR IGNORE INTO mysql_servers(hostgroup_id, hostname, port, weight, status) SELECT hostgroup_id, hostname, port, weight, status FROM mysql_servers_incoming");
proxy_debug(PROXY_DEBUG_MYSQL_CONNPOOL,4,"INSERT OR IGNORE INTO mysql_servers(hostgroup_id, hostname, port, weight, status, compression) SELECT hostgroup_id, hostname, port, weight, status, compression FROM mysql_servers_incoming\n");
mydb->execute("INSERT OR IGNORE INTO mysql_servers(hostgroup_id, hostname, port, weight, status, compression) SELECT hostgroup_id, hostname, port, weight, status, compression FROM mysql_servers_incoming");
// SELECT FROM mysql_servers whatever is not identical in mysql_servers_incoming, or where mem_pointer=0 (where there is no pointer yet)
query=(char*)"SELECT t1.*, t2.weight, t2.status FROM mysql_servers t1 JOIN mysql_servers_incoming t2 ON (t1.hostgroup_id=t2.hostgroup_id AND t1.hostname=t2.hostname AND t1.port=t2.port) WHERE mem_pointer=0 OR t1.weight<>t2.weight OR t1.status<>t2.status";
query=(char*)"SELECT t1.*, t2.weight, t2.status, t2.compression FROM mysql_servers t1 JOIN mysql_servers_incoming t2 ON (t1.hostgroup_id=t2.hostgroup_id AND t1.hostname=t2.hostname AND t1.port=t2.port) WHERE mem_pointer=0 OR t1.weight<>t2.weight OR t1.status<>t2.status OR t1.compression<>t2.compression";
proxy_debug(PROXY_DEBUG_MYSQL_CONNPOOL,5,"Creating new server %s:%d , weight=%d, status=%d\n",r->fields[1],atoi(r->fields[2]),atoi(r->fields[3]),(MySerStatus)atoi(r->fields[4]));
proxy_debug(PROXY_DEBUG_MYSQL_CONNPOOL,5,"Creating new server %s:%d , weight=%d, status=%d, compression=%d\n",r->fields[1],atoi(r->fields[2]),atoi(r->fields[3]),(MySerStatus)atoi(r->fields[4]),atoi(r->fields[5]));
proxy_debug(PROXY_DEBUG_MYSQL_CONNPOOL,5,"Adding new server %s:%d , weight=%d, status=%d, mem_ptr=%p into hostgroup=%d\n",r->fields[1],atoi(r->fields[2]),atoi(r->fields[3]),(MySerStatus)atoi(r->fields[4]),mysrvc,atoi(r->fields[0]));
add(mysrvc,atoi(r->fields[0]));
}else{
MySrvC*mysrvc=(MySrvC*)ptr;
if(atoi(r->fields[3])!=atoi(r->fields[6])){
proxy_debug(PROXY_DEBUG_MYSQL_CONNPOOL,5,"Changing weight for server %s:%d (%s:%d) from %d (%d) to %d\n",mysrvc->address,mysrvc->port,r->fields[1],atoi(r->fields[2]),r->fields[3],mysrvc->weight,atoi(r->fields[6]));
mysrvc->weight=atoi(r->fields[6]);
if(atoi(r->fields[3])!=atoi(r->fields[7])){
proxy_debug(PROXY_DEBUG_MYSQL_CONNPOOL,5,"Changing weight for server %s:%d (%s:%d) from %d (%d) to %d\n",mysrvc->address,mysrvc->port,r->fields[1],atoi(r->fields[2]),r->fields[3],mysrvc->weight,atoi(r->fields[7]));
mysrvc->weight=atoi(r->fields[7]);
}
if(atoi(r->fields[4])!=atoi(r->fields[7])){
proxy_debug(PROXY_DEBUG_MYSQL_CONNPOOL,5,"Changing status for server %s:%d (%s:%d) from %d (%d) to %d\n",mysrvc->address,mysrvc->port,r->fields[1],atoi(r->fields[2]),r->fields[4],mysrvc->status,atoi(r->fields[7]));
mysrvc->status=(MySerStatus)atoi(r->fields[7]);
if(atoi(r->fields[4])!=atoi(r->fields[8])){
proxy_debug(PROXY_DEBUG_MYSQL_CONNPOOL,5,"Changing status for server %s:%d (%s:%d) from %d (%d) to %d\n",mysrvc->address,mysrvc->port,r->fields[1],atoi(r->fields[2]),r->fields[4],mysrvc->status,atoi(r->fields[8]));
mysrvc->status=(MySerStatus)atoi(r->fields[8]);
}
if(atoi(r->fields[5])!=atoi(r->fields[9])){
proxy_debug(PROXY_DEBUG_MYSQL_CONNPOOL,5,"Changing compression for server %s:%d (%s:%d) from %d (%d) to %d\n",mysrvc->address,mysrvc->port,r->fields[1],atoi(r->fields[2]),r->fields[4],mysrvc->compression,atoi(r->fields[9]));
char*query=(char*)"SELECT hostgroup_id, hostname, port, weight, CASE status WHEN 0 THEN \"ONLINE\" WHEN 1 THEN \"SHUNNED\" WHEN 2 THEN \"OFFLINE_SOFT\" WHEN 3 THEN \"OFFLINE_HARD\" END FROM mysql_servers";
char*query=(char*)"SELECT hostgroup_id, hostname, port, weight, CASE status WHEN 0 THEN \"ONLINE\" WHEN 1 THEN \"SHUNNED\" WHEN 2 THEN \"OFFLINE_SOFT\" WHEN 3 THEN \"OFFLINE_HARD\" END, compression FROM mysql_servers";
//#define ADMIN_SQLITE_TABLE_MYSQL_SERVERS "CREATE TABLE mysql_servers ( hostname VARCHAR NOT NULL , port INT NOT NULL DEFAULT 3306 , status INT NOT NULL DEFAULT 0 REFERENCES server_status(status) , PRIMARY KEY(hostname, port) )"
//#define ADMIN_SQLITE_TABLE_MYSQL_SERVERS "CREATE TABLE mysql_servers ( hostname VARCHAR NOT NULL , port INT NOT NULL DEFAULT 3306 , status VARCHAR CHECK (status IN ('OFFLINE_HARD', 'OFFLINE_SOFT', 'SHUNNED', 'ONLINE')) NOT NULL DEFAULT 'OFFLINE_HARD', PRIMARY KEY(hostname, port) )"
//#define ADMIN_SQLITE_TABLE_MYSQL_SERVERS "CREATE TABLE mysql_servers ( hostgroup_id INT NOT NULL DEFAULT 0, hostname VARCHAR NOT NULL , port INT NOT NULL DEFAULT 3306, status VARCHAR CHECK (status IN ('OFFLINE_HARD', 'OFFLINE_SOFT', 'SHUNNED', 'ONLINE')) NOT NULL DEFAULT 'OFFLINE_HARD', weight INT CHECK (weight >= 0) NOT NULL DEFAULT 1 , PRIMARY KEY (hostgroup_id, hostname, port) )"
#define ADMIN_SQLITE_TABLE_MYSQL_SERVERS "CREATE TABLE mysql_servers ( hostgroup_id INT NOT NULL DEFAULT 0, hostname VARCHAR NOT NULL , port INT NOT NULL DEFAULT 3306, status VARCHAR CHECK (status IN ('ONLINE','SHUNNED','OFFLINE_SOFT', 'OFFLINE_HARD')) NOT NULL DEFAULT 'ONLINE', weight INT CHECK (weight >= 0) NOT NULL DEFAULT 1 , PRIMARY KEY (hostgroup_id, hostname, port) )"
#define ADMIN_SQLITE_TABLE_MYSQL_SERVERS "CREATE TABLE mysql_servers ( hostgroup_id INT NOT NULL DEFAULT 0, hostname VARCHAR NOT NULL , port INT NOT NULL DEFAULT 3306, status VARCHAR CHECK (status IN ('ONLINE','SHUNNED','OFFLINE_SOFT', 'OFFLINE_HARD')) NOT NULL DEFAULT 'ONLINE', weight INT CHECK (weight >= 0) NOT NULL DEFAULT 1 , compression INT CHECK (compression IN (0,1)) NOT NULL DEFAULT 0 , PRIMARY KEY (hostgroup_id, hostname, port) )"
//#define ADMIN_SQLITE_TABLE_MYSQL_HOSTGROUPS "CREATE TABLE mysql_hostgroups ( hostgroup_id INT NOT NULL , description VARCHAR, PRIMARY KEY(hostgroup_id) )"
//#define ADMIN_SQLITE_TABLE_MYSQL_HOSTGROUP_ENTRIES "CREATE TABLE mysql_hostgroup_entries ( hostgroup_id INT NOT NULL DEFAULT 0, hostname VARCHAR NOT NULL , port INT NOT NULL DEFAULT 3306, weight INT CHECK (weight >= 0) NOT NULL DEFAULT 1 , FOREIGN KEY (hostname, port) REFERENCES mysql_servers (hostname, port) , FOREIGN KEY (hostgroup_id) REFERENCES mysql_hostgroups (hostgroup_id) , PRIMARY KEY (hostgroup_id, hostname, port) )"
//#define ADMIN_SQLITE_TABLE_MYSQL_USERS "CREATE TABLE mysql_users ( username VARCHAR NOT NULL , password VARCHAR , active INT CHECK (active IN (0,1)) NOT NULL DEFAULT 1 , use_ssl INT CHECK (use_ssl IN (0,1)) NOT NULL DEFAULT 0, default_hostgroup INT NOT NULL DEFAULT 0, transaction_persistent INT CHECK (transaction_persistent IN (0,1)) NOT NULL DEFAULT 0, backend INT CHECK (backend IN (0,1)) NOT NULL DEFAULT 1, frontend INT CHECK (frontend IN (0,1)) NOT NULL DEFAULT 1, PRIMARY KEY (username, backend), UNIQUE (username, frontend) , FOREIGN KEY (default_hostgroup) REFERENCES mysql_hostgroups (hostgroup_id))"