diff --git a/src/Core/Console/DatabaseStructure.php b/src/Core/Console/DatabaseStructure.php index 1ec108d2e6..dededa9b3a 100644 --- a/src/Core/Console/DatabaseStructure.php +++ b/src/Core/Console/DatabaseStructure.php @@ -31,9 +31,10 @@ Commands toinnodb Convert all tables from MyISAM to InnoDB Options - -h|--help|-? Show help information - -v Show more debug information. - -f|--force Force the command in case of "update" (Ignore failed updates/running updates) + -h|--help|-? Show help information + -v Show more debug information. + -f|--force Force the update command (Even if the database structure matches) + -o|--override Override running or stalling updates HELP; return $help; } @@ -68,8 +69,9 @@ HELP; $output = DBStructure::update($a->getBasePath(), true, false); break; case "update": - $force = $this->getOption(['f', 'force'], false); - $output = Update::run($a->getBasePath(), $force, true, false); + $force = $this->getOption(['f', 'force'], false); + $override = $this->getOption(['o', 'override'], false); + $output = Update::run($a->getBasePath(), $force, $override,true, false); break; case "dumpsql": ob_start(); @@ -89,5 +91,4 @@ HELP; return 0; } - } diff --git a/src/Core/Console/PostUpdate.php b/src/Core/Console/PostUpdate.php index 103d0fef7e..a34fc0bcf7 100644 --- a/src/Core/Console/PostUpdate.php +++ b/src/Core/Console/PostUpdate.php @@ -56,7 +56,7 @@ HELP; } echo L10n::t('Check for pending update actions.') . "\n"; - Update::run($a->getBasePath(), true, true, false); + Update::run($a->getBasePath(), true, false,true, false); echo L10n::t('Done.') . "\n"; echo L10n::t('Execute pending post updates.') . "\n"; diff --git a/src/Core/Lock.php b/src/Core/Lock.php index adff049dce..8bc2c242d1 100644 --- a/src/Core/Lock.php +++ b/src/Core/Lock.php @@ -122,13 +122,13 @@ class Lock /** * @brief Releases a lock if it was set by us * - * @param string $key Name of the lock - * @param bool $force Force the lock to get releases + * @param string $key Name of the lock + * @param bool $override Overrides the lock to get releases * @return void */ - public static function release($key, $force = false) + public static function release($key, $override = false) { - self::getDriver()->releaseLock($key, $force); + self::getDriver()->releaseLock($key, $override); } /** diff --git a/src/Core/Lock/CacheLockDriver.php b/src/Core/Lock/CacheLockDriver.php index a5c34bbdde..c1cd8ffb43 100644 --- a/src/Core/Lock/CacheLockDriver.php +++ b/src/Core/Lock/CacheLockDriver.php @@ -61,11 +61,11 @@ class CacheLockDriver extends AbstractLockDriver /** * (@inheritdoc) */ - public function releaseLock($key, $force = false) + public function releaseLock($key, $override = false) { $cachekey = self::getLockKey($key); - if ($force) { + if ($override) { $this->cache->delete($cachekey); } else { $this->cache->compareDelete($cachekey, getmypid()); diff --git a/src/Core/Lock/DatabaseLockDriver.php b/src/Core/Lock/DatabaseLockDriver.php index 73b97dc4b7..a137ef12ed 100644 --- a/src/Core/Lock/DatabaseLockDriver.php +++ b/src/Core/Lock/DatabaseLockDriver.php @@ -68,9 +68,9 @@ class DatabaseLockDriver extends AbstractLockDriver /** * (@inheritdoc) */ - public function releaseLock($key, $force = false) + public function releaseLock($key, $override = false) { - if ($force) { + if ($override) { $where = ['name' => $key]; } else { $where = ['name' => $key, 'pid' => $this->pid]; diff --git a/src/Core/Lock/ILockDriver.php b/src/Core/Lock/ILockDriver.php index 2ee145980c..7cbaa4fc69 100644 --- a/src/Core/Lock/ILockDriver.php +++ b/src/Core/Lock/ILockDriver.php @@ -33,12 +33,12 @@ interface ILockDriver /** * Releases a lock if it was set by us * - * @param string $key The Name of the lock - * @param bool $force Force the lock to get released + * @param string $key The Name of the lock + * @param bool $override Overrides the lock to get released * * @return void */ - public function releaseLock($key, $force = false); + public function releaseLock($key, $override = false); /** * Releases all lock that were set by us diff --git a/src/Core/Lock/SemaphoreLockDriver.php b/src/Core/Lock/SemaphoreLockDriver.php index 5ce03b2c39..781e110b17 100644 --- a/src/Core/Lock/SemaphoreLockDriver.php +++ b/src/Core/Lock/SemaphoreLockDriver.php @@ -50,7 +50,7 @@ class SemaphoreLockDriver extends AbstractLockDriver /** * (@inheritdoc) */ - public function releaseLock($key, $force = false) + public function releaseLock($key, $override = false) { if (empty(self::$semaphore[$key])) { return false; diff --git a/src/Core/Update.php b/src/Core/Update.php index 7f825f384c..86e481cf1d 100644 --- a/src/Core/Update.php +++ b/src/Core/Update.php @@ -48,18 +48,19 @@ class Update * Automatic database updates * * @param string $basePath The base path of this application - * @param bool $force Force the Update-Check even if the lock is set + * @param bool $force Force the Update-Check even if the database version doesn't match + * @param bool $override Overrides any running/stuck updates * @param bool $verbose Run the Update-Check verbose * @param bool $sendMail Sends a Mail to the administrator in case of success/failure * * @return string Empty string if the update is successful, error messages otherwise * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function run($basePath, $force = false, $verbose = false, $sendMail = true) + public static function run($basePath, $force = false, $override = false, $verbose = false, $sendMail = true) { // In force mode, we release the dbupdate lock first // Necessary in case of an stuck update - if ($force) { + if ($override) { Lock::release('dbupdate', true); } @@ -70,12 +71,12 @@ class Update Config::set('system', 'build', $build); } - if ($build != DB_UPDATE_VERSION) { + if ($build != DB_UPDATE_VERSION || $force) { require_once 'update.php'; $stored = intval($build); $current = intval(DB_UPDATE_VERSION); - if ($stored < $current) { + if ($stored < $current || $force) { Config::load('database'); Logger::log('Update from \'' . $stored . '\' to \'' . $current . '\' - starting', Logger::DEBUG); @@ -126,8 +127,6 @@ class Update Lock::release('dbupdate'); } } - } elseif ($force) { - DBStructure::update($basePath, $verbose, true); } return '';