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
|
Options
|
||||||
-h|--help|-? Show help information
|
-h|--help|-? Show help information
|
||||||
-v Show more debug 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;
|
HELP;
|
||||||
return $help;
|
return $help;
|
||||||
}
|
}
|
||||||
|
@ -69,7 +70,8 @@ HELP;
|
||||||
break;
|
break;
|
||||||
case "update":
|
case "update":
|
||||||
$force = $this->getOption(['f', 'force'], false);
|
$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;
|
break;
|
||||||
case "dumpsql":
|
case "dumpsql":
|
||||||
ob_start();
|
ob_start();
|
||||||
|
@ -89,5 +91,4 @@ HELP;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,7 +56,7 @@ HELP;
|
||||||
}
|
}
|
||||||
|
|
||||||
echo L10n::t('Check for pending update actions.') . "\n";
|
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('Done.') . "\n";
|
||||||
|
|
||||||
echo L10n::t('Execute pending post updates.') . "\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
|
* @brief Releases a lock if it was set by us
|
||||||
*
|
*
|
||||||
* @param string $key Name of the lock
|
* @param string $key Name of the lock
|
||||||
|
* @param bool $override Overrides the lock to get releases
|
||||||
* @return void
|
* @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)
|
* (@inheritdoc)
|
||||||
*/
|
*/
|
||||||
public function releaseLock($key)
|
public function releaseLock($key, $override = false)
|
||||||
{
|
{
|
||||||
$cachekey = self::getLockKey($key);
|
$cachekey = self::getLockKey($key);
|
||||||
|
|
||||||
|
if ($override) {
|
||||||
|
$this->cache->delete($cachekey);
|
||||||
|
} else {
|
||||||
$this->cache->compareDelete($cachekey, getmypid());
|
$this->cache->compareDelete($cachekey, getmypid());
|
||||||
|
}
|
||||||
$this->markRelease($key);
|
$this->markRelease($key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -68,9 +68,15 @@ class DatabaseLockDriver extends AbstractLockDriver
|
||||||
/**
|
/**
|
||||||
* (@inheritdoc)
|
* (@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);
|
$this->markRelease($key);
|
||||||
|
|
||||||
|
|
|
@ -34,10 +34,11 @@ interface ILockDriver
|
||||||
* Releases a lock if it was set by us
|
* Releases a lock if it was set by us
|
||||||
*
|
*
|
||||||
* @param string $key The Name of the lock
|
* @param string $key The Name of the lock
|
||||||
|
* @param bool $override Overrides the lock to get released
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function releaseLock($key);
|
public function releaseLock($key, $override = false);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Releases all lock that were set by us
|
* Releases all lock that were set by us
|
||||||
|
|
|
@ -50,7 +50,7 @@ class SemaphoreLockDriver extends AbstractLockDriver
|
||||||
/**
|
/**
|
||||||
* (@inheritdoc)
|
* (@inheritdoc)
|
||||||
*/
|
*/
|
||||||
public function releaseLock($key)
|
public function releaseLock($key, $override = false)
|
||||||
{
|
{
|
||||||
if (empty(self::$semaphore[$key])) {
|
if (empty(self::$semaphore[$key])) {
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -52,19 +52,20 @@ class Update
|
||||||
* Automatic database updates
|
* Automatic database updates
|
||||||
*
|
*
|
||||||
* @param string $basePath The base path of this application
|
* @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 $verbose Run the Update-Check verbose
|
||||||
* @param bool $sendMail Sends a Mail to the administrator in case of success/failure
|
* @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
|
* @return string Empty string if the update is successful, error messages otherwise
|
||||||
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
* @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
|
// In force mode, we release the dbupdate lock first
|
||||||
// Necessary in case of an stuck update
|
// Necessary in case of an stuck update
|
||||||
if ($force) {
|
if ($override) {
|
||||||
Lock::release('dbupdate');
|
Lock::release('dbupdate', true);
|
||||||
}
|
}
|
||||||
|
|
||||||
$build = Config::get('system', 'build');
|
$build = Config::get('system', 'build');
|
||||||
|
@ -74,12 +75,12 @@ class Update
|
||||||
Config::set('system', 'build', $build);
|
Config::set('system', 'build', $build);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($build != DB_UPDATE_VERSION) {
|
if ($build != DB_UPDATE_VERSION || $force) {
|
||||||
require_once 'update.php';
|
require_once 'update.php';
|
||||||
|
|
||||||
$stored = intval($build);
|
$stored = intval($build);
|
||||||
$current = intval(DB_UPDATE_VERSION);
|
$current = intval(DB_UPDATE_VERSION);
|
||||||
if ($stored < $current) {
|
if ($stored < $current || $force) {
|
||||||
Config::load('database');
|
Config::load('database');
|
||||||
|
|
||||||
Logger::log('Update from \'' . $stored . '\' to \'' . $current . '\' - starting', Logger::DEBUG);
|
Logger::log('Update from \'' . $stored . '\' to \'' . $current . '\' - starting', Logger::DEBUG);
|
||||||
|
@ -130,8 +131,6 @@ class Update
|
||||||
Lock::release('dbupdate');
|
Lock::release('dbupdate');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} elseif ($force) {
|
|
||||||
DBStructure::update($basePath, $verbose, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return '';
|
return '';
|
||||||
|
|
Loading…
Reference in a new issue