diff options
author | unknown <monty@narttu.mysql.fi> | 2003-10-07 15:42:26 +0300 |
---|---|---|
committer | unknown <monty@narttu.mysql.fi> | 2003-10-07 15:42:26 +0300 |
commit | f16887c59c7e896c6504008f6cbea337a5cb3fff (patch) | |
tree | d89c080ef636608e316f1166b1628cd1d902deec /sql/sql_load.cc | |
parent | df02cd390d461b50ab5bdf3492aae1071db7da05 (diff) | |
parent | bc4a57f01ace40255de2f8d7307254fd1d1d5bfa (diff) | |
download | mariadb-git-f16887c59c7e896c6504008f6cbea337a5cb3fff.tar.gz |
Merge with 4.0.16
BitKeeper/etc/ignore:
auto-union
BitKeeper/etc/logging_ok:
auto-union
BitKeeper/deleted/.del-mysqldump.result:
Delete: mysql-test/r/mysqldump.result
BitKeeper/deleted/.del-mysqldump.test:
Delete: mysql-test/t/mysqldump.test
BitKeeper/deleted/.del-compile-netware-max:
Delete: netware/BUILD/compile-netware-max
BitKeeper/deleted/.del-compile-netware-max-debug:
Delete: netware/BUILD/compile-netware-max-debug
BitKeeper/deleted/.del-compile-netware-src:
Delete: netware/BUILD/compile-netware-src
BitKeeper/deleted/.del-knetware.imp:
Delete: netware/BUILD/knetware.imp
BUILD/compile-pentium-valgrind-max:
Auto merged
BitKeeper/deleted/.del-mini_client.cc~8677895ec8169183:
Auto merged
BitKeeper/deleted/.del-mysql_fix_privilege_tables.sql:
Auto merged
BitKeeper/deleted/.del-openssl.imp:
Delete: netware/BUILD/openssl.imp
acinclude.m4:
Auto merged
SSL/cacert.pem:
Auto merged
SSL/client-cert.pem:
Auto merged
SSL/server-cert.pem:
Auto merged
client/mysqlbinlog.cc:
Auto merged
extra/resolveip.c:
Auto merged
heap/hp_test2.c:
Auto merged
include/my_global.h:
Auto merged
innobase/row/row0mysql.c:
Auto merged
innobase/row/row0sel.c:
Auto merged
libmysql/libmysql.def:
Auto merged
libmysqld/examples/Makefile.am:
Auto merged
myisam/mi_check.c:
Auto merged
myisam/mi_test2.c:
Auto merged
myisam/myisamdef.h:
Auto merged
mysql-test/r/fulltext_multi.result:
Auto merged
mysql-test/r/fulltext_order_by.result:
Auto merged
mysql-test/r/select.result:
Auto merged
mysql-test/r/user_var.result:
Auto merged
mysql-test/std_data/rpl_loaddata2.dat:
Auto merged
mysql-test/t/rpl_loaddata.test:
Auto merged
mysql-test/t/select.test:
Auto merged
mysql-test/t/user_var.test:
Auto merged
mysys/mf_dirname.c:
Auto merged
scripts/make_win_src_distribution.sh:
Auto merged
sql/des_key_file.cc:
Auto merged
sql/log.cc:
Auto merged
sql/mysqld.cc:
Auto merged
sql/repl_failsafe.cc:
Auto merged
sql/slave.h:
Auto merged
sql-bench/crash-me.sh:
Auto merged
sql-bench/server-cfg.sh:
Auto merged
sql-bench/test-insert.sh:
Auto merged
sql-bench/test-transactions.sh:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_load.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_select.cc:
Auto merged
support-files/mysql.server.sh:
Auto merged
client/mysqltest.c:
Merge with 4.0.16
Changed version number to '2.0' to avoid confusion with version numbering in 3.23
mysql-test/r/distinct.result:
Updated results for merge
mysql-test/r/insert.result:
Updated results for merge
mysql-test/r/insert_select.result:
Updated results for merge
mysql-test/r/join_outer.result:
Updated results for merge
mysql-test/r/mix_innodb_myisam_binlog.result:
Updated results for merge
mysql-test/r/order_by.result:
Updated results for merge
mysql-test/r/rpl000009.result:
Updated results for merge
mysql-test/r/rpl_loaddata.result:
Updated results for merge
mysql-test/r/rpl_log.result:
Updated results for merge
mysql-test/r/select_safe.result:
Updated results for merge
scripts/mysql_install_db.sh:
Change -eq to =
BitKeeper/deleted/.del-ins000001.test~2428ee5c9b1bc483:
dummy
Diffstat (limited to 'sql/sql_load.cc')
-rw-r--r-- | sql/sql_load.cc | 44 |
1 files changed, 29 insertions, 15 deletions
diff --git a/sql/sql_load.cc b/sql/sql_load.cc index 60e0a7c7e94..0a5c544c2e7 100644 --- a/sql/sql_load.cc +++ b/sql/sql_load.cc @@ -308,22 +308,31 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list, #ifndef EMBEDDED_LIBRARY if (!opt_old_rpl_compat && mysql_bin_log.is_open()) { + /* + Make sure last block (the one which caused the error) gets logged. + This is needed because otherwise after write of + (to the binlog, not to read_info (which is a cache)) + Delete_file_log_event the bad block will remain in read_info (because + pre_read is not called at the end of the last block; remember pre_read + is called whenever a new block is read from disk). + At the end of mysql_load(), the destructor of read_info will call + end_io_cache() which will flush read_info, so we will finally have + this in the binlog: + Append_block # The last successfull block + Delete_file + Append_block # The failing block + which is nonsense. + Or could also be (for a small file) + Create_file # The failing block + which is nonsense (Delete_file is not written in this case, because: + Create_file has not been written, so Delete_file is not written, then + when read_info is destroyed end_io_cache() is called which writes + Create_file. + */ + read_info.end_io_cache(); + /* If the file was not empty, wrote_create_file is true */ if (lf_info.wrote_create_file) { - /* - Make sure last block (the one which caused the error) gets logged. - This is needed because otherwise after write of - (to the binlog, not to read_info (which is a cache)) - Delete_file_log_event the bad block will remain in read_info. - At the end of mysql_load(), the destructor of read_info will call - end_io_cache() which will flush read_info, so we will finally have - this in the binlog: - Append_block # The last successfull block - Delete_file - Append_block # The failing block - which is nonsense. - */ - read_info.end_io_cache(); Delete_file_log_event d(thd, db, log_delayed); mysql_bin_log.write(&d); } @@ -355,7 +364,12 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list, } else { - read_info.end_io_cache(); // make sure last block gets logged + /* + As already explained above, we need to call end_io_cache() or the last + block will be logged only after Execute_load_log_event (which is wrong), + when read_info is destroyed. + */ + read_info.end_io_cache(); if (lf_info.wrote_create_file) { Execute_load_log_event e(thd, db, log_delayed); |