summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* MDEV-21174: Remove some mlog_write_initial_log_record_fast()Marko Mäkelä2019-12-139-153/+98
| | | | | | | | | | | | | | | | | | Pass buf_block_t* to more functions that write redo log. page_zip_write_node_ptr(), page_zip_write_blob_ptr(), page_zip_compress_write_log_no_data(): Take buf_block_t* as parameter, and do not tolerate mtr=NULL. page_zip_compress(): Do not tolerate mtr=NULL. page_zip_dir_insert(): Take page_cur_t* as parameter. mlog_write_initial_log_record(): Remove. This function was unused. RecIterator::remove(): Remove the redundant page_zip parameter. PageConverter::m_page_zip_ptr: Remove.
* MDEV-21174: Clean up record insertionMarko Mäkelä2019-12-136-42/+42
| | | | | | | page_cur_insert_rec_low(): Take page_cur_t* as a parameter, and do not tolerate mtr=NULL. page_cur_insert_rec_zip(): Do not tolerate mtr=NULL.
* MDEV-12353 preparation: Clean up page_cur_delete_rec()Marko Mäkelä2019-12-135-128/+63
| | | | | | | | page_cur_delete_rec(): Do not tolerate mtr=NULL. page_delete_rec(): Merge with the only caller, RecIterator::remove(). RecIterator::m_mtr: New data member: a dummy mini-transaction.
* MDEV-16678: Ignore stray #sql-ib tablesMarko Mäkelä2019-12-132-2/+2
| | | | | The adjustments in adb117cf6901a0e0da7577267be1209359892207 turned out to be insufficient.
* MDEV-21133: use aligned memcpy in redo log and buffer poolEugene Kosov2019-12-134-8/+15
|
* MDEV-21278 Assertion `is_unsigned() == attr.unsigned_flag' or Assertion ↵Alexander Barkov2019-12-133-3/+73
| | | | | | | `field.is_sane()' failed The type handler and unsigned_flag erroneously went out of sync in Item_func_minus::fix_length_and_dec.
* fix a memory leak introduced by f4b4284650cc787b8e4c9d4515dca1917cb138b5Eugene Kosov2019-12-121-0/+1
|
* MDEV-16678 Prefer MDL to dict_sys.latch for innodb background tasksEugene Kosov2019-12-113-19/+14
| | | | | | | | | | | | Use std::queue backed by std::deque instead of list because it does less allocations which still having O(1) push and pop operations. Also store trx_purge_rec_t directly, because its only 16 bytes and allocating it is to wasteful. This should be faster. purge_node_t::purge_node_t: container is already empty after creation purge_node_t::end(): replace clearing container with assertion that it's clear
* MDEV-16678: Fix a problem with duplicate #sql2 table namesbb-10.5-MDEV-16678-rebaseMarko Mäkelä2019-12-107-60/+184
| | | | | | | | | row_drop_table_for_mysql(): If a #sql2 table is open in another thread (purge) while we attempting to drop it, rename it to #sql-ib name to hide it from the SQL layer. Adjust tests accordingly to hide #sql-ib tables, which can continue to exist until the background DROP TABLE completes.
* MDEV-16678 Prefer MDL to dict_sys.latch for innodb background tasksMarko Mäkelä2019-12-1029-976/+693
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is joint work with Thirunarayanan Balathandayuthapani. The MDL interface between InnoDB and the rest of the server (in storage/innobase/dict/dict0dict.cc and in include/) is my work, while most everything else is Thiru's. The collection of InnoDB persistent statistics and the defragmentation were not refactored to use MDL. They will keep relying on lower-level interlocking with fil_check_pending_operations(). The purge of transaction history and the background operations on fulltext indexes will use MDL. We will revert commit 2c4844c9e76427525e8c39a2d72686085efe89c3 (MDEV-17813) because thanks to MDL, purge cannot conflict with DDL operations anymore. For a similar reason, we will remove the MDEV-16222 test case from gcol.innodb_virtual_debug_purge. Purge is essentially replacing all use of the global dict_sys.latch with MDL. Purge will skip the undo log records for tables whose names start with #sql-ib or #sql2. Theoretically, such tables might be renamed back to visible table names if TRUNCATE fails to create a new table, or the final rename in ALTER TABLE...ALGORITHM=COPY fails. In that case, purge could permanently leave some garbage in the table. Such garbage will be tolerated; the table would not be considered corrupted. To avoid repeated MDL releases and acquisitions, trx_purge_attach_undo_recs() will sort undo log records by table_id, and purge_node_t will keep the MDL and table handle open for multiple successive undo log records. get_purge_table(): A new accessor, used during the purge of history for indexed virtual columns. This interface should ideally not exist at all. thd_mdl_context(): Accessor of THD::mdl_context. Wrapped in a new thd_mdl_service. dict_get_db_name_len(): Define inline. dict_acquire_mdl_shared(): Acquire explicit shared MDL on a table name if needed. dict_table_open_on_id(): Return MDL_ticket, if requested. dict_table_close(): Release MDL ticket, if requested. dict_fts_index_syncing(), dict_index_t::index_fts_syncing: Remove. row_drop_table_for_mysql() no longer needs to check these, because MDL guarantees that a fulltext index sync will not be in progress while MDL_EXCLUSIVE is protecting a DDL operation. dict_table_t::parse_name(): Parse the table name for acquiring MDL. purge_node_t::undo_recs: Change the type to std::list<trx_purge_rec_t*> (different container, and storing also roll_ptr). purge_node_t: Add mdl_ticket, last_table_id, purge_thd, mdl_hold_recs for acquiring MDL and for keeping the table open across multiple undo log records. purge_vcol_info_t, row_purge_store_vsec_cur(), row_purge_restore_vsec_cur(): Remove. We will acquire the MDL earlier. purge_sys_t::heap: Added, for reading undo log records. fts_sync_during_ddl(): Invoked during ALGORITHM=INPLACE operations to ensure that fts_sync_table() will not conflict with MDL_EXCLUSIVE. Uses fts_t::sync_message for bookkeeping.
* MDEV-21262 MTR does not work with Windows ASAN buildsVladislav Vaintroub2019-12-091-2/+3
| | | | | | Do not use suppressions on Windows, the ASAN_OPTIONS can't be parsed whenever full file names are used, because file names contain ':' which is ASAN_OPTIONS delimeter.
* MDEV-16264 - some improvementsVladislav Vaintroub2019-12-097-37/+118
| | | | | | | - wait notification, tpool_wait_begin/tpool_wait_end - to notify the threadpool that current thread is going to wait Use it to wait for IOs to complete and also when purge waits for workers.
* MDEV-21259 Assertion failed in mtr_t::write()Marko Mäkelä2019-12-093-3/+53
| | | | | | | | | | | | btr_free_externally_stored_field(): Pass w=mtr_t::OPT to note that the BTR_EXTERN_LEN is not necessarily changing when a multi-page ROW_FORMAT=COMPRESSED off-page column is being freed, and to allow redundant writes to the redo log to be optimized away. Ever since commit 56f6dab1d0e5a464ea49c1e5efb0032a0f5cea3e the refactored function mtr_t::write() asserts by default that the page contents is being changed.
* A cleanup for MDEV-8844: Fixing compilation failure on WindowsAlexander Barkov2019-12-073-5/+6
| | | | | | Fixing lossy type conversions: - from int64 to int - from size_t to uint
* MDEV-8844 Unreadable control characters printed as is in warningsAlexander Barkov2019-12-0628-75/+517
|
* A cleanup for MDEV-17088 Provide tools to encode/decode mysql-encoded file ↵Alexander Barkov2019-12-061-2/+2
| | | | | | | | | system names tests mariadb-conv-utf8 and mariadb-conv-cp932 failed on PPC, because "char" is "unsigned char" on PPC. Adding a cast from "char" to "signed char" in the two affected places.
* fix compiler warningsKentoku2019-12-063-5/+7
|
* 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