1. 02 Apr, 2019 25 commits
  2. 01 Apr, 2019 15 commits
    • Monty's avatar
      index_merge_innodb did sometimes give wrong results · 88400450
      Monty authored
      Fixed by adding more rows to a table
      
      Other things:
      - Speed up index_merge tests 20% by adding begin/commit around loops that
        generated rows.
      88400450
    • Monty's avatar
      MDEV-19116 Speed up rotation of binary logs · 48810a00
      Monty authored
      Fixed by caching last binary log number used in last_used_log_number
      
      Other things:
      - Moved locking of LOCK_log form new_file_impl() to new_file(). This fixed
        a bug where LOCK_log could have been unlocked even if 'need_lock' was
        not set.  Removed not anymore used argument need_lock.
      - Made generate_new_name() virtual to simplify the code between
        other logs and binary log.
      
      Reviewed by Andrei Elkin
      48810a00
    • Monty's avatar
      MDEV-19117 Don't keep binary log index file locked during show binary logs · adb70162
      Monty authored
      On some systems with 10,000+ binlogs, show binary logs could block
      log rotation for more than 10 seconds.
      
      This patch fixes this by first caching all binary log names and
      releases all mutexes while calculating the sizes of the binary logs.
      
      Other things:
      - Ensure that reinit_io_cache() sets end_of_file when moving to read_cache.
        This ensures that external changes of the underlying file is known to
        the cache.
      - get_binlog_list() is made more efficent and show_binlogs() is changed
        to call get_binlog_list()
      
      Reviewed by Andrei Elkin
      adb70162
    • Monty's avatar
    • Michael Widenius's avatar
      Write information about restart in .result · b5615eff
      Michael Widenius authored
      Idea comes from MySQL which does something similar
      b5615eff
    • Michael Widenius's avatar
    • Monty's avatar
      Fixed valgrind warning: Wrong usage of c_ptr() · 5b15f68e
      Monty authored
      5b15f68e
    • Michael Widenius's avatar
      48c6726b
    • Marko Mäkelä's avatar
      d59ad697
    • Marko Mäkelä's avatar
      Merge 10.2 into 10.3 · 8f01a172
      Marko Mäkelä authored
      8f01a172
    • Marko Mäkelä's avatar
      MDEV-19085 Assertion failures due to virtual columns after upgrading from 10.1 · f055da9b
      Marko Mäkelä authored
      MariaDB before MDEV-5800 in version 10.2.2 did not support
      indexed virtual columns. Non-persistent virtual columns were
      hidden from storage engines. Only starting with MDEV-5800, InnoDB
      would create internal metadata on virtual columns.
      
      Similar to what was done in MDEV-18084, MDEV-18090, MDEV-18960, we adjust
      one more code path for the old tables.
      
      innobase_build_col_map(): Allocate space for virtual columns in col_map[]
      but leave the entries at ULINT_UNDEFINED, noting that the virtual columns
      were missing before the table was being rebuilt.
      f055da9b
    • Marko Mäkelä's avatar
      Rebuild the InnoDB lexical analyzers with flex 2.6.4 · 619d22dd
      Marko Mäkelä authored
      InnoDB includes 3 parsers, which use 3 lexical analyzers that
      are generated with flex. Flex versions before 2.6 emitted
      the keyword "register", which is deprecated in C++17.
      
      The lexical analyzers were regenerated as follows:
      
      for s in storage/innobase storage/xtradb
      do
      	(cd "$s"/pars; ./make_flex.sh)
      	touch "$s"/fts/*.l
      	make -C "$s"/fts -f Makefile.query
      done
      619d22dd
    • Sergei Petrunia's avatar
    • Marko Mäkelä's avatar
      MDEV-17380 innodb_flush_neighbors=ON should be ignored on SSD · 10dd290b
      Marko Mäkelä authored
      For tablespaces that do not reside on spinning storage, it does
      not make sense to attempt to write nearby pages when writing out
      dirty pages from the InnoDB buffer pool. It is actually detrimental
      to performance and to the life span of flash ROM storage.
      
      With this change, MariaDB will detect whether an InnoDB file resides
      on solid-state storage. The detection has been implemented for Linux
      and Microsoft Windows. For other systems, we will err on the safe side
      and assume that files reside on SSD.
      
      As part of this change, we will reduce the number of fstat() calls
      when opening data files on POSIX systems and slightly clean up some
      file I/O code.
      
      FIXME: os_is_sparse_file_supported() on POSIX works in a destructive
      manner. Thus, we can only invoke it when creating files, not when
      opening them.
      
      For diagnostics, we introduce the column ON_SSD to the table
      INFORMATION_SCHEMA.INNODB_TABLESPACES_SCRUBBING. The table
      INNODB_SYS_TABLESPACES might seem more appropriate, but its purpose
      is to reflect the contents of the InnoDB system table SYS_TABLESPACES,
      which we would like to remove at some point.
      
      On Microsoft Windows, querying StorageDeviceSeekPenaltyProperty
      sometimes returns ERROR_GEN_FAILURE instead of ERROR_INVALID_FUNCTION
      or ERROR_NOT_SUPPORTED. We will silently ignore also this error,
      and assume that the file does not reside on SSD.
      
      On Linux, the detection will be based on the files
      /sys/block/*/queue/rotational and /sys/block/*/dev.
      Especially for USB storage, it is possible that
      /sys/block/*/queue/rotational will wrongly report 1 instead of 0.
      
      fil_node_t::on_ssd: Whether the InnoDB data file resides on
      solid-state storage.
      
      fil_system_t::ssd: Collection of Linux block devices that reside on
      non-rotational storage.
      
      fil_system_t::create(): Detect ssd on Linux based on the contents
      of /sys/block/*/queue/rotational and /sys/block/*/dev.
      
      fil_system_t::is_ssd(dev_t): Determine if a Linux block device is
      non-rotational. Partitions will be identified with the containing
      block device by assuming that the least significant 4 bits of the
      minor number identify a partition, and that the "partition number"
      of the entire device is 0.
      10dd290b
    • Marko Mäkelä's avatar
      MDEV-19111 Unused field INFORMATION_SCHEMA.INNODB_TABLESPACES_SCRUBBING.ROTATING_OR_FLUSHING · 23eeecd6
      Marko Mäkelä authored
      The MDEV-11738/MDEV-11581 fix was supposed to add the column
      ROTATING_OR_FLUSHING to the INFORMATION_SCHEMA table
      INNODB_TABLESPACES_ENCRYPTION, but it also added that column to
      INNODB_TABLESPACES_SCRUBBING in InnoDB (not XtraDB).
      
      The extra column was never initialized. We will remove it,
      because key rotation has nothing to do with the scrubbing of
      tablespace data.
      23eeecd6