1. 14 Aug, 2017 2 commits
  2. 11 Aug, 2017 1 commit
    • Marko Mäkelä's avatar
      MDEV-13495 Crash in rollback of a recovered INSERT transaction after upgrade · 347d9456
      Marko Mäkelä authored
      If the server is upgraded from a database that was created
      before MDEV-12288, and if the undo logs in the database contain
      an incomplete transaction that performed an INSERT operation,
      the server would crash when rolling back that transaction.
      
      trx_commit_low(): Relax a too strict transaction. This function
      will also be called after completing the rollback of a recovered
      transaction.
      
      trx_purge_add_undo_to_history(): Merged from the functions
      trx_purge_add_update_undo_to_history() and trx_undo_update_cleanup(),
      which are removed. Remove the parameter undo_page, and instead call
      trx_undo_set_state_at_finish() to obtain it.
      
      trx_write_serialisation_history(): Treat undo and old_insert equally.
      That is, after the rollback (or XA COMMIT) of a recovered transaction
      before upgrade, move all logs (both insert_undo and update_undo) to
      the purge queue.
      347d9456
  3. 10 Aug, 2017 2 commits
    • Marko Mäkelä's avatar
      MDEV-13476 TRX_UNDO_PAGE_TYPE mismatch when writing undo log after upgrade · 73297f53
      Marko Mäkelä authored
      When undo log pages pre-exist from an upgrade, the
      TRX_UNDO_PAGE_TYPE could be TRX_UNDO_INSERT==1 (for insert_undo)
      TRX_UNDO_UPDATE==2 (for update_undo), instead of the new unified
      page type 0 that was introduced in MDEV-12288.
      
      The undo log page type does not really matter much, because the
      undo log record type identifies the records independently
      of the page type. So, the debug assertions can simply allow any
      potential value of the TRX_UNDO_PAGE_TYPE (0, 1, or 2).
      73297f53
    • Marko Mäkelä's avatar
      MDEV-13475 InnoDB: Failing assertion: lsn == log_sys->lsn ||... · 237f23d7
      Marko Mäkelä authored
      MDEV-13475 InnoDB: Failing assertion: lsn == log_sys->lsn || srv_force_recovery == SRV_FORCE_NO_LOG_REDO
      
      At shutdown, we would have lsn == srv_start_lsn == 0 if the server
      was started up in --innodb-read-only mode with an old-format redo log.
      
      This regression was caused by MDEV-13430, which skips some redo log
      processing at startup when the redo log file format differs (and the
      redo log has been determined to be logically empty).
      
      Even though the MDEV-13430 change was introduced in MariaDB 10.2.8,
      the MariaDB Server 10.2 series is unaffected by this, because
      it will refuse to start up from a version-tagged redo log that is
      not tagged to be in the MySQL 5.7.9 or MariaDB 10.2.2 format.
      Starting with MariaDB 10.3.1, there are multiple version-tagged
      redo log formats.
      
      recv_recovery_from_checkpoint_start(): When skipping an empty
      different-format redo log, initialize srv_start_lsn and
      recv_sys->recovered_lsn from the redo log file.
      237f23d7
  4. 09 Aug, 2017 11 commits
  5. 08 Aug, 2017 11 commits
    • Marko Mäkelä's avatar
      Follow-up to MDEV-11487: Remove InnoDB internal temporary tables · ffa37894
      Marko Mäkelä authored
      row_update_for_mysql(): Remove the wrapper function and
      rename the function from row_update_for_mysql_using_upd_graph().
      Remove the unused parameter mysql_rec.
      ffa37894
    • Marko Mäkelä's avatar
    • Marko Mäkelä's avatar
      MDEV-13470 DELETE IGNORE should not ignore deadlocks (again) · 2152fbdc
      Marko Mäkelä authored
      This is basically a duplicate or a reincarnation of MDEV-117.
      For some reason, the test innodb.mdev-117 started failing in 10.2.
      
      It is uncertain when this test started failing. The test is
      nondeterministic, because there is a race condition between the
      concurrently executing DELETE IGNORE and DELETE statements.
      
      When a deadlock is reported for DELETE IGNORE, the SQL layer would
      call handler::print_error() but then proceed to the next row,
      as if no error had happened (which is the purpose of DELETE IGNORE).
      So, when it proceeded to handler::ha_rnd_next(), InnoDB would hit an
      assertion failure, because the transaction no longer exists, and we
      are not executing at the start of a statement.
      
      handler::print_error(): If thd_mark_transaction_to_rollback(thd, true)
      was called, clear the ME_JUST_WARNING and ME_JUST_INFO errflags, so
      that a note or warning will be promoted to an error if the transaction
      was aborted by a storage engine.
      2152fbdc
    • Alexey Botchkov's avatar
      MDEV-12789 JSON_KEYS returns duplicate keys twice. · 4bca34d8
      Alexey Botchkov authored
              Check for duplicating keys added.
      4bca34d8
    • Alexey Botchkov's avatar
      MDEV-12732 json.json_no_table fails with valgrind in buildbot and · 01a4eb8f
      Alexey Botchkov authored
      outside.
      
              The result_limit variable wasn't always initialized in
              Item_func_json_array::fix_length_and_dec().
      01a4eb8f
    • Marko Mäkelä's avatar
      Merge 10.2 into bb-10.2-ext · 1f0a22ac
      Marko Mäkelä authored
      1f0a22ac
    • Marko Mäkelä's avatar
      Remove wait_innodb_all_purged.inc · 86e0a73e
      Marko Mäkelä authored
      The file wait_innodb_all_purged.inc waited for InnoDB purge in a way
      that only worked in debug builds. The file wait_all_purged.inc
      provides a better mechanism.
      86e0a73e
    • Marko Mäkelä's avatar
    • Marko Mäkelä's avatar
      Backport MDEV-13430 recovery improvement to MariaDB 10.2 · 6f623907
      Marko Mäkelä authored
      If the latest InnoDB redo log checkpoint was stored in the
      first checkpoint slot and not the second one, InnoDB would
      incorrectly set log_sys->log.lsn to the previous checkpoint.
      
      It is possible that this logic error did not exist before
      commit 86927cc7, which
      removed traces of multiple InnoDB redo logs, to prepare for
      MDEV-12548 (Mariabackup for MariaDB 10.2). In the worst case,
      this error could mean that InnoDB unnecessarily fails to
      recover from redo log when the last-but-one checkpoint was
      overwritten, but the last checkpoint is intact.
      
      recv_find_max_checkpoint(), recv_find_max_checkpoint_0():
      Do not overwrite the fields of log_sys->log with the information
      of an older checkpoint.
      
      recv_find_max_checkpoint(): Do not return DB_SUCCESS on an error.
      
      recv_recovery_from_checkpoint_start(): Return early if the log is
      in a version-tagged format but not in the latest format. (In this case,
      the log must be logically empty, and there is nothing to apply.)
      6f623907
    • Jan Lindström's avatar
      MDEV-11939: innochecksum mistakes a file for an encrypted one (page 0 invalid) · 34eef269
      Jan Lindström authored
      Always read full page 0 to determine does tablespace contain
      encryption metadata. Tablespaces that are page compressed or
      page compressed and encrypted do not compare checksum as
      it does not exists. For encrypted tables use checksum
      verification written for encrypted tables and normal tables
      use normal method.
      
      buf_page_is_checksum_valid_crc32
      buf_page_is_checksum_valid_innodb
      buf_page_is_checksum_valid_none
              Modify Innochecksum logging to file to avoid compilation
      	warnings.
      
      fil0crypt.cc fil0crypt.h
              Modify to be able to use in innochecksum compilation and
              move fil_space_verify_crypt_checksum to end of the file.
              Add innochecksum logging to file.
      
      univ.i
              Add innochecksum strict_verify, log_file and cur_page_num
              variables as extern.
      
      page_zip_verify_checksum
              Add innochecksum logging to file and remove unnecessary code.
      
      innochecksum.cc
              Lot of changes most notable able to read encryption
              metadata from page 0 of the tablespace.
      
      Added test case where we corrupt intentionally
      FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION (encryption key version)
      FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION+4 (post encryption checksum)
      FIL_DATA+10 (data)
      34eef269
    • Alexey Botchkov's avatar
      MDEV-12604 Comparison of JSON_EXTRACT result differs with Mysql. · bb71d9ab
      Alexey Botchkov authored
              Comparison fixed to take the actual type of JSON value into
              account. Bug in escaping handling fixed.
      bb71d9ab
  6. 07 Aug, 2017 13 commits