mirror of
https://github.com/MariaDB/server.git
synced 2026-05-17 20:37:12 +02:00
MDEV-36504 Memory leak after CREATE TABLE..SELECT
Problem:
========
- After commit cc8eefb0dc (MDEV-33087),
InnoDB does use bulk insert operation for ALTER TABLE.. ALGORITHM=COPY
and CREATE TABLE..SELECT as well. InnoDB fails to clear the bulk
buffer when it encounters error during CREATE..SELECT. Problem
is that while transaction cleanup, InnoDB fails to identify
the bulk insert for DDL operation.
Fix:
====
- Represent bulk_insert in trx by 2 bits. By doing that, InnoDB
can distinguish between TRX_DML_BULK, TRX_DDL_BULK. During DDL,
set bulk insert value for transaction to TRX_DDL_BULK.
- Introduce a parameter HA_EXTRA_ABORT_ALTER_COPY which rollbacks
only TRX_DDL_BULK transaction.
- bulk_insert_apply() happens for TRX_DDL_BULK transaction happens
only during HA_EXTRA_END_ALTER_COPY extra() call.
This commit is contained in:
parent
1a013cea95
commit
f388222d49
14 changed files with 118 additions and 22 deletions
|
|
@ -558,6 +558,9 @@ static const char *mrn_inspect_extra_function(enum ha_extra_function operation)
|
|||
case HA_EXTRA_END_ALTER_COPY:
|
||||
inspected = "HA_EXTRA_END_ALTER_COPY";
|
||||
break;
|
||||
case HA_EXTRA_ABORT_ALTER_COPY:
|
||||
inspected = "HA_EXTRA_ABORT_ALTER_COPY";
|
||||
break;
|
||||
#ifdef MRN_HAVE_HA_EXTRA_EXPORT
|
||||
case HA_EXTRA_EXPORT:
|
||||
inspected = "HA_EXTRA_EXPORT";
|
||||
|
|
@ -593,6 +596,11 @@ static const char *mrn_inspect_extra_function(enum ha_extra_function operation)
|
|||
inspected = "HA_EXTRA_END_ALTER_COPY";
|
||||
break;
|
||||
#endif
|
||||
#ifdef MRN_HAVE_HA_EXTRA_ABORT_ALTER_COPY
|
||||
case HA_EXTRA_ABORT_ALTER_COPY:
|
||||
inspected = "HA_EXTRA_ABORT_ALTER_COPY";
|
||||
break;
|
||||
#endif
|
||||
#ifdef MRN_HAVE_HA_EXTRA_NO_AUTOINC_LOCKING
|
||||
case HA_EXTRA_NO_AUTOINC_LOCKING:
|
||||
inspected = "HA_EXTRA_NO_AUTOINC_LOCKING";
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue