Commit graph

244 commits

Author SHA1 Message Date
ramil/ram@ramil.myoffice.izhnet.ru
ec0ce5ea03 Merge mysql.com:/home/ram/work/b32726/b32726.5.0
into  mysql.com:/home/ram/work/b32726/b32726.5.1
2007-11-29 14:35:15 +04:00
istruewing@stella.local
da28f9eac4 Merge stella.local:/home2/mydev/mysql-5.1-amain
into  stella.local:/home2/mydev/mysql-5.1-axmrg
2007-11-27 19:29:10 +01:00
istruewing@stella.local
010d82753d Moved disabling of tests to the respective suites. 2007-11-26 17:31:53 +01:00
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
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
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
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
aelkin/elkin@koti.dsl.inet.fi
d9045a7668 bug#27571
non-deterministic tests execution on some platforms.
2007-11-06 11:53:47 +02: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
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
aelkin/elkin@koti.dsl.inet.fi
e65d20b5f4 Merge koti.dsl.inet.fi:/home/elkin/MySQL/TEAM/FIXES/5.0/bug27571_asyn_killed_flags
into  koti.dsl.inet.fi:/home/elkin/MySQL/5.1-merge-bug27571
2007-10-30 11:31:03 +02:00
aelkin/elkin@koti.dsl.inet.fi
8f7550ecad manual merge for bug_29136, bug#29309. 2007-10-13 23:12:50 +03:00
lars/lthalmann@dl145h.mysql.com
0ad6384f9e Merge lthalmann@bk-internal.mysql.com:/home/bk/mysql-5.1-new-rpl
into  mysql.com:/nfsdisk1/lars/bkroot/mysql-5.1-new-rpl
2007-09-17 14:14:02 +02:00
lars/lthalmann@dl145h.mysql.com
234e55623b Merge mysql.com:/nfsdisk1/lars/bkroot/mysql-5.1-new-rpl
into  mysql.com:/nfsdisk1/lars/MERGE/mysql-5.1-merge
2007-09-17 12:38:22 +02:00
aelkin@dl145j.mysql.com
0c153419ce Merge: bug@27417,23333 and bug#28960 tests with 5.1 2007-09-17 12:31:10 +02:00
aelkin@dl145j.mysql.com
11c9a13a24 Merge: bug#27417,23333 manual work for fixing tests and a source code. 2007-09-16 18:16:40 +02:00
aelkin@dl145j.mysql.com
e9b287f27e Manual merge fixes/tests for bugs_28960,27417,23333. 2007-09-16 12:07:00 +02:00
tsmith@ramayana.hindu.god
fa9bacb25c Updates to allow innodb.test to be run with --embedded-server,
including a small change to build_table_filename().
2007-08-14 15:35:19 -06:00
cbell/Chuck@mysql_cab_desk.
dc2cab6561 Merge mysql_cab_desk.:C:/source/c++/mysql-5.1
into  mysql_cab_desk.:C:/source/c++/mysql-5.1-new-rpl-merge
2007-08-02 15:27:47 -04:00
gkodinov/kgeorge@magare.gmz
d4329ea783 Addendum to bug 27417: poor test results fixes. 2007-07-31 18:04:05 +03:00
gkodinov/kgeorge@magare.gmz
992698ce5f merge of the fix for bug 17417 5.0-opt->5.1-opt 2007-07-31 14:58:04 +03:00
gkodinov/kgeorge@magare.gmz
cfbfb8bae8 (Pushing for Andrei)
Merge magare.gmz:/home/kgeorge/mysql/work/B27417-5.0-opt
into  magare.gmz:/home/kgeorge/mysql/work/B27417-5.1-opt
2007-07-30 19:02:21 +03:00
mats@kindahl-laptop.dnsalias.net
23857a5804 WL#3228 (RBR using different table defs on slave/master):
Fixing tests and results to work when replicating to fewer columns on
slave than on master. One test that previously should fail, now works,
and some log positions have changed as a result of adding metadata to
the events.
2007-07-30 13:32:15 +02:00
cbell/Chuck@mysql_cab_desk.
537c23e833 WL#3228 (NDB) : RBR using different table defs on slave/master
This patch adds the ability to store extra field metadata in the table
map event. This data can include pack_length() or field_lenght() for
fields such as CHAR or VARCHAR enabling developers to add code that
can check for compatibilty between master and slave columns. More 
importantly, the extra field metadata can be used to store data from the
master correctly should a VARCHAR field on the master be <= 255 bytes 
while the same field on the slave is > 255 bytes. 

The patch also includes the needed changes to unpack to ensure that data
which is smaller on the master can be unpacked correctly on the slave.

WL#3915 : (NDB) master's cols > slave

Slave starts accepting and handling rows of master's tables which have more columns.
The most important part of implementation is how to caclulate the amount of bytes to
skip for unknown by slave column.
2007-07-29 18:10:42 -04:00
svoj@april.(none)
5c83b14b48 Merge mysql.com:/home/svoj/devel/bk/mysql-5.1-engines
into  mysql.com:/home/svoj/devel/mysql/BUG29806/mysql-5.1-engines
2007-07-25 19:58:18 +05:00
svoj@mysql.com/april.(none)
3b18aae71c BUG#29806 - binlog_innodb.test creates a server log
Stopping mysql server could result in an entry in mysql error
file: "InnoDB: Error: MySQL is freeing a thd".

