@@ -79,8 +79,7 @@ static function (array $items, array $itemTags) {
79
79
);
80
80
self ::$ setTagVersions ??= \Closure::bind (
81
81
static function (array $ items , array $ tagVersions ) {
82
- $ now = null ;
83
- foreach ($ items as $ key => $ item ) {
82
+ foreach ($ items as $ item ) {
84
83
$ item ->newMetadata [CacheItem::METADATA_TAGS ] = array_intersect_key ($ tagVersions , $ item ->newMetadata [CacheItem::METADATA_TAGS ] ?? []);
85
84
}
86
85
},
@@ -343,14 +342,16 @@ public function __destruct()
343
342
private function getTagVersions (array $ tagsByKey , bool $ persistTags ): array
344
343
{
345
344
$ tagVersions = [];
346
- $ fetchTagVersions = false ;
345
+ $ fetchTagVersions = $ persistTags ;
347
346
348
347
foreach ($ tagsByKey as $ tags ) {
349
348
$ tagVersions += $ tags ;
350
-
349
+ if ($ fetchTagVersions ) {
350
+ continue ;
351
+ }
351
352
foreach ($ tags as $ tag => $ version ) {
352
353
if ($ tagVersions [$ tag ] !== $ version ) {
353
- unset( $ this -> knownTagVersions [ $ tag ]) ;
354
+ $ fetchTagVersions = true ;
354
355
}
355
356
}
356
357
}
@@ -364,38 +365,39 @@ private function getTagVersions(array $tagsByKey, bool $persistTags): array
364
365
foreach ($ tagVersions as $ tag => $ version ) {
365
366
$ tags [$ tag .static ::TAGS_PREFIX ] = $ tag ;
366
367
$ knownTagVersion = $ this ->knownTagVersions [$ tag ] ?? [0 , null ];
367
- if ($ fetchTagVersions || $ knownTagVersion [1 ] !== $ version || $ now - $ knownTagVersion [0 ] >= $ this ->knownTagVersionsTtl ) {
368
- // reuse previously fetched tag versions up to the ttl
369
- $ fetchTagVersions = true ;
370
- }
371
368
unset($ this ->knownTagVersions [$ tag ]); // For LRU tracking
372
- if ([0 , null ] !== $ knownTagVersion ) {
373
- $ this ->knownTagVersions [$ tag ] = $ knownTagVersion ;
369
+ if ($ fetchTagVersions || $ knownTagVersion [1 ] !== $ version || $ now > $ knownTagVersion [0 ]) {
370
+ // reuse previously fetched tag versions until the expiration
371
+ $ fetchTagVersions = true ;
372
+ continue ;
374
373
}
374
+ $ this ->knownTagVersions [$ tag ] = $ knownTagVersion ;
375
375
}
376
376
377
377
if (!$ fetchTagVersions ) {
378
378
return $ tagVersions ;
379
379
}
380
380
381
+ if (\count ($ this ->knownTagVersions ) > self ::MAX_NUMBER_OF_KNOWN_TAG_VERSIONS ) {
382
+ array_splice ($ this ->knownTagVersions , 0 , \count ($ this ->knownTagVersions ) >> 1 );
383
+ }
384
+
381
385
$ newTags = [];
382
386
$ newVersion = null ;
387
+ $ expiration = $ now + $ this ->knownTagVersionsTtl ;
383
388
foreach ($ this ->tags ->getItems (array_keys ($ tags )) as $ tag => $ version ) {
384
- if (!$ version ->isHit ()) {
389
+ if ($ persistTags && !$ version ->isHit ()) {
385
390
$ newTags [$ tag ] = $ version ->set ($ newVersion ??= random_bytes (6 ));
386
391
}
387
- $ tagVersions [$ tag = $ tags [$ tag ]] = $ version ->get ();
388
- $ this ->knownTagVersions [$ tag ] = [$ now , $ tagVersions [$ tag ]];
392
+ if ($ tagVersions [$ tag = $ tags [$ tag ]] = $ version ->get ()) {
393
+ $ this ->knownTagVersions [$ tag ] = [$ expiration , $ tagVersions [$ tag ]];
394
+ }
389
395
}
390
396
391
- if ($ newTags && $ persistTags ) {
397
+ if ($ newTags ) {
392
398
(self ::$ saveTags )($ this ->tags , $ newTags );
393
399
}
394
400
395
- if (\count ($ this ->knownTagVersions ) > $ maxTags = max (self ::MAX_NUMBER_OF_KNOWN_TAG_VERSIONS , \count ($ newTags ) << 1 )) {
396
- array_splice ($ this ->knownTagVersions , 0 , $ maxTags >> 1 );
397
- }
398
-
399
401
return $ tagVersions ;
400
402
}
401
403
}
0 commit comments