Config::load('database');
// Compare the current structure with the defined structure
- $t = Config::get('database', 'dbupdate_' . DB_UPDATE_VERSION);
- if (!is_null($t)) {
- return;
- }
-
- // run the pre_update_nnnn functions in update.php
- for ($x = $stored + 1; $x <= $current; $x++) {
- $r = self::runUpdateFunction($x, 'pre_update');
- if (!$r) {
- break;
+ if (Lock::acquire('dbupdate')) {
+
+ // run the pre_update_nnnn functions in update.php
+ for ($x = $stored + 1; $x <= $current; $x++) {
+ $r = self::runUpdateFunction($x, 'pre_update');
+ if (!$r) {
+ break;
+ }
}
- }
- Config::set('database', 'dbupdate_' . DB_UPDATE_VERSION, time());
-
- // update the structure in one call
- $retval = DBStructure::update(false, true);
- if ($retval) {
- DBStructure::updateFail(
- DB_UPDATE_VERSION,
- $retval
- );
- return;
- } else {
- Config::set('database', 'dbupdate_' . DB_UPDATE_VERSION, 'success');
- }
+ // update the structure in one call
+ $retval = DBStructure::update(false, true);
+ if ($retval) {
+ DBStructure::updateFail(
+ DB_UPDATE_VERSION,
+ $retval
+ );
+ Lock::release('dbupdate');
+ return;
+ } else {
+ Config::set('database', 'last_successful_update', time());
+ }
- // 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');
}
}
}
// If the update fails or times-out completely you may need to
// delete the config entry to try again.
- $t = Config::get('database', $funcname);
- if (!is_null($t)) {
- return false;
- }
- Config::set('database', $funcname, time());
-
- // call the specific update
- $retval = $funcname();
-
- if ($retval) {
- //send the administrator an e-mail
- DBStructure::updateFail(
- $x,
- L10n::t('Update %s failed. See error logs.', $x)
- );
- return false;
- } else {
- Config::set('database', $funcname, 'success');
-
- if ($prefix == 'update') {
- Config::set('system', 'build', $x);
- }
+ if (Lock::acquire('dbupdate_function')) {
+
+ // call the specific update
+ $retval = $funcname();
- return true;
+ if ($retval) {
+ //send the administrator an e-mail
+ DBStructure::updateFail(
+ $x,
+ L10n::t('Update %s failed. See error logs.', $x)
+ );
+ Lock::release('dbupdate_function');
+ return false;
+ } else {
+ Config::set('database', 'last_successful_update_function', $funcname);
+ Config::set('database', 'last_successful_update_function_time', time());
+
+ if ($prefix == 'update') {
+ Config::set('system', 'build', $x);
+ }
+
+ Lock::release('dbupdate_function');
+ return true;
+ }
}
} 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') {
Config::set('system', 'build', $x);
return true;
}
}
-}
\ No newline at end of file
+}