- 21 Feb, 2020 5 commits
-
-
Nikita Malyavin authored
-
Nikita Malyavin authored
-
Nikita Malyavin authored
-
Nikita Malyavin authored
-
Nikita Malyavin authored
-
- 20 Feb, 2020 18 commits
-
-
Nikita Malyavin authored
-
Nikita Malyavin authored
-
Nikita Malyavin authored
-
Nikita Malyavin authored
-
Nikita Malyavin authored
-
Nikita Malyavin authored
try to make less row fetches by searching for rows on condition period_start < (period_end of new_data)
-
Nikita Malyavin authored
-
Nikita Malyavin authored
-
Nikita Malyavin authored
-
Nikita Malyavin authored
-
Nikita Malyavin authored
-
Nikita Malyavin authored
-
Nikita Malyavin authored
-
Nikita Malyavin authored
-
Nikita Malyavin authored
-
Nikita Malyavin authored
-
Nikita Malyavin authored
* The overlaps check is implemented on a handler level per row command. It creates a separate cursor (actually, another handler instance) and caches it inside the original handler, when ha_update_row or ha_insert_row is issued. Cursor closes on unlocking the handler. * Containing the same key in index means unique constraint violation even in usual terms. So we fetch left and right neighbours and check that they have same key prefix, excluding from the key only the period part. If it doesnt match, then there's no such neighbour, and the check passes. Otherwise, we check if this neighbour intersects with the considered key. * The check does introduce new error and fails with ER_DUPP_KEY error. This might break REPLACE workflow and should be fixed separately
-
Eugene Kosov authored
recv_sys_t opened redo log files along with log_sys_t. That's why I removed file sharing logic from InnoDB in 9ef2d29f But it was actually used to ensure that only one MariaDB instance will touch the same InnoDB files. os0file.cc: revert some changes done previously mapped_file_t::map(): now has arguments read_only, nvme file_io::open(): now has argument read_only class file_os_io: make final log_file_t::open(): now has argument read_only
-
- 19 Feb, 2020 7 commits
-
-
Marko Mäkelä authored
We introduce an EXTENDED log record for appending an undo log record to an undo log page. This is equivalent to the MLOG_UNDO_INSERT record that was removed in commit f802c989, only using more compact encoding. mtr_t::log_write(): Fix a bug that affects longer log record writes in the !same_page && !have_offset case. Similar code is already implemented for the have_offset code path. The bug was unobservable before we started to write longer EXTENDED records. All !have_offset records (FREE_PAGE, INIT_PAGE, EXTENDED) that were written so far are short, and we never write RESERVED or OPTION records. mtr_t::undo_append(): Write an UNDO_APPEND record. log_phys_t::undo_append(): Apply an UNDO_APPEND record. trx_undo_page_set_next_prev_and_add(), trx_undo_page_report_modify(), trx_undo_page_report_rename(): Invoke mtr_t::undo_append() instead of emitting WRITE records.
-
Marko Mäkelä authored
We introduce an EXTENDED log record for initializing an undo log page. The size of the record will be 2 bytes plus the optional page identifier. The entire undo page will be initialized, except the space that is already reserved for TRX_UNDO_SEG_HDR in trx_undo_seg_create(). mtr_t::undo_create(): Write the UNDO_INIT record. trx_undo_page_init(): Initialize the undo page corresponding to the UNDO_INIT record. Unlike the former MLOG_UNDO_INIT record, we will initialize almost the entire page, including initializing the TRX_UNDO_PAGE_NODE to an empty list node, so that the subsequent call to flst_init() will avoid writing log for the undo page.
-
Eugene Kosov authored
-
Eugene Kosov authored
-
Eugene Kosov authored
-
Eugene Kosov authored
Now there can be only one log file instead of several which logically work as a single file. Possible names of redo log files: ib_logfile0, ib_logfile101 (for just created one) innodb_log_fiels_in_group: value of this variable is not used by InnoDB. Possible values are still 1..100, to not break upgrade LOG_FILE_NAME: add constant of value "ib_logfile0" LOG_FILE_NAME_PREFIX: add constant of value "ib_logfile" get_log_file_path(): convenience function that returns full path of a redo log file SRV_N_LOG_FILES_MAX: removed srv_n_log_files: we can't remove this for compatibility reasons, but now server doesn't use this variable log_sys_t::file::fd: now just one, not std::vector log_sys_t::log_capacity: removed word 'group' find_and_check_log_file(): part of logic from huge srv_start() moved here recv_sys_t::files: file descriptors of redo log files. There can be several of those in case we're upgrading from older MariaDB version. recv_sys_t::remove_extra_log_files: whether to remove ib_logfile{1,2,3...} after successfull upgrade. recv_sys_t::read(): open if needed and read from one of several log files recv_sys_t::files_size(): open if needed and return files count redo_file_sizes_are_correct(): check that redo log files sizes are equal. Just to log an error for a user. Corresponding check was moved from srv0start.cc namespace deprecated: put all deprecated variables here to prevent usage of it by us, developers
-
Jan Lindström authored
-
- 18 Feb, 2020 3 commits
-
-
Marko Mäkelä authored
We plan use the redo log record main type code 0x20 for InnoDB specific index page operations. mrec_type_t: Rename INIT_INDEX_PAGE to EXTENDED. mrec_ext_t: The EXTENDED subtypes. This is a non-functional change: the redo log record encoding that was introduced in commit 7ae21b18 is not affected.
-
Marko Mäkelä authored
-
Marko Mäkelä authored
btr_page_reorganize_low(): Log only the changed data in the page. TODO: Do not copy the entire changed payload to the redo log. Emit a combination of MEMMOVE and WRITE records to reduce the log volume.
-
- 17 Feb, 2020 6 commits
-
-
Marko Mäkelä authored
commit 08ba3887 of MDEV-12353 introduced an incorrect assumption, which was documented by the failing assertion. After instant ADD COLUMN, we can have a null (and in-place) UPDATE of NULL to NULL. No data needs to be written for such updates. For ROW_FORMAT=REDUNDANT, we reserve space for the NULL values, and to be compatible with existing behaviour, we will zerofill the unused data bytes when updating to NULL value.
-
Marko Mäkelä authored
trx_purge_free_segment(): In some cases (observed when running the test innodb_zip.wl5522_debug_zip), there is no change to the TRX_UNDO_NEEDS_PURGE field. Add mtr_t::OPT to disable a debug check. The bogus debug check was introduced in commit 56f6dab1.
-
Marko Mäkelä authored
We add FIXME comments and some sketch code for the following cases: It is possible to write considerably less log for ROW_FORMAT=COMPRESSED pages. For now, we will delete the records one by one. It is also possible to treat 'deleting the last records' as a special case that would involve shrinking PAGE_HEAP_TOP. That should reduce the need of reorganizing pages.
-
Marko Mäkelä authored
page_mem_free(): When deleting the very last record of the page, even if the record did not fully utilize all bytes in a former PAGE_FREE record, truncate the PAGE_HEAP_TOP and reduce PAGE_GARBAGE by the saved amount.
-
Ian Gilfillan authored
-
Marko Mäkelä authored
fsp_page_create(): Always initialize the page. The logic to avoid initialization was made redundant and should have been removed in mysql/mysql-server@ce0a1e85e24e48b8171f767b44330da635a6ea0a (MySQL 5.7.5). btr_store_big_rec_extern_fields(): Remove the redundant initialization of FIL_PAGE_PREV and FIL_PAGE_NEXT. An INIT_PAGE record will have been written already. Only write the ROW_FORMAT=COMPRESSED page payload from FIL_PAGE_DATA onwards. We were unnecessarily writing from FIL_PAGE_TYPE onwards, which caused an assertion failure on recovery: recv_sys_t::alloc(size_t): Assertion 'len <= srv_page_size' failed when running the following tests: ./mtr --no-reorder innodb_zip.blob,4k innodb_zip.bug56680,4k
-
- 16 Feb, 2020 1 commit
-
-
Marko Mäkelä authored
trx_rseg_write_wsrep_checkpoint(): Add missing mtr_t::OPT, and avoid an unnecessary call to mtr_t::memset(). This addresses a debug assertion failure in wsrep_info.plugin.
-