summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Minor spelling fixes in code comments, docs and outputOtto Kekäläinen2018-01-1221-32/+32
| | | | | This commit does not touch any variable names or any other actual code, and thus should not in any way affect how the code works.
* After-merge fix to innodb.log_corruptionMarko Mäkelä2018-01-112-4/+11
|
* Merge bb-10.2-ext into 10.3Marko Mäkelä2018-01-1157-183/+929
|\
| * Merge 10.2 into bb-10.2-extMarko Mäkelä2018-01-1177-429/+1145
| |\
| | * Removed duplicated copyright messageMonty2018-01-111-16/+1
| | |
| | * Fix compilation warnings for libmariadbMarko Mäkelä2018-01-111-0/+0
| | |
| | * Merge 10.1 into 10.2Marko Mäkelä2018-01-1116-182/+327
| | |\
| | | * Skip mariabackup.huge_lsn if encryption is not availableMarko Mäkelä2018-01-111-0/+1
| | | |
| | | * Merge 10.0 into 10.1Marko Mäkelä2018-01-1111-68/+233
| | | |\
| | | | * Merge 5.5 into 10.0Marko Mäkelä2018-01-1111-68/+234
| | | | |\
| | | | | * MDEV-14916 InnoDB reports warning for "Purge reached the head of the history ↵Marko Mäkelä2018-01-112-52/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | list" The warning was originally added in commit c67663054a7db1c77dd1dbc85b63595667a53500 (MySQL 4.1.12, 5.0.3) to trace claimed undo log corruption that was analyzed in https://lists.mysql.com/mysql/176250 on November 9, 2004. Originally, the limit was 20,000 undo log headers or transactions, but in commit 9d6d1902e091c868bb288e0ccf9f975ccb474db9 in MySQL 5.5.11 it was increased to 2,000,000. The message can be triggered when the progress of purge is prevented by a long-running transaction (or just an idle transaction whose read view was started a long time ago), by running many transactions that UPDATE or DELETE some records, then starting another transaction with a read view, and finally by executing more than 2,000,000 transactions that UPDATE or DELETE records in InnoDB tables. Finally, when the oldest long-running transaction is completed, purge would run up to the next-oldest transaction, and there would still be more than 2,000,000 transactions to purge. Because the message can be triggered when the database is obviously not corrupted, it should be removed. Heavy users of InnoDB should be monitoring the "History list length" in SHOW ENGINE INNODB STATUS; there is no need to spam the error log.
| | | | | * MDEV-13933: Wrong results in COUNT() query with EXISTS and exists_to_inOleksandr Byelkin2018-01-107-16/+206
| | | | | | | | | | | | | | | | | | | | | | | | Roll back to most general duplicate removing strategi in case of different stratagies for one position.
| | | | | * MDEV-13814 Extra logging when innodb_log_archive=ONMarko Mäkelä2018-01-102-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Backport the fix from 10.0.33 to 5.5, in case someone compiles XtraDB with -DUNIV_LOG_ARCHIVE
| | | | | * MDEV-14174 crash on start with innodb-track-changed-pagesMarko Mäkelä2018-01-102-7/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The XtraDB option innodb_track_changed_pages causes the function log_group_read_log_seg() to be invoked even when recv_sys==NULL, leading to the SIGSEGV. This regression was caused by MDEV-11027 InnoDB log recovery is too noisy
| | | * | | MDEV-14776: InnoDB Monitor output generated by specific error is flooding ↵Jan Lindström2018-01-094-140/+109
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | error logs innodb/buf_LRU_get_free_block Add debug instrumentation to produce error message about no free pages. Print error message only once and do not enable innodb monitor. xtradb/buf_LRU_get_free_block Add debug instrumentation to produce error message about no free pages. Print error message only once and do not enable innodb monitor. Remove code that does not seem to be used. innodb-lru-force-no-free-page.test New test case to force produce desired error message.
| | * | | | Silence warning coming from Windows' own header dbghelp.hVladislav Vaintroub2018-01-101-0/+13
| | | | | |
| | * | | | Update CONCVladislav Vaintroub2018-01-101-0/+0
| | | | | |
| | * | | | Fixed BUILD scriptsMonty2018-01-102-4/+47
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Skip 'clean' if not a git repository (Good for tar files) - Add configuration for ASAN builds
| | * | | | MDEV-14130 InnoDB messages should not refer to the MySQL 5.7 manualMarko Mäkelä2018-01-1025-119/+115
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Replace most occurrences of the REFMAN macro. For some pages there is no replacement yet.
| | * | | | MDEV-14909 MariaDB 10.2 refuses to start up after clean shutdown of MariaDB 10.3Marko Mäkelä2018-01-106-17/+191
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | recv_log_recover_10_3(): Determine if a log from MariaDB 10.3 is clean. recv_find_max_checkpoint(): Allow startup with a clean 10.3 redo log. srv_prepare_to_delete_redo_log_files(): When starting up with a 10.3 log, display a "Downgrading redo log" message instead of "Upgrading".
| | * | | | Windows, compilation : Treat warning as error, if MYSQL_MAINTAINER_MODEVladislav Vaintroub2018-01-091-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | is set to ERR This matches gcc/clang handling.
| | * | | | Fixed mdev-14879 Lost rows for query using recursive CTEIgor Babaev2018-01-093-0/+132
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | with recursive reference in subquery If a recursive CTE uses a subquery with recursive reference then the virtual function reset() must be called after each iteration performed at the execution of the CTE.
| | * | | | Revert part of commit fec844aca88e1c6b9c36bb0b811e92d9d023ffb9Marko Mäkelä2018-01-091-11/+0
| | | | | | | | | | | | | | | | | | | | | | | | row_insert_for_mysql(): Remove some duplicated code
| | * | | | Merge 10.1 into 10.2Marko Mäkelä2018-01-082-2/+5
| | |\ \ \ \ | | | |/ / /
| | | * | | Make the MDEV-14874 test case more robustMarko Mäkelä2018-01-082-2/+5
| | | | | |
| | * | | | Merge 10.1 into 10.2Marko Mäkelä2018-01-084-4/+46
| | |\ \ \ \ | | | |/ / /
| | | * | | Merge 10.0 into 10.1Marko Mäkelä2018-01-084-2/+43
| | | |\ \ \ | | | | |/ /
| | | | * | MDEV-13205 InnoDB: Failing assertion: !dict_index_is_online_ddl(index) upon ↵Marko Mäkelä2018-01-084-2/+43
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ALTER TABLE dict_foreign_find_index(): Ignore incompletely created indexes. After a failed ADD UNIQUE INDEX, an incompletely created index could be left behind until the next ALTER TABLE statement.
| | * | | | MLOG-13101 Debug assertion failed in recv_parse_or_apply_log_rec_body()Marko Mäkelä2018-01-081-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | recv_parse_or_apply_log_rec_body(): Tolerate MLOG_4BYTES for dummy-writing the FIL_PAGE_SPACE_ID, written by fil_crypt_rotate_page().
| | * | | | MDEV-13487 Assertion failure in rec_get_trx_id()Marko Mäkelä2018-01-081-7/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | rec_get_trx_id(): Because rec is not necessarily residing in a buffer pool page (it could be an old version of a clustered index record, allocated from heap), remove the debug assertions that depend on page_align(rec).
| | * | | | MDEV-13262: innodb.deadlock_detect failed in buildbotJan Lindström2018-01-082-7/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There is a race condition on a test. con1 is the older transaction as it query started wait first. Test continues so that con1 gets lock wait timeout first. There is possibility that default connection gets lock timeout also or as con1 is rolled back it gets the locks it waited and does the update. Fixed by removing query outputs as they could vary and accepting success from default connection query.
| | * | | | Merge 10.1 into 10.2Marko Mäkelä2018-01-086-46/+33
| | |\ \ \ \ | | | |/ / /
| | | * | | MDEV-14874 innodb_encrypt_log corrupts the log when the LSN crosses 32-bit ↵Marko Mäkelä2018-01-0810-87/+124
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | boundary This bug affects both writing and reading encrypted redo log in MariaDB 10.1, starting from version 10.1.3 which added support for innodb_encrypt_log. That is, InnoDB crash recovery and Mariabackup will sometimes fail when innodb_encrypt_log is used. MariaDB 10.2 or Mariabackup 10.2 or later versions are not affected. log_block_get_start_lsn(): Remove. This function would cause trouble if a log segment that is being read is crossing a 32-bit boundary of the LSN, because this function does not allow the most significant 32 bits of the LSN to change. log_blocks_crypt(), log_encrypt_before_write(), log_decrypt_after_read(): Add the parameter "lsn" for the start LSN of the block. log_blocks_encrypt(): Remove (unused function).
| | * | | | Fix Compile Error while using Flag '-DUSE_ARIA_FOR_TMP_TABLES:BOOL=OFF'Sachin Setiya2018-01-072-5/+5
| | | | | |
| | * | | | Merge remote-tracking branch 'origin/10.1' into 10.2Vladislav Vaintroub2018-01-061-1/+2
| | |\ \ \ \ | | | |/ / /
| | | * | | Fix conf_to_src build.Vladislav Vaintroub2018-01-051-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 2cd316911309e3db4007aa224f7874bfbeb14032 broke conf_to_src, because strings library is now dependend on mysys (my_alloc etc are used now directly in string lib) Fix by adding appropriate dependency. Also exclude conf_to_src from VS IDE builds. EXCLUDE_FROM_ALL is not enough for that.
| | * | | | Merge branch '10.2' of https://github.com/mariadb/server into 10.2Vladislav Vaintroub2018-01-064-0/+151
| | |\ \ \ \
| | | * | | | Added the test case from for mdev-14777: Crash in MariaDB 10.2.12 on queryIgor Babaev2018-01-052-0/+62
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | using VIEW and WITH RECURSIVE. The cause of this crash was the same as of the crash reported in mdev-14755.
| | | * | | | Added a test case for mdev-13454: Improper error in ONLY_FULL_GROUP_BY sql_modeIgor Babaev2018-01-052-0/+89
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | with condition_pushdown_for_derived=on This bug is a consequence of the bug mdev-14368 fixed in 5.5.59.
| | * | | | | Merge branch '10.2' of https://github.com/mariadb/server into 10.2Vladislav Vaintroub2018-01-0588-5651/+2167
| | |\ \ \ \ \ | | | |/ / / /
| | | * | | | Fixed mdev-14852 Fails to reopen temp table within standard CTEIgor Babaev2018-01-055-25/+74
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If the specification of a CTE contains a reference to a temporary table then THD::open_temporary_table() must be called for this reference for any occurrence of the CTE in the query. By mistake this was done only for the first occurrences of CTEs. The patch fixes this problem in With_element::clone_parsed_spec(). It also moves there the call of check_dependencies_in_with_clauses() to its proper place before the call of check_table_access(). Additionally the patch optimizes the number of calls of the function check_dependencies_in_with_clauses().
| | * | | | | update libmariadbVladislav Vaintroub2018-01-041-0/+0
| | | | | | |
| * | | | | | MDEV-14824 Assertion `!trx_is_started(trx)' failed in ↵Marko Mäkelä2018-01-115-10/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | innobase_start_trx_and_assign_read_view In CREATE SEQUENCE or CREATE TEMPORARY SEQUENCE, we should not start an InnoDB transaction for inserting the sequence status record into the underlying no-rollback table. Because we did this, a debug assertion failure would fail in START TRANSACTION WITH CONSISTENT SNAPSHOT after CREATE TEMPORARY SEQUENCE was executed. row_ins_step(): Do not start the transaction. Let the caller do that. que_thr_step(): Start the transaction before calling row_ins_step(). row_ins_clust_index_entry(): Skip locking and undo logging for no-rollback tables, even for temporary no-rollback tables. row_ins_index_entry(): Allow trx->id==0 for no-rollback tables. row_insert_for_mysql(): Do not start a transaction for no-rollback tables.
| * | | | | | Fix warningVladislav Vaintroub2018-01-082-1/+6
| | | | | | |
* | | | | | | MDEV-14638 - Replace trx_sys_t::rw_trx_set with LF_HASHSergey Vojtovich2018-01-117-71/+55
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | trx reference counter was updated under mutex and read without any protection. This is both slow and unsafe. Use atomic operations for reference counter accesses.
* | | | | | | MDEV-14638 - Replace trx_sys_t::rw_trx_set with LF_HASHSergey Vojtovich2018-01-1120-463/+506
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | trx_sys_t::rw_trx_set is implemented as std::set, which does a few quite expensive operations under trx_sys_t::mutex protection: e.g. malloc/free when adding/removing elements. Traversing b-tree is not that cheap either. This has negative scalability impact, which is especially visible when running oltp_update_index.lua benchmark on a ramdisk. To reduce trx_sys_t::mutex contention std::set is replaced with LF_HASH. None of LF_HASH operations require trx_sys_t::mutex (nor any other global mutex) protection. Another interesting issue observed with std::set is reproducible ~2% performance decline after benchmark is ran for ~60 seconds. With LF_HASH results are stable. All in all this patch optimises away one of three trx_sys->mutex locks per oltp_update_index.lua query. The other two critical sections became smaller. Relevant clean-ups: Replaced rw_trx_set iteration at startup with local set. The latter is needed because values inserted to rw_trx_list must be ordered by trx->id. Removed redundant conditions from trx_reference(): it is (and even was) never called with transactions that have trx->state == TRX_STATE_COMMITTED_IN_MEMORY. do_ref_count doesn't (and probably even didn't) make any sense: now it is called only when reference counter increment is actually requested. Moved condition out of mutex in trx_erase_lists(). trx_rw_is_active(), trx_rw_is_active_low() and trx_get_rw_trx_by_id() were greatly simplified and replaced by appropriate trx_rw_hash_t methods. Compared to rw_trx_set, rw_trx_hash holds transactions only in PREPARED or ACTIVE states. Transactions in COMMITTED state were required to be found at InnoDB startup only. They are now looked up in the local set. Removed unused trx_assert_recovered(). Removed unused innobase_get_trx() declaration. Removed rather semantically incorrect trx_sys_rw_trx_add(). Moved information printout from trx_sys_init_at_db_start() to trx_lists_init_at_db_start().
* | | | | | | MDEV-14822 binlog.binlog_killed fails with wrong resultMonty2018-01-103-35/+48
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem was timing between the thread that was killed and reading the binary log. Updated the test to wait until the killed thread was properly terminated before checking what's in the binary log. To make check safe, I changed "threads_connected" to be updated after thd::cleanup() is done, to ensure that all binary logs updates are done before the variable is changed. This was mainly done to get the test deterministic and have now other real influence in how the server works.
* | | | | | | Follow-up to MDEV-14837: Relax a too strict assertionMarko Mäkelä2018-01-091-1/+1
| | | | | | |
* | | | | | | MDEV-14837 Duplicate primary keys are allowed after ADD COLUMN / UPDATEMarko Mäkelä2018-01-093-24/+56
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This bug affected tables where the PRIMARY KEY contains variable-length columns, and ROW_FORMAT is COMPACT or DYNAMIC. rec_init_offsets_comp_ordinary(): Do not short-cut the parsing of the record header for records that contain explicit values for instantly added columns. rec_copy_prefix_to_buf(): Copy more header for records that contain explicit values for instantly added columns.
* | | | | | | Follow-up to MDEV-12288: Add --debug=d,purge diagnosticsMarko Mäkelä2018-01-091-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | row_purge_reset_trx_id(): Display a DBUG message about resetting the DB_TRX_ID.