Replace Lock::release() with DI::lock()->release() and remove Core\Lock

This commit is contained in:
Philipp Holzer 2020-01-07 00:24:10 +01:00
parent 634e657d23
commit 31457b8566
No known key found for this signature in database
GPG Key ID: D8365C3D36B77D90
14 changed files with 33 additions and 74 deletions

View File

@ -133,7 +133,7 @@ HELP;
if (count($this->args) >= 2) { if (count($this->args) >= 2) {
$lock = $this->getArgument(1); $lock = $this->getArgument(1);
if ($this->lock->releaseLock($lock, true)) { if ($this->lock->release($lock, true)) {
$this->out(sprintf('Lock \'%s\' released.', $lock)); $this->out(sprintf('Lock \'%s\' released.', $lock));
} else { } else {
$this->out(sprintf('Couldn\'t release Lock \'%s\'', $lock)); $this->out(sprintf('Couldn\'t release Lock \'%s\'', $lock));

View File

@ -1,41 +0,0 @@
<?php
/**
* @file src/Core/Lock.php
* @brief Functions for preventing parallel execution of functions
*/
namespace Friendica\Core;
use Friendica\Core\Cache\Cache;
use Friendica\DI;
/**
* This class contain Functions for preventing parallel execution of functions
*/
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 bool
* @throws \Exception
*/
public static function release($key, $override = false)
{
return DI::lock()->releaseLock($key, $override);
}
/**
* @brief Releases all lock that were set by us
* @return void
* @throws \Exception
*/
public static function releaseAll()
{
DI::lock()->releaseAll();
}
}

View File

@ -66,7 +66,7 @@ class CacheLock extends Lock
/** /**
* (@inheritdoc) * (@inheritdoc)
*/ */
public function releaseLock($key, $override = false) public function release($key, $override = false)
{ {
$cachekey = self::getLockKey($key); $cachekey = self::getLockKey($key);
@ -122,7 +122,7 @@ class CacheLock extends Lock
$locks = $this->getLocks(); $locks = $this->getLocks();
foreach ($locks as $lock) { foreach ($locks as $lock) {
if (!$this->releaseLock($lock, $override)) { if (!$this->release($lock, $override)) {
$success = false; $success = false;
} }
} }

View File

@ -74,7 +74,7 @@ class DatabaseLock extends Lock
/** /**
* (@inheritdoc) * (@inheritdoc)
*/ */
public function releaseLock($key, $override = false) public function release($key, $override = false)
{ {
if ($override) { if ($override) {
$where = ['name' => $key]; $where = ['name' => $key];

View File

@ -40,7 +40,7 @@ interface ILock
* *
* @return boolean Was the unlock successful? * @return boolean Was the unlock successful?
*/ */
public function releaseLock($key, $override = false); public function release($key, $override = false);
/** /**
* Releases all lock that were set by us * Releases all lock that were set by us

View File

@ -61,7 +61,7 @@ abstract class Lock implements ILock
$return = true; $return = true;
foreach ($this->acquiredLocks as $acquiredLock => $hasLock) { foreach ($this->acquiredLocks as $acquiredLock => $hasLock) {
if (!$this->releaseLock($acquiredLock, $override)) { if (!$this->release($acquiredLock, $override)) {
$return = false; $return = false;
} }
} }

View File

@ -55,7 +55,7 @@ class SemaphoreLock extends Lock
* @param bool $override not necessary parameter for semaphore locks since the lock lives as long as the execution * @param bool $override not necessary parameter for semaphore locks since the lock lives as long as the execution
* of the using function * of the using function
*/ */
public function releaseLock($key, $override = false) public function release($key, $override = false)
{ {
$success = false; $success = false;

View File

@ -74,7 +74,7 @@ class Update
// 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 ($override) { if ($override) {
Lock::release('dbupdate', true); DI::lock()->release('dbupdate', true);
} }
$build = Config::get('system', 'build', null, true); $build = Config::get('system', 'build', null, true);
@ -102,7 +102,7 @@ class Update
$retryBuild = Config::get('system', 'build', null, true); $retryBuild = Config::get('system', 'build', null, true);
if ($retryBuild !== $build) { if ($retryBuild !== $build) {
Logger::info('Update already done.', ['from' => $stored, 'to' => $current]); Logger::info('Update already done.', ['from' => $stored, 'to' => $current]);
Lock::release('dbupdate'); DI::lock()->release('dbupdate');
return ''; return '';
} }
@ -111,7 +111,7 @@ class Update
$r = self::runUpdateFunction($x, 'pre_update'); $r = self::runUpdateFunction($x, 'pre_update');
if (!$r) { if (!$r) {
Config::set('system', 'update', Update::FAILED); Config::set('system', 'update', Update::FAILED);
Lock::release('dbupdate'); DI::lock()->release('dbupdate');
return $r; return $r;
} }
} }
@ -127,7 +127,7 @@ class Update
} }
Logger::error('Update ERROR.', ['from' => $stored, 'to' => $current, 'retval' => $retval]); Logger::error('Update ERROR.', ['from' => $stored, 'to' => $current, 'retval' => $retval]);
Config::set('system', 'update', Update::FAILED); Config::set('system', 'update', Update::FAILED);
Lock::release('dbupdate'); DI::lock()->release('dbupdate');
return $retval; return $retval;
} else { } else {
Config::set('database', 'last_successful_update', $current); Config::set('database', 'last_successful_update', $current);
@ -140,7 +140,7 @@ class Update
$r = self::runUpdateFunction($x, 'update'); $r = self::runUpdateFunction($x, 'update');
if (!$r) { if (!$r) {
Config::set('system', 'update', Update::FAILED); Config::set('system', 'update', Update::FAILED);
Lock::release('dbupdate'); DI::lock()->release('dbupdate');
return $r; return $r;
} }
} }
@ -151,7 +151,7 @@ class Update
} }
Config::set('system', 'update', Update::SUCCESS); Config::set('system', 'update', Update::SUCCESS);
Lock::release('dbupdate'); DI::lock()->release('dbupdate');
} }
} }
} }
@ -194,7 +194,7 @@ class Update
L10n::t('Update %s failed. See error logs.', $x) L10n::t('Update %s failed. See error logs.', $x)
); );
Logger::error('Update function ERROR.', ['function' => $funcname, 'retval' => $retval]); Logger::error('Update function ERROR.', ['function' => $funcname, 'retval' => $retval]);
Lock::release('dbupdate_function'); DI::lock()->release('dbupdate_function');
return false; return false;
} else { } else {
Config::set('database', 'last_successful_update_function', $funcname); Config::set('database', 'last_successful_update_function', $funcname);
@ -204,7 +204,7 @@ class Update
Config::set('system', 'build', $x); Config::set('system', 'build', $x);
} }
Lock::release('dbupdate_function'); DI::lock()->release('dbupdate_function');
Logger::info('Update function finished.', ['function' => $funcname]); Logger::info('Update function finished.', ['function' => $funcname]);
return true; return true;
} }

View File

@ -117,7 +117,7 @@ class Worker
// Trying to fetch new processes - but only once when successful // Trying to fetch new processes - but only once when successful
if (!$refetched && DI::lock()->acquire('worker_process', 0)) { if (!$refetched && DI::lock()->acquire('worker_process', 0)) {
self::findWorkerProcesses(); self::findWorkerProcesses();
Lock::release('worker_process'); DI::lock()->release('worker_process');
self::$state = self::STATE_REFETCH; self::$state = self::STATE_REFETCH;
$refetched = true; $refetched = true;
} else { } else {
@ -133,17 +133,17 @@ class Worker
// Count active workers and compare them with a maximum value that depends on the load // Count active workers and compare them with a maximum value that depends on the load
if (self::tooMuchWorkers()) { if (self::tooMuchWorkers()) {
Logger::log('Active worker limit reached, quitting.', Logger::DEBUG); Logger::log('Active worker limit reached, quitting.', Logger::DEBUG);
Lock::release('worker'); DI::lock()->release('worker');
return; return;
} }
// Check free memory // Check free memory
if (DI::process()->isMinMemoryReached()) { if (DI::process()->isMinMemoryReached()) {
Logger::log('Memory limit reached, quitting.', Logger::DEBUG); Logger::log('Memory limit reached, quitting.', Logger::DEBUG);
Lock::release('worker'); DI::lock()->release('worker');
return; return;
} }
Lock::release('worker'); DI::lock()->release('worker');
} }
} }
@ -940,7 +940,7 @@ class Worker
$found = self::findWorkerProcesses(); $found = self::findWorkerProcesses();
Lock::release('worker_process'); DI::lock()->release('worker_process');
if ($found) { if ($found) {
$stamp = (float)microtime(true); $stamp = (float)microtime(true);
@ -1178,7 +1178,7 @@ class Worker
// If there are already enough workers running, don't fork another one // If there are already enough workers running, don't fork another one
$quit = self::tooMuchWorkers(); $quit = self::tooMuchWorkers();
Lock::release('worker'); DI::lock()->release('worker');
if ($quit) { if ($quit) {
return $added; return $added;

View File

@ -2076,11 +2076,11 @@ class Item
} else { } else {
// This shouldn't happen. // This shouldn't happen.
Logger::log('Could not insert activity for URI ' . $item['uri'] . ' - should not happen'); Logger::log('Could not insert activity for URI ' . $item['uri'] . ' - should not happen');
Lock::release('item_insert_activity'); DI::lock()->release('item_insert_activity');
return false; return false;
} }
if ($locked) { if ($locked) {
Lock::release('item_insert_activity'); DI::lock()->release('item_insert_activity');
} }
return true; return true;
} }
@ -2121,7 +2121,7 @@ class Item
Logger::log('Could not insert content for URI ' . $item['uri'] . ' - should not happen'); Logger::log('Could not insert content for URI ' . $item['uri'] . ' - should not happen');
} }
if ($locked) { if ($locked) {
Lock::release('item_insert_content'); DI::lock()->release('item_insert_content');
} }
} }

