- 05 Sep, 2008 1 commit
-
-
Michael Widenius authored
storage/maria/ma_delete.c: Remove wrong optimization (first_key is not related to keypos value at this point) storage/maria/maria_chk.c: Added printing of forgotten option
-
- 26 Aug, 2008 1 commit
-
-
Michael Widenius authored
This was done by introducing another mutex for handling the key_del link I also renamed all key_del variables to start with key_del prefix storage/maria/ma_close.c: Rename of key_del variables storage/maria/ma_key_recover.c: Changed key_del to be protexted by it's own mutex: key_del_lock Rename of key_del variables Removed comment for old bug storage/maria/ma_key_recover.h: Rename of key_del variables storage/maria/ma_open.c: Initialization for new key_del_lock mutex Renamed intern_cond to key_del_cond as it was only used for protection of key_del storage/maria/ma_page.c: Rename of key_del variables storage/maria/ma_write.c: Rename of key_del variables storage/maria/maria_def.h: Rename of key_del variables Added key_del_lock
-
- 25 Aug, 2008 4 commits
-
-
Michael Widenius authored
Fixed compiler warning Ensure that pagecache returns correct error number storage/maria/ma_pagecache.c: Ensure that block->error contain error code from my_errno (not return value from pread/pwrite) Went through usage of my_pread/my_pwrite and ensured that result was threated correctly Fixed some wrong usage of my_bool
-
Michael Widenius authored
-
Michael Widenius authored
Ensure that pagecache gives correct error number even if error for block happend mysys/my_pread.c: Indentation fix storage/maria/ha_maria.cc: filenames changed to be of type LEX_STRING storage/maria/ma_check.c: filenames changed to be of type LEX_STRING storage/maria/ma_checkpoint.c: filenames changed to be of type LEX_STRING storage/maria/ma_create.c: filenames changed to be of type LEX_STRING storage/maria/ma_dbug.c: filenames changed to be of type LEX_STRING storage/maria/ma_delete.c: filenames changed to be of type LEX_STRING storage/maria/ma_info.c: filenames changed to be of type LEX_STRING storage/maria/ma_keycache.c: filenames changed to be of type LEX_STRING storage/maria/ma_locking.c: filenames changed to be of type LEX_STRING storage/maria/ma_loghandler.c: filenames changed to be of type LEX_STRING storage/maria/ma_open.c: filenames changed to be of type LEX_STRING storage/maria/ma_pagecache.c: Store error number for last failed operation in the page block This should fix some asserts() when errno was not properly set after failure to read block in another thread storage/maria/ma_recovery.c: filenames changed to be of type LEX_STRING storage/maria/ma_update.c: filenames changed to be of type LEX_STRING storage/maria/ma_write.c: filenames changed to be of type LEX_STRING storage/maria/maria_def.h: filenames changed to be of type LEX_STRING storage/maria/maria_ftdump.c: filenames changed to be of type LEX_STRING storage/maria/maria_pack.c: filenames changed to be of type LEX_STRING
-
Sergei Golubchik authored
(sanja's patch)
-
- 24 Aug, 2008 1 commit
-
-
Michael Widenius authored
There is no test cases as it's not trivial to do a test case for this. The new code for Maria is however executed by the test case in the bug report. mysql-test/mysql-test-run.pl: Avoid warnings when running with --extern storage/maria/ha_maria.cc: Disable not complete assert until Sanja can push a proper fix storage/maria/ma_delete.c: Fix that pageflag for page is calculated based on original values storage/maria/ma_search.c: Ensure that prev_length structure variable is properly reset when not used storage/myisam/mi_search.c: Ensure that prev_length structure variable is properly reset when not used
-
- 18 Aug, 2008 2 commits
-
-
Michael Widenius authored
-
Michael Widenius authored
Don't write out states if they haven't changed sql/sql_base.cc: Call extra(HA_EXTRA_PREPARE_FOR_DROP) before doing a drop of a table More DBUG sql/sql_table.cc: Call extra(HA_EXTRA_PREPARE_FOR_RENAME) before renaming a table storage/maria/ha_maria.cc: Ensure that file->trn is set when we call extra(HA_EXTRA_PREPARE_FOR_DROP/RENAME) storage/maria/ma_close.c: When doing close, assert if we have pointers in trn->table_list that points to the MARIA_SHARE storage/maria/ma_extra.c: Reset info->state_start in case of drop/rename. This fixes the problem of accessing freed memory in repair Don't write state changed if they haven't changed storage/maria/ma_open.c: Reset share->changed after we have written out a state (speed optimization to not write states when they haven't changed) storage/maria/ma_state.c: Decrement share->in_trans properly in DBUG_BINARY to ensure that the DBUG_ASSERT() in maria_close() works More DBUG
-
- 16 Aug, 2008 1 commit
-
-
Sergei Golubchik authored
storage/maria/ma_search.c: when we found a matching key on the node page and want to search in the left leaf we must use only SEARCH_FIND flag, and never SEARCH_BIGGER, SEARCH_SMALLER, or SEARCH_LAST
-
- 11 Aug, 2008 1 commit
-
-
Sergei Golubchik authored
typo fixed. mysql-test/r/maria.result: new test case mysql-test/t/maria.test: new test case sql/sql_select.cc: ctags friendly storage/maria/ma_blockrec.c: typo fixed
-
- 12 Jul, 2008 2 commits
-
-
Michael Widenius authored
mysql-test/r/maria2.result: Manual merge
-
Michael Widenius authored
Reset history when we reenable logging for transactional tables (safety fix) mysql-test/r/maria2.result: New results mysql-test/t/maria2.test: Added test case for alter table on locked maria table mysql-test/valgrind.supp: Added suppression rules for warnings in libc / libld storage/maria/ma_extra.c: Remove table from trnman list if we are going to drop or rename it; We don't want not existing shares in the list when we do commit! storage/maria/ma_recovery.c: Ensure that info->state don't point to history event when we disable logging for a table; This is needed as alter table will first do commit and then unlock, which would cause us to access a non existing object when we reenable logging. Reset history when we reenable logging (safety fix) storage/maria/ma_state.c: Do less work when share->now_transactional is not set. (Safety fix) Added function to remove shares to be deleted from trnman->used_tables Added function to reset history to current context storage/maria/ma_state.h: Prototypes for new function
-
- 11 Jul, 2008 1 commit
-
-
Guilhem Bichot authored
used TL_WRITE_CONCURRENT_INSERT though they may update/delete a row. This could cause concurrent SELECTs to see a changing table while the SELECT happens, or if the query was made of a group of SELECTs, some SELECTs would see different versions of the table. And anyway versioning in Maria was so far coded to support only insertions. REPLACE SELECT, INSERT VALUES ON DUPLICATE KEY UPDATE, LOAD DATA REPLACE were ok. mysql-test/r/maria2.result: result. Without the code fix, the assertion added to ha_maria::update_row() would fire twice. mysql-test/t/maria2.test: test when INSERT ON DUPLICATE KEY UPDATE and LOAD DATA CONCURRENT REPLACE do update rows storage/maria/ha_maria.cc: Assert that update_row and delete_row never see TL_WRITE_CONCURRENT_INSERT. INSERT SELECT ON DUPLICATE KEY UPDATE and LOAD DATA CONCURRENT REPLACE must upgrade TL_WRITE_CONCURRENT_INSERT to TL_WRITE because they may update/delete a row.
-
- 10 Jul, 2008 2 commits
-
-
Guilhem Bichot authored
Porting bugfix made by Serg (for bug37276_reduced_corruption.sql of BUG#37276 "Maria: various index corruption, block format assertion failure") from 6.0-maria to 5.1-maria.
-
Guilhem Bichot authored
main.func_misc main.grant_cache_no_prot main.lowercase_table_grant main.mysql_client_test main.query_cache main.query_cache_notembedded main.query_cache_ps_no_prot storage/maria/ha_maria.cc: missing DBUG_RETURN
-
- 09 Jul, 2008 6 commits
-
-
Guilhem Bichot authored
-
Guilhem Bichot authored
this was true also for INSERT SELECT, UPDATE, DELETE. This fix will be removed when Maria supports COMMIT/ROLLBACK ("Maria 2.0"), because then Maria will trans_register_ha() and so participate in ha_commit_trans(). Without the fix, the assertion added to ha_maria::external_lock() fires many times in *maria*.test. sql/sql_parse.cc: Before sending OK to client, commit transaction in Maria. storage/maria/ha_maria.cc: Assertion added to external_lock() when committing: OK should not have been sent yet (ACI*D*). In ha_maria::implicit_commit(), possibility to not create a new transaction, this is used before net_end_statement(), when the next step is close_thread_tables(); in this use case, ha_maria::implicit_commit() should not commit if under LOCK TABLES. storage/maria/ha_maria.h: new prototype
-
Michael Widenius authored
- Fixes key corruption where pages wasn't marked that they contained transid. - Fixed bug in block record that could create too small rows when transid was removed. This fixed some asserts() when testing block length Added --abort-source-on-error to the mysql client. (Very helpfull when debugging wrong .sql files) client/client_priv.h: Added enum for new option to mysql client/mysql.cc: Added new option --abort-source-on-error to allow one to get 'source' to stop on error. This is 0 by default, to keep old behaviour. Print file name and line number when getting an error when doing source filename sql/field.cc: Removed old dead code sql/sql_class.cc: Removed old dead code storage/maria/ma_blockrec.c: Added checking of min block length to check_directory() When creating new directory entry, set length to 0; This ensures that the assert checks() on block lengths works properly. Added more DBUG_ASSERT() and more calls to check_directory() In get_head_or_tail_page(), send in correct min_block_length. This is now safe as the length of new blocks are now 0 storage/maria/ma_delete.c: When moving key to parent page, mark page if key has transid storage/maria/ma_write.c: Fixed bug where _ma_find_last_pos() didn't set int_key->flag. Simpilifed code by unrolling loop.
-
Guilhem Bichot authored
Test for fix made by Monty for BUG#37276 (CHECK TABLE said Invalid key block position: 15731098820608 key +# block size: 8192 file_length: 425984). Other corruption cases still not fixed. Without the fix, the test would yield the corruption message in CHECK TABLE. mysql-test/r/maria-big2.result: result mysql-test/t/maria-big2.test: test for bugfix
-
Guilhem Bichot authored
- lifting a limit: INSERT|REPLACE SELECT and LOAD DATA always prevented versioning, now what do so is if the table is empty. - lifting another limit: versioning was disabled if table had more than one unique index - correcting test of statement-based binlogging, when converting read locks to TL_READ_NO_INSERT KNOWN_BUGS.txt: removing mostly fixed limitation (see ha_maria.cc) mysql-test/r/maria-mvcc.result: result update mysql-test/t/maria-mvcc.test: now when table is empty it does not do versioning, so test hung; inserting one row at start of the test, to enable versioning. sql/sql_parse.cc: Maria team wrongly removed this "break", thanks Davi for noticing storage/maria/ha_maria.cc: - We used to prevent versioning in INSERT/REPLACE SELECT and LOAD DATA, because the index rebuild done by bulk insert sometimes, is unsafe when versioning is on. Here we change that: in store_lock(), if the table is empty (which is required for index rebuild to be used), we disable versioning; in start_bulk_insert(), we don't do index rebuild if versioning is enabled. - Test for statement-based binlogging was incomplete: statement-based binlogging is on for this statement if binlog is open and statement has binlogging enabled and statement is not doing row-based binlogging storage/maria/ma_open.c: Monty and I agreed that it's ok to have versioning on a table with more than one unique index: if an INSERT hits a duplicate key when inserting the second index' key, no other thread should be able to touch the first index' just-inserted key, because that key has an uncommitted transaction id, so the first thread should have time to remove the first index' key.
-
Guilhem Bichot authored
- after auto-zerofill (ha_maria::check_and_repair()) kepts its state's LSNs unchanged, which could be the same as the create_rename_lsn of another pre-existing table, which would break versioning as this LSN serves as unique identifier in the versioning code (in maria_open()). Even the state pieces which maria_zerofill() did change were lost (because they didn't go to disk). - after this fix, if two tables were auto-zerofilled at the same time (by _ma_mark_changed()) they could receive the same create_rename_lsn, which would break versioning again. Fix is to write a log record each time a table is imported. - Print state's LSNs (create_rename_lsn, is_of_horizon, skip_redo_lsn) and UUID in maria_chk -dvv. mysql-test/r/maria-autozerofill.result: result mysql-test/t/maria-autozerofill.test: Test for auto-zerofilling storage/maria/ha_maria.cc: The state changes done by auto-zerofilling never reached disk. storage/maria/ma_check.c: When zerofilling a table, including its pages' LSNs, new state LSNs are needed next time the table is imported into a Maria instance. storage/maria/ma_create.c: Write LOGREC_IMPORTED_TABLE when importing a table. This is informative and ensures that the table gets a unique create_rename_lsn even though multiple tables are imported by concurrent threads (it advances the log's end LSN). storage/maria/ma_key_recover.c: comment storage/maria/ma_locking.c: instead of using translog_get_horizon() for state's LSNs of imported table, use the LSN of to-be-written LOGREC_IMPORTED_TABLE. storage/maria/ma_loghandler.c: New type of log record storage/maria/ma_loghandler.h: New type of log record storage/maria/ma_loghandler_lsn.h: New name for constant as can be used not only by maria_chk but auto-zerofill now too. storage/maria/ma_open.c: instead of using translog_get_horizon() for state's LSNs of imported table, use the LSN of to-be-written LOGREC_IMPORTED_TABLE. storage/maria/ma_recovery.c: print content of LOGREC_IMPORTED_TABLE in maria_read_log. storage/maria/maria_chk.c: print info about LSNs of the table's state, and UUID, when maria_chk -dvv storage/maria/maria_pack.c: new name for constant storage/maria/unittest/ma_test_recovery.pl: Now that maria_chk -dvv shows state LSNs and UUID those need to be filtered out, as maria_read_log -a does not use the same as at original run.
-
- 05 Jul, 2008 2 commits
-
-
Michael Widenius authored
-
Michael Widenius authored
Fixed several (but not all) issues found by the test program: - ASSERT on row_length in ma_blockrec.c::_ma_compact_block_page() - Fixed bug when splitting node pages - Fixed hang in 'closeing tables' (conflicting mutex order) by ensuring we first take trnman lock and then share->intern_lock storage/maria/ma_blockrec.c: When compacting a row page when allocating space for a new row, the min length of a the new block may be temporarly smaller than 'min_block_length'. storage/maria/ma_check.c: More DBUG output storage/maria/ma_checkpoint.c: Call new function _ma_remove_not_visible_states_with_lock() to ensure we first take lock on trnman and then on share->intern_lock + storage/maria/ma_close.c: Added comment storage/maria/ma_open.c: Added comment storage/maria/ma_search.c: Copy also node data; Caused bug when splitting node pages storage/maria/ma_state.c: Added _ma_remove_not_visible_states_with_lock() to ensure we take locks in right order storage/maria/ma_state.h: Added new prototype storage/maria/trnman.c: Added trnman_lock() and trnman_unlock(). Needed by _ma_remove_not_visible_states_with_lock() to get mutex in right order storage/maria/trnman_public.h: Added new prototypes
-
- 03 Jul, 2008 1 commit
-
-
Guilhem Bichot authored
What varies accross machine is maria_pagecache_read_requests, but maria_pagecache_reads doesn't and is the most interesting (helps verify that disk wasn't touched after preloading), that's all we keep. mysql-test/r/maria-preload.result: unrepeatable variable removed mysql-test/t/maria-preload.test: unrepeatable variable removed storage/maria/ma_test_force_start.pl: portability fix for running under Windows
-
- 02 Jul, 2008 1 commit
-
-
Guilhem Bichot authored
mysql-test/r/maria-preload.result: new result. mysql-test/t/disabled.def: re-enabling test mysql-test/t/maria-preload.test: Background dirty pages flushing may influence page cache stats
-
- 01 Jul, 2008 1 commit
-
-
Guilhem Bichot authored
in the last days: substitution in tests has to work for absolute datadir (/dev/shm/...); internal temp tables (like information_schema) can be Maria; Maria may not be compiled in; splitting too long maria.test in two; mtr --embedded runs in mysql-test not mysql-test/var/master-data so we need some absolute paths in tests; can't restart mysqld in --embedded; missing DBUG_VOID_RETURN in mysqltest.c (fix from Serg); is_collation_character_set_applicability.test was too long name which broke tar's 99-char limit.
-
- 30 Jun, 2008 4 commits
-
-
Guilhem Bichot authored
mysql-test/r/maria-recovery.result: cutting test in two mysql-test/r/maria-recovery2.result: cutting test in two mysql-test/t/maria-recovery.test: cutting test in two mysql-test/t/maria-recovery2-master.opt: cutting test in two mysql-test/t/maria-recovery2.test: cutting test in two
-
Guilhem Bichot authored
Fix for BUG#37288 "Maria - zerofill corrupts table". Testcase is running ma_test_recovery.pl on Windows. storage/maria/ma_blockrec.c: comment storage/maria/ma_check.c: When zerofilling the data file, _ma_compact_block_page() may increase free space in a page so bitmap page needs to be corrected.
-
Guilhem Bichot authored
maria-preload will be re-enabled later because other pieces of it have possibly random output. storage/maria/ma_check.c: Fix for BUG#35107 "maria-preload.test is disabled because causes assertion".
-
Guilhem Bichot authored
storage/maria/ma_test1.c: rec_length was too short by one byte: at line 299 memcpy(record,read_record,rec_length) thus didn't copy the last byte, so 'record' was not ok for use by update_record(), contained an incomplete blob address, sometimes crashed on Itanium. storage/maria/unittest/ma_test_loghandler_multithread-t.c: Tests failed once, never before for hundreds of times, we don't know if test is correct, disabling.
-
- 28 Jun, 2008 5 commits
-
-
Michael Widenius authored
The reason for this is that if we change one unique key and then get a failure on the second, we may not be able to rename the first one back before someone else writes the same key value. In Maria 2.0, when we keep deleted key values in the tree, this will not be a problem anymore Fixed typedisable concurrent insert/select for SQLCOM_LOAD as there are problems with concurrent threads during index recreation KNOWN_BUGS.txt: More comments storage/maria/ha_maria.cc: Fixed typo (REPLACE -> INSERT) Also disable concurrent insert/select for SQLCOM_LOAD as there are problems with concurrent threads during index recreation storage/maria/ma_open.c: Disable versioning (concurrent writes) if more than one unique key
-
Michael Widenius authored
Added some minor changes that was done in my tree while waiting for test to run: - Remove in Maria T_QUICK when retrying repair for enabling indexes, as the record file may be in use by other threads - Disable code that is only relevant for EXTERNAL_LOCKING include/m_string.h: Automatic merge storage/maria/ha_maria.cc: Remove T_QUICK when retrying repair for enabling indexes, as the record file may be in use by other threads storage/maria/ma_check.c: Automatic merge storage/maria/ma_key.c: Automatic merge storage/maria/ma_loghandler.c: Automatic merge storage/maria/ma_open.c: Disable code that is only relevant for EXTERNAL_LOCKING storage/maria/ma_sp_key.c: Automatic merge storage/maria/ma_write.c: Automatic merge storage/maria/trnman.c: Automatic merge
-
Michael Widenius authored
This also adds a check that MyISAM tables with incompatible checksums are detected by CHECK TABLE ... [FOR UPGRADE] and thus also by mysql_upgrade. The tables that are incomatible are MyISAM tables with ROW_FORMAT=fixed and has VARCHAR fields and have CHECKSUM enabled. Before these tables gave different checksum if you used CHECK TABLE with or without EXTENDED mysql-test/r/old-mode.result: Now we get same results with and without EXTENDED mysql-test/r/row-checksum-old.result: Initial results mysql-test/r/row-checksum.result: Initial results mysql-test/t/old-mode.test: Added test with QUICK to show that the live checksum is not used when running with --old mysql-test/t/row-checksum-old-master.opt: Start mysqld with --old mode to enable old checksum code mysql-test/t/row-checksum-old.test: Run row-checksum test under mysqld --old mysql-test/t/row-checksum.test: Verify that checksum are calculated the same way with and without EXTENDED We run this with several storage engines to ensure results are the same over storage engines sql/ha_partition.cc: Use new HA_HAS_xxx_CHECKSUM flags sql/handler.cc: Use new HA_HAS_xxx_CHECKSUM flags sql/handler.h: Split HA_HAS_CHECKSUM into HA_HAS_NEW_CHECKSUM and HA_HAS_OLD_CHECKSUM flags. This is a safe API change as only MyISAM and Maria should use these handler flags. sql/sql_show.cc: Use new HA_HAS_xxx_CHECKSUM flags sql/sql_table.cc: Use file->checksum() for live checksums if the life checksum method corresponds to the mysqld --old flag storage/maria/ha_maria.cc: Use new HA_HAS_xxx_CHECKSUM flags storage/myisam/ha_myisam.cc: Set HA_HAS_OLD_CHECKSUM and/or HA_HAS_NEW_CHECKSUM flags depending on if this is a new myisam or old myisam file Add method check_for_upgrade() to detect if the table is of old version with a checksum that is incompatible with CHECK TABLE ... EXTENDED storage/myisam/ha_myisam.h: Added check_for_upgrade() storage/myisam/mi_open.c: Removed not neede cast Initialize share->has_null_fields and share->has_varchar_fields variables storage/myisam/myisamdef.h: Added share->has_null_fields and share->has_varchar_fields
-
Sergei Golubchik authored
-
Michael Widenius authored
Fixed also some similar issues in MyISAM. This was not noticed before as MyISAM did a second retry without key cache (which just made the second repair attempty slower) storage/maria/ha_maria.cc: Print information if we retry without quick in case of CHECK TABLE table_name QUICK Remove T_QUICK flag when retrying repair, but set T_SAFE_REPAIR to ensure we don't loose any rows Remember T_RETRY_WITH_QUICK flag when restoring repair flags Don't print 'checking table' if we are not checking table in auto-repair Don't use T_QUICK in auto repair (safer) Changed parameter of type HA_PARAM ¶m to HA_PARAM *param storage/maria/ha_maria.h: Changed parameter of type HA_PARAM ¶m to HA_PARAM *param storage/maria/ma_check.c: Added retry without T_QUICK if there is a problem reading a row in BLOCK_RECORD storage/myisam/ha_myisam.cc: Remove T_QUICK flag when retrying repair, but set T_SAFE_REPAIR to ensure we don't loose any rows Remember T_RETRY_WITH_QUICK flag when restoring repair flags
-
- 26 Jun, 2008 4 commits
-
-
unknown authored
-
unknown authored
storage/maria/ma_loghandler.c: Processed case when current buffer filled but there is no new LSN in the buffer generated (so it is no need to fluesh this buffer) and buffer->last_lsn is LSN_IMPOSSIBLE.
-
Guilhem Bichot authored
include/m_string.h: new macro like LINT_INIT but for struct. In m_string.h because bzero() becomes available only there storage/maria/ma_check.c: compiler error under Windows (declaration after statements...) storage/maria/ma_key.c: trnman.h is not in include/ but in storage/maria storage/maria/ma_sp_key.c: trnman.h is not in include/ but in storage/maria storage/maria/ma_write.c: avoid compiler warning (org_key.flag may be used uninitialized)
-
Michael Widenius authored
.bzr-mysql/default.conf: Automatic merge config/ac-macros/plugins.m4: Automatic merge configure.in: Automatic merge include/my_global.h: Automatic merge mysql-test/include/maria_empty_logs.inc: Use Guilmhems version, but don't echo use database mysql-test/r/maria-no-logging.result: Automatic merge mysql-test/r/maria-page-checksum.result: Automatic merge mysql-test/r/maria-recover.result: Automatic merge mysql-test/r/maria2.result: Automatic merge mysql-test/t/maria-no-logging.test: Automatic merge mysql-test/t/maria-page-checksum.test: Automatic merge mysql-test/t/maria-purge.test: Automatic merge mysql-test/t/maria-recover.test: Automatic merge mysql-test/t/maria2.test: Automatic merge sql/sql_table.cc: Automatic merge storage/maria/CMakeLists.txt: Automatic merge storage/maria/ma_ft_parser.c: Automatic merge storage/maria/ma_loghandler.c: Automatic merge storage/maria/ma_recovery.c: Automatic merge storage/maria/ma_rt_test.c: Manual merge storage/maria/ma_state.c: Automatic merge storage/maria/ma_test_force_start.pl: Automatic merge storage/maria/plug.in: Automatic merge storage/maria/unittest/CMakeLists.txt: Automatic merge storage/maria/unittest/Makefile.am: Automatic merge storage/maria/unittest/ma_test_all-t: Automatic merge storage/maria/unittest/ma_test_loghandler_multithread-t.c: Automatic merge storage/maria/unittest/ma_test_recovery.pl: Automatic merge storage/myisam/rt_test.c: Automatic merge
-