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