Bug #23667 "CREATE TABLE LIKE is not isolated from alteration
by other connections"
Bug #18950 "CREATE TABLE LIKE does not obtain LOCK_open"
As well as:
Bug #25578 "CREATE TABLE LIKE does not require any privileges
on source table".
The first and the second bugs resulted in various errors and wrong
binary log order when one tried to execute concurrently CREATE TABLE LIKE
statement and DDL statements on source table or DML/DDL statements on its
target table.
The problem was caused by incomplete protection/table-locking against
concurrent statements implemented in mysql_create_like_table() routine.
We solve it by simply implementing such protection in proper way.
Most of actual work for 5.1 was already done by fix for bug 20662 and
preliminary patch changing locking in ALTER TABLE.
The third bug allowed user who didn't have any privileges on table create
its copy and therefore circumvent privilege check for SHOW CREATE TABLE.
This patch solves this problem by adding privilege check, which was missing.
Finally it also removes some duplicated code from mysql_create_like_table()
and thus fixes bug #26869 "TABLE_LIST::table_name_length inconsistent with
TABLE_LIST::table_name".
mysql-test/r/create-big.result:
Added test coverage for concurrency-related issues with CREATE TABLE LIKE.
mysql-test/r/create.result:
Adjusted error-code in the test case after refactoring code that
implements CREATE TABLE ... LIKE.
mysql-test/r/grant2.result:
Added test for bug#25578 "CREATE TABLE LIKE does not require any privileges
on source table".
mysql-test/t/create-big.test:
Added test coverage for concurrency-related issues with CREATE TABLE LIKE.
mysql-test/t/create.test:
Adjusted error-code in the test case after refactoring code that
implements CREATE TABLE ... LIKE.
mysql-test/t/disabled.def:
Recent code changes ensured that CREATE TABLE LIKE statement is properly
isolated against other statements, so synchronization.test should no
longer fail (see fix for bug 20662 and preliminary patch for bug 23667
changing ALTER TABLE locking).
mysql-test/t/grant2.test:
Added test for bug#25578 "CREATE TABLE LIKE does not require any privileges
on source table".
sql/handler.h:
Introduced new flag for HA_CREATE_INFO::options in order to be able to
distinguish CREATE TABLE ... LIKE from other types of CREATE TABLE.
sql/mysql_priv.h:
mysql_create_like_table() now takes source table name not as a
Table_ident object but as regular table list element.
sql/sql_lex.h:
Removed LEX::like_name member. Now we use special flag in
LEX::create_info::options for distinguishing CREATE TABLE ... LIKE
from other types of CREATE TABLE and store name of source table as
regular element in statement's table list.
sql/sql_parse.cc:
CREATE TABLE ... LIKE implementation now uses statement's table list
for storing information about the source table. We also use flag
in LEX::create_info.options for distinguishing it from other types
of CREATE TABLE.
Finally CREATE TABLE ... LIKE now requires the same privileges on
the source tables as SHOW CREATE TABLE. Moved this privilege check
to check_show_create_table_access() function.
sql/sql_partition.cc:
Now we use special flag in LEX::create_info::options for distinguishing
CREATE TABLE ... LIKE from other types of CREATE TABLE and store name
of source table as regular element in statement's table list.
sql/sql_table.cc:
mysql_create_like_table():
- Commented and cleaned-up a bit code which is responsible for achieving
isolation from concurrent statements. Most of actual work was done by
fix for bug 20662 and preliminary patch changing locking locking in
ALTER TABLE, so here we do minor things like relaxing locking on
source table (we don't need lock on it, to have it open is enough) and
adjusting code to make it more friendly against code implementing I_S.
- Get rid of duplicated code related to source database/table name
handling. All these operations are already done in
st_select_lex::add_table_to_list(), so we achieve the same effect
by including source table into the statement's table list.
sql/sql_yacc.yy:
Now we use special flag in LEX::create_info::options for distinguishing
CREATE TABLE ... LIKE from other types of CREATE TABLE and store name
of source table as regular element in statement's table list.
Bug #23667 "CREATE TABLE LIKE is not isolated from alteration
by other connections"
Bug #18950 "CREATE TABLE LIKE does not obtain LOCK_open"
As well as:
Bug #25578 "CREATE TABLE LIKE does not require any privileges
on source table".
The first and the second bugs resulted in various errors and wrong
binary log order when one tried to execute concurrently CREATE TABLE LIKE
statement and DDL statements on source table or DML/DDL statements on its
target table.
The problem was caused by incomplete protection/table-locking against
concurrent statements implemented in mysql_create_like_table() routine.
We solve it by simply implementing such protection in proper way (see
comment for sql_table.cc for details).
The third bug allowed user who didn't have any privileges on table create
its copy and therefore circumvent privilege check for SHOW CREATE TABLE.
This patch solves this problem by adding privilege check, which was missing.
Finally it also removes some duplicated code from mysql_create_like_table().
Note that, altough tests covering concurrency-related aspects of CREATE TABLE
LIKE behaviour will only be introduced in 5.1, they were run manually for
this patch as well.
mysql-test/r/grant2.result:
Added test for bug#25578 "CREATE TABLE LIKE does not require any privileges
on source table".
mysql-test/t/grant2.test:
Added test for bug#25578 "CREATE TABLE LIKE does not require any privileges
on source table".
sql/handler.h:
Introduced new flag for HA_CREATE_INFO::options in order to be able to
distinguish CREATE TABLE ... LIKE from other types of CREATE TABLE.
sql/mysql_priv.h:
mysql_create_like_table() now takes source table name not as a
Table_ident object but as regular table list element.
sql/sql_parse.cc:
CREATE TABLE ... LIKE implementation now uses statement's table list
for storing information about the source table. We also use flag
in LEX::create_info.options for distinguishing it from other types
of CREATE TABLE.
Finally CREATE TABLE ... LIKE now requires the same privileges on
the source tables as SHOW CREATE TABLE. Moved this privilege check
to check_show_create_table_access() function.
sql/sql_table.cc:
mysql_create_like_table():
- Provided proper protection from concurrent statements.
This is achieved by keeping name-lock on the source table and holding
LOCK_open mutex during whole operation. This gives protection against
concurrent DDL on source table. Also holding this mutex makes copying
of .frm file, call to ha_create_table() and binlogging atomic against
concurrent DML and DDL operations on target table.
- Get rid of duplicated code related to source database/table name
handling. All these operations are already done in
st_select_lex::add_table_to_list(), so we achieve the same effect
by including source table into the statement's table list.
sql/sql_yacc.yy:
Now we use special flag in LEX::create_info::options for distinguishing
CREATE TABLE ... LIKE from other types of CREATE TABLE and store name
of source table as regular element in statement's table list.
cache by changing the behavior of the query cache resize-method.
- set query_cache_size=<new_size>; is significantly faster than RESET QUERY
CACHE as it simply destroys and recreates the query cache, whereas
RESET QUERY CACHE keeps its internal structure aligned with server
load profile.
sql/set_var.cc:
Refactored behavior of function. Instead of setting the global variable
from within the class method scope we return the new cache size as a
result of the method call.
sql/sql_cache.cc:
- Changed behavior of resize-method. Now, the cache will be cleared as one
single block of data instead of an iteration over all cached statements.
into pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.1-build
configure.in:
Auto merged
include/my_global.h:
Auto merged
sql/item_func.cc:
Auto merged
BitKeeper/deleted/.del-CMakeLists.txt~13:
Auto merged
into mysql.com:/home/svoj/devel/mysql/merge/mysql-5.1-engines
mysql-test/mysql-test-run.pl:
Auto merged
mysql-test/t/disabled.def:
Auto merged
sql/handler.cc:
Auto merged
sql/sql_table.cc:
Auto merged
storage/myisam/ha_myisam.cc:
Auto merged
Problem: Memory overrun happened in attempts to generate
error messages (e.g. in case of incorrect XPath syntax).
Reason: set_if_bigger() was used instead of set_if_smaller().
Change: replacing wrong set_if_bigger() to set_if_smaller(),
and making minor additional code clean-ups.
mysql-test/r/xml.result:
Adding test cases for all pieces of code with
set_if_smaller() followed by my_printf_error().
mysql-test/t/xml.test:
Adding test cases for all pieces of code with
set_if_smaller() followed by my_printf_error().
sql/item_xmlfunc.cc:
- fixing incorrect set_if_bigger to set_if_smaller in two places
- getting read of unnesessary "char context[32]" variable and
using '%.*s' instead if '%s' in the error format.
into whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-single-user
storage/ndb/src/common/transporter/Packer.cpp:
Auto merged
storage/ndb/src/common/transporter/TCP_Transporter.hpp:
Auto merged
storage/ndb/src/common/transporter/TransporterRegistry.cpp:
Auto merged
storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp:
Auto merged
storage/ndb/test/ndbapi/testNdbApi.cpp:
manual merge
storage/ndb/test/run-test/daily-basic-tests.txt:
manual merge
The problem reported is a compile bug,
reported by the development GCC team with GCC 4.2.
The original issue can no longer be reproduced in MySQL 5.1,
since the configure script no longer define HAVE_ATOMIC_ADD,
which caused the Linux atomic functions to be used (and cause a problem
with an invalid cast).
This patch implements some code cleanup for 5.1 only, which was identified
during the investigation of this issue.
With this patch, statistics maintained in THD::status_var are by definition
owned by the running thread, and do not need to be protected against race
conditions. These statistics are maintained by the status_var_* helpers,
which do not require any lock.
include/my_global.h:
General cleanup of thread_safe_increment / statistic_increment
include/my_pthread.h:
General cleanup of thread_safe_increment / statistic_increment
sql/filesort.cc:
General cleanup of thread_safe_increment / statistic_increment
sql/handler.cc:
General cleanup of thread_safe_increment / statistic_increment
sql/sql_insert.cc:
General cleanup of thread_safe_increment / statistic_increment
sql/sql_parse.cc:
General cleanup of thread_safe_increment / statistic_increment
sql/sql_prepare.cc:
General cleanup of thread_safe_increment / statistic_increment
sql/sql_select.cc:
General cleanup of thread_safe_increment / statistic_increment
into whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-single-user
storage/ndb/src/kernel/blocks/backup/Backup.cpp:
Auto merged
storage/ndb/src/kernel/blocks/pgman.cpp:
Auto merged
storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp:
Auto merged
storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp:
Auto merged
storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp:
manual merge
- change to scan in tup and disk order (if applicable)
storage/ndb/src/kernel/blocks/backup/Backup.cpp:
tup scan for backup also, not only lcp
storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp:
choose disk order scan for disktables during backup
+ move bug workaround for 27776 from tup to lqh
storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp:
add missing jamEntry
storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp:
move bug workaround for 27776 from tup to lqh
storage/ndb/src/kernel/blocks/pgman.cpp:
missing jamEntry
into trift2.:/MySQL/M51/bug26609-5.1
Makefile.am:
Manual merge: Include the "row_lock" suite in the "test-bt" target.
scripts/make_binary_distribution.sh:
Manual merge: Include the additional test suites in the binary package.
Include all the additional test suites in the binary packages ("tar.gz").
This is the tar.gz part of the fixes for bug#26609; for RPMs it is already done.
scripts/make_binary_distribution.sh:
Include all the additional test suites (for now: "funcs_1", "funcs_2", "row_lock")
in the binary packages ("tar.gz").
Take them "as is", without any file filtering (except for the BK subdirectories "SCCS").
This is the tar.gz part of the fixes for bug#26609; for RPMs it is already done.
Use this opportunity to correct the language in some comments.
This patch corrects a problem encountered when reading the binlog from a remote
host. The application was crashing because the buffer variable (temp_buf) in
log_event was not pointing to the incoming data. For a normal file read, this
buffer is allocated by a previous call of read_log_event. However, when reading
from a remote host, the first call to read_log_event is not executed therefore
no buffer is allocated. Furthermore, there is no need to allocate a new buffer
because the incoming stream is what needs to be read.
This patch adds the call to initialize the temp_buf variable if reading from a
remote host. It also adds a check at destroy time to ensure the temp_buf is not
freed if reading from a remote host.
client/mysqlbinlog.cc:
BUG#17654 : --read-from-remote-server causes core
This patch corrects a problem when reading from a remote host. The temp_buf
variable of the log_event class is undefined. This patch assigns the temp_buf
variable to the address of the incoming stream. This allows the print functions
to print the binlog events correctly.
mysql-test/r/rpl_row_mysqlbinlog.result:
BUG#17654 : --read-from-remote-server causes core
This patch adds the results for the test that were disabled when the bug report
was investigated. The patch also adds an additional test was added to ensure
the output of reading from a remote host is the same as reading from a local file.
mysql-test/t/rpl_row_mysqlbinlog.test:
BUG#17654 : --read-from-remote-server causes core
This patch enables the portions of the test that were disabled when the bug report
was investigated. The patch also adds an additional test was added to ensure
the output of reading from a remote host is the same as reading from a local file.
into quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/maint/51
configure.in:
Auto merged
mysql-test/r/strict.result:
Auto merged
mysql-test/r/type_datetime.result:
Auto merged
mysql-test/t/type_datetime.test:
Auto merged
sql/item.cc:
Auto merged
sql/item_cmpfunc.cc:
Auto merged
into quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/maint/51
configure.in:
Auto merged
mysql-test/r/strict.result:
Auto merged
mysql-test/r/type_datetime.result:
Auto merged
mysql-test/t/type_datetime.test:
Auto merged
sql/item.cc:
Auto merged
sql/item_cmpfunc.cc:
Auto merged
sql/sql_show.cc:
Auto merged
into quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/maint/50
configure.in:
Auto merged
mysql-test/r/strict.result:
Auto merged
mysql-test/r/type_datetime.result:
Auto merged
mysql-test/t/type_datetime.test:
Auto merged
sql/item.cc:
Auto merged
sql/item_cmpfunc.cc:
Auto merged
Makefile.am:
This is *no* fix, it is just to avoid the failure of the "jp" test suite
(28563 is the number of the bug) from causing havoc in release builds.
- Added suppressions for dlopen to make plugin test pass.
- Do not pass empty string to mysqld, since my_getopt is
not capable to handle it.
- Re-enabled trailing UNINSTALL PLUGIN statement of plugin.test.
The memory leak described in the bug report happens in libdl, not
in mysqld. On some valgrind installations this error is suppressed
by default, no idea why it isn't suppressed on pb-valgrind.
<observation>
If library remains open after thread has finished, and is closed by
another thread, we get memory leak. But in case library is opened and
closed by the same thread no leak occurs.
</observation>
mysql-test/lib/mtr_io.pl:
Do not pass empty string since my_getopt is not capable to handle it.
This is required to make plugin.test work on platforms where
ha_example is not compiled.
mysql-test/r/plugin.result:
Updated test result.
mysql-test/t/plugin.test:
Re-enabled UNINSTALL PLUGIN statement. It is a good idea to cleanup
at the end of the test. Anyway bug22694 was fixed while this test
was disabled.
mysql-test/valgrind.supp:
Added suppressions for dlopen to make plugin test pass.
Uninitialized in the constructor member variables were
pointing to nirvana and causing a crash when debug information
of the Event Scheduler was dumped in result to COM_DEBUG
packet sent to the server.
sql/event_queue.cc:
Initialize member variables or they will point to
nirvana and could possible cause a crash during
dumping of debug information.
sql/event_queue.h:
remove unneeded line
sql/event_scheduler.cc:
Initialize member variables or they will point to
nirvana and could possible cause a crash during
dumping of debug information.
sql/event_scheduler.h:
remove unneeded state