Commit graph

457 commits

Author SHA1 Message Date
mkindahl@dl145h.mysql.com
e0ae105055 Bug#32435:
DROP DATABASE statement writes changes to mysql.proc table under RBR

When replicating a DROP DATABASE statement with a database holding
stored procedures, the changes to the mysql.proc table was recorded
in the binary log under row-based replication.

With this patch, the thread uses statement-logging format for the
duration of the DROP DATABASE statement. The logging format is
(already) reset at the end of the statement, so no additional code
for resetting the logging format is necessary.
2007-11-16 15:55:22 +01:00
istruewing@stella.local
6d06272e8a Merge stella.local:/home2/mydev/mysql-5.1-amain
into  stella.local:/home2/mydev/mysql-5.1-axmrg
2007-11-16 14:07:59 +01:00
tomas@whalegate.ndb.mysql.com
9eb3a99e67 Merge whalegate.ndb.mysql.com:/home/tomas/mysql-5.1
into  whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-new-ndb-merge
2007-11-16 11:15:53 +01:00
joerg@trift2.
07b6bec842 Merge trift2.:/MySQL/M51/mysql-5.1
into  trift2.:/MySQL/M51/push-5.1
2007-11-16 11:12:13 +01:00
istruewing@stella.local
0605274155 Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
corrupts a MERGE table
Bug 26867 - LOCK TABLES + REPAIR + merge table result in
            memory/cpu hogging
Bug 26377 - Deadlock with MERGE and FLUSH TABLE
Bug 25038 - Waiting TRUNCATE
Bug 25700 - merge base tables get corrupted by
            optimize/analyze/repair table
Bug 30275 - Merge tables: flush tables or unlock tables
            causes server to crash
Bug 19627 - temporary merge table locking
Bug 27660 - Falcon: merge table possible
Bug 30273 - merge tables: Can't lock file (errno: 155)

The problems were:

Bug 26379 - Combination of FLUSH TABLE and REPAIR TABLE
                corrupts a MERGE table

  1. A thread trying to lock a MERGE table performs busy waiting while
     REPAIR TABLE or a similar table administration task is ongoing on
     one or more of its MyISAM tables.
  
  2. A thread trying to lock a MERGE table performs busy waiting until all
     threads that did REPAIR TABLE or similar table administration tasks
     on one or more of its MyISAM tables in LOCK TABLES segments do UNLOCK
     TABLES. The difference against problem #1 is that the busy waiting
     takes place *after* the administration task. It is terminated by
     UNLOCK TABLES only.
  
  3. Two FLUSH TABLES within a LOCK TABLES segment can invalidate the
     lock. This does *not* require a MERGE table. The first FLUSH TABLES
     can be replaced by any statement that requires other threads to
     reopen the table. In 5.0 and 5.1 a single FLUSH TABLES can provoke
     the problem.

Bug 26867 - LOCK TABLES + REPAIR + merge table result in
            memory/cpu hogging

  Trying DML on a MERGE table, which has a child locked and
  repaired by another thread, made an infinite loop in the server.

Bug 26377 - Deadlock with MERGE and FLUSH TABLE

  Locking a MERGE table and its children in parent-child order
  and flushing the child deadlocked the server.

Bug 25038 - Waiting TRUNCATE

  Truncating a MERGE child, while the MERGE table was in use,
  let the truncate fail instead of waiting for the table to
  become free.

Bug 25700 - merge base tables get corrupted by
            optimize/analyze/repair table

  Repairing a child of an open MERGE table corrupted the child.
  It was necessary to FLUSH the child first.

Bug 30275 - Merge tables: flush tables or unlock tables
            causes server to crash

  Flushing and optimizing locked MERGE children crashed the server.

Bug 19627 - temporary merge table locking

  Use of a temporary MERGE table with non-temporary children
  could corrupt the children.

  Temporary tables are never locked. So we do now prohibit
  non-temporary chidlren of a temporary MERGE table.

Bug 27660 - Falcon: merge table possible

  It was possible to create a MERGE table with non-MyISAM children.

Bug 30273 - merge tables: Can't lock file (errno: 155)

  This was a Windows-only bug. Table administration statements
  sometimes failed with "Can't lock file (errno: 155)".

These bugs are fixed by a new implementation of MERGE table open.

When opening a MERGE table in open_tables() we do now add the
child tables to the list of tables to be opened by open_tables()
(the "query_list"). The children are not opened in the handler at
this stage.

After opening the parent, open_tables() opens each child from the
now extended query_list. When the last child is opened, we remove
the children from the query_list again and attach the children to
the parent. This behaves similar to the old open. However it does
not open the MyISAM tables directly, but grabs them from the already
open children.

When closing a MERGE table in close_thread_table() we detach the
children only. Closing of the children is done implicitly because
they are in thd->open_tables.

For more detail see the comment at the top of ha_myisammrg.cc.

Changed from open_ltable() to open_and_lock_tables() in all places
that can be relevant for MERGE tables. The latter can handle tables
added to the list on the fly. When open_ltable() was used in a loop
over a list of tables, the list must be temporarily terminated
after every table for open_and_lock_tables().
table_list->required_type is set to FRMTYPE_TABLE to avoid open of
special tables. Handling of derived tables is suppressed.
These details are handled by the new function
open_n_lock_single_table(), which has nearly the same signature as
open_ltable() and can replace it in most cases.

In reopen_tables() some of the tables open by a thread can be
closed and reopened. When a MERGE child is affected, the parent
must be closed and reopened too. Closing of the parent is forced
before the first child is closed. Reopen happens in the order of
thd->open_tables. MERGE parents do not attach their children
automatically at open. This is done after all tables are reopened.
So all children are open when attaching them.

Special lock handling like mysql_lock_abort() or mysql_lock_remove()
needs to be suppressed for MERGE children or forwarded to the parent.
This depends on the situation. In loops over all open tables one
suppresses child lock handling. When a single table is touched,
forwarding is done.

Behavioral changes:
===================

This patch changes the behavior of temporary MERGE tables.
Temporary MERGE must have temporary children.
The old behavior was wrong. A temporary table is not locked. Hence
even non-temporary children were not locked. See
Bug 19627 - temporary merge table locking.

You cannot change the union list of a non-temporary MERGE table
when LOCK TABLES is in effect. The following does *not* work:
CREATE TABLE m1 ... ENGINE=MRG_MYISAM ...;
LOCK TABLES t1 WRITE, t2 WRITE, m1 WRITE;
ALTER TABLE m1 ... UNION=(t1,t2) ...;
However, you can do this with a temporary MERGE table.

You cannot create a MERGE table with CREATE ... SELECT, neither
as a temporary MERGE table, nor as a non-temporary MERGE table.
CREATE TABLE m1 ... ENGINE=MRG_MYISAM ... SELECT ...;
Gives error message: table is not BASE TABLE.
2007-11-15 20:25:43 +01:00
gluh@mysql.com/eagle.(none)
3b38836e6d updated result file 2007-11-15 11:58:42 +04:00
gluh@mysql.com/eagle.(none)
f3600c9437 updated result file 2007-11-14 20:40:07 +04:00
gluh@eagle.(none)
58336411c9 Merge mysql.com:/home/gluh/MySQL/Merge/5.1
into  mysql.com:/home/gluh/MySQL/Merge/5.1-opt
2007-11-14 17:30:16 +04:00
mkindahl@dl145h.mysql.com
a8bbce6569 Merge dl145h.mysql.com:/data0/mkindahl/mysql-5.0
into  dl145h.mysql.com:/data0/mkindahl/mysql-5.0-rpl
2007-11-14 11:19:34 +01:00
mkindahl@dl145h.mysql.com
6b5cb11dba Merge dl145h.mysql.com:/data0/mkindahl/mysql-5.1
into  dl145h.mysql.com:/data0/mkindahl/mysql-5.1-new-rpl
2007-11-14 11:07:30 +01:00
aelkin/elkin@koti.dsl.inet.fi
66cb03195c Merge aelkin@bk-internal.mysql.com:/home/bk/mysql-5.1-rpl
into  koti.dsl.inet.fi:/home/elkin/MySQL/TEAM/FIXES/5.1/bug31170-rpl_innodb_bug28430_fails
2007-11-12 14:14:15 +02:00
tomas@whalegate.ndb.mysql.com
20e3804ea9 Merge whalegate.ndb.mysql.com:/home/tomas/cge-5.1
into  whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-new-ndb-merge
2007-11-12 10:50:58 +01:00
mleich@five.local.lan
ff8be43dfe Merge five.local.lan:/work/merge/mysql-5.1-build-32153
into  five.local.lan:/work/trees/mysql-5.1-build-src-clean
2007-11-09 22:11:52 +01:00
mleich@five.local.lan
66db290abd Fix for
Bug#32153 Status output differs - scheduling ?
Modifications:
1. Introduce additional poll routines + adjust queries 
   as fixes for Bug#32153 and another non reported bug
   found during stability testing
2. Replace builtin poll routines by wait_condition.inc.
3. Update the comments
2007-11-09 14:08:12 +01:00
msvensson@pilot.mysql.com
04ed1811e3 Bug#32217 rpl_ssl fails with different number of records on master and slave
- Add debug queries
2007-11-09 11:16:47 +01:00
mats@kindahl-laptop.dnsalias.net
240f3fa2b4 BUG#31552 (Replication breaks when deleting rows from out-of-sync table without PK):
Pushing test case for bug only. Bug already fixed as a result of the patch for BUG#19958.
2007-11-09 11:02:51 +01:00
mats@kindahl-laptop.dnsalias.net
9b728dde4b Fixing some tests to make the replication team tree green. 2007-11-09 09:13:47 +01:00
aelkin/elkin@koti.dsl.inet.fi
e8cd70868e Bug #31170 rpl_innodb_bug28430 fails: varying timing, ports, and log use
Non-deterministic parameters  of  SHOW SLAVE STATUS are masked out
by means of using the standard include-macro.

The masked-out parameters are not needed by the logics of the original
tests. What is need to demonstre that replication is not stopped remains.
2007-11-09 10:10:15 +02:00
mats@kindahl-laptop.dnsalias.net
7b833f9eef Merge kindahl-laptop.dnsalias.net:/home/bkroot/mysql-5.1-rpl
into  kindahl-laptop.dnsalias.net:/home/bk/b12092-mysql-5.1-rpl
2007-11-08 10:31:51 +01:00
mats@kindahl-laptop.dnsalias.net
ba2256e262 Fixing test case to not print warnings causing a result mismatch for rpl_trigger. 2007-11-08 09:25:03 +01:00
mats@kindahl-laptop.dnsalias.net
191c503a79 Merge kindahl-laptop.dnsalias.net:/home/bkroot/mysql-5.1-rpl
into  kindahl-laptop.dnsalias.net:/home/bk/b28086-mysql-5.1-rpl
2007-11-07 16:11:59 +01:00
mats@kindahl-laptop.dnsalias.net
cf56c586b7 Merge mkindahl@bk-internal.mysql.com:/home/bk/mysql-5.1-new-rpl
into  kindahl-laptop.dnsalias.net:/home/bkroot/mysql-5.1-rpl
2007-11-07 11:38:44 +01:00
jonas@perch.ndb.mysql.com
fd91c3d1ed Merge joreland@bk-internal.mysql.com:/home/bk/mysql-5.1-new-ndb
into  perch.ndb.mysql.com:/home/jonas/src/51-ndb
2007-11-07 11:23:39 +01:00
aelkin/elkin@koti.dsl.inet.fi
0dc13ecd38 Merge koti.dsl.inet.fi:/home/elkin/MySQL/TEAM/FIXES/5.0/bug27571_asyn_killed_flags
into  koti.dsl.inet.fi:/home/elkin/MySQL/merge-5.1
2007-11-06 20:41:06 +02:00
aelkin/elkin@koti.dsl.inet.fi
904db2cf96 bug#27571
tests fixing: refreshing the results file.
2007-11-06 20:09:45 +02:00
mats@kindahl-laptop.dnsalias.net
21497124ea BUG#12092 (FOUND_ROWS() not replicated):
In BUG#30244 added FOUND_ROWS() as an unsafe function, but that
works only in mixed mode under 5.1. There is a workaround that
can be used in statement-based mode either under 5.0 or 5.1
where the result of FOUND_ROWS() is stored into a user vari-
able and used that way instead. This will replicate correctly
even under statement-based replication, since it will write
a User_var entry to the binary log. For some other cases, the
value has to be passed explicitly.

This patch adds tests to demonstrate that the workarounds docu-
mented for statement-based replication works as advertised, and
does more extensive tests for cases that does not work under sta-
tement-based replication actually work under mixed mode by switch-
ing to row-based replication.
2007-11-06 17:51:32 +01:00
aelkin/elkin@koti.dsl.inet.fi
fe60ebdc25 bug#27571
non-deterministic tests refining.
This particular patch tested on two archs.
2007-11-06 13:08:37 +02:00
mskold/marty@mysql.com/quadfish.(none)
56ab11c8cb ndb_auto_increment.result:
Rename: mysql-test/r/ndb_auto_increment.result -> mysql-test/suite/ndb/r/ndb_auto_increment.result
ndb_auto_increment.test, ndb_auto_increment.result:
  Bug #31956       auto increment bugs in MySQL Cluster: Adapted test cases
ha_ndbcluster.cc:
  Bug #31956       auto increment bugs in MySQL Cluster: Merging from 5.0
ndb_auto_increment.test:
  Rename: mysql-test/t/ndb_auto_increment.test -> mysql-test/suite/ndb/t/ndb_auto_increment.test
2007-11-06 10:57:49 +01:00
aelkin/elkin@koti.dsl.inet.fi
d9045a7668 bug#27571
non-deterministic tests execution on some platforms.
2007-11-06 11:53:47 +02:00
mats@kindahl-laptop.dnsalias.net
4e55c9a140 Merge mkindahl@bk-internal.mysql.com:/home/bk/mysql-5.1-new-rpl
into  kindahl-laptop.dnsalias.net:/home/bkroot/mysql-5.1-rpl
2007-11-06 09:46:15 +01:00
mskold/marty@quadfish.(none)
310d592392 Merge mskold@bk-internal.mysql.com:/home/bk/mysql-5.1-new-ndb
into  mysql.com:/home/marty/MySQL/mysql-5.1-new-ndb
2007-11-05 22:41:20 +01:00
mskold/marty@quadfish.(none)
b5dc9abbf0 Merge mysql.com:/home/marty/MySQL/mysql-5.0-ndb
into  mysql.com:/home/marty/MySQL/mysql-5.1-new-ndb
2007-11-05 21:11:15 +01:00
aelkin/elkin@koti.dsl.inet.fi
3f7bf58884 bug#27571 asynchronous setting mysql_query::error and Query_log_e::error_code
refining tests as they appear to be non-deterministic.
2007-11-05 22:10:25 +02:00
malff@lambda.hsd1.co.comcast.net.
f0f63f8ff9 Merge lambda.hsd1.co.comcast.net.:/home/malff/TREE/mysql-5.1-base
into  lambda.hsd1.co.comcast.net.:/home/malff/TREE/mysql-5.1-rt-merge
2007-11-05 10:20:20 -07:00
serg@janus.mylan
c3e7f14b4f Merge bk-internal.mysql.com:/home/bk/mysql-5.1
into  janus.mylan:/usr/home/serg/Abk/mysql-5.1
2007-11-05 16:36:34 +01:00
tomas@whalegate.ndb.mysql.com
532ad32da5 workaround for case insensitive filesystems 2007-11-05 13:33:20 +01:00
aelkin/elkin@koti.dsl.inet.fi
b22f5077a4 Merge aelkin@bk-internal.mysql.com:/home/bk/mysql-5.1-rpl
into  koti.dsl.inet.fi:/home/elkin/MySQL/TEAM/FIXES/5.1/bug31554-rpl_truncate
2007-11-02 14:05:51 +02:00
aelkin/elkin@koti.dsl.inet.fi
4b9b015457 Bug #31554 rpl.rpl_truncate_2myisam test failure: wrong master binlog file name
Actually, the failure happened with 3innodb as well. Most probably
the reason is in failing to delete a binlog file on __NT__ so that
that master increments the index of the binlog file.
The test results hide valueable warning that windows could generate
about that.

The scope of this fix is to make sure we have such warning and
to lessen chances for binlog file being held at time of closing.
The dump thread is getting a good chance to leave and 
release the file for its successful deletion.

We shall watch over the two tests as regression is not excluded.
In that case we would have an extra info possibly explaining why
__NT__ env can not close/delete the file.
However, regardless of that reason, there is alwasy workaround to mask out
non-deterministic binlog index number.
2007-11-02 14:00:38 +02:00
msvensson@pilot.mysql.com
8f8fa8c0ec Merge bk-internal:/home/bk/mysql-5.1-rpl
into  pilot.mysql.com:/data/msvensson/mysql/mysql-5.1-rpl
2007-11-02 09:46:53 +01:00
tomas@whalegate.ndb.mysql.com
9952ee4f91 Bug #31484 Cluster LOST_EVENTS entry not added to binlog on mysqld restart
- correction
2007-11-01 20:00:44 +01:00
tomas@whalegate.ndb.mysql.com
a76f0e3d12 disable test 2007-11-01 17:24:21 +01:00
tomas@whalegate.ndb.mysql.com
9320ec8d16 Bug #31484 Cluster LOST_EVENTS entry not added to binlog on mysqld restart. 2007-11-01 15:08:00 +01:00
malff@lambda.hsd1.co.comcast.net.
83e6066e50 Merge lambda.hsd1.co.comcast.net.:/home/malff/TREE/mysql-5.1-base
into  lambda.hsd1.co.comcast.net.:/home/malff/TREE/mysql-5.1-rt-merge
2007-11-01 06:41:50 -06:00
serg@janus.mylan
c38cfd0bd6 Merge bk-internal.mysql.com:/home/bk/mysql-5.1
into  janus.mylan:/usr/home/serg/Abk/mysql-5.1
2007-11-01 12:30:45 +01:00
tomas@whalegate.ndb.mysql.com
91b070b082 disable tests 2007-11-01 12:02:41 +01:00
tomas@whalegate.ndb.mysql.com
5f592bfc7d Merge whalegate.ndb.mysql.com:/home/tomas/mysql-5.1
into  whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-new-ndb-merge
2007-11-01 11:33:04 +01:00
mats@kindahl-laptop.dnsalias.net
16c1655471 BUG#28086 (SBR of USER() becomes corrupted on slave):
Marking statements containing USER() or CURRENT_USER() as unsafe, causing
them to switch to using row-based logging in MIXED mode and generate a
warning in STATEMENT mode.
2007-10-31 21:09:52 +01:00
jmiller/jbmiller@ndbqa01.mysql.com
9f87735289 Merge jmiller@bk-internal.mysql.com:/home/bk/mysql-5.1-new-rpl
into  mysql.com:/usr/clones/rpl-push
2007-10-31 09:52:05 -05:00
mats@kindahl-laptop.dnsalias.net
f5106b3ff1 Merge mkindahl@bk-internal.mysql.com:/home/bk/mysql-5.1-new-rpl
into  kindahl-laptop.dnsalias.net:/home/bkroot/mysql-5.1-rpl
2007-10-31 10:58:04 +01:00
aelkin/elkin@koti.dsl.inet.fi
68a52c42f9 bug#27571 merging. Fixing offsets and moving tests to the corrent
destination. Removing wrong (local temp) tests.
2007-10-31 11:48:49 +02:00