hopefully solve db update issues bug #182

This commit is contained in:
Friendika 2011-10-18 00:18:21 -07:00
parent cc5974e6c2
commit 06096486d4
2 changed files with 19 additions and 9 deletions

View file

@ -539,6 +539,8 @@ function check_config(&$a) {
$current = intval(DB_UPDATE_VERSION); $current = intval(DB_UPDATE_VERSION);
if(($stored < $current) && file_exists('update.php')) { if(($stored < $current) && file_exists('update.php')) {
load_config('database');
// We're reporting a different version than what is currently installed. // We're reporting a different version than what is currently installed.
// Run any existing update scripts to bring the database up to current. // Run any existing update scripts to bring the database up to current.
@ -552,6 +554,21 @@ function check_config(&$a) {
for($x = $stored; $x < $current; $x ++) { for($x = $stored; $x < $current; $x ++) {
if(function_exists('update_' . $x)) { if(function_exists('update_' . $x)) {
// There could be a lot of processes running or about to run.
// We want exactly one process to run the update command.
// So store the fact that we're taking responsibility
// after first checking to see if somebody else already has.
// If the update fails or times-out completely you may need to
// delete the config entry to try again.
if(get_config('database','update_' . $x))
break;
set_config('database','update_' . $x, '1');
// call the specific update
$func = 'update_' . $x; $func = 'update_' . $x;
$func($a); $func($a);
} }

View file

@ -5,16 +5,9 @@
*/ */
require_once("include/remoteupdate.php"); require_once("include/remoteupdate.php");
function admin_init(&$a) {
if(!is_site_admin()) {
notice( t('Permission denied.') . EOL);
return;
}
}
function admin_post(&$a){ function admin_post(&$a){
if(!is_site_admin()) { if(!is_site_admin()) {
return login(false); return;
} }
// urls // urls
@ -672,7 +665,7 @@ function admin_page_logs(&$a){
function admin_page_remoteupdate_post(&$a) { function admin_page_remoteupdate_post(&$a) {
// this function should be called via ajax post // this function should be called via ajax post
if(!is_site_admin()) { if(!is_site_admin()) {
return login(false); return;
} }