1. 10 Oct, 2017 10 commits
    • Jan Lindström's avatar
      Fix test failure on galera.view caused by incorrect location · f2a0fa86
      Jan Lindström authored
      of WSREP_TO_ISOLATION_BEGIN.
      f2a0fa86
    • Marko Mäkelä's avatar
      MDEV-13311 Presence of old logs in 10.2.7 will corrupt restored instance (change in behavior) · 1b478a7a
      Marko Mäkelä authored
      Mariabackup 10.2.7 would delete the redo log files after a successful
      --prepare operation. If the user is manually copying the prepared files
      instead of using the --copy-back option, it could happen that some old
      redo log file would be preserved in the restored location. These old
      redo log files could cause corruption of the restored data files when
      the server is started up.
      
      We prevent this scenario by creating a "poisoned" redo log file
      ib_logfile0 at the end of the --prepare step. The poisoning consists
      of simply truncating the file to an empty file. InnoDB will refuse
      to start up on an empty redo log file.
      
      copy_back(): Delete all redo log files in the target if the source
      file ib_logfile0 is empty. (Previously we did this if the source
      file is missing.)
      
      SRV_OPERATION_RESTORE_EXPORT: A new variant of SRV_OPERATION_RESTORE
      when the --export option is specified. In this mode, we will keep
      deleting all redo log files, instead of truncating the first one.
      
      delete_log_files(): Add a parameter for the first file to delete,
      to be passed as 0 or 1.
      
      innobase_start_or_create_for_mysql(): In mariabackup --prepare,
      tolerate an empty ib_logfile0 file. Otherwise, require the first
      redo log file to be longer than 4 blocks (2048 bytes). Unless
      --export was specified, truncate the first log file at the
      end of --prepare.
      1b478a7a
    • Vladislav Vaintroub's avatar
      dc93ce8d
    • Vladislav Vaintroub's avatar
      Windows : small optimization in os_is_sparse_file_supported() · fa7a1a57
      Vladislav Vaintroub authored
      Use GetFileInformationByHandleEx with FileAttributeTagInfo to query whether
      the file is sparse. This saves 1 syscall, as GetFileInformationByHandle()
      would additionally query volume info.
      fa7a1a57
    • Vladislav Vaintroub's avatar
      MDEV-13941 followup. · ff2d9e12
      Vladislav Vaintroub authored
      Try to fix fragmentation (unsparse files), for pre-existing
      installations.
      
      Unsparse the innodb file, when it needs to be extended, unless compression
      is used. For Win7/2008R2 unsparse  does not work (as documented in MSDN),
      therefore for sparse files in older Windows, file extension will be done
      via writing zeroes at the end of file.
      ff2d9e12
    • Vladislav Vaintroub's avatar
      MDEV-13822 mariabackup incremental prepare incorrectly sets file size. · fe18e6b0
      Vladislav Vaintroub authored
      MDEV-13310 Preparing an incremental backup twice can corrupt data
      fe18e6b0
    • Vladislav Vaintroub's avatar
      Innodb : Refactor os_file_set_size() to be compatible 10.1 · b731a5bc
      Vladislav Vaintroub authored
      The last parameter to this function is now,"bool is_sparse", like in 10.1
      rather than the  unused/useless "bool is_readonly", merged from MySQL 5.7
      
      Like in 10.1, this function now supports sparse files, and efficient
      platform specific mechanisms for file extension
      
      os_file_set_size() is now consistenly used in all places where
      innodb files are extended.
      b731a5bc
    • sjaakola's avatar
      MW-416 DDL replication moved after acl checking · 0b5a5258
      sjaakola authored
      galera_events test shows a regression with the original fix for MW-416
      Reason was that Events::drop_event() can be called also from inside event
      execution, and there we have a speacial treatment for event, which executes
      "DROP EVENT" statement, and runs TOI replication inside the event processing body.
      This resulted in executing WSREP_TO_ISOLATION two times for such DROP EVENT statement.
      Fix is to call WSREP_TO_ISOLATION_BEGIN only in Events::drop_event()
      0b5a5258
    • sjaakola's avatar
      MW-416 · 70c23321
      sjaakola authored
      Changed return code for replicatio error to TRUE.
      This is aligned with native mysql convention to return TRUE (defined to 1) or FALSE (defined to 0) from a bool function.
      This is wrong, but follows the mysql conventiosn, at least...
      70c23321
    • sjaakola's avatar
      MW-416 · 1841ef1c
      sjaakola authored
      Moved TOI replication to happen after ACL checking for commands:
      SQLCOM_CREATE_EVENT
      SQLCOM_ALTER_EVENT
      SQLCOM_DROP_EVENT
      SQLCOM_CREATE_VIEW
      SQLCOM_CREATE_TRIGGER
      SQLCOM_DROP_TRIGGER
      SQLCOM_INSTALL_PLUGIN
      SQLCOM_UNINSTALL_PLUGIN
      1841ef1c
  2. 09 Oct, 2017 2 commits
    • Marko Mäkelä's avatar
      MDEV-14023 10.1 InnoDB tables with virtual columns cannot be accessed in 10.2 · e1d9a237
      Marko Mäkelä authored
      MariaDB 10.1 introduced non-indexed virtual columns for InnoDB tables.
      When MySQL 5.7 introduced virtual columns in InnoDB tables, it also
      introduced the table SYS_VIRTUAL that stores metadata on virtual
      columns. This table does not initially exist in data files that were
      imported from 10.1. So, we do not always have virtual column metadata
      inside InnoDB.
      
      dict_index_contains_col_or_prefix(): In the clustered index records,
      all non-virtual columns are present and no virtual columns are present.
      
      ha_innobase::build_template(): In the clustered index, do not
      include virtual columns in the query template. The SQL layer is
      supposed to compute the virtual column values when needed.
      e1d9a237
    • Marko Mäkelä's avatar
      btr_free_root(): Relax a too strict debug assertion · 3edd007c
      Marko Mäkelä authored
      When btr_create() invokes btr_free_root() after running out of space,
      fseg_create() would have acquired an SX-latch on the root page, not
      an X-latch. Relax the debug assertion in btr_free_root() accordingly.
      
      (In this case, SX-latch and X-latch are equivalent. During the CREATE
      operation there should be MDL_EXCLUSIVE and dict_operation_lock X-latch
      preventing concurrent access to the index. Normally the purpose of the
      SX-latch is to allow concurrent reads of the root page while certain
      fields in the root page are updated in place.)
      3edd007c
  3. 07 Oct, 2017 7 commits
  4. 06 Oct, 2017 5 commits
    • Marko Mäkelä's avatar
      MDEV-13512 buf_flush_update_zip_checksum() corrupts SPATIAL INDEX in ROW_FORMAT=COMPRESSED tables · f9b50c06
      Marko Mäkelä authored
      In MariaDB Server 10.1, this problem manifests itself only as
      a debug assertion failure in page_zip_decompress() when an insert
      requires a page to be decompressed.
      
      In MariaDB 10.1, the encryption of InnoDB data files repurposes the
      previously unused field FILE_FLUSH_LSN for an encryption key version.
      This field was only used in the first page of each file of the system
      tablespace. For ROW_FORMAT=COMPRESSED tables, the field was always
      written as 0 until encryption was implemented.
      
      There is no bug in the encryption, because the buffer pool blocks will
      not be written to files. Instead, copies of the blocks will be encrypted.
      In these encrypted copies, the key version field will be updated before
      the buffer is written to the file. The field in the buffer pool is
      basically garbage that does not really matter.
      
      Already in MariaDB 10.0, the memset() calls to reset this unused field
      in buf_flush_update_zip_checksum() and buf_flush_write_block_low()
      are unnecessary, because fsp_init_file_page_low() would guarantee that
      the field is always 0 in the buffer pool (unless 10.1 encryption is
      used).
      
      Removing the unnecessary memset() calls makes page_zip_decompress()
      happy and will prevent a SPATIAL INDEX corruption bug in
      MariaDB Server 10.2. In MySQL 5.7.5, as part of WL#6968, the same
      field was repurposed for an R-tree split sequence number (SSN) and
      these memset() were removed. (Because of the repurposing, MariaDB
      encryption is not available for tables that contain SPATIAL INDEX.)
      f9b50c06
    • Alexander Barkov's avatar
      MDEV-11586 UNION of FLOAT type results in erroneous precision · a659291e
      Alexander Barkov authored
      Fixing the asymmetry in the array field_types_merge_rules[][]
      which caused data loss when mixing FLOAT + BIGINT in UNIONs
      or hybrid functions:
      
      1. FLOAT  + INT    = DOUBLE
      2. FLOAT  + BIGINT = FLOAT
      3. INT    + FLOAT  = DOUBLE
      4. BIGINT + FLOAT  = DOUBLE
      
      Now FLOAT + BIGINT (as in #2) also produces DOUBLE, like the cases #1,#3,#4 do.
      a659291e
    • Alexey Botchkov's avatar
      MDEV-12312 JSON_CONTAINS_PATH does not detect invalid path and returns · 3557de68
      Alexey Botchkov authored
      TRUE.
      
              Let's make empty brackets to be the syntax error in the JSON
              paths.
      3557de68
    • Alexey Botchkov's avatar
      MDEV-13703 Illegal mix of collations for operation 'json_object' on · a3ba8c36
      Alexey Botchkov authored
      using JSON_UNQUOTE as an argument.
      
              The coercibility and repertoire should be set properly for the
              JSON_UNQUOTE.
      a3ba8c36
    • Marko Mäkelä's avatar
      41e581b3
  5. 05 Oct, 2017 4 commits
  6. 04 Oct, 2017 5 commits
  7. 03 Oct, 2017 7 commits