Commit graph

67154 commits

Author SHA1 Message Date
Davi Arnaut
5f911fa874 Bug#49938: Failing assertion: inode or deadlock in fsp/fsp0fsp.c
Bug#54678: InnoDB, TRUNCATE, ALTER, I_S SELECT, crash or deadlock

- Incompatible change: truncate no longer resorts to a row by
row delete if the storage engine does not support the truncate
method. Consequently, the count of affected rows does not, in
any case, reflect the actual number of rows.

- Incompatible change: it is no longer possible to truncate a
table that participates as a parent in a foreign key constraint,
unless it is a self-referencing constraint (both parent and child
are in the same table). To work around this incompatible change
and still be able to truncate such tables, disable foreign checks
with SET foreign_key_checks=0 before truncate. Alternatively, if
foreign key checks are necessary, please use a DELETE statement
without a WHERE condition.

Problem description:

The problem was that for storage engines that do not support
truncate table via a external drop and recreate, such as InnoDB
which implements truncate via a internal drop and recreate, the
delete_all_rows method could be invoked with a shared metadata
lock, causing problems if the engine needed exclusive access
to some internal metadata. This problem originated with the
fact that there is no truncate specific handler method, which
ended up leading to a abuse of the delete_all_rows method that
is primarily used for delete operations without a condition.

Solution:

The solution is to introduce a truncate handler method that is
invoked when the engine does not support truncation via a table
drop and recreate. This method is invoked under a exclusive
metadata lock, so that there is only a single instance of the
table when the method is invoked.

Also, the method is not invoked and a error is thrown if
the table is a parent in a non-self-referencing foreign key
relationship. This was necessary to avoid inconsistency as
some integrity checks are bypassed. This is inline with the
fact that truncate is primarily a DDL operation that was
designed to quickly remove all data from a table.
2010-10-06 11:34:28 -03:00
Jon Olav Hauglid
38194bf7a5 Merge from mysql-5.5-bugteam to mysql-5.5-runtime. 2010-10-06 11:29:44 +02:00
Magne Mahre
623ed19462 Bug#56452 Assertion failed: thd->transaction.stmt.is_empty() ||
thd->in_sub_stmt
      
In a precursor patch for Bug#52044 
(revid:bzr/kostja@stripped), a
number of reorganizations of code was made. In addition some
assertions were added to ensure the correct transactional state.
      
The reorganization had a small glitch so statements that was
active in the query cache was not followed by a
statement commit/rollback (this code was removed). A section
in the trans_commit_stmt/trans_rollback_stmt code is to
clear the thd->transaction.stmt list of affected storage
engines.  When a new statement is initiated, an assert
introduced by the 523044 patch checks if this list is cleared.
When the query cache is accessed, this list may be populated,
and since it's not committed it will not be cleared.
      
This fix adds explicit statement commit or rollback for
statements that is contained in the query cache.
2010-10-06 11:01:24 +02:00
Jon Olav Hauglid
fd7dd37e2e Bug #57002 Assert in upgrade_shared_lock_to_exclusive()
for ALTER TABLE + MERGE tables

The patch for Bug#56292 changed how metadata locks are taken for MERGE
tables. After the patch, locking the MERGE table will also lock the
children tables with the same metadata lock type. This means that 
LOCK TABLES on a MERGE table also will implicitly do LOCK TABLES on
the children tables.

A consequence of this change, is that it is possible to do LOCK TABLES
on a child table both explicitly and implicitly with the same statement
and that these two locks can be of different strength. For example,
LOCK TABLES child READ, merge WRITE.

In LOCK TABLES mode, we are not allowed to take new locks and each
statement must therefore try to find an existing TABLE instance with
a suitable lock. The code that searched for a suitable TABLE instance,
only considered table level locks. If a child table was locked twice,
it was therefore possible for this code to find a TABLE instance with
suitable table level locks but without suitable metadata lock.

This problem caused the assert in upgrade_shared_lock_to_exclusive()
to be triggered as it tried to upgrade a MDL_SHARED lock to
EXCLUSIVE. The problem was a regression caused by the patch for
Bug#56292.

This patch fixes the problem by partially reverting the changes
done by Bug#56292. Now, the children tables will only use the
same metadata lock as the MERGE table for MDL_SHARED_NO_WRITE
when not in locked tables mode. This means that LOCK TABLE
on a MERGE table will not implicitly lock the children tables.
This still fixes the original problem in Bug#56292 without
causing a regression.

