Merge branch 'develop' of https://github.com/friendica/friendica into develop

This commit is contained in:
Ralf Thees 2018-09-16 15:01:29 +02:00
commit 0bc2fe66f5
10 changed files with 58 additions and 85 deletions

View file

@ -53,6 +53,11 @@ class ArrayCache extends AbstractCacheDriver implements IMemoryCacheDriver
*/ */
public function clear($outdated = true) public function clear($outdated = true)
{ {
// Array doesn't support TTL so just don't delete something
if ($outdated) {
return true;
}
$this->cachedData = []; $this->cachedData = [];
return true; return true;
} }

View file

@ -117,12 +117,14 @@ 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('Active worker limit reached, quitting.', LOGGER_DEBUG); logger('Active worker limit reached, quitting.', LOGGER_DEBUG);
Lock::release('worker');
return; return;
} }
// Check free memory // Check free memory
if ($a->min_memory_reached()) { if ($a->min_memory_reached()) {
logger('Memory limit reached, quitting.', LOGGER_DEBUG); logger('Memory limit reached, quitting.', LOGGER_DEBUG);
Lock::release('worker');
return; return;
} }
Lock::release('worker'); Lock::release('worker');

View file

@ -1936,6 +1936,7 @@ class Item extends BaseObject
} else { } else {
// This shouldn't happen. // This shouldn't happen.
logger('Could not insert activity for URI ' . $item['uri'] . ' - should not happen'); logger('Could not insert activity for URI ' . $item['uri'] . ' - should not happen');
Lock::release('item_insert_activity');
return false; return false;
} }
if ($locked) { if ($locked) {

View file

@ -81,19 +81,33 @@ abstract class CacheTest extends DatabaseTest
'3_value1' => $this->instance->get('3_value1'), '3_value1' => $this->instance->get('3_value1'),
]); ]);
$this->assertTrue($this->instance->clear(false)); $this->assertTrue($this->instance->clear());
$this->assertEquals([ $this->assertEquals([
'1_value1' => null, '1_value1' => 'ipsum lorum1',
'1_value2' => null, '1_value2' => 'ipsum lorum2',
'2_value1' => null, '2_value1' => 'ipsum lorum3',
'3_value1' => null, '3_value1' => 'ipsum lorum4',
], [ ], [
'1_value1' => $this->instance->get('1_value1'), '1_value1' => $this->instance->get('1_value1'),
'1_value2' => $this->instance->get('1_value2'), '1_value2' => $this->instance->get('1_value2'),
'2_value1' => $this->instance->get('2_value1'), '2_value1' => $this->instance->get('2_value1'),
'3_value1' => $this->instance->get('3_value1'), '3_value1' => $this->instance->get('3_value1'),
]); ]);
$this->assertTrue($this->instance->clear(false));
$this->assertEquals([
'1_value1' => null,
'1_value2' => null,
'2_value3' => null,
'3_value4' => null,
], [
'1_value1' => $this->instance->get('1_value1'),
'1_value2' => $this->instance->get('1_value2'),
'2_value3' => $this->instance->get('2_value3'),
'3_value4' => $this->instance->get('3_value4'),
]);
} }
/** /**

View file

@ -8,21 +8,9 @@ use Friendica\Core\Lock\CacheLockDriver;
class ArrayCacheLockDriverTest extends LockTest class ArrayCacheLockDriverTest extends LockTest
{ {
/**
* @var \Friendica\Core\Cache\IMemoryCacheDriver
*/
private $cache;
protected function getInstance() protected function getInstance()
{ {
$this->cache = new ArrayCache(); return new CacheLockDriver(new ArrayCache());
return new CacheLockDriver($this->cache);
}
public function tearDown()
{
$this->cache->clear();
parent::tearDown();
} }
public function testLockTTL() public function testLockTTL()

View file

