Skip to content

Commit cbdf0a0

Browse files
Copy "safe" Aria files under DDL lock only to allow concurrent DML.
1 parent 185b3b1 commit cbdf0a0

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
@@ -246,6 +246,18 @@ static bool run_backup_end_phase(THD *thd, backup_end_phase phase, bool failed)
246246
failed;
247247
}
248248

249+
static bool upgrade_and_process(THD *thd,
250+
MDL_request& mdl_request,
251+
enum_mdl_type lock_level,
252+
backup_proc_phase phase)
253+
{
254+
bool fail= thd->mdl_context.upgrade_shared_lock(mdl_request.ticket,
255+
lock_level,
256+
thd->variables.lock_wait_timeout) ||
257+
start_proc_phase(thd, phase);
258+
return fail || run_backup_processing(thd);
259+
}
260+
249261
bool Sql_cmd_backup::execute(THD *thd)
250262
{
251263
if (check_global_access(thd, RELOAD_ACL) ||
@@ -294,20 +306,12 @@ bool Sql_cmd_backup::execute(THD *thd)
294306

295307
if (!fail)
296308
{
297-
fail= thd->mdl_context.upgrade_shared_lock(mdl_request.ticket,
298-
MDL_BACKUP_WAIT_DDL,
299-
thd->variables.lock_wait_timeout) ||
300-
start_proc_phase(thd, BACKUP_PROC_PHASE_BACKUP_LOCKED);
301-
fail= fail || run_backup_processing(thd);
302-
}
303-
304-
if (!fail)
305-
{
306-
fail= thd->mdl_context.upgrade_shared_lock(mdl_request.ticket,
307-
MDL_BACKUP_WAIT_COMMIT,
308-
thd->variables.lock_wait_timeout) ||
309-
start_proc_phase(thd, BACKUP_PROC_PHASE_COMMIT_LOCKED);
310-
fail= fail || run_backup_processing(thd);
309+
fail= start_proc_phase(thd, BACKUP_PROC_PHASE_BACKUP_LOCKED) ||
310+
run_backup_processing(thd) ||
311+
upgrade_and_process(thd, mdl_request, MDL_BACKUP_WAIT_DDL,
312+
BACKUP_PROC_PHASE_DDL_LOCKED) ||
313+
upgrade_and_process(thd, mdl_request, MDL_BACKUP_WAIT_COMMIT,
314+
BACKUP_PROC_PHASE_COMMIT_LOCKED);
311315
}
312316

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

0 commit comments

Comments
 (0)