Using Locks for Updating and writing last success to config
This commit is contained in:
parent
e876adef8f
commit
f2ca3e5be4
1 changed files with 53 additions and 51 deletions
|
@ -27,39 +27,38 @@ class Update
|
||||||
Config::load('database');
|
Config::load('database');
|
||||||
|
|
||||||
// Compare the current structure with the defined structure
|
// Compare the current structure with the defined structure
|
||||||
$t = Config::get('database', 'dbupdate_' . DB_UPDATE_VERSION);
|
if (Lock::acquire('dbupdate')) {
|
||||||
if (!is_null($t)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// run the pre_update_nnnn functions in update.php
|
// run the pre_update_nnnn functions in update.php
|
||||||
for ($x = $stored + 1; $x <= $current; $x++) {
|
for ($x = $stored + 1; $x <= $current; $x++) {
|
||||||
$r = self::runUpdateFunction($x, 'pre_update');
|
$r = self::runUpdateFunction($x, 'pre_update');
|
||||||
if (!$r) {
|
if (!$r) {
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
Config::set('database', 'dbupdate_' . DB_UPDATE_VERSION, time());
|
// update the structure in one call
|
||||||
|
$retval = DBStructure::update(false, true);
|
||||||
// update the structure in one call
|
if ($retval) {
|
||||||
$retval = DBStructure::update(false, true);
|
DBStructure::updateFail(
|
||||||
if ($retval) {
|
DB_UPDATE_VERSION,
|
||||||
DBStructure::updateFail(
|
$retval
|
||||||
DB_UPDATE_VERSION,
|
);
|
||||||
$retval
|
Lock::release('dbupdate');
|
||||||
);
|
return;
|
||||||
return;
|
} else {
|
||||||
} else {
|
Config::set('database', 'last_successful_update', time());
|
||||||
Config::set('database', 'dbupdate_' . DB_UPDATE_VERSION, 'success');
|
|
||||||
}
|
|
||||||
|
|
||||||
// run the update_nnnn functions in update.php
|
|
||||||
for ($x = $stored + 1; $x <= $current; $x++) {
|
|
||||||
$r = self::runUpdateFunction($x, 'update');
|
|
||||||
if (!$r) {
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// run the update_nnnn functions in update.php
|
||||||
|
for ($x = $stored + 1; $x <= $current; $x++) {
|
||||||
|
$r = self::runUpdateFunction($x, 'update');
|
||||||
|
if (!$r) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Lock::release('dbupdate');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -85,33 +84,36 @@ class Update
|
||||||
// If the update fails or times-out completely you may need to
|
// If the update fails or times-out completely you may need to
|
||||||
// delete the config entry to try again.
|
// delete the config entry to try again.
|
||||||
|
|
||||||
$t = Config::get('database', $funcname);
|
if (Lock::acquire('dbupdate_function')) {
|
||||||
if (!is_null($t)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
Config::set('database', $funcname, time());
|
|
||||||
|
|
||||||
// call the specific update
|
// call the specific update
|
||||||
$retval = $funcname();
|
$retval = $funcname();
|
||||||
|
|
||||||
if ($retval) {
|
if ($retval) {
|
||||||
//send the administrator an e-mail
|
//send the administrator an e-mail
|
||||||
DBStructure::updateFail(
|
DBStructure::updateFail(
|
||||||
$x,
|
$x,
|
||||||
L10n::t('Update %s failed. See error logs.', $x)
|
L10n::t('Update %s failed. See error logs.', $x)
|
||||||
);
|
);
|
||||||
return false;
|
Lock::release('dbupdate_function');
|
||||||
} else {
|
return false;
|
||||||
Config::set('database', $funcname, 'success');
|
} else {
|
||||||
|
Config::set('database', 'last_successful_update_function', $funcname);
|
||||||
|
Config::set('database', 'last_successful_update_function_time', time());
|
||||||
|
|
||||||
if ($prefix == 'update') {
|
if ($prefix == 'update') {
|
||||||
Config::set('system', 'build', $x);
|
Config::set('system', 'build', $x);
|
||||||
|
}
|
||||||
|
|
||||||
|
Lock::release('dbupdate_function');
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Config::set('database', $funcname, 'success');
|
logger('Skipping \'' . $funcname . '\' without executing', LOGGER_DEBUG);
|
||||||
|
|
||||||
|
Config::set('database', 'last_successful_update_function', $funcname);
|
||||||
|
Config::set('database', 'last_successful_update_function_time', time());
|
||||||
|
|
||||||
if ($prefix == 'update') {
|
if ($prefix == 'update') {
|
||||||
Config::set('system', 'build', $x);
|
Config::set('system', 'build', $x);
|
||||||
|
@ -120,4 +122,4 @@ class Update
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue