diff options
author | unknown <sasha@mysql.sashanet.com> | 2001-08-03 15:57:53 -0600 |
---|---|---|
committer | unknown <sasha@mysql.sashanet.com> | 2001-08-03 15:57:53 -0600 |
commit | 0dab9f40e1c52ac00e1ca291785ae7943dea577e (patch) | |
tree | 7a15577166ddda4e7b8c9c9cb80471777aeb717b /sql/log.cc | |
parent | 07ed42de3177805c3e1f5d8c7664d91ef0015d62 (diff) | |
download | mariadb-git-0dab9f40e1c52ac00e1ca291785ae7943dea577e.tar.gz |
LOAD DATA INFILE is now replicated properly, except for cleanup on
Stop event and bugs the test suite could not catch
Did some big restructuring of binlog event classes - most important
change is that now each event class has exec_event method and one does
not need to modify slave core code to add a new event. Slave code is
now much smaller and easier to read
include/my_sys.h:
pre_code and arg in IO_CACHE
mysql-test/r/rpl_log.result:
updated result for LOAD DATA INFILE fix
mysys/mf_iocache.c:
pre_close routine and arg pointer for callback magic
sql/log.cc:
changed MYSQL_LOG so that write() method is for generic
Log_event - removed redundant code
sql/log_event.cc:
added classes for file events
added exec_event() method to all classes
restructured/cleaned up event classes
sql/log_event.h:
added classes for file events
added exec_event() method to all classes
restructured/cleaned up event classes
sql/mf_iocache.cc:
pre_close/arg
sql/mysqld.cc:
added slave-load-tmpdir and old-rpl-compat options
sql/slave.cc:
changed exec_event() to use Log_event::exec_event()
some routines are now needed in log_event.cc and cannot be static/inline
general cleanup
sql/slave.h:
some routines are now extern because they are called from log_event.cc
sql/sql_class.cc:
added slave_net
sql/sql_class.h:
added slave_net to THD
MYSQL_LOG::write now handles generic Log_event
sql/sql_load.cc:
changes for new handling of LOAD DATA INFILE replication
sql/sql_repl.cc:
added log_loaded_block() callback for IO_CACHE
sql/sql_repl.h:
added structure to pass args to IO_CACHE callback from mysql_load
Diffstat (limited to 'sql/log.cc')
-rw-r--r-- | sql/log.cc | 74 |
1 files changed, 12 insertions, 62 deletions
diff --git a/sql/log.cc b/sql/log.cc index 091a7b55d0c..61384f85085 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -535,8 +535,8 @@ void MYSQL_LOG::new_file(bool inside_mutex) We log the whole file name for log file as the user may decide to change base names at some point. */ - Rotate_log_event r(new_name+dirname_length(new_name)); THD* thd = current_thd; + Rotate_log_event r(thd,new_name+dirname_length(new_name)); r.set_log_seq(0, this); // this log rotation could have been initiated by a master of // the slave running with log-bin @@ -638,24 +638,8 @@ bool MYSQL_LOG::write(THD *thd,enum enum_server_command command, return 0; } -/* Write to binary log in a format to be used for replication */ -bool MYSQL_LOG::write(Slave_log_event* event_info) -{ - bool error; - if (!inited) // Can't use mutex if not init - return 0; - VOID(pthread_mutex_lock(&LOCK_log)); - if(!event_info->log_seq) - event_info->set_log_seq(current_thd, this); - error = event_info->write(&log_file); - flush_io_cache(&log_file); - VOID(pthread_mutex_unlock(&LOCK_log)); - return error; -} - - -bool MYSQL_LOG::write(Query_log_event* event_info) +bool MYSQL_LOG::write(Log_event* event_info) { /* In most cases this is only called if 'is_open()' is true */ bool error=0; @@ -667,40 +651,42 @@ bool MYSQL_LOG::write(Query_log_event* event_info) if (is_open()) { THD *thd=event_info->thd; + const char* db = event_info->get_db(); #ifdef USING_TRANSACTIONS - IO_CACHE *file = (event_info->cache_stmt ? &thd->transaction.trans_log : + IO_CACHE *file = ((event_info->cache_stmt && thd) ? + &thd->transaction.trans_log : &log_file); #else IO_CACHE *file = &log_file; #endif - if ((!(thd->options & OPTION_BIN_LOG) && + if ((thd && !(thd->options & OPTION_BIN_LOG) && (thd->master_access & PROCESS_ACL)) || - !db_ok(event_info->db, binlog_do_db, binlog_ignore_db)) + (db && !db_ok(db, binlog_do_db, binlog_ignore_db))) { VOID(pthread_mutex_unlock(&LOCK_log)); return 0; } error=1; - if (thd->last_insert_id_used) + if (thd && thd->last_insert_id_used) { - Intvar_log_event e((uchar)LAST_INSERT_ID_EVENT, thd->last_insert_id); + Intvar_log_event e(thd,(uchar)LAST_INSERT_ID_EVENT,thd->last_insert_id); e.set_log_seq(thd, this); if (thd->server_id) e.server_id = thd->server_id; if (e.write(file)) goto err; } - if (thd->insert_id_used) + if (thd && thd->insert_id_used) { - Intvar_log_event e((uchar)INSERT_ID_EVENT, thd->last_insert_id); + Intvar_log_event e(thd,(uchar)INSERT_ID_EVENT,thd->last_insert_id); e.set_log_seq(thd, this); if (thd->server_id) e.server_id = thd->server_id; if (e.write(file)) goto err; } - if (thd->convert_set) + if (thd && thd->convert_set) { char buf[1024] = "SET CHARACTER SET "; char* p = strend(buf); @@ -795,42 +781,6 @@ err: } -bool MYSQL_LOG::write(Load_log_event* event_info) -{ - bool error=0; - bool should_rotate = 0; - - if (inited) - { - VOID(pthread_mutex_lock(&LOCK_log)); - if (is_open()) - { - THD *thd=event_info->thd; - if ((thd->options & OPTION_BIN_LOG) || - !(thd->master_access & PROCESS_ACL)) - { - event_info->set_log_seq(thd, this); - if (event_info->write(&log_file) || flush_io_cache(&log_file)) - { - if (!write_error) - sql_print_error(ER(ER_ERROR_ON_WRITE), name, errno); - error=write_error=1; - } - should_rotate = (my_b_tell(&log_file) >= max_binlog_size); - VOID(pthread_cond_broadcast(&COND_binlog_update)); - } - } - - if(should_rotate) - new_file(1); // inside mutex - - VOID(pthread_mutex_unlock(&LOCK_log)); - } - - return error; -} - - /* Write update log in a format suitable for incremental backup */ bool MYSQL_LOG::write(THD *thd,const char *query, uint query_length, |