summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* MDEV-21117: refine the server binlog-based recovery for semisyncorigin/bb-10.3-MDEV-21117Sujatha2021-04-0714-220/+106
| | | | Fixed test specific review comments.
* MDEV-21117: refine the server binlog-based recovery for semisyncSujatha2021-02-0826-84/+2415
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: ======= When the semisync master is crashed and restarted as slave it could recover transactions that former slaves may never have seen. A known method existed to clear out all prepared transactions with --tc-heuristic-recover=rollback does not care to adjust binlog accordingly. Fix: === The binlog-based recovery is made to concern of the slave semisync role of post-crash restarted server. No changes in behaviour is done to the "normal" binloggging server and the semisync master. When the restarted server is configured with --rpl-semi-sync-slave-enabled=1 the refined recovery attempts to roll back prepared transactions and truncate binlog accordingly. In case of a partically committed (that is committed at least in one of the engine participants) such transaction gets committed. It's guaranteed no (partially as well) committed transactions exist beyond the truncate position. In case there exists a non-transactional replication event (being in a way a committed transaction) past the computed truncate position the recovery ends with an error. To facilite the failover on the slave side conditions to accept own events (having been discarded by the above recovery) are relaxed to let so for the semisync slave that connects to master in gtid mode. gtid_strict_mode is further recommended to secure from inadvertent re-applying out of order gtids in general. Non-gtid mode connected semisync slave would require --replicate-same-server-id (mind --log-slave-updates must be OFF then).
* MDEV-21153 Replica nodes crash due to indexed virtual columns and FK ↵bb-10.3-MDEV-21153sjaakola2021-01-193-1/+60
| | | | | | | | | | | | | | | cascading delete Fix for MDEV-23033 fixes a problem in replication applying of transactions, which contain cascading foreign key delete for a table, which has indexed virtual column. This fix adds slave_fk_event_map flag for table, to mark when the prelocking is needed for applying of a transaction. See commit 608b0ee52ef3e854ce14a407e64e936adbbeba23 for more details. However, this fix is targeted for async replication only, Rows_log_event::do_apply_event() has condition to rule out galera replication from the fix domain, and use cases suffering from MDEV-23033 and related MDEV-21153 will fail in galera cluster. The fix in this commit removes the condition to rule out the setting of slave_fk_event_map flag from galera replication, and makes the fix in MDEV-23033 effective for galera replication as well. Finally, a mtr test for virtual column support has been added. galera.galera_virtual_column.test has as first test a scenario from MDEV-21153 Reviewed-by: Jan Lindström <jan.lindstrom@mariadb.com>
* Merge 10.2 into 10.3Marko Mäkelä2021-01-193-0/+92
|\
| * MDEV-21478 Inplace ALTER fails to report error when FTS_DOC_IDThirunarayanan Balathandayuthapani2021-01-113-0/+90
| | | | | | | | | | | | | | | | | | | | | | with wrong data type is added Inplace alter fails to report error when fts_doc_id column with wrong data type is added. prepare_inplace_alter_table_dict(): Should check whether the column is fts_doc_id. It should be of bigint type, should accept non null data type and it should be in capital letters.
* | MDEV-23666: Assertion `m_cpp_buf <= ptr && ptr <= m_cpp_buf + m_buf_length' ↵Dmitry Shulga2021-01-143-0/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | failed in Lex_input_stream::body_utf8_append On parsing statements for which a starting backtick (`) delimiter doesn't have a corresponding ending backtick, a current pointer to a position inside a pre-processed buffer could go beyond the end of the buffer. This bug report caused by the commit d4967659032b18a5504198b41dd3d0a1813d79ef "MDEV-22022 Various mangled SQL statements will crash 10.3 to 10.5 debug builds". In order to fix the issue both pointers m_ptr and m_cpp_ptr must be rolled back to previous position in raw input and pre-processed input streams correspondingly in case end of query reached during parsing.
* | MDEV-24387: Wrong number of decimal digits in certain UNION/SubqeryRucha Deodhar2021-01-133-1/+53
| | | | | | | | | | | | | | | | | | | | | | | | constellation Analysis: The decimals is set to NOT_FIXED_DEC for Field_str even if it is NULL. Unsigned has decimals=0. So Type_std_attributes::decimals is set to 39 (maximum between 0 and 39). This results in incorrect number of decimals when we have union of unsigned and NULL type. Fix: Check if the field is created from NULL value. If yes, set decimals to 0 otherwise set it to NOT_FIXED_DEC.
* | MDEV-23446 Missed error code fixAleksey Midenkov2021-01-121-1/+1
| |
* | MDEV-17227 Server crash in TABLE_SHARE::init_from_sql_statement_string upon ↵Sergei Golubchik2021-01-123-16/+25
| | | | | | | | | | | | | | | | table discovery with non-existent database * failed init_from_binary_frm_image can clear share->db_plugin, don't use it on the error path * cleanup the test a bit
* | MDEV-16735 mysql_upgrade failedSergei Golubchik2021-01-121-0/+1
| | | | | | | | | | force alter_algorithm=DEFAULT in mysql_system_tables_fix.sql, in case my.cnf sets it to something incompatible
* | MDEV-20763 Table corruption or Assertion `btr_validate_index(index, 0, ↵Sergei Golubchik2021-01-123-1/+49
| | | | | | | | | | | | | | false)' failed in row_upd_sec_index_entry with virtual column and EMPTY_STRING_IS_NULL SQL mode unset empty_string_is_null mode when parsing generated columns in a table, this mode affects pasring.
* | fix sporadic failures of main.processlist_notembeddedSergei Golubchik2021-01-122-16/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | the test was doing --replace_result $con_id con_id eval SHOW EXPLAIN FOR $con_id; with the intention of replacing the variable part of the statement in the result log. But actually replace_result replaces everything that matches. In particular, when $con_id is 100, the warning Note 1003 select sleep(100000) becomes Note con_id3 select sleep(con_id000)
* | failing to parse an SP should not abort information_schema.routinesSergei Golubchik2021-01-123-5/+8
| |
* | MDEV-24524 Assertion `ls->length < 0xFFFFFFFFL && ((ls->length == 0 && ↵Sergei Golubchik2021-01-123-5/+19
| | | | | | | | | | | | | | | | !ls->str) || ls->length == strlen(ls->str))' failed in String::append on SELECT from I_S don't expect return type of a stored function to be valid. it's read from a table, so can be messed with. it even can contain \0 bytes in the middle of the type name
* | MDEV-20502 Queries against spider tables return wrong values for columns ↵Kentoku SHIBA2021-01-122-0/+31
| | | | | | | | | | | | following constant declarations. Add test cases.
* | MDEV-20502 Queries against spider tables return wrong values for columns ↵Kentoku SHIBA2021-01-1210-4/+216
| | | | | | | | | | | | following constant declarations. When executing a query like "select id, 0 as const, val from ...", there are 3 columns(items) in Query->select at handlerton->create_group_by(). After that, MariaDB makes a temporary table with 2 columns. The skipped items are const item, so fixing Spider to skip const items for items at Query->select.
* | Added the test case for MDEV-23804Varun Gupta2021-01-122-0/+83
| |
* | Merge 10.2 into 10.3 (except MDEV-17556)Marko Mäkelä2021-01-1122-118/+996
|\ \ | |/ | | | | | | | | The fix of MDEV-17556 (commit e25623e78a3efde05e30070dc7362f8dc0d8c459 and commit 61a362c9493df63dc588fcb71409537ae56ab9c8) has been omitted due to conflicts and will have to be applied separately later.
| * MDEV-24554 Do not use verisign server for authenticode timestampingVladislav Vaintroub2021-01-091-1/+1
| |
| * MDEV-23536 : Race condition between KILL and transaction commitJan Lindström2021-01-085-39/+41
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A race condition may occur between the execution of transaction commit, and an execution of a KILL statement that would attempt to abort that transaction. MDEV-17092 worked around this race condition by modifying InnoDB code. After that issue was closed, Sergey Vojtovich pointed out that this race condition would better be fixed above the storage engine layer: If you look carefully into the above, you can conclude that thd->free_connection() can be called concurrently with KILL/thd->awake(). Which is the bug. And it is partially fixed in THD::~THD(), that is destructor waits for KILL completion: Fix: Add necessary mutex operations to THD::free_connection() and move WSREP specific code also there. This ensures that no one is using THD while we do free_connection(). These mutexes will also ensures that there can't be concurrent KILL/THD::awake(). innobase_kill_query We can now remove usage of trx_sys_mutex introduced on MDEV-17092. trx_t::free() Poison trx->state and trx->mysql_thd This patch is validated with an RQG run similar to the one that reproduced MDEV-17092.
| * Cleanup: Remove unused symbol QUE_THR_PROCEDURE_WAITMarko Mäkelä2021-01-082-4/+2
| |
| * fixup MDEV-17556: fix mroongaNikita Malyavin2021-01-083-19/+19
| |
| * MDEV-19838 fixup: clang -Wunused-const-variableMarko Mäkelä2021-01-081-4/+3
| |
| * MDEV-17556 Assertion `bitmap_is_set_all(&table->s->all_set)' failedNikita Malyavin2021-01-0835-224/+206
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The assertion failed in handler::ha_reset upon SELECT under READ UNCOMMITTED from table with index on virtual column. This was the debug-only failure, though the problem is mush wider: * MY_BITMAP is a structure containing my_bitmap_map, the latter is a raw bitmap. * read_set, write_set and vcol_set of TABLE are the pointers to MY_BITMAP * The rest of MY_BITMAPs are stored in TABLE and TABLE_SHARE * The pointers to the stored MY_BITMAPs, like orig_read_set etc, and sometimes all_set and tmp_set, are assigned to the pointers. * Sometimes tmp_use_all_columns is used to substitute the raw bitmap directly with all_set.bitmap * Sometimes even bitmaps are directly modified, like in TABLE::update_virtual_field(): bitmap_clear_all(&tmp_set) is called. The last three bullets in the list, when used together (which is mostly always) make the program flow cumbersome and impossible to follow, notwithstanding the errors they cause, like this MDEV-17556, where tmp_set pointer was assigned to read_set, write_set and vcol_set, then its bitmap was substituted with all_set.bitmap by dbug_tmp_use_all_columns() call, and then bitmap_clear_all(&tmp_set) was applied to all this. To untangle this knot, the rule should be applied: * Never substitute bitmaps! This patch is about this. orig_*, all_set bitmaps are never substituted already. This patch changes the following function prototypes: * tmp_use_all_columns, dbug_tmp_use_all_columns to accept MY_BITMAP** and to return MY_BITMAP * instead of my_bitmap_map* * tmp_restore_column_map, dbug_tmp_restore_column_maps to accept MY_BITMAP* instead of my_bitmap_map* These functions now will substitute read_set/write_set/vcol_set directly, and won't touch underlying bitmaps.
| * MDEV-19442 add-onAndrei Elkin2021-01-071-1/+1
| | | | | | | | fixing windows build.
| * MDEV-24482: Added wait condition to make sure table t1 is replicated to node_2.Stepan Patryshev2021-01-041-0/+3
| |
| * MDEV-24465: Added wait condition to make sure table t1 is replicated to node_2.Stepan Patryshev2021-01-041-0/+3
| |
| * MDEV-24464: Added wait condition to make sure table t1 is replicated to node_2.Stepan Patryshev2021-01-041-0/+3
| |
| * MDEV-24447: Added wait condition to make sure table t1 is replicated to node_2.Stepan Patryshev2021-01-041-0/+3
| |
| * MDEV-24462: Added wait condition to make sure table t1 is replicated to node_2.Stepan Patryshev2021-01-041-0/+3
| |
| * MDEV-23033: All slaves crash once in ~24 hours and loop restart with signal 11Sujatha2021-01-045-65/+906
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: ======= Upon deleting or updating a row in a parent table (with primary key), if the child table has virtual column and an associated key with ON UPDATE CASCADE/ON DELETE CASCADE, it will result in slave crash. Analysis: ======== Tables which are related through foreign key require prelocking similar to triggers. i.e If a table has triggers/foreign keys we should add all tables and routines used by them to the prelocking set. This prelocking happens during 'open_and_lock_tables' call. Each table being opened is checked for foreign key references. If foreign key reference exists then the child table is opened and it is linked to the table_list. Upon any modification to parent table its corresponding child tables are retried from table_list and they are updated accordingly. This prelocking work fine on master. On slave prelocking works for following cases. - Statement/mixed based replication - In row based replication when trigger execution is enabled through 'slave_run_triggers_for_rbr=YES/LOGGING/ENFORCE' Otherwise it results in an assert/crash, as the parent table will not find the corresponding child table and it will be NULL. Dereferencing NULL pointer leads to slave server exit. Fix: === Introduce a new 'slave_fk_event_map' flag similar to 'trg_event_map'. This flag will ensure that when foreign key is enabled in row based replication all the parent and child tables are prelocked, so that parent is able to locate the child table. Note: This issue is specific to slave, hence only slave needs to be upgraded.
| * MDEV-23875 is failing to build on windows.Rucha Deodhar2021-01-041-1/+1
| |
| * MDEV-23875: select into outfile not respect UMASK and UMASK_DIRRucha Deodhar2020-12-311-3/+3
| | | | | | | | | | | | | | | | Analysis: select into outfile creates files everytime with 666 permission, regardsless if umask environment variables and umask settings on OS level. It seems hardcoded. Fix: change 0666 to 0644 which will let anybody consume the file but not change it.
| * MDEV-19442 server_audit plugin doesn't consider proxy users in ↵Alexey Botchkov2020-12-283-8/+20
| | | | | | | | | | | | | | server_audit_excl_users/server_audit_incl_users. Check the proxy user just as the connection user against the incl_users_list and excl_users_list.
* | MDEV-16272 rpl.rpl_semisync_ali_issues failed in buildbot, SHOW variable was ↵Alice Sherepa2021-01-071-0/+15
| | | | | | | | done instead of waiting for the value of that variable
* | Urgent fix of MDEV-23446 fix:Oleksandr Byelkin2021-01-071-2/+1
| | | | | | | | Use the same variable in both scopes (from where we have "goto error" and target of the goto)
* | MDEV-17891 Assertion failure upon attempt to replace into a full tableNikita Malyavin2021-01-075-0/+114
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: Assertion `transactional_table || !changed || thd->transaction.stmt.modified_non_trans_table' failed due REPLACE into a versioned table. It is not specific to system versioning/pertitioning/heap, but this combination makes it much easier to reproduce. The thing is to make first ha_update_row call succeed to make info->deleted != 0. And then make REPLACE fail by any reason. In this scenario we overflow versioned partition, so next ha_update_row succeeds, but corresponding ha_write_row fails to insert history record. Fix: modified_non_trans_table is set in one missed place
* | MDEV-23632 ALTER TABLE...ADD KEY creates corrupted index on virtual columnNikita Malyavin2021-01-053-1/+49
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | mysql_col_offset was not updated after the new column has been added by an INSTANT ALTER TABLE -- table data dictionary had been remaining the same. When the virtual column is added or removed, table was usually evicted and then reopened, which triggered vcol info rebuild on the next open. However this also should be done when the usual column is added or removed: mariadb always stores virtual field at the end of maria record, so the shift should always happen. Fix: expand the eviction condition to the case when usual fields are added/removed Note: this should happen only in the case of !new_clustered: * When new_clustered is true, a new data dictionary is created, and vcol metadata is rebuilt in `alter_rebuild_apply_log()` * We can't do it in `new_clustered` case, because the old table is not yet subctituted correctly
* | ut_ad(err != DB_DUPLICATE_KEY) in row_rename_table_for_mysqlNikita Malyavin2021-01-051-0/+2
| |
* | handler0alter.cc: extract cache eviction and stats drop to functionsNikita Malyavin2021-01-051-42/+44
| |
* | Correction of the merge 10.2 into 10.3 for MDEV-23619Igor Babaev2020-12-282-9/+9
| | | | | | | | (correction for commit 6fed6de93f120b5e311b79892e7865639e9613a4)
* | Merge 10.2 into 10.3Marko Mäkelä2020-12-283-7/+31
|\ \ | |/
| * MDEV-24449 Corruption of system tablespace or last recovered pageMarko Mäkelä2020-12-281-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This corresponds to 10.5 commit 39378e1366f78b38c05e45103b9fb9c829cc5f4f. With a patched version of the test innodb.ibuf_not_empty (so that it would trigger crash recovery after using the change buffer), and patched code that would modify the os_thread_sleep() in recv_apply_hashed_log_recs() to be 1ms as well as add a sleep of the same duration to the end of recv_recover_page() when recv_sys->n_addrs=0, we can demonstrate a race condition. After disabling some debug checks in buf_all_freed_instance(), buf_pool_invalidate_instance() and buf_validate(), we managed to trigger an assertion failure in fseg_free_step(), on the XDES_FREE_BIT. In other words, an trx_undo_seg_free() call during trx_rollback_resurrected() was attempting a double-free of a page. This was repeated about once in 400 to 500 test runs. With the fix applied, the test passed 2,000 runs. recv_apply_hashed_log_recs(): Do not only wait for recv_sys->n_addrs to reach 0, but also wait for buf_get_n_pending_read_ios() to reach 0, to guarantee that buf_page_io_complete() will not be executing ibuf_merge_or_delete_for_page().
| * MDEV-23851 MDEV-24229 BF-BF conflict issuessjaakola2020-12-282-6/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Issues MDEV-23851 and MDEV-24229 are probably duplicates and are caused by the new self-asserting function lock0lock.cc:wsrep_assert_no_bf_bf_wait(). The criteria for asserting is too strict and does not take in consideration scenarios of "false positive" lock conflicts, which are resolved by replaying the local transaction. As a fix, this PR is relaxing the assert criteria by two conditions, which skip assert if high priority transactions are locking in correct order or if conflicting high priority lock holder is aborting and has just not yet released the lock. Alternative fix would be to remove wsrep_assert_no_bf_bf_wait() altogether, or remove the assert in this function and let it only print warnings in error log. But in my high conflict rate multi-master test scenario, this relaxed asserting appears to be safe. This PR also removes two wsrep_report_bf_lock_wait() calls in innodb lock manager, which cause mutex access assert in debug builds. Foreign key appending missed handling of data types of float and double in INSERT execution. This is not directly related to the actual issue here but is fixed in this PR nevertheless. Missing these foreign keys values in certification could cause problems in some multi-master load scenarios. Finally, some problem reports suggest that some of the issues reported in MDEV-23851 might relate to false positive lock conflicts over unique secondary index gaps. There is separate work for relaxing UK index gap locking of replication appliers, and separate PR will be submitted for it, with a related mtr test as well.
* | Merge branch '10.2' into 10.3Oleksandr Byelkin2020-12-241-1/+1
|\ \ | |/
| * Fix MDEV-21958 code to be working with not 64 MAX_INDEXESOleksandr Byelkin2020-12-241-1/+1
| |
* | MDEV-24476 Overloaded functions dbug_print_rec break compilation in 10.3Aleksey Midenkov2020-12-241-0/+48
| | | | | | | | dbug_print_rec() functions used to print data inside GDB.
* | Bring changes to oracle parserOleksandr Byelkin2020-12-241-9/+5
| |
* | Merge branch '10.2' into 10.3Oleksandr Byelkin2020-12-23115-1234/+1936
|\ \ | |/
| * Forgot to add this change to previous csetSergei Petrunia2020-12-221-0/+10
| |