mirror of
https://github.com/MariaDB/server.git
synced 2026-05-16 20:07:13 +02:00
Merge InnoDB 5.7 from mysql-5.7.9.
Contains also
MDEV-10547: Test multi_update_innodb fails with InnoDB 5.7
The failure happened because 5.7 has changed the signature of
the bool handler::primary_key_is_clustered() const
virtual function ("const" was added). InnoDB was using the old
signature which caused the function not to be used.
MDEV-10550: Parallel replication lock waits/deadlock handling does not work with InnoDB 5.7
Fixed mutexing problem on lock_trx_handle_wait. Note that
rpl_parallel and rpl_optimistic_parallel tests still
fail.
MDEV-10156 : Group commit tests fail on 10.2 InnoDB (branch bb-10.2-jan)
Reason: incorrect merge
MDEV-10550: Parallel replication can't sync with master in InnoDB 5.7 (branch bb-10.2-jan)
Reason: incorrect merge
This commit is contained in:
parent
848d211c5c
commit
2e814d4702
835 changed files with 173885 additions and 83591 deletions
|
|
@ -1,6 +1,6 @@
|
|||
/*****************************************************************************
|
||||
|
||||
Copyright (c) 2005, 2013, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 2005, 2014, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 2012, Facebook Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under
|
||||
|
|
@ -32,6 +32,7 @@ Created June 2005 by Marko Makela
|
|||
#include "page0zip.h"
|
||||
#include "mtr0log.h"
|
||||
#include "page0page.h"
|
||||
#include "srv0srv.h"
|
||||
|
||||
/* The format of compressed pages is as follows.
|
||||
|
||||
|
|
@ -100,20 +101,9 @@ In summary, the compressed page looks like this:
|
|||
- deleted records (free list) in link order
|
||||
*/
|
||||
|
||||
/** Start offset of the area that will be compressed */
|
||||
#define PAGE_ZIP_START PAGE_NEW_SUPREMUM_END
|
||||
/** Size of an compressed page directory entry */
|
||||
#define PAGE_ZIP_DIR_SLOT_SIZE 2
|
||||
/** Mask of record offsets */
|
||||
#define PAGE_ZIP_DIR_SLOT_MASK 0x3fff
|
||||
/** 'owned' flag */
|
||||
#define PAGE_ZIP_DIR_SLOT_OWNED 0x4000
|
||||
/** 'deleted' flag */
|
||||
#define PAGE_ZIP_DIR_SLOT_DEL 0x8000
|
||||
|
||||
/**********************************************************************//**
|
||||
Determine the size of a compressed page in bytes.
|
||||
@return size in bytes */
|
||||
@return size in bytes */
|
||||
UNIV_INLINE
|
||||
ulint
|
||||
page_zip_get_size(
|
||||
|
|
@ -159,22 +149,23 @@ page_zip_set_size(
|
|||
}
|
||||
|
||||
#ifndef UNIV_HOTBACKUP
|
||||
/**********************************************************************//**
|
||||
Determine if a record is so big that it needs to be stored externally.
|
||||
@return FALSE if the entire record can be stored locally on the page */
|
||||
/** Determine if a record is so big that it needs to be stored externally.
|
||||
@param[in] rec_size length of the record in bytes
|
||||
@param[in] comp nonzero=compact format
|
||||
@param[in] n_fields number of fields in the record; ignored if
|
||||
tablespace is not compressed
|
||||
@param[in] page_size page size
|
||||
@return FALSE if the entire record can be stored locally on the page */
|
||||
UNIV_INLINE
|
||||
ibool
|
||||
page_zip_rec_needs_ext(
|
||||
/*===================*/
|
||||
ulint rec_size, /*!< in: length of the record in bytes */
|
||||
ulint comp, /*!< in: nonzero=compact format */
|
||||
ulint n_fields, /*!< in: number of fields in the record;
|
||||
ignored if zip_size == 0 */
|
||||
ulint zip_size) /*!< in: compressed page size in bytes, or 0 */
|
||||
ulint rec_size,
|
||||
ulint comp,
|
||||
ulint n_fields,
|
||||
const page_size_t& page_size)
|
||||
{
|
||||
ut_ad(rec_size > comp ? REC_N_NEW_EXTRA_BYTES : REC_N_OLD_EXTRA_BYTES);
|
||||
ut_ad(ut_is_2pow(zip_size));
|
||||
ut_ad(comp || !zip_size);
|
||||
ut_ad(comp || !page_size.is_compressed());
|
||||
|
||||
#if UNIV_PAGE_SIZE_MAX > REC_MAX_DATA_SIZE
|
||||
if (rec_size >= REC_MAX_DATA_SIZE) {
|
||||
|
|
@ -182,7 +173,7 @@ page_zip_rec_needs_ext(
|
|||
}
|
||||
#endif
|
||||
|
||||
if (zip_size) {
|
||||
if (page_size.is_compressed()) {
|
||||
ut_ad(comp);
|
||||
/* On a compressed page, there is a two-byte entry in
|
||||
the dense page directory for every record. But there
|
||||
|
|
@ -191,7 +182,7 @@ page_zip_rec_needs_ext(
|
|||
the encoded heap number. Check also the available space
|
||||
on the uncompressed page. */
|
||||
return(rec_size - (REC_N_NEW_EXTRA_BYTES - 2 - 1)
|
||||
>= page_zip_empty_size(n_fields, zip_size)
|
||||
>= page_zip_empty_size(n_fields, page_size.physical())
|
||||
|| rec_size >= page_get_free_space_of_empty(TRUE) / 2);
|
||||
}
|
||||
|
||||
|
|
@ -202,7 +193,7 @@ page_zip_rec_needs_ext(
|
|||
#ifdef UNIV_DEBUG
|
||||
/**********************************************************************//**
|
||||
Validate a compressed page descriptor.
|
||||
@return TRUE if ok */
|
||||
@return TRUE if ok */
|
||||
UNIV_INLINE
|
||||
ibool
|
||||
page_zip_simple_validate(
|
||||
|
|
@ -286,7 +277,7 @@ page_zip_max_ins_size(
|
|||
|
||||
/**********************************************************************//**
|
||||
Determine if enough space is available in the modification log.
|
||||
@return TRUE if enough space is available */
|
||||
@return TRUE if enough space is available */
|
||||
UNIV_INLINE
|
||||
ibool
|
||||
page_zip_available(
|
||||
|
|
@ -336,7 +327,6 @@ page_zip_des_init(
|
|||
|
||||
/**********************************************************************//**
|
||||
Write a log record of writing to the uncompressed header portion of a page. */
|
||||
UNIV_INTERN
|
||||
void
|
||||
page_zip_write_header_log(
|
||||
/*======================*/
|
||||
|
|
@ -403,7 +393,7 @@ page_zip_compress_write_log_no_data(
|
|||
|
||||
/**********************************************************************//**
|
||||
Parses a log record of compressing an index page without the data.
|
||||
@return end of log record or NULL */
|
||||
@return end of log record or NULL */
|
||||
UNIV_INLINE
|
||||
byte*
|
||||
page_zip_parse_compress_no_data(
|
||||
|
|
@ -426,7 +416,7 @@ page_zip_parse_compress_no_data(
|
|||
was successful. Crash in this case. */
|
||||
|
||||
if (page
|
||||
&& !page_zip_compress(page_zip, page, index, level, NULL)) {
|
||||
&& !page_zip_compress(page_zip, page, index, level, NULL, NULL)) {
|
||||
ut_error;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue