@ -4312,7 +4312,7 @@ bool Galera_Info::update(int b, int r, int o, int mw, int mtb, bool _a, int _w,
return ret ;
}
void MySQL_HostGroups_Manager : : update_galera_set_offline ( char * _hostname , int _port , int _writer_hostgroup , char * _error ) {
void MySQL_HostGroups_Manager : : update_galera_set_offline ( char * _hostname , int _port , int _writer_hostgroup , char * _error , bool soft ) {
bool set_offline = false ;
int cols = 0 ;
int affected_rows = 0 ;
@ -4338,7 +4338,7 @@ void MySQL_HostGroups_Manager::update_galera_set_offline(char *_hostname, int _p
SQLite3_result * numw_result = NULL ;
// we search for writers
q = ( char * ) " SELECT 1 FROM mysql_servers WHERE hostgroup_id=%d AND status=0 " ;
query = ( char * ) malloc ( strlen ( q ) + ( sizeof ( _writer_hostgroup ) * 8 + 1 ) ) ;
//query=(char *)malloc(strlen(q) + (sizeof(_writer_hostgroup) * 8 + 1));
sprintf ( query , q , _writer_hostgroup ) ;
mydb - > execute_statement ( query , & error , & cols , & affected_rows , & numw_result ) ;
free ( query ) ;
@ -4354,21 +4354,27 @@ void MySQL_HostGroups_Manager::update_galera_set_offline(char *_hostname, int _p
if ( set_offline & & info ) {
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' AND port=%d AND hostgroup_id in (%d, %d, %d) " ;
query = ( char * ) malloc ( strlen ( q ) + strlen ( _hostname ) + 128 ) ;
sprintf ( query , q , info - > offline_hostgroup , _hostname , _port , _writer_hostgroup , info - > backup_writer_hostgroup , info - > reader_hostgroup ) ;
mydb - > execute ( query ) ;
//free(query);
q = ( char * ) " DELETE FROM mysql_servers_incoming WHERE hostname='%s' AND port=%d AND hostgroup_id in (%d, %d, %d) " ;
//query=(char *)malloc(strlen(q)+strlen(_hostname)+64);
sprintf ( query , q , _hostname , _port , _writer_hostgroup , info - > backup_writer_hostgroup , info - > reader_hostgroup ) ;
mydb - > execute ( query ) ;
//free(query);
q = ( char * ) " UPDATE mysql_servers_incoming SET status=0 WHERE hostname='%s' AND port=%d AND hostgroup_id in (%d, %d, %d) " ;
//query=(char *)malloc(strlen(q)+strlen(_hostname)+64);
sprintf ( query , q , _hostname , _port , _writer_hostgroup , info - > backup_writer_hostgroup , info - > reader_hostgroup ) ;
mydb - > execute ( query ) ;
//free(query);
if ( soft = = false ) { // default behavior
q = ( char * ) " UPDATE OR IGNORE mysql_servers_incoming SET hostgroup_id=%d WHERE hostname='%s' AND port=%d AND hostgroup_id in (%d, %d, %d) " ;
//query=(char *)malloc(strlen(q)+strlen(_hostname)+128);
sprintf ( query , q , info - > offline_hostgroup , _hostname , _port , _writer_hostgroup , info - > backup_writer_hostgroup , info - > reader_hostgroup ) ;
mydb - > execute ( query ) ;
//free(query);
q = ( char * ) " DELETE FROM mysql_servers_incoming WHERE hostname='%s' AND port=%d AND hostgroup_id in (%d, %d, %d) " ;
//query=(char *)malloc(strlen(q)+strlen(_hostname)+64);
sprintf ( query , q , _hostname , _port , _writer_hostgroup , info - > backup_writer_hostgroup , info - > reader_hostgroup ) ;
mydb - > execute ( query ) ;
//free(query);
q = ( char * ) " UPDATE mysql_servers_incoming SET status=0 WHERE hostname='%s' AND port=%d AND hostgroup_id in (%d, %d, %d) " ;
//query=(char *)malloc(strlen(q)+strlen(_hostname)+64);
sprintf ( query , q , _hostname , _port , _writer_hostgroup , info - > backup_writer_hostgroup , info - > reader_hostgroup ) ;
mydb - > execute ( query ) ;
//free(query);
} else {
q = ( char * ) " UPDATE mysql_servers_incoming SET status=1 WHERE hostname='%s' AND port=%d AND hostgroup_id = %d " ;
sprintf ( query , q , _hostname , _port , _writer_hostgroup ) ;
mydb - > execute ( query ) ;
}
converge_galera_config ( _writer_hostgroup ) ;
uint64_t checksum_current = 0 ;
uint64_t checksum_incoming = 0 ;
@ -4382,7 +4388,7 @@ void MySQL_HostGroups_Manager::update_galera_set_offline(char *_hostname, int _p
char * error = NULL ;
q1 = ( char * ) " SELECT DISTINCT hostgroup_id, hostname, port, gtid_port, weight, status, compression, max_connections, max_replication_lag, use_ssl, max_latency_ms, mysql_servers.comment FROM mysql_servers JOIN mysql_galera_hostgroups ON hostgroup_id=writer_hostgroup OR hostgroup_id=backup_writer_hostgroup OR hostgroup_id=reader_hostgroup WHERE writer_hostgroup=%d ORDER BY hostgroup_id, hostname, port " ;
q2 = ( char * ) " SELECT DISTINCT hostgroup_id, hostname, port, gtid_port, weight, status, compression, max_connections, max_replication_lag, use_ssl, max_latency_ms, mysql_servers_incoming.comment FROM mysql_servers_incoming JOIN mysql_galera_hostgroups ON hostgroup_id=writer_hostgroup OR hostgroup_id=backup_writer_hostgroup OR hostgroup_id=reader_hostgroup WHERE writer_hostgroup=%d ORDER BY hostgroup_id, hostname, port " ;
query = ( char * ) malloc ( strlen ( q2 ) + 128 ) ;
//query = (char *)malloc(strlen(q2)+128);
sprintf ( query , q1 , _writer_hostgroup ) ;
mydb - > execute_statement ( query , & error , & cols , & affected_rows , & resultset_servers ) ;
if ( error = = NULL ) {