@ -19,6 +19,7 @@ abstract class LockTest extends DatabaseTest
{ {
parent::setUp(); parent::setUp();
$this->instance = $this->getInstance(); $this->instance = $this->getInstance();
$this->instance->releaseAll();
// Reusable App object // Reusable App object
$this->app = BaseObject::getApp(); $this->app = BaseObject::getApp();
@ -31,11 +32,18 @@ abstract class LockTest extends DatabaseTest
Config::set('system', 'theme', 'system_theme'); Config::set('system', 'theme', 'system_theme');
} }
protected function tearDown()
{
parent::tearDown();
$this->instance->releaseAll();
}
/** /**
* @small * @small
*/ */
public function testLock() { public function testLock() {
$this->instance->acquireLock('foo', 1); $this->assertFalse($this->instance->isLocked('foo'));
$this->assertTrue($this->instance->acquireLock('foo', 1));
$this->assertTrue($this->instance->isLocked('foo')); $this->assertTrue($this->instance->isLocked('foo'));
$this->assertFalse($this->instance->isLocked('bar')); $this->assertFalse($this->instance->isLocked('bar'));
} }
@ -44,7 +52,8 @@ abstract class LockTest extends DatabaseTest
* @small * @small
*/ */
public function testDoubleLock() { public function testDoubleLock() {
$this->instance->acquireLock('foo', 1); $this->assertFalse($this->instance->isLocked('foo'));
$this->assertTrue($this->instance->acquireLock('foo', 1));
$this->assertTrue($this->instance->isLocked('foo')); $this->assertTrue($this->instance->isLocked('foo'));
// We already locked it // We already locked it
$this->assertTrue($this->instance->acquireLock('foo', 1)); $this->assertTrue($this->instance->acquireLock('foo', 1));
@ -54,7 +63,8 @@ abstract class LockTest extends DatabaseTest
* @small * @small
*/ */
public function testReleaseLock() { public function testReleaseLock() {
$this->instance->acquireLock('foo', 1); $this->assertFalse($this->instance->isLocked('foo'));
$this->assertTrue($this->instance->acquireLock('foo', 1));
$this->assertTrue($this->instance->isLocked('foo')); $this->assertTrue($this->instance->isLocked('foo'));
$this->instance->releaseLock('foo'); $this->instance->releaseLock('foo');
$this->assertFalse($this->instance->isLocked('foo')); $this->assertFalse($this->instance->isLocked('foo'));
@ -64,9 +74,9 @@ abstract class LockTest extends DatabaseTest
* @small * @small
*/ */
public function testReleaseAll() { public function testReleaseAll() {
$this->instance->acquireLock('foo', 1); $this->assertTrue($this->instance->acquireLock('foo', 1));
$this->instance->acquireLock('bar', 1); $this->assertTrue($this->instance->acquireLock('bar', 1));
$this->instance->acquireLock('nice', 1); $this->assertTrue($this->instance->acquireLock('nice', 1));
$this->assertTrue($this->instance->isLocked('foo')); $this->assertTrue($this->instance->isLocked('foo'));
$this->assertTrue($this->instance->isLocked('bar')); $this->assertTrue($this->instance->isLocked('bar'));
@ -83,9 +93,12 @@ abstract class LockTest extends DatabaseTest
* @small * @small
*/ */
public function testReleaseAfterUnlock() { public function testReleaseAfterUnlock() {
$this->instance->acquireLock('foo', 1); $this->assertFalse($this->instance->isLocked('foo'));
$this->instance->acquireLock('bar', 1); $this->assertFalse($this->instance->isLocked('bar'));
$this->instance->acquireLock('nice', 1); $this->assertFalse($this->instance->isLocked('nice'));
$this->assertTrue($this->instance->acquireLock('foo', 1));
$this->assertTrue($this->instance->acquireLock('bar', 1));
$this->assertTrue($this->instance->acquireLock('nice', 1));
$this->instance->releaseLock('foo'); $this->instance->releaseLock('foo');
@ -103,10 +116,12 @@ abstract class LockTest extends DatabaseTest
* @medium * @medium
*/ */
function testLockTTL() { function testLockTTL() {
$this->assertFalse($this->instance->isLocked('foo'));
$this->assertFalse($this->instance->isLocked('bar'));
// TODO [nupplaphil] - Because of the Datetime-Utils for the database, we have to wait a FULL second between the checks to invalidate the db-locks/cache // TODO [nupplaphil] - Because of the Datetime-Utils for the database, we have to wait a FULL second between the checks to invalidate the db-locks/cache
$this->instance->acquireLock('foo', 1, 1); $this->assertTrue($this->instance->acquireLock('foo', 2, 1));
$this->instance->acquireLock('bar', 1, 3); $this->assertTrue($this->instance->acquireLock('bar', 2, 3));
$this->assertTrue($this->instance->isLocked('foo')); $this->assertTrue($this->instance->isLocked('foo'));
$this->assertTrue($this->instance->isLocked('bar')); $this->assertTrue($this->instance->isLocked('bar'));

View file

@ -3,7 +3,6 @@
namespace Friendica\Test\src\Core\Lock; namespace Friendica\Test\src\Core\Lock;
use Friendica\Core\Cache\CacheDriverFactory; use Friendica\Core\Cache\CacheDriverFactory;
use Friendica\Core\Lock\CacheLockDriver; use Friendica\Core\Lock\CacheLockDriver;
@ -12,20 +11,8 @@ use Friendica\Core\Lock\CacheLockDriver;
*/ */
class MemcacheCacheLockDriverTest extends LockTest class MemcacheCacheLockDriverTest extends LockTest
{ {
/**
* @var \Friendica\Core\Cache\IMemoryCacheDriver
*/
private $cache;
protected function getInstance() protected function getInstance()
{ {
$this->cache = CacheDriverFactory::create('memcache'); return new CacheLockDriver(CacheDriverFactory::create('memcache'));
return new CacheLockDriver($this->cache);
}
public function tearDown()
{
$this->cache->clear();
parent::tearDown();
} }
} }

View file

@ -3,7 +3,6 @@
namespace Friendica\Test\src\Core\Lock; namespace Friendica\Test\src\Core\Lock;
use Friendica\Core\Cache\CacheDriverFactory; use Friendica\Core\Cache\CacheDriverFactory;
use Friendica\Core\Lock\CacheLockDriver; use Friendica\Core\Lock\CacheLockDriver;
@ -12,20 +11,8 @@ use Friendica\Core\Lock\CacheLockDriver;
*/ */
class MemcachedCacheLockDriverTest extends LockTest class MemcachedCacheLockDriverTest extends LockTest
{ {
/**
* @var \Friendica\Core\Cache\IMemoryCacheDriver
*/
private $cache;
protected function getInstance() protected function getInstance()
{ {
$this->cache = CacheDriverFactory::create('memcached'); return new CacheLockDriver(CacheDriverFactory::create('memcached'));
return new CacheLockDriver($this->cache);
}
public function tearDown()
{
$this->cache->clear();
parent::tearDown();
} }
} }

View file

@ -3,7 +3,6 @@
namespace Friendica\Test\src\Core\Lock; namespace Friendica\Test\src\Core\Lock;
use Friendica\Core\Cache\CacheDriverFactory; use Friendica\Core\Cache\CacheDriverFactory;
use Friendica\Core\Lock\CacheLockDriver; use Friendica\Core\Lock\CacheLockDriver;
@ -12,21 +11,9 @@ use Friendica\Core\Lock\CacheLockDriver;
*/ */
class RedisCacheLockDriverTest extends LockTest class RedisCacheLockDriverTest extends LockTest
{ {
/**
* @var \Friendica\Core\Cache\IMemoryCacheDriver
*/
private $cache;
protected function getInstance() protected function getInstance()
{ {
$this->cache = CacheDriverFactory::create('redis'); return new CacheLockDriver(CacheDriverFactory::create('redis'));
return new CacheLockDriver($this->cache);
} }
public function tearDown()
{
$this->cache->clear();
parent::tearDown();
}
} }

View file

@ -2,26 +2,13 @@
namespace Friendica\Test\src\Core\Lock; namespace Friendica\Test\src\Core\Lock;
use Friendica\Core\Lock\SemaphoreLockDriver; use Friendica\Core\Lock\SemaphoreLockDriver;
class SemaphoreLockDriverTest extends LockTest class SemaphoreLockDriverTest extends LockTest
{ {
/**
* @var \Friendica\Core\Lock\SemaphoreLockDriver
*/
private $semaphoreLockDriver;
protected function getInstance() protected function getInstance()
{ {
$this->semaphoreLockDriver = new SemaphoreLockDriver(); return new SemaphoreLockDriver();
return $this->semaphoreLockDriver;
}
public function tearDown()
{
$this->semaphoreLockDriver->releaseAll();
parent::tearDown();
} }
function testLockTTL() function testLockTTL()