mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
4 small items in this:
- when we don't have in_addr_t, use uint32. - a forgotten initialization of slave_proxy_id in sql/log_event.cc (was not really "forgot", was "we needn't init it there", but there was one case where we needed...). - made slave_proxy_id always meaningful in THD and Log_event, so we can rely more on it (no need to test if it's meaningful). THD::slave_proxy_id is equal to THD::thread_id except for the slave SQL thread. - clean up the slave's temporary table (i.e. free their memory) when slave server shuts down. extra/resolveip.c: removed #define as it is simpler to put it in my_net.h (because we need the #define elsewhere) include/my_net.h: When in_addr_t is not defined, use uint32. libmysql/libmysql.c: using in_addr_t is more generic. libmysql/manager.c: using in_addr_t is more generic. mysql-test/t/rpl_chain_temp_table.test: comments sql/log_event.cc: * Had forgot to initialize slave_proxy_id in the event constructor (char* buf...). Initializing is in fact only needed for Create_file_log_event, because it uses slave_proxy_id even if it does not write an event to the binlog (it uses slave_proxy_id to write it to SQL-LOAD.info). * When we write events we now always write slave_proxy_id, which is now always meaningful (as thd->slave_proxy_id is now always meaningful, see change in sql_class.cc). sql/mini_client.cc: in_addr_t is more generic. sql/slave.cc: A RELAY_LOG_INFO method to free the slave's temporary tables from memory at slave's server shutdown. It is called by end_slave(), which is called by close_connections(), which is called when the server terminates (close_connections() is just before clean_up(); putting the call in clean_up() was buggy, as active_mi is already deleted by close_connections(). sql/slave.h: new method sql/sql_class.cc: By default we set THD::slave_proxy_id to THD::thread_id, so THD::slave_proxy_id is always meaningful (not 0). It's always the same as the thread id except for the slave SQL thread.
This commit is contained in:
21
sql/slave.cc
21
sql/slave.cc
@ -324,6 +324,20 @@ void init_slave_skip_errors(const char* arg)
|
||||
}
|
||||
}
|
||||
|
||||
void st_relay_log_info::close_temporary_tables()
|
||||
{
|
||||
TABLE *table,*next;
|
||||
|
||||
for (table=save_temporary_tables ; table ; table=next)
|
||||
{
|
||||
next=table->next;
|
||||
/*
|
||||
Don't ask for disk deletion. For now, anyway they will be deleted when
|
||||
slave restarts, but it is a better intention to not delete them.
|
||||
*/
|
||||
close_temporary(table, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
We assume we have a run lock on rli and that both slave thread
|
||||
@ -790,6 +804,7 @@ static int end_slave_on_walk(MASTER_INFO* mi, gptr /*unused*/)
|
||||
|
||||
void end_slave()
|
||||
{
|
||||
/* This is called when the server terminates, in close_connections(). */
|
||||
if (active_mi)
|
||||
{
|
||||
/*
|
||||
@ -3092,6 +3107,12 @@ void end_relay_log_info(RELAY_LOG_INFO* rli)
|
||||
}
|
||||
rli->inited = 0;
|
||||
rli->relay_log.close(LOG_CLOSE_INDEX | LOG_CLOSE_STOP_EVENT);
|
||||
/*
|
||||
Delete the slave's temporary tables from memory.
|
||||
In the future there will be other actions than this, to ensure persistance
|
||||
of slave's temp tables after shutdown.
|
||||
*/
|
||||
rli->close_temporary_tables();
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user