Fix invalid servers removal when present in multiple AWS Aurora clusters

v2.x-aurora_autodiscovery_shunned_promotion
Javier Jaramago Fernández 3 years ago
parent 72cfd2452a
commit 2d5359a4a0

@ -7957,9 +7957,9 @@ void MySQL_HostGroups_Manager::update_aws_aurora_set_reader(int _whid, int _rhid
}
pthread_mutex_unlock(&AWS_Aurora_Info_mutex);
}
q=(char *)"SELECT hostgroup_id FROM mysql_servers JOIN mysql_aws_aurora_hostgroups ON hostgroup_id=writer_hostgroup OR hostgroup_id=reader_hostgroup WHERE hostname='%s%s' AND port=%d AND status<>3";
query=(char *)malloc(strlen(q)+strlen(_server_id)+strlen(domain_name)+32);
sprintf(query, q, _server_id, domain_name, aurora_port);
q = (char*)"SELECT hostgroup_id FROM mysql_servers JOIN mysql_aws_aurora_hostgroups ON hostgroup_id=writer_hostgroup OR hostgroup_id=reader_hostgroup WHERE hostname='%s%s' AND port=%d AND status<>3 AND hostgroup_id IN (%d,%d)";
query=(char *)malloc(strlen(q)+strlen(_server_id)+strlen(domain_name)+32+32+32);
sprintf(query, q, _server_id, domain_name, aurora_port, _whid, _rhid);
mydb->execute_statement(query, &error, &cols , &affected_rows , &resultset);
if (error) {
free(error);
@ -7972,14 +7972,17 @@ void MySQL_HostGroups_Manager::update_aws_aurora_set_reader(int _whid, int _rhid
GloAdmin->mysql_servers_wrlock();
mydb->execute("DELETE FROM mysql_servers_incoming");
mydb->execute("INSERT INTO mysql_servers_incoming SELECT hostgroup_id, hostname, port, gtid_port, weight, status, compression, max_connections, max_replication_lag, use_ssl, max_latency_ms, comment FROM mysql_servers");
q=(char *)"UPDATE OR IGNORE mysql_servers_incoming SET hostgroup_id=%d WHERE hostname='%s%s' AND port=%d AND hostgroup_id<>%d";
// If server present as WRITER try moving it to 'reader_hostgroup'.
q=(char *)"UPDATE OR IGNORE mysql_servers_incoming SET hostgroup_id=%d WHERE hostname='%s%s' AND port=%d AND hostgroup_id=%d";
query=(char *)malloc(strlen(q)+strlen(_server_id)+strlen(domain_name)+512);
sprintf(query, q, _rhid, _server_id, domain_name, aurora_port, _rhid);
sprintf(query, q, _rhid, _server_id, domain_name, aurora_port, _whid);
mydb->execute(query);
//free(query);
q=(char *)"DELETE FROM mysql_servers_incoming WHERE hostname='%s%s' AND port=%d AND hostgroup_id<>%d";
// Reader could previously be also a reader, in which case previous operation 'UPDATE OR IGNORE'
// did nothing. If server is still in the 'writer_hostgroup', we should remove it.
q=(char *)"DELETE FROM mysql_servers_incoming WHERE hostname='%s%s' AND port=%d AND hostgroup_id=%d";
//query=(char *)malloc(strlen(q)+strlen(_hostname)+64);
sprintf(query, q, _server_id, domain_name, aurora_port, _rhid);
sprintf(query, q, _server_id, domain_name, aurora_port, _whid);
mydb->execute(query);
//free(query);
q=(char *)"UPDATE mysql_servers_incoming SET status=0 WHERE hostname='%s%s' AND port=%d AND hostgroup_id=%d";

Loading…
Cancel
Save