1. 17 Aug, 2017 2 commits
  2. 16 Aug, 2017 3 commits
    • Marko Mäkelä's avatar
      Silence a -Wimplicit-fallthrough warning · ff3cf749
      Marko Mäkelä authored
      ff3cf749
    • Marko Mäkelä's avatar
      Work around MDEV-13542 Crashing on a corrupted page is unhelpful · 92f9be49
      Marko Mäkelä authored
      With MDEV-12288 and MDEV-13536, the InnoDB purge threads will access
      pages more often, causing all sorts of debug assertion failures in
      the B-tree code.
      
      Work around this problem by amending the corruption tests with
      --innodb-purge-rseg-truncate-frequency=1 --skip-innodb-fast-shutdown
      so that everything will be purged before the server
      is restarted to deal with the corruption.
      92f9be49
    • Marko Mäkelä's avatar
      MDEV-13536 DB_TRX_ID is not actually being reset when the history is removed · f4b379d6
      Marko Mäkelä authored
      This should have been part of MDEV-12288.
      
      trx_undo_t::del_marks: Remove.
      Purge needs to process all undo log records in order to
      reset the DB_TRX_ID. Before MDEV-12288, it sufficed to only delete
      the purgeable delete-marked records, and it ignore other undo log.
      
      trx_rseg_t::needs_purge: Renamed from trx_rseg_t::last_del_marks.
      Indicates whether a rollback segment needs to be processed by purge.
      
      TRX_UNDO_NEEDS_PURGE: Renamed from TRX_UNDO_DEL_MARKS.
      Indicates whether a rollback segment needs to be processed by purge.
      This will be 1 until trx_purge_free_segment() has been invoked.
      
      row_purge_record_func(): Set the is_insert flag for TRX_UNDO_INSERT_REC,
      so that the DB_ROLL_PTR will match in row_purge_reset_trx_id().
      
      trx_purge_fetch_next_rec(): Add a comment about row_purge_record_func()
      going to set the is_insert flag.
      
      trx_purge_read_undo_rec(): Always attempt to read the undo log record.
      
      trx_purge_get_next_rec(): Do not skip any undo log records.
      Even when no clustered index record is going to be removed,
      we may want to reset some DB_TRX_ID,DB_ROLL_PTR.
      
      trx_undo_rec_get_cmpl_info(), trx_undo_rec_get_extern_storage(): Remove.
      
      trx_purge_add_undo_to_history(): Set the TRX_UNDO_NEEDS_PURGE flag
      so that the resetting will work on undo logs that were originally
      created before MDEV-12288 (MariaDB 10.3.1).
      
      trx_undo_roll_ptr_is_insert(), trx_purge_free_segment(): Cleanup
      (should be no functional change).
      f4b379d6
  3. 15 Aug, 2017 14 commits
  4. 14 Aug, 2017 3 commits
  5. 13 Aug, 2017 2 commits
  6. 11 Aug, 2017 6 commits
  7. 10 Aug, 2017 8 commits
    • Igor Babaev's avatar
      This is a modification of the first patch committed for mdev-13369 · bf75dcac
      Igor Babaev authored
      developed to cover the case of mdev-13389: "Optimization for equi-joins
      of derived tables with window functions".
      bf75dcac
    • Igor Babaev's avatar
      This first patch prepared for the task MDEV-13369: · b14e2b04
      Igor Babaev authored
      "Optimization for equi-joins of derived tables with GROUP BY"
      should be considered rather as a 'proof of concept'.
      
      The task itself is targeted at an optimization that employs re-writing
      equi-joins with grouping derived tables / views into lateral
      derived tables. Here's an example of such transformation:
        select t1.a,t.max,t.min
        from t1 [left] join
             (select a, max(t2.b) max, min(t2.b) min from t2
             group by t2.a) as t
             on t1.a=t.a;
      =>
        select t1.a,tl.max,tl.min
        from t1 [left] join
             lateral (select a, max(t2.b) max, min(t2.b) min from t2
                      where  t1.a=t2.a) as t
             on 1=1;
      The transformation pushes the equi-join condition t1.a=t.a into the
      derived table making it dependent on table t1. It means that for
      every row from t1 a new derived table must be filled out. However
      the size of any of these derived tables is just a fraction of the
      original derived table t. One could say that transformation 'splits'
      the rows used for the GROUP BY operation into separate groups
      performing aggregation for a group only in the case when there is
      a match for the current row of t1.
      Apparently the transformation may produce a query with a better
      performance only in the case when
       - the GROUP BY list refers only to fields returned by the derived table
       - there is an index I on one of the tables T used in FROM list of
         the specification of the derived table whose prefix covers the
         the fields from the proper beginning of the GROUP BY list or
         fields that are equal to those fields.
      Whether the result of the re-writing can be executed faster depends
      on many factors:
        - the size of the original derived table
        - the size of the table T
        - whether the index I is clustering for table T
        - whether the index I fully covers the GROUP BY list.
      
      This patch only tries to improve the chosen execution plan using
      this transformation. It tries to do it only when the chosen
      plan reaches the derived table by a key whose prefix covers
      all the fields of the derived table produced by the fields of
      the table T from the GROUP BY list.
      The code of the patch does not evaluates the cost of the improved
      plan. If certain conditions are met the transformation is applied.
      b14e2b04
    • Alexey Botchkov's avatar
      MDEV-12604 Comparison of JSON_EXTRACT result differs with Mysql. · 79d28533
      Alexey Botchkov authored
              JSON_EXTRACT behaves specifically in the comparison,
              so we have to implement specific method for that in
              Arg_comparator.
      79d28533
    • Marko Mäkelä's avatar
      Fix some GCC 7 warnings for InnoDB · bfffe571
      Marko Mäkelä authored
      buf_page_io_complete(): Do not test bpage for NULL, because
      it is declared (and always passed) as nonnull.
      
      buf_flush_batch(): Remove the constant local variable count=0.
      
      fil_ibd_load(): Use magic comment to suppress -Wimplicit-fallthrough.
      
      ut_stage_alter_t::inc(ulint): Disable references to an unused parameter.
      
      lock_queue_validate(), sync_array_find_thread(), rbt_check_ordering():
      Define only in debug builds.
      bfffe571
    • Marko Mäkelä's avatar
      MDEV-13476 TRX_UNDO_PAGE_TYPE mismatch when writing undo log after upgrade · 73297f53
      Marko Mäkelä authored
      When undo log pages pre-exist from an upgrade, the
      TRX_UNDO_PAGE_TYPE could be TRX_UNDO_INSERT==1 (for insert_undo)
      TRX_UNDO_UPDATE==2 (for update_undo), instead of the new unified
      page type 0 that was introduced in MDEV-12288.
      
      The undo log page type does not really matter much, because the
      undo log record type identifies the records independently
      of the page type. So, the debug assertions can simply allow any
      potential value of the TRX_UNDO_PAGE_TYPE (0, 1, or 2).
      73297f53
    • Marko Mäkelä's avatar
      MDEV-13475 InnoDB: Failing assertion: lsn == log_sys->lsn ||... · 237f23d7
      Marko Mäkelä authored
      MDEV-13475 InnoDB: Failing assertion: lsn == log_sys->lsn || srv_force_recovery == SRV_FORCE_NO_LOG_REDO
      
      At shutdown, we would have lsn == srv_start_lsn == 0 if the server
      was started up in --innodb-read-only mode with an old-format redo log.
      
      This regression was caused by MDEV-13430, which skips some redo log
      processing at startup when the redo log file format differs (and the
      redo log has been determined to be logically empty).
      
      Even though the MDEV-13430 change was introduced in MariaDB 10.2.8,
      the MariaDB Server 10.2 series is unaffected by this, because
      it will refuse to start up from a version-tagged redo log that is
      not tagged to be in the MySQL 5.7.9 or MariaDB 10.2.2 format.
      Starting with MariaDB 10.3.1, there are multiple version-tagged
      redo log formats.
      
      recv_recovery_from_checkpoint_start(): When skipping an empty
      different-format redo log, initialize srv_start_lsn and
      recv_sys->recovered_lsn from the redo log file.
      237f23d7
    • Oleksandr Byelkin's avatar
      MDEV-13439: Database permissions are not enough to run a subquery with GROUP BY within a view · cb2a57c2
      Oleksandr Byelkin authored
      The bug is result adding ability to have derived tables inside views.
      Fixed checks should be a switch between view/derived or select derived and information schema.
      cb2a57c2
    • Marko Mäkelä's avatar
      MDEV-13481 Merge new release of InnoDB MySQL 5.7.19 to 10.2 · bdab49d3
      Marko Mäkelä authored
      Only a relevant subset of the InnoDB changes was merged.
      In particular, two follow-up bug fixes for the bugs that
      were introduced in 5.7.18 but not MariaDB 10.2.7 were omitted.
      Because MariaDB 10.2.7 omitted the risky change
      
      Bug#23481444 OPTIMISER CALL ROW_SEARCH_MVCC() AND READ THE INDEX
      APPLIED BY UNCOMMITTED ROWS
      
      we do not need the follow-up fixes that were introduced in
      MySQL 5.6.37 and MySQL 5.7.19:
      
      Bug#25175249 ASSERTION: (TEMPL->IS_VIRTUAL && !FIELD) || ...
      Bug#25793677 INNODB: FAILING ASSERTION: CLUST_TEMPL_FOR_SEC || LEN
      bdab49d3
  8. 09 Aug, 2017 2 commits
    • Thirunarayanan Balathandayuthapani's avatar
      Bug #24961167 CONCURRENT INSERT FAILS IF TABLE DOES REBUILD · 38be0beb
      Thirunarayanan Balathandayuthapani authored
      Analysis:
      =========
         During alter table rebuild, InnoDB fails to apply concurrent insert log.
      If the insert log record is present across the blocks then apply phase
      trying to access the next block without fetching it.
      
      Fix:
      ====
      During virtual column parsing, check whether the record is present
      across the blocks before accessing the virtual column information.
      Reviewed-by: default avatarJimmy Yang <jimmy.yang@oracle.com>
      RB: 16243
      38be0beb
    • Thirunarayanan Balathandayuthapani's avatar
      Bug #24960450 CONCURRENT DELETE DOESN'T APPLY DURING TABLE REBUILD · 5721d5ba
      Thirunarayanan Balathandayuthapani authored
      Analysis:
      ========
      During alter table rebuild, InnoDB fails to apply concurrent delete log.
      Parsing and validation of merge record happens while applying the
      log operation on a table. Validation goes wrong for the virtual column.
      Validation assumes that virtual column information can't be the end
      of the merge record end.
      
      Fix:
      ====
      Virtual column information in the merge record can be end of the merge
      record. Virtual column information is written at the end for
      row_log_table_delete().
      
      Reviewed-by: Satya Bodapati<satya.bodapati@oracle.com>
      RB: 16155
      5721d5ba