1. 19 Jun, 2017 6 commits
  2. 16 Jun, 2017 5 commits
    • Igor Babaev's avatar
      Fixed the bug mdev-13064. · cf4a6abe
      Igor Babaev authored
      This is another attempt to fix the bug mdev-12992.
      This patch introduces st_select_lex::context_analysis_place for
      the place in SELECT where context analysis is currently performed.
      It's similar to st_select_lex::parsing_place, but it is used at
      the preparation stage.
      cf4a6abe
    • Oleksandr Byelkin's avatar
      result fix · f73507e6
      Oleksandr Byelkin authored
      f73507e6
    • Sergey Vojtovich's avatar
      MDEV-12620 - set lock_wait_timeout = 1;flush tables with read lock; · 056bab08
      Sergey Vojtovich authored
                   lock not released after timeout
      
      Release GRL if FLUSH TABLES phase failed.
      056bab08
    • Marko Mäkelä's avatar
      Remove trx_t::has_search_latch and simplify debug code · 50faeda4
      Marko Mäkelä authored
      When the btr_search_latch was split into an array of latches
      in MySQL 5.7.8 as part of the Oracle Bug#20985298 fix, the "caching"
      of the latch across storage engine API calls was removed, and
      the field trx->has_search_latch would only be set during a short
      time frame in the execution of row_search_mvcc(), which was
      formerly called row_search_for_mysql().
      
      This means that the column
      INFORMATION_SCHEMA.INNODB_TRX.TRX_ADAPTIVE_HASH_LATCHED will always
      report 0. That column cannot be removed in MariaDB 10.2, but it
      can be removed in future releases.
      
      trx_t::has_search_latch: Remove.
      
      trx_assert_no_search_latch(): Remove.
      
      row_sel_try_search_shortcut_for_mysql(): Remove a redundant condition
      on trx->has_search_latch (it was always true).
      
      sync_check_iterate(): Make the parameter const.
      
      sync_check_functor_t: Make the operator() const, and remove result()
      and the virtual destructor. There is no need to have mutable state
      in the functors.
      
      sync_checker<bool>: Replaces dict_sync_check and btrsea_sync_check.
      
      sync_check: Replaces btrsea_sync_check.
      
      dict_sync_check: Instantiated from sync_checker.
      
      sync_allowed_latches: Use std::find() directly on the array.
      Remove the std::vector.
      
      TrxInInnoDB::enter(), TrxInInnoDB::exit(): Remove obviously redundant
      debug assertions on trx->in_depth, and use equality comparison against 0
      because it could be more efficient on some architectures.
      50faeda4
    • Marko Mäkelä's avatar
      Remove the unnecessary method handlerton::release_temporary_latches() · e5980bf1
      Marko Mäkelä authored
      The sole purpose of handlerton::release_temporary_latches and its wrapper
      function was to release the InnoDB adaptive hash index latch
      (btr_search_latch).
      
      When the btr_search_latch was split into an array of latches
      in MySQL 5.7.8 as part of the Oracle Bug#20985298 fix, the "caching"
      of the latch across storage engine API calls was removed. As part of that,
      the function trx_search_latch_release_if_reserved() was changed to an
      assertion and the function trx_reserve_search_latch_if_not_reserved()
      was removed, and handlerton::release_temporary_latches() practically
      became a no-op.
      
      Note: MDEV-12121 replaced the function
      trx_search_latch_release_if_reserved()
      with the more appropriately named macro trx_assert_no_search_latch().
      e5980bf1
  3. 15 Jun, 2017 5 commits
    • Marko Mäkelä's avatar
      Follow-up to MDEV-12873: Refactor SYS_TABLES.TYPE validation · 6b71b3e3
      Marko Mäkelä authored
      dict_sys_tables_type_to_tf(): Change the parameter n_cols to not_redundant.
      
      dict_tf_is_valid_not_redundant(): Refactored from dict_tf_is_valid().
      
      dict_sys_tables_type_valid(): Replaces dict_sys_tables_type_validate().
      Use the common function dict_tf_is_valid_not_redundant(), which validates
      PAGE_COMPRESSION_LEVEL more strictly.
      
      DICT_TF_GET_UNUSED(flags): Remove.
      6b71b3e3
    • Marko Mäkelä's avatar
      Merge 10.1 into 10.2 · 615b1f41
      Marko Mäkelä authored
      innodb.table_flags: Adjust the test case. Due to the MDEV-12873 fix
      in 10.2, the corrupted flags for table test.td would be converted,
      and a tablespace flag mismatch will occur when trying to open the file.
      615b1f41
    • Marko Mäkelä's avatar
      MDEV-12873 InnoDB SYS_TABLES.TYPE incompatibility for PAGE_COMPRESSED=YES in... · 72378a25
      Marko Mäkelä authored
      MDEV-12873 InnoDB SYS_TABLES.TYPE incompatibility for PAGE_COMPRESSED=YES in MariaDB 10.2.2 to 10.2.6
      
      Remove the SHARED_SPACE flag that was erroneously introduced in
      MariaDB 10.2.2, and shift the SYS_TABLES.TYPE flags back to where
      they were before MariaDB 10.2.2. While doing this, ensure that
      tables created with affected MariaDB versions can be loaded,
      and also ensure that tables created with MySQL 5.7 using the
      TABLESPACE attribute cannot be loaded.
      
      MariaDB 10.2.2 picked the SHARED_SPACE flag from MySQL 5.7,
      shifting the MariaDB 10.1 flags PAGE_COMPRESSION, PAGE_COMPRESSION_LEVEL,
      ATOMIC_WRITES by one bit. The SHARED_SPACE flag would always
      be written as 0 by MariaDB, because MariaDB does not support
      CREATE TABLESPACE or CREATE TABLE...TABLESPACE for InnoDB.
      
      So, instead of the bits AALLLLCxxxxxxx we would have
      AALLLLC0xxxxxxx if the table was created with MariaDB 10.2.2
      to 10.2.6. (AA=ATOMIC_WRITES, LLLL=PAGE_COMPRESSION_LEVEL,
      C=PAGE_COMPRESSED, xxxxxxx=7 bits that were not moved.)
      
      PAGE_COMPRESSED=NO implies LLLLC=00000. That is not a problem.
      
      If someone created a table in MariaDB 10.2.2 or 10.2.3 with
      the attribute ATOMIC_WRITES=OFF (value 2; AA=10) and without
      PAGE_COMPRESSED=YES or PAGE_COMPRESSION_LEVEL, the table should be
      rejected. We ignore this problem, because it should be unlikely
      for anyone to specify ATOMIC_WRITES=OFF, and because 10.2.2 and
      10.2.2 were not mature releases. The value ATOMIC_WRITES=ON (1)
      would be interpreted as ATOMIC_WRITES=OFF, but starting with
      MariaDB 10.2.4 the ATOMIC_WRITES attribute is ignored.
      
      PAGE_COMPRESSED=YES implies that PAGE_COMPRESSION_LEVEL be between
      1 and 9 and that ROW_FORMAT be COMPACT or DYNAMIC. Thus, the affected
      wrong bit pattern in SYS_TABLES.TYPE is of the form AALLLL10DB00001
      where D signals the presence of a DATA DIRECTORY attribute and B is 1
      for ROW_FORMAT=DYNAMIC and 0 for ROW_FORMAT=COMPACT. We must interpret
      this bit pattern as AALLLL1DB00001 (discarding the extraneous 0 bit).
      
      dict_sys_tables_rec_read(): Adjust the affected bit pattern when
      reading the SYS_TABLES.TYPE column. In case of invalid flags,
      report both SYS_TABLES.TYPE (after possible adjustment) and
      SYS_TABLES.MIX_LEN.
      
      dict_load_table_one(): Replace an unreachable condition on
      !dict_tf2_is_valid() with a debug assertion. The flags will already
      have been validated by dict_sys_tables_rec_read(); if that validation
      fails, dict_load_table_low() will have failed.
      
      fil_ibd_create(): Shorten an error message about a file pre-existing.
      
      Datafile::validate_to_dd(): Clarify an error message about tablespace
      flags mismatch.
      
      ha_innobase::open(): Remove an unnecessary warning message.
      
      dict_tf_is_valid(): Simplify and stricten the logic. Validate the
      values of PAGE_COMPRESSION. Remove error log output; let the callers
      handle that.
      
      DICT_TF_BITS: Remove ATOMIC_WRITES, PAGE_ENCRYPTION, PAGE_ENCRYPTION_KEY.
      The ATOMIC_WRITES is ignored once the SYS_TABLES.TYPE has been validated;
      there is no need to store it in dict_table_t::flags. The PAGE_ENCRYPTION
      and PAGE_ENCRYPTION_KEY are unused since MariaDB 10.1.4 (the GA release
      was 10.1.8).
      
      DICT_TF_BIT_MASK: Remove (unused).
      
      FSP_FLAGS_MEM_ATOMIC_WRITES: Remove (the flags are never read).
      
      row_import_read_v1(): Display an error if dict_tf_is_valid() fails.
      72378a25
    • Marko Mäkelä's avatar
      Remove some fields from dict_table_t · 58f87a41
      Marko Mäkelä authored
      dict_table_t::thd: Remove. This was only used by btr_root_block_get()
      for reporting decryption failures, and it was only assigned by
      ha_innobase::open(), and never cleared. This could mean that if a
      connection is closed, the pointer would become stale, and the server
      could crash while trying to report the error. It could also mean
      that an error is being reported to the wrong client. It is better
      to use current_thd in this case, even though it could mean that if
      the code is invoked from an InnoDB background operation, there would
      be no connection to which to send the error message.
      
      Remove dict_table_t::crypt_data and dict_table_t::page_0_read.
      These fields were never read.
      
      fil_open_single_table_tablespace(): Remove the parameter "table".
      58f87a41
    • Marko Mäkelä's avatar
      88b96181
  4. 14 Jun, 2017 3 commits
    • Oleksandr Byelkin's avatar
      227bfe44
    • Oleksandr Byelkin's avatar
      MDEV-12471: BULK Command · 91ae1258
      Oleksandr Byelkin authored
      BULK execution moved to a new command.
      91ae1258
    • Marko Mäkelä's avatar
      MDEV-13084 MariaDB 10.2 crashes on corrupted SYS_TABLES.MIX_LEN field · e813fe86
      Marko Mäkelä authored
      innodb.row_format_redundant: Really corrupt the SYS_TABLES.MIX_LEN,
      and do not use any debug instrumentation. For tables created in the
      system tablespace, the contents of the column will be ignored.
      Only the table t1 will refuse to load.
      
      dict_load_table_one(): Remove the DBUG_EXECUTE_IF instrumentation.
      Omit a redundant error message "incorrect flags in SYS_TABLES".
      
      dict_sys_tables_rec_read(): Partially revert the Oracle Bug#21644827
      fix, and always report errors by the return value.
      
      fts_create_in_mem_aux_table(): Do not rely on dict_table_t::flags2,
      but instead evaluate the tablespace ID.
      
      DICT_TF2_BITS: Reduce to the correct value of 7. The two extra
      high-order bits were specific to MySQL 5.7.
      e813fe86
  5. 13 Jun, 2017 3 commits
  6. 12 Jun, 2017 10 commits
  7. 10 Jun, 2017 2 commits
    • Igor Babaev's avatar
      Fixed the bug mdev12992. · 7a12894d
      Igor Babaev authored
      When the SELECT query from a trigger that used a subquery
      in its SELECT list was prepared the counter select_n_having_items
      was incremented in the constructor Item::Item(THD *thd).
      As a result each invocation of the trigger required more and more
      memory for the ref_pointer_array for this SELECT.
      Made sure that the counter st_select_lex::select_n_having_items
      would be incremented only at the first execution of such trigger.
      7a12894d
    • Sachin Setiya's avatar
      MDEV-9544 Fix test case for 10.2 · b175c41c
      Sachin Setiya authored
      b175c41c
  8. 09 Jun, 2017 3 commits
    • Marko Mäkelä's avatar
      MDEV-13039 innodb_fast_shutdown=0 may fail to purge all undo log · 417434f1
      Marko Mäkelä authored
      When a slow shutdown is performed soon after spawning some work for
      background threads that can create or commit transactions, it is possible
      that new transactions are started or committed after the purge has finished.
      This is violating the specification of innodb_fast_shutdown=0, namely that
      the purge must be completed. (None of the history of the recent transactions
      would be purged.)
      
      Also, it is possible that the purge threads would exit in slow shutdown
      while there exist active transactions, such as recovered incomplete
      transactions that are being rolled back. Thus, the slow shutdown could
      fail to purge some undo log that becomes purgeable after the transaction
      commit or rollback.
      
      srv_undo_sources: A flag that indicates if undo log can be generated
      or the persistent, whether by background threads or by user SQL.
      Even when this flag is clear, active transactions that already exist
      in the system may be committed or rolled back.
      
      innodb_shutdown(): Renamed from innobase_shutdown_for_mysql().
      Do not return an error code; the operation never fails.
      Clear the srv_undo_sources flag, and also ensure that the background
      DROP TABLE queue is empty.
      
      srv_purge_should_exit(): Do not allow the purge to exit if
      srv_undo_sources are active or the background DROP TABLE queue is not
      empty, or in slow shutdown, if any active transactions exist
      (and are being rolled back).
      
      srv_purge_coordinator_thread(): Remove some previous workarounds
      for this bug.
      
      innobase_start_or_create_for_mysql(): Set buf_page_cleaner_is_active
      and srv_dict_stats_thread_active directly. Set srv_undo_sources before
      starting the purge subsystem, to prevent immediate shutdown of the purge.
      Create dict_stats_thread and fts_optimize_thread immediately
      after setting srv_undo_sources, so that shutdown can use this flag to
      determine if these subsystems were started.
      
      dict_stats_shutdown(): Shut down dict_stats_thread. Backported from 10.2.
      
      srv_shutdown_table_bg_threads(): Remove (unused).
      417434f1
    • Marko Mäkelä's avatar
      Correct a merge error of MDEV-11626 · a9117c90
      Marko Mäkelä authored
      a9117c90
    • Jan Lindström's avatar
      MDEV-12610: MariaDB start is slow · 58c56dd7
      Jan Lindström authored
      Problem appears to be that the function fsp_flags_try_adjust()
      is being unconditionally invoked on every .ibd file on startup.
      Based on performance investigation also the top function
      fsp_header_get_crypt_offset() needs to addressed.
      
      Ported implementation of fsp_header_get_encryption_offset()
      function from 10.2 to fsp_header_get_crypt_offset().
      
      Introduced a new function fil_crypt_read_crypt_data()
      to read page 0 if it is not yet read.
      
      fil_crypt_find_space_to_rotate(): Now that page 0 for every .ibd
      file is not read on startup we need to check has page 0 read
      from space that we investigate for key rotation, if it is not read
      we read it.
      
      fil_space_crypt_get_status(): Now that page 0 for every .ibd
      file is not read on startup here also we need to read page 0
      if it is not yet read it. This is needed
      as tests use IS query to wait until background encryption
      or decryption has finished and this function is used to
      produce results.
      
      fil_crypt_thread(): Add is_stopping condition for tablespace
      so that we do not rotate pages if usage of tablespace should
      be stopped. This was needed for failure seen on regression
      testing.
      
      fil_space_create: Remove page_0_crypt_read and extra
      unnecessary info output.
      
      fil_open_single_table_tablespace(): We call fsp_flags_try_adjust
      only when when no errors has happened and server was not started
      on read only mode and tablespace validation was requested or
      flags contain other table options except low order bits to
      FSP_FLAGS_POS_PAGE_SSIZE position.
      
      fil_space_t::page_0_crypt_read removed.
      
      Added test case innodb-first-page-read to test startup when
      encryption is on and when encryption is off to check that not
      for all tables page 0 is read on startup.
      58c56dd7
  9. 08 Jun, 2017 3 commits
    • Marko Mäkelä's avatar
      Merge 10.1 into 10.2 · 2d8fdfbd
      Marko Mäkelä authored
      Replace have_innodb_zip.inc with innodb_page_size_small.inc.
      2d8fdfbd
    • Marko Mäkelä's avatar
      Cleanup of MDEV-12600: crash during install_db with innodb_page_size=32K and ibdata1=3M · fbeb9489
      Marko Mäkelä authored
      The doublewrite buffer pages must fit in the first InnoDB system
      tablespace data file. The checks that were added in the initial patch
      (commit 112b21da)
      were at too high level and did not cover all cases.
      
      innodb.log_data_file_size: Test all innodb_page_size combinations.
      
      fsp_header_init(): Never return an error. Move the change buffer creation
      to the only caller that needs to do it.
      
      btr_create(): Clean up the logic. Remove the error log messages.
      
      buf_dblwr_create(): Try to return an error on non-fatal failure.
      Check that the first data file is big enough for creating the
      doublewrite buffers.
      
      buf_dblwr_process(): Check if the doublewrite buffer is available.
      Display the message only if it is available.
      
      recv_recovery_from_checkpoint_start_func(): Remove a redundant message
      about FIL_PAGE_FILE_FLUSH_LSN mismatch when crash recovery has already
      been initiated.
      
      fil_report_invalid_page_access(): Simplify the message.
      
      fseg_create_general(): Do not emit messages to the error log.
      
      innobase_init(): Revert the changes.
      
      trx_rseg_create(): Refactor (no functional change).
      fbeb9489
    • Jan Lindström's avatar
      d03abc71