1. 14 Nov, 2023 1 commit
    • Nikita Malyavin's avatar
      MDEV-32771 Server crash upon online alter with concurrent XA · d59d8836
      Nikita Malyavin authored
      In case of a non-recovery XA rollback/commit in the same connection,
      thon->rollback is called instead of rollback_by_xid, Though previously,
      thd_ha_data was moved to thd->transaction->xid_state.xid in hton->prepare.
      
      Like it wasn't enough, XA PREPARE can be skipped upon user and thus we
      can end up in hton->commit/rollback with and unprepared XA, so checking
      xid_state.is_explicit_XA is not enough -- we should check
      xid_state.get_state_code() == XA_PREPARED, which will also guarantee
      is_explicit_XA() == true.
      d59d8836
  2. 04 Nov, 2023 2 commits
    • 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
  3. 02 Nov, 2023 7 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
  4. 27 Oct, 2023 1 commit
  5. 19 Oct, 2023 2 commits
  6. 18 Oct, 2023 3 commits
    • Marko Mäkelä's avatar
      Merge 10.10 into 10.11 · f833ef5a
      Marko Mäkelä authored
      f833ef5a
    • Marko Mäkelä's avatar
      Merge 10.6 into 10.10 · c857259e
      Marko Mäkelä authored
      c857259e
    • Marko Mäkelä's avatar
      MDEV-32511 Assertion !os_aio_pending_writes() failed · bf7c6fc2
      Marko Mäkelä authored
      In MemorySanitizer builds of 10.10 and 10.11, we would rather often
      have the assertion fail in innodb_init() during mariadb-backup --prepare.
      The assertion could also fail during InnoDB startup, but less often.
      
      Before commit 685d958e in 10.8 the
      log file cleanup after a successfully applied backup is different,
      and the os_aio_pending_writes() assertion is in srv0start.cc.
      
      IORequest::write_complete(): Invoke node->complete_write() before
      releasing the page latch, so that a log checkpoint that is about to
      execute concurrently will not miss a fdatasync() or fsync() on the
      file, in case this was the first write since the last such call.
      
      create_log_file(), srv_start(): Replace the debug assertion with
      a debug check. For all intents and purposes, all writes could have
      been completed but some write_io_callback() may not have invoked
      io_slots::release() yet.
      bf7c6fc2
  7. 17 Oct, 2023 5 commits
  8. 16 Oct, 2023 2 commits
  9. 14 Oct, 2023 3 commits
    • Monty's avatar
      MDEV-32449 Server crashes in Alter_info::add_stat_drop_index upon CREATE TABLE · 1c554459
      Monty authored
      Fixed missing initialization of Alter_info()
      
      This could cause crashes in some create table like scenarios
      where some generated indexes where automatically dropped.
      
      I also added a test that we do not try to drop from index_stats for
      temporary tables.
      1c554459
    • Monty's avatar
      Do not create histograms for single column unique key · ec277a70
      Monty authored
      The intentention was always to not create histograms for single value
      unique keys (as histograms is not useful in this case), but because of
      a bug in the code this was still done.
      
      The changes in the test cases was mainly because hist_size is now NULL
      for these kind of columns.
      ec277a70
    • Marko Mäkelä's avatar
      Merge 10.6 into 10.10 · d5e15424
      Marko Mäkelä authored
      The MDEV-29693 conflict resolution is from Monty, as well as is
      a bug fix where ANALYZE TABLE wrongly built histograms for
      single-column PRIMARY KEY.
      Also includes a fix for safe_malloc error reporting.
      
      Other things:
      - Copied main.log_slow from 10.4 to avoid mtr issue
      
      Disabled test:
      - spider/bugfix.mdev_27239 because we started to get
        +Error	1429 Unable to connect to foreign data source: localhost
        -Error	1158 Got an error reading communication packets
      - main.delayed
        - Bug#54332 Deadlock with two connections doing LOCK TABLE+INSERT DELAYED
          This part is disabled for now as it fails randomly with different
          warnings/errors (no corruption).
      d5e15424
  10. 13 Oct, 2023 3 commits
    • Vlad Lesin's avatar
      MDEV-32272 lock_release_on_prepare_try() does not release lock if supremum bit... · 18fa00a5
      Vlad Lesin authored
      MDEV-32272 lock_release_on_prepare_try() does not release lock if supremum bit is set along with other bits set in lock's bitmap
      
      The error is caused by MDEV-30165 fix with the following commit:
      d13a57ae
      
      There is logical error in lock_release_on_prepare_try():
      
              if (supremum_bit)
                lock_rec_unlock_supremum(*cell, lock);
              else
                lock_rec_dequeue_from_page(lock, false);
      
      Because there can be other bits set in the lock's bitmap, and the lock
      type can be suitable for releasing criteria, but the above logic
      releases only supremum bit of the lock.
      
      The fix is to release lock if it suits for releasing criteria and unlock
      supremum if supremum is locked otherwise.
      
      Tere is also the test for the case, which was reported by QA team. I
      placed it in a separate files, because it requires debug build.
      
      Reviewed by: Marko Mäkelä
      18fa00a5
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-31098 InnoDB Recovery doesn't display encryption message when no... · cbad0bcd
      Thirunarayanan Balathandayuthapani authored
      MDEV-31098  InnoDB Recovery doesn't display encryption message when no encryption configuration passed
      
      - InnoDB fails to report the error when encryption configuration
      wasn't passed. This patch addresses the issue by adding
      the error while loading the tablespace and deferring the
      tablespace creation.
      cbad0bcd
    • Yuchen Pei's avatar
      Merge branch '10.10' into 10.11 · 17810b75
      Yuchen Pei authored
      17810b75
  11. 12 Oct, 2023 1 commit
    • Daniel Black's avatar
      MDEV-18200 MariaBackup full backup failed with InnoDB: Failing assertion: success · 3b38c2f3
      Daniel Black authored
      There are many filesystem related errors that can occur with
      MariaBackup. These already outputed to stderr with a good description of
      the error. Many of these are permission or resource (file descriptor)
      limits where the assertion and resulting core crash doesn't offer
      developers anything more than the log message. To the user, assertions
      and core crashes come across as poor error handling.
      
      As such we return an error and handle this all the way up the stack.
      3b38c2f3
  12. 11 Oct, 2023 3 commits
    • Marko Mäkelä's avatar
      MDEV-32364 Server crashes when starting server with high innodb_log_buffer_size · c72ddeea
      Marko Mäkelä authored
      log_t::create(), log_t::attach(): Return whether the initialisation
      succeeded. It may fail if too large an innodb_log_buffer_size is specified.
      
      recv_sys_t::close_files(): Actually close the data files so that the
      test mariabackup.huge_lsn,strict_crc32 will not fail on Microsoft Windows
      when renaming ib_logfile101 due to a leaked file handle of ib_logfile0.
      
      recv_sys_t::find_checkpoint(): Register recv_sys.files[0] as OS_FILE_CLOSED
      because the file handle has already been attached to log_sys.log and
      we do not want to close the file twice.
      
      recv_sys_t::read(): Access the first log file via log_sys.log.
      
      This is a port of commit 6e9b421f
      adapted to commit 685d958e (MDEV-14425).
      
      The test case is omitted, because it would fail to fail when the log
      is stored in persistent memory (or "fake PMEM" on Linux /dev/shm).
      c72ddeea
    • Dmitry Shulga's avatar
      MDEV-32123: require_secure_transport doesn't allow TCP connections · a05b5dd5
      Dmitry Shulga authored
      In case the option require_secure_transport is on the user can't
      establish a secure ssl connection over TCP protocol. Inability to set up
      a ssl session over TCP was caused by the fact that a type of client's
      connection was checked before ssl handshake performed (ssl handshake
      happens at the function acl_authenticate()). At that moment vio type has
      the value VIO_TYPE_TCPIP for client connection that uses TCP transport.
      In result, checking for allowable vio type for fails despite the fact
      that SSL session being established. To fix the issue move checking of
      vio type for allowable values inside the function
        parse_client_handshake_packet()
      right after client's capabilities discovered that SSL is not requested
      by the client.
      a05b5dd5
    • Yuchen Pei's avatar
      MDEV-32238 Adding a switch to disable the spider group by handler · 50784c88
      Yuchen Pei authored
      The system variable spider_disable_group_by_handler, if on, will
      disable the spider group by handler (gbh), and such disablement serves
      as workaround to bugs caused by gbh, labelled with spider-gbh on jira,
      including MDEV-26247, MDEV-28998, MDEV-29163, MDEV-30392, MDEV-31645.
      Tests for these tickets are added accordingly with the workaround in
      place.
      50784c88
  13. 10 Oct, 2023 4 commits
  14. 08 Oct, 2023 1 commit
    • Otto Kekalainen's avatar
      Fix merge commit 5ea5291d: No test file or result files should be executable · 8941bdc4
      Otto Kekalainen authored
      In commit 5ea5291d @sanja-byelkin for unknown reason switched the file mode
      for 3 Galera tzinfo related test files from 644 -> 755. This exists only
      from branch 10.6 onward:
      
          $ git checkout 10.5
          $ find mysql-test -executable -name *.test -or -executable -name *.result
          (no results)
          $ git checkout 10.6
          $ find mysql-test -executable -name *.test -or -executable -name *.result
          mysql-test/suite/galera/t/mysql_tzmysql-test/suite/galera/t/mysql_tzinfo_to_sql.test
          mysql-test/suite/galera/t/mariadb_tzinfo_to_sql.test
          mysql-test/suite/galera/r/mariadb_tzinfo_to_sql.resultinfo_to_sql.test
      
      mysql-test/suite/galera/t/mariadb_tzinfo_to_sql.test
      mysql-test/suite/galera/r/mariadb_tzinfo_to_sql.result
      
      No test file nor test result file should be executable, so run chmod -x
      on them.
      
      All new code of the whole pull request, including one or several files
      that are either new files or modified ones, are contributed under the
      BSD-new license. I am contributing on behalf of my employer Amazon Web
      Services, Inc.
      8941bdc4
  15. 06 Oct, 2023 2 commits