Commit graph

65698 commits

Author SHA1 Message Date
Jon Olav Hauglid
a1c6a39a13 Backport from mysql-6.0-codebase of:
------------------------------------------------------------
revno: 3672
committer: lars-erik.bjork@sun.com
branch nick: 48067-mysql-6.0-codebase-bugfixing
timestamp: Mon 2009-10-26 13:51:43 +0100
message:
  This is a patch for bug#48067
  "A temp table with the same name as an existing table, makes drop
  database fail"
        
  When dropping the database, mysql_rm_known_files() reads the contents
  of the database directory, and creates a TABLE_LIST object, for each
  .frm file encountered. Temporary tables, however, are not associated 
  with any .frm file.
        
  The list of tables to drop are passed to mysql_rm_table_part2().
  This method prefers temporary tables over regular tables, so if
  there is a temporary table with the same name as a regular, the
  temporary is removed, leaving the regular table intact.
  Regular tables are only deleted if there are no temporary tables
  with the same name.
        
  This fix ensures, that for all TABLE_LIST objects that are created
  by mysql_rm_known_files(), 'open_type' is set to 'OT_BASE_ONLY', to
  indicate that this is a regular table. In all cases in
  mysql_rm_table_part2() where we prefer a temporary table to a
  non-temporary table, we chek if 'open_type' equals 'OT_BASE_ONLY'.


mysql-test/r/temp_table.result:
  The expected result of the test.
mysql-test/t/temp_table.test:
  Test based on the bug report.
sql/sql_db.cc:
  For all TABLE_LIST objects that are created by mysql_rm_known_files(),
  'open_type' is set to 'OT_BASE_ONLY', to indicate that these are
  regular tables.
sql/sql_table.cc:
  Check if 'open_type' is set to 'OT_BASE_ONLY, every place a temporary table is
  preferred to a non-temporary table.
2010-06-23 13:34:40 +02:00
Konstantin Osipov
429454f76e A new implementation for the TABLE_SHARE cache in MDL
subsystem. Fix a number of caveates that the previous
implementation suffered from, including unprotected
access to shared data and lax resource accounting
(share->ref_count) that could lead to deadlocks.

The new implementation still suffers from a number
of potential deadlocks in some edge cases, and this is 
still not enabled by default. Especially since performance
testing has shown that it gives only marginable (not even 
exceeding measuring accuracy) improvements.

@todo: 
- Remove calls to close_cached_tables() with REFRESH_FAST,
and have_lock, because they break the MDL cache. 
- rework FLUSH TABLES <list> to not use close_cached_tables()
- make sure that whenever we set TABLE_SHARE::version to
0 we free MDL cache references to it.


sql/mdl.cc:
  We may cache references to TABLE_SHARE objects in 
  MDL_lock objects for tables. Create a separate
  MDL_lock class to represent a table.
sql/mdl.h:
  Adjust the MDL caching API to avoid races.
sql/sql_base.cc:
  Move all caching functionality close together.
  Implement a solution for deadlocks caused by 
  close_cached_tables() when MDL cache is enabled (incomplete).
sql/sql_yacc.yy:
  Adjust FLUSH rule to do the necessary initialization of
  TABLE_LIST elements used in for FLUSH TABLES <list>, and thus
  work OK with flush_mdl_cache() function.
2010-06-18 20:14:10 +04:00
Konstantin Osipov
dc00b5dbb2 Merge. 2010-06-17 17:55:00 +04:00
Konstantin Osipov
cc6dabba37 Merge trunk-bugfixing -> trunk-runtime 2010-06-17 17:31:51 +04:00
Joerg Bruehe
45c7bf3c54 Upmerge an empty merge changeset (27072 in the bug DB) from 5.1-bugteam
to trunk-bugfixing, no contents changes (already done separate).
2010-06-17 13:15:00 +02:00
Joerg Bruehe
fdb794bf88 Automerge the fix for bug#27072 into trunk-bugfixing. 2010-06-17 13:11:34 +02:00
Joerg Bruehe
ae47e257e3 Automerge the fix for bug#27072 into 5.1-bugteam 2010-06-17 13:07:33 +02:00
Vasil Dimov
2a207ff19e Merge mysql-trunk-innodb -> mysql-trunk-bugfixing 2010-06-17 13:17:49 +03:00
Vasil Dimov
e4b19dd475 Adjust innodb_mysql.result after the resolved conflict from the merge 2010-06-17 12:59:53 +03:00
Vasil Dimov
b31987c141 Merge mysql-trunk-bugfixing -> mysql-trunk-innodb 2010-06-17 12:41:20 +03:00
Vasil Dimov
028bb395b7 Decrement version number from 1.1.2 to 1.1.1, this latest tree
is going to be 1.1.1.
2010-06-17 12:35:23 +03:00
Jimmy Yang
0cbc668fc2 This change splits innodb_file_format_check into innodb_file_format_check
and innodb_file_format_max two system variables. And this also fixes
bug #53654 after 2nd shutdown innodb_file_format_check attains strange
values.

rb://366 approved by Marko
2010-06-17 02:13:53 -07:00
Sunny Bains
70cef4f851 Merge from parent. 2010-06-17 17:48:14 +10:00
Alexander Nozdrin
af632d82d9 Auto-merge from mysql-trunk. 2010-06-17 10:13:11 +04:00
Sunny Bains
8ccbb4211b Revert a change that should have been a part of 3008.2.76..3008.2.78. 2010-06-17 11:06:13 +10:00
Dmitry Lenev
981f3f5b11 Small clean-up and pre-requisite for making
TABLE_SHARE a class.

Remove unused members in TABLE_SHARE.
2010-06-16 13:04:30 +04:00
Konstantin Osipov
91a7b14705 Merge trunk-bugfixing -> trunk-runtime 2010-06-16 12:50:36 +04:00
Joerg Bruehe
766f6a76ca Fix bug#27072: RPM autostarts the server
This is the fix for 5.5, where the behaviour on both installation
and upgrade is changed:
On installation, we do not start the server, to allow automated
installs (which happen in some indeterminate machine status).
If the server was stopped when the upgrade begins, we assume the
administrator is taking manual action, so we do not start the (new)
server at the end of the upgrade.
We still install the start/stop script, so it will be started on reboot.


support-files/mysql.spec.sh:
  In the "pre" section of the spec file, check the server status, and write
  the result to a file.
  In the "post" section, evaluate the status file, and start the server if
  it was running during status analysis.
  In 5.5, we do *not* start the server if there is no status file (which will happen on first installation, when there is no data directory yet).
2010-06-15 22:46:29 +02:00
Joerg Bruehe
b3eac87c3c Fix bug#27072: RPM autostarts the server
This is the fix for 5.1, where only the behaviour on upgrade is changed:
If the server was stopped when the upgrade begins, we assume the
administrator is taking manual action, so we do not start the (new)
server at the end of the upgrade.
We still install the start/stop script, so it will be started on reboot.


support-files/mysql.spec.sh:
  In the "pre" section of the spec file, check the server status, and write
  the result to a file.
  In the "post" section, evaluate the status file, and start the server if
  it was running during status analysis.
  In 5.1, we start the server if there is no status file (which will happen
  on first installation, when there is no data directory yet).
2010-06-15 22:27:48 +02:00
Alexey Kopytov
c388c044e0 Bug#52208: gis fails on some platforms (Solaris, HP-UX, Linux)
On [Open]Solaris/x86 the FPU was not switched to 64-bit double
precision mode when the server binary was built with Sun
Studio. That caused GIS test failures due to differences in
expected and actual results.
2010-06-15 18:52:47 +04:00
Vasil Dimov
5a0b9cd296 Increment InnoDB version number from 1.1.1 to 1.1.2,
the 1.1.1 release will be included inside MySQL 5.5.5 and is
up to (inclusive):
vasil.dimov@oracle.com-20100602124314-21l3cb27w4rbfqrq
2010-06-15 17:51:57 +03:00
Alexey Kopytov
d2e58e4e49 Backport of the patch for bug52208 to 5.1 since the
root cause of 52208 resulted in another test failure
in 5.1.
2010-06-15 18:29:53 +04:00
Konstantin Osipov
65428955cd Fix a build break with cmake: remove the custom defines
that prevented hp_test2 to link in non-debug builds.

storage/heap/hp_test2.c:
  Don't try to define DBUG if we're building without
  DBUG -- that won't work,since dbug libary will be empty
  in non-debug builds and cmake.
2010-06-15 15:15:42 +04:00
Bjorn Munch
3fc123c88e null upmerge 53424 2010-06-15 11:08:41 +02:00
Bjorn Munch
6537d79e45 null upmerge 53424, irrelevant for 5.1 2010-06-15 11:03:52 +02:00
Bjorn Munch
8d253fe2f8 Bug #53424 Certain combination of flags give internal error
Reorder code breaks when finding tests skipped due to --skip-rpl etc.
Add simple test that master_opt is non-empty
2010-06-15 11:00:02 +02:00
Alexander Nozdrin
3434059ae0 Make perfschema.pfs_upgrade and sys_vars.wait_timeout_func experimental. 2010-06-15 12:58:52 +04:00
Alexander Nozdrin
f741dea230 Auto-merge (empty) from mysql-trunk. 2010-06-15 12:31:01 +04:00
Alexander Nozdrin
839387aa86 Auto-merge from mysql-trunk. 2010-06-15 12:25:44 +04:00
Alexander Nozdrin
b4d129cc04 Auto-merge from mysql-trunk-bugfixing. 2010-06-15 12:04:59 +04:00
Vasil Dimov
c9a66cdf43 Merge mysql-trunk-bugfixing -> mysql-trunk-innodb 2010-06-14 14:46:36 +03:00
Bjorn Munch
ff435f882e Upmerge and port 46882 2010-06-14 11:33:10 +02:00
Bjorn Munch
ec1d665c64 Upmerge and port 46882 2010-06-14 11:31:22 +02:00
Bjorn Munch
b18902fd59 Bug #46882 Suite timeout doesn't kill stray processes
Kill mysqltest and call mtr_kill_leftovers() before terminating
2010-06-14 11:26:42 +02:00
Tor Didriksen
f88e6af0bb Bug #53261 MTR tests archive_plugin and blackhole_plugin fail when compiling with cmake
Let mtr lookup the plugins, rather than hard-coding autotools lib path.


mysql-test/include/not_parallel.inc:
  Add new feature for skipping when running in parallel.
mysql-test/mysql-test-run.pl:
  Use find_plugin to locate plugins.
  Export opt_parallel in environment.
mysql-test/suite/federated/federated_plugin-master.opt:
  Use plugin dir from mtr.
mysql-test/suite/federated/federated_plugin.test:
  Skip test, disabled.
mysql-test/t/archive_plugin-master.opt:
  Use plugin dir from mtr.
mysql-test/t/archive_plugin.test:
  Skip test if running in parallel.
mysql-test/t/blackhole_plugin-master.opt:
  Use plugin dir from mtr.
mysql-test/t/blackhole_plugin.test:
  Skip test if running in parallel.
2010-06-14 11:23:49 +02:00
Marko Mäkelä
ac3c92e435 Merge a change from mysql-5.1-innodb:
------------------------------------------------------------
revno: 3507
revision-id: marko.makela@oracle.com-20100610125623-ar6qf4w2pv2kr7mb
parent: sergey.glukhov@sun.com-20100609121718-04mpk5kjxvnrxdu8
committer: Marko Mäkelä <marko.makela@oracle.com>
branch nick: 5.1-innodb
timestamp: Thu 2010-06-10 15:56:23 +0300
message:
  Bug #38999: Re-enable innodb_multi_update.test
2010-06-14 09:50:30 +03:00
Marko Mäkelä
28ec745704 Merge a change from mysql-5.1-innodb:
------------------------------------------------------------
revno: 3506
revision-id: sergey.glukhov@sun.com-20100609121718-04mpk5kjxvnrxdu8
parent: sergey.glukhov@sun.com-20100609120734-ndy2281wau9067zv
committer: Sergey Glukhov <Sergey.Glukhov@sun.com>
branch nick: mysql-5.1-innodb
timestamp: Wed 2010-06-09 16:17:18 +0400
message:
  Bug#38999 valgrind warnings for update statement in function compare_record()
  (InnoDB plugin branch)

 @ mysql-test/suite/innodb_plugin/r/innodb_mysql.result
    test case

 @ mysql-test/suite/innodb_plugin/t/innodb_mysql.test
    test case

 @ storage/innodb_plugin/row/row0sel.c
    init null bytes with default values as they might be
    left uninitialized in some cases and these uninited bytes
    might be copied into mysql record buffer that leads to
    valgrind warnings on next use of the buffer.
2010-06-14 09:35:01 +03:00
Alexey Kopytov
48582afb84 Manual merge from mysql-5.1-bugteam.
conflicts:
   conflict      sql/sql_prepare.cc
2010-06-12 09:56:28 +04:00
Alexey Kopytov
41c3732a75 Addendum for the fix for bug #42064:
In Prepared_statement::prepare() bail out as soon as
parser_state.init() fails, trying to continue leads to crashes.
2010-06-12 09:52:31 +04:00
Konstantin Osipov
5d4082e22d Fix the cmake rule that builds heap tests, added
to cmake build with the patch for WL#5419.
Add missing libraries.
2010-06-12 00:50:41 +04:00
Alexey Kopytov
2f4f9b7164 Automerge. 2010-06-12 00:40:02 +04:00
Alexey Kopytov
2845586723 Fixed ha_ndbcluster_binlog.cc to use Parser_state::init(). 2010-06-12 00:35:28 +04:00
Alexey Kopytov
2400e54a12 Automerge. 2010-06-11 23:44:01 +04:00
Ramil Kalimullin
3844367f2b Automerge. 2010-06-11 19:36:57 +04:00
Konstantin Osipov
33c57e2f9e WL#5419 "LOCK_open scalability: make tdc_refresh_version
an atomic counter"

Split the large LOCK_open section in open_table(). 
Do not call open_table_from_share() under LOCK_open.
Remove thd->version.

