------------------------------------------------------------
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.
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.
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
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).
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).
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.
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.
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.
------------------------------------------------------------
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.
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.
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.