View File

@ -541,7 +541,7 @@ class OStatus
// We are having duplicated entries. Hopefully this solves it. // We are having duplicated entries. Hopefully this solves it.
if (DI::lock()->acquire('ostatus_process_item_insert')) { if (DI::lock()->acquire('ostatus_process_item_insert')) {
$ret = Item::insert($item); $ret = Item::insert($item);
Lock::release('ostatus_process_item_insert'); DI::lock()->release('ostatus_process_item_insert');
Logger::log("Item with uri ".$item["uri"]." for user ".$importer["uid"].' stored. Return value: '.$ret); Logger::log("Item with uri ".$item["uri"]." for user ".$importer["uid"].' stored. Return value: '.$ret);
} else { } else {
$ret = Item::insert($item); $ret = Item::insert($item);

View File

@ -103,7 +103,7 @@ trait DbaLockMockTrait
* @param null|int $pid The PID which was set * @param null|int $pid The PID which was set
* @param null|int $times How often the method will get used * @param null|int $times How often the method will get used
* *
*@see DatabaseLock::releaseLock() *@see DatabaseLock::release()
* *
*/ */
public function mockReleaseLock($key, $pid = null, $times = null) public function mockReleaseLock($key, $pid = null, $times = null)

View File

@ -63,7 +63,7 @@ abstract class LockTest extends MockedTest
$this->assertFalse($this->instance->isLocked('foo')); $this->assertFalse($this->instance->isLocked('foo'));
$this->assertTrue($this->instance->acquire('foo', 1)); $this->assertTrue($this->instance->acquire('foo', 1));
$this->assertTrue($this->instance->isLocked('foo')); $this->assertTrue($this->instance->isLocked('foo'));
$this->instance->releaseLock('foo'); $this->instance->release('foo');
$this->assertFalse($this->instance->isLocked('foo')); $this->assertFalse($this->instance->isLocked('foo'));
} }
@ -99,7 +99,7 @@ abstract class LockTest extends MockedTest
$this->assertTrue($this->instance->acquire('bar', 1)); $this->assertTrue($this->instance->acquire('bar', 1));
$this->assertTrue($this->instance->acquire('nice', 1)); $this->assertTrue($this->instance->acquire('nice', 1));
$this->assertTrue($this->instance->releaseLock('foo')); $this->assertTrue($this->instance->release('foo'));
$this->assertFalse($this->instance->isLocked('foo')); $this->assertFalse($this->instance->isLocked('foo'));
$this->assertTrue($this->instance->isLocked('bar')); $this->assertTrue($this->instance->isLocked('bar'));
@ -119,7 +119,7 @@ abstract class LockTest extends MockedTest
$this->assertFalse($this->instance->isLocked('test')); $this->assertFalse($this->instance->isLocked('test'));
$this->assertTrue($this->instance->acquire('test', 1, 10)); $this->assertTrue($this->instance->acquire('test', 1, 10));
$this->assertTrue($this->instance->isLocked('test')); $this->assertTrue($this->instance->isLocked('test'));
$this->assertTrue($this->instance->releaseLock('test')); $this->assertTrue($this->instance->release('test'));
$this->assertFalse($this->instance->isLocked('test')); $this->assertFalse($this->instance->isLocked('test'));
} }
@ -197,6 +197,6 @@ abstract class LockTest extends MockedTest
public function testReleaseLockWithoutLock() public function testReleaseLockWithoutLock()
{ {
$this->assertFalse($this->instance->isLocked('wrongLock')); $this->assertFalse($this->instance->isLocked('wrongLock'));
$this->assertFalse($this->instance->releaseLock('wrongLock')); $this->assertFalse($this->instance->release('wrongLock'));
} }
} }

View File

@ -55,7 +55,7 @@ class SemaphoreLockTest extends LockTest
touch($file); touch($file);
$this->assertTrue(file_exists($file)); $this->assertTrue(file_exists($file));
$this->assertFalse($this->instance->releaseLock('test', false)); $this->assertFalse($this->instance->release('test', false));
$this->assertTrue(file_exists($file)); $this->assertTrue(file_exists($file));
} }
@ -72,7 +72,7 @@ class SemaphoreLockTest extends LockTest
touch($file); touch($file);
$this->assertTrue(file_exists($file)); $this->assertTrue(file_exists($file));
$this->assertFalse($this->instance->releaseLock('test', true)); $this->assertFalse($this->instance->release('test', true));
$this->assertTrue(file_exists($file)); $this->assertTrue(file_exists($file));
} }
@ -87,6 +87,6 @@ class SemaphoreLockTest extends LockTest
$this->assertTrue(file_exists($file)); $this->assertTrue(file_exists($file));
$this->assertTrue($this->instance->acquire('test')); $this->assertTrue($this->instance->acquire('test'));
$this->assertTrue($this->instance->isLocked('test')); $this->assertTrue($this->instance->isLocked('test'));
$this->assertTrue($this->instance->releaseLock('test')); $this->assertTrue($this->instance->release('test'));
} }
} }