1. 30 Jan, 2018 4 commits
    • Vladislav Vaintroub's avatar
      Roles : Initialize variables that are passed to update_role_db() · c744dde7
      Vladislav Vaintroub authored
      Fixes "uninitialized variable used"  crashes (Windows compiled for
      debug  e.g /RTC1 option)
      
      Also enable roles suite on buildbot.
      c744dde7
    • Marko Mäkelä's avatar
      MDEV-11415 Remove excessive undo logging during ALTER TABLE…ALGORITHM=COPY · 0ba6aaf0
      Marko Mäkelä authored
      If a crash occurs during ALTER TABLE…ALGORITHM=COPY, InnoDB would spend
      a lot of time rolling back writes to the intermediate copy of the table.
      To reduce the amount of busy work done, a work-around was introduced in
      commit fd069e2b in MySQL 4.1.8 and 5.0.2,
      to commit the transaction after every 10,000 inserted rows.
      
      A proper fix would have been to disable the undo logging altogether and
      to simply drop the intermediate copy of the table on subsequent server
      startup. This is what happens in MariaDB 10.3 with MDEV-14717,MDEV-14585.
      In MariaDB 10.2, the intermediate copy of the table would be left behind
      with a name starting with the string #sql.
      
      This is a backport of a bug fix from MySQL 8.0.0 to MariaDB,
      contributed by jixianliang <271365745@qq.com>.
      
      Unlike recent MySQL, MariaDB supports ALTER IGNORE. For that operation
      InnoDB must for now keep the undo logging enabled, so that the latest
      row can be rolled back in case of an error.
      
      In Galera cluster, the LOAD DATA statement will retain the existing
      behaviour and commit the transaction after every 10,000 rows if
      the parameter wsrep_load_data_splitting=ON is set. The logic to do
      so (the wsrep_load_data_split() function and the call
      handler::extra(HA_EXTRA_FAKE_START_STMT)) are joint work
      by Ji Xianliang and Marko Mäkelä.
      
      The original fix:
      
      Author: Thirunarayanan Balathandayuthapani <thirunarayanan.balathandayuth@oracle.com>
      Date:   Wed Dec 2 16:09:15 2015 +0530
      
      Bug#17479594 AVOID INTERMEDIATE COMMIT WHILE DOING ALTER TABLE ALGORITHM=COPY
      
      Problem:
      
      During ALTER TABLE, we commit and restart the transaction for every
      10,000 rows, so that the rollback after recovery would not take so long.
      
      Fix:
      
      Suppress the undo logging during copy alter operation. If fts_index is
      present then insert directly into fts auxiliary table rather
      than doing at commit time.
      
      ha_innobase::num_write_row: Remove the variable.
      
      ha_innobase::write_row(): Remove the hack for committing every 10000 rows.
      
      row_lock_table_for_mysql(): Remove the extra 2 parameters.
      
      lock_get_src_table(), lock_is_table_exclusive(): Remove.
      Reviewed-by: default avatarMarko Mäkelä <marko.makela@oracle.com>
      Reviewed-by: default avatarShaohua Wang <shaohua.wang@oracle.com>
      Reviewed-by: default avatarJon Olav Hauglid <jon.hauglid@oracle.com>
      0ba6aaf0
    • Jan Lindström's avatar
      MDEV-14875: galera_new_cluster crashes mysqld when existing server contains databases · 446b3d35
      Jan Lindström authored
      Fortify wsrep_hton so that wsrep calls are not done to NULL-pointers.
      446b3d35
    • Monty's avatar
      Fix some wrong test result · cea431e1
      Monty authored
      - Galera tests that was not updated with connection change
        messages
      - Disabled some TokuDB tests that always timed out.
        These should be enabled again when we have an option to
        specicy timeouts per tests.
      cea431e1
  2. 29 Jan, 2018 3 commits
  3. 28 Jan, 2018 1 commit
  4. 27 Jan, 2018 3 commits
    • Monty's avatar
      Fixed compiler warnings · 95f39339
      Monty authored
      Only warnings, should not have caused any bugs in old code
      95f39339
    • Monty's avatar
      Disable rocksdb when building with ASAN · 8ff5ddae
      Monty authored
      I disabled rocksdb in ASAN build as I got a link error when
      it's included
      8ff5ddae
    • Andrei Elkin's avatar
      MDEV-14721 Big transaction events get lost on semisync master when · c09371dc
      Andrei Elkin authored
                 replicate_events_marked_for_skip=FILTER_ON_MASTER
      
      When events of a big transaction are binlogged offsetting over 2GB from
      the beginning of the log the semisync master's dump thread
      lost such events.
      The events were skipped by the Dump thread that found their skipping
      status erroneously.
      
      The current fixes make sure the skipping status is computed correctly.
      The test verifies them simulating the 2GB offset.
      c09371dc
  5. 26 Jan, 2018 6 commits
  6. 25 Jan, 2018 1 commit
  7. 24 Jan, 2018 4 commits
    • Monty's avatar
      Fix for MDEV-12730 · 7fc25cfb
      Monty authored
      Assertion `count > 0' failed in rpl_parallel_thread_pool::
      get_thread, rpl.rpl_parallel failed in buildbot
      
      The reason for this is that one thread can call
      rpl_parallel_resize_pool_if_no_slaves() while
      another thread calls at the same time
      rpl_parallel_activate_pool(). If rpl_parallel_active_pool() is
      called before rpl_parallel_resize_pool_if_no_slaves() has
      finished, pool->count will be set to 0 even if there exists
      active slave threads.
      
      Added a mutex lock in rpl_parallel_activate_pool() to protect against this scenario, which seams to fix this issue.
      7fc25cfb
    • Monty's avatar
      MDEV-15057 Crash when using an unknown identifier as an SP parameter · 0dbe3dbe
      Monty authored
      It crashed because we accessed lex->current_select when
      it was a NULL, which is the case for SP parameters or
      local variables.
      0dbe3dbe
    • Marko Mäkelä's avatar
    • Marko Mäkelä's avatar
      MDEV-15016: multiple page cleaner threads use a lot of CPU · ac3e7f78
      Marko Mäkelä authored
      While the bug was reported as a regression of
      MDEV-11025 Make number of page cleaner threads variable dynamic
      in MariaDB Server 10.3, the code that MariaDB Server 10.2
      inherited from MySQL 5.7.4 (WL#6642) looks prone to similar errors.
      
      pc_flush_slot(): If there is no work to do, reset the is_requested
      signal, to avoid potential busy-waiting in
      buf_flush_page_cleaner_worker(). If the coordinator thread has shut
      down, avoid resetting the is_requested event, to avoid a potential
      hang at shutdown if there are multiple worker threads.
      ac3e7f78
  8. 23 Jan, 2018 3 commits
  9. 22 Jan, 2018 6 commits
    • Marko Mäkelä's avatar
      MDEV-12173 "[Warning] Trying to access missing tablespace" · 29eeb527
      Marko Mäkelä authored
      ibuf_merge_or_delete_for_page(): Invoke fil_space_acquire_silent()
      instead of fil_space_acquire() in order to avoid displaying
      a useless message.
      
      We know perfectly well that a tablespace can be dropped while a
      change buffer merge is pending, because change buffer merges skip
      any transactional locks.
      29eeb527
    • Marko Mäkelä's avatar
      89ae5d7f
    • Marko Mäkelä's avatar
      30f1d2f6
    • Marko Mäkelä's avatar
      MDEV-15029 XA COMMIT and XA ROLLBACK operate on freed transaction object · d04e1d4b
      Marko Mäkelä authored
      innobase_commit_by_xid(), innobase_rollback_by_xid(): Decrement
      the reference count before freeing the transaction object to the pool.
      Failure to do so might corrupt the transaction bookkeeping
      if trx_create_low() returns the same object to another thread
      before we are done with it.
      
      trx_sys_close(): Detach the recovered XA PREPARE transactions from
      trx_sys->rw_trx_list before freeing them.
      d04e1d4b
    • Sergei Petrunia's avatar
      MDEV-13352: Server crashes in st_join_table::remove_duplicates · 9b4dfdaa
      Sergei Petrunia authored
      join_tab->distinct=true means "Before doing record read with this
      join_tab, call join_tab->remove_duplicates() to eliminate duplicates".
      remove_duplicates() assumes that
      - there is a temporary table $T with rows that are to be de-duplicated
      - there is a previous join_tab (e.g. with join_tab->fields) which was
      used to populate the temp.table $T.
      
      When the query has "Impossible WHERE" and window function, then the above
      conditions are not met (but we still might need a window function
      computation step when the query has implicit grouping).
      
      The fix is to not add remove_duplicates step if the select execution is
      degenerate (and we'll have at most one row in the output anyway).
      9b4dfdaa
    • Marko Mäkelä's avatar
      MDEV-14941 Timeouts on persistent statistics tables caused by MDEV-14511 · 4f8555f1
      Marko Mäkelä authored
      MDEV-14511 tried to avoid some consistency problems related to InnoDB
      persistent statistics. The persistent statistics are being written by
      an InnoDB internal SQL interpreter that requires the InnoDB data dictionary
      cache to be locked.
      
      Before MDEV-14511, the statistics were written during DDL in separate
      transactions, which could unnecessarily reduce performance (each commit
      would require a redo log flush) and break atomicity, because the statistics
      would be updated separately from the dictionary transaction.
      
      However, because it is unacceptable to hold the InnoDB data dictionary
      cache locked while suspending the execution for waiting for a
      transactional lock (in the mysql.innodb_index_stats or
      mysql.innodb_table_stats tables) to be released, any lock conflict
      was immediately be reported as "lock wait timeout".
      
      To fix MDEV-14941, an attempt to reduce these lock conflicts by acquiring
      transactional locks on the user tables in both the statistics and DDL
      operations was made, but it would still not entirely prevent lock conflicts
      on the mysql.innodb_index_stats and mysql.innodb_table_stats tables.
      
      Fixing the remaining problems would require a change that is too intrusive
      for a GA release series, such as MariaDB 10.2.
      
      Thefefore, we revert the change MDEV-14511. To silence the
      MDEV-13201 assertion, we use the pre-existing flag trx_t::internal.
      4f8555f1
  10. 21 Jan, 2018 2 commits
    • Monty's avatar
      Reset thd->lex->current_select for SP · 6b7dcefd
      Monty authored
      current_select may point to data from old parser states
      when calling a stored procedure with CALL
      
      The failure happens in Item::Item when testing if we are
      in having.
      
      Fixed by explicitely reseting current_select in do_execute_sp()
      and in sp_rcontext::create(). The later is also needed for
      stored functions().
      6b7dcefd
    • Monty's avatar
      Fixed wrong arguments to printf in InnoDB · f67b8273
      Monty authored
      f67b8273
  11. 18 Jan, 2018 4 commits
    • Igor Babaev's avatar
      Fixed mdev-14969 Non-recursive Common Table Expressions used in view · 30289a27
      Igor Babaev authored
      caused an error
      
      The function subselect_single_select_engine::print() did not print
      the WITH clause attached to a subselect with single select engine.
      As a result views using suqueries with attached WITH clauses lost
      these clauses when saved in frm files.
      30289a27
    • Marko Mäkelä's avatar
      MDEV-14985 innodb_undo_log_truncate may be blocked if transactions were recovered at startup · 6c09a654
      Marko Mäkelä authored
      The field trx_rseg_t::trx_ref_count that was added in WL#6965 in
      MySQL 5.7.5 is being incremented twice if a recovered transaction
      includes both undo log partitions insert_undo and update_undo.
      
      This reference count is being used in trx_purge(), which invokes
      trx_purge_initiate_truncate() to try to truncate an undo tablespace
      file. Because of the double-increment, the trx_ref_count would never
      reach 0.
      
      It is possible that after the failed truncation attempt, the undo
      tablespace would be disabled for logging any new transactions until
      the server is restarted (hopefully after committing or rolling back
      all transactions, so that no transactions would be recovered
      on the next startup).
      
      trx_resurrect_insert(), trx_resurrect_update(): Do not increment
      trx_ref_count. Instead, let the caller do that.
      
      trx_lists_init_at_db_start(): Increment rseg->trx_ref_count only
      once for each recovered transaction. Adjust comments.
      Finally, if innodb_force_recovery prevents the undo log scan,
      do not bother iterating the empty lists.
      6c09a654
    • Monty's avatar
      cc915cd5
    • Monty's avatar
      Fixed MDEV-14326 engine ARIA with row_format=FIXED is broken · 50de7d13
      Monty authored
      The problem was that max_size was acciently set to 1 in some
      cases.
      
      Other things:
      - Adjust max_rows if min_rows > max_rows.
      - Removed not used variable varchar_length
      - Adjusted max_pack_length (safety fix)
      50de7d13
  12. 16 Jan, 2018 3 commits