1. 01 Jul, 2017 1 commit
    • Marko Mäkelä's avatar
      Assert that DB_TRX_ID must be set on delete-marked records · c436338d
      Marko Mäkelä authored
      This is preparation for MDEV-12288, which would set DB_TRX_ID=0
      when purging history. Also with that change in place, delete-marked
      records must always refer to an undo log record via a nonzero
      DB_TRX_ID column. (The DB_TRX_ID is only present in clustered index
      leaf page records.)
      
      btr_cur_parse_del_mark_set_clust_rec(), rec_get_trx_id():
      Statically allocate the offsets
      (should never use the heap). Add some debug assertions.
      
      Replace some use of rec_get_trx_id() with row_get_rec_trx_id().
      
      trx_undo_report_row_operation(): Add some sanity checks that are
      common for all operations that produce undo log.
      c436338d
  2. 30 Jun, 2017 15 commits
  3. 29 Jun, 2017 16 commits
    • Marko Mäkelä's avatar
      Reduce the granularity of innodb_log_file_size · 84e4e450
      Marko Mäkelä authored
      In Mariabackup, we would want the backed-up redo log file size to be
      a multiple of 512 bytes, or OS_FILE_LOG_BLOCK_SIZE. However, at startup,
      InnoDB would be picky, requiring the file size to be a multiple of
      innodb_page_size.
      
      Furthermore, InnoDB would require the parameter to be a multiple of
      one megabyte, while the minimum granularity is 512 bytes. Because
      the data-file-oriented fil_io() API is being used for writing the
      InnoDB redo log, writes will for now require innodb_log_file_size to
      be a multiple of the maximum innodb_page_size (65536 bytes).
      
      To complicate matters, InnoDB startup divided srv_log_file_size by
      UNIV_PAGE_SIZE, so that initially, the unit was bytes, and later it
      was innodb_page_size. We will simplify this and keep srv_log_file_size
      in bytes at all times.
      
      innobase_log_file_size: Remove. Remove some obsolete checks against
      overflow on 32-bit systems. srv_log_file_size is always 64 bits, and
      the maximum size 512GiB in multiples of innodb_page_size always fits
      in ulint (which is 32 or 64 bits). 512GiB would be 8,388,608*64KiB or
      134,217,728*4KiB.
      
      log_init(): Remove the parameter file_size that was always passed as
      srv_log_file_size.
      
      log_set_capacity(): Add a parameter for passing the requested file size.
      
      srv_log_file_size_requested: Declare static in srv0start.cc.
      
      create_log_file(), create_log_files(),
      innobase_start_or_create_for_mysql(): Invoke fil_node_create()
      with srv_log_file_size expressed in multiples of innodb_page_size.
      
      innobase_start_or_create_for_mysql(): Require the redo log file sizes
      to be multiples of 512 bytes.
      84e4e450
    • Marko Mäkelä's avatar
      Clean up InnoDB shutdown · e903d458
      Marko Mäkelä authored
      Tablespace::shutdown(): Clear m_path. This was moved from
      Tablespace::~Tablespace().
      
      LatchDebug::shutdown(): Remove a redundant condition.
      e903d458
    • Marko Mäkelä's avatar
      Simplify access to the binlog offset in InnoDB · 591edccc
      Marko Mäkelä authored
      trx_sys_print_mysql_binlog_offset(): Use 64-bit arithmetics and ib::info().
      
      TRX_SYS_MYSQL_LOG_OFFSET: Replaces TRX_SYS_MYSQL_LOG_OFFSET_HIGH,
      TRX_SYS_MYSQL_LOG_OFFSET_LOW.
      
      trx_sys_update_mysql_binlog_offset(): Remove the constant parameter
      field=TRX_SYS_MYSQL_LOG_INFO. Use 64-bit arithmetics.
      591edccc
    • Marko Mäkelä's avatar
    • Marko Mäkelä's avatar
      buf_read_ibuf_merge_pages(): Discard all entries for a missing tablespace · cd623508
      Marko Mäkelä authored
      A similar change was contributed to Percona XtraBackup, but for some
      reason, it is not present in Percona XtraDB. Since MDEV-9566
      (MariaDB 10.1.23), that change is present in the MariaDB XtraDB.
      cd623508
    • Marko Mäkelä's avatar
      Minor cleanup of InnoDB I/O routines · 68b5aeae
      Marko Mäkelä authored
      Change many function parameters from IORequest& to const IORequest&.
      
      Remove an unused definition of ECANCELED.
      68b5aeae
    • Marko Mäkelä's avatar
      Simplify up InnoDB redo log system startup and shutdown · 859714e7
      Marko Mäkelä authored
      recv_sys_init(): Remove the parameter.
      
      recv_sys_create(): Merge to recv_sys_init().
      
      recv_sys_mem_free(): Merge to recv_sys_close().
      
      log_mem_free(): Merge to log_shutdown().
      859714e7
    • Marko Mäkelä's avatar
      8143ef1b
    • Marko Mäkelä's avatar
      Minor cleanup of InnoDB shutdown · bb60a832
      Marko Mäkelä authored
      os_thread_active(): Remove.
      
      srv_shutdown_all_bg_threads(): Assert that high-level threads
      have already exited. Do not sleep if os_thread_count=0.
      bb60a832
    • Sachin Setiya's avatar
      Fix MDEV-12758 · de3201df
      Sachin Setiya authored
      de3201df
    • Sachin Setiya's avatar
      MDEV-12758 wrep.pool_of_threads failed in buildbot with WSREP ... · 629c6097
      Sachin Setiya authored
      Problem:- While running tests from wsrep suite , we include file have_wsrep.inc
      or have_wsrep_enabled.inc , these file test wsrep plugin is ACTIVE or 'wsrep_on'
      is ON. These select does not ensure that whether 'wsrep_ready' is ON , So that
      we can process SQL queries. So sometimes we will get error like this
      mysqltest: At line 81: query 'call mtr.check_testcase()' failed: 1047: WSREP has
      not yet prepared node for application use  not ok
      
      Solution:- In file have_wsrep.inc and have_wsrep_enabled.inc we will include
      wait_until_ready.inc , which will wait untill 'wsrep_on' is on
      629c6097
    • Daniel Black's avatar
      travis: force deb build not to use ccache · 7c997f4b
      Daniel Black authored
      18a2b0a1 wasn't sufficient.
      The path needed to be set so ccache wasn't picked up.
      7c997f4b
    • Igor Babaev's avatar
      Fixed a failure of the test case for the bug mdev-13107 in --ps-protocol. · 13221b1e
      Igor Babaev authored
      The fix was in the call the open_normal_and_derived_tables() from
      the function mysql_test_select() and it was similar to those from
      the patch for mdev-13107.
      
      Added explicit PREPARE statements that failed in --ps-protocol.
      13221b1e
    • Daniel Black's avatar
      18a2b0a1
    • Daniel Black's avatar
      travis: MDEV-13002 fixed - don't allow failures in MYSQL_TEST_SUITES=plugins · 9e0aa294
      Daniel Black authored
      Revert "travis: allowed_failures MYSQL_TEST_SUITES=plugins (MDEV-13002)"
      
      This reverts commit c4cbc7a8.
      9e0aa294
    • Daniel Black's avatar
      9222d79b
  4. 28 Jun, 2017 5 commits
    • Igor Babaev's avatar
      Fixed the bug mdev-13107 and some similar unreported bugs. · e6080239
      Igor Babaev authored
      The problems were in the code of sql_show.cc. There the tables
      could be opened in such a way that mysql_derived_init() never
      worked for CTE tables. As a result they were not marked as
      derived and mysql_handle_derived() were not called for derived
      tables used in their specifications.
      e6080239
    • Vicențiu Ciorbaru's avatar
      MDEV-12851: Case with window functions query crashes server · 31ba0fa4
      Vicențiu Ciorbaru authored
      The "is null" function performs one operation which no other Item_func
      does, which is to update used tables during fix_length_and_dec().
      
      This however can not be performed before window functions have had a
      chance to resolve their order by and partition by definitions, which
      happens after the initial setup_fields call. Consequently, do not call
      Item_func_isnull update_used_tables during fix_length_and_dec().
      
      There was another issue detected once the crash was resolved.
      Because window functions did not implement is_null() method, we would
      end up returning bad results for "is null" and "is not null" functions.
      Implemented is_null() method for Item_windowfunc.
      31ba0fa4
    • Vicențiu Ciorbaru's avatar
      MDEV-13186: main.win failure post MDEV-12336 · 23edc7c8
      Vicențiu Ciorbaru authored
      During statement preparation st_order::item gets set to a value in
      ref_ptr_array. During statement execution we were overriding that value,
      causing subsequent checks for window functions to return true.
      
      Whenever we do any setting from ref_ptr_array, make sure to always
      store the value in all_fields as well.
      
      For function items containing window functions, as MDEV-12336 has
      discovered, we don't need to create a separate Item_direct_ref or
      Item_aggregate_ref as they will be computed directly from the top-level
      item once the window function argument columns are computed.
      23edc7c8
    • Vicențiu Ciorbaru's avatar
      Simplify IO_CACHE by removing current_pos and end_pos as self-references · 90038693
      Vicențiu Ciorbaru authored
      These self references were previously used to avoid having to check the
      IO_CACHE's type. However, a benchmark shows that on x86 5930k stock,
      the type comparison is marginally faster than the double pointer dereference.
      For 40 billion my_b_tell calls, the difference is .1 seconds in favor of performing the
      type check. (Basically there is no measurable difference)
      
      To prevent bugs from copying the structure using the equals(=) operator,
      and having to do the bookkeeping manually, remove these "convenience"
      variables.
      90038693
    • Marko Mäkelä's avatar
      Avoid InnoDB messages about recovery after creating redo logs · b3171607
      Marko Mäkelä authored
      srv_log_files_created: A debug flag to ensure that InnoDB redo log
      files can only be created once in the server lifetime, and that
      after log files have been created, no crash recovery will take place.
      
      recv_scan_log_recs(): Detect the special case where the log consists
      of a sole MLOG_CHECKPOINT record, such as immediately after creating
      the redo logs.
      
      recv_recovery_from_checkpoint_start(): Skip the recovery message
      if the redo log is logically empty.
      b3171607
  5. 27 Jun, 2017 2 commits
    • Marko Mäkelä's avatar
      Fix a merge error in commit 8f643e20 · 3e1d0ff5
      Marko Mäkelä authored
      A merge error caused InnoDB bootstrap to fail when
      innodb_undo_tablespaces was set to more than 2.
      This was because of a bug that was introduced to
      srv_undo_tablespaces_init() by the merge.
      
      Furthermore, some adjustments for Oracle Bug#25551311 aka
      Bug#23517560 changes were forgotten. We must minimize direct
      references to srv_undo_tablespaces_open and use predicates
      instead.
      
      srv_undo_tablespaces_init(): Increment srv_undo_tablespaces_open
      once, not twice, per loop iteration.
      
      is_system_or_undo_tablespace(): Remove (unused function).
      
      is_predefined_tablespace(): Invoke srv_is_undo_tablespace().
      3e1d0ff5
    • Marko Mäkelä's avatar
      MDEV-13176 ALTER TABLE…CHANGE col col TIMESTAMP NOT NULL DEFAULT… fails · 29624ea3
      Marko Mäkelä authored
      When it comes to DEFAULT values of columns, InnoDB is imposing both
      unnecessary and insufficient conditions on whether ALGORITHM=INPLACE
      should be allowed for ALTER TABLE.
      
      When changing an existing column to NOT NULL, any NULL values in the
      columns only get a special treatment if the column is changed to an
      AUTO_INCREMENT column (which is not supported by ALGORITHM=INPLACE)
      or the column type is TIMESTAMP. In all other cases, an error
      must be reported for the failure to convert a NULL value to NOT NULL.
      
      InnoDB was unnecessarily interested in whether the DEFAULT value
      is not constant when altering other than TIMESTAMP columns. Also,
      when changing a TIMESTAMP column to NOT NULL, InnoDB was performing
      an insufficient check, and it was incorrectly allowing a constant
      DEFAULT value while not being able to replace NULL values with that
      constant value.
      
      Furthermore, in ADD COLUMN, InnoDB is unnecessarily rejecting certain
      nondeterministic DEFAULT expressions (depending on the session
      parameters or the current time).
      29624ea3
  6. 26 Jun, 2017 1 commit