8000 [Cache] Expand the range of allowed version numbers · symfony/symfony@74a3506 · GitHub
[go: up one dir, main page]

Skip to content

Commit 74a3506

Browse files
committed
[Cache] Expand the range of allowed version numbers
1 parent 2abdaf2 commit 74a3506

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

src/Symfony/Component/Cache/Adapter/TagAwareAdapter.php

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ public function hasItem($key)
171171
}
172172

173173
foreach ($this->getTagVersions([$itemTags]) as $tag => $version) {
174-
if ($itemTags[$tag] !== $version && 1 !== $itemTags[$tag] - $version) {
174+
if ($itemTags[$tag] !== $version && $itemTags[$tag] !== $version + 1 && ($itemTags[$tag] !== \PHP_INT_MIN || $version !== \PHP_INT_MAX)) {
175175
return false;
176176
}
177177
}
@@ -353,7 +353,7 @@ private function generateItems(iterable $items, array $tagKeys): \Generator
353353

354354
foreach ($itemTags as $key => $tags) {
355355
foreach ($tags as $tag => $version) {
356-
if ($tagVersions[$tag] !== $version && 1 !== $version - $tagVersions[$tag]) {
356+
if ($tagVersions[$tag] !== $version && $tagVersions[$tag] + 1 !== $version && ($tagVersions[$tag] !== \PHP_INT_MAX || $version !== \PHP_INT_MIN)) {
357357
unset($itemTags[$key]);
358358
continue 2;
359359
}
@@ -384,7 +384,7 @@ private function getTagVersions(array $tagsByKey, array $invalidatedTags = [])
384384
if (!$fetchTagVersions = 1 !== \func_num_args()) {
385385
foreach ($tagsByKey as $tags) {
386386
foreach ($tags as $tag => $version) {
387-
if ($tagVersions[$tag] > $version) {
387+
if ($tagVersions[$tag] > $version || $version > 0 && $version - $tagVersions[$tag] > \PHP_INT_MAX) {
388388
$tagVersions[$tag] = $version;
389389
}
390390
}
@@ -399,12 +399,14 @@ private function getTagVersions(array $tagsByKey, array $invalidatedTags = [])
399399
$fetchTagVersions = true;
400400
continue;
401401
}
402-
$version -= $this->knownTagVersions[$tag][1];
403-
if ((0 !== $version && 1 !== $version) || $now - $this->knownTagVersions[$tag][0] >= $this->knownTagVersionsTtl) {
402+
403+
if ($this->knownTagVersions[$tag][1] !== $version && $this->knownTagVersions[$tag][1] + 1 !== $version && ($this->knownTagVersions[$tag][1] !== \PHP_INT_MAX || $version !== \PHP_INT_MIN)
404+
|| $now - $this->knownTagVersions[$tag][0] >= $this->knownTagVersionsTtl
405+
) {
404406
// reuse previously fetched tag versions up to the ttl, unless we are storing items or a potential miss arises
405407
$fetchTagVersions = true;
406408
} else {
407-
$this->knownTagVersions[$tag][1] += $version;
409+
$this->knownTagVersions[$tag][1] = $version;
408410
}
409411
}
410412

@@ -419,12 +421,13 @@ private function getTagVersions(array $tagsByKey, array $invalidatedTags = [])
419421
if ($version->isHit()) {
420422
$tagVersions[$tag] = $version->get();
421423
} else {
422-
$tagVersions[$tag] = mt_rand(0, \PHP_INT_MAX);
424+
$tagVersions[$tag] = mt_rand(\PHP_INT_MIN, \PHP_INT_MAX);
423425
$updatedTags[$tag] = $version->set($tagVersions[$tag]);
424426
}
425427

426428
if (isset($invalidatedTags[$tag]) && !isset($updatedTags[$tag])) {
427-
$updatedTags[$tag] = $version->set(\PHP_INT_MAX === $tagVersions[$tag] ? 0 : ++$tagVersions[$tag]);
429+
$tagVersions[$tag] = $tagVersions[$tag] < \PHP_INT_MAX ? 1 + $tagVersions[$tag] : \PHP_INT_MIN;
430+
$updatedTags[$tag] = $version->set($tagVersions[$tag]);
428431
}
429432
$this->knownTagVersions[$tag] = [$now, $tagVersions[$tag]];
430433
}

0 commit comments

Comments
 (0)
0