1. 30 Jun, 2023 21 commits
    • Sergei Golubchik's avatar
      don't do DROP SYSTEM VERSIONING online · a63684a1
      Sergei Golubchik authored
      because ALTER TABLE ... DROP SYSTEM VERSIONING
      is not just a change in the table structure, it also deletes
      all historical rows
      a63684a1
    • Sergei Golubchik's avatar
      set read_set early, before row reads · 307a4d33
      Sergei Golubchik authored
      also
      
      * don't modify write_set
      * backup/restore rpl_write_set
      307a4d33
    • Sergei Golubchik's avatar
      2a18ae8e
    • Sergei Golubchik's avatar
      online alter always uses ALGORITHM=COPY, LOCK=NONE · 512376f3
      Sergei Golubchik authored
      so any other value of ALGORITHM or LOCK disables online alter
      512376f3
    • Sergei Golubchik's avatar
      remove handler::open_read_view() · c4ca1ead
      Sergei Golubchik authored
      use ht->start_consistent_snapshot() instead
      c4ca1ead
    • Sergei Golubchik's avatar
      cleanup · 9824910f
      Sergei Golubchik authored
      no functional changes here
      9824910f
    • Sergei Golubchik's avatar
      87968ce5
    • Sergei Golubchik's avatar
      tests: move around, add new · 84b03783
      Sergei Golubchik authored
      two new tests:
      * alter table times out because of a long concurrent trx
      * alter table adds a column in the middle
      84b03783
    • Nikita Malyavin's avatar
      MDEV-16329 [5/5] ALTER ONLINE TABLE · f7ff9b40
      Nikita Malyavin authored
      * Log rows in online_alter_binlog.
      * Table online data is replicated within dedicated binlog file
      * Cached data is written on commit.
      * Versioning is fully supported.
      * Works both wit and without binlog enabled.
      
      * For now savepoints setup is forbidden while ONLINE ALTER goes on.
        Extra support is required. We can simply log the SAVEPOINT query events
        and replicate them together with row events. But it's not implemented
        for now.
      
      * Cache flipping:
      
        We want to care for the possible bottleneck in the online alter binlog
        reading/writing in advance.
      
        IO_CACHE does not provide anything better that sequential access,
        besides, only a single write is mutex-protected, which is not suitable,
        since we should write a transaction atomically.
      
        To solve this, a special layer on top Event_log is implemented.
        There are two IO_CACHE files underneath: one for reading, and one for
        writing.
      
        Once the read cache is empty, an exclusive lock is acquired (we can wait
        for a currently active transaction finish writing), and flip() is emitted,
        i.e. the write cache is reopened for read, and the read cache is emptied,
        and reopened for writing.
      
        This reminds a buffer flip that happens in accelerated graphics
        (DirectX/OpenGL/etc).
      
        Cache_flip_event_log is considered non-blocking for a single reader and a
        single writer in this sense, with the only lock held by reader during flip.
      
        An alternative approach by implementing a fair concurrent circular buffer
        is described in MDEV-24676.
      
      * Cache managers:
        We have two cache sinks: statement and transactional.
        It is important that the changes are first cached per-statement and
        per-transaction.
        If a statement fails, then only statement data is rolled back. The
        transaction moves along, however.
      
        Turns out, there's no guarantee that TABLE well persist in
        thd->open_tables to the transaction commit moment.
        If an error occurs, tables from statement are purged.
        Therefore, we can't store te caches in TABLE. Ideally, it should be
        handlerton, but we cut the corner and store it in THD in a list.
      f7ff9b40
    • Nikita Malyavin's avatar
      MDEV-16329 [4/5] Refactor MYSQL_BIN_LOG: extract Event_log ancestor · 20aae939
      Nikita Malyavin authored
      Event_log is supposed to be a basic logging class that can write events in
      a single file.
      
      MYSQL_BIN_LOG in comparison will have:
      * rotation support
      * index files
      * purging
      * gtid and transactional information handling.
      * is dedicated for a general-purpose binlog
      20aae939
    • Nikita Malyavin's avatar
      MDEV-16329 [3/5] use binlog_cache_data directly in most places · 9ca93a9c
      Nikita Malyavin authored
      * Eliminate most usages of THD::use_trans_table. Only 3 left, and they are
        at quite high levels, and really essential.
      * Eliminate is_transactional argument when possible. Lots of places are
        left though, because of some WSREP error handling in
        MYSQL_BIN_LOG::set_write_error.
      * Remove junk binlog functions from THD
      * binlog_prepare_pending_rows_event is moved to log.cc inside MYSQL_BIN_LOG
        and is not anymore template. Instead it accepls event factory with a type
        code, and a callback to a constructing function in it.
      9ca93a9c
    • Nikita Malyavin's avatar
      MDEV-16329 [2/5] refactor binlog and cache_mngr · ecf47bc2
      Nikita Malyavin authored
      pump up binlog and cache manager to level of binlog_log_row_internal
      ecf47bc2
    • Nikita Malyavin's avatar
      a49e51b5
    • Nikita Malyavin's avatar
      rpl: repack table_def · 0a7a45b4
      Nikita Malyavin authored
      1. Change m_size to uint. This removes some implicit conversions.
        See unpack_row, for instance:
        uint max_cols= MY_MIN(tabledef->size(), cols->n_bits);
      2. Improve table_def memory layout by reordering columns
      0a7a45b4
    • Nikita Malyavin's avatar
      Copy_field: add const to arguments · 2e07d9c0
      Nikita Malyavin authored
      2e07d9c0
    • Sergei Golubchik's avatar
      rename tests · 208f8343
      Sergei Golubchik authored
      alter_table_online -> alter_table_locknone
      gis-alter_table_online -> gis-alter_table
      208f8343
    • Sergei Golubchik's avatar
    • Sergei Golubchik's avatar
      cleanup: remove vcol_info->stored_in_db · eff78011
      Sergei Golubchik authored
      it was redundant, duplicating vcol_type == VCOL_GENERATED_STORED.
      
      Note that VCOL_DEFAULT is not "stored", "stored vcol" means that after
      rnd_next or index_read/etc the field value is already in the record[0]
      and does not need to be calculated separately
      eff78011
    • Sergei Golubchik's avatar
      Fix recalculation of vcols in binlog_row_image=minimal · efa160c3
      Sergei Golubchik authored
      unpack_row() must calculate all stored and indexed vcols
      (in fill_extra_persistent_columns()).
      
      Also Update and Delete row events must mark in read_set
      all columns needed for calculating all stored and indexed vcols.
      
      If it's done properly in do_apply_event(), it no longer needs
      to be repeated per row.
      efa160c3
    • Sergei Golubchik's avatar
      cleanup: clarify ha_innobase::column_bitmaps_signal() · f1310b9d
      Sergei Golubchik authored
      it was created to handle the case of the concurrent
      inplace add index. So it should only work in that case,
      otherwise it's doing server's job (marks virtual column dependencies)
      and hides server's bugs. And it was redundant.
      f1310b9d
    • Sergei Golubchik's avatar
      allow random_bytes() in virtual columns · 0d6ed735
      Sergei Golubchik authored
      0d6ed735
  2. 28 Jun, 2023 4 commits
  3. 27 Jun, 2023 5 commits
  4. 26 Jun, 2023 5 commits
  5. 25 Jun, 2023 5 commits
    • Monty's avatar
    • Monty's avatar
      Removed wrongly placed test from group_min_max.test · 40b9b980
      Monty authored
      This is mainly done to be able to push to 11.0
      The test is moved in 10.6 to another file, which will add back the test.
      40b9b980
    • Michael Widenius's avatar
      MDEV-23106 Unable to recognize/import partitioned tables from physical MySQL databases · 3c7fd3c8
      Michael Widenius authored
      MDEV-29253 Detect incompatible MySQL partition scheme and either convert
      them or report to user and in error log.
      
      This task is about converting in place MySQL 5.6 and 5.7 partition tables
      to MariaDB as part of mariadb-upgrade.
      
      - Update TABLE_SHARE::init_from_binary_frm_image() to be able to read
        MySQL frm files with partitions.
      - Create .par file, if it do not exists, on open of partitioned table.
      
      Executing mariadb-upgrade will create all the missing .par files.
      The MySQL .frm file will be changed to MariaDB format after next
      ALTER TABLE.
      
      Other changes:
      - If we are using stored mysql_version to distingush between MySQL and
        MariaDB  .frm file information, do not upgrade mysql_version in the
        .frm file as part of CHECK TABLE .. FOR UPGRADE as this would cause
        problems next time we parse the .frm file.
      3c7fd3c8
    • Monty's avatar
      Fixed some errors & warnings when running mariadb-upgrade on MySQL instance · d671fec4
      Monty authored
      - Moved view checks after privilege tables are fixed. This is to avoid
        warnings about wrongly defined mysql.proc when checking views.
      - Don't use stat tables before they have been fixed.
      - Don't run mysql_fix_view() if 'FOR MYSQL' is used if the view is
        already a MariaDB view.
      - Added 'FOR UPGRADE' as an option for 'REPAIR VIEW' to be able to
        detect if the REPAIR command comes from mariadb_upgrade. In this
        case we get a warning, instead of an error, if a definer of a view
        does not exists.
      d671fec4
    • Vicentiu Ciorbaru's avatar
      Fix segfault in find_files if db is NULL and path does not exist or can't be read · 324d8a60
      Vicentiu Ciorbaru authored
      In this case, one would end up calling my_error(ER_BAD_DB_ERROR, ...)
      with a null ptr for DB, which caused a NULL ptr dereference.
      324d8a60