1. 30 Dec, 2016 2 commits
    • Marko Mäkelä's avatar
      MDEV-11556 InnoDB redo log apply fails to adjust data file sizes · 8451e090
      Marko Mäkelä authored
      fil_space_t::recv_size: New member: recovered tablespace size in pages;
      0 if no size change was read from the redo log,
      or if the size change was implemented.
      
      fil_space_set_recv_size(): New function for setting space->recv_size.
      
      innodb_data_file_size_debug: A debug parameter for setting the system
      tablespace size in recovery even when the redo log does not contain
      any size changes. It is hard to write a small test case that would
      cause the system tablespace to be extended at the critical moment.
      
      recv_parse_log_rec(): Note those tablespaces whose size is being changed
      by the redo log, by invoking fil_space_set_recv_size().
      
      innobase_init(): Correct an error message, and do not require a larger
      innodb_buffer_pool_size when starting up with a smaller innodb_page_size.
      
      innobase_start_or_create_for_mysql(): Allow startup with any initial
      size of the ibdata1 file if the autoextend attribute is set. Require
      the minimum size of fixed-size system tablespaces to be 640 pages,
      not 10 megabytes. Implement innodb_data_file_size_debug.
      
      open_or_create_data_files(): Round the system tablespace size down
      to pages, not to full megabytes, (Our test truncates the system
      tablespace to more than 800 pages with innodb_page_size=4k.
      InnoDB should not imagine that it was truncated to 768 pages
      and then overwrite good pages in the tablespace.)
      
      fil_flush_low(): Refactored from fil_flush().
      
      fil_space_extend_must_retry(): Refactored from
      fil_extend_space_to_desired_size().
      
      fil_mutex_enter_and_prepare_for_io(): Extend the tablespace if
      fil_space_set_recv_size() was called.
      
      The test case has been successfully run with all the
      innodb_page_size values 4k, 8k, 16k, 32k, 64k.
      8451e090
    • Marko Mäkelä's avatar
      f493e395
  2. 28 Dec, 2016 3 commits
    • Oleksandr Byelkin's avatar
      MDEV-11584: GRANT inside an SP does not work well on 2nd execution · 23cc1be2
      Oleksandr Byelkin authored
      Allocate password hash in statment memory
      23cc1be2
    • Jan Lindström's avatar
      MDEV-11656: 'Data structure corruption' IMPORT TABLESPACE doesn't work for... · 283e9cf4
      Jan Lindström authored
      MDEV-11656: 'Data structure corruption' IMPORT TABLESPACE doesn't work for encrypted InnoDB tables if space_id changed
      
      Problem was that for encryption we use temporary scratch area for
      reading and writing tablespace pages. But if page was not really
      decrypted the correct updated page was not moved to scratch area
      that was then written. This can happen e.g. for page 0 as it is
      newer encrypted even if encryption is enabled and as we write
      the contents of old page 0 to tablespace it contained naturally
      incorrect space_id that is then later noted and error message
      was written. Updated page with correct space_id was lost.
      
      If tablespace is encrypted we use additional
      temporary scratch area where pages are read
      for decrypting readptr == crypt_io_buffer != io_buffer.
      
      Destination for decryption is a buffer pool block
      block->frame == dst == io_buffer that is updated.
      Pages that did not require decryption even when
      tablespace is marked as encrypted are not copied
      instead block->frame is set to src == readptr.
      
      If tablespace was encrypted we copy updated page to
      writeptr != io_buffer. This fixes above bug.
      
      For encryption we again use temporary scratch area
      writeptr != io_buffer == dst
      that is then written to the tablespace
      
      (1) For normal tables src == dst ==  writeptr
      ut_ad(!encrypted && !page_compressed ?
      	src == dst && dst == writeptr + (i * size):1);
      (2) For page compressed tables src == dst == writeptr
      ut_ad(page_compressed && !encrypted ?
      	src == dst && dst == writeptr + (i * size):1);
      (3) For encrypted tables src != dst != writeptr
      ut_ad(encrypted ?
      	src != dst && dst != writeptr + (i * size):1);
      283e9cf4
    • Marko Mäkelä's avatar
      MDEV-9282 Debian: the Lintian complains about "shlib-calls-exit" in ha_innodb.so · d50cf42b
      Marko Mäkelä authored
      Replace all exit() calls in InnoDB with abort() [possibly via ut_a()].
      Calling exit() in a multi-threaded program is problematic also for
      the reason that other threads could see corrupted data structures
      while some data structures are being cleaned up by atexit() handlers
      or similar.
      
      In the long term, all these calls should be replaced with something
      that returns an error all the way up the call stack.
      d50cf42b
  3. 27 Dec, 2016 1 commit
  4. 22 Dec, 2016 3 commits
  5. 21 Dec, 2016 3 commits
  6. 20 Dec, 2016 2 commits
  7. 19 Dec, 2016 2 commits
  8. 15 Dec, 2016 1 commit
  9. 14 Dec, 2016 5 commits
  10. 13 Dec, 2016 1 commit
    • Jan Lindström's avatar
      MDEV-10368: get_latest_version() called too often · 72cc73ce
      Jan Lindström authored
      Reduce the number of calls to encryption_get_key_get_latest_version
      when doing key rotation with two different methods:
      
      (1) We need to fetch key information when tablespace not yet
      have a encryption information, invalid keys are handled now
      differently (see below). There was extra call to detect
      if key_id is not found on key rotation.
      
      (2) If key_id is not found from encryption plugin, do not
      try fetching new key_version for it as it will fail anyway.
      We store return value from encryption_get_key_get_latest_version
      call and if it returns ENCRYPTION_KEY_VERSION_INVALID there
      is no need to call it again.
      72cc73ce
  11. 12 Dec, 2016 3 commits
  12. 11 Dec, 2016 2 commits
  13. 10 Dec, 2016 2 commits
  14. 09 Dec, 2016 2 commits
  15. 08 Dec, 2016 4 commits
    • Sergei Golubchik's avatar
      MDEV-10713: signal 11 error on multi-table update - crash in... · 03dabfa8
      Sergei Golubchik authored
      MDEV-10713: signal 11 error on multi-table update - crash in handler::increment_statistics or in make_select or assertion failure pfs_thread == ((PFS_thread*) pthread_getspecific((THR_PFS)))
      
      Different fix. Don't allow Item_func_sp to be evaluated unless
      all tables are prelocked.
      
      Extend the test case to make sure Item_func_sp::val_str is called
      (the table must have at least one row for that).
      03dabfa8
    • Sergei Golubchik's avatar
      Revert "MDEV-10713: signal 11 error on multi-table update - crash in... · ab65db6d
      Sergei Golubchik authored
      Revert "MDEV-10713: signal 11 error on multi-table update - crash in handler::increment_statistics or in make_select or assertion failure pfs_thread == ((PFS_thread*) pthread_getspecific((THR_PFS)))"
      
      This reverts commit 035a5ac6.
      
      Two minor problems and one regression:
      1. caching the value in str_result. Other Item methods may use it,
         destroying the cache. See, for example, Item::save_in_field, where
         str_result is moved to use a local buffer (this failed main.grant)
      2. Item_func_conv_charset::safe is now set too late, it's initialized
         only in val_str() but checked before that, this failed many tests
         in optimized builds.
      
      to fix 1 - use tmp_result instead of str_result, to fix 2, use
      the else branch in the Item_func_conv_charset constructor to set
      safe purely from charset properties.
      
      But this introduces a regression, constant strings can no longer be
      converted, say, from utf8 to latin1 (because 'safe' will be false).
      This fails few tests too. There is no way to fix it without reverting
      the commit and converting constants, as before, in the constructor.
      ab65db6d
    • Elena Stepanova's avatar
      MDEV-11491 binlog_encryption.rpl_checksum fails sporadically in buildbot · 870d7589
      Elena Stepanova authored
      The race condition happened if mark_xid_done was considerably delayed,
      and an extra Binlog_checkpoint event was written into the binary log
      which was later indicated in an error message. Fixed by ensuring
      that the event is written before the binary log is rotated to the one
      which is used in the output.
      870d7589
    • Elena Stepanova's avatar
      MDEV-11504 binlog_encryption.encrypted_master_switch_to_unencrypted fails sporadically in buildbot · 8e702bce
      Elena Stepanova authored
      The reason is a simple race condition. Initially the test was meant to synchronize with master
      before showing tables, but it turned out that the slave IO thread should fail by this point,
      and synchronization was removed along with a server bugfix. Now added an intermediate sync
      instead, to make sure that slave has replicated events before the point of failure
      8e702bce
  16. 07 Dec, 2016 4 commits