summaryrefslogtreecommitdiff
path: root/vendor/symfony/cache/Messenger/EarlyExpirationHandler.php
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2024-08-13 23:45:21 +0200
committerpolo <ordipolo@gmx.fr>2024-08-13 23:45:21 +0200
commitbf6655a534a6775d30cafa67bd801276bda1d98d (patch)
treec6381e3f6c81c33eab72508f410b165ba05f7e9c /vendor/symfony/cache/Messenger/EarlyExpirationHandler.php
parent94d67a4b51f8e62e7d518cce26a526ae1ec48278 (diff)
downloadAppliGestionPHP-bf6655a534a6775d30cafa67bd801276bda1d98d.zip
VERSION 0.2 doctrine ORM et entités
Diffstat (limited to 'vendor/symfony/cache/Messenger/EarlyExpirationHandler.php')
-rw-r--r--vendor/symfony/cache/Messenger/EarlyExpirationHandler.php81
1 files changed, 81 insertions, 0 deletions
diff --git a/vendor/symfony/cache/Messenger/EarlyExpirationHandler.php b/vendor/symfony/cache/Messenger/EarlyExpirationHandler.php
new file mode 100644
index 0000000..adaeb5b
--- /dev/null
+++ b/vendor/symfony/cache/Messenger/EarlyExpirationHandler.php
@@ -0,0 +1,81 @@
1<?php
2
3/*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12namespace Symfony\Component\Cache\Messenger;
13
14use Symfony\Component\Cache\CacheItem;
15use Symfony\Component\DependencyInjection\ReverseContainer;
16use Symfony\Component\Messenger\Attribute\AsMessageHandler;
17
18/**
19 * Computes cached values sent to a message bus.
20 */
21#[AsMessageHandler]
22class EarlyExpirationHandler
23{
24 private array $processedNonces = [];
25
26 public function __construct(
27 private ReverseContainer $reverseContainer,
28 ) {
29 }
30
31 public function __invoke(EarlyExpirationMessage $message): void
32 {
33 $item = $message->getItem();
34 $metadata = $item->getMetadata();
35 $expiry = $metadata[CacheItem::METADATA_EXPIRY] ?? 0;
36 $ctime = $metadata[CacheItem::METADATA_CTIME] ?? 0;
37
38 if ($expiry && $ctime) {
39 // skip duplicate or expired messages
40
41 $processingNonce = [$expiry, $ctime];
42 $pool = $message->getPool();
43 $key = $item->getKey();
44
45 if (($this->processedNonces[$pool][$key] ?? null) === $processingNonce) {
46 return;
47 }
48
49 if (microtime(true) >= $expiry) {
50 return;
51 }
52
53 $this->processedNonces[$pool] = [$key => $processingNonce] + ($this->processedNonces[$pool] ?? []);
54
55 if (\count($this->processedNonces[$pool]) > 100) {
56 array_pop($this->processedNonces[$pool]);
57 }
58 }
59
60 static $setMetadata;
61
62 $setMetadata ??= \Closure::bind(
63 function (CacheItem $item, float $startTime) {
64 if ($item->expiry > $endTime = microtime(true)) {
65 $item->newMetadata[CacheItem::METADATA_EXPIRY] = $item->expiry;
66 $item->newMetadata[CacheItem::METADATA_CTIME] = (int) ceil(1000 * ($endTime - $startTime));
67 }
68 },
69 null,
70 CacheItem::class
71 );
72
73 $startTime = microtime(true);
74 $pool = $message->findPool($this->reverseContainer);
75 $callback = $message->findCallback($this->reverseContainer);
76 $save = true;
77 $value = $callback($item, $save);
78 $setMetadata($item, $startTime);
79 $pool->save($item->set($value));
80 }
81}