1. 04 Dec, 2019 1 commit
    • Daniele Sciascia's avatar
      MDEV-20848 Fixes for MTR test galera_sr.GCF-1060 (#1421) · aab6cefe
      Daniele Sciascia authored
      This patch contains two fixes:
      
      * wsrep_handle_mdl_conflict(): handle the case where SR transaction
        is in aborting state. Previously, a BF-BF conflict was reported, and
        the process would abort.
      * wsrep_thd_bf_abort(): do not restore thread vars after calling
        wsrep_bf_abort(). Thread vars are already restored in wsrep-lib if
        necessary. This also removes the assumption that the caller of
        wsrep_thd_bf_abort() is the given bf_thd, which is not the case.
      
      Also in this patch:
      
      * Remove unnecessary check for active victim transaction in
        wsrep_thd_bf_abort(): the exact same check is performed later in
        wsrep_bf_abort().
      * Make wsrep_thd_bf_abort() and wsrep_log_thd() const-correct.
      * Change signature of wsrep_abort_thd() to take THD pointers instead
        of void pointers.
      aab6cefe
  2. 02 Dec, 2019 7 commits
    • Aleksey Midenkov's avatar
      Merge 10.3 into 10.4 · 0b8b11b0
      Aleksey Midenkov authored
      0b8b11b0
    • Aleksey Midenkov's avatar
      MDEV-18929 2nd execution of SP does not detect ER_VERS_NOT_VERSIONED (10.4) · 1d46923a
      Aleksey Midenkov authored
      Don't do skip_setup_conds() unless all errors are checked.
      
      Fixes following errors:
            ER_PERIOD_NOT_FOUND
            ER_VERS_QUERY_IN_PARTITION
            ER_VERS_ENGINE_UNSUPPORTED
            ER_VERS_NOT_VERSIONED
      1d46923a
    • Aleksey Midenkov's avatar
      MDEV-18929 2nd execution of SP does not detect ER_VERS_NOT_VERSIONED · db32d945
      Aleksey Midenkov authored
      Don't do skip_setup_conds() unless all errors are checked.
      
      Fixes following errors:
            ER_PERIOD_NOT_FOUND
            ER_VERS_QUERY_IN_PARTITION
            ER_VERS_ENGINE_UNSUPPORTED
            ER_VERS_NOT_VERSIONED
      db32d945
    • Aleksey Midenkov's avatar
      MDEV-21011 Table corruption reported for versioned partitioned table after... · a7cf0db3
      Aleksey Midenkov authored
      MDEV-21011 Table corruption reported for versioned partitioned table after DELETE: "Found a misplaced row"
      
      LIMIT history partitions cannot be checked by existing algorithm of
      check_misplaced_rows() because working history partition is
      incremented each time another one is filled. The existing algorithm
      gets record and tries to decide partition id for it by
      get_partition_id(). For LIMIT history it will just get first
      non-filled partition.
      
      To fix such partitions it is required to do REBUILD instead of REPAIR.
      a7cf0db3
    • Aleksey Midenkov's avatar
      MDEV-21155 Assertion with versioned table upon DELETE from view of view after replacing first view · 6dd41e00
      Aleksey Midenkov authored
      When view is merged by DT_MERGE_FOR_INSERT it is then skipped from
      processing and doesn't update WHERE clause with
      vers_setup_conds(). Note that view itself cannot work in
      vers_setup_conds() because it doesn't have row_start, row_end
      fields. Thus it is required to descend down to material TABLE_LIST
      through calls of mysql_derived_prepare() and run vers_setup_conds()
      from there. Luckily, all views (views of views, views of views of
      views, etc.) are linked in one list through next_global pointer, so we
      can skip all views of views and get straight to non-view TABLE_LIST by
      checking its merge_underlying_list property for zero value (it is
      assigned by DT_MERGE_FOR_INSERT for merged derived tables).
      
      We have to do that only for UPDATE and DELETE. Other DML commands
      don't use WHERE clause.
      
      MDEV-21146 Assertion `m_lock_type == 2' in handler::ha_drop_table upon LOAD DATA
      
      LOAD DATA does not use WHERE and the above call of vers_setup_conds()
      is not needed. unit->prepare() led to wrongly locked temporary table.
      6dd41e00
    • Aleksey Midenkov's avatar
      MDEV-21147 Assertion `marked_for_read()' upon UPDATE on versioned table via view · 97aa07ab
      Aleksey Midenkov authored
      "write set" for replication finally got its correct place
      (mark_columns_per_binlog_row_image()). When done generally in
      mark_columns_needed_for_update() it affects optimization
      algorithm. used_key_is_modified, query_plan.using_io_buffer are
      wrongly set and that leads to wrong prepare_for_keyread() which limits
      read_set.
      97aa07ab
    • Aleksey Midenkov's avatar
      MDEV-20441 ER_CRASHED_ON_USAGE upon update on versioned Aria table · 498a96a4
      Aleksey Midenkov authored
      Turn read cache off for update and multi-update for versioned
      table. no_cache is reinited on each TABLE open because it is
      applicable for specific algorithms.
      
      As a side fix vers_insert_history_row() honors vers_write setting.
      
      Aria with row_format=fixed uses IO_CACHE of type READ_CACHE for
      sequential read in update loop. When history row is inserted inside
      this loop the cache misses it and fails with error.
      
      TODO:
      
      Currently maria_extra() does not support SEQ_READ_APPEND. Probably it
      might be possible to use this type of cache.
      498a96a4
  3. 29 Nov, 2019 7 commits
  4. 28 Nov, 2019 6 commits
  5. 27 Nov, 2019 3 commits
    • Vladislav Vaintroub's avatar
      MDEV-19669 - fix matching CIDR address for proxy protocol. · 584ffa02
      Vladislav Vaintroub authored
      Prior to this fix, when matching addresses using mask,
      extra bits could be used for  comparison, e.g to
      match with "a.b.c.d/24" , 27 bits were compared rather than 24.
      
      The patch fixes the calculation.
      584ffa02
    • Vladislav Vaintroub's avatar
      MDEV-19781 fixups · 96c6b2b6
      Vladislav Vaintroub authored
      - It is not enough to have  and DeleteSymlinks actions
      because within the same installation some exes executables can be both
      added and removed, which needs both adding and removing some symlinks.
      
      Instead of CreateSymlinks, there is now FixSymlinks function, which
      goes through the list, and adds or removes the symlinks as needed.
      
      - Implemented rollback for symlink custom action.
      
      - Generate list of symlinks in C++ file, using CMake, rather than storing
      lists as MSI properties.
      96c6b2b6
    • Marko Mäkelä's avatar
      MDEV-21158 trx_undo_seg_free() is never redo-logged · 3fc1f626
      Marko Mäkelä authored
      As part of commit 3c09f148
      trx_undo_commit_cleanup() was always invoked with noredo=true.
      
      The impact of this should be that some undo log pages may not be
      correctly freed if the server is killed and crash recovery will be
      performed. Similarly, if mariabackup --backup is being executed
      concurrently with user transaction commits, it could happen that some
      undo log pages in the backup will never be marked as free for reuse.
      
      It seems that this bug should not have any user-visible
      impact other than some undo pages being wasted.
      3fc1f626
  6. 26 Nov, 2019 4 commits
  7. 25 Nov, 2019 5 commits
    • Marko Mäkelä's avatar
      MDEV-20190 Instant operation fails when add column and collation change on non-indexed column · f9ceb0a6
      Marko Mäkelä authored
      We must relax too strict debug assertions. For latin1_swedish_ci,
      mtype=DATA_CHAR or mtype=DATA_VARCHAR will be used instead of
      mtype=DATA_MYSQL or mtype=DATA_VARMYSQL. Likewise, some changes of
      dtype_get_charset_coll() do not affect the data type encoding,
      but only any indexes that are defined on the column.
      
      Charset::same_encoding(): Check whether two charset-collations have
      the same character set encoding.
      
      dict_col_t::same_encoding(): Check whether two character columns
      have the same character set encoding.
      
      dict_col_t::same_type(): Check whether two columns have a compatible
      data type encoding.
      
      dict_col_t::same_format(), dict_table_t::instant_column(): Do not
      compare mtype or the charset-collation of prtype directly.
      Rely on dict_col_t::same_type() instead.
      
      dtype_get_charset_coll(): Narrow the return type to uint16_t.
      
      This is a refined version of a fix that was developed by
      Thirunarayanan Balathandayuthapani.
      f9ceb0a6
    • Aleksey Midenkov's avatar
      Merge 10.3 into 10.4 · a34c34d9
      Aleksey Midenkov authored
      a34c34d9
    • Aleksey Midenkov's avatar
      MDEV-18727 improve DML operation of System Versioning (10.4) · 33f55789
      Aleksey Midenkov authored
      UPDATE, DELETE: replace linear search of current/historical records
      with vers_setup_conds().
      
      Additional DML cases in view.test
      33f55789
    • Aleksey Midenkov's avatar
      MDEV-18727 cleanup · bf58ec77
      Aleksey Midenkov authored
      bf58ec77
    • seppo's avatar
      MDEV-21096 async slave crash with gtid_log_pos table access (#1413) · 4111a530
      seppo authored
      The original crash happened when async replication IO thread was updating mysql.gtid_slave_pos table. Operations on this table should remain node local, but it appears that protection (THD::wsrep_ignore_table flag) to prevent wsrep replication for this table mas missing for innodb write_row() and update_row().
      It was somewhat difficult to reproduce the issue, because mtr seems to create the affected table mysql.gtid_log_pos as of Aria engine type, and Aria engine operations will not be replicated anyhow. It looks, though, that in release installation, mysql.gtid_slave_pos table is of InnoDB engine.
      It was possible to trigger somewhat related problem by running test galera.galera_as_slave_gtid with configuration: gtid_pos_auto_engines=InnoDB. However, this test mode, causes earlier crash when replication background thread creates aditional table: mysql.gtid_slave_pos_InnoDB, and this table create triggered wsrep TOI replication, which also failed for assertion. Actually, async replication IO and background threads should not replicate anything to cluster.
      
      This pull request contains new test galera.galera_as_slave_gtid_auto_engine, which basically just runs galera.galera_as_slave_gtid with configuration of gtid_pos_auto_engines=InnoDB.
      Test galera.galera_as_slave_gtid is also modified for better code reuse.
      Actual fix for MDEV-21096 is in storage/innobase/handler/ha_innodb.cc, where THD::wsrep_ignore_table flag is now honored before wsrep key population.
      There is additional fix in sql/service_wsrep.cc where async replication IO and background threads are marked as non-local. This fences these threads out of wsrep replication altogether. Note that this change, actually makes the use of THD::wsrep_ignore-table redundant. We may want to refactor THD::wsrep_ignore_table out in the future, if there is no other use case for it in sight.
      4111a530
  8. 23 Nov, 2019 1 commit
    • Igor Babaev's avatar
      MDEV-19919 Assertion `!prebuilt->index->is_primary()' failed · f9528821
      Igor Babaev authored
                 in row_search_idx_cond_check
      
      For a single table query with ORDER BY and several sargable range
      conditions the optimizer may choose an execution plan that employs
      a rowid filter. In this case it is important to build the filter before
      calling the function JOIN_TAB::sort_table() that creates sort index
      for the result set, because when this is index created the filter has
      to be already filled. After the sort index has been created the
      filter must be deactivated. If not to do this the innodb function
      row_search_idx_cond_check() is getting confused when it has to read rows
      from the created sort index by using ha_rnd_pos().
      The order of actions mentioned above is needed also when processing a
      join query if sorting is performed for the first non constant table in
      the chosen execution plan.
      f9528821
  9. 22 Nov, 2019 3 commits
  10. 21 Nov, 2019 1 commit
  11. 20 Nov, 2019 2 commits