From bd2b3b1ef5e066f927bf8ae95954dd4569319bca Mon Sep 17 00:00:00 2001 From: Philipp Holzer Date: Thu, 6 Sep 2018 08:11:18 +0200 Subject: [PATCH] LockDriverFixings - release Locks in case of failures - adding some cache tests --- src/Core/Cache/ArrayCache.php | 5 +++++ src/Core/Worker.php | 2 ++ src/Model/Item.php | 1 + tests/src/Core/Cache/CacheTest.php | 24 +++++++++++++++++++----- 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/Core/Cache/ArrayCache.php b/src/Core/Cache/ArrayCache.php index b198287148..d1302c1d6e 100644 --- a/src/Core/Cache/ArrayCache.php +++ b/src/Core/Cache/ArrayCache.php @@ -53,6 +53,11 @@ class ArrayCache extends AbstractCacheDriver implements IMemoryCacheDriver */ public function clear($outdated = true) { + // Array doesn't support TTL so just don't delete something + if ($outdated) { + return true; + } + $this->cachedData = []; return true; } diff --git a/src/Core/Worker.php b/src/Core/Worker.php index 9dd973728d..3400f00ae1 100644 --- a/src/Core/Worker.php +++ b/src/Core/Worker.php @@ -117,12 +117,14 @@ class Worker // Count active workers and compare them with a maximum value that depends on the load if (self::tooMuchWorkers()) { logger('Active worker limit reached, quitting.', LOGGER_DEBUG); + Lock::release('worker'); return; } // Check free memory if ($a->min_memory_reached()) { logger('Memory limit reached, quitting.', LOGGER_DEBUG); + Lock::release('worker'); return; } Lock::release('worker'); diff --git a/src/Model/Item.php b/src/Model/Item.php index d235f0a7f9..10c705a995 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -1936,6 +1936,7 @@ class Item extends BaseObject } else { // This shouldn't happen. logger('Could not insert activity for URI ' . $item['uri'] . ' - should not happen'); + Lock::release('item_insert_activity'); return false; } if ($locked) { diff --git a/tests/src/Core/Cache/CacheTest.php b/tests/src/Core/Cache/CacheTest.php index 105142f0b7..5c56c2072f 100644 --- a/tests/src/Core/Cache/CacheTest.php +++ b/tests/src/Core/Cache/CacheTest.php @@ -81,19 +81,33 @@ abstract class CacheTest extends DatabaseTest '3_value1' => $this->instance->get('3_value1'), ]); - $this->assertTrue($this->instance->clear(false)); + $this->assertTrue($this->instance->clear()); $this->assertEquals([ - '1_value1' => null, - '1_value2' => null, - '2_value1' => null, - '3_value1' => null, + '1_value1' => 'ipsum lorum1', + '1_value2' => 'ipsum lorum2', + '2_value1' => 'ipsum lorum3', + '3_value1' => 'ipsum lorum4', ], [ '1_value1' => $this->instance->get('1_value1'), '1_value2' => $this->instance->get('1_value2'), '2_value1' => $this->instance->get('2_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'), + ]); } /**