1. 25 Apr, 2019 6 commits
    • Sergey Vojtovich's avatar
      Moved normal transaction xid to implicit_xid · b7fd7ce2
      Sergey Vojtovich authored
      Part of MDEV-7974 - backport fix for mysql bug#12161 (XA and binlog)
      b7fd7ce2
    • Sergey Vojtovich's avatar
      Move XID_STATE::xa_state to XID_cache_element · 228514e5
      Sergey Vojtovich authored
      Simplified away XA_NOTR, use XID_STATE::is_explicit_XA() instead.
      
      Part of MDEV-7974 - backport fix for mysql bug#12161 (XA and binlog)
      228514e5
    • Sergey Vojtovich's avatar
      Move XID_state::xa_state handing inside xa.cc · a168cfb3
      Sergey Vojtovich authored
      Let xid_cache_insert()/xid_cache_delete() handle xa_state.
      
      Let session tracker use is_explicit_XA() rather than xa_state != XA_NOTR.
      
      Fixed open_tables() to refuse data access in XA_ROLLBACK_ONLY state.
      
      Removed dead code from THD::cleanup(). It was supposed to be a reminder,
      but it got messed up over time.
      
      spider_internal_start_trx() is called either with XA_NOTR or XA_ACTIVE,
      which is guarded by server callers. Thus is_explicit_XA() is acceptable
      replacement for XA_ACTIVE check (which was likely wrong anyway).
      
      Setting xa_state to XA_PREPARED in spider_internal_xa_prepare() isn't
      meaningful, as this value is never accessed later. It can't be accessed
      by current thread and it can't be recovered either. It can only be
      accessed by spider internally, which never happens.
      
      Make spider_xa_lock()/spider_xa_unlock() static.
      
      Part of MDEV-7974 - backport fix for mysql bug#12161 (XA and binlog)
      a168cfb3
    • Sergey Vojtovich's avatar
      Move XID_STATE::rm_error to XID_cache_element · f189f34e
      Sergey Vojtovich authored
      XID_STATE::rm_error is never used by internal 2PC, it is intended to be
      used by explicit XA only.
      
      Also removed redundant xid reset from THD::init_for_queries(). Must've
      been done already either by THD::transaction constructor or by
      THD::cleanup().
      
      Part of MDEV-7974 - backport fix for mysql bug#12161 (XA and binlog)
      f189f34e
    • Sergey Vojtovich's avatar
      Just move, no code changes otherwise. · 07140f17
      Sergey Vojtovich authored
      Part of MDEV-7974 - backport fix for mysql bug#12161 (XA and binlog)
      07140f17
    • Alexander Barkov's avatar
      MDEV-19317 TEXT column accepts too long literals as a default value · ca7fbcea
      Alexander Barkov authored
      Adding new virtual methods in Field:
      - make_empty_rec_store_default_value()
      - make_empty_rec_reset()
      
      This simplifies the logic for every Field type,
      and makes the code more friendly to pluggable data types.
      ca7fbcea
  2. 23 Apr, 2019 1 commit
  3. 22 Apr, 2019 1 commit
  4. 19 Apr, 2019 5 commits
  5. 18 Apr, 2019 4 commits
    • Sergei Petrunia's avatar
      MDEV-19266: Crash in EITS code when enabling 128 indexes · 878ca5ca
      Sergei Petrunia authored
      Do not attempt to set param->table->with_impossible_ranges if the
      range optimizer is using pseudo-indexes (which is true when we are
      computing EITS selectivity estimates or doing partition pruning).
      878ca5ca
    • Marko Mäkelä's avatar
      Avoid DROP DATABASE test · 7b216ceb
      Marko Mäkelä authored
      DROP DATABASE would internally execute DROP TABLE on every contained
      table and finally remove the directory. In InnoDB, DROP TABLE is
      sometimes executed in the background. The table would be renamed to
      a name that starts with #sql. The existence of these files would
      prevent DROP DATABASE from succeeding.
      
      CREATE OR REPLACE DATABASE can internally execute DROP DATABASE if
      the directory already exists. This could fail due to the InnoDB
      background DROP TABLE, possibly due to some tables that were
      leftovers from earlier tests.
      7b216ceb
    • Vladislav Vaintroub's avatar
      MDEV-19274 mariadb does not build on OSes that do not have HAVE_POOL_OF_THREADS · 6812fb79
      Vladislav Vaintroub authored
      Do not try to compile threadpool_common.cc, if threadpool is not available
      on current OS.
      
      Also introduced undocumented/uncached CMake variable DISABLE_THREADPOOL,
      to emulate builds on exotic OSes.
      6812fb79
    • Igor Babaev's avatar
      MDEV-19164 Assertion `fixed' failed in Item_func_inet_aton::val_int · 59ed5f3a
      Igor Babaev authored
      When pushing a condition from HAVING into WHERE the function
      st_select_lex::pushdown_from_having_into_where() transforms column
      references in the pushed condition then performs cleanup of
      items of the condition and finally calls fix_fields() for the condition
      items. The cleanup is performed by a call of the method walk() with
      cleanup_processor as the first parameter. Unfortunately this sequence
      of calls does not work if the condition contains cached items, because
      fix_fields() cannot go through Item_cache items and this leaves
      underlying items unfixed.
      The solution of this problem used in this patch is just does not allow
      to process Item_cache objects when performing cleanup of the pushed
      condition. In order to let the traversal procedure walk() not to process
      Item_cache objects the third parameter of the used call of walk()
      is set to a fictitious pointer (void *) 1. And Item_cache::walk() is
      changed to prevent any action when it gets such value as the third
      parameter.
      59ed5f3a
  6. 17 Apr, 2019 5 commits
    • Marko Mäkelä's avatar
      Merge 10.3 into 10.4 · e7029e86
      Marko Mäkelä authored
      e7029e86
    • Marko Mäkelä's avatar
      Merge 10.2 into 10.3 · 250799f9
      Marko Mäkelä authored
      250799f9
    • Marko Mäkelä's avatar
      MDEV-12699 Improve crash recovery of corrupted data pages · 169c0099
      Marko Mäkelä authored
      InnoDB crash recovery used to read every data page for which
      redo log exists. This is unnecessary for those pages that are
      initialized by the redo log. If a newly created page is corrupted,
      recovery could unnecessarily fail. It would suffice to reinitialize
      the page based on the redo log records.
      
      To add insult to injury, InnoDB crash recovery could hang if it
      encountered a corrupted page. We will fix also that problem.
      InnoDB would normally refuse to start up if it encounters a
      corrupted page on recovery, but that can be overridden by
      setting innodb_force_recovery=1.
      
      Data pages are completely initialized by the records
      MLOG_INIT_FILE_PAGE2 and MLOG_ZIP_PAGE_COMPRESS.
      MariaDB 10.4 additionally recognizes MLOG_INIT_FREE_PAGE,
      which notifies that a page has been freed and its contents
      can be discarded (filled with zeroes).
      
      The record MLOG_INDEX_LOAD notifies that redo logging has
      been re-enabled after being disabled. We can avoid loading
      the page if all buffered redo log records predate the
      MLOG_INDEX_LOAD record.
      
      For the internal tables of FULLTEXT INDEX, no MLOG_INDEX_LOAD
      records were written before commit aa3f7a10.
      Hence, we will skip these optimizations for tables whose
      name starts with FTS_.
      
      This is joint work with Thirunarayanan Balathandayuthapani.
      
      fil_space_t::enable_lsn, file_name_t::enable_lsn: The LSN of the
      latest recovered MLOG_INDEX_LOAD record for a tablespace.
      
      mlog_init: Page initialization operations discovered during
      redo log scanning. FIXME: This really belongs in recv_sys->addr_hash,
      and should be removed in MDEV-19176.
      
      recv_addr_state: Add the new state RECV_WILL_NOT_READ to
      indicate that according to mlog_init, the page will be
      initialized based on redo log record contents.
      
      recv_add_to_hash_table(): Set the RECV_WILL_NOT_READ state
      if appropriate. For now, we do not treat MLOG_ZIP_PAGE_COMPRESS
      as page initialization. This works around bugs in the crash
      recovery of ROW_FORMAT=COMPRESSED tables.
      
      recv_mark_log_index_load(): Process a MLOG_INDEX_LOAD record
      by resetting the state to RECV_NOT_PROCESSED and by updating
      the fil_name_t::enable_lsn.
      
      recv_init_crash_recovery_spaces(): Copy fil_name_t::enable_lsn
      to fil_space_t::enable_lsn.
      
      recv_recover_page(): Add the parameter init_lsn, to ignore
      any log records that precede the page initialization.
      Add DBUG output about skipped operations.
      
      buf_page_create(): Initialize FIL_PAGE_LSN, so that
      recv_recover_page() will not wrongly skip applying
      the page-initialization record due to the field containing
      some newer LSN as a leftover from a different page.
      Do not invoke ibuf_merge_or_delete_for_page() during
      crash recovery.
      
      recv_apply_hashed_log_recs(): Remove some unnecessary lookups.
      Note if a corrupted page was found during recovery.
      After invoking buf_page_create(), do invoke
      ibuf_merge_or_delete_for_page() via mlog_init.ibuf_merge()
      in the last recovery batch.
      
      ibuf_merge_or_delete_for_page(): Relax a debug assertion.
      
      innobase_start_or_create_for_mysql(): Abort startup if
      a corrupted page was found during recovery. Corrupted pages
      will not be flagged if innodb_force_recovery is set.
      However, the recv_sys->found_corrupt_fs flag can be set
      regardless of innodb_force_recovery if file names are found
      to be incorrect (for example, multiple files with the same
      tablespace ID).
      169c0099
    • Marko Mäkelä's avatar
      MDEV-19241 InnoDB fails to write MLOG_INDEX_LOAD upon completing ALTER TABLE · 376bf4ed
      Marko Mäkelä authored
      Similar to what was done in commit aa3f7a10
      for FULLTEXT INDEX, we must ensure that MLOG_INDEX_LOAD records will always
      be written if redo logging was disabled.
      
      row_merge_build_indexes(): Invoke row_merge_write_redo() also when
      online operation is not being executed or an error occurs.
      In case of an error, invoke flush_observer->interrupted() so that
      the pages will not be flushed but merely evicted from the buffer pool.
      Before resuming redo logging, it is crucial for the correctness of
      mariabackup and InnoDB crash recovery to flush or evict all affected pages
      and to write MLOG_INDEX_LOAD records.
      376bf4ed
    • Alexander Barkov's avatar
      Adding missing ';' at the end of a rule · ee4a2fef
      Alexander Barkov authored
      ee4a2fef
  7. 16 Apr, 2019 10 commits
    • Oleksandr Byelkin's avatar
      MDEV-19263: Server crashes in mysql_handle_single_derived upon 2nd execution of PS · f202f3df
      Oleksandr Byelkin authored
      Fix case of prelocking placeholder
      f202f3df
    • Kentoku SHIBA's avatar
    • Igor Babaev's avatar
      MDEV-19195 Active Record unit test fails with MariaDB 10.4.3 · 645f77a6
      Igor Babaev authored
      Currently usage of range rowid filters can be combined only with
      ref access and single index range access. So if the optimizer has
      chosen some other quick select method to access a joined table
      then no range rowid filter can be used for this table.
      645f77a6
    • Marko Mäkelä's avatar
      MDEV-17494 Refuse ALGORITHM=INSTANT when the row size is too large · d9d79e4d
      Marko Mäkelä authored
      With the MDEV-15562 instant DROP COLUMN, clustered index records
      will contain traces of dropped columns, as follows:
      
      In ROW_FORMAT=REDUNDANT, dropped columns will be stored as 0 bytes,
      but they will consume 1 or 2 bytes per column in the record header.
      
      In ROW_FORMAT=COMPACT or ROW_FORMAT=DYNAMIC, dropped columns will
      be stored as NULL if allowed. This will consume 1 bit per nullable
      column.
      
      In ROW_FORMAT=COMPACT or ROW_FORMAT=DYNAMIC, dropped NOT NULL columns
      will be stored as 0 bytes if allowed. This will consume 1 byte per
      NOT NULL variable-length column. Fixed-length columns will be stored
      using the fixed number of bytes.
      
      The metadata record will be 20 bytes larger than user records, because
      it will contain a metadata BLOB pointer.
      
      We must refuse ALGORITHM=INSTANT (and require a table rebuild) if
      the metadata record would grow too big to fit in the index page.
      
      If SQL_MODE includes STRICT_TRANS_TABLES or STRICT_ALL_TABLES, we should
      refuse ALGORITHM=INSTANT if the maximum length of user records would
      exceed the maximum size of an index page, similar to what
      row_create_index_for_mysql() does during CREATE TABLE. This limit
      would kick in when the default values for any instantly added columns
      in the metadata record are NULL or short, but the allowed maximum values
      are long.
      
      instant_alter_column_possible(): Add the parameter "bool strict" to
      enable checks for the user record size, and always check the metadata
      record size.
      d9d79e4d
    • willhan's avatar
      fix bug for spider where using "not like" (#890) · f66e006b
      willhan authored
      test case:
      t1 is a spider engine table;
        CREATE TABLE `t1` (
        `id` int(11) NOT NULL DEFAULT '0',
        `name` char(64) DEFAULT NULL,
        PRIMARY KEY (`id`)
      ) ENGINE=SPIDER
      
      query: "select * from t1 where name  not like 'x%' " would dispatch "select xxx name name like 'x%' " to remote mysqld, is wrong
      f66e006b
    • Oleksandr Byelkin's avatar
      Cleanup of sql_derived.cc file · 8701e5b0
      Oleksandr Byelkin authored
      8701e5b0
    • Oleksandr Byelkin's avatar
      MDEV-17362: SIGSEGV in JOIN::optimize_inner or Assertion `fixed == 0' failed... · eb056f87
      Oleksandr Byelkin authored
      MDEV-17362: SIGSEGV in JOIN::optimize_inner or Assertion `fixed == 0' failed in  Item_equal::fix_fields, server crashes after 2nd execution of PS
      
      Move reinitialisation of pushdown variables for every query, because it used now not only for derived tables.
      eb056f87
    • Oleksandr Byelkin's avatar
      Cleanup of derived table interface · 6c306a72
      Oleksandr Byelkin authored
      6c306a72
    • wayne's avatar
      Typo fix in sql_sequence.cc · a2335b79
      wayne authored
      a2335b79
    • Alexander Barkov's avatar
      MDEV-19256 sql_acl.cc does not compile with WITH_VALGRIND with gcc 8.0 · 3bc863b2
      Alexander Barkov authored
      Turning initializing code into constructors.
      3bc863b2
  8. 15 Apr, 2019 3 commits
  9. 13 Apr, 2019 1 commit
  10. 12 Apr, 2019 4 commits