[Cache] fix known tag versions ttl check
This commit is contained in:
parent
fda5b20c39
commit
205abf3435
@ -350,7 +350,7 @@ class TagAwareAdapter implements TagAwareAdapterInterface, PruneableInterface, R
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$version -= $this->knownTagVersions[$tag][1];
|
$version -= $this->knownTagVersions[$tag][1];
|
||||||
if ((0 !== $version && 1 !== $version) || $this->knownTagVersionsTtl > $now - $this->knownTagVersions[$tag][0]) {
|
if ((0 !== $version && 1 !== $version) || $now - $this->knownTagVersions[$tag][0] >= $this->knownTagVersionsTtl) {
|
||||||
// reuse previously fetched tag versions up to the ttl, unless we are storing items or a potential miss arises
|
// reuse previously fetched tag versions up to the ttl, unless we are storing items or a potential miss arises
|
||||||
$fetchTagVersions = true;
|
$fetchTagVersions = true;
|
||||||
} else {
|
} else {
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
namespace Symfony\Component\Cache\Tests\Adapter;
|
namespace Symfony\Component\Cache\Tests\Adapter;
|
||||||
|
|
||||||
use PHPUnit\Framework\MockObject\MockObject;
|
use PHPUnit\Framework\MockObject\MockObject;
|
||||||
|
use Psr\Cache\CacheItemInterface;
|
||||||
use Symfony\Component\Cache\Adapter\AdapterInterface;
|
use Symfony\Component\Cache\Adapter\AdapterInterface;
|
||||||
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
|
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
|
||||||
use Symfony\Component\Cache\Adapter\TagAwareAdapter;
|
use Symfony\Component\Cache\Adapter\TagAwareAdapter;
|
||||||
@ -160,6 +161,39 @@ class TagAwareAdapterTest extends AdapterTestCase
|
|||||||
$this->assertFalse($cache->prune());
|
$this->assertFalse($cache->prune());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testKnownTagVersionsTtl()
|
||||||
|
{
|
||||||
|
$itemsPool = new FilesystemAdapter('', 10);
|
||||||
|
$tagsPool = $this
|
||||||
|
->getMockBuilder(AdapterInterface::class)
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
$pool = new TagAwareAdapter($itemsPool, $tagsPool, 10);
|
||||||
|
|
||||||
|
$item = $pool->getItem('foo');
|
||||||
|
$item->tag(['baz']);
|
||||||
|
$item->expiresAfter(100);
|
||||||
|
|
||||||
|
$tag = $this->getMockBuilder(CacheItemInterface::class)->getMock();
|
||||||
|
$tag->expects(self::exactly(2))->method('get')->willReturn(10);
|
||||||
|
|
||||||
|
$tagsPool->expects(self::exactly(2))->method('getItems')->willReturn([
|
||||||
|
'baz'.TagAwareAdapter::TAGS_PREFIX => $tag,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$pool->save($item);
|
||||||
|
$this->assertTrue($pool->getItem('foo')->isHit());
|
||||||
|
$this->assertTrue($pool->getItem('foo')->isHit());
|
||||||
|
|
||||||
|
sleep(20);
|
||||||
|
|
||||||
|
$this->assertTrue($pool->getItem('foo')->isHit());
|
||||||
|
|
||||||
|
sleep(5);
|
||||||
|
|
||||||
|
$this->assertTrue($pool->getItem('foo')->isHit());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return MockObject|PruneableCacheInterface
|
* @return MockObject|PruneableCacheInterface
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user