mirror of
https://github.com/MariaDB/server.git
synced 2026-05-16 20:07:13 +02:00
Bug#16752251 - INNODB DOESN'T REDO-LOG INSERT BUFFER MERGE OPERATION IF
IT IS DONE IN-PLACE With change buffer enabled, InnoDB doesn't write a transaction log record when it merges a record from the insert buffer to an secondary index page if the insertion is performed as an update-in-place. Fixed by logging the 'update-in-place' operation on secondary index pages. Approved by Marko. rb#2429
This commit is contained in:
parent
4250117308
commit
59402fe0a7
8 changed files with 181 additions and 17 deletions
|
|
@ -3024,6 +3024,24 @@ updated_in_place:
|
|||
/* This is the easy case. Do something similar
|
||||
to btr_cur_update_in_place(). */
|
||||
row_upd_rec_in_place(rec, offsets, update);
|
||||
|
||||
/* Log the update in place operation. During recovery
|
||||
MLOG_COMP_REC_UPDATE_IN_PLACE/MLOG_REC_UPDATE_IN_PLACE
|
||||
expects trx_id, roll_ptr for secondary indexes. So we
|
||||
just write dummy trx_id(0), roll_ptr(0) */
|
||||
btr_cur_update_in_place_log(BTR_KEEP_SYS_FLAG, rec,
|
||||
index, update,
|
||||
NULL,
|
||||
ut_dulint_zero, mtr);
|
||||
DBUG_EXECUTE_IF(
|
||||
"crash_after_log_ibuf_upd_inplace",
|
||||
log_buffer_flush_to_disk();
|
||||
fprintf(stderr,
|
||||
"InnoDB: Wrote log record for ibuf "
|
||||
"update in place operation\n");
|
||||
DBUG_SUICIDE();
|
||||
);
|
||||
|
||||
goto updated_in_place;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue