@@ -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+
265277bool 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