This happened because InnoDB assumes that the server will never
call external_lock(F_UNLCK) in case external_lock(READ/WRITE)
failed.

Prior to this patch we haven't had strict definition whether
external_lock(F_UNLCK) must be called in case external_lock(READ/WRITE)
fails.

This patch states that we never call external_lock(F_UNLCK) in case
external_lock(READ/WRITE) fails.
2007-07-25 19:56:17 +05:00
mkindahl@dl145h.mysql.com
bb8831ce1d Merge dl145h.mysql.com:/data0/mkindahl/mysql-5.1-main
into  dl145h.mysql.com:/data0/mkindahl/mysql-5.1-2team
2007-07-25 15:40:43 +02:00
gshchepa/uchum@gleb.loc
95d43074cc Merge gleb.loc:/home/uchum/work/bk/5.1
into  gleb.loc:/home/uchum/work/bk/5.1-opt
2007-07-20 04:21:46 +05:00
gshchepa/uchum@gleb.loc
35a2a20160 Merge gleb.loc:/home/uchum/work/bk/5.1
into  gleb.loc:/home/uchum/work/bk/5.1-opt
2007-07-19 20:01:13 +05:00
tsmith@ramayana.hindu.god
23695e4e1e Merge ramayana.hindu.god:/home/tsmith/m/bk/51
into  ramayana.hindu.god:/home/tsmith/m/bk/maint/51
2007-07-17 11:33:26 -06:00
istruewing@chilla.local
ba177535f5 Post-merge fixes
Disabled test cases that produce errors in a "server log".
2007-07-17 09:25:01 +02:00
igor@olga.mysql.com
bec9500ec0 Merge olga.mysql.com:/home/igor/mysql-5.1-rpl
into  olga.mysql.com:/home/igor/dev-opt/mysql-5.1-opt-merge
2007-07-13 23:54:41 -07:00
tnurnberg@mysql.com/sin.intern.azundris.com
3a9e84826e Bug#22540: Incorrect value in column End_log_pos of SHOW BINLOG EVENTS using InnoDB
Streamlining test for RBR
2007-07-11 04:33:19 +02:00
tnurnberg@sin.intern.azundris.com
f1b5fa93ac Merge tnurnberg@bk-internal.mysql.com:/home/bk/mysql-5.1-maint
into  mysql.com:/home/tnurnberg/22540/51-22540
2007-07-10 18:38:14 +02:00
tnurnberg@mysql.com/sin.intern.azundris.com
bef7899334 Bug#22540: Incorrect value in column End_log_pos of SHOW BINLOG EVENTS using InnoDB
streamlining the test
2007-07-10 18:31:50 +02:00
tnurnberg@sin.intern.azundris.com
9310ad5f48 Merge mysql.com:/home/tnurnberg/22540/50-22540
into  mysql.com:/home/tnurnberg/22540/51-22540
2007-07-10 18:21:06 +02:00
tsmith@maint1.mysql.com
54253a0763 Merge maint1.mysql.com:/data/localhome/tsmith/bk/51
into  maint1.mysql.com:/data/localhome/tsmith/bk/maint/51
2007-07-04 22:38:53 +02:00
tnurnberg@sin.intern.azundris.com
a403815e3d Bug#22540: Incorrect value in column End_log_pos of SHOW BINLOG EVENTS using InnoDB
minor fixes to appease pushbuild.
---
Merge sin.intern.azundris.com:/home/tnurnberg/22540/50-22540
into  sin.intern.azundris.com:/home/tnurnberg/22540/51-22540
2007-07-02 07:34:42 +02:00
tnurnberg@sin.intern.azundris.com
95b8b0285d Merge tnurnberg@bk-internal.mysql.com:/home/bk/mysql-5.1-maint
into  sin.intern.azundris.com:/home/tnurnberg/22540/51-22540
2007-06-30 03:43:21 +02:00
msvensson@pilot.(none)
68c7cc2af4 Bug#22540 Incorrect value in column End_log_pos of SHOW BINLOG EVENTS using InnoDB
- Update test results for --binlog-format=row
2007-06-29 09:28:51 +02:00
msvensson@pilot.(none)
e86225b908 Move disabling of rpl_invoked_features to suite/rpl/t/disabled.def
Move tests to their respective suite
2007-06-27 16:49:32 +02:00
msvensson@pilot.(none)
2238ef2b62 Merge pilot.(none):/data/msvensson/mysql/wl3933/my51-wl3933-new2
into  pilot.(none):/data/msvensson/mysql/mysql-5.1-new-maint
2007-06-27 14:29:10 +02:00
msvensson@pilot.(none)
8661497e9b WL#3933 Split main test suite to rpl, rpl_ndb and ndb
- Update mysql-test-run.pl to collect tests from several suites
 - Group test into suites
 - Add suite.opt file
2007-06-27 14:28:02 +02:00