- 16 Dec, 2018 2 commits
-
-
Alexey Botchkov authored
galera_prepared_statement test fixed.
-
Alexey Botchkov authored
connect.xml2 test result fixed.
-
- 15 Dec, 2018 1 commit
-
-
Alexey Botchkov authored
The error message modified. Then the TABLE_SHARE::error_table_name() implementation taken from 10.3, to be used as a name of the table in this message.
-
- 14 Dec, 2018 7 commits
-
-
Vladislav Vaintroub authored
-
Vladislav Vaintroub authored
ported privilege checking from xtrabackup. Now, mariabackup would terminate early if either RELOAD or PROCESS privilege is not held, not at the very end of backup The behavior can be disabled with nre setting --check-privileges=0. Also , --no-lock does not need all of these privileges, since it skips FTWRL and SHOW ENGINE STATUS INNODB.
-
Marko Mäkelä authored
-
Marko Mäkelä authored
Internal transactions may not have trx->mysql_thd. But at the same time, trx->duplicates should only hold if REPLACE or INSERT...ON DUPLICATE KEY UPDATE was executed from SQL. The flag feels misplaced. A more appropriate place for it would be row_prebuilt_t or similar.
-
Marko Mäkelä authored
After validating the post-encryption checksum on an encrypted page, Mariabackup should decrypt the page and validate the pre-encryption checksum as well. This should reduce the probability of accepting invalid pages as valid ones. This is a backport and refactoring of a patch that was originally written by Thirunarayanan Balathandayuthapani for the 10.2 branch.
-
Marko Mäkelä authored
Innochecksum was being built as if WITH_INNODB_BUG_ENDIAN_CRC32:BOOL=OFF had been specified. Also, clean up tests: innodb.innochecksum: Useless; superceded by innodb_zip.innochecksum. innodb.innodb_zip_innochecksum: Remove; duplicated innodb_zip.innochecksum. innodb.innodb_zip_innochecksum2: Remove; duplicated innodb_zip.innochecksum_2. innodb.innodb_zip_innochecksum3: Remove; duplicated innodb_zip.innochecksum_3. No test case was added. I tested manually by adding debug instrumentation to both innochecksum and buf_page_is_checksum_valid_crc32() to make innochecksum write the buggy crc32, and to get warnings for falling back to the buggy checksum. Automating this would require that tests be adjusted depending on the build options.
-
Oleksandr Byelkin authored
Allow array binding for DELETE, test it.
-
- 13 Dec, 2018 8 commits
-
-
Marko Mäkelä authored
With innodb_default_row_format=redundant, InnoDB would crash when using table options that are incompatible with ROW_FORMAT=REDUNDANT. create_table_info_t::m_default_row_format: Cache the value of innodb_default_row_format. create_table_info_t::check_table_options(): Validate ROW_TYPE_DEFAULT with m_default_row_format. create_table_info_t::innobase_table_flags(): Use the cached m_default_row_format. create_table_info_t: Never read m_form->s->row_type. Use m_create_info->row_type instead. dict_tf_set(): Never set invalid flags for ROW_FORMAT=REDUNDANT. ha_innobase::truncate(): Set info.row_type based on the ROW_FORMAT of the current table.
-
Marko Mäkelä authored
In MySQL 5.7, it was noticed that files are not portable between big-endian and little-endian processor architectures (such as SPARC and x86), because the original implementation of innodb_checksum_algorithm=crc32 was not byte order agnostic. A byte order agnostic implementation of innodb_checksum_algorithm=crc32 was only added to MySQL 5.7, not backported to 5.6. Consequently, MariaDB Server versions 10.0 and 10.1 only contain the CRC-32C implementation that works incorrectly on big-endian architectures, and MariaDB Server 10.2.2 got the byte-order agnostic CRC-32C implementation from MySQL 5.7. MySQL 5.7 introduced a "legacy crc32" variant that is functionally equivalent to the big-endian version of the original crc32 implementation. Thanks to this variant, old data files can be transferred from big-endian systems to newer versions. Introducing new variants of checksum algorithms (without introducing new names for them, or something on the pages themselves to identify the algorithm) generally is a bad idea, because each checksum algorithm is like a lottery ticket. The more algorithms you try, the more likely it will be for the checksum to match on a corrupted page. So, essentially MySQL 5.7 weakened innodb_checksum_algorithm=crc32, and MariaDB 10.2.2 inherited this weakening. We introduce a build option that together with MDEV-17957 makes innodb_checksum_algorithm=strict_crc32 strict again by only allowing one variant of the checksum to match. WITH_INNODB_BUG_ENDIAN_CRC32: A new cmake option for enabling the bug-compatible "legacy crc32" checksum. This is only enabled on big-endian systems by default, to facilitate an upgrade from MariaDB 10.0 or 10.1. Checked by #ifdef INNODB_BUG_ENDIAN_CRC32. ut_crc32_byte_by_byte: Remove (unused function). legacy_big_endian_checksum: Remove. This variable seems to have unnecessarily complicated the logic. When the weakening is enabled, we must always fall back to the buggy checksum. buf_page_check_crc32(): A helper function to compute one or two CRC-32C variants.
-
Marko Mäkelä authored
-
Marko Mäkelä authored
Also, apply the MDEV-17957 changes to encrypted page checksums, and remove error message output from the checksum function, because these messages would be useless noise when mariabackup is retrying reads of corrupted-looking pages, and not that useful during normal server operation either. The error messages in fil_space_verify_crypt_checksum() should be refactored separately.
-
Marko Mäkelä authored
This is a backport of a part of commit 18455ec3 from 10.1.
-
Marko Mäkelä authored
-
Thirunarayanan Balathandayuthapani authored
Problem: Innodb_checksum_algorithm checks for all checksum algorithm to validate the page checksum even though the algorithm is specified as strict_crc32, strict_innodb, strict_none. Fix: Remove the checks for all checksum algorithm to validate the page checksum if the algo is specified as strict_* values.
-
Varun Gupta authored
-
- 12 Dec, 2018 9 commits
-
-
Sergei Golubchik authored
-
Sergei Golubchik authored
1. don't run full mysql_upgrade on every server restart, use --version-check to do it only once 2. fix syslog tag name in the postinst script, don't pretend mysqld_safe generated all these messages. Auto-detect the version to simplify maintenance
-
Sergei Golubchik authored
-
Marko Mäkelä authored
ha_innobase::truncate(): Because CREATE TEMPORARY TABLE allows invalid table options when innodb_file_per_table=1, do allow them also in TRUNCATE for temporary tables.
-
Jiaye Wu authored
Current implementation is conflicting. If UNICODE is defined, FormatMessage() will be FormatMessageW(), and variable win_errormsg with type char can not be passed to it, which should be changed to TCHAR instead. Since we don't use UNICODE here, we can use FormatMessageA() directly to avoid conversion error. ``` my_global.h(1092): error C2664: 'DWORD FormatMessageW(D WORD,LPCVOID,DWORD,DWORD,LPWSTR,DWORD,va_list *)' : cannot convert argument 5 from 'char [2048]' to 'LPWSTR' ```
-
Marko Mäkelä authored
References to global symbols prevent InnoDB from being built as a dynamic plugin on Windows. Refer to CHARSET_INFO::number, because that is what InnoDB is already persistently storing in its data dictionary.
-
Marko Mäkelä authored
btr_node_ptr_max_size(): Treat CHAR(0) from SQL as a special case. The InnoDB internal SQL parser maps the type "CHAR" to DATA_VARCHAR, but MariaDB does allow CHAR(0) with an empty value, and does enforce the length limitation.
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
- 11 Dec, 2018 1 commit
-
-
Eugene Kosov authored
ha_innobase::prepare_inplace_alter_table(): check max column length for every index in a table, not just added in this particular ALTER TABLE with ADD INDEX ones.
-
- 10 Dec, 2018 1 commit
-
-
Marko Mäkelä authored
There was a race condition in the error handling of ALTER TABLE when the table contains FULLTEXT INDEX. During the error handling of an erroneous ALTER TABLE statement, when InnoDB would drop the internally created tables for FULLTEXT INDEX, it could happen that one of the hidden tables was being concurrently accessed by a background thread. Because of this, InnoDB would defer the drop operation to the background. However, related to MDEV-13564 backup-safe TRUNCATE TABLE and its prerequisite MDEV-14585, we had to make the background drop table queue crash-safe by renaming the table to a temporary name before enqueueing it. This renaming was introduced in a follow-up of the MDEV-13407 fix. As part of this rename operation, we were unnecessarily parsing the current SQL statement, because the same rename operation could also be executed as part of ALTER TABLE via ha_innobase::rename_table(). If an ALTER TABLE statement was being refused due to incorrectly formed FOREIGN KEY constraint, then it could happen that the renaming of the hidden internal tables for FULLTEXT INDEX could also fail, triggering a host of error log messages, and causing a subsequent table-rebuilding ALTER TABLE operation to fail due to the tablespace already existing. innobase_rename_table(), row_rename_table_for_mysql(): Add the parameter use_fk for suppressing the parsing of FOREIGN KEY constraints. It will only be passed as use_fk=true by ha_innobase::rename_table(), which can be invoked as part of ALTER TABLE...ALGORITHM=COPY.
-
- 07 Dec, 2018 7 commits
-
-
Varun Gupta authored
The problem here is EITS statistics does not calculate statistics for the partitions of the table. So a temporary solution would be to not read EITS statistics for partitioned tables. Also disabling reading of EITS for columns that participate in the partition list of a table.
-
Marko Mäkelä authored
&sys_buf + DATA_TRX_ID_LEN is not &(sys_buf + DATA_TRX_ID_LEN).
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
create_table_def(), ha_innobase::create(): Defer fts_optimize_add_table() until after the table has been successfully created.
-
Marko Mäkelä authored
row_fts_merge_insert(): Correctly initialize DB_ROLL_PTR to a safe value that will not be dereferenced by MVCC.
-
- 06 Dec, 2018 4 commits
-
-
Vladislav Vaintroub authored
-
Sergei Golubchik authored
-
Sergei Golubchik authored
merge_role_db_privileges() was remembering pointers into Dynamic_array acl_dbs, and later was using them, while pushing more elements into the array. But pushing can cause realloc, and it can invalidate all pointers. Fix: remember and use indexes of elements, not pointers.
-
Sergei Golubchik authored
-