diff options
author | unknown <guilhem@mysql.com> | 2003-06-05 17:02:00 +0200 |
---|---|---|
committer | unknown <guilhem@mysql.com> | 2003-06-05 17:02:00 +0200 |
commit | bd414c301c1bbadecf385e1c10aa8a27cd76f61a (patch) | |
tree | 24432faf9692f68267e53ba54ed40085a94775f4 | |
parent | a3afb2bcbea96d4c5a326204151fb63cd0411aec (diff) | |
download | mariadb-git-bd414c301c1bbadecf385e1c10aa8a27cd76f61a.tar.gz |
Test for bug 578. And a comment in slave.cc.
sql/slave.cc:
Comment to remember that size of relay logs on disk is not the total size
of the relay log.
-rw-r--r-- | mysql-test/r/lock_tables_lost_commit.result | 8 | ||||
-rw-r--r-- | mysql-test/t/lock_tables_lost_commit-master.opt | 1 | ||||
-rw-r--r-- | mysql-test/t/lock_tables_lost_commit.test | 18 | ||||
-rw-r--r-- | sql/slave.cc | 20 |
4 files changed, 47 insertions, 0 deletions
diff --git a/mysql-test/r/lock_tables_lost_commit.result b/mysql-test/r/lock_tables_lost_commit.result new file mode 100644 index 00000000000..ccf56793f45 --- /dev/null +++ b/mysql-test/r/lock_tables_lost_commit.result @@ -0,0 +1,8 @@ +drop table if exists t1; +create table t1(a int) type=innodb; +lock tables t1 write; +insert into t1 values(10); +select * from t1; +a +10 +drop table t1; diff --git a/mysql-test/t/lock_tables_lost_commit-master.opt b/mysql-test/t/lock_tables_lost_commit-master.opt new file mode 100644 index 00000000000..d357a51cb27 --- /dev/null +++ b/mysql-test/t/lock_tables_lost_commit-master.opt @@ -0,0 +1 @@ +--binlog-ignore-db=test innodb
\ No newline at end of file diff --git a/mysql-test/t/lock_tables_lost_commit.test b/mysql-test/t/lock_tables_lost_commit.test new file mode 100644 index 00000000000..a12ee7369cb --- /dev/null +++ b/mysql-test/t/lock_tables_lost_commit.test @@ -0,0 +1,18 @@ +# This is a test for bug 578 + +connect (con1,localhost,root,,); +connect (con2,localhost,root,,); + +connection con1; +drop table if exists t1; +create table t1(a int) type=innodb; +lock tables t1 write; +insert into t1 values(10); +disconnect con1; + +connection con2; +# The bug was that, because of the LOCK TABLES, the handler "forgot" to commit, +# and the other commit when we write to the binlog was not done because of +# binlog-ignore-db +select * from t1; +drop table t1; diff --git a/sql/slave.cc b/sql/slave.cc index c2762dbd6f4..bead4323b0c 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -1186,6 +1186,26 @@ int init_relay_log_info(RELAY_LOG_INFO* rli, const char* info_fname) strmov(strcend(tmp,'.'),"-relay-bin"); opt_relay_logname=my_strdup(tmp,MYF(MY_WME)); } + + /* + The relay log will now be opened, as a SEQ_READ_APPEND IO_CACHE. It is + notable that the last kilobytes of it (8 kB for example) may live in memory, + not on disk (depending on what the thread using it does). While this is + efficient, it has a side-effect one must know: + the size of the relay log on disk (displayed by 'ls -l' on Unix) can be a + few kilobytes less than one would expect by doing SHOW SLAVE STATUS; this + happens when only the IO thread is started (not the SQL thread). The + "missing" kilobytes are in memory, are preserved during 'STOP SLAVE; START + SLAVE IO_THREAD', and are flushed to disk when the slave's mysqld stops. So + this does not cause any bug. Example of how disk size grows by leaps: + + Read_Master_Log_Pos: 7811 -rw-rw---- 1 guilhem qq 4 Jun 5 16:19 gbichot2-relay-bin.002 + ...later... + Read_Master_Log_Pos: 9744 -rw-rw---- 1 guilhem qq 8192 Jun 5 16:27 gbichot2-relay-bin.002 + + See how 4 is less than 7811 and 8192 is less than 9744. + */ + if (open_log(&rli->relay_log, glob_hostname, opt_relay_logname, "-relay-bin", opt_relaylog_index_name, LOG_BIN, 1 /* read_append cache */, |