The problem is that DROP TABLE and other DDL statements failed to
automatically close handlers associated with tables that were marked
for reopen (FLUSH TABLES).
The current implementation fails to properly discard handlers of
dropped tables (that were marked for reopen) because it searches
on the open handler tables list and using the current alias of the
table being dropped. The problem is that it must not use the open
handler tables list to search because the table might have been
closed (marked for reopen) by a flush tables command and also it
must not use the current table alias at all since multiple different
aliases may be associated with a single table. This is specially
visible when a user has two open handlers (using alias) of a same
table and a flush tables command is issued before the table is
dropped (see test case). Scanning the handler table list is also
useless for dropping handlers associated with temporary tables,
because temporary tables are not kept in the THD::handler_tables
list.
The solution is to simple scan the handlers hash table searching
for, and deleting all handlers with matching table names if the
reopen flag is not passed to the flush function, indicating that
the handlers should be deleted. All matching handlers are deleted
even if the associated the table is not open.
mysql-test/include/handler.inc:
Add test case for Bug#31397
mysql-test/r/handler_innodb.result:
Add test case result for Bug#31397
mysql-test/r/handler_myisam.result:
Add test case result for Bug#31397
sql/mysql_priv.h:
Rename flush functions to better match the intent of the caller and
update functions prototypes and remove unused flags.
sql/sql_base.cc:
Rename flush functions to better match the intent of the caller.
sql/sql_class.cc:
Rename the flush functions to better match the intent of the caller.
The hash_free function is moved to the cleanup.
sql/sql_handler.cc:
When dropping tables for a final close, scan the handler's hash table since
the table might not be in the handlers open table list because the table was
marked for reopen or because it's a temporary table.
sql/sql_rename.cc:
Drop handlers associated with tables that are being renamed.
sql/sql_table.cc:
Now that temporary tables are properly removed even when opened
by a SQL HANDLER, enable the assert since this branch can't be taken
outside of SF/trigger/prelocked mode.
different error code depending on platform.
On Mac OS X, KILL statement issued to kill the current
connection would return a different error code and message than on
other platforms ('MySQL server has gone away' instead of 'Shutdown
in progress').
The reason for this difference was that on Mac OS X we have macro
SIGNAL_WITH_VIO_CLOSE defined. This macro forces KILL
implementation to close the communication socket of the thread
that is being killed. SIGNAL_WITH_VIO_CLOSE macro is defined on
platforms where just sending a signal is not a reliable mechanism
to interrupt the thread from sleeping on a blocking system call.
In a nutshell, closing the socket is a hack to work around an
operating system bug and awake the blocked thread no matter what.
However, if the thread that is being killed is the same
thread that issued KILL statement, closing the socket leads to a
prematurely lost connection. At the same time it is not necessary
to close the socket in this case, since the thread in question
is not inside a blocking system call.
The fix, therefore, is to not close the socket if the thread that
is being killed is the same that issued KILL statement, even with
defined SIGNAL_WITH_VIO_CLOSE.
mysql-test/r/kill.result:
Update result file.
mysql-test/t/kill.test:
Added a test case for BUG#19723: kill of active connection yields
different error code depending on platform.
sql/sql_class.cc:
Call close_active_vio() only if we're killing another thread.
mysql-test/r/no-threads.result:
Test that we are in the 'no-threads' thread_handling mode.
mysql-test/t/no-threads.test:
Test that we are in the 'no-threads' thread_handling mode.
sql/mysqld.cc:
Changes to make global_system_variables.thread_handling be zero based, instead of 1
based.
sql/scheduler.h:
Changed the enum to start at 0, to match the array elements in thread_handling_names
in mysqld.cc
Post pushbuild fix
Disabled test on windows due to bug#30459
(DATA/INDEX DIR for partitions not working on windows)
Patch from Mattias Jonsson.
mysql-test/r/partition_mgm.result:
Bug#32091: Security breach via directory changes
fixed non-windows lines.
mysql-test/t/partition_mgm.test:
Bug#32091: Security breach via directory changes
fixed non-windows lines.
mysql-test/t/partition_symlink.test:
Bug#32091: Security breach via directory changes
Added no_windows, since it is affected of bug#30459
if running as root
Every start of a server in the test suite raised that warning.
The cause was an unconditionla add of the --user option to the
server command line. Only the "root" user (effective user id == 0)
must use that option.
Added check for effective user id == 0 before adding --user.
Thanks to Magnus Svensson for the patch.
mysql-test/mysql-test-run.pl:
Bug#32078 - Excessive warnings: One can only use the --user switch
if running as root
Added check for effective user id == 0 before adding --user
in mysqld_arguments().
into mattiasj-laptop.(none):/home/mattiasj/clones/mysql-5.1-last_with_main
libmysqld/lib_sql.cc:
Auto merged
mysql-test/include/mix1.inc:
Auto merged
mysql-test/r/innodb_mysql.result:
Auto merged
sql/event_scheduler.cc:
Auto merged
sql/events.cc:
Auto merged
sql/ha_ndbcluster_binlog.cc:
Auto merged
sql/handler.cc:
Auto merged
sql/item_func.cc:
Auto merged
sql/slave.cc:
Auto merged
sql/sql_acl.cc:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_connect.cc:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_lex.h:
Auto merged
sql/sql_yacc.yy:
Auto merged
wait_condition timeout.
The problem was that the event thread didn't manage to execute
the event in 30 seconds on highly-loaded box. The fix is to
increase timeout.
This is a fix for the test suite.
mysql-test/t/information_schema.test:
Provide more time to execute an event.
Buffer overflow due to wrong key length in partitioning
Changed to the correct key_length function.
sql/opt_range.cc:
Bug#31705 Partitions: crash if varchar length > 65530
Problem: buffer overflow due to wrong key-length
Fix: Using correct key_length function
mysql-test/r/partition_datatype.result:
Bug#31705 Partitions: crash if varchar length > 65530
New test-result case for testing all column types
used in key-partitioning.
(For verifying correct key-length use)
mysql-test/t/partition_datatype.test:
Bug#31705 Partitions: crash if varchar length > 65530
New test case for testing all column types
used in key-partitioning.
(For verifying correct key-length used)
Merge fix
partition_mgm did not require have_symlink.
Moved the test case to partition_symlink, which
require have_symlink, and should work on both *nix and
Windows
mysql-test/r/partition_mgm.result:
Bug#32091: Security breach via directory changes
Moved the test case to partition_symlink.
mysql-test/t/partition_mgm.test:
Bug#32091: Security breach via directory changes
Moved the test case to partition_symlink.
mysql-test/r/partition_symlink.result:
Bug#32091: Security breach via directory changes
Moved the test case to partition_symlink. It requires
have_symlink.
mysql-test/t/partition_symlink.test:
Bug#32091: Security breach via directory changes
Moved the test case to partition_symlink. It requires
have_symlink.
into mysql.com:/home/svoj/devel/mysql/BUG32111/mysql-5.1-engines
mysql-test/r/symlink.result:
Auto merged
mysql-test/t/symlink.test:
Auto merged
mysys/my_symlink2.c:
Auto merged
into mysql.com:/home/svoj/devel/mysql/BUG32111/mysql-5.0-engines
mysql-test/r/symlink.result:
Auto merged
mysql-test/t/symlink.test:
Auto merged
mysys/my_symlink2.c:
Auto merged
Adding missing drop of user created for test case.
mysql-test/r/mysqlbinlog.result:
Result file change.
mysql-test/t/mysqlbinlog.test:
Dropping user that was added earlier in the test.
partitioned table
Post-pushbuild fix
Pushbuild detected a new need for lex initialization in
embedded server.
Fixed test for INSERT DELAYED in partitions_hash.test so that
it works with embedded server.
libmysqld/lib_sql.cc:
Bug#31210 - INSERT DELAYED crashes server when used on
partitioned table
Initialized lex for later use in open_table().
mysql-test/r/partition_hash.result:
Bug#31210 - INSERT DELAYED crashes server when used on
partitioned table
Fixed test result for embedded server.
mysql-test/t/partition_hash.test:
Bug#31210 - INSERT DELAYED crashes server when used on
partitioned table
Fixed test for embedded server.
Changed test case from GRANT to CREATE USER
mysql-test/r/partition_mgm.result:
Bug#32091: Security breach via directory changes
test result
mysql-test/t/partition_mgm.test:
Bug#32091: Security breach via directory changes
Changed test case from GRANT to CREATE USER
small fix of test case (when running make test after
merge, it did not substitute MYSQLTEST_VARDIR in
the error)
mysql-test/r/partition_mgm.result:
Bug#32091: Security breach via directory changes
small fix in test result
mysql-test/t/partition_mgm.test:
Bug#32091: Security breach via directory changes
small fix in test case
Problem: there was no standard syntax error when
creating partitions with syntax error in
the partitioning clause.
Solution: added "Syntax error: " to the error message
mysql-test/r/partition.result:
Bug#29368: Incorrect error for syntax error when createing
partition
test result update
mysql-test/r/partition_error.result:
Bug#29368: Incorrect error for syntax error when createing
partition
test result
mysql-test/t/partition_error.test:
Bug#29368: Incorrect error for syntax error when createing
partition
test case
sql/share/errmsg.txt:
Bug#29368: Incorrect error for syntax error when createing
partition
Modified error messages
into stella.local:/home2/mydev/mysql-5.1-bug31210
sql/sql_acl.cc:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_connect.cc:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_lex.cc:
Auto merged
sql/sql_lex.h:
Auto merged
sql/sql_servers.cc:
Auto merged
sql/sql_udf.cc:
Auto merged
sql/table.cc:
Auto merged
Problem: the table's INDEX and DATA DIR was taken
directly from the table's first partition.
This allowed rename attack similar to
bug#32111 when ALTER TABLE REMOVE PARTITIONING
Solution: Silently ignore the INDEX/DATA DIR
for the table. (Like some other storage engines
do).
Partitioned tables do not support DATA/INDEX
DIR on the table level, only on its partitions.
mysql-test/r/partition_mgm.result:
Bug#32091: Security breach via directory changes
test result
mysql-test/t/partition_mgm.test:
Bug#32091: Security breach via directory changes
test case
sql/ha_partition.cc:
Bug#32091: Security breach via directory changes
Do not use the first partition's DATA/INDEX DIR
as the table's DATA/INDEX DIR.
(A partitioned table do not have support for DATA/
INDEX DIR, only its partitions do)
RENAME TABLE against a table with DATA/INDEX DIRECTORY overwrites
the file to which the symlink points.
This is security issue, because it is possible to create a table with
some name in some non-system database and set DATA/INDEX DIRECTORY
to mysql system database. Renaming this table to one of mysql system
tables (e.g. user, host) would overwrite the system table.
Return an error when the file to which the symlink points exist.
mysql-test/r/symlink.result:
A test case for BUG#32111.
mysql-test/t/symlink.test:
A test case for BUG#32111.
mysys/my_symlink2.c:
Return an error when the file to which the symlink points exist.
loose index scan enabled for subqueries
mysql-test/r/group_min_max.result:
Bug #31974: test case updates
loose index scan enabled for subqueries
mysql-test/r/index_merge_myisam.result:
Bug #31974: test case updates
loose index scan enabled for subqueries
Disabling and enabling indexes on a non-empty table grows the
index file.
Disabling indexes just sets a flag per non-unique index and does not
free the index blocks of the affected indexes. Re-enabling indexes
creates new indexes with new blocks. The old blocks remain unused
in the index file.
Fixed by dropping and re-creating all indexes if non-empty disabled
indexes exist when enabling indexes. Dropping all indexes resets
the internal end-of-file marker to the end of the index file header.
It also clears the root block pointers of every index and clears the
deleted blocks chains. This way all blocks are declared as free.
myisam/mi_check.c:
Bug#4692 - DISABLE/ENABLE KEYS waste a space
Added function mi_drop_all_indexes() to support drop of all indexes
in case we want to re-enable non-empty disabled indexes.
Changed mi_repair(), mi_repair_by_sort(), and mi_repair_parallel()
to use the new function instead of duplicate drop index code.
mysql-test/r/myisam.result:
Bug#4692 - DISABLE/ENABLE KEYS waste a space
Added test result.
mysql-test/t/myisam.test:
Bug#4692 - DISABLE/ENABLE KEYS waste a space
Added test.
into lambda.hsd1.co.comcast.net.:/home/malff/TREE/mysql-5.1-rt-merge
sql/handler.cc:
Auto merged
sql/log_event.cc:
Auto merged
sql/sql_update.cc:
Auto merged
partitioned table
Trying INSERT DELAYED on a partitioned table, that has not been
used right before, crashes the server. When a table is used for
select or update, it is kept open for some time. This period I
mean with "right before".
Information about partitioning of a table is stored in form of
a string in the .frm file. Parsing of this string requires a
correctly set up lexical analyzer (lex). The partitioning code
uses a new temporary instance of a lex. But it does still refer
to the previously active lex. The delayd insert thread does not
initialize its lex though...
Added initialization for thd->lex before open table in the delayed
thread and at all other places where it is necessary to call
lex_start() if all tables would be partitioned and need to parse
the .frm file.
mysql-test/r/partition_hash.result:
Bug#31210 - INSERT DELAYED crashes server when used on
partitioned table
Added test result
mysql-test/t/partition_hash.test:
Bug#31210 - INSERT DELAYED crashes server when used on
partitioned table
Added test
sql/event_scheduler.cc:
Bug#31210 - INSERT DELAYED crashes server when used on
partitioned table
Initialized lex for later use in open_table().
sql/events.cc:
Bug#31210 - INSERT DELAYED crashes server when used on
partitioned table
Initialized lex for later use in open_table().
sql/ha_ndbcluster_binlog.cc:
Bug#31210 - INSERT DELAYED crashes server when used on
partitioned table
Initialized lex for later use in open_table().
sql/slave.cc:
Bug#31210 - INSERT DELAYED crashes server when used on
partitioned table
Initialized lex for later use in open_table().
sql/sql_acl.cc:
Bug#31210 - INSERT DELAYED crashes server when used on
partitioned table
Initialized lex for later use in open_table().
sql/sql_base.cc:
Bug#31210 - INSERT DELAYED crashes server when used on
partitioned table
Asserted that lex is initialized in open_table().
sql/sql_connect.cc:
Bug#31210 - INSERT DELAYED crashes server when used on
partitioned table
Initialized lex for later use in open_table().
sql/sql_insert.cc:
Bug#31210 - INSERT DELAYED crashes server when used on
partitioned table
Added initialization for thd->lex before open table.
sql/sql_lex.cc:
Bug#31210 - INSERT DELAYED crashes server when used on
partitioned table
Added 'is_lex_started' to test if lex is initialized.
sql/sql_lex.h:
Bug#31210 - INSERT DELAYED crashes server when used on
partitioned table
Added 'is_lex_started' to test if lex is initialized.
sql/sql_plugin.cc:
Bug#31210 - INSERT DELAYED crashes server when used on
partitioned table
Initialized lex for later use in open_table().
sql/sql_servers.cc:
Bug#31210 - INSERT DELAYED crashes server when used on
partitioned table
Initialized lex for later use in open_table().
sql/sql_udf.cc:
Bug#31210 - INSERT DELAYED crashes server when used on
partitioned table
Initialized lex for later use in open_table().
sql/table.cc:
Bug#31210 - INSERT DELAYED crashes server when used on
partitioned table
Asserted that lex is initialized in open_table_from_share().
sql/tztime.cc:
Bug#31210 - INSERT DELAYED crashes server when used on
partitioned table
Initialized lex for later use in open_table().
Comment sign of -- at line begin in test files lead to warnings
from mysqltest.
Changed -- to #.
mysql-test/t/subselect.test:
Bug#32108 - subselect.test produces warnings files
Changed -- to # at comment begin to avoid warnings files.
Comment sign of -- at line begin in test files lead to warnings
from mysqltest.
Changed -- to #.
mysql-test/t/ctype_uca.test:
Bug#32107 - ctype_uca.test produces warnings files
Changed -- to # at comment begin to avoid warnings files.
The fix for bug 31148 is not correct. It does not
have a relation to the problem described in this bug.
And removing the fix will not make the bug to re-appear.
Fixed the bug #31974 by removing the fix for bug 31148
and adding a test case.
mysql-test/r/key.result:
Bug #31974: test case
mysql-test/t/key.test:
Bug #31974: test case
sql/sql_select.cc:
Bug #31974: revert the fix for bug 31148