mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 04:53:01 +01:00
Merge mysql-5.1 to mysql-5.5.
This commit is contained in:
commit
82842c4a21
4 changed files with 36 additions and 6 deletions
|
@ -2886,7 +2886,7 @@ btr_cur_set_deleted_flag_for_ibuf(
|
|||
when the tablespace is
|
||||
uncompressed */
|
||||
ibool val, /*!< in: value to set */
|
||||
mtr_t* mtr) /*!< in: mtr */
|
||||
mtr_t* mtr) /*!< in/out: mini-transaction */
|
||||
{
|
||||
/* We do not need to reserve btr_search_latch, as the page
|
||||
has just been read to the buffer pool and there cannot be
|
||||
|
|
|
@ -11660,8 +11660,8 @@ static MYSQL_SYSVAR_ENUM(stats_method, srv_innodb_stats_method,
|
|||
#if defined UNIV_DEBUG || defined UNIV_IBUF_DEBUG
|
||||
static MYSQL_SYSVAR_UINT(change_buffering_debug, ibuf_debug,
|
||||
PLUGIN_VAR_RQCMDARG,
|
||||
"Debug flags for InnoDB change buffering (0=none)",
|
||||
NULL, NULL, 0, 0, 1, 0);
|
||||
"Debug flags for InnoDB change buffering (0=none, 2=crash at merge)",
|
||||
NULL, NULL, 0, 0, 2, 0);
|
||||
#endif /* UNIV_DEBUG || UNIV_IBUF_DEBUG */
|
||||
|
||||
static MYSQL_SYSVAR_BOOL(random_read_ahead, srv_random_read_ahead,
|
||||
|
|
|
@ -2868,6 +2868,14 @@ ibuf_get_volume_buffered_count_func(
|
|||
ut_a(len == 1);
|
||||
ut_ad(trx_sys_multiple_tablespace_format);
|
||||
|
||||
if (rec_get_deleted_flag(rec, 0)) {
|
||||
/* This record has been merged already,
|
||||
but apparently the system crashed before
|
||||
the change was discarded from the buffer.
|
||||
Pretend that the record does not exist. */
|
||||
return(0);
|
||||
}
|
||||
|
||||
types = rec_get_nth_field_old(rec, IBUF_REC_FIELD_METADATA, &len);
|
||||
|
||||
switch (UNIV_EXPECT(len % DATA_NEW_ORDER_NULL_TYPE_BUF_SIZE,
|
||||
|
@ -4285,6 +4293,22 @@ ibuf_delete_rec(
|
|||
ut_ad(ibuf_rec_get_page_no(mtr, btr_pcur_get_rec(pcur)) == page_no);
|
||||
ut_ad(ibuf_rec_get_space(mtr, btr_pcur_get_rec(pcur)) == space);
|
||||
|
||||
#if defined UNIV_DEBUG || defined UNIV_IBUF_DEBUG
|
||||
if (ibuf_debug == 2) {
|
||||
/* Inject a fault (crash). We do this before trying
|
||||
optimistic delete, because a pessimistic delete in the
|
||||
change buffer would require a larger test case. */
|
||||
|
||||
/* Flag the buffered record as processed, to avoid
|
||||
an assertion failure after crash recovery. */
|
||||
btr_cur_set_deleted_flag_for_ibuf(
|
||||
btr_pcur_get_rec(pcur), NULL, TRUE, mtr);
|
||||
ibuf_mtr_commit(mtr);
|
||||
log_make_checkpoint_at(IB_ULONGLONG_MAX, TRUE);
|
||||
DBUG_SUICIDE();
|
||||
}
|
||||
#endif /* UNIV_DEBUG || UNIV_IBUF_DEBUG */
|
||||
|
||||
success = btr_cur_optimistic_delete(btr_pcur_get_btr_cur(pcur), mtr);
|
||||
|
||||
if (success) {
|
||||
|
@ -4319,7 +4343,13 @@ ibuf_delete_rec(
|
|||
ut_ad(ibuf_rec_get_page_no(mtr, btr_pcur_get_rec(pcur)) == page_no);
|
||||
ut_ad(ibuf_rec_get_space(mtr, btr_pcur_get_rec(pcur)) == space);
|
||||
|
||||
/* We have to resort to a pessimistic delete from ibuf */
|
||||
/* We have to resort to a pessimistic delete from ibuf.
|
||||
Delete-mark the record so that it will not be applied again,
|
||||
in case the server crashes before the pessimistic delete is
|
||||
made persistent. */
|
||||
btr_cur_set_deleted_flag_for_ibuf(
|
||||
btr_pcur_get_rec(pcur), NULL, TRUE, mtr);
|
||||
|
||||
btr_pcur_store_position(pcur, mtr);
|
||||
ibuf_btr_pcur_commit_specify_mtr(pcur, mtr);
|
||||
|
||||
|
@ -4600,7 +4630,7 @@ loop:
|
|||
fputs("InnoDB: Discarding record\n ", stderr);
|
||||
rec_print_old(stderr, rec);
|
||||
fputs("\nInnoDB: from the insert buffer!\n\n", stderr);
|
||||
} else if (block) {
|
||||
} else if (block && !rec_get_deleted_flag(rec, 0)) {
|
||||
/* Now we have at pcur a record which should be
|
||||
applied on the index page; NOTE that the call below
|
||||
copies pointers to fields in rec, and we must
|
||||
|
|
|
@ -635,7 +635,7 @@ btr_cur_set_deleted_flag_for_ibuf(
|
|||
when the tablespace is
|
||||
uncompressed */
|
||||
ibool val, /*!< in: value to set */
|
||||
mtr_t* mtr); /*!< in: mtr */
|
||||
mtr_t* mtr); /*!< in/out: mini-transaction */
|
||||
/*######################################################################*/
|
||||
|
||||
/** In the pessimistic delete, if the page data size drops below this
|
||||
|
|
Loading…
Reference in a new issue