[ticket/14742] Pause after each update_data step too

Rewriting process_data_step() to remove the now
useless foreach() loop.

PHPBB3-14742
This commit is contained in:
Oliver Schramm 2016-08-20 05:39:45 +02:00
parent 775d1c855a
commit 7c99fcf782

View file

@ -506,6 +506,11 @@ class migrator
*/
protected function process_data_step($steps, $state, $revert = false)
{
if (sizeof($steps) === 0)
{
return true;
}
$state = is_array($state) ? $state : false;
// reverse order of steps if reverting
@ -514,46 +519,26 @@ class migrator
$steps = array_reverse($steps);
}
end($steps);
$last_step_identifier = key($steps);
foreach ($steps as $step_identifier => $step)
{
$last_result = 0;
$step = $last_result = 0;
if ($state)
{
// Continue until we reach the step that matches the last step called
if ($state['step'] != $step_identifier)
{
continue;
}
$step = $state['step'];
// We send the result from last time to the callable function
$last_result = $state['result'];
// Set state to false since we reached the point we were at
$state = false;
// If the last result is null or true, this means
// the last method call was finished and we can move on
if ($last_result === null || $last_result === true)
{
continue;
}
}
try
{
// Result will be null or true if everything completed correctly
// After any schema update step we allow to pause, since
// database changes can take quite some time
$result = $this->run_step($step, $last_result, $revert);
if (($result !== null && $result !== true) ||
(strpos($step[0], 'dbtools') === 0 && $step_identifier !== $last_step_identifier))
// Stop after each update step, to let the updater control the script runtime
$result = $this->run_step($steps[$step], $last_result, $revert);
if (($result !== null && $result !== true) || $step + 1 < sizeof($steps))
{
return array(
'result' => $result,
'step' => $step_identifier,
// Move on if the last call finished
'step' => ($result !== null && $result !== true) ? $step : $step + 1,
);
}
}
@ -563,7 +548,7 @@ class migrator
foreach ($steps as $reverse_step_identifier => $reverse_step)
{
// If we've reached the current step we can break because we reversed everything that was run
if ($reverse_step_identifier == $step_identifier)
if ($reverse_step_identifier == $step)
{
break;
}
@ -574,7 +559,6 @@ class migrator
throw $e;
}
}
return true;
}