mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
WL#342 heartbeat
backporting from 6.0 code base to 5.1.
This commit is contained in:
@ -26,12 +26,13 @@
|
||||
int init_intvar_from_file(int* var, IO_CACHE* f, int default_val);
|
||||
int init_strvar_from_file(char *var, int max_size, IO_CACHE *f,
|
||||
const char *default_val);
|
||||
int init_floatvar_from_file(float* var, IO_CACHE* f, float default_val);
|
||||
|
||||
Master_info::Master_info()
|
||||
:Slave_reporting_capability("I/O"),
|
||||
ssl(0), ssl_verify_server_cert(0), fd(-1), io_thd(0), inited(0),
|
||||
abort_slave(0),slave_running(0),
|
||||
slave_run_id(0)
|
||||
abort_slave(0),slave_running(0), slave_run_id(0),
|
||||
heartbeat_period(0), received_heartbeats(0)
|
||||
{
|
||||
host[0] = 0; user[0] = 0; password[0] = 0;
|
||||
ssl_ca[0]= 0; ssl_capath[0]= 0; ssl_cert[0]= 0;
|
||||
@ -84,6 +85,17 @@ void init_master_info_with_options(Master_info* mi)
|
||||
strmake(mi->ssl_key, master_ssl_key, sizeof(mi->ssl_key)-1);
|
||||
/* Intentionally init ssl_verify_server_cert to 0, no option available */
|
||||
mi->ssl_verify_server_cert= 0;
|
||||
/*
|
||||
always request heartbeat unless master_heartbeat_period is set
|
||||
explicitly zero. Here is the default value for heartbeat period
|
||||
if CHANGE MASTER did not specify it. (no data loss in conversion
|
||||
as hb period has a max)
|
||||
*/
|
||||
mi->heartbeat_period= (float) min(SLAVE_MAX_HEARTBEAT_PERIOD,
|
||||
(slave_net_timeout/2.0));
|
||||
DBUG_ASSERT(mi->heartbeat_period > (float) 0.001
|
||||
|| mi->heartbeat_period == 0);
|
||||
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
@ -94,8 +106,11 @@ enum {
|
||||
/* 5.1.16 added value of master_ssl_verify_server_cert */
|
||||
LINE_FOR_MASTER_SSL_VERIFY_SERVER_CERT= 15,
|
||||
|
||||
/* 6.0 added value of master_heartbeat_period */
|
||||
LINE_FOR_MASTER_HEARTBEAT_PERIOD= 16,
|
||||
|
||||
/* Number of lines currently used when saving master info file */
|
||||
LINES_IN_MASTER_INFO= LINE_FOR_MASTER_SSL_VERIFY_SERVER_CERT
|
||||
LINES_IN_MASTER_INFO= LINE_FOR_MASTER_HEARTBEAT_PERIOD
|
||||
};
|
||||
|
||||
int init_master_info(Master_info* mi, const char* master_info_fname,
|
||||
@ -197,6 +212,7 @@ file '%s')", fname);
|
||||
mi->fd = fd;
|
||||
int port, connect_retry, master_log_pos, lines;
|
||||
int ssl= 0, ssl_verify_server_cert= 0;
|
||||
float master_heartbeat_period= 0.0;
|
||||
char *first_non_digit;
|
||||
|
||||
/*
|
||||
@ -281,7 +297,13 @@ file '%s')", fname);
|
||||
if (lines >= LINE_FOR_MASTER_SSL_VERIFY_SERVER_CERT &&
|
||||
init_intvar_from_file(&ssl_verify_server_cert, &mi->file, 0))
|
||||
goto errwithmsg;
|
||||
|
||||
/*
|
||||
Starting from 6.0 master_heartbeat_period might be
|
||||
in the file
|
||||
*/
|
||||
if (lines >= LINE_FOR_MASTER_HEARTBEAT_PERIOD &&
|
||||
init_floatvar_from_file(&master_heartbeat_period, &mi->file, 0.0))
|
||||
goto errwithmsg;
|
||||
}
|
||||
|
||||
#ifndef HAVE_OPENSSL
|
||||
@ -300,6 +322,7 @@ file '%s')", fname);
|
||||
mi->connect_retry= (uint) connect_retry;
|
||||
mi->ssl= (my_bool) ssl;
|
||||
mi->ssl_verify_server_cert= ssl_verify_server_cert;
|
||||
mi->heartbeat_period= master_heartbeat_period;
|
||||
}
|
||||
DBUG_PRINT("master_info",("log_file_name: %s position: %ld",
|
||||
mi->master_log_name,
|
||||
@ -378,16 +401,18 @@ int flush_master_info(Master_info* mi, bool flush_relay_log_cache)
|
||||
contents of file). But because of number of lines in the first line
|
||||
of file we don't care about this garbage.
|
||||
*/
|
||||
|
||||
char heartbeat_buf[sizeof(mi->heartbeat_period) * 4]; // buffer to suffice always
|
||||
my_sprintf(heartbeat_buf, (heartbeat_buf, "%.3f", mi->heartbeat_period));
|
||||
my_b_seek(file, 0L);
|
||||
my_b_printf(file,
|
||||
"%u\n%s\n%s\n%s\n%s\n%s\n%d\n%d\n%d\n%s\n%s\n%s\n%s\n%s\n%d\n",
|
||||
"%u\n%s\n%s\n%s\n%s\n%s\n%d\n%d\n%d\n%s\n%s\n%s\n%s\n%s\n%d\n%s\n",
|
||||
LINES_IN_MASTER_INFO,
|
||||
mi->master_log_name, llstr(mi->master_log_pos, lbuf),
|
||||
mi->host, mi->user,
|
||||
mi->password, mi->port, mi->connect_retry,
|
||||
(int)(mi->ssl), mi->ssl_ca, mi->ssl_capath, mi->ssl_cert,
|
||||
mi->ssl_cipher, mi->ssl_key, mi->ssl_verify_server_cert);
|
||||
mi->ssl_cipher, mi->ssl_key, mi->ssl_verify_server_cert,
|
||||
heartbeat_buf);
|
||||
DBUG_RETURN(-flush_io_cache(file));
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user