1. 19 Nov, 2023 2 commits
  2. 14 Nov, 2023 4 commits
  3. 08 Nov, 2023 10 commits
  4. 07 Nov, 2023 1 commit
  5. 06 Nov, 2023 1 commit
  6. 04 Nov, 2023 3 commits
    • Marko Mäkelä's avatar
      MDEV-31826: File handle leak on failed IMPORT TABLESPACE · 1fc2843e
      Marko Mäkelä authored
      fil_space_t::drop(): If the caller is not interested in a
      detached handle, close it immediately.
      1fc2843e
    • Nikita Malyavin's avatar
      f7646d89
    • Nikita Malyavin's avatar
      MDEV-32444 Data from orphaned XA transaction is lost after online alter · 23f9e342
      Nikita Malyavin authored
      XA support for online alter was totally missing.
      
      Tying on binlog_hton made this hardly visible: simply having binlog_commit
      called from xa_commit made an impression that it will automagically work
      for online alter, which turns out wrong: all binlog does is writes
      "XA END" into trx cache and flushes it to a real binlog.
      
      In comparison, online alter can't do the same, since online replication
      happens in a single transaction.
      
      Solution: make a dedicated XA support.
      * Extend struct xid_t with a pointer to Online_alter_cache_list
      * On prepare: move online alter cache from THD::ha_data to XID passed
      * On XA commit/rollback: use the online alter cache stored in this XID.
        This makes us pass xid_cache_element->xid to xa_commit/xa_rollback
        instead of lex->xid
      * Use manual memory management for online alter cache list, instead of
        mem_root allocation, since we don't have mem_root connected to the XA
        transaction.
      23f9e342
  7. 02 Nov, 2023 9 commits
    • Nikita Malyavin's avatar
      online alter: rework savepoints · a569515a
      Nikita Malyavin authored
      Use standard handlerton functions for savepoint add/rollback.
      
      To identify the savepoint, the pointer passed is used.
      
      Every table that has online alter in progress maintains a list of
      savepoints independently.
      
      Also this removes setting a value to a global variable savepoint_alloc_size
      without any protection, which was a race condition bug.
      a569515a
    • Nikita Malyavin's avatar
      8311eae6
    • Nikita Malyavin's avatar
      online alter: extract the source to a separate file · cb521746
      Nikita Malyavin authored
      Move all the functions dedicated to online alter to a newly created
      online_alter.cc.
      
      With that, make many functions static and simplify the static functions
      naming.
      
      Also, rename binlog_log_row_online_alter -> online_alter_log_row.
      cb521746
    • Nikita Malyavin's avatar
      MDEV-32126 Assertion fails upon online ALTER and binary log enabled · 830bdfcc
      Nikita Malyavin authored
      Assertion `!writer.checksum_len || writer.remains == 0' fails upon
      concurrent online ALTER and transactions with failing statements and binary
      log enabled.
      Also another assertion, `pos != (~(my_off_t) 0)', fails in my_seek, upon
      reinit_io_cache, on a simplified test. This means that IO_CACHE wasn't
      properly initialized, or had an error before.
      
      The overall problem is a deep interference with the effect of an installed
      binlog_hton: the assumption about that thd->binlog_get_cache_mngr() is,
      sufficiently, NULL, when we shouldn't run the binlog part of
      binlog_commit/binlog_rollback, is wrong: as turns out, sometimes the binlog
      handlerton can be not installed in current thd, but binlog_commit can be
      called on behalf of binlog, as in the bug reported.
      
      One separate condition found is XA recovery of the orphaned transaction,
      when binlog_commit is also called, but it has nothing to do with
      online alter.
      
      Solution:
      Extract online alter operations into a separate handlerton.
      830bdfcc
    • Nikita Malyavin's avatar
      binlog_cache_data: add more consts · a1019e93
      Nikita Malyavin authored
      a1019e93
    • Nikita Malyavin's avatar
      MDEV-32100 Online ALTER TABLE ends with 1032 under some isolation levels · 46ee272a
      Nikita Malyavin authored
      1032 (Can't find record) could be emitted when ALTER TABLE is execued vs
      concurrent DELETE/UPDATE/other DML that would require search on the online
      ALTER's side.
      
      Innodb's INPLACE, in comparison, creates a new trx_t and uses it in scope
      of the alter table context.
      
      ALTER TABLE class of statements (i.g. CREATE INDEX, OPTIMIZE, etc.) is
      expected to be unaffected by the value of current session's transaction
      isolation.
      
      This patch save-and-restores thd->tx_isolation and sets in to
      ISO_REPEATABLE_READ for almost a whole mysql_alter_table duration, to avoid
      any possible side-effect of it. This should be primarily done before the
      lock_tables call, to initialize the storage engine's local value correctly
      during the store_lock() call.
      
      sql_table.cc: set thd->tx_isolation to ISO_REPEATABLE_READ in
      mysql_alter_table and then restore it to the original value in the end of
      the call.
      46ee272a
    • Rucha Deodhar's avatar
      MDEV-31411: JSON_ARRAY_INTERSECT/JSON_OBJECT_FILTER_KEYS should fetch · 5c5123df
      Rucha Deodhar authored
      data from a table similar to other JSON functions
      
      Analysis:
      Since we are fetching values for every row ( because we are running SELECT
      for all rows of a table ), correct value can be only obtained at the time of
      calling val_int() because it is called to get value for each row.
      Fix:
      Set up hash for each row instead of doing it during fixing fields.
      5c5123df
    • Monty's avatar
      rpl.rpl_invoked_features fails sporadically with "Duplicate key error" · 22ffe4dd
      Monty authored
      The reason was that Event e11 was re-executed before
      "ALTER EVENT e11 DISABLE" had been executed.
      
      Fixed by increasing re-schedule time
      
      Other things:
      - Removed double accounting of 'execution_count'. It was incremented in
        top->mark_last_executed(thd) that was executed a few lines earlier.
      22ffe4dd
    • Oleg Smirnov's avatar
      MDEV-32382 FederatedX error on pushdown of statements having CTE · 855356ca
      Oleg Smirnov authored
      Pushing down statements to FederatedX engine is implemented by
      printing either SELECT_LEX or SELECT_LEX_UNIT into a string and
      sending that string to the engine. In the case of pushing down a
      single SELECT having a CTE (WITH clause) there was a problem, because
      normally single SELECTs were printed using SELECT_LEX::print().
      But CTEs are stored in the upper unit of the SELECT_LEX -
      SELECT_LEX_UNIT, so they were not unfolded in the string produced.
      
      The solution is to invoke SELECT_LEX_UNIT::print() when pushing down
      single SELECT statements (but not those which are parts of units),
      so the possible CTEs are unfolded and printed.
      
      Reviewed by Sergei Petrunia (sergey@mariadb.com)
      855356ca
  8. 01 Nov, 2023 4 commits
    • Monty's avatar
      MDEV-3953 Add columns for ROWS_EXAMINED, ROWS_SENT, and ROWS_READ to I_S and processlist · f132fc00
      Monty authored
      MDEV-32441 SENT_ROWS shows random wrong values when stored function
                 is selected.
      MDEV-32281 EXAMINED_ROWS is not populated in
                 information_schema.processlist upon SELECT.
      
      Added ROWS_SENT to information_schema.processlist
      This is to have the same information as Percona server (SENT_ROWS)
      
      To ensure that information_schema.processlist has correct values for
      sent_rows and examined_rows I introduced two new variables to hold the
      total counts so far. This was needed as stored functions and stored
      procedures will reset the normal counters to be able to count rows for
      each statement individually for slow query log.
      
      Other things:
      - Selects with functions shows in processlist the total examined_rows
        and sent_rows by the main statement and all functions.
      - Stored procedures shows in processlist examined_rows and sent_rows
        per stored procedure statement.
      - Fixed some double accounting for sent_rows and examined_rows.
      - HANDLER operations now also supports send_rows and examined_rows.
      - Display sizes for MEMORY_USED, MAX_MEMORY_USED, EXAMINED_ROWS and
        QUERY_ID in information_schema.processlist changed to 10 characters.
      - EXAMINED_ROWS and SENT_ROWS changed to bigint.
      - INSERT RETURNING and DELETE RETURNING now updates SENT_ROWS.
      - As thd is always up to date with examined_rows, we do not need
        to handle examined row counting for unions or filesort.
      - I renamed SORT_INFO::examined_rows to m_examined_rows to ensure that
        we don't get bugs in merges that tries to use examined_rows.
      - Removed calls of type "thd->set_examined_row_count(0)" as they are
        not needed anymore.
      - Removed JOIN::join_examined_rows
      - Removed not used functions:
        THD::set_examined_row_count()
      - Made inline some functions that where called for each row.
      f132fc00
    • Monty's avatar
      3e50b4ec
    • Sergei Golubchik's avatar
    • Monty's avatar
      Fixed compiler warnings · 376ca2f6
      Monty authored
      376ca2f6
  9. 31 Oct, 2023 1 commit
  10. 30 Oct, 2023 4 commits
  11. 28 Oct, 2023 1 commit