1. 03 Mar, 2017 4 commits
    • Marko Mäkelä's avatar
      MDEV-12121 Introduce build option WITH_INNODB_AHI to disable innodb_adaptive_hash_index · 27b9989d
      Marko Mäkelä authored
      The InnoDB adaptive hash index is sometimes degrading the performance of
      InnoDB, and it is sometimes disabled to get more consistent performance.
      We should have a compile-time option to disable the adaptive hash index.
      
      Let us introduce two options:
      
      OPTION(WITH_INNODB_AHI "Include innodb_adaptive_hash_index" ON)
      OPTION(WITH_INNODB_ROOT_GUESS "Cache index root block descriptors" ON)
      
      where WITH_INNODB_AHI always implies WITH_INNODB_ROOT_GUESS.
      
      As part of this change, the misleadingly named function
      trx_search_latch_release_if_reserved(trx) will be replaced with the macro
      trx_assert_no_search_latch(trx) that will be empty unless
      BTR_CUR_HASH_ADAPT is defined (cmake -DWITH_INNODB_AHI=ON).
      
      We will also remove the unused column
      INFORMATION_SCHEMA.INNODB_TRX.TRX_ADAPTIVE_HASH_TIMEOUT.
      In MariaDB Server 10.1, it used to reflect the value of
      trx_t::search_latch_timeout which could be adjusted during
      row_search_for_mysql(). In 10.2, there is no such field.
      
      Other than the removal of the unused column TRX_ADAPTIVE_HASH_TIMEOUT,
      this is an almost non-functional change to the server when using the
      default build options.
      
      Some tests are adjusted so that they will work with both
      -DWITH_INNODB_AHI=ON and -DWITH_INNODB_AHI=OFF. The test
      innodb.innodb_monitor has been renamed to innodb.monitor
      in order to track MySQL 5.7, and the duplicate tests
      sys_vars.innodb_monitor_* are removed.
      27b9989d
    • Marko Mäkelä's avatar
      MDEV-12103: Move a misplaced assertion. · 545f49da
      Marko Mäkelä authored
      545f49da
    • Marko Mäkelä's avatar
      MDEV-12103 Reduce the time of looking for MLOG_CHECKPOINT during crash recovery · ab8199f3
      Marko Mäkelä authored
      This fixes MySQL Bug#80788 in MariaDB 10.2.5.
      
      When I made the InnoDB crash recovery more robust by implementing
      WL#7142, I also introduced an extra redo log scan pass that can be
      shortened.
      
      This fix will slightly extend the InnoDB redo log format that I
      introduced in MySQL 5.7.9 by writing the start LSN of the MLOG_CHECKPOINT
      mini-transaction to the end of the log checkpoint page, so that recovery
      can jump straight to it without scanning all the preceding redo log.
      
      LOG_CHECKPOINT_END_LSN: At the end of the checkpoint page, the start LSN
      of the MLOG_CHECKPOINT mini-transaction. Previously, these bytes were
      written as 0.
      
      log_write_checkpoint_info(), log_group_checkpoint(): Add the parameter
      end_lsn for writing LOG_CHECKPOINT_END_LSN.
      
      log_checkpoint(): Remember the LSN at which the MLOG_CHECKPOINT
      mini-transaction is starting (or at which the redo log ends on
      shutdown).
      
      recv_init_crash_recovery(): Remove.
      
      recv_group_scan_log_recs(): Add the parameter checkpoint_lsn.
      
      recv_recovery_from_checkpoint_start(): Read LOG_CHECKPOINT_END_LSN
      and if it is set, start the first scan from it instead of the
      checkpoint LSN. Improve some messages and remove bogus assertions.
      
      recv_parse_log_recs(): Do not skip DBUG_PRINT("ib_log") for some
      file-level redo log records.
      
      recv_parse_or_apply_log_rec_body(): If we have not parsed all redo
      log between the checkpoint and the corresponding MLOG_CHECKPOINT
      record, defer the check for MLOG_FILE_DELETE or MLOG_FILE_NAME records
      to recv_init_crash_recovery_spaces().
      
      recv_init_crash_recovery_spaces(): Refuse recovery if
      MLOG_FILE_NAME or MLOG_FILE_DELETE records are missing.
      ab8199f3
    • Sachin Setiya's avatar
  2. 01 Mar, 2017 1 commit
    • Daniel Black's avatar
      whitespace - fix indenting after commit 7450cb7f · c23e0fe5
      Daniel Black authored
      This caused gcc-6.3.1 errors:7450cb7f
      
      mariadb-server/sql/sql_base.cc: In function ‘bool fix_all_session_vcol_exprs(THD*, TABLE_LIST*)’:
      mariadb-server/sql/sql_base.cc:4821:7: warning: this ‘for’ clause does not guard... [-Wmisleading-indentation]
             for (Field **df= t->default_field; df && *df; df++)
             ^~~
      mariadb-server/sql/sql_base.cc:4826:9: note: ...this statement, but the latter is misleadingly indented as if it is guarded by the ‘for’
               for (Virtual_column_info **cc= t->check_constraints; cc && *cc; cc++)
               ^~~
      
      It was obvious from 7450cb7f that the indenting should of been removed
      Signed-off-by: default avatarDaniel Black <daniel.black@au.ibm.com>
      c23e0fe5
  3. 28 Feb, 2017 1 commit
    • Marko Mäkelä's avatar
      MDEV-12146 Deprecate and remove innodb_instrument_semaphores · 6cf29ab0
      Marko Mäkelä authored
      MDEV-7618 introduced configuration parameter innodb_instrument_semaphores
      in MariaDB Server 10.1. The parameter seems to only affect the rw-lock
      X-latch acquisition. Extra fields are added to rw_lock_t to remember one
      X-latch holder or waiter. These fields are not being consulted or reported
      anywhere. This is basically only adding code bloat.
      
      If the intention is to debug hangs or deadlocks, we have better tools for
      that in the debug server, and for the non-debug server, core dumps can
      reveal a lot. For example, the mini-transaction memo records the
      currently held buffer block or index rw-locks, to be released at
      mtr_t::commit().
      
      The configuration parameter innodb_instrument_semaphores will be
      deprecated in 10.2.5 and removed in 10.3.0.
      
      rw_lock_t: Remove the members lock_name, file_name, line, thread_id
      which did not affect any output.
      6cf29ab0
  4. 27 Feb, 2017 1 commit
  5. 24 Feb, 2017 4 commits
    • Marko Mäkelä's avatar
      MDEV-11927 InnoDB change buffer is not being merged · 78153cf6
      Marko Mäkelä authored
      to tables in the system tablespace
      
      This is a regression caused by MDEV-11585, which accidentally
      changed Tablespace::is_undo_tablespace() in an incorrect way,
      causing the InnoDB system tablespace to be reported as a dedicated
      undo tablespace, for which the change buffer is not applicable.
      
      Tablespace::is_undo_tablespace(): Remove. There were only 2
      calls from the function buf_page_io_complete(). Replace those
      calls as appropriate.
      
      Also, merge changes to tablespace import/export tests from
      MySQL 5.7, and clean up the tests a little further, allowing
      them to be run with any innodb_page_size.
      
      Remove duplicated error injection instrumentation for the
      import/export tests.  In MySQL 5.7, the error injection label
      buf_page_is_corrupt_failure was renamed to
      buf_page_import_corrupt_failure.
      
      fil_space_extend_must_retry(): Correct a debug assertion
      (tablespaces can be extended during IMPORT), and remove a
      TODO comment about compressed temporary tables that was
      already addressed in MDEV-11816.
      
      dict_build_tablespace_for_table(): Correct a comment that
      no longer holds after MDEV-11816, and assert that
      ROW_FORMAT=COMPRESSED can only be used in .ibd files.
      78153cf6
    • Marko Mäkelä's avatar
      Clean up some Galera tests. · b513e371
      Marko Mäkelä authored
      Note: At least one test is unstable, failing with the following:
      ./mtr --mysqld=--innodb-purge-threads=9 --big-test --no-reorder \
      galera.galera_parallel_autoinc_largetrx galera.galera_var_slave_threads
      
      The result difference is dependent on innodb_purge_threads.
      b513e371
    • Marko Mäkelä's avatar
      MDEV-11454 post-merge fix: · 51af1985
      Marko Mäkelä authored
      buf_dump(): Correct the printf format passed to buf_dump_status()
      to match the argument types.
      
      Revert the changes to storage/xtradb. XtraDB is not being compiled
      for 10.2. The unused copy that we have in the 10.2 branch is only
      getting merges from 10.1.
      
      Disable the test sys_vars.innodb_buffer_pool_dump_pct_function
      because it is unstable on buildbot.
      51af1985
    • Marko Mäkelä's avatar
      Merge pull request #264 from grooverdan/10.2-MDEV-11454-innodb_buffer_pool_dump_pct-entire-pool · 342b48b7
      Marko Mäkelä authored
      MDEV-11454: Make innodb_buffer_pool_dump_pct refer to the entire buffer pool size
      342b48b7
  6. 21 Feb, 2017 1 commit
  7. 20 Feb, 2017 1 commit
    • Marko Mäkelä's avatar
      MDEV-11802 innodb.innodb_bug14676111 fails · a13a636c
      Marko Mäkelä authored
      The function trx_purge_stop() was calling os_event_reset(purge_sys->event)
      before calling rw_lock_x_lock(&purge_sys->latch). The os_event_set()
      call in srv_purge_coordinator_suspend() is protected by that X-latch.
      
      It would seem a good idea to consistently protect both os_event_set()
      and os_event_reset() calls with a common mutex or rw-lock in those
      cases where os_event_set() and os_event_reset() are used
      like condition variables, tied to changes of shared state.
      
      For each os_event_t, we try to document the mutex or rw-lock that is
      being used. For some events, frequent calls to os_event_set() seem to
      try to avoid hangs. Some events are never waited for infinitely, only
      timed waits, and os_event_set() is used for early termination of these
      waits.
      
      os_aio_simulated_put_read_threads_to_sleep(): Define as a null macro
      on other systems than Windows. TODO: remove this altogether and disable
      innodb_use_native_aio on Windows.
      
      os_aio_segment_wait_events[]: Initialize only if innodb_use_native_aio=0.
      
      log_write_flush_to_disk_low(): Invoke log_mutex_enter() at the end, to
      avoid race conditions when changing the system state. (No potential
      race condition existed before MySQL 5.7.)
      a13a636c
  8. 19 Feb, 2017 1 commit
    • Marko Mäkelä's avatar
      MDEV-11802 preparation: Clean up the purge tests. · cc4b2b18
      Marko Mäkelä authored
      Revert the MDEV-4396 tweak to innodb.innodb_bug14676111.
      We must fix the root cause instead.
      
      Allow gcol.innodb_virtual_purge to run on a non-debug build
      (If wait_innodb_all_purged.inc is used in a non-debug test,
      it will have no effect.)
      
      Add the test innodb.index_merge_threshold from MySQL 5.7.
      cc4b2b18
  9. 17 Feb, 2017 1 commit
  10. 16 Feb, 2017 3 commits
    • Marko Mäkelä's avatar
      Simplify a WL#6494/WL#7142 test. · 34bbc76f
      Marko Mäkelä authored
      The test innodb.log_file_size_checkpoint was originally added to
      MySQL 5.7 by me in a bug fix, to fix the interaction of WL#6494
      (redo log resizing, introduced in MySQL 5.6) and WL#7142
      (data file discovery based on MLOG_FILE_NAME records,
      introduced in MySQL 5.7):
      
      commit 70f9ef4e1220827132b50275ca7272f2bcca1864
      Author: Marko Mäkelä <marko.makela@oracle.com>
      Date:   Wed May 21 13:31:29 2014 +0300
      
          Bug#18755095 REDO LOG SIZE CHANGE AFTER CRASH RESULTS IN CHECKPOINT AGE
          ERROR MESSAGE
      
          This is a regression from fixing
          Bug#18730524 REPEATED KILL+RESTART FAILS DUE TO MISSING MLOG_FILE_NAME
          RECORD
      
          innobase_start_or_create_for_mysql(): Invoke fil_names_clear() before
          creating the "checkpoint" when changing redo log files.
      
          Approved by Jimmy Yang on IM.
      
      The relevant part of the test is that fil_names_clear() is invoked to
      emit an MLOG_CHECKPOINT record before the redo log files are deleted.
      In case the server is killed before ib_logfile0 has been deleted,
      the old (not-yet-resized) redo log will be treated as valid. We do not
      need to create a large number of tables for that.
      34bbc76f
    • Marko Mäkelä's avatar
      MDEV-12072 Do not unnecessarily construct rec_printer objects · 7a528801
      Marko Mäkelä authored
      I introduced the rec_printer object in MySQL to pretty-print raw InnoDB
      records and index tuples in diagnostic messages. These objects are being
      constructed unconditionally, even though the DBUG_PRINT is not enabled.
      
      The unnecessary work is avoided by simply passing rec_printer(…).str()
      to the DBUG_LOG macro that was introduced in MDEV-11713.
      7a528801
    • Igor Babaev's avatar
      Fixed bug mdev-9924. · 37925c6c
      Igor Babaev authored
      Supported queries with window functions when GROUP BY could be
      optimized away.
      37925c6c
  11. 15 Feb, 2017 11 commits
    • Sergei Petrunia's avatar
      MDEV-10694 - SIGFPE and/or huge memory allocation in maria_create ... · e688d814
      Sergei Petrunia authored
      The issue was that JOIN::rollup_write_data() used
      JOIN::tmp_table_param::[start_]recinfo, which had uninitialized data.
      
      These fields have uninitialized data, because JOIN::tmp_table_param
      currently only stores some grouping-related data fields.  The data about
      the work (temporary) tables themselves is stored in
      join->join_tab[...].tmp_table_param.
      
      The fix is to make JOIN::rollup_write_data follow this convention
      and look at the right TMP_TABLE_PARAM object
      e688d814
    • Vicențiu Ciorbaru's avatar
      MariaDB 10.2 can now start from MySQL 5.7 data directory · 24911cee
      Vicențiu Ciorbaru authored
      An upgrade is still necessary however.
      24911cee
    • Vicențiu Ciorbaru's avatar
      MDEV-10700: 10.2.2 windowing function returns incorrect result · eb54d86b
      Vicențiu Ciorbaru authored
      This bug is fixed by MDEV-10092. Add test case to check for regressions.
      eb54d86b
    • Vicențiu Ciorbaru's avatar
      MDEV-11868: min ( distinct ) over ( ) returns wrong value · d06a44e0
      Vicențiu Ciorbaru authored
      The bug was not visible in current HEAD. Introduced test case to catch
      regressions. Also improve error messages regarding distinct usage in
      window functions.
      d06a44e0
    • Vicențiu Ciorbaru's avatar
      MDEV-11697: Lead Window Function Returns Incorrect Results · 88ddb1ea
      Vicențiu Ciorbaru authored
      This issue is fixed by the patch for MDEV-10092. Add test case to check
      for regressions though.
      88ddb1ea
    • Vicențiu Ciorbaru's avatar
      MDEV-10092: Server crashes in in ha_heap::rnd_pos / Table_read_cursor::get_next · d4746422
      Vicențiu Ciorbaru authored
      The bug was caused by several issues.
      2 problems in seek_io_cache. Due to wrong offsets used, we would end up
      seeking way too much (first change), or over the intended seek point
      (second change). Fixing it requires correctly detecting available data
      in buffer (first change), and not using "IO_SIZE alligned" reads. The
      second is needed because _my_b_cache_read adjusts the pos_in_file itself
      based on read_pos and read_end. Pretending buffer is empty when we want
      to force a read will aleviate this problem.
      
      Secondly, the big-table cursors didn't repect the interface definitions
      of always returning the rownumber that Table_read_cursor::fetch() would activate.
      
      At the same time, next(), prev() and move_to() should not perform any
      row activation.
      d4746422
    • Vicențiu Ciorbaru's avatar
      MDEV-10859: Wrong result of aggregate window function in query with HAVING and no ORDER BY · 9fe9fb68
      Vicențiu Ciorbaru authored
      Window functions need to be computed after applying the HAVING clause.
      An optimization that we have for regular, non-window function, cases is
      to apply having only during sending of the rows to the client. This
      allows rows that should be filtered from the temporary table used to
      store aggregation results to be stored there.
      
      This behaviour is undesireable for window functions, as we have to
      compute window functions on the result-set after HAVING is applied.
      Storing extra rows in the table leads to wrong values as the frame
      bounds might capture those -to be filtered afterwards- rows.
      9fe9fb68
    • Marko Mäkelä's avatar
      MDEV-11641 innobase_get_stmt_safe() does not copy the last byte of thd->query_string · a90066b1
      Marko Mäkelä authored
      innobase_get_stmt_safe(): Copy also the last byte.
      a90066b1
    • Marko Mäkelä's avatar
      Fix some InnoDB memory leaks. · 703d0985
      Marko Mäkelä authored
      dict_init_free(): Make global, and move the call from
      dict_close() to srv_free(), because this is initialized
      earlier than dict_sys.
      
      innobase_space_shutdown(): Do not leak srv_allow_writes_event.
      703d0985
    • Marko Mäkelä's avatar
      MDEV-11782: Redefine the innodb_encrypt_log format · 2af28a36
      Marko Mäkelä authored
      Write only one encryption key to the checkpoint page.
      Use 4 bytes of nonce. Encrypt more of each redo log block,
      only skipping the 4-byte field LOG_BLOCK_HDR_NO which the
      initialization vector is derived from.
      
      Issue notes, not warning messages for rewriting the redo log files.
      
      recv_recovery_from_checkpoint_finish(): Do not generate any redo log,
      because we must avoid that before rewriting the redo log files, or
      otherwise a crash during a redo log rewrite (removing or adding
      encryption) may end up making the database unrecoverable.
      Instead, do these tasks in innobase_start_or_create_for_mysql().
      
      Issue a firm "Missing MLOG_CHECKPOINT" error message. Remove some
      unreachable code and duplicated error messages for log corruption.
      
      LOG_HEADER_FORMAT_ENCRYPTED: A flag for identifying an encrypted redo
      log format.
      
      log_group_t::is_encrypted(), log_t::is_encrypted(): Determine
      if the redo log is in encrypted format.
      
      recv_find_max_checkpoint(): Interpret LOG_HEADER_FORMAT_ENCRYPTED.
      
      srv_prepare_to_delete_redo_log_files(): Display NOTE messages about
      adding or removing encryption. Do not issue warnings for redo log
      resizing any more.
      
      innobase_start_or_create_for_mysql(): Rebuild the redo logs also when
      the encryption changes.
      
      innodb_log_checksums_func_update(): Always use the CRC-32C checksum
      if innodb_encrypt_log. If needed, issue a warning
      that innodb_encrypt_log implies innodb_log_checksums.
      
      log_group_write_buf(): Compute the checksum on the encrypted
      block contents, so that transmission errors or incomplete blocks can be
      detected without decrypting.
      
      Rewrite most of the redo log encryption code. Only remember one
      encryption key at a time (but remember up to 5 when upgrading from the
      MariaDB 10.1 format.)
      2af28a36
    • Marko Mäkelä's avatar
      MDEV-12061 Allow innodb_log_files_in_group=1 · 743ac7c2
      Marko Mäkelä authored
      The InnoDB redo log consists of a list of files that logically form
      a bigger file, as if the individual files were concatenated together.
      
      The first file will always be written on redo log checkpoint, because
      the two checkpoint pages are at the start of the single logical
      redo log file.
      
      There is no technical reason why InnoDB requires at least 2 files
      to exist. Let us reduce the minimum number to 1. In that way,
      restoring from backups will become easier, since InnoDB can directly
      deal with a single backed-up redo log file.
      743ac7c2
  12. 14 Feb, 2017 11 commits
    • Sergei Golubchik's avatar
      sporadic failures of rpl.rpl_binlog_errors · 3d85292a
      Sergei Golubchik authored
      the test restarts the server, giving it 60 seconds to shutdown
      and then killing it mercilessly.
      
      make sure the server closes all MyISAM tables before shutdown,
      as we cannot reliably expect it to make the deadline.
      3d85292a
    • Sergei Golubchik's avatar
      sporadic failures of main.default_debug · 96d097a7
      Sergei Golubchik authored
      wait for the first connection to reach the debug sync point
      before letting the second connection do its stuff
      96d097a7
    • Sergei Golubchik's avatar
      cleanup: mtr startup warning · 41f42dff
      Sergei Golubchik authored
      options --log-slow-admin-statements, --log-queries-not-using-indexes and --log-slow-slave-statements have no effect if --log_slow_queries is not set
      
      1. s/--log_slow_queries/--log-slow-queries/
      2. disable log-slow-admin-statement/etc in mytr when doing mysqld --help
      41f42dff
    • Sergei Golubchik's avatar
      MDEV-11439 No data type JSON, but CAST(something AS JSON) pretends to work · 6f6d0531
      Sergei Golubchik authored
      Use JSON_COMPACT(X) instead of CAST(X AS JSON).
      Bonus - X is validated to be a valid JSON.
      Fix a typo in the error message.
      6f6d0531
    • Sergei Golubchik's avatar
      bugfix: uninitialized variable · e0fa2ce4
      Sergei Golubchik authored
      fixes crashes on win32-debug
      e0fa2ce4
    • Vladislav Vaintroub's avatar
      MDEV-12056 mysql_config outputs non-existing mysqlclient · 8877f1c3
      Vladislav Vaintroub authored
      Change output of mysql_config --libs to have -lmariadb instead of
      -lmysqlclient
      
      Static linking is not yet supported, because static library has different
      base name ( libmariadbclient.a static vs libmariadb.so shared)
      8877f1c3
    • Alexey Botchkov's avatar
      MDEV-11439 No data type JSON, but CAST(something AS JSON) pretends to · f76d5fef
      Alexey Botchkov authored
      work.
      
              json_detailed() fixed
      f76d5fef
    • Marko Mäkelä's avatar
      Post-push fix for MDEV-12057. · 2bf07556
      Marko Mäkelä authored
      Fix a test result for the narrower type of innodb_fast_shutdown.
      2bf07556
    • Marko Mäkelä's avatar
      MDEV-12057 Embedded server shutdown hangs in InnoDB · 1b4b4f68
      Marko Mäkelä authored
      Ever since MDEV-5800 enabled indexed virtual columns for InnoDB,
      the InnoDB shutdown relied on close_connections() that would set
      thd->killed for the InnoDB purge threads. Alas, the embedded server
      shutdown is not invoking close_connections(), and thus InnoDB purge
      threads fail to initiate shutdown, causing a hang.
      
      innodb_inited: Remove. Use srv_was_started instead.
      
      innobase_fast_shutdown: Remove. Use srv_fast_shutdown instead.
      
      srv_running: Renamed from thd_destructor_myvar, and made global.
      The value NULL means that shutdown was requested or the purge threads
      should not be running because of innodb_read_only_mode=1.
      
      innobase_init(): Set srv_was_started after ensuring that srv_running
      was initialized. (In innodb_read_only mode, the purge threads are not
      started and we do not care if srv_running==NULL.)
      
      innobase_start_or_create_for_mysql(): Do not set srv_was_started.
      Let it be set by the only caller innobase_init().
      
      srv_purge_should_exit(): Check also srv_was_started and srv_running
      when evaluating thd->killed.
      1b4b4f68
    • Vicențiu Ciorbaru's avatar
      MDEV-11170: MariaDB 10.2 cannot start on MySQL 5.7 datadir · d731ce21
      Vicențiu Ciorbaru authored
      PART 2 of the fix adds the logic of not using password column, unless it
      exists. If password column is missing we attempt to use plugin &&
      authentication_string columns.
      d731ce21
    • Vicențiu Ciorbaru's avatar
      MDEV-11170: MariaDB 10.2 cannot start on MySQL 5.7 datadir · 5ab93737
      Vicențiu Ciorbaru authored
      PART 1 of the fix requires a bit of refactoring to not use hard-coded
      field indices any more. Create classes that express the grant tables structure,
      without exposing the underlying field indices.
      
      Most of the code is converted to use these classes, except parts which
      are not directly affected by the MDEV-11170. These however are TODO
      items for subsequent refactoring.
      5ab93737