- 17 Jun, 2009 6 commits
-
-
Kristofer Pettersson authored
-
Kristofer Pettersson authored
This patch corrects a misstake in the test case for bug patch 43658. There was a race in the test case when the thread id was retrieved from the processlist. The result was that the same thread id was signalled twice and one thread id wasn't signalled at all. The affected platforms appears to be limited to linux. mysql-test/r/query_cache_debug.result: There was a race in the test case when the thread id was retrieved from the processlist. The result was that the same thread id was signalled twice and one thread id wasn't signalled at all. mysql-test/t/query_cache_debug.test: There was a race in the test case when the thread id was retrieved from the processlist. The result was that the same thread id was signalled twice and one thread id wasn't signalled at all.
-
Alexey Kopytov authored
-
Alexey Kopytov authored
-
Alexey Kopytov authored
-
Alexey Kopytov authored
-
- 16 Jun, 2009 9 commits
-
-
Georgi Kodinov authored
to a test file that guarantees the presence of partition code
-
Kristofer Pettersson authored
-
Kristofer Pettersson authored
-
Martin Hansson authored
-
Kristofer Pettersson authored
-
Georgi Kodinov authored
-
Kristofer Pettersson authored
Early patch submitted for discussion. It is possible for more than one thread to enter the condition in query_cache_insert(), but the condition predicate is to signal one thread each time the cache status changes between the following states: {NO_FLUSH_IN_PROGRESS,FLUSH_IN_PROGRESS, TABLE_FLUSH_IN_PROGRESS} Consider three threads THD1, THD2, THD3 THD2: select ... => Got a writer in ::store_query THD3: select ... => Got a writer in ::store_query THD1: flush tables => qc status= FLUSH_IN_PROGRESS; new writers are blocked. THD2: select ... => Still got a writer and enters cond in query_cache_insert THD3: select ... => Still got a writer and enters cond in query_cache_insert THD1: flush tables => finished and signal status change. THD2: select ... => Wakes up and completes the insert. THD3: select ... => Happily waiting for better times. Why hurry? This patch is a refactoring of this lock system. It introduces four new methods: Query_cache::try_lock() Query_cache::lock() Query_cache::lock_and_suspend() Query_cache::unlock() This change also deprecates wait_while_table_flush_is_in_progress(). All threads are queued and put on a conditional wait. On each unlock the queue is signalled. This resolve the issues with left over threads. To assure that no threads are spending unnecessary time waiting a signal broadcast is issued every time a lock is taken before a full cache flush. mysql-test/r/query_cache_debug.result: * Added test case for bug43758 mysql-test/t/query_cache_debug.test: * Added test case for bug43758 sql/sql_cache.cc: * Replaced calls to wait_while_table_flush_is_in_progress() with calls to try_lock(), lock_and_suspend() and unlock(). * Renamed enumeration Cache_status to Cache_lock_status. * Renamed enumeration items to UNLOCKED, LOCKED_NO_WAIT and LOCKED. If the LOCKED_NO_WAIT lock type is used to lock the query cache, other threads using try_lock() will fail to acquire the lock. This is useful if the query cache is temporary disabled due to a full table flush. sql/sql_cache.h: * Replaced calls to wait_while_table_flush_is_in_progress() with calls to try_lock(), lock_and_suspend() and unlock(). * Renamed enumeration Cache_status to Cache_lock_status. * Renamed enumeration items to UNLOCKED, LOCKED_NO_WAIT and LOCKED. If the LOCKED_NO_WAIT lock type is used to lock the query cache, other threads using try_lock() will fail to acquire the lock. This is useful if the query cache is temporary disabled due to a full table flush.
-
Martin Hansson authored
-
Georgi Kodinov authored
-
- 15 Jun, 2009 12 commits
-
-
Davi Arnaut authored
times (ie: 2:16:20). mysql-test/r/log_tables_debug.result: Update test case result. mysql-test/t/log_tables_debug.test: Skip spaces and handle case when a leading zero is not printed.
-
Davi Arnaut authored
mysql-test/t/log_tables_debug.test: Remove spurious spaces and disable session debugging.
-
Georgi Kodinov authored
-
Staale Smedseng authored
statements missed from general log A FLUSH LOGS is added to ensure that the log info hits the file before attempting to process. mysql-test/t/log_tables_debug.test: A FLUSH LOGS is added, and in the event that a match is not found, <FILE> is reset and the contents of the log file is dumped for debugging purposes.
-
Georgi Kodinov authored
-
Georgi Kodinov authored
-
Georgi Kodinov authored
-
Georgi Kodinov authored
-
Bernt M. Johnsen authored
-
Bernt M. Johnsen authored
-
Georgi Kodinov authored
-
Georgi Kodinov authored
crashes server! The problem affects the scenario when index merge is followed by a filesort and the sort buffer is not big enough for all the sort keys. In this case the filesort function will read the data to the end through the index merge quick access method (and thus closing the cursor etc), but will leave the pointer to the quick select method in place. It will then create a temporary file to hold the results of the filesort and will add it as a sort output file (in sort.io_cache). Note that filesort will copy the original 'sort' structure in an automatic variable and restore it after it's done. As a result at exiting filesort() we have a sort.io_cache filled in and nothing else (as a result of close of the cursors at end of reading data through index merge). Now create_sort_index() will note that there is a select and will clean it up (as it's been used already by filesort() reading the data in). While doing that a special case in the index merge destructor will clean up the sort.io_cache, assuming it's an output of the index merge method and is not needed anymore. As a result the code that tries to read the data back from the filesort output will get no data in both memory and disk and will crash. Fixed similarly to how filesort() does it : by copying the sort.io_cache structure to a local variable, removing the pointer to the io_cache (so that it's not freed by QUICK_INDEX_MERGE_SELECT::~QUICK_INDEX_MERGE_SELECT) and restoring the original structure (together with the valid pointer) after the cleanup is done. This is a safe thing to do because all the structures are already cleaned up by hitting the end of the index merge's read method (QUICK_INDEX_MERGE_SELECT::get_next()) and the cleanup code being written in a way that tolerates repeating cleanups. mysql-test/r/index_merge.result: Bug #44810: test case mysql-test/t/index_merge.test: Bug #44810: test case sql/sql_select.cc: Bug #44810: preserve the io_cache produced by filesort while cleaning up the index merge quick access method (QUICK_INDEX_MERGE_SELECT).
-
- 12 Jun, 2009 8 commits
-
-
Davi Arnaut authored
The SQL-mode PAD_CHAR_TO_FULL_LENGTH could prevent a DROP USER statement from privileges associated with the user being dropped. What ocurred was that reading from the User and Host fields of the tables tables_priv or columns_priv would yield values padded with spaces, causing a failure to match a specified user or host ('user' != 'user '); The solution is to disregard the PAD_CHAR_TO_FULL_LENGTH mode when iterating over and matching values in the privileges tables for a DROP USER statement. mysql-test/r/sql_mode.result: Add test case result for Bug#45100. mysql-test/t/sql_mode.test: Add test case for Bug#45100. sql/sql_acl.cc: Clear MODE_PAD_CHAR_TO_FULL_LENGTH before dropping privileges.
-
Staale Smedseng authored
statements missed from general log A refinement of the test in the previous patch to avoid using sleep as a means to ensure that timestamps are added to the log entries. mysql-test/t/log_tables_debug.test: New test file. A debug feature is used to ensure that log entries are prefixed with a timestamp. sql/log.cc: A debug feature is implemented to ensure that log entries are prefixed with a timestamp.
-
Georgi Kodinov authored
-
Georgi Kodinov authored
-
Georgi Kodinov authored
-
Georgi Kodinov authored
-
Patrick Crews authored
Re-enabled tests main.init_connect and rpl.rpl_init_slave.test for non-Windows platforms. Please remove this code upon fixing the bug.
-
Georgi Kodinov authored
WHERE and GROUP BY clause Loose index scan may use range conditions on the argument of the MIN/MAX aggregate functions to find the beginning/end of the interval that satisfies the range conditions in a single go. These range conditions may have open or closed minimum/maximum values. When the comparison returns 0 (equal) the code should check the type of the min/max values of the current interval and accept or reject the row based on whether the limit is open or not. There was a wrong composite condition on checking this and it was not working in all cases. Fixed by simplifying the conditions and reversing the logic. mysql-test/r/group_min_max.result: Bug #45386: test case mysql-test/t/group_min_max.test: Bug #45386: test case sql/opt_range.cc: Bug #45386: fix the check whether to use the value if on the interval boundry
-
- 11 Jun, 2009 4 commits
-
-
Joerg Bruehe authored
This is the backmerge of 5.0.74sp1 into the main sources, but effectively a null-merge, because the changes in that version were backports of changes already present in later sources.
-
Joerg Bruehe authored
-
Joerg Bruehe authored
-
unknown authored
-
- 10 Jun, 2009 1 commit
-
-
Davi Arnaut authored
-