- 20 Nov, 2008 1 commit
-
-
Guilhem Bichot authored
storage/maria/trnman.c: During Maria's checkpoint, we walk the list of active transactions; in this list we may find a transaction with a short_id of 0 which means "uninitialized" (is being created right now) and want to ignore this transaction. Such short_id is set under trn->state_lock, so use this mutex to reliably read short_id during checkpoint.
-
- 12 Nov, 2008 2 commits
- 10 Nov, 2008 1 commit
-
-
Sergei Golubchik authored
-
- 07 Nov, 2008 1 commit
-
-
Sergei Golubchik authored
-
- 05 Nov, 2008 1 commit
-
-
Michael Widenius authored
storage/maria/trnman.c: Store min used trid in a global variable and change trnman_get_min_trid() to return this variable without using a mutex. This is safe as trnman_get_min_trid() is used for trid optimization and all algoritms will work even if it returns a slightly older trid. Also ensure that LOCK_trn_list is unlocked in trnman_new_trn() in the very unlikely case that lf_hash_get_pins() fails
-
- 04 Nov, 2008 2 commits
-
-
Sergei Golubchik authored
include/waiting_threads.h: comment with a deadlock example
-
Michael Widenius authored
The old way to store the length prefix was (256 - length); This is now changed to (length -249) Fixed also that some defines to have a MARIA_ prefix storage/maria/ma_control_file.c: Added comment storage/maria/ma_key.c: Added MARIA_ prefix to some defines Changed how packed transid length was stored storage/maria/ma_open.c: Added MARIA_ prefix to some defines storage/maria/maria_def.h: Added MARIA_ prefix to some defines Changed how packed transid length was stored
-
- 03 Nov, 2008 3 commits
-
-
Sergei Golubchik authored
include/waiting_threads.h: don't #pragma pack mysys/lf_hash.c: typo in a comment mysys/waiting_threads.c: use the size of data, not the size of (possibly padded) structure
-
Michael Widenius authored
-
Michael Widenius authored
storage/maria/ha_maria.cc: Use file->s->lock_key_trees instead of file->s->lock.get_status to detect if we are using versioning storage/maria/ma_state.c: Fixed function prototype storage/maria/ma_state.h: Fixed function prototype
-
- 02 Nov, 2008 1 commit
-
-
unknown authored
-
- 31 Oct, 2008 2 commits
-
-
Michael Widenius authored
storage/maria/ha_maria.cc: Added ha_maria::is_changed() storage/maria/ha_maria.h: Added ha_maria::is_changed() storage/maria/ma_delete.c: Mark that table changed storage/maria/ma_open.c: Ensure that info->state->changed is always reset from thr_lock() storage/maria/ma_state.c: Reset handler->state->changed at first usage of transactional table Reset handler->state->changed when taking lock for not transactional table storage/maria/ma_state.h: Added variable and function to track changes of table storage/maria/ma_update.c: Mark that table changed storage/maria/ma_write.c: Mark that table changed
-
unknown authored
-
- 30 Oct, 2008 1 commit
-
-
Sergei Golubchik authored
fix a bug that was introduced in one of the infamous "cleanups" storage/maria/trnman.c: restore the correct precedence
-
- 27 Oct, 2008 2 commits
-
-
Sergei Golubchik authored
-
Sergei Golubchik authored
-
- 24 Oct, 2008 2 commits
-
-
Guilhem Bichot authored
sql/sql_class.cc: Backport of fix made in 6.0-maria in revision guilhem@mysql.com-20081020202418-yay1h55w9ffagp42 (this undoes a change made in WL 3064 (the deadlock detector patch) which asserted in "./mtr --embedded innodb_mysql" in 6.0-maria)
-
Sergei Golubchik authored
reader preference, at least where system rwlocks are fair. include/my_global.h: wt uses mutex-based rwlock implementation unless on linux include/waiting_threads.h: mutex-based rwlock implementation with reader preference mysys/thr_rwlock.c: revert the change. make my_rw_locks fair mysys/waiting_threads.c: mutex-based rwlock implementation with reader preference. convert complex multi-line macros to static functions
-
- 22 Oct, 2008 2 commits
-
-
Sergei Golubchik authored
-
Sergei Golubchik authored
-
- 21 Oct, 2008 5 commits
-
-
Sergei Golubchik authored
-
Sergei Golubchik authored
-
Sergei Golubchik authored
include/my_global.h: enable compile_time_assert for all compilers include/waiting_threads.h: 1. don't #extern "C" system includes, they don't like it. 2. remove any padding from WT_RESOURCE_ID structure - we want to compare it with memcmp mysys/waiting_threads.c: assert that WT_RESOURCE_ID can be compared with memcmp and has no random padding bytes
-
Sergei Golubchik authored
-
Sergei Golubchik authored
mysys/my_wincond.c: race condition: block gate could be left open forever, if cond_broadcast was done right after the last thread left WaitForMultipleObjects() on timeout mysys/thr_rwlock.c: make rwlocks behave similar to their distant linux/solaris relatives
-
- 17 Oct, 2008 2 commits
-
-
Guilhem Bichot authored
storage/maria/ma_pagecache.c: calling make_lock_and_pin() without cache's mutex is wrong (patch from Sanja)
-
Guilhem Bichot authored
(need a mutex when modifying bitmap->non_flushable), which I hit when running maria_bulk_insert.yy. After fixing this, I hit an assertion in check_and_set_lsn() saying that the page was PAGECACHE_PLAIN_PAGE. This could be caused by pages left by an operation which had transactions disabled (like a bulk insert with repair): in this patch we remove those pages out of the cache when we re-enable transactions. After fixing this, I get page cache deadlocks, pushbuild2 also has some, to be looked at. No testcase, requires concurrency and running for 15 minutes, but automatically tested by pushbuild2. storage/maria/ma_bitmap.c: Doing bitmap->non_flushable++ without mutex was wrong. If this ++ happened while another ++ or -- was happening in another thread, one ++ or -- could be missed and the bitmap code would behave wrongly. For example, if a ++ was missed, the DBUG_ASSERT(((int) (bitmap->non_flushable)) >= 0) in _ma_bitmap_release_unused() could fire. I saw this assertion happen in practice in maria_bulk_insert.yy. Adding this mutex lock eliminated the assertion problem. The >=0 was wrong, should be >0 (or the variable could go negative). storage/maria/ma_recovery.c: When we re-enable transactionality, as we may have created pages of type PAGECACHE_PLAIN_PAGE before, we need to remove them from the cache (FLUSH_RELEASE). Or they would stay this way, and later when we maria_write() to them, we would try to tag them with a LSN (ma_unpin_all_pages()), which is incorrect for a plain page (and causes assertion in the page cache at start of check_and_set_lsn()). I saw the assertion fire with maria_bulk_insert.yy, and this seems to cure it. page cache
-
- 16 Oct, 2008 4 commits
-
-
unknown authored
-
Guilhem Bichot authored
No testcase, this requires concurrency and is automatically tested by maria_bulk_insert.yy in pushbuild2. storage/maria/ha_maria.cc: The case of BUG#39710 is: two threads want to INSERT SELECT into the same table. Thread1 (T1) starts, does external_lock, thr_lock (store_lock sees 0 records so upgrades to TL_WRITE), goes into bulk insert, starts writes T2 starts, external_lock, thr_lock (store_lock sees 0 records so upgrades to TL_WRITE), blocks on existing thr_lock of T1. T1 ends writes, ends bulk insert, commits (ha_maria::implicit_commit() at end of dispatch_command()), external_lock and thr_unlock (close_thread_tables() at end of dispatch_command()). T2 wakes up, gets thr_lock, goes into start_bulk_insert() where file->state is out-of-date and still says that file->state->records==0, so maria_disable_non_unique_index() is called, which asserts because the actual number of records (share->state.state.records) is >0. The solution, maybe temporary, is to also check share->state.state.records==0 when deciding to do bulk insert, with the idea that such operation cannot rely on the view of the start of the transaction, as it uses repair, and can safely read share->state as it has acquired the exclusive TL_WRITE. Question for reviewer: if we enter the if() branch, do we also need to do: *(file->state)= share->state.state; or even call some existing function which does that?
-
unknown authored
storage/maria/ma_pagecache.c: Fixed ability to read without read lock acquiring. storage/maria/unittest/CMakeLists.txt: New unit test which tests simple read and prolonged writes consistency added. storage/maria/unittest/Makefile.am: New unit test which tests simple read and prolonged writes consistency added. storage/maria/unittest/ma_pagecache_rwconsist2.c: New unit test which tests simple read and prolonged writes consistency added.
-
Guilhem Bichot authored
storage/maria/ma_static.c: __attribute__ does not exist under Windows, so it can be used only afer my_global.h which defines it to nothing.
-
- 15 Oct, 2008 3 commits
-
-
Guilhem Bichot authored
-
Guilhem Bichot authored
Small fixes for pushbuild: compiler warnings, checking that partitioning is enabled when testing it. Don't fsync() index file when closing Maria table if not transactional. mysql-test/suite/maria/r/maria.result: piece moved mysql-test/suite/maria/r/maria_partition.result: result mysql-test/suite/maria/t/maria.test: - reset default storage engine at end of test, not in the middle - move piece which requires partitioning, to maria_partition.test, otherwise test fails on builds without partitioning compiled in mysql-test/suite/maria/t/maria_partition.test: new test for those Maria bugs which are specific of partitioning mysys/my_uuid.c: compiler warning fix (fix imported from latest 5.1-main) storage/maria/ma_close.c: don't fsync() index file when closing table if not transactional (same test as in _ma_once_end_block_record() when fsync-ing data file) storage/maria/ma_create.c: compiler warning fix (char* assigned to uchar*) storage/maria/ma_loghandler.c: compiler warning fix (char* assigned to uchar*)
-
Michael Widenius authored
Fixed that mysql-test-run --skip-from starts from the given test mysql-test/lib/mtr_cases.pl: Moved testing of $opt_start_from to mysql-test-run.pl because tests are now run per suite and the old way would rerun not wanted tests mysql-test/mysql-test-run.pl: Fixed that mysql-test-run --skip-from starts from the given test
-
- 14 Oct, 2008 4 commits
-
-
Michael Widenius authored
MARIA_MAX_MSG_BUF -> HA_MAX_MSG_BUF include/maria.h: Remove MARIA_MAX_MSG_BUF; We are now using HA_MAX_MSG_BUF Added maria_test_invalid_symlink storage/maria/ha_maria.cc: MARIA_MAX_MSG_BUF -> HA_MAX_MSG_BUF storage/maria/ma_check.c: Removed tab in string constant Add extra argument to ma_open_datafile() storage/maria/ma_create.c: Set error number if table is in use storage/maria/ma_open.c: Added name argument to open functions for security check if filename is linked to another file in database directory storage/maria/ma_static.c: Default functions for checking if wrong symlink storage/maria/maria_chk.c: Add extra argument to _ma_open_datafile() storage/maria/maria_def.h: Add extra argument to _ma_open_datafile()
-
Guilhem Bichot authored
in write_changed_bitmap(), and page cache forbids that. Here we make the page cache more relaxed. Original patch by Sanja, simplified by me as limited to not-locked. See comment of ma_bitmap.c. With that, maria_stress.yy runs until hitting BUG 39665. storage/maria/ma_bitmap.c: A thread which unpins bitmap pages in _ma_bitmap_unpin_all() sometimes hit an assertion in the page cache (info!=0 in remove_pin()) which states that you can unpin/unlock only what *you* have pinned/locked. Fixed by setting the new last parameter of pagecache_unlock_by_link() to TRUE in _ma_bitmap_unpin_all(). storage/maria/ma_blockrec.c: new prototype and splitting assertion in three (3rd one fires: BUG 39665) storage/maria/ma_check.c: new prototype storage/maria/ma_key_recover.c: new prototype storage/maria/ma_loghandler.c: new prototype storage/maria/ma_pagecache.c: Allow a thread to unpin, with pagecache_unlock_by_link(), a non-locked page pinned by others. This is a hack for _ma_bitmap_unpin_all() which needs to unpin pages which were pinned by other threads in write_changed_bitmap(). storage/maria/ma_pagecache.h: new prototype storage/maria/ma_preload.c: new prototype storage/maria/unittest/ma_pagecache_rwconsist.c: new prototype storage/maria/unittest/ma_pagecache_single.c: new prototype
-
Guilhem Bichot authored
already supports pin-without-lock so implementation of this WL is instant and done here. This could improve concurrency. No testcase, this requires multiple threads and is automatically tested at push time by maria_stress.yy (pushbuild2). storage/maria/ma_bitmap.c: As the page cache supports pinning without write-locking, we don't take write lock in write_changed_bitmap(), only a pin; this could improve concurrency (WL#4595).
-
Guilhem Bichot authored
which nobody woke up (see comment of ma_bitmap.c). No testcase, this requires multiple threads and is automatically tested at push time by maria_stress.yy (pushbuild2). storage/maria/ma_bitmap.c: * _ma_bitmap_wait_or_flush() didn't publish that it was waiting for bitmap to not be over-allocated (i.e. didn't modify bitmap->flush_all_requested) so nobody (_ma_bitmap_flushable(), _ma_bitmap_release_unused()) knew it had to wake it up => it stalled (BUG#39210). In fact the wait in _ma_bitmap_wait_or_flush() is not needed, it's ok if this function sends the over-allocated bitmap to page cache and keeps pin on it (_ma_bitmap_unpin_all() will unpin it later, and the one who added _ma_bitmap_wait_or_flush() didn't know it). Function is thus deleted, as _ma_bitmap_flush() can do its job. * After fixing that, test runs longer and BUG 39665 happens, which looks like a separate page cache bug. * Smaller changes: _ma_bitmap_flush_all() called write_changed_bitmap() even though it might not be changed; added some DBUG calls in functions; split assertions. * In _ma_bitmap_release_unused(), it's more logical to test non_flushable_state than now_transactional to know if we have to decrement non_flushable (it's exactly per the definition of non_flushable_state). storage/maria/ma_blockrec.c: _ma_bitmap_wait_or_flush() is not needed. ****** new prototype and splitting assertion in three (3rd one fires: BUG 39665) storage/maria/ma_blockrec.h: _ma_bitmap_wait_or_flush() is not needed.
-
- 12 Oct, 2008 1 commit
-
-
Michael Widenius authored
- The problem was that we didn't inform the handler that we are going to close tables that are locked and may have (at least in Maria) be part of an active transaction. Fix for Bug#39227 Maria: crash with ALTER TABLE PARTITION Fix for Bug #39987 main.partition_not_windows fails under debug build Fixed some compiler errors & warnings found by pushbuild include/my_base.h: Added HA_EXTRA_PREPARE_FOR_FORCED_CLOSE for signaling the handler that the file will be forced closed include/my_global.h: Removed 'register' from 'swap_variables' as this gives a warnings when the variables are structs. Compilers should also now be smart enough to figure out this themselves mysql-test/r/subselect_debug.result: Reset value of the debug variable; Without setting this the subselect_innodb test will fail when run after this one mysql-test/suite/maria/r/maria.result: Merged test with myisam.test Added tests for new fixed bugs mysql-test/suite/maria/t/maria.test: Merged test with myisam.test Added tests for new fixed bugs mysql-test/t/subselect_debug.test: Reset value of the debug variable; Without setting this the subselect_innodb test will fail when run after this one mysys/my_uuid.c: Fixed compiler error on windows sql/ha_partition.cc: Added support for the new extra flag: HA_EXTRA_PREPARE_FOR_FORCED_CLOSE (Bug #39226) Ensure that we call extra() for HA_EXTRA_PREPARE_FOR_DROP (Bug#39227) sql/mysqld.cc: Fix for Bug #39987 main.partition_not_windows fails under debug build The problem was that when compiling for purify/valgrind realpath() is not used, which causes test_if_data_home_dir to fail when it shouldn't sql/sql_base.cc: Call HA_EXTRA_PREPARE_FOR_FORCED_CLOSE for tables that are locked but we are going to force close without doing a commit sql/sql_parse.cc: More DBUG_PRINT. Fixed comments storage/maria/ma_extra.c: If HA_EXTRA_PREPARE_FOR_FORCED_CLOSE is called and the table is part of a transaction, remove the table from beeing part of a transaction. This is safe as this is only used as part of flush tables or when the table is not part of a transaction storage/myisam/mi_open.c: Indentation fix unittest/mysys/waiting_threads-t.c: Remove not needed 'volatile' to get rid of compiler warnings on windows
-