From 7f02beffb309730dac4ca0985f50e3e9f6baf1e1 Mon Sep 17 00:00:00 2001 From: egor Date: Thu, 20 Jun 2024 16:09:00 +0300 Subject: [PATCH] fix new cache instance cannot clean expired cache item --- .../Extensions/Drivers/Ravendb/Config.php | 11 ----------- .../Extensions/Drivers/Ravendb/Driver.php | 1 - .../Extensions/Drivers/Ravendb/RavenProxy.php | 18 +++++++----------- tests/Configs/github-actions.php | 1 - tests/Ravendb.test.php | 17 +++++++++++++++++ 5 files changed, 24 insertions(+), 24 deletions(-) diff --git a/lib/Phpfastcache/Extensions/Drivers/Ravendb/Config.php b/lib/Phpfastcache/Extensions/Drivers/Ravendb/Config.php index 617dccc..dd4c4e3 100644 --- a/lib/Phpfastcache/Extensions/Drivers/Ravendb/Config.php +++ b/lib/Phpfastcache/Extensions/Drivers/Ravendb/Config.php @@ -169,17 +169,6 @@ public function isSerializeData(): bool return $this->serializeData; } - /** - * @param bool $serializeData - * @return self - * @throws PhpfastcacheInvalidArgumentException - * @throws PhpfastcacheLogicException - */ - public function setSerializeData(bool $serializeData): static - { - return $this->setProperty('serializeData', $serializeData); - } - public function getAuthOptions(): ?AuthOptions { return $this->authOptions; diff --git a/lib/Phpfastcache/Extensions/Drivers/Ravendb/Driver.php b/lib/Phpfastcache/Extensions/Drivers/Ravendb/Driver.php index 4aabfa2..25fdb4b 100644 --- a/lib/Phpfastcache/Extensions/Drivers/Ravendb/Driver.php +++ b/lib/Phpfastcache/Extensions/Drivers/Ravendb/Driver.php @@ -127,7 +127,6 @@ protected function getRavenDocument(ExtendedCacheItemInterface $item): ?RavenPro if ($ravenDocument instanceof RavenProxy) { $ravenDocument->setDetailedDate($this->getConfig()->isItemDetailedDate()); - $ravenDocument->setSerializeData($this->getConfig()->isSerializeData()); return $ravenDocument; } diff --git a/lib/Phpfastcache/Extensions/Drivers/Ravendb/RavenProxy.php b/lib/Phpfastcache/Extensions/Drivers/Ravendb/RavenProxy.php index 57b90b0..66bf2eb 100644 --- a/lib/Phpfastcache/Extensions/Drivers/Ravendb/RavenProxy.php +++ b/lib/Phpfastcache/Extensions/Drivers/Ravendb/RavenProxy.php @@ -41,7 +41,7 @@ class RavenProxy protected ?\DateTimeInterface $modificationDate = null; - public function __construct(?ExtendedCacheItemInterface $item = null, protected bool $serializeData = true, protected bool $detailedDate = false) + public function __construct(?ExtendedCacheItemInterface $item = null, protected bool $detailedDate = false) { if ($item) { $this->fromCacheItem($item); @@ -70,8 +70,7 @@ public function getData(): mixed public function setData(mixed $data): self { - $this->data = $this->serializeData ? serialize($data) : $data; - + $this->data = $data; return $this; } @@ -133,8 +132,10 @@ public function fromCacheItem(ExtendedCacheItemInterface $item): void } $this->setData($item->_getData()) - ->setExpirationDate($item->getExpirationDate()) - ->setTags($item->getTags()); + ->setExpirationDate($item->getExpirationDate()) + ->setCreationDate($item->getCreationDate()) + ->setModificationDate($item->getModificationDate()) + ->setTags($item->getTags()); if ($this->detailedDate) { $this->setModificationDate($item->getModificationDate()) @@ -150,7 +151,7 @@ public function toDriverArray(): ?array if ($this->key) { return [ ExtendedCacheItemPoolInterface::DRIVER_KEY_WRAPPER_INDEX => $this->key, - ExtendedCacheItemPoolInterface::DRIVER_DATA_WRAPPER_INDEX => ($this->serializeData ? unserialize($this->data) : $this->data), + ExtendedCacheItemPoolInterface::DRIVER_DATA_WRAPPER_INDEX => $this->data, ExtendedCacheItemPoolInterface::DRIVER_EDATE_WRAPPER_INDEX => $this->expirationDate, ExtendedCacheItemPoolInterface::DRIVER_CDATE_WRAPPER_INDEX => $this->creationDate, ExtendedCacheItemPoolInterface::DRIVER_MDATE_WRAPPER_INDEX => $this->modificationDate, @@ -160,11 +161,6 @@ public function toDriverArray(): ?array return null; } - public function setSerializeData(bool $serializeData): void - { - $this->serializeData = $serializeData; - } - public function setDetailedDate(bool $detailedDate): void { $this->detailedDate = $detailedDate; diff --git a/tests/Configs/github-actions.php b/tests/Configs/github-actions.php index 078834e..a77e077 100644 --- a/tests/Configs/github-actions.php +++ b/tests/Configs/github-actions.php @@ -3,7 +3,6 @@ use Phpfastcache\Drivers\Ravendb\Config as RavendbConfig; return (new RavendbConfig()) - ->setSerializeData(false) ->setItemDetailedDate(true) ->setHost([getenv('RAVENDB_TEST_DATABASE_HOSTNAME') ?: 'http://127.0.0.1:8082']) ->setCollectionName('phpfastcache') diff --git a/tests/Ravendb.test.php b/tests/Ravendb.test.php index 193293a..4e584fa 100644 --- a/tests/Ravendb.test.php +++ b/tests/Ravendb.test.php @@ -28,6 +28,23 @@ $cacheInstance = CacheManager::getInstance('Ravendb', include $configFileName); $testHelper->runCRUDTests($cacheInstance); $testHelper->runGetAllItemsTests($cacheInstance); + + $key = "product_page". bin2hex(random_bytes(8) . '_' . random_int(100, 999)); + $your_product_data = 'First product'; + + $cachedString = $cacheInstance->getItem($key); + $cachedString->set($your_product_data)->expiresAfter(1); + $cacheInstance->save($cachedString); + sleep(2); + + $newCacheInstance = CacheManager::getInstance('RavenDB', include $configFileName, "newInstance"); + $cachedString = $newCacheInstance->getItem($key); // new cache instance got an expired cache item and should delete it from cache storage + + if ($cachedString->isHit()) { + $testHelper->assertFail(sprintf('Item #%s is hit.', $cachedString->getKey())); + } else { + $testHelper->assertPass(sprintf('Item #%s is not hit.', $cachedString->getKey())); + } } catch (PhpfastcacheDriverConnectException $e) { $testHelper->assertSkip('Ravendb server unavailable: ' . $e->getMessage()); $testHelper->terminateTest();