Skip to content

Commit 4698cc2

Browse files
Copy "safe" Aria files under DDL lock only to allow concurrent DML.
1 parent f7a3fb3 commit 4698cc2

2 files changed

Lines changed: 317 additions & 117 deletions

File tree

sql/sql_backup.cc

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,18 @@ static bool run_backup_end_phase(THD *thd, backup_end_phase phase, bool failed)
262262
failed;
263263
}
264264

265+
static bool upgrade_and_process(THD *thd,
266+
MDL_request& mdl_request,
267+
enum_mdl_type lock_level,
268+
backup_proc_phase phase)
269+
{
270+
bool fail= thd->mdl_context.upgrade_shared_lock(mdl_request.ticket,
271+
lock_level,
272+
thd->variables.lock_wait_timeout) ||
273+
start_proc_phase(thd, phase);
274+
return fail || run_backup_processing(thd);
275+
}
276+
265277
bool Sql_cmd_backup::execute(THD *thd)
266278
{
267279
if (check_global_access(thd, RELOAD_ACL) ||
@@ -310,20 +322,12 @@ bool Sql_cmd_backup::execute(THD *thd)
310322

311323
if (!fail)
312324
{
313-
fail= thd->mdl_context.upgrade_shared_lock(mdl_request.ticket,
314-
MDL_BACKUP_WAIT_DDL,
315-
thd->variables.lock_wait_timeout) ||
316-
start_proc_phase(thd, BACKUP_PROC_PHASE_BACKUP_LOCKED);
317-
fail= fail || run_backup_processing(thd);
318-
}
319-
320-
if (!fail)
321-
{
322-
fail= thd->mdl_context.upgrade_shared_lock(mdl_request.ticket,
323-
MDL_BACKUP_WAIT_COMMIT,
324-
thd->variables.lock_wait_timeout) ||
325-
start_proc_phase(thd, BACKUP_PROC_PHASE_COMMIT_LOCKED);
326-
fail= fail || run_backup_processing(thd);
325+
fail= start_proc_phase(thd, BACKUP_PROC_PHASE_BACKUP_LOCKED) ||
326+
run_backup_processing(thd) ||
327+
upgrade_and_process(thd, mdl_request, MDL_BACKUP_WAIT_DDL,
328+
BACKUP_PROC_PHASE_DDL_LOCKED) ||
329+
upgrade_and_process(thd, mdl_request, MDL_BACKUP_WAIT_COMMIT,
330+
BACKUP_PROC_PHASE_COMMIT_LOCKED);
327331
}
328332

329333
fail= run_backup_end_phase(thd, BACKUP_END_PHASE_COMMIT_LOCKED, fail) || fail;

0 commit comments

Comments
 (0)