1. 30 Aug, 2017 3 commits
  2. 29 Aug, 2017 8 commits
    • Marko Mäkelä's avatar
      WL#8845: Clarify the message about redo log format incompatibility · e634fdcd
      Marko Mäkelä authored
      recv_find_max_checkpoint(): Refer to MariaDB 10.2.2 instead of
      MySQL 5.7.9. Do not hint that a binary downgrade might be possible,
      because there are many changes in InnoDB 5.7 that could make
      downgrade impossible: a column appended to SYS_INDEXES, added
      SYS_* tables, undo log format changes, and so on.
      e634fdcd
    • Jan Lindström's avatar
    • Marko Mäkelä's avatar
    • Marko Mäkelä's avatar
      Merge innodb.create-index test changes from MySQL 5.6 to MariaDB · 9e9a3b8e
      Marko Mäkelä authored
      Import the MySQL 5.6 addition from innodb.create-index to a new debug-only
      test, innodb.create-index-debug. The existing test innodb.create-index
      also runs on a debug server.
      9e9a3b8e
    • Marko Mäkelä's avatar
      Adjust the imported MySQL 5.6 tests for MariaDB · f56bd70f
      Marko Mäkelä authored
      FIXME: MDEV-13668 InnoDB unnecessarily rebuilds table
      
      FIXME: MDEV-13671 InnoDB should use case-insensitive column name comparisons
      like the rest of the server
      
      FIXME: MDEV-13640 / Properly fix MDEV-9469 'Incorrect key file' on ALTER TABLE
      
      FIXME: investigate result difference in innodb.innodb-alter-autoinc
      and ensure that MariaDB does the right thing with auto_increment_increment
      and auto_increment_offset, for both ALGORITHM=INPLACE and ALGORITHM=COPY
      (Oracle MySQL behaviour differs between those two).
      f56bd70f
    • Marko Mäkelä's avatar
      MDEV-13625 Merge InnoDB test cases from MySQL 5.6 (part 1) · 8d929816
      Marko Mäkelä authored
      Import some ALTER TABLE test cases from MySQL 5.6 without modification.
      The adjustments will be in a separate commit.
      8d929816
    • Jan Lindström's avatar
      MDEV-13557: Startup failure, unable to decrypt ibdata1 · 352d27ce
      Jan Lindström authored
      Fixes also MDEV-13488: InnoDB writes CRYPT_INFO even though
      encryption is not enabled.
      
      Problem was that we created encryption metadata (crypt_data) for
      system tablespace even when no encryption was enabled and too early.
      System tablespace can be encrypted only using key rotation.
      
      Test innodb-key-rotation-disable, innodb_encryption, innodb_lotoftables
      require adjustment because INFORMATION_SCHEMA INNODB_TABLESPACES_ENCRYPTION
      contain row only if tablespace really has encryption metadata.
      
      fil_crypt_set_thread_cnt: Send message to background encryption threads
      if they exits when they are ready. This is required to find tablespaces
      requiring key rotation if no other changes happen.
      
      fil_crypt_find_space_to_rotate: Decrease the amount of time waiting
      when nothing happens to better enable key rotation on startup.
      
      fsp_header_init: Write encryption metadata to page 0 only if tablespace is
      encrypted or encryption is disabled by table option.
      
      i_s_dict_fill_tablespaces_encryption : Skip tablespaces that do not
      contain encryption metadata. This is required to avoid too early
      wait condition trigger in encrypted -> unencrypted state transfer.
      
      open_or_create_data_files: Do not create encryption metadata
      by default to system tablespace.
      352d27ce
    • Andrei Elkin's avatar
      MDEV-13437 InnoDB fails to return error for XA COMMIT or XA ROLLBACK in read-only mode · 888a8b69
      Andrei Elkin authored
      Assertions failed due to incorrect handling of the --tc-heuristic-recover
      option when InnoDB is in read-only mode either due to innodb_read_only=1
      or innodb_force_recovery>3. InnoDB failed to refuse a XA COMMIT or
      XA ROLLBACK operation, and there were errors in the error handling in
      the upper layer.
      
      This was fixed by making InnoDB XA operations respect the
      high_level_read_only flag. The InnoDB part of the fix and
      parts of the test main.tc_heuristic_recover were provided
      by Marko Mäkelä.
      
      LOCK_log mutex lock/unlock had to be added to fix MDEV-13438.
      The measure is confirmed by mysql sources as well.
      
      For testing of the conflicting option combination, mysql-test-run is
      made to export a new $MYSQLD_LAST_CMD. It holds the very last value
      generated by mtr.mysqld_start().  Even though the options have been
      also always stored in $mysqld->{'started_opts'} there were no access
      to them beyond the automatic server restart by mtr through the expect
      file interface.
      
      Effectively therefore $MYSQLD_LAST_CMD represents a more general
      interface to $mysqld->{'started_opts'} which can be used in wider
      scopes including server launch with incompatible options.
      
      Notice another existing method to restart the server with incompatible
      options relying on $MYSQLD_CMD is is aware of $mysqld->{'started_opts'}
      (the actual options that the server is launched by mtr). In order to use
      this method they would have to be provided manually.
      
      NOTE: When merging to 10.2, the file search_pattern_in_file++.inc
      should be replaced with the pre-existing search_pattern_in_file.inc.
      888a8b69
  3. 28 Aug, 2017 6 commits
  4. 25 Aug, 2017 1 commit
    • Marko Mäkelä's avatar
      MDEV-13637 InnoDB change buffer housekeeping can cause redo log overrun and possibly deadlocks · 582545a3
      Marko Mäkelä authored
      The function ibuf_remove_free_page() may be called while the caller
      is holding several mutexes or rw-locks. Because of this, this
      housekeeping loop may cause performance glitches for operations that
      involve tables that are stored in the InnoDB system tablespace.
      Also deadlocks might be possible.
      
      The worst impact of all is that due to the mutexes being held, calls to
      log_free_check() had to be skipped during this housekeeping.
      This means that the cyclic InnoDB redo log may be overwritten.
      If the system crashes during this, it would be unable to recover.
      
      The entry point to the problematic code is ibuf_free_excess_pages().
      It would make sense to call it before acquiring any mutexes or rw-locks,
      in any 'pessimistic' operation that involves the system tablespace.
      
      fseg_create_general(), fseg_alloc_free_page_general(): Do not call
      ibuf_free_excess_pages() while potentially holding some latches.
      
      ibuf_remove_free_page(): Do call log_free_check(), like every operation
      that is about to generate redo log should do.
      
      ibuf_free_excess_pages(): Remove some assertions that are replaced
      by stricter assertions in the log_free_check() that is now called by
      ibuf_remove_free_page().
      
      row_ins_sec_index_entry(), row_undo_ins_remove_sec_low(),
      row_undo_mod_del_mark_or_remove_sec_low(),
      row_undo_mod_del_unmark_sec_and_undo_update(): Call
      ibuf_free_excess_pages() if the operation may involve allocating pages
      and change buffering in the system tablespace.
      582545a3
  5. 24 Aug, 2017 3 commits
  6. 23 Aug, 2017 6 commits
    • Vladislav Vaintroub's avatar
      7aa846e9
    • Vladislav Vaintroub's avatar
    • Vladislav Vaintroub's avatar
      Remove workaround for ancient and already fixed CMake bug in MSI creation. · db51ad1e
      Vladislav Vaintroub authored
      The workaround, an extra cmake calls, somehow makes the
      connect/cmake_install.cmake to lose installation of connect-engine's
      specific jar files.
      db51ad1e
    • Sachin Setiya's avatar
      Fix Merge Error · 5077cc0b
      Sachin Setiya authored
      5077cc0b
    • Marko Mäkelä's avatar
      MDEV-13606 XA PREPARE transactions should survive innodb_force_recovery=1 or 2 · b8b3ba63
      Marko Mäkelä authored
      When MySQL 5.0.3 introduced InnoDB support for two-phase commit,
      it also introduced the questionable logic to roll back XA PREPARE
      transactions on startup when innodb_force_recovery is 1 or 2.
      
      Remove this logic in order to avoid unwanted side effects when
      innodb_force_recovery is being set for other reasons. That is,
      XA PREPARE transactions will always remain in that state until
      InnoDB receives an explicit XA ROLLBACK or XA COMMIT request
      from the upper layer.
      
      At the time the logic was introduced in MySQL 5.0.3, there already
      was a startup parameter that is the preferred way of achieving
      the behaviour: --tc-heuristic-recover=ROLLBACK.
      b8b3ba63
    • Marko Mäkelä's avatar
      MDEV-13167 InnoDB key rotation is not skipping unused pages · 97f9d3c0
      Marko Mäkelä authored
      In key rotation, we must initialize unallocated but previously
      initialized pages, so that if encryption is enabled on a table,
      all clear-text data for the page will eventually be overwritten.
      But we should not rotate keys on pages that were never allocated
      after the data file was created.
      
      According to the latching order rules, after acquiring the
      tablespace latch, no page latches of previously allocated user pages
      may be acquired. So, key rotation should check the page allocation
      status after acquiring the page latch, not before. But, the latching
      order rules also prohibit accessing pages that were not allocated first,
      and then acquiring the tablespace latch. Such behaviour would indeed
      result in a deadlock when running the following tests:
      encryption.innodb_encryption-page-compression
      encryption.innodb-checksum-algorithm
      
      Because the key rotation is accessing potentially unallocated pages, it
      cannot reliably check if these pages were allocated. It can only check
      the page header. If the page number is zero, we can assume that the
      page is unallocated.
      
      fil_crypt_rotate_page(): Detect uninitialized pages by FIL_PAGE_OFFSET.
      Page 0 is never encrypted, and on other pages that are initialized,
      FIL_PAGE_OFFSET must contain the page number.
      
      fil_crypt_is_page_uninitialized(): Remove. It suffices to check the
      page number field in fil_crypt_rotate_page().
      97f9d3c0
  7. 22 Aug, 2017 1 commit
  8. 21 Aug, 2017 4 commits
  9. 20 Aug, 2017 1 commit
  10. 19 Aug, 2017 1 commit
  11. 18 Aug, 2017 2 commits
  12. 17 Aug, 2017 2 commits
  13. 16 Aug, 2017 2 commits