diff options
-rw-r--r-- | actions/admin/site/unlock_upgrade.php | 19 | ||||
-rw-r--r-- | engine/lib/upgrade.php | 51 | ||||
-rw-r--r-- | upgrade.php | 35 |
3 files changed, 56 insertions, 49 deletions
diff --git a/actions/admin/site/unlock_upgrade.php b/actions/admin/site/unlock_upgrade.php index b73cf7033..b625b1d26 100644 --- a/actions/admin/site/unlock_upgrade.php +++ b/actions/admin/site/unlock_upgrade.php @@ -3,21 +3,8 @@ * Unlocks the upgrade script */ -// @todo Move this in ElggUpgradeManager::isLocked() when #4682 fixed -global $CONFIG, $DB_QUERY_CACHE; - -$is_locked = count(get_data("show tables like '{$CONFIG->dbprefix}locked'")); - -// Invalidate query cache -if ($DB_QUERY_CACHE) { - $DB_QUERY_CACHE->clear(); - elgg_log("Query cache invalidated", 'NOTICE'); -} - -if ($is_locked) { - // @todo Move to ElggUpgradeManager::unlock() when #4682 fixed. - delete_data("drop table {$CONFIG->dbprefix}locked"); - error_log('Upgrade unlocks itself'); +if (_elgg_upgrade_is_locked()) { + _elgg_upgrade_unlock(); } system_message(elgg_echo('upgrade:unlock:success')); -forward(REFERER);
\ No newline at end of file +forward(REFERER); diff --git a/engine/lib/upgrade.php b/engine/lib/upgrade.php index f0874a483..7f55c4cba 100644 --- a/engine/lib/upgrade.php +++ b/engine/lib/upgrade.php @@ -311,3 +311,54 @@ function elgg_upgrade_bootstrap_17_to_18() { return elgg_set_processed_upgrades($processed_upgrades); } + +/** + * Locks a mutual execution of upgrade + * + * @return bool + * @access private + */ +function _elgg_upgrade_lock() { + global $CONFIG; + + if (!_elgg_upgrade_is_locked()) { + // lock it + insert_data("create table {$CONFIG->dbprefix}locked (id INT)"); + error_log('Upgrade continue running'); + return true; + } + + error_log('Upgrade is locked'); + return false; +} + +/** + * Unlocks upgrade for new upgrade executions + * + * @access private + */ +function _elgg_upgrade_unlock() { + global $CONFIG; + delete_data("drop table {$CONFIG->dbprefix}locked"); + error_log('Upgrade unlocks itself'); +} + +/** + * Checks if upgrade is locked + * + * @return bool + * @access private + */ +function _elgg_upgrade_is_locked() { + global $CONFIG, $DB_QUERY_CACHE; + + $is_locked = count(get_data("show tables like '{$CONFIG->dbprefix}locked'")); + + // Invalidate query cache + if ($DB_QUERY_CACHE) { + $DB_QUERY_CACHE->clear(); + elgg_log("Query cache invalidated", 'NOTICE'); + } + + return $is_locked; +} diff --git a/upgrade.php b/upgrade.php index e1f3c6b9e..a58fcdc96 100644 --- a/upgrade.php +++ b/upgrade.php @@ -13,37 +13,6 @@ * @subpackage Upgrade */ -// @todo Move to ElggUpgradeManager::lock() when #4628 fixed. -function upgrade_lock() { - global $CONFIG, $DB_QUERY_CACHE; - - $is_locked = count(get_data("show tables like '{$CONFIG->dbprefix}locked'")); - - // Invalidate query cache - if ($DB_QUERY_CACHE) { - $DB_QUERY_CACHE->clear(); - elgg_log("Query cache invalidated", 'NOTICE'); - } - - if (!$is_locked) { - // lock it - insert_data("create table {$CONFIG->dbprefix}locked (id INT)"); - error_log('Upgrade continue running'); - return true; - } - - error_log('Upgrade is locked'); - return false; -} - -// @todo Move to ElggUpgradeManager::unlock() when #4682 fixed. -function upgrade_unlock() { - global $CONFIG; - delete_data("drop table {$CONFIG->dbprefix}locked"); - error_log('Upgrade unlocks itself'); -} - - // we want to know if an error occurs ini_set('display_errors', 1); @@ -53,7 +22,7 @@ require_once(dirname(__FILE__) . "/engine/start.php"); if (get_input('upgrade') == 'upgrade') { // prevent someone from running the upgrade script in parallel (see #4643) - if (!upgrade_lock()) { + if (!_elgg_upgrade_lock()) { forward(); } @@ -72,7 +41,7 @@ if (get_input('upgrade') == 'upgrade') { elgg_reset_system_cache(); // critical region has past - upgrade_unlock(); + _elgg_upgrade_unlock(); } else { // if upgrading from < 1.8.0, check for the core view 'welcome' and bail if it's found. |