I've upgraded my Symfony app from 6.2 to 6.3. Locally everything work perfect, but I have a problem on staging environment. When I'm trying to sign in via API (or get some resources) I'm reciveing 503 First Byte Timeout from Varnish Cache Server. In Kubernetes logs everything is fine (Response status code is 204 and headers are present).
I've changed some Normalizer classes to remove deprecations, ex. UserNormalizer
Version before upgrade:
<?php
declare(strict_types=1);
namespace App\Api\User\Serializer;
use App\Entity\User;
use App\Repository\CategoryRepository;
use Symfony\Component\Serializer\Normalizer\CacheableSupportsMethodInterface;
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
class UserNormalizer implements NormalizerInterface, CacheableSupportsMethodInterface
{
public function __construct(
private readonly NormalizerInterface $itemNormalizer,
private readonly CategoryRepository $categoryRepository,
) {
}
/** @param User $object */
public function normalize($object, $format = null, array $context = []): array|string
{
$object->categoryIds = $this->categoryRepository->findIdsWithJobsByUser($object);
return $this->itemNormalizer->normalize($object, $format, $context);
}
public function supportsNormalization($data, $format = null, array $context = []): bool
{
return $data instanceof User;
}
public function hasCacheableSupportsMethod(): bool
{
return true;
}
}
and after upgrade
<?php
declare(strict_types=1);
namespace App\Api\User\Serializer;
use App\Entity\User;
use App\Repository\CategoryRepository;
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
final readonly class UserNormalizer implements NormalizerInterface
{
public function __construct(
private NormalizerInterface $itemNormalizer,
private CategoryRepository $categoryRepository,
) {
}
/** @param User $object */
public function normalize($object, $format = null, array $context = []): array|string
{
$object->categoryIds = $this->categoryRepository->findIdsWithJobsByUser($object);
return $this->itemNormalizer->normalize($object, $format, $context);
}
public function supportsNormalization($data, $format = null, array $context = []): bool
{
return $data instanceof User;
}
public function getSupportedTypes(?string $format): array
{
return [
'*' => false,
User::class => true,
];
}
}
I've removed implementation of CacheableSupportsMethodInterface
(with method hasCacheableSupportsMethod()
) and replaced it with getSupportedTypes()
according to documentation and built-in normalizer.
My app is running on Google Kubernetes Engine (GCP) and is delivered via Fastly.
Does anyone faced same issue?
PS. Some resources are correct (ex. Static Pages, which are also cached and has simillar getSupportedTypes()
implementation).
Solved.
The problem was pcntl extension which was obligatory for Messenger with version 6.3.5.
After update Messenger to 6.3.7 I removed pcntl extension from my docker image and all problems with cache disapeared.