1. 26 Nov, 2019 4 commits
    • Vicențiu Ciorbaru's avatar
      MDEV-13288: Proper fix for cracklib-runtime · 427eedd0
      Vicențiu Ciorbaru authored
      The required dependencies should be added through the autobake script,
      to also cover distributions that do not support libcrack2.
      427eedd0
    • Vicențiu Ciorbaru's avatar
      MDEV-13288: Upstream debian patch · ed2379f9
      Vicențiu Ciorbaru authored
      ed2379f9
    • Seth Shelnutt's avatar
      23664bc7
    • seppo's avatar
      MDEV-19572 async slave node fails to apply MyISAM only writes (#1418) · 38839854
      seppo authored
      The problem happens when MariaDB master replicates writes for only non InnoDB
      tables (e.g. writes to MyISAM table(s)). Async slave node, in Galera cluster,
      can apply these writes successfully, but it will, in the end, write gtid position in
      mysql.gtid_slave_pos table. mysql.gtid_slave_pos table is InnoDB engine, and
      this write makes innodb handlerton part of the replicated "transaction".
      Note that wsrep patch identifies that write to gtid_slave_pos should not be replicated
      and skips appending wsrep keys for these writes. However, as InnoDB was present
      in the transaction, and there are replication events (for MyISAM table) in transaction
      cache, but there are no appended keys, wsrep raises an error, and this makes the söave
      thread to stop.
      
      The fix is simply to not treat it as an error if async slave tries to replicate a write
      set with binlog events, but no keys. We just skip wsrep replication and return successfully.
      
      This commit contains also a mtr test which forces mysql.gtid_slave_pos table isto be
      of InnoDB engine, and executes MyISAM only write through asyn replication.
      
      There is additional fix for declaring IO and background slave threads as non wsrep.
      These threads should not write anything for wsrep replication, and this is just a safeguard
      to make sure nothing leaks into cluster from these slave threads.
      38839854
  2. 21 Nov, 2019 1 commit
    • Eugene Kosov's avatar
      cleanup DBUG · a51f3b09
      Eugene Kosov authored
      DbugParse(): removed mutex lock/unlock which should protect file writes only.
      And no file writes happen in this function.
      
      DbugFlush(): move mutex_unlock out of this method because fflush() doesn't
      need any locking.
      
      Slow stuff like mutex lock/unlock and accessing errno (TLS)
      is moved to a more narrow scope.
      a51f3b09
  3. 19 Nov, 2019 1 commit
  4. 18 Nov, 2019 3 commits
    • Jan Lindström's avatar
      Remove excessive sleep from test. · c6b097ab
      Jan Lindström authored
      c6b097ab
    • seppo's avatar
      MDEV-18497 CTAS async replication from mariadb master crashes galera nodes (#1410) · 5c68343d
      seppo authored
      This PR contains a mtr test for reproducing a failure with replicating create table as select statement (CTAS) through asynchronous mariadb replication to mariadb galera cluster.
      The problem happens when CTAS replication contains both create table statement followed by row events for populating the table. In such situation, the galera node operating as mariadb replication slave, will first replicate only the create table part into the cluster, and then perform another replication containing both the create table and row events. This will lead all other nodes to fail for duplicate table create attempt, and crash due to this failure.
      
      PR contains also a fix, which identifies the situation when CTAS has been replicated, and makes further scan in async replication stream to see if there are following row events. The slave node will replicate either single TOI in case the CTAS table is empty, or if CTAS table contains rows, then single bundled write set with create table and row events is replicated to galera cluster.
      
      This fix should keep master server's GTID's for CTAS replication in sync with GTID's in galera cluster.
      5c68343d
    • Varun Gupta's avatar
      MDEV-21044: Wrong result when using a smaller size for sort buffer · 29097256
      Varun Gupta authored
      Make sure that the sort buffers can store atleast one sort key.
      This is needed to make sure that all merge buffers are read else
      with no sort keys some merge buffers are skipped because the code
      makes a conclusion there is no data to be read.
      29097256
  5. 14 Nov, 2019 1 commit
  6. 12 Nov, 2019 1 commit
    • Sujatha's avatar
      MDEV-20953: binlog_encryption.rpl_corruption failed in buildbot due to wrong error code · 7df07c76
      Sujatha authored
      Problem:
      ========
      CURRENT_TEST: binlog_encryption.rpl_corruption
      
      mysqltest: In included file "./include/wait_for_slave_io_error.inc":
      ...
      At line 72: Slave stopped with wrong error code
      **** Slave stopped with wrong error code: 1743 (expected 1595,1913) ****
      
      Analysis:
      ========
      The test emulates the corruption at the various stages of replication for
      example in binlog file, in network and in relay log etc. It verifies that all
      corruption cases are handled through appropriate error messages.
      
      The test cases which emulate network failure expect following errors.
      --ER_SLAVE_RELAY_LOG_WRITE_FAILURE (1595)
      --ER_NETWORK_READ_EVENT_CHECKSUM_FAILURE (1743)
      
      Ideally test should expect error codes as 1595 and 1743.
      But the test actually waits on incorrect error code 1595,1913
      
      Fix:
      ===
      Added appropriate error code for 'ER_NETWORK_READ_EVENT_CHECKSUM_FAILURE'.
      Replaced 1913 with 1743.
      7df07c76
  7. 10 Nov, 2019 1 commit
    • Andrei Elkin's avatar
      MDEV-19376 Repl_semi_sync_master::commit_trx assertion failure: ... ||... · 13db50fc
      Andrei Elkin authored
      MDEV-19376 Repl_semi_sync_master::commit_trx assertion failure: ... || !m_active_tranxs->is_tranx_end_pos(trx_wait_binlog_name, trx_wait_binlog_pos)
      
      The assert indicates that the current transaction got caught uncleaned from
      the semisync master's cache when it is signaled to proceed upon its
      ack receive.
      
      The reason of missed cleanup turns out to be a flaw in the gtid
      connect mode.
      A submitted by connecting slave value of its last received event's
      binlog file *name* was adopted into
      {{Repl_semi_sync_master::m_reply_file_name}} as a part of semisync
      initialization.
      
      Notice that the initialization still refines the position part of the
      submitted last received event's binlog coordinates.
      The master side binlog filename:pos refinement is
      specific to the gtid connect mode for purpose of computing the latest
      binlog file to resume slave feeding from.
      Effectively in the gtid connect mode the computed resumption filename:pos
      may appear smaller in which case a new post-connect time committing
      transaction may be logged with its filename:pos also less than the
      submitted coordinates and that triggers the assert.
      
      Fixed with making the semisync initialization to use the refined filename:pos.
      It is guaranteed to be less than any new generated transaction's binlog:pos.
      13db50fc
  8. 08 Nov, 2019 2 commits
  9. 07 Nov, 2019 1 commit
    • Varun Gupta's avatar
      MDEV-20519: Query plan regression with optimizer_use_condition_selectivity > 1 · b1ab2ba5
      Varun Gupta authored
      The issue here is the wrong estimate of the cardinality of a partial join,
      the cardinality is too high because the function table_cond_selectivity()
      returns an absurd number 100 while selectivity cannot be greater than 1.
      
      When accessing table t by outer reference t1.a via index we do not perform any
      range analysis for t. Yet we see TABLE::quick_key_parts[key] and
      TABLE->quick_rows[key] contain a non-zero value though these should have been
      remained untouched and equal to 0.
      
      Thus real cause of the problem is that TABLE::init does not clean the arrays
      TABLE::quick_key_parts[] and TABLE::>quick_rows[].
      It should have done it because the TABLE structure created for any
      instance of a table can be reused for many queries.
      b1ab2ba5
  10. 06 Nov, 2019 2 commits
    • Marko Mäkelä's avatar
      Merge 5.5 into 10.1 · 4e99e67c
      Marko Mäkelä authored
      4e99e67c
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-20987 InnoDB fails to start when fts table has FK relation · 5c3bbbd8
      Thirunarayanan Balathandayuthapani authored
      InnoDB: Assertion failure in file .../dict/dict0dict.cc line ...
      InnoDB: Failing assertion: table->can_be_evicted
      
      This fixes a regression that was caused by the fix of MDEV-20621
      (commit a41d4297).
      MySQL 5.6 (and MariaDB 10.0) introduced eviction of tables from
      the InnoDB data dictionary cache. Tables that are connected to
      FOREIGN KEY constraints or FULLTEXT INDEX are exempt of the eviction.
      With the problematic change, a table that would already be exempt
      from eviction due to FOREIGN KEY would cause the problem if there
      also was a FULLTEXT INDEX defined on it.
      
      dict_load_table(): Only prevent eviction if table->can_be_evicted holds.
      5c3bbbd8
  11. 05 Nov, 2019 2 commits
  12. 04 Nov, 2019 3 commits
    • Vladislav Vaintroub's avatar
      Fix ninja build · dc771113
      Vladislav Vaintroub authored
      Do not rely on existence of CMakeFiles/${target}.dir directory existence
      It is not there for custom targets in Ninja build.
      dc771113
    • Sergei Golubchik's avatar
      MDEV-20971 ASAN heap-use-after-free in list_delete / heap_close · cd156e2c
      Sergei Golubchik authored
      Don't save/restore HP_INFO as it could be changed by a concurrent thread.
      different parts of HP_INFO are protected by different mutexes and
      the mutex that protect most of the HP_INFO does not protect its open_list
      data.
      
      As a bonus, make heap_check_heap() to take const HP_INFO* and not
      make any changes there whatsoever.
      cd156e2c
    • Marko Mäkelä's avatar
      Fix GCC 9.2.1 -Wstringop-truncation · 5164f8c2
      Marko Mäkelä authored
      dict_table_rename_in_cache(): Use strcpy() instead of strncpy(),
      because they are known to be equivalent in this case (the length
      of old_name was already validated).
      
      mariabackup: Invoke strncpy() with one less than the buffer size,
      and explicitly add NUL as the last byte of the buffer.
      5164f8c2
  13. 02 Nov, 2019 1 commit
    • pkubaj's avatar
      Fix build on !glibc/powerpc* · eb56339b
      pkubaj authored
      Do the same that newer branches do and don't include glibc-related headers on non-glibc environment.
      eb56339b
  14. 01 Nov, 2019 2 commits
  15. 31 Oct, 2019 2 commits
  16. 30 Oct, 2019 13 commits