Merge pull request #6740 from nupplaphil/issue/6503-force_update
Fixing force-flag for lock-release
This commit is contained in:
commit
4e3f780621
8 changed files with 37 additions and 25 deletions
|
@ -33,7 +33,8 @@ Commands
|
|||
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)
|
||||
-f|--force Force the update command (Even if the database structure matches)
|
||||
-o|--override Override running or stalling updates
|
||||
HELP;
|
||||
return $help;
|
||||
}
|
||||
|
@ -69,7 +70,8 @@ HELP;
|
|||
break;
|
||||
case "update":
|
||||
$force = $this->getOption(['f', 'force'], false);
|
||||
$output = Update::run($a->getBasePath(), $force, true, 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -123,11 +123,12 @@ class Lock
|
|||
* @brief Releases a lock if it was set by us
|
||||
*
|
||||
* @param string $key Name of the lock
|
||||
* @param bool $override Overrides the lock to get releases
|
||||
* @return void
|
||||
*/
|
||||
public static function release($key)
|
||||
public static function release($key, $override = false)
|
||||
{
|
||||
self::getDriver()->releaseLock($key);
|
||||
self::getDriver()->releaseLock($key, $override);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -61,11 +61,15 @@ class CacheLockDriver extends AbstractLockDriver
|
|||
/**
|
||||
* (@inheritdoc)
|
||||
*/
|
||||
public function releaseLock($key)
|
||||
public function releaseLock($key, $override = false)
|
||||
{
|
||||
$cachekey = self::getLockKey($key);
|
||||
|
||||
if ($override) {
|
||||
$this->cache->delete($cachekey);
|
||||
} else {
|
||||
$this->cache->compareDelete($cachekey, getmypid());
|
||||
}
|
||||
$this->markRelease($key);
|
||||
}
|
||||
|
||||
|
|
|
@ -68,9 +68,15 @@ class DatabaseLockDriver extends AbstractLockDriver
|
|||
/**
|
||||
* (@inheritdoc)
|
||||
*/
|
||||
public function releaseLock($key)
|
||||
public function releaseLock($key, $override = false)
|
||||
{
|
||||
DBA::delete('locks', ['name' => $key, 'pid' => $this->pid]);
|
||||
if ($override) {
|
||||
$where = ['name' => $key];
|
||||
} else {
|
||||
$where = ['name' => $key, 'pid' => $this->pid];
|
||||
}
|
||||
|
||||
DBA::delete('locks', $where);
|
||||
|
||||
$this->markRelease($key);
|
||||
|
||||
|
|
|
@ -34,10 +34,11 @@ interface ILockDriver
|
|||
* Releases a lock if it was set by us
|
||||
*
|
||||
* @param string $key The Name of the lock
|
||||
* @param bool $override Overrides the lock to get released
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function releaseLock($key);
|
||||
public function releaseLock($key, $override = false);
|
||||
|
||||
/**
|
||||
* Releases all lock that were set by us
|
||||
|
|
|
@ -50,7 +50,7 @@ class SemaphoreLockDriver extends AbstractLockDriver
|
|||
/**
|
||||
* (@inheritdoc)
|
||||
*/
|
||||
public function releaseLock($key)
|
||||
public function releaseLock($key, $override = false)
|
||||
{
|
||||
if (empty(self::$semaphore[$key])) {
|
||||
return false;
|
||||
|
|
|
@ -52,19 +52,20 @@ 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) {
|
||||
Lock::release('dbupdate');
|
||||
if ($override) {
|
||||
Lock::release('dbupdate', true);
|
||||
}
|
||||
|
||||
$build = Config::get('system', 'build');
|
||||
|
@ -74,12 +75,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);
|
||||
|
@ -130,8 +131,6 @@ class Update
|
|||
Lock::release('dbupdate');
|
||||
}
|
||||
}
|
||||
} elseif ($force) {
|
||||
DBStructure::update($basePath, $verbose, true);
|
||||
}
|
||||
|
||||
return '';
|
||||
|
|
Loading…
Reference in a new issue