1. 03 Apr, 2019 9 commits
    • Marko Mäkelä's avatar
      Merge 10.1 into 10.2 · 28636a92
      Marko Mäkelä authored
      28636a92
    • Marko Mäkelä's avatar
      MDEV-18733 MariaDB slow start after crash recovery · cad56fba
      Marko Mäkelä authored
      If InnoDB crash recovery was needed, the InnoDB function srv_start()
      would invoke extra validation, reading something from every InnoDB
      data file. This should be unnecessary now that MDEV-14717 made
      RENAME operations crash-safe inside InnoDB (which can be
      disabled in MariaDB 10.2 by setting innodb_safe_truncate=OFF).
      
      dict_check_sys_tables(): Skip tables that would be dropped by
      row_mysql_drop_garbage_tables(). Perform extra validation only
      if innodb_safe_truncate=OFF, innodb_force_recovery=0 and
      crash recovery was needed.
      
      dict_load_table_one(): Validate the root page of the table.
      In this way, we can deny access to corrupted or mismatching tables
      not only after crash recovery, but also after a clean shutdown.
      cad56fba
    • Marko Mäkelä's avatar
      7984ea80
    • Marko Mäkelä's avatar
      Remove unused declarations · 1f3bcff1
      Marko Mäkelä authored
      1f3bcff1
    • Marko Mäkelä's avatar
      Fix more -Wnonnull-compare · fa147843
      Marko Mäkelä authored
      For some reason, GCC 8 did not issue warnings for all such comparisons.
      fa147843
    • Marko Mäkelä's avatar
      Clean up table_name_t · a1ec7ac4
      Marko Mäkelä authored
      row_is_mysql_tmp_table_name(): Replaced with
      dict_table_t::is_temporary_name() and table_name_t::is_temporary().
      
      table_name_t: Add constructors.
      a1ec7ac4
    • Marko Mäkelä's avatar
      MDEV-11487: Remove dict_table_get_n_sys_cols() · 03672a05
      Marko Mäkelä authored
      In MariaDB, InnoDB tables will always contain DATA_N_SYS_COLS = 3
      columns, 2 or 3 of which are present in the clustered index.
      We remove the predicate that was added in MySQL 5.7 as part of WL#7682.
      03672a05
    • Marko Mäkelä's avatar
      Merge 10.1 into 10.2 · dbc71667
      Marko Mäkelä authored
      dbc71667
    • Marko Mäkelä's avatar
      Fix -Wnonnull-compare · c0fca286
      Marko Mäkelä authored
      InnoDB and XtraDB had redundant assertions for checking that
      function parameters that were declared as nonnull were not NULL.
      c0fca286
  2. 02 Apr, 2019 9 commits
    • Sergei Golubchik's avatar
      MDEV-18298 Crashes server with segfault during role grants · 65d758aa
      Sergei Golubchik authored
      it was supposed to be `*(p-1)` not `*p-1`
      (the crash happens if `*p==0`)
      65d758aa
    • Sergei Golubchik's avatar
      cmake: only search for libraries that are needed · 409f69cd
      Sergei Golubchik authored
      in particular, don't search for libjemalloc.a, which is only
      needed for tokudb's ftcxx tests, when the tests aren't going
      to be built.
      409f69cd
    • Sergei Golubchik's avatar
      cmake: fix krb5 detection on SUSE · 7b527e63
      Sergei Golubchik authored
      `zypper install krb5-devel` installs executables outside of $PATH.
      It also installs /etc/profile.d/krb5.sh that is sourced by a new
      shell to add the new location to the $PATH. But this doesn't affect
      the current shell.
      
      Now decent Linux distros remind the user to run `. /etc/profile`
      to reload paths in such a case. SUSE doesn't and for a good reason -
      it doesn't work there. Because SUSE sets PROFILEREAD=true in the
      environment and /etc/profile does not do anything.
      
      By this point, one should not really expect `unset PROFILEREAD` to help,
      and it does not - PROFILEREAD is readonly, and cannot be unset.
      
      Apparently SUSE really *really* wants you to re-login between installing
      MariaDB build dependencies and actually running the rpmbuild.
      
      Which we cannot do it buildbot. And it would look very user-un-friendly
      in the Build Instructions section of the manual.
      
      So, we work around it - by adding SUSE krb5 path to the search list.
      
      THIS IS SUSEEEEEE!!!
      7b527e63
    • Sergei Golubchik's avatar
      speedup RPM builds · 0b2042fd
      Sergei Golubchik authored
      Filter out most common file types from automatic dependency collection.
      This makes `make package`  in centos73 VM three times faster
      0b2042fd
    • Marko Mäkelä's avatar
      MDEV-19085: Remove a bogus debug assertion · e3f44d8d
      Marko Mäkelä authored
      MariaDB does support InnoDB tables with no stored columns.
      (They are necessarily empty.)
      e3f44d8d
    • Marko Mäkelä's avatar
      Fix integer type mismatch · 5633f83c
      Marko Mäkelä authored
      5633f83c
    • Marko Mäkelä's avatar
      MDEV-19128 fil_name_parse() for MLOG_FILE_ is not portable · 8650848e
      Marko Mäkelä authored
      On Microsoft Windows, InnoDB writes the path separator \ to the
      redo log file, while on all other platforms, / is being used.
      
      fil_name_parse(): Normalize the parsed path separators to the
      native format. This allows backups or data sets to be portable
      between Windows and other systems.
      8650848e
    • Marko Mäkelä's avatar
      Merge 10.1 into 10.2 · bce380f2
      Marko Mäkelä authored
      bce380f2
    • Marko Mäkelä's avatar
      Omit the definition of unused function yyset_extra() · b88f3786
      Marko Mäkelä authored
      This is follow-up for commit 619d22dd
      to fix the cmake -DWITH_EMBEDDED_SERVER build.
      b88f3786
  3. 01 Apr, 2019 5 commits
  4. 30 Mar, 2019 2 commits
  5. 29 Mar, 2019 6 commits
  6. 28 Mar, 2019 8 commits
    • Sergei Petrunia's avatar
      MDEV-18080, part#1: MyRocks is slow with log-bin=off · 8fcd9478
      Sergei Petrunia authored
      The cause for this was fix MDEV-15372, which was trying to speed up
      the parallel slave.
      
      Part#1: Do not attempt the "optimization" for transactions that are not
      replication slave workers.
      8fcd9478
    • Sujatha Sivakumar's avatar
      MDEV-13895: GTID and Master_Delay causes excessive initial delay · e42192d7
      Sujatha Sivakumar authored
      Problem:
      ========
      When attempting to delay a Slave attached with GTID, there appears to be an
      extra delay applied initially. For example, this output reflects a Slave that is
      already delayed by 43200 seconds. When switching to GTID replication,
      replication is paused until SQL_Remaining_Delay counts down to 0:
      
      CHANGE MASTER TO master_use_gtid=current_pos; CHANGE MASTER TO
      MASTER_DELAY=43200;
      
      Seconds_Behind_Master: 44847
      Using_Gtid: Current_Pos
      SQL_Delay: 43200
      SQL_Remaining_Delay: 43089
      Slave_SQL_Running_State: Waiting until MASTER_DELAY seconds after master
      executed event
      
      Analysis:
      =========
      When slave initiates a GTID based connection request to master, the master sends
      two GTID_LIST events.  The first one is actual GTID_LIST event and the second
      one is a fake GTID_LIST event. This is sent by master to provide its current
      binlary log file position. The fake GTID_LIST events will have their ev->when=0.
      'when' (the timestamp) is set to 0 so that slave could distinguish between real
      and fake Rotate events.
      
      On slave side when MASTER_DELAY is configured to "X" the applier will ensure
      that there is a time delay of "X" seconds before the event is applied.
      
      General behaviour of MASTER_DELAY example:-
      
      Master
      timestamp of event e1=10
      timestamp of event e2=11
      
      On slave MASTER_DELAY=5
      Event e1 will be applied at = 15
      e2 will be applied at =16
      
      In bug scenario:-
      
      On Master: With GTIDs
      timestamp of event e1=10
      timestamp of event e2=0
      
      On Slave:
      e1 will be applied at = 10 + 5 =15
      For e2, since "e2->when=0" e2->when is set to current timestamp.
      i.e since the e2->when and current timestamp on slave is the same applier waits
      for additional master_delay=5 seconds. the ev->when contributes to
      "rli->last_master_timestamp".
      
      rli->last_master_timestamp= ev->when + (time_t) ev->exec_time;
      
      Fake events should not update the "ev->when" to "current timestamp" on slave.
      
      Fix:
      ===
      Remove the assignment of current timestamp to "ev->when" when "ev->when=0".
      e42192d7
    • Vladislav Vaintroub's avatar
    • Marko Mäkelä's avatar
      Revert MDEV-18464 and MDEV-12009 · d0116e10
      Marko Mäkelä authored
      This reverts commit 21b2fada
      and commit 81d71ee6.
      
      The MDEV-18464 change introduces a few data race issues. Contrary to
      the documentation, the field trx_t::victim is not always being protected
      by lock_sys_t::mutex and trx_t::mutex. Most importantly, it seems
      that KILL QUERY could wrongly avoid acquiring both mutexes when
      invoking lock_trx_handle_wait_low(), in case another thread had
      already set trx->victim=true.
      
      We also revert MDEV-12009, because it should depend on the MDEV-18464
      fix being present.
      d0116e10
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-19051 Avoid unnecessary writing MLOG_INDEX_LOAD · 0623cc7c
      Thirunarayanan Balathandayuthapani authored
      1) Avoid writing of MLOG_INDEX_LOAD redo log record during inplace
      alter table when the table is empty and also for spatial index.
      
      2) Avoid creation of temporary merge file for spatial index during
      index creation process.
      0623cc7c
    • Varun Gupta's avatar
      MDEV-18899: Server crashes in Field::set_warning_truncated_wrong_value · 38cad687
      Varun Gupta authored
      To fix the crash there we need to make sure that the
      server while storing the statistical values in statistical tables should do it
      in a multi-byte safe way.
      Also there is no need to throw warnings if there is truncation while storing
      values from statistical fields.
      38cad687
    • Jan Lindström's avatar
      MDEV-12009: Allow to force kill user threads/query which are flagged as high priority by Galera · 81d71ee6
      Jan Lindström authored
      As noted on kill_one_thread SUPER should be able to kill even
      system threads i.e. threads/query flagged as high priority or
      wsrep applier thread. Normal user, should not able to kill
      threads/query flagged as high priority (BF) or wsrep applier
      thread.
      81d71ee6
    • Jan Lindström's avatar
      MDEV-18464: Port kill_one_trx fixes from 10.4 to 10.1 · 21b2fada
      Jan Lindström authored
      Pushed the decision for innodb transaction and system
      locking down to lock0lock.cc level. With this,
      we can avoid releasing these mutexes for executions
      where these mutexes were acquired upfront.
      
      This patch will also fix BF aborting of native threads, e.g.
      threads which have declared wsrep_on=OFF. Earlier, we have
      used, for innodb trx locks, was_chosen_as_deadlock_victim
      flag, for marking inodb transactions, which are victims for
      wsrep BF abort. With native threads (wsrep_on==OFF), re-using
      was_chosen_as_deadlock_victim flag may lead to inteference
      with real deadlock, and to deal with this, the patch has added new
      flag for marking wsrep BF aborts only: victim=true
      
      Similar way if replication decides to abort one of the threads
      we mark victim by: victim=true
      
      innobase_kill_query
      	Remove lock sys and trx mutex handling.
      
      wsrep_innobase_kill_one_trx
      	Mark victim trx with victim=true
      
      trx0trx.h
      	Remove trx_abort_t type and abort type variable from
      	trx struct. Add victim variable to trx.
      
      wsrep_kill_victim
      	Remove abort_type
      
      lock_report_waiters_to_mysql
      	Take also trx mutex and mark trx as a victim for
      	replication abort.
      
      lock_trx_handle_wait_low
      	New low level function to check whether the transaction
      	has already been rolled back because it was selected as
      	a deadlock victim, or if it has to wait then cancel
      	the wait lock.
      
      lock_trx_handle_wait
      	If transaction is not marked as victim take lock sys
      	and trx mutex before calling lock_trx_handle_wait_low
      	and release them after that.
      
      row_search_for_mysql
      	Remove lock sys and trx mutex taking and releasing.
      
      trx_rollback_to_savepoint_for_mysql_low
      trx_commit_in_memory
      	Clean up victim variable.
      21b2fada
  7. 27 Mar, 2019 1 commit