Test case added to merge.test.
2010-10-06 09:56:29 +02:00
Georgi Kodinov
052c9e392e merge 2010-10-05 17:27:18 +03:00
Georgi Kodinov
58995280cc merge 2010-10-05 17:24:01 +03:00
Georgi Kodinov
2a7ea14f5f WL#1054: fixed a compilation warning 2010-10-05 17:22:30 +03:00
Georgi Kodinov
43533495c4 Bug #56428: Replace copyright notice removed from SHA1 code (.h) 2010-10-05 17:05:37 +03:00
Georgi Kodinov
216deccd85 Bug #56427 : Replace copyright notice removed from SHA1 code 2010-10-05 17:03:04 +03:00
Georgi Kodinov
7d65d25e90 fixed failing test cases 2010-10-05 15:26:49 +03:00
Georgi Kodinov
aff0f5ca8e megre 5.1-bugteam->5.5-bugteam 2010-10-05 14:33:54 +03:00
Georgi Kodinov
4be6e11591 merged 2010-10-05 11:47:03 +03:00
Georgi Kodinov
d616a7a31f merged 5.0-bugteam into 5.1-bugteam 2010-10-05 11:24:45 +03:00
Georgi Kodinov
539291cde9 merged mysql-5.1 into mysql-5.1-bugteam 2010-10-05 11:11:56 +03:00
Georgi Kodinov
743d916a51 Disable NDB tests to run by default. 2010-10-05 11:03:14 +03:00
Georgi Kodinov
9f38cc0faf merge 2010-10-05 10:25:19 +03:00
Vladislav Vaintroub
73e139c4dd fix compile error - #if/#endif mismatch 2010-10-05 01:14:16 +02:00
Vladislav Vaintroub
7c4404b667 More fixes after WL1054 push:
- fix ~20 warnings about redefinition of HAVE_DLOPEN 
  This was caused by new ADD_DEFINITIONS(-DHAVE_DLOPEN) inside client library CMakeLists.txt

- fix dlerror() message which ("static build?" )  which is only confusing on Windows,
  there is no "static build"
2010-10-04 22:11:18 +02:00
Vladislav Vaintroub
c6de6320ba Fix compile error on Windows after WL#1054 push.
The error was introduced by typo in variable name (errormsg instead of correct
errmsg)

- Also, precache  HAVE_PEERCRED to OFF in cmake\os\WindowsCache.cmake
(to avoid useless system check).
- Also, add missing check for errors from FormatMessage().

- Also, remove annoying CMake debug printout of MALLOC_LIB if this is not set.
2010-10-04 21:25:53 +02:00
Georgi Kodinov
7f491aea4e merge 2010-10-04 18:26:34 +03:00
Joerg Bruehe
fdadaf0783 Merge 56267 into 5.5-bugteam. 2010-10-04 17:08:35 +02:00
Jon Olav Hauglid
72cc5173b2 Merge from mysql-5.5-bugteam to mysql-5.5-runtime. 2010-10-04 16:19:11 +02:00
Georgi Kodinov
051fbd2476 worklog 1054: Fixed test suite typos 2010-10-04 16:09:37 +03:00
Georgi Kodinov
fee2a518b4 Bug #56767: Make sure client plugins in 1054 are compatible with
connectors plugins
      
Implemented changes needed to keep the client plugin API compatible with 
the existing plugins :
      
1. Provided an options() client plugin API to let the application pass
options to the plugin after loading it
2. Added "License" (const char *) to specify the client plugin's license
3. Added "mysql_api" as a placeholder that the client library can use
to pass function pointers to the plugin so that the plugin can call the 
C lib back.
4. Updated the existing client plugins to comply with the API change.
5. Added more detailed error message generation for Windows.
2010-10-04 15:54:41 +03:00
Georgi Kodinov
dd2e3db48f merge 2010-10-04 15:42:16 +03:00
Davi Arnaut
774a5778d5 Bug#57210: remove pstack
Quoting from the bug report:

The pstack library has been included in MySQL since version
4.0.0. It's useless and should be removed.

Details: According to its own documentation, pstack only works
on Linux on x86 in 32 bit mode and requires LinuxThreads and a
statically linked binary. It doesn't really support any Linux
from 2003 or later and doesn't work on any other OS.
2010-10-04 08:52:59 -03:00
Vasil Dimov
9cc9916d29 Merge mysql-5.5-innodb -> mysql-5.5-bugteam 2010-10-04 14:58:52 +03:00
Vasil Dimov
00900d9569 Merge mysql-5.5-bugteam -> mysql-5.5-innodb 2010-10-04 14:53:20 +03:00
Vasil Dimov
babfc48c6e Merge mysql-5.1-innodb -> mysql-5.1-bugteam 2010-10-04 14:26:56 +03:00
Vasil Dimov
b69beea58c Merge mysql-5.5-innodb from bk-internal to my local tree 2010-10-04 13:46:41 +03:00
Vasil Dimov
c82feaf5ba Merge mysql-5.5-innodb from bk-internal to my local tree 2010-10-04 13:46:41 +03:00
Vasil Dimov
6bff53269b Merge mysql-5.5-bugteam -> mysql-5.5-innodb 2010-10-04 13:39:38 +03:00
Marko Mäkelä
fe2ff69061 Merge Bug#56716 from 5.1 2010-10-04 13:38:05 +03:00
Vladislav Vaintroub
36d92a9304 merge 2010-10-04 13:41:10 +02:00
Vladislav Vaintroub
07617b2ef4 merge2 2010-10-04 13:36:37 +02:00
Vasil Dimov
876c47137f Merge mysql-5.1-bugteam -> mysql-5.5-bugteam
(null merge of innodb-only changes)
2010-10-04 14:31:40 +03:00
Vladislav Vaintroub
4aea170bc6 A follow-up to the patch for bug #56405 "Deadlock in the MDL deadlock
detector". This patch addresses performance regression in OLTP_RO/MyISAM
test on Windows introduced by the fix for bug #56405. Thus it makes
original patch acceptable as a solution for bug #56585 "Slowdown of
readonly sysbench benchmarks (e.g point_select) on Windows 5.5".

With this patch, MySQL will use native Windows condition variables and 
reader-writer locks  if  they are supported by the OS.

This speeds up MyISAM and the effect comes mostly from using native
rwlocks. Native conditions improve scalability with higher number of 
concurrent users in other situations, e.g for prlocks.

Benchmark numbers for this patch as measured on Win2008R2 quad
core machine are attached to the bug report.
( direct link http://bugs.mysql.com/file.php?id=15883 )

Note that currently we require at least Windows7/WS2008R2 for 
reader-writer locks, even though native rwlock is available also on Vista.
Reason is that "trylock" APIs are missing on Vista, and trylock is used in
the server (in a single place in query cache).

While this patch could have been written differently, to enable the native
rwlock optimization also on Vista/WS2008 (e.g using native locks everywhere
but portable implementation in query cache), this would come at the 
expense of the code clarity, as it would introduce a new  "try-able" rwlock
type, to handle Vista case.

Another way to improve performance for the special case 
(OLTP_RO/MYISAM/Vista) would be to eliminate "trylock" usage from server,
 but this is outside of the scope here.


Native conditions variables are used beginning with Vista though the effect
of using condition variables alone is not measurable in this benchmark.
But when used together with native rwlocks on Win7, native conditions improve 
performance in high-concurrency OLTP_RO/MyISAM (128 and more sysbench 
users).
2010-10-04 13:03:11 +02:00
Marko Mäkelä
a71ca27dca Merge Bug#56716 from 5.1 2010-10-04 13:38:05 +03:00
Bjorn Munch
0110ae7fbf null upmerge 2010-10-04 12:08:36 +02:00
Marko Mäkelä
fe0b669416 Bug#56716 InnoDB locks a record gap without locking the table
row_search_for_mysql(): Acquire an intention lock on the table
before locking the first record gap.
2010-10-04 13:06:41 +03:00
Marko Mäkelä
484e61a778 Bug#56716 InnoDB locks a record gap without locking the table
row_search_for_mysql(): Acquire an intention lock on the table
before locking the first record gap.
2010-10-04 13:05:21 +03:00
Bjorn Munch
299f0f201c Follow-up to 54861, cannot assume pthread_t is integral type 2010-10-04 12:01:16 +02:00
Vasil Dimov
6d46ba951f Merge mysql-5.1-bugteam -> mysql-5.1-innodb 2010-10-04 12:49:58 +03:00
Bjorn Munch
e688b6c299 merge from 5.5-mtr 2010-10-04 10:40:28 +02:00
Jon Olav Hauglid
c4a18b6af3 Bug #51099 Assertion in mysql_multi_delete_prepare()
This assert was triggered if DELETE was done on a view that
referenced another view which in turn (directly or indirectly)
referenced more than one table.

Delete from a view referencing more than one table (a join view)
is not supported and is supposed to give ER_VIEW_DELETE_MERGE_VIEW
error. Before this error was reported from the multi table 
delete code, an assert verified that the view from the DELETE statement
had more than one underlying table. However, this assert did not take
into account that the view could refer to another view which in turn
referenced the actual tables.

This patch fixes the problem by adjusting the assert to take this
possibility into account. This problem was only noticeable on debug
builds of the server. On release builds, ER_VIEW_DELETE_MERGE_VIEW
was correctly reported.

Test case added to delete.test.
2010-10-04 10:25:04 +02:00
Bjorn Munch
d1fb8a8606 Small test fix after 56753 2010-10-03 19:39:28 +02:00
Bjorn Munch
687696a97a merge from 5.1-mtr 2010-10-03 19:37:58 +02:00
Joerg Bruehe
7cb89424f9 Fix bug#56267:
tcmalloc lib (libtcmalloc_minimal.so) is missing from mysql 5.5 binary

Ensure that a "-DMALLOC_LIB=/foo/bar/libtcmalloc_minimal.so"
will ensure that this library gets included in the tar.gz
binary package.

It depends on the build environment to set this variable
to the correct path name, if it is available.
2010-10-03 18:24:45 +02:00
Alexander Nozdrin
f5ecd2af91 Auto-merge from mysql-5.5. 2010-10-02 22:17:21 +04:00
Alexander Nozdrin
f703a7779f Auto-merge from mysql-5.5-stage (used to be mysql-5.5-bugfixing). 2010-10-02 22:08:31 +04:00