1. 29 Aug, 2017 2 commits
    • Jan Lindström's avatar
    • 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
  2. 28 Aug, 2017 5 commits
  3. 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
  4. 24 Aug, 2017 3 commits
  5. 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
  6. 22 Aug, 2017 1 commit
  7. 21 Aug, 2017 4 commits
  8. 20 Aug, 2017 1 commit
  9. 19 Aug, 2017 1 commit
  10. 18 Aug, 2017 2 commits
  11. 17 Aug, 2017 2 commits
  12. 16 Aug, 2017 3 commits
  13. 15 Aug, 2017 4 commits
    • Jan Lindström's avatar
      Fix test failure on test MW-86 and remove MW-360 test. · 5017c261
      Jan Lindström authored
      Merged from mysql-wsrep-bugs following:
      
      GCF-1058 MTR test galera.MW-86 fails on repeated runs
      Wait for the sync point sync.wsrep_apply_cb to be reached before
      executing the test and clearing the debug flag sync.wsrep_apply_cb.
      
      The race scenario:
      
      Intended behavior:
      node2: set sync.wsrep_apply_cb in order to start waiting in the background INSERT
      node1: INSERT start
      node2 (background): INSERT start
      node1: INSERT end
      node2: send signal to background INSERT: "stop waiting and continue executing"
      node2: clear sync.wsrep_apply_cb as no longer needed
      node2 (background): consume the signal
      node2 (background): INSERT end
      node2: DROP TABLE
      node2: check no pending signals are left - ok
      
      What happens occasionally (unexpected):
      node2: set sync.wsrep_apply_cb in order to start waiting in the background INSERT
      node1: INSERT start
      node2 (background): INSERT start
      node1: INSERT end
      // The background INSERT still has _not_ reached the place where it starts
      // waiting for the signal:
      // DBUG_EXECUTE_IF("sync.wsrep_apply_cb", "now wait_for...");
      node2: send signal to background INSERT: "stop waiting and continue executing"
      node2: clear sync.wsrep_apply_cb as no longer needed
      // The background INSERT reaches DBUG_EXECUTE_IF("sync.wsrep_apply_cb", ...)
      // but sync.wsrep_apply_cb has already been cleared and the "wait" code is not
      // executed. The signal remains unconsumed.
      node2 (background): INSERT end
      node2: DROP TABLE
      node2: check no pending signals are left - failure, signal.wsrep_apply_cb is
      pending (not consumed)
      
      Remove MW-360 test case as it is not intended for MariaDB (uses
      MySQL GTID).
      5017c261
    • Sergei Golubchik's avatar
      Merge branch '10.0' into 10.1 · 48fe8326
      Sergei Golubchik authored
      48fe8326
    • Sergey Vojtovich's avatar
      MDEV-8579 - Some sysvars in I_S are missing any meaningful help (comment) text · 3e20a42b
      Sergey Vojtovich authored
      Follow-up to original patch: fixing test cases.
      3e20a42b
    • =Ian Gilfillan's avatar
      f066c89a
  14. 14 Aug, 2017 5 commits