This fixes
Bug#50589 "Server hang on a query evaluated using a temporary 
table"
Bug#51557 "LOCK_open and kernel_mutex are not happy together"
Bug#49463 "LOCK_table and innodb are not nice when handler 
instances are created".

This patch has effect on storage engines that rely on
ha_open() PSEA method being called under LOCK_open.
In particular:

1) NDB is broken and left unfixed. NDB relies on LOCK_open
being kept as part of ha_open(), since it uses auto-discovery.
While previously the NDB open code was race-prone, now
it simply fails on asserts.

2) HEAP engine had a race in ha_heap::open() when
a share for the same table could be added twice
to the list of shares, or a dangling reference to a share
stored in HEAP handler. This patch aims to address this
problem by 'pinning' the newly created share in the 
internal HEAP engine share list until at least one
handler instance is created using that share.


include/heap.h:
  Add members to HP_CREATE_INFO.
  Declare heap_release_share().
sql/lock.cc:
  Remove thd->version, use thd->open_tables->s->version instead.
sql/repl_failsafe.cc:
  Remove thd->version.
sql/sql_base.cc:
  - close_thread_table(): move handler cleanup code outside the critical section protected by LOCK_open.
  - remove thd->version
  - split the large critical section in open_table() that
  opens a new table from share and is protected by LOCK_open
  into 2 critical sections, thus reducing the critical path.
  - make check_if_table_exists() acquire LOCK_open internally.
  - use thd->open_tables->s->version instead of thd->refresh_version to make sure that all tables in
  thd->open_tables are in the same refresh series.
sql/sql_base.h:
  Add declaration for check_if_table_exists().
sql/sql_class.cc:
  Remove init_open_tables_state(), it's now equal to
  reset_open_tables_state().
sql/sql_class.h:
  Remove thd->version, THD::init_open_tables_state().
sql/sql_plugin.cc:
  Use table->m_needs_reopen to mark the table as stale
  rather than manipulate with thd->version, which is no more.
sql/sql_udf.cc:
  Use table->m_needs_reopen to mark the table as stale
  rather than manipulate with thd->version, which is no more.
sql/table.h:
  Remove an unused variable.
sql/tztime.cc:
  Use table->m_needs_reopen to mark the table as stale
  rather than manipulate with thd->version, which is no more.
storage/heap/CMakeLists.txt:
  Add heap tests to cmake build files.
storage/heap/ha_heap.cc:
  Fix a race when ha_heap::ha_open() could insert two 
  HP_SHARE objects into the internal share list or store
  a dangling reference to a share in ha_heap instance,
  or wrongly set implicit_emptied.
storage/heap/hp_create.c:
  Optionally pin a newly created share in the list of shares
  by increasing its open_count. This is necessary to 
  make sure that a newly created share doesn't disappear while
  a HP_INFO object is being created to reference it.
storage/heap/hp_open.c:
  When adding a new HP_INFO object to the list of objects
  in the heap share, make sure the open_count is not increased
  twice.
storage/heap/hp_test1.c:
  Adjust the test to new function signatures.
storage/heap/hp_test2.c:
  Adjust the test to new function signatures.
2010-06-11 19:28:18 +04:00
Ramil Kalimullin
9be5696aa1 Automerge. 2010-06-11 18:43:36 +04:00
Alexey Kopytov
69f887b46f Null merge. 2010-06-11 17:54:39 +04:00
Alexey Kopytov
f84b3f5c21 Manual merge from mysql-5.1-bugteam to mysql-trunk-merge.
conflicts:
   conflict      mysys/safemalloc.c
   conflict      sql/mysqld.cc
   conflict      sql/sp.cc
   conflict      sql/sql_lex.cc
   conflict      sql/sql_lex.h
   conflict      sql/sql_parse.cc
   conflict      sql/sql_prepare.cc
2010-06-11 17:48:24 +04:00
Dmitry Lenev
a6cfec17e5 Fix for bug #46785 "main.truncate_coverage fails
sporadically".

Races in truncate_coverage.test have caused its sporadical 
failures.

In the test case we have tried to kill truncate statement 
being executed in the first connection which was waiting 
for X metadata lock on table being locked by the second
connection. Since we have released metadata lock held by 
the second connection right after issuing KILL statement 
sometimes TRUNCATE TABLE managed to acquire X lock before 
it has noticed that it was killed. In this case TRUNCATE
TABLE was successfully executed till its end and this fact
has caused test failure since this statement didn't return 
expected error in such case.

This patch addresses the problem by not releasing metadata
locks in the second connections prematurely.
2010-06-11 17:32:12 +04:00
Alexey Kopytov
386929d3ae Manual merge from the bugfix tree.
conflicts:
   conflict      sql/sql_parse.cc
2010-06-11 16:52:06 +04:00