Fixings
- fixed test for semaphore - fixed some issues - changed namespace in Tests back to "src/" - changed namings
This commit is contained in:
		
					parent
					
						
							
								906bb25972
							
						
					
				
			
			
				commit
				
					
						e41e7d2edd
					
				
			
		
					 15 changed files with 67 additions and 65 deletions
				
			
		|  | @ -16,7 +16,7 @@ class MemcachedCacheDriver extends BaseObject implements IMemoryCacheDriver | |||
| 	use TraitCompareDelete; | ||||
| 
 | ||||
| 	/** | ||||
| 	 * @var Memcached | ||||
| 	 * @var \Memcached | ||||
| 	 */ | ||||
| 	private $memcached; | ||||
| 
 | ||||
|  |  | |||
|  | @ -14,7 +14,7 @@ use Friendica\Core\Cache; | |||
| class RedisCacheDriver extends BaseObject implements IMemoryCacheDriver | ||||
| { | ||||
| 	/** | ||||
| 	 * @var Redis | ||||
| 	 * @var \Redis | ||||
| 	 */ | ||||
| 	private $redis; | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,7 +1,5 @@ | |||
| <?php | ||||
| /** | ||||
|  * @file src/Util/Lock.php | ||||
|  */ | ||||
| 
 | ||||
| namespace Friendica\Core; | ||||
| 
 | ||||
| /** | ||||
|  | @ -115,20 +113,20 @@ class Lock | |||
| 	 * | ||||
| 	 * @return boolean Was the lock successful? | ||||
| 	 */ | ||||
| 	public static function acquireLock($key, $timeout = 120) | ||||
| 	public static function acquire($key, $timeout = 120) | ||||
| 	{ | ||||
| 		return self::getDriver()->acquire($key, $timeout); | ||||
| 		return self::getDriver()->acquireLock($key, $timeout); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * @brief Releases a lock if it was set by us | ||||
| 	 * | ||||
| 	 * @param string $key Name of the lock | ||||
| 	 * @return mixed | ||||
| 	 * @return void | ||||
| 	 */ | ||||
| 	public static function releaseLock($key) | ||||
| 	public static function release($key) | ||||
| 	{ | ||||
| 		return self::getDriver()->release($key); | ||||
| 		self::getDriver()->releaseLock($key); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
|  |  | |||
|  | @ -52,7 +52,7 @@ abstract class AbstractLockDriver extends BaseObject implements ILockDriver | |||
| 	 */ | ||||
| 	public function releaseAll() { | ||||
| 		foreach ($this->acquiredLocks as $acquiredLock => $hasLock) { | ||||
| 			$this->release($acquiredLock); | ||||
| 			$this->releaseLock($acquiredLock); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  |  | |||
|  | @ -24,7 +24,7 @@ class CacheLockDriver extends AbstractLockDriver | |||
| 	/** | ||||
| 	 * (@inheritdoc) | ||||
| 	 */ | ||||
| 	public function acquire($key, $timeout = 120) | ||||
| 	public function acquireLock($key, $timeout = 120) | ||||
| 	{ | ||||
| 		$got_lock = false; | ||||
| 		$start = time(); | ||||
|  | @ -60,7 +60,7 @@ class CacheLockDriver extends AbstractLockDriver | |||
| 	/** | ||||
| 	 * (@inheritdoc) | ||||
| 	 */ | ||||
| 	public function release($key) | ||||
| 	public function releaseLock($key) | ||||
| 	{ | ||||
| 		$cachekey = self::getCacheKey($key); | ||||
| 
 | ||||
|  |  | |||
|  | @ -14,7 +14,7 @@ class DatabaseLockDriver extends AbstractLockDriver | |||
| 	/** | ||||
| 	 * (@inheritdoc) | ||||
| 	 */ | ||||
| 	public function acquire($key, $timeout = 120) | ||||
| 	public function acquireLock($key, $timeout = 120) | ||||
| 	{ | ||||
| 		$got_lock = false; | ||||
| 		$start = time(); | ||||
|  | @ -55,7 +55,7 @@ class DatabaseLockDriver extends AbstractLockDriver | |||
| 	/** | ||||
| 	 * (@inheritdoc) | ||||
| 	 */ | ||||
| 	public function release($key) | ||||
| 	public function releaseLock($key) | ||||
| 	{ | ||||
| 		dba::delete('locks', ['name' => $key, 'pid' => getmypid()]); | ||||
| 
 | ||||
|  |  | |||
|  | @ -26,7 +26,7 @@ interface ILockDriver | |||
| 	 * | ||||
| 	 * @return boolean Was the lock successful? | ||||
| 	 */ | ||||
| 	public function acquire($key, $timeout = 120); | ||||
| 	public function acquireLock($key, $timeout = 120); | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Releases a lock if it was set by us | ||||
|  | @ -35,7 +35,7 @@ interface ILockDriver | |||
| 	 * | ||||
| 	 * @return void | ||||
| 	 */ | ||||
| 	public function release($key); | ||||
| 	public function releaseLock($key); | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Releases all lock that were set by us | ||||
|  |  | |||
|  | @ -20,7 +20,7 @@ class SemaphoreLockDriver extends AbstractLockDriver | |||
| 	{ | ||||
| 		$temp = get_temppath(); | ||||
| 
 | ||||
| 		$file = $temp.'/'.$key.'.sem'; | ||||
| 		$file = $temp . '/' . $key . '.sem'; | ||||
| 
 | ||||
| 		if (!file_exists($file)) { | ||||
| 			file_put_contents($file, $key); | ||||
|  | @ -33,7 +33,7 @@ class SemaphoreLockDriver extends AbstractLockDriver | |||
| 	 * | ||||
| 	 * (@inheritdoc) | ||||
| 	 */ | ||||
| 	public function acquire($key, $timeout = 120) | ||||
| 	public function acquireLock($key, $timeout = 120) | ||||
| 	{ | ||||
| 		self::$semaphore[$key] = sem_get(self::semaphoreKey($key)); | ||||
| 		if (self::$semaphore[$key]) { | ||||
|  | @ -49,7 +49,7 @@ class SemaphoreLockDriver extends AbstractLockDriver | |||
| 	/** | ||||
| 	 * (@inheritdoc) | ||||
| 	 */ | ||||
| 	public function release($key) | ||||
| 	public function releaseLock($key) | ||||
| 	{ | ||||
| 		if (empty(self::$semaphore[$key])) { | ||||
| 			return false; | ||||
|  | @ -66,6 +66,6 @@ class SemaphoreLockDriver extends AbstractLockDriver | |||
| 	 */ | ||||
| 	public function isLocked($key) | ||||
| 	{ | ||||
| 		return @sem_get(self::$semaphore[$key]) !== false; | ||||
| 		return isset(self::$semaphore[$key]); | ||||
| 	} | ||||
| } | ||||
|  |  | |||
|  | @ -4,15 +4,11 @@ | |||
|  */ | ||||
| namespace Friendica\Core; | ||||
| 
 | ||||
| use Friendica\Core\Addon; | ||||
| use Friendica\Core\Config; | ||||
| use Friendica\Core\System; | ||||
| use Friendica\Core\Lock; | ||||
| use dba; | ||||
| use Friendica\Database\DBM; | ||||
| use Friendica\Model\Process; | ||||
| use Friendica\Util\DateTimeFormat; | ||||
| use Friendica\Util\Network; | ||||
| use dba; | ||||
| 
 | ||||
| require_once 'include/dba.php'; | ||||
| 
 | ||||
|  | @ -108,16 +104,16 @@ class Worker | |||
| 				} | ||||
| 
 | ||||
| 				// If possible we will fetch new jobs for this worker
 | ||||
| 				if (!$refetched && Lock::acquireLock('worker_process', 0)) { | ||||
| 				if (!$refetched && Lock::acquire('worker_process', 0)) { | ||||
| 					$stamp = (float)microtime(true); | ||||
| 					$refetched = self::findWorkerProcesses($passing_slow); | ||||
| 					self::$db_duration += (microtime(true) - $stamp); | ||||
| 					Lock::releaseLock('worker_process'); | ||||
| 					Lock::release('worker_process'); | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| 			// To avoid the quitting of multiple workers only one worker at a time will execute the check
 | ||||
| 			if (Lock::acquireLock('worker', 0)) { | ||||
| 			if (Lock::acquire('worker', 0)) { | ||||
| 				$stamp = (float)microtime(true); | ||||
| 				// Count active workers and compare them with a maximum value that depends on the load
 | ||||
| 				if (self::tooMuchWorkers()) { | ||||
|  | @ -130,7 +126,7 @@ class Worker | |||
| 					logger('Memory limit reached, quitting.', LOGGER_DEBUG); | ||||
| 					return; | ||||
| 				} | ||||
| 				Lock::releaseLock('worker'); | ||||
| 				Lock::release('worker'); | ||||
| 				self::$db_duration += (microtime(true) - $stamp); | ||||
| 			} | ||||
| 
 | ||||
|  | @ -883,7 +879,7 @@ class Worker | |||
| 		dba::close($r); | ||||
| 
 | ||||
| 		$stamp = (float)microtime(true); | ||||
| 		if (!Lock::acquireLock('worker_process')) { | ||||
| 		if (!Lock::acquire('worker_process')) { | ||||
| 			return false; | ||||
| 		} | ||||
| 		self::$lock_duration = (microtime(true) - $stamp); | ||||
|  | @ -892,7 +888,7 @@ class Worker | |||
| 		$found = self::findWorkerProcesses($passing_slow); | ||||
| 		self::$db_duration += (microtime(true) - $stamp); | ||||
| 
 | ||||
| 		Lock::releaseLock('worker_process'); | ||||
| 		Lock::release('worker_process'); | ||||
| 
 | ||||
| 		if ($found) { | ||||
| 			$r = dba::select('workerqueue', [], ['pid' => getmypid(), 'done' => false]); | ||||
|  | @ -1097,13 +1093,13 @@ class Worker | |||
| 		} | ||||
| 
 | ||||
| 		// If there is a lock then we don't have to check for too much worker
 | ||||
| 		if (!Lock::acquireLock('worker', 0)) { | ||||
| 		if (!Lock::acquire('worker', 0)) { | ||||
| 			return true; | ||||
| 		} | ||||
| 
 | ||||
| 		// If there are already enough workers running, don't fork another one
 | ||||
| 		$quit = self::tooMuchWorkers(); | ||||
| 		Lock::releaseLock('worker'); | ||||
| 		Lock::release('worker'); | ||||
| 
 | ||||
| 		if ($quit) { | ||||
| 			return true; | ||||
|  |  | |||
|  | @ -6,26 +6,22 @@ | |||
| 
 | ||||
| namespace Friendica\Model; | ||||
| 
 | ||||
| use dba; | ||||
| use Friendica\BaseObject; | ||||
| use Friendica\Content\Text; | ||||
| use Friendica\Core\Addon; | ||||
| use Friendica\Core\Config; | ||||
| use Friendica\Core\L10n; | ||||
| use Friendica\Core\Lock; | ||||
| use Friendica\Core\PConfig; | ||||
| use Friendica\Core\System; | ||||
| use Friendica\Core\Worker; | ||||
| use Friendica\Database\DBM; | ||||
| use Friendica\Model\Contact; | ||||
| use Friendica\Model\Conversation; | ||||
| use Friendica\Model\Group; | ||||
| use Friendica\Model\Term; | ||||
| use Friendica\Object\Image; | ||||
| use Friendica\Protocol\Diaspora; | ||||
| use Friendica\Protocol\OStatus; | ||||
| use Friendica\Util\DateTimeFormat; | ||||
| use Friendica\Util\XML; | ||||
| use Friendica\Util\Lock; | ||||
| use dba; | ||||
| use Text_LanguageDetect; | ||||
| 
 | ||||
| require_once 'boot.php'; | ||||
|  | @ -1595,7 +1591,7 @@ class Item extends BaseObject | |||
| 		} | ||||
| 
 | ||||
| 		// To avoid timing problems, we are using locks.
 | ||||
| 		$locked = Lock::set('item_insert_content'); | ||||
| 		$locked = Lock::acquire('item_insert_content'); | ||||
| 		if (!$locked) { | ||||
| 			logger("Couldn't acquire lock for URI " . $item['uri'] . " - proceeding anyway."); | ||||
| 		} | ||||
|  | @ -1615,7 +1611,7 @@ class Item extends BaseObject | |||
| 			logger('Could not insert content for URI ' . $item['uri'] . ' - trying asynchronously'); | ||||
| 		} | ||||
| 		if ($locked) { | ||||
| 			Lock::remove('item_insert_content'); | ||||
| 			Lock::release('item_insert_content'); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
|  | @ -4,6 +4,9 @@ | |||
|  */ | ||||
| namespace Friendica\Protocol; | ||||
| 
 | ||||
| use dba; | ||||
| use DOMDocument; | ||||
| use DOMXPath; | ||||
| use Friendica\Content\Text\BBCode; | ||||
| use Friendica\Content\Text\HTML; | ||||
| use Friendica\Core\Cache; | ||||
|  | @ -22,9 +25,6 @@ use Friendica\Object\Image; | |||
| use Friendica\Util\DateTimeFormat; | ||||
| use Friendica\Util\Network; | ||||
| use Friendica\Util\XML; | ||||
| use dba; | ||||
| use DOMDocument; | ||||
| use DOMXPath; | ||||
| 
 | ||||
| require_once 'include/dba.php'; | ||||
| require_once 'include/items.php'; | ||||
|  | @ -513,9 +513,9 @@ class OStatus | |||
| 							logger("Item with uri ".$item["uri"]." is from a blocked contact.", LOGGER_DEBUG); | ||||
| 						} else { | ||||
| 							// We are having duplicated entries. Hopefully this solves it.
 | ||||
| 							if (Lock::acquireLock('ostatus_process_item_insert')) { | ||||
| 							if (Lock::acquire('ostatus_process_item_insert')) { | ||||
| 								$ret = Item::insert($item); | ||||
| 								Lock::releaseLock('ostatus_process_item_insert'); | ||||
| 								Lock::release('ostatus_process_item_insert'); | ||||
| 								logger("Item with uri ".$item["uri"]." for user ".$importer["uid"].' stored. Return value: '.$ret); | ||||
| 							} else { | ||||
| 								$ret = Item::insert($item); | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| <?php | ||||
| 
 | ||||
| namespace Friendica\Test\Core\Lock; | ||||
| namespace Friendica\Test\src\Core\Lock; | ||||
| 
 | ||||
| 
 | ||||
| use Friendica\Core\Cache\ArrayCache; | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| <?php | ||||
| 
 | ||||
| namespace Friendica\Test\Core\Lock; | ||||
| namespace Friendica\Test\src\Core\Lock; | ||||
| 
 | ||||
| use dba; | ||||
| use Friendica\Core\Lock\DatabaseLockDriver; | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| <?php | ||||
| 
 | ||||
| namespace Friendica\Test\Core\Lock; | ||||
| namespace Friendica\Test\src\Core\Lock; | ||||
| 
 | ||||
| use Friendica\App; | ||||
| use Friendica\Core\Config; | ||||
|  | @ -34,43 +34,43 @@ abstract class LockTest extends TestCase | |||
| 	} | ||||
| 
 | ||||
| 	public function testLock() { | ||||
| 		$this->instance->acquire('foo', 1); | ||||
| 		$this->instance->acquireLock('foo', 1); | ||||
| 		$this->assertTrue($this->instance->isLocked('foo')); | ||||
| 		$this->assertFalse($this->instance->isLocked('bar')); | ||||
| 	} | ||||
| 
 | ||||
| 	public function testDoubleLock() { | ||||
| 		$this->instance->acquire('foo', 1); | ||||
| 		$this->instance->acquireLock('foo', 1); | ||||
| 		$this->assertTrue($this->instance->isLocked('foo')); | ||||
| 		// We already locked it
 | ||||
| 		$this->assertTrue($this->instance->acquire('foo', 1)); | ||||
| 		$this->assertTrue($this->instance->acquireLock('foo', 1)); | ||||
| 	} | ||||
| 
 | ||||
| 	public function testReleaseLock() { | ||||
| 		$this->instance->acquire('foo', 1); | ||||
| 		$this->instance->acquireLock('foo', 1); | ||||
| 		$this->assertTrue($this->instance->isLocked('foo')); | ||||
| 		$this->instance->release('foo'); | ||||
| 		$this->instance->releaseLock('foo'); | ||||
| 		$this->assertFalse($this->instance->isLocked('foo')); | ||||
| 	} | ||||
| 
 | ||||
| 	public function testReleaseAll() { | ||||
| 		$this->instance->acquire('foo', 1); | ||||
| 		$this->instance->acquire('bar', 1); | ||||
| 		$this->instance->acquire('#/$%§', 1); | ||||
| 		$this->instance->acquireLock('foo', 1); | ||||
| 		$this->instance->acquireLock('bar', 1); | ||||
| 		$this->instance->acquireLock('nice', 1); | ||||
| 
 | ||||
| 		$this->instance->releaseAll(); | ||||
| 
 | ||||
| 		$this->assertFalse($this->instance->isLocked('foo')); | ||||
| 		$this->assertFalse($this->instance->isLocked('bar')); | ||||
| 		$this->assertFalse($this->instance->isLocked('#/$%§')); | ||||
| 		$this->assertFalse($this->instance->isLocked('nice')); | ||||
| 	} | ||||
| 
 | ||||
| 	public function testReleaseAfterUnlock() { | ||||
| 		$this->instance->acquire('foo', 1); | ||||
| 		$this->instance->acquire('bar', 1); | ||||
| 		$this->instance->acquire('#/$%§', 1); | ||||
| 		$this->instance->acquireLock('foo', 1); | ||||
| 		$this->instance->acquireLock('bar', 1); | ||||
| 		$this->instance->acquireLock('nice', 1); | ||||
| 
 | ||||
| 		$this->instance->release('foo'); | ||||
| 		$this->instance->releaseLock('foo'); | ||||
| 
 | ||||
| 		$this->instance->releaseAll(); | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,14 +1,26 @@ | |||
| <?php | ||||
| 
 | ||||
| namespace Friendica\Test\Core\Lock; | ||||
| namespace Friendica\Test\src\Core\Lock; | ||||
| 
 | ||||
| 
 | ||||
| use Friendica\Core\Lock\SemaphoreLockDriver; | ||||
| 
 | ||||
| class SemaphoreLockDriverTest extends LockTest | ||||
| { | ||||
| 	/** | ||||
| 	 * @var \Friendica\Core\Lock\SemaphoreLockDriver | ||||
| 	 */ | ||||
| 	private $semaphoreLockDriver; | ||||
| 
 | ||||
| 	protected function getInstance() | ||||
| 	{ | ||||
| 		return new SemaphoreLockDriver(); | ||||
| 		$this->semaphoreLockDriver = new SemaphoreLockDriver(); | ||||
| 		return $this->semaphoreLockDriver; | ||||
| 	} | ||||
| 
 | ||||
| 	public function tearDown() | ||||
| 	{ | ||||
| 		$this->semaphoreLockDriver->releaseAll(); | ||||
| 		parent::tearDown(); | ||||
| 	} | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue