summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Fix a race conditionbb-10.5-MDEV-16678-rebase2Marko Mäkelä2019-12-054-51/+68
| | | | | dict_table_t::parse_name(): Convert an InnoDB table name to MDL. Use dict_sys.mutex to protect dict_table_t::name against renaming.
* Cleanup: more inline functions; formattingMarko Mäkelä2019-12-0510-92/+83
|
* Do not add dead codeMarko Mäkelä2019-12-051-9/+0
|
* Cleanup: Revert some sql/ changesMarko Mäkelä2019-12-054-32/+55
| | | | We do add get_purge_table() without proper interface.
* Cleanup: Remove release_mdl() and acquire_mdl()Marko Mäkelä2019-12-051-72/+49
|
* Do not add MDL changes to sql_class.hMarko Mäkelä2019-12-0511-96/+149
| | | | | | | | thd_innodb_lock_wait_timeout(): Renamed from thd_lock_wait_timeout() to avoid confusion. thd_lock_wait_timeout(), thd_mdl_context(): New interfaces, to be used for acquiring or releasing MDL.
* Merge 10.5Marko Mäkelä2019-12-05163-24550/+7345
|\
| * MDEV-21174: Fix undefined behaviourMarko Mäkelä2019-12-051-1/+1
| | | | | | | | | | ibuf_bitmap_page_set_bits(): Do not attempt to shift by a negative amount. This bug was introduced in commit 87839258f86196dfca1d3af2a947e570e13eeb94.
| * MDEV-21225: Fix warningsMarko Mäkelä2019-12-052-4/+3
| | | | | | | | | | | | | | Datafile::find_space_id(): Remove an unused variable buf_chunk_init(): warning C4319: '~': zero extending 'ulong' to 'ulint' of greater size
| * A cleanup for MDEV-17088 Provide tools to encode/decode mysql-encoded file ↵Alexander Barkov2019-12-0513-66/+411
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | system names - Load and convert the entire input file at once, rather than reading string-by-string using fgets(). This change makes it possible to convert from UCS2, UTF16, UTF32 data. - Adding the --delimiter command, to treat the specified characters as delimiters rather than data to convert. Useful in combination with `-f filename` or `-t filename`. The delimiter characters are not converted, they are copied from the input to the output as is. - Adding diagnostics with line number and position if: * an illegal input byte sequence was found * a character cannot be converted to the target character set
| * MDEV-21225 Remove ut_align() and use aligned_malloc()Marko Mäkelä2019-12-0521-236/+97
| | | | | | | | | | | | | | | | | | | | Before commit 90c52e5291b3ad0935df7da56ec0fcbf530733b4 introduced aligned_malloc(), InnoDB always used a pattern of over-allocating memory and invoking ut_align() to guarantee the desired alignment. It is cleaner to invoke aligned_malloc() and aligned_free() directly. ut_align(): Remove. In assertions, ut_align_down() can be used instead.
| * MDEV-21216: Remove fsp_header_get_space_id()Marko Mäkelä2019-12-047-86/+62
| | | | | | | | | | | | | | | | | | The function fsp_header_get_space_id() returns ulint instead of uint32_t, only to be able to complain that the two adjacent tablespace ID fields in the page differ. Remove the function, and merge the check to the callers. Also, make some more use of aligned_malloc().
| * MDEV-21174: Fix GaleraMarko Mäkelä2019-12-041-9/+12
| | | | | | | | | | | | trx_rseg_write_wsrep_checkpoint(): Use mtr_t::OPT, because much of the time, the redo log writes would be redundant. This was broken in commit 56f6dab1d0e5a464ea49c1e5efb0032a0f5cea3e.
| * MDEV-19514: Update stale commentsMarko Mäkelä2019-12-042-21/+7
| |
| * MDEV-21216 InnoDB does dirty read of TRX_SYS page before recoveryMarko Mäkelä2019-12-048-346/+291
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | InnoDB startup was discovering undo tablespaces in a dirty way. It was reading a possibly stale copy of the TRX_SYS page before processing any redo log records. srv_start(): Do not call buf_pool_invalidate(). Invoke trx_rseg_get_n_undo_tablespaces() after the recovery has been initiated. recv_recovery_from_checkpoint_start(): Assert that the buffer pool is empty. This used to be guaranteed by the buf_pool_invalidate() call. trx_rseg_get_n_undo_tablespaces(): Move to the calling compilation unit, and reimplement in a simpler way. srv_undo_tablespace_create(): Remove the constant parameter size=SRV_UNDO_TABLESPACE_SIZE_IN_PAGES. srv_undo_tablespace_open(): Reimplement in a cleaner way, with more robust error handling. srv_all_undo_tablespaces_open(): Split from srv_undo_tablespaces_init(). srv_undo_tablespaces_init(): Read all "undo001","undo002" tablespace files directly, without consulting the TRX_SYS page via calling trx_rseg_get_n_undo_tablespaces(). This is joint work with Thirunarayanan Balathandayuthapani.
| * Cleanup: use constexpr for SRV_UNDO_TABLESPACE_SIZE_IN_PAGESMarko Mäkelä2019-12-042-6/+3
| |
| * Part2: MDEV-12518 Unify sql_yacc.yy and sql_yacc_ora.yyVladislav Vaintroub2019-12-045-19058/+40
| | | | | | | | | | Generate sql_yacc_ora.yy from sql_yacc.yy , by using cmake script which does some simple string(REPLACE)
| * Part1: MDEV-12518 Unify sql_yacc.yy and sql_yacc_ora.yyAlexander Barkov2019-12-042-54/+1533
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mixing %type and %expect declarations: - sql_mode=ORACLE declarations look like an empty C code section inside sql_yacc.yy, consisting of an inactive #ifdef..#endif block. - sql_mode=DEFAULT declarations look like an empty C code section inside sql_yacc_ora.yy, consisting of an inactive #ifdef..#endif block. Mixing rules: - Adding a special rule _empty to the shared rule section. - Changing all instances of /*Empty*/ in sql_mode=DEFAULT and sql_mode=ORACLE specific sections to _empty. - Changing the rest of C style comments /*xxx*/ in sql_mode=DEFAULT and sql_mode=ORACLE specific blocks to C++ style: //xxx - Mixing sql_yacc.yy and sql_yacc_ora.yy, so sql_mode=ORACLE specific blocks sit in a comment inside sql_yacc.yy, and sql_mode=DEFAULT specific blocks sit in a comment inside sql_yacc_ora.yy.
| * MDEV-21205 Assertion failure in btr_sec_min_rec_markMarko Mäkelä2019-12-042-30/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In commit af5947f433e98d0447960da07856eb207dd09e01 the function btr_discard_page() is invoking btr_set_min_rec_mark() with the wrong buf_block_t* object. node_ptr is on merge_block, not block. btr_discard_page(): Remove the variables merge_page, page, and always refer to block->frame or merge_block->frame instead. Also, limit the scope of node_ptr and avoid duplicated conditions. btr_set_min_rec_mark(): Add a template parameter, so that the caller can specify whether the page is supposed to have a left sibling. Otherwise, the assertion (which was introduced in the same commit) would fail in btr_discard_page().
| * bump the VERSIONDaniel Bartholomew2019-12-031-1/+1
| |
| * MDEV-21174: Fix the 32-bit buildMarko Mäkelä2019-12-031-3/+6
| | | | | | | | | | mtr_t::write(): Add explicit narrowing type casts to avoid warnings about lossy implicit conversions.
| * MDEV-21174: Replace mlog_write_string() with mtr_t::memcpy()Marko Mäkelä2019-12-0313-155/+130
| | | | | | | | | | | | | | | | | | mtr_t::memcpy(): Replaces mlog_write_string(), mlog_log_string(). The buf_block_t is passed a parameter, so that mlog_write_initial_log_record_low() can be used instead of mlog_write_initial_log_record_fast(). fil_space_crypt_t::write_page0(): Remove the fil_space_t* parameter.
| * MDEV-21174: Replace mlog_memset() with mtr_t::memset()Marko Mäkelä2019-12-0318-219/+187
| | | | | | | | | | | | | | | | | | | | Passing buf_block_t helps us avoid calling mlog_write_initial_log_record_fast() and page_get_page_no(), and allows us to implement more debug checks, such as that on ROW_FORMAT=COMPRESSED index pages, only the page header may be modified by MLOG_MEMSET records. fseg_n_reserved_pages(): Add a buf_block_t parameter.
| * Cleanup: Remove some page_get_page_no() callsMarko Mäkelä2019-12-0310-115/+81
| | | | | | | | | | Refer to buf_page_t::id instead of parsing the tablespace identifier or page number from the buffer pool page.
| * MDEV-21174: Replace mlog_write_ulint() with mtr_t::write()Marko Mäkelä2019-12-0353-3554/+2758
| | | | | | | | | | | | | | | | | | | | | | mtr_t::write(): Replaces mlog_write_ulint(), mlog_write_ull(). Optimize away writes if the page contents does not change, except when a dummy write has been explicitly requested. Because the member function template takes a block descriptor as a parameter, it is possible to introduce better consistency checks. Due to this, the code for handling file-based lists, undo logs and user transactions was refactored to pass around buf_block_t.
| * MDEV-21174: Cleanup MLOG_PAGE_CREATEMarko Mäkelä2019-12-033-69/+18
| | | | | | | | | | | | page_create_write_log(), mlog_write_initial_log_record(): Merge to the only caller, and use mlog_write_initial_log_record_low() for writing the log record.
| * MDEV-16264: Minor cleanupMarko Mäkelä2019-12-033-11/+12
| | | | | | | | | | | | | | aio_linux::m_max_io_count: Unused data member; remove. aiocb::m_ret_len: Declare as the more compatible type size_t. Unfortunately, ssize_t is not available on Microsoft Visual Studio.
| * MDEV-12353 preparation: Do not write MLOG_REC_MIN_MARKMarko Mäkelä2019-12-035-56/+34
| | | | | | | | | | | | | | | | | | | | | | | | | | | | btr_set_min_rec_mark(): Write MLOG_1BYTE instead of MLOG_REC_MIN_MARK or MLOG_COMP_REC_MIN_MARK. On ROW_FORMAT=COMPRESSED pages, the minimum record flag is not stored at all. The flag is computed for the uncompressed page by page_zip_decompress(). Hence, nothing needs to be logged for ROW_FORMAT=COMPRESSED tables for this operation. To facilitate crash-upgrade and hot backup from older versions, we will retain the code to parse and apply the old log record types MLOG_REC_MIN_MARK and MLOG_COMP_REC_MIN_MARK.
| * MDEV-12353 preparation: Do not write MLOG_FILE_WRITE_CRYPT_DATAMarko Mäkelä2019-12-035-59/+79
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The MLOG_FILE_WRITE_CRYPT_DATA record was completely redundant. It can be replaced with a single MLOG_WRITE_STRING record. To facilitate upgrade from older versions, we will retain fil_parse_write_crypt_data(). fil_crypt_parse(): Recover fil_space_crypt_t::write_page0(). fil_space_crypt_t::write_page0(): Write everything in a single MLOG_WRITE_STRING for easy parsing. fil_space_crypt_t::page0_offset: Remove.
| * MDEV-21133: Remove buf_frame_copy()Marko Mäkelä2019-12-034-29/+4
| |
| * MDEV-17554 versioning partition tests reorganizeAleksey Midenkov2019-12-036-607/+613
| | | | | | | | Moved partition_rotation, partition_innodb to partition.test
| * MDEV-17554 history partitioning cleanupsAleksey Midenkov2019-12-0310-230/+283
| | | | | | | | | | | | | | * Fixed missed warning on condition boundary * REORGANIZE cases * vers_utils.h removed * test cases cleanup
| * Merge 10.4 into 10.5Aleksey Midenkov2019-12-0247-108/+1240
| |\
| | * Merge 10.3 into 10.4Aleksey Midenkov2019-12-0218-38/+278
| | |\
| | | * MDEV-18929 2nd execution of SP does not detect ER_VERS_NOT_VERSIONEDAleksey Midenkov2019-12-027-14/+71
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Don't do skip_setup_conds() unless all errors are checked. Fixes following errors: ER_PERIOD_NOT_FOUND ER_VERS_QUERY_IN_PARTITION ER_VERS_ENGINE_UNSUPPORTED ER_VERS_NOT_VERSIONED
| | | * MDEV-21011 Table corruption reported for versioned partitioned table after ↵Aleksey Midenkov2019-12-023-2/+42
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | DELETE: "Found a misplaced row" LIMIT history partitions cannot be checked by existing algorithm of check_misplaced_rows() because working history partition is incremented each time another one is filled. The existing algorithm gets record and tries to decide partition id for it by get_partition_id(). For LIMIT history it will just get first non-filled partition. To fix such partitions it is required to do REBUILD instead of REPAIR.
| | | * MDEV-21155 Assertion with versioned table upon DELETE from view of view ↵Aleksey Midenkov2019-12-024-6/+143
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | after replacing first view When view is merged by DT_MERGE_FOR_INSERT it is then skipped from processing and doesn't update WHERE clause with vers_setup_conds(). Note that view itself cannot work in vers_setup_conds() because it doesn't have row_start, row_end fields. Thus it is required to descend down to material TABLE_LIST through calls of mysql_derived_prepare() and run vers_setup_conds() from there. Luckily, all views (views of views, views of views of views, etc.) are linked in one list through next_global pointer, so we can skip all views of views and get straight to non-view TABLE_LIST by checking its merge_underlying_list property for zero value (it is assigned by DT_MERGE_FOR_INSERT for merged derived tables). We have to do that only for UPDATE and DELETE. Other DML commands don't use WHERE clause. MDEV-21146 Assertion `m_lock_type == 2' in handler::ha_drop_table upon LOAD DATA LOAD DATA does not use WHERE and the above call of vers_setup_conds() is not needed. unit->prepare() led to wrongly locked temporary table.
| | | * MDEV-21147 Assertion `marked_for_read()' upon UPDATE on versioned table via viewAleksey Midenkov2019-12-023-6/+38
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | "write set" for replication finally got its correct place (mark_columns_per_binlog_row_image()). When done generally in mark_columns_needed_for_update() it affects optimization algorithm. used_key_is_modified, query_plan.using_io_buffer are wrongly set and that leads to wrong prepare_for_keyread() which limits read_set.
| | | * MDEV-20441 ER_CRASHED_ON_USAGE upon update on versioned Aria tableAleksey Midenkov2019-12-027-9/+43
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Turn read cache off for update and multi-update for versioned table. no_cache is reinited on each TABLE open because it is applicable for specific algorithms. As a side fix vers_insert_history_row() honors vers_write setting. Aria with row_format=fixed uses IO_CACHE of type READ_CACHE for sequential read in update loop. When history row is inserted inside this loop the cache misses it and fails with error. TODO: Currently maria_extra() does not support SEQ_READ_APPEND. Probably it might be possible to use this type of cache.
| | | * fix ssl_crl test failures on newer OpenSSLSergei Golubchik2019-11-291-2/+2
| | | | | | | | | | | | | | | | generalize the replacement
| | | * Revert "Fix upgrade errors on eoan"Sergei Golubchik2019-11-291-10/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit 0d345ec2e358ec8f42865be9a17e6f007585931d. Upgrades from 8.0 don't work yet, one has to dump/restore manually to get the metadata out of the data dictionary.
| | | * Fix upgrade errors on eoanSergei Golubchik2019-11-281-0/+10
| | | | | | | | | | | | | | | | mariadb packages conflict with mysql-8.0
| | | * RPM packaging fixes for FC31Sergei Golubchik2019-11-281-3/+5
| | | | | | | | | | | | | | | | | | | | | | | | Obsoletes: cannot contain (x86-64) anymore Python shebang must be specific
| | | * MDEV-21167 LF_PINS::stack_ends_here inaccurate, leading to alloca() larger ↵Vladislav Vaintroub2019-11-282-10/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | than stack Use my_thread_var::stack_ends_here inside lf_pinbox_real_free() for address where thread stack ends. Remove LF_PINS::stack_ends_here. It is not safe to assume that mysys_var that was used during pin allocation, remains correct during free. E.g with binlog group commit in Innodb, that frees pins for multiple Innodb transactions, it does not work correctly.
| | | * MDEV-19669 - fix matching CIDR address for proxy protocol.Vladislav Vaintroub2019-11-271-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Prior to this fix, when matching addresses using mask, extra bits could be used for comparison, e.g to match with "a.b.c.d/24" , 27 bits were compared rather than 24. The patch fixes the calculation.
| | | * MDEV-21158 trx_undo_seg_free() is never redo-loggedMarko Mäkelä2019-11-271-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | As part of commit 3c09f148f362a587ac3267c31fd17da5f71a0b11 trx_undo_commit_cleanup() was always invoked with noredo=true. The impact of this should be that some undo log pages may not be correctly freed if the server is killed and crash recovery will be performed. Similarly, if mariabackup --backup is being executed concurrently with user transaction commits, it could happen that some undo log pages in the backup will never be marked as free for reuse. It seems that this bug should not have any user-visible impact other than some undo pages being wasted.
| | | * MDEV-18727 cleanupAleksey Midenkov2019-11-252-20/+0
| | | |
| | * | MDEV-18929 2nd execution of SP does not detect ER_VERS_NOT_VERSIONED (10.4)Aleksey Midenkov2019-12-029-28/+118
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Don't do skip_setup_conds() unless all errors are checked. Fixes following errors: ER_PERIOD_NOT_FOUND ER_VERS_QUERY_IN_PARTITION ER_VERS_ENGINE_UNSUPPORTED ER_VERS_NOT_VERSIONED
| | * | MDEV-18973 CLIENT_FOUND_ROWS wrong in spiderKentoku2019-11-2927-43/+846
| | |\ \ | | | | | | | | | | | | | | | | | | | | | | | | | Get count from last_used_con->info Contributed by willhan at Tencent Games Reviewed by Monty
| | | * | MDEV-18973 CLIENT_FOUND_ROWS wrong in spiderbb-10.4-MDEV-18973_2Kentoku2019-11-2927-43/+846
| | | | | | | | | | | | | | | | | | | | | | | | | Get count from last_used_con->info Contributed by willhan at Tencent Games