8000 Shlink 4.4.0 failing to acquire lock with redis cluster: Cannot use 'SCRIPT' with redis-cluster · Issue #2366 · shlinkio/shlink · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Shlink 4.4.0 failing to acquire lock with redis cluster: Cannot use 'SCRIPT' with redis-cluster #2366

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
hezor opened this issue Feb 17, 2025 · 9 comments · Fixed by #2369
Closed
Labels
Milestone

Comments

@hezor
Copy link
hezor commented Feb 17, 2025

Shlink version

4.4.0-roadrunner

PHP version

Official Docker Image

How do you serve Shlink

Docker image

Database engine

MariaDB

Database version

10.11.10

Current behavior

This is going to be a long one as I want to be as thorough as possible, so please bear with me.

We run our Shlink setup in AWS. We have 3 Shlink instances running in ECS Fargate using the official Docker 4.4.0-roadrunner images, and they connect to an RDS-based MariaDB 10.11.10. All 3 Shlink instances use a MemoryDB for Redis (version 7.1) for it's lock files. This is a cluster of 3 nodes that only has 1 shard and 2 replicas per shard, and is completely dedicated to Shlink only.

The connection to Redis is made by setting the following envvar:
REDIS_SERVERS=tcp://nodename-redacted-redis-cluster-shlink-0001-001.abcdef.0001.memorydb.eu-north-1.amazonaws.com:6379,tcp://nodename-redacted-redis-cluster-shlink-0001-002.abcdef.0001.memorydb.eu-north-1.amazonaws.com:6379,tcp://nodename-redacted-redis-cluster-shlink-0001-003.abcdef.0001.memorydb.eu-north-1.amazonaws.com:6379

So all of the nodes are separately defined in the server list as the Shlink documentation suggests when using a Redis Cluster.

When we upgraded from version 4.3.1 to version 4.4.0, there was a change that we began encrypting the database connections from Shlink by using the envvar DB_USE_ENCRYPTION=true

We originally launched Shlink back in October 2023 beginning with version 3.6.4 and have constantly updated Shlink to the latest version pretty soon after their release. We have had zero problems until there was a hiccup in AWS Stockholm region last Friday where AWS had serious problems with it's networking. This meant that the Redis for Shlink had some connectivity issues as well as the RDS.

Later, after the incident was resolved by AWS, our Shlink admins reported that they cannot create new short links as Shlink Web Client reports "An unknown error occurred". I started digging in and noticed that Shlink is responding with HTTP 500 and quickly diagnosed that new short links can't be created if you create a new tag with it. Without tags, they got created just fine.

Here are the logs of Shlink when I tried to create a new short link with a tag:

2025-02-14T08:28:32+0000	INFO	server      	[2025-02-14T10:28:32.657718+02:00] [6b2354ca-7496-4dfa-a1b1-51080a937b91] Access.INFO - OPTIONS /rest/v3/short-urls 204 0
2025-02-14T08:28:33+0000	INFO	server      	[2025-02-14T10:28:33.396868+02:00] [78780765-5230-4a8d-b3ac-f091476411a8] Shlink.NOTICE - Failed to acquire the "440roadrunner:tag_tagdebug" lock.
2025-02-14T08:28:33+0000	INFO	server      	[2025-02-14T10:28:33.403105+02:00] [78780765-5230-4a8d-b3ac-f091476411a8] Shlink.ERROR - Predis\NotSupportedException: Cannot use 'SCRIPT' with redis-cluster. in /etc/shlink/vendor/predis/predis/src/Connection/Cluster/RedisCluster.php:354
Stack trace:
#0 /etc/shlink/vendor/predis/predis/src/Connection/Cluster/RedisCluster.php(531): Predis\Connection\Cluster\RedisCluster->getConnectionByCommand(Object(Predis\Command\Redis\SCRIPT))
#1 /etc/shlink/vendor/predis/predis/src/Connection/Cluster/RedisCluster.php(591): Predis\Connection\Cluster\RedisCluster->retryCommandOnFailure(Object(Predis\Command\Redis\SCRIPT), 'executeCommand')
#2 /etc/shlink/vendor/predis/predis/src/Client.php(381): Predis\Connection\Cluster\RedisCluster->executeCommand(Object(Predis\Command\Redis\SCRIPT))
#3 /etc/shlink/vendor/predis/predis/src/Client.php(335): Predis\Client->executeCommand(Object(Predis\Command\Redis\SCRIPT))
#4 /etc/shlink/vendor/symfony/lock/Store/RedisStore.php(297): Predis\Client->__call('script', Array)
#5 /etc/shlink/vendor/symfony/lock/Store/RedisStore.php(332): Symfony\Component\Lock\Store\RedisStore->evaluate('\n              ...', 'symfony_check_s...', Array)
#6 /etc/shlink/vendor/symfony/lock/Store/RedisStore.php(60): Symfony\Component\Lock\Store\RedisStore->getNowCode()
#7 /etc/shlink/vendor/shlinkio/shlink-common/src/Lock/NamespacedStore.php(29): Symfony\Component\Lock\Store\RedisStore->save(Object(Symfony\Component\Lock\Key))
#8 /etc/shlink/vendor/symfony/lock/Lock.php(75): Shlinkio\Shlink\Common\Lock\NamespacedStore->save(Object(Symfony\Component\Lock\Key))
#9 /etc/shlink/module/Core/src/ShortUrl/Resolver/PersistenceShortUrlRelationResolver.php(110): Symfony\Component\Lock\Lock->acquire(true)
#10 /etc/shlink/module/Core/src/ShortUrl/Resolver/PersistenceShortUrlRelationResolver.php(80): Shlinkio\Shlink\Core\ShortUrl\Resolver\PersistenceShortUrlRelationResolver->lock(Array, 'tag_tagdebug')
#11 [internal function]: Shlinkio\Shlink\Core\ShortUrl\Resolver\PersistenceShortUrlRelationResolver->{closure:Shlinkio\Shlink\Core\ShortUrl\Resolver\PersistenceShortUrlRelationResolver::resolveTags():79}('tagdebug')
#12 /etc/shlink/module/Core/src/ShortUrl/Resolver/PersistenceShortUrlRelationResolver.php(79): array_map(Object(Closure), Array)
#13 /etc/shlink/module/Core/src/ShortUrl/Entity/ShortUrl.php(99): Shlinkio\Shlink\Core\ShortUrl\Resolver\PersistenceShortUrlRelationResolver->resolveTags(Array)
#14 /etc/shlink/module/Core/src/ShortUrl/UrlShortener.php(47): Shlinkio\Shlink\Core\ShortUrl\Entity\ShortUrl::create(Object(Shlinkio\Shlink\Core\ShortUrl\Model\ShortUrlCreation), Object(Shlinkio\Shlink\Core\ShortUrl\Resolver\PersistenceShortUrlRelationResolver))
#15 /etc/shlink/vendor/doctrine/orm/src/EntityManager.php(183): Shlinkio\Shlink\Core\ShortUrl\UrlShortener->{closure:Shlinkio\Shlink\Core\ShortUrl\UrlShortener::shorten():46}(Object(Doctrine\ORM\EntityManager))
#16 /etc/shlink/vendor/doctrine/orm/src/Decorator/EntityManagerDecorator.php(72): Doctrine\ORM\EntityManager->wrapInTransaction(Object(Closure))
#17 /etc/shlink/module/Core/src/ShortUrl/UrlShortener.php(46): Doctrine\ORM\Decorator\EntityManagerDecorator->wrapInTransaction(Object(Closure))
#18 /etc/shlink/module/Rest/src/Action/ShortUrl/AbstractCreateShortUrlAction.php(29): Shlinkio\Shlink\Core\ShortUrl\UrlShortener->shorten(Object(Shlinkio\Shlink\Core\ShortUrl\Model\ShortUrlCreation))
#19 /etc/shlink/vendor/laminas/laminas-stratigility/src/Middleware/RequestHandlerMiddleware.php(46): Shlinkio\Shlink\Rest\Action\ShortUrl\AbstractCreateShortUrlAction->handle(Object(Laminas\Diactoros\ServerRequest))
#20 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Laminas\Stratigility\Middleware\RequestHandlerMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#21 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#22 /etc/shlink/module/Rest/src/Middleware/ShortUrl/DefaultShortCodesLengthMiddleware.php(28): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#23 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Shlinkio\Shlink\Rest\Middleware\ShortUrl\DefaultShortCodesLengthMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#24 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#25 /etc/shlink/module/Rest/src/Middleware/ShortUrl/OverrideDomainMiddleware.php(27): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#26 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Shlinkio\Shlink\Rest\Middleware\ShortUrl\OverrideDomainMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#27 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#28 /etc/shlink/module/Rest/src/Middleware/ShortUrl/DropDefaultDomainFromRequestMiddleware.php(26): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#29 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Shlinkio\Shlink\Rest\Middleware\ShortUrl\DropDefaultDomainFromRequestMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#30 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#31 /etc/shlink/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(77): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#32 /etc/shlink/vendor/mezzio/mezzio-router/src/Route.php(79): Laminas\Stratigility\MiddlewarePipe->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#33 /etc/shlink/vendor/mezzio/mezzio-router/src/RouteResult.php(109): Mezzio\Router\Route->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#34 /etc/shlink/vendor/mezzio/mezzio-router/src/Middleware/DispatchMiddleware.php(32): Mezzio\Router\RouteResult->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#35 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Mezzio\Router\Middleware\DispatchMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#36 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#37 /etc/shlink/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(77): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#38 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Laminas\Stratigility\MiddlewarePipe->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#39 /etc/shlink/vendor/laminas/laminas-stratigility/src/Middleware/PathMiddlewareDecorator.php(122): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#40 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(45): Psr\Http\Server\RequestHandlerInterface@anonymous->handle(Object(Laminas\Diactoros\ServerRequest))
#41 /etc/shlink/module/Rest/src/Middleware/AuthenticationMiddleware.php(52): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#42 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Shlinkio\Shlink\Rest\Middleware\AuthenticationMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#43 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#44 /etc/shlink/module/Rest/src/Middleware/BodyParserMiddleware.php(37): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#45 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Shlinkio\Shlink\Rest\Middleware\BodyParserMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#46 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#47 /etc/shlink/vendor/mezzio/mezzio-router/src/Middleware/ImplicitOptionsMiddleware.php(75): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#48 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Mezzio\Router\Middleware\ImplicitOptionsMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#49 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#50 /etc/shlink/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(77): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#51 /etc/shlink/vendor/laminas/laminas-stratigility/src/Middleware/PathMiddlewareDecorator.php(60): Laminas\Stratigility\MiddlewarePipe->process(Object(Laminas\Diactoros\ServerRequest), Object(Psr\Http\Server\RequestHandlerInterface@anonymous))
#52 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Laminas\Stratigility\Middleware\PathMiddlewareDecorator->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#53 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(45): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#54 /etc/shlink/vendor/mezzio/mezzio-router/src/Middleware/ImplicitHeadMiddleware.php(77): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#55 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Mezzio\Router\Middleware\ImplicitHeadMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#56 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#57 /etc/shlink/vendor/mezzio/mezzio-router/src/Middleware/RouteMiddleware.php(50): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#58 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Mezzio\Router\Middleware\RouteMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#59 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#60 /etc/shlink/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(77): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#61 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Laminas\Stratigility\MiddlewarePipe->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#62 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(45): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#63 /etc/shlink/vendor/shlinkio/shlink-common/src/Middleware/CloseDbConnectionMiddleware.php(24): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#64 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Shlinkio\Shlink\Common\Middleware\CloseDbConnectionMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#65 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#66 /etc/shlink/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(77): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#67 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Laminas\Stratigility\MiddlewarePipe->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#68 /etc/shlink/vendor/laminas/laminas-stratigility/src/Middleware/PathMiddlewareDecorator.php(122): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#69 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(45): Psr\Http\Server\RequestHandlerInterface@anonymous->handle(Object(Laminas\Diactoros\ServerRequest))
#70 /etc/shlink/vendor/mezzio/mezzio-problem-details/src/ProblemDetailsMiddleware.php(46): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#71 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Mezzio\ProblemDetails\ProblemDetailsMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#72 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#73 /etc/shlink/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(77): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#74 /etc/shlink/vendor/laminas/laminas-stratigility/src/Middleware/PathMiddlewareDecorator.php(60): Laminas\Stratigility\MiddlewarePipe->process(Object(Laminas\Diactoros\ServerRequest), Object(Psr\Http\Server\RequestHandlerInterface@anonymous))
#75 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Laminas\Stratigility\Middleware\PathMiddlewareDecorator->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#76 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(45): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#77 /etc/shlink/module/Rest/src/Middleware/CrossDomainMiddleware.php(24): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#78 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Shlinkio\Shlink\Rest\Middleware\CrossDomainMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#79 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#80 /etc/shlink/vendor/laminas/laminas-stratigility/src/Middleware/ErrorHandler.php(129): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#81 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Laminas\Stratigility\Middleware\ErrorHandler->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#82 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#83 /etc/shlink/vendor/shlinkio/shlink-common/src/Middleware/RequestIdMiddleware.php(33): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#84 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Shlinkio\Shlink\Common\Middleware\RequestIdMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#85 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#86 /etc/shlink/vendor/shlinkio/shlink-common/src/Middleware/ContentLengthMiddleware.php(16): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#87 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Shlinkio\Shlink\Common\Middleware\ContentLengthMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#88 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#89 /etc/shlink/vendor/shlinkio/shlink-common/src/Middleware/AccessLogMiddleware.php(26): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#90 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Shlinkio\Shlink\Common\Middleware\AccessLogMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#91 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#92 /etc/shlink/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(77): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#93 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Laminas\Stratigility\MiddlewarePipe->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#94 /etc/shlink/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(77): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#95 /etc/shlink/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(66): Laminas\Stratigility\MiddlewarePipe->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\EmptyPipelineHandler))
#96 /etc/shlink/vendor/mezzio/mezzio/src/Application.php(34): Laminas\Stratigility\MiddlewarePipe->handle(Object(Laminas\Diactoros\ServerRequest))
#97 /etc/shlink/bin/roadrunner-worker.php(25): Mezzio\Application->handle(Object(Laminas\Diactoros\ServerRequest))
#98 /etc/shlink/bin/roadrunner-worker.php(36): {closure:/etc/shlink/bin/roadrunner-worker.php:13}()
#99 {main}
Next Symfony\Component\Lock\Exception\LockAcquiringException: Failed to acquire the "440roadrunner:tag_tagdebug" lock. in /etc/shlink/vendor/symfony/lock/Lock.php:116
Stack trace:
#0 /etc/shlink/module/Core/src/ShortUrl/Resolver/PersistenceShortUrlRelationResolver.php(110): Symfony\Component\Lock\Lock->acquire(true)
#1 /etc/shlink/module/Core/src/ShortUrl/Resolver/PersistenceShortUrlRelationResolver.php(80): Shlinkio\Shlink\Core\ShortUrl\Resolver\PersistenceShortUrlRelationResolver->lock(Array, 'tag_tagdebug')
#2 [internal function]: Shlinkio\Shlink\Core\ShortUrl\Resolver\PersistenceShortUrlRelationResolver->{closure:Shlinkio\Shlink\Core\ShortUrl\Resolver\PersistenceShortUrlRelationResolver::resolveTags():79}('tagdebug')
#3 /etc/shlink/module/Core/src/ShortUrl/Resolver/PersistenceShortUrlRelationResolver.php(79): array_map(Object(Closure), Array)
#4 /etc/shlink/module/Core/src/ShortUrl/Entity/ShortUrl.php(99): Shlinkio\Shlink\Core\ShortUrl\Resolver\PersistenceShortUrlRelationResolver->resolveTags(Array)
#5 /etc/shlink/module/Core/src/ShortUrl/UrlShortener.php(47): Shlinkio\Shlink\Core\ShortUrl\Entity\ShortUrl::create(Object(Shlinkio\Shlink\Core\ShortUrl\Model\ShortUrlCreation), Object(Shlinkio\Shlink\Core\ShortUrl\Resolver\PersistenceShortUrlRelationResolver))
#6 /etc/shlink/vendor/doctrine/orm/src/EntityManager.php(183): Shlinkio\Shlink\Core\ShortUrl\UrlShortener->{closure:Shlinkio\Shlink\Core\ShortUrl\UrlShortener::shorten():46}(Object(Doctrine\ORM\EntityManager))
#7 /etc/shlink/vendor/doctrine/orm/src/Decorator/EntityManagerDecorator.php(72): Doctrine\ORM\EntityManager->wrapInTransaction(Object(Closure))
#8 /etc/shlink/module/Core/src/ShortUrl/UrlShortener.php(46): Doctrine\ORM\Decorator\EntityManagerDecorator->wrapInTransaction(Object(Closure))
#9 /etc/shlink/module/Rest/src/Action/ShortUrl/AbstractCreateShortUrlAction.php(29): Shlinkio\Shlink\Core\ShortUrl\UrlShortener->shorten(Object(Shlinkio\Shlink\Core\ShortUrl\Model\ShortUrlCreation))
#10 /etc/shlink/vendor/laminas/laminas-stratigility/src/Middleware/RequestHandlerMiddleware.php(46): Shlinkio\Shlink\Rest\Action\ShortUrl\AbstractCreateShortUrlAction->handle(Object(Laminas\Diactoros\ServerRequest))
#11 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Laminas\Stratigility\Middleware\RequestHandlerMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#12 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#13 /etc/shlink/module/Rest/src/Middleware/ShortUrl/DefaultShortCodesLengthMiddleware.php(28): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#14 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Shlinkio\Shlink\Rest\Middleware\ShortUrl\DefaultShortCodesLengthMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#15 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#16 /etc/shlink/module/Rest/src/Middleware/ShortUrl/OverrideDomainMiddleware.php(27): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#17 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Shlinkio\Shlink\Rest\Middleware\ShortUrl\OverrideDomainMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#18 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#19 /etc/shlink/module/Rest/src/Middleware/ShortUrl/DropDefaultDomainFromRequestMiddleware.php(26): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#20 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Shlinkio\Shlink\Rest\Middleware\ShortUrl\DropDefaultDomainFromRequestMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#21 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#22 /etc/shlink/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(77): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#23 /etc/shlink/vendor/mezzio/mezzio-router/src/Route.php(79): Laminas\Stratigility\MiddlewarePipe->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#24 /etc/shlink/vendor/mezzio/mezzio-router/src/RouteResult.php(109): Mezzio\Router\Route->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#25 /etc/shlink/vendor/mezzio/mezzio-router/src/Middleware/DispatchMiddleware.php(32): Mezzio\Router\RouteResult->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#26 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Mezzio\Router\Middleware\DispatchMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#27 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#28 /etc/shlink/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(77): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#29 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Laminas\Stratigility\MiddlewarePipe->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#30 /etc/shlink/vendor/laminas/laminas-stratigility/src/Middleware/PathMiddlewareDecorator.php(122): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#31 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(45): Psr\Http\Server\RequestHandlerInterface@anonymous->handle(Object(Laminas\Diactoros\ServerRequest))
#32 /etc/shlink/module/Rest/src/Middleware/AuthenticationMiddleware.php(52): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#33 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Shlinkio\Shlink\Rest\Middleware\AuthenticationMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#34 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#35 /etc/shlink/module/Rest/src/Middleware/BodyParserMiddleware.php(37): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#36 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Shlinkio\Shlink\Rest\Middleware\BodyParserMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#37 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#38 /etc/shlink/vendor/mezzio/mezzio-router/src/Middleware/ImplicitOptionsMiddleware.php(75): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#39 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Mezzio\Router\Middleware\ImplicitOptionsMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#40 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#41 /etc/shlink/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(77): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#42 /etc/shlink/vendor/laminas/laminas-stratigility/src/Middleware/PathMiddlewareDecorator.php(60): Laminas\Stratigility\MiddlewarePipe->process(Object(Laminas\Diactoros\ServerRequest), Object(Psr\Http\Server\RequestHandlerInterface@anonymous))
#43 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Laminas\Stratigility\Middleware\PathMiddlewareDecorator->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#44 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(45): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#45 /etc/shlink/vendor/mezzio/mezzio-router/src/Middleware/ImplicitHeadMiddleware.php(77): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#46 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Mezzio\Router\Middleware\ImplicitHeadMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#47 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#48 /etc/shlink/vendor/mezzio/mezzio-router/src/Middleware/RouteMiddleware.php(50): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#49 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Mezzio\Router\Middleware\RouteMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#50 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#51 /etc/shlink/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(77): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#52 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Laminas\Stratigility\MiddlewarePipe->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#53 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(45): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#54 /etc/shlink/vendor/shlinkio/shlink-common/src/Middleware/CloseDbConnectionMiddleware.php(24): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#55 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Shlinkio\Shlink\Common\Middleware\CloseDbConnectionMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#56 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#57 /etc/shlink/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(77): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#58 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Laminas\Stratigility\MiddlewarePipe->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#59 /etc/shlink/vendor/laminas/laminas-stratigility/src/Middleware/PathMiddlewareDecorator.php(122): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#60 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(45): Psr\Http\Server\RequestHandlerInterface@anonymous->handle(Object(Laminas\Diactoros\ServerRequest))
#61 /etc/shlink/vendor/mezzio/mezzio-problem-details/src/ProblemDetailsMiddleware.php(46): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#62 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Mezzio\ProblemDetails\ProblemDetailsMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#63 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#64 /etc/shlink/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(77): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#65 /etc/shlink/vendor/laminas/laminas-stratigility/src/Middleware/PathMiddlewareDecorator.php(60): Laminas\Stratigility\MiddlewarePipe->process(Object(Laminas\Diactoros\ServerRequest), Object(Psr\Http\Server\RequestHandlerInterface@anonymous))
#66 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Laminas\Stratigility\Middleware\PathMiddlewareDecorator->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#67 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(45): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#68 /etc/shlink/module/Rest/src/Middleware/CrossDomainMiddleware.php(24): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#69 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Shlinkio\Shlink\Rest\Middleware\CrossDomainMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#70 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#71 /etc/shlink/vendor/laminas/laminas-stratigility/src/Middleware/ErrorHandler.php(129): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#72 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Laminas\Stratigility\Middleware\ErrorHandler->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#73 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#74 /etc/shlink/vendor/shlinkio/shlink-common/src/Middleware/RequestIdMiddleware.php(33): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#75 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Shlinkio\Shlink\Common\Middleware\RequestIdMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#76 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#77 /etc/shlink/vendor/shlinkio/shlink-common/src/Middleware/ContentLengthMiddleware.php(16): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#78 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Shlinkio\Shlink\Common\Middleware\ContentLengthMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#79 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#80 /etc/shlink/vendor/shlinkio/shlink-common/src/Middleware/AccessLogMiddleware.php(26): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#81 /etc/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Shlinkio\Shlink\Common\Middleware\AccessLogMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#82 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#83 /etc/shlink/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(77): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#84 /etc/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Laminas\Stratigility\MiddlewarePipe->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#85 /etc/shlink/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(77): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#86 /etc/shlink/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(66): Laminas\Stratigility\MiddlewarePipe->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\EmptyPipelineHandler))
#87 /etc/shlink/vendor/mezzio/mezzio/src/Application.php(34): Laminas\Stratigility\MiddlewarePipe->handle(Object(Laminas\Diactoros\ServerRequest))
#88 /etc/shlink/bin/roadrunner-worker.php(25): Mezzio\Application->handle(Object(Laminas\Diactoros\ServerRequest))
#89 /etc/shlink/bin/roadrunner-worker.php(36): {closure:/etc/shlink/bin/roadrunner-worker.php:13}()
#90 {main}
2025-02-14T08:28:33+0000	INFO	server      	[2025-02-14T10:28:33.403465+02:00] [78780765-5230-4a8d-b3ac-f091476411a8] Access.INFO - POST /rest/v3/short-urls 500 143

Okay so it seems to be Redis problem. I try to restart all Shlink Fargate tasks to see if that fixes it. I log the startup sequence and see these errors, and the Shlink Fargate tasks do not start up:

Initializing database if needed... [Running "/usr/local/bin/php bin/cli db:create"]   RUN  '/usr/local/bin/php' 'bin/cli' 'db:create'
  ERR  [2025-02-14T11:03:04.750489+02:00] [-] Shlink.NOTICE - Failed to acquire the "440roadrunner:db:create" lock.
  ERR  
  ERR  In Lock.php line 116:
  ERR                                                               
  ERR    [Symfony\Component\Lock\Exception\LockAcquiringException]  
  ERR    Failed to acquire the "440roadrunner:db:create" lock.      
  ERR                                                               
  ERR  
  ERR  Exception trace:
  ERR    at /etc/shlink/vendor/symfony/lock/Lock.php:116
  ERR   Symfony\Component\Lock\Lock->acquire() at /etc/shlink/module/CLI/src/Command/Util/AbstractLockedCommand.php:27
  ERR   Shlinkio\Shlink\CLI\Command\Util\AbstractLockedCommand->execute() at /etc/shlink/vendor/symfony/console/Command/Command.php:279
  ERR   Symfony\Component\Console\Command\Command->run() at /etc/shlink/vendor/symfony/console/Application.php:1076
  ERR   Symfony\Component\Console\Application->doRunCommand() at /etc/shlink/vendor/symfony/console/Application.php:342
  ERR   Symfony\Component\Console\Application->doRun() at /etc/shlink/vendor/symfony/console/Application.php:193
  ERR   Symfony\Component\Console\Application->run() at /etc/shlink/bin/cli:10
  ERR  
  ERR  In RedisCluster.php line 354:
  ERR                                             
  ERR    [Predis\NotSupportedException]           
  ERR    Cannot use 'SCRIPT' with redis-cluster.  
  ERR                                             
  ERR  
  ERR  Exception trace:
  ERR    at /etc/shlink/vendor/predis/predis/src/Connection/Cluster/RedisCluster.php:354
  ERR   Predis\Connection\Cluster\RedisCluster->getConnectionByCommand() at /etc/shlink/vendor/predis/predis/src/Connection/Cluster/RedisCluster.php:531
  ERR   Predis\Connection\Cluster\RedisCluster->retryCommandOnFailure() at /etc/shlink/vendor/predis/predis/src/Connection/Cluster/RedisCluster.php:591
  ERR   Predis\Connection\Cluster\RedisCluster->executeCommand() at /etc/shlink/vendor/predis/predis/src/Client.php:381
  ERR   Predis\Client->executeCommand() at /etc/shlink/vendor/predis/predis/src/Client.php:335
  ERR   Predis\Client->__call() at /etc/shlink/vendor/symfony/lock/Store/RedisStore.php:297
  ERR   Symfony\Component\Lock\Store\RedisStore->evaluate() at /etc/shlink/vendor/symfony/lock/Store/RedisStore.php:332
  ERR   Symfony\Component\Lock\Store\RedisStore->getNowCode() at /etc/shlink/vendor/symfony/lock/Store/RedisStore.php:60
  ERR   Symfony\Component\Lock\Store\RedisStore->save() at /etc/shlink/vendor/shlinkio/shlink-common/src/Lock/NamespacedStore.php:29
  ERR   Shlinkio\Shlink\Common\Lock\NamespacedStore->save() at /etc/shlink/vendor/symfony/lock/Lock.php:75
  ERR   Symfony\Component\Lock\Lock->acquire() at /etc/shlink/module/CLI/src/Command/Util/AbstractLockedCommand.php:27
  ERR   Shlinkio\Shlink\CLI\Command\Util\AbstractLockedCommand->execute() at /etc/shlink/vendor/symfony/console/Command/Command.php:279
  ERR   Symfony\Component\Console\Command\Command->run() at /etc/shlink/vendor/symfony/console/Application.php:1076
  ERR   Symfony\Component\Console\Application->doRunCommand() at /etc/shlink/vendor/symfony/console/Application.php:342
  ERR   Symfony\Component\Console\Application->doRun() at /etc/shlink/vendor/symfony/console/Application.php:193
  ERR   Symfony\Component\Console\Application->run() at /etc/shlink/bin/cli:10
  ERR  
  ERR  db:create
  ERR  
  ERR  
  RES  1 Command did not run successfully
Updating database... [Running "/usr/local/bin/php bin/cli db:migrate"]   RUN  '/usr/local/bin/php' 'bin/cli' 'db:migrate'
  ERR  [2025-02-14T11:03:05.703118+02:00] [-] Shlink.NOTICE - Failed to acquire the "440roadrunner:db:migrate" lock.
  ERR  
  ERR  In Lock.php line 116:
  ERR                                                               
  ERR    [Symfony\Component\Lock\Exception\LockAcquiringException]  
  ERR    Failed to acquire the "440roadrunner:db:migrate" lock.     
  ERR                                                               
  ERR  
  ERR  Exception trace:
  ERR    at /etc/shlink/vendor/symfony/lock/Lock.php:116
  ERR   Symfony\Component\Lock\Lock->acquire() at /etc/shlink/module/CLI/src/Command/Util/AbstractLockedCommand.php:27
  ERR   Shlinkio\Shlink\CLI\Command\Util\AbstractLockedCommand->execute() at /etc/shlink/vendor/symfony/console/Command/Command.php:279
  ERR   Symfony\Component\Console\Command\Command->run() at /etc/shlink/vendor/symfony/console/Application.php:1076
  ERR   Symfony\Component\Console\Application->doRunCommand() at /etc/shlink/vendor/symfony/console/Application.php:342
  ERR   Symfony\Component\Console\Application->doRun() at /etc/shlink/vendor/symfony/console/Application.php:193
  ERR   Symfony\Component\Console\Application->run() at /etc/shlink/bin/cli:10
  ERR  
  ERR  In RedisCluster.php line 354:
  ERR                                             
  ERR    [Predis\NotSupportedException]           
  ERR    Cannot use 'SCRIPT' with redis-cluster.  
  ERR                                             
  ERR  
  ERR  Exception trace:
  ERR    at /etc/shlink/vendor/predis/predis/src/Connection/Cluster/RedisCluster.php:354
  ERR   Predis\Connection\Cluster\RedisCluster->getConnectionByCommand() at /etc/shlink/vendor/predis/predis/src/Connection/Cluster/RedisCluster.php:531
  ERR   Predis\Connection\Cluster\RedisCluster->retryCommandOnFailure() at /etc/shlink/vendor/predis/predis/src/Connection/Cluster/RedisCluster.php:591
  ERR   Predis\Connection\Cluster\RedisCluster->executeCommand() at /etc/shlink/vendor/predis/predis/src/Client.php:381
  ERR   Predis\Client->executeCommand() at /etc/shlink/vendor/predis/predis/src/Client.php:335
  ERR   Predis\Client->__call() at /etc/shlink/vendor/symfony/lock/Store/RedisStore.php:297
  ERR   Symfony\Component\Lock\Store\RedisStore->evaluate() at /etc/shlink/vendor/symfony/lock/Store/RedisStore.php:332
  ERR   Symfony\Component\Lock\Store\RedisStore->getNowCode() at /etc/shlink/vendor/symfony/lock/Store/RedisStore.php:60
  ERR   Symfony\Component\Lock\Store\RedisStore->save() at /etc/shlink/vendor/shlinkio/shlink-common/src/Lock/NamespacedStore.php:29
  ERR   Shlinkio\Shlink\Common\Lock\NamespacedStore->save() at /etc/shlink/vendor/symfony/lock/Lock.php:75
  ERR   Symfony\Component\Lock\Lock->acquire() at /etc/shlink/module/CLI/src/Command/Util/AbstractLockedCommand.php:27
  ERR   Shlinkio\Shlink\CLI\Command\Util\AbstractLockedCommand->execute() at /etc/shlink/vendor/symfony/console/Command/Command.php:279
  ERR   Symfony\Component\Console\Command\Command->run() at /etc/shlink/vendor/symfony/console/Application.php:1076
  ERR   Symfony\Component\Console\Application->doRunCommand() at /etc/shlink/vendor/symfony/console/Application.php:342
  ERR   Symfony\Component\Console\Application->doRun() at /etc/shlink/vendor/symfony/console/Application.php:193
  ERR   Symfony\Component\Console\Application->run() at /etc/shlink/bin/cli:10
  ERR  
  ERR  db:migrate
  ERR  
  ERR  
  RES  1 Command did not run successfully
Generating proxies... [Running "/usr/local/bin/php bin/doctrine orm:generate-proxies"]   RUN  '/usr/local/bin/php' 'bin/doctrine' 'orm:generate-proxies'
  ERR   Processing entity "Shlinkio\Shlink\Core\Visit\Entity\OrphanVisitsCount"
  ERR   Processing entity "Shlinkio\Shlink\Core\Visit\Entity\VisitLocation"
  ERR   Processing entity "Shlinkio\Shlink\Core\ShortUrl\Entity\ShortUrl"
  ERR   Processing entity "Shlinkio\Shlink\Core\RedirectRule\Entity\ShortUrlRedirectRule"
  ERR   Processing entity "Shlinkio\Shlink\Core\Tag\Entity\Tag"
  ERR   Processing entity "Shlinkio\Shlink\Core\Domain\Entity\Domain"
  ERR   Processing entity "Shlinkio\Shlink\Core\Visit\Entity\ShortUrlVisitsCount"
  ERR   Processing entity "Shlinkio\Shlink\Core\Geolocation\Entity\GeolocationDbUpdate"
  ERR   Processing entity "Shlinkio\Shlink\Core\Visit\Entity\Visit"
  ERR   Processing entity "Shlinkio\Shlink\Core\RedirectRule\Entity\RedirectCondition"
  ERR   Processing entity "Shlinkio\Shlink\Rest\Entity\ApiKeyRole"
  ERR   Processing entity "Shlinkio\Shlink\Rest\Entity\ApiKey"
  ERR  
  ERR   Proxy classes generated to "/etc/shlink/data/proxies"
  ERR  
  RES  Command ran successfully
 Success!
Clearing entities cache... [Running "/usr/local/bin/php bin/doctrine orm:clear-cache:metadata"]   RUN  '/usr/local/bin/php' 'bin/doctrine' 'orm:clear-cache:metadata'
  ERR  
  ERR   // Clearing all Metadata cache entries                                         
  ERR  
  ERR   [OK] Successfully deleted cache entries.                                       
  ERR  
  ERR  
  RES  Command ran successfully
 Success!
Creating first API key... [Running "/usr/local/bin/php bin/cli api-key:initial <REDACTED>"]   RUN  '/usr/local/bin/php' 'bin/cli' 'api-key:initial' '<REDACTED>'
  OUT  Other API keys already exist. Initial API key creation skipped.
  OUT  
  RES  Command ran successfully
 Success!
 Other API keys already exist. Initial API key creation skipped.

Luckily we run Shlink in three different environments, in addition to production we have staging and dev environments too which are identical to the production env. The exact same problem occurs in all of the environments so I dig deeper in the dev env.

Next, I stop the Shlink Fargate tasks. Then I command a FLUSHALL to the Redis Cluster to clear all data. I try to restart Shlink and no dice, the same error appears on startup. Then I restore an RDS snapshot before the AWS incident and restart Shlink. Still, the same error at startup. Now I create a completely blank new MariaDB database instance and once again FLUSHALL Redis to get a properly clean slate. Still, the same error occurs on Shlink startup!

The next step for me was to downgrade to Shlink version 4.3.1. This fixed it all! I did the downgrade in staging and production envs too, and all was good once again! Shlink started up nicely without errors, new short links could be created with tags and so on.

So the weird part is that originally I got 4.4.0 running just fine when upgrading from 4.3.1. But any kind of a connection error or whatsoever breaks 4.4.0 permanently (for us at least). Back in 2023, when I did some disaster recovery testing for Shlink, there was basically nothing that broke down Shlink completely.

So I have no idea what is going on here, based on the logs it has something to do with Redis, right? Hopefully you can tell what's the issue. But for now, we are staying in version 4.3.1.

Expected behavior

Shlink recovers from infrastructure-related problems and does not break down permanently.

Minimum steps to reproduce

Unfortunately, I can not tell a definitive way to reproduce the problem, but these steps could lead to the same outcome:

  • Run Shlink 4.3.1-roadrunner Docker image.
  • Update to Shlink 4.4.0-roadrunner Docker image.
  • Intentionally disrupt the connection to the Redis Cluster and MariaDB.
  • Restore the connections.
  • Try to restart Shlink and see if it starts up.
  • If it does not startup, downgrade back to 4.3.1-roadrunner Docker image and see if it starts up.
@acelaya
Copy link
Member
acelaya commented Feb 17, 2025

Thanks! You are not the first one reporting this #2365

I have the suspicion the root cause is the same as in #2350, although, the error message is slightly different.

I downgraded the culprit library in v4.4.3, although, according to #2365, that didn't fix this particular issue.

Can you put together a docker compose configuration where this can be consistently reproduced? It's going to be very hard to find the underlying root cause otherwise, and I won't be able to report it to the proper library.

@acelaya
Copy link
Member
acelaya commented Feb 17, 2025

Ok, I was able to reproduce the issue with the same simple instructions I originally reported here symfony/symfony#59686, but using symfony/lock: 7.2.0 and configuring the Predis client for a cluster instead of a single instance.

So basically, my guess is that the changes they introduced in v7.2.3 were meant to fix the issue reported here, but they ended up introducing the other issue.

I would recommend you to try with Shlink 4.4.2, which uses symfony/lock: 7.2.3, and see if it works for you. Worst case scenario, you will face the issue reported in #2350 instead of this one.

If that's the case, then I'm afraid you'll have to stay in Shlink 4.3.x until they have released their fix.

@acelaya acelaya added the blocked Issues with some external dependency preventing to work on them label Feb 17, 2025
@acelaya acelaya changed the title Shlink 4.4.0 showing weird start-up problems after infrastructure failure Shlink 4.4.0 failing to acquire lock with redis cluster: Cannot use 'SCRIPT' with redis-cluster Feb 17, 2025
@acelaya acelaya added this to the 4.4.4 milestone Feb 17, 2025
@acelaya
Copy link
Member
acelaya commented Feb 17, 2025

Sadly, I have just checked this same error is reproducible with the latest changes in symfony/lock main. I'll try to check what's the differences between the version used by Shlink 4.3.1 and 4.4.0, and see if I can build a proper reproduction for them.

@acelaya acelaya removed the blocked Issues with some external dependency preventing to work on them label Feb 17, 2025
@acelaya
Copy link
Member
acelaya commented Feb 17, 2025

The issue was introduced in symfony/lock 7.2.0. It works with symfony/lock 7.1.6

@acelaya
Copy link
Member
acelaya commented Feb 17, 2025

Just reported it there symfony/symfony#59795

@acelaya acelaya added the blocked Issues with some external dependency preventing to work on them label Feb 17, 2025
@acelaya
Copy link
Member
acelaya commented Feb 18, 2025

BTW @hezor, a short-term workaround would be to use a single redis instance with Shlink 4.4.3, until a fix has been provided for this.

@acelaya acelaya pinned this issue Feb 18, 2025
@hezor
Copy link
Author
hezor commented Feb 18, 2025

Thank you very much! In our use case, I think the added redundancy of a Redis cluster is more important than the latest features from 4.4.x - although the option to use TLS for the database connection is a very nice bonus and keeps the infosec people happy. 😁

@acelaya acelaya moved this from Todo to In Progress in Shlink Feb 19, 2025
@github-project-automation github-project-automation bot moved this from In Progress to Done in Shlink Feb 19, 2025
@acelaya
Copy link
Member
acelaya commented Feb 19, 2025

I'm trying to help pinpoint the issue in the upstream library, but in the meantime I'm downgrading it in Shlink to fix this issue.

I need to fix one more bug and then I'll release Shlink v4.4.4

@acelaya
Copy link
Member
acelaya commented Feb 19, 2025

I have just released Shlink 4.4.4

@acelaya acelaya unpinned this issue Feb 20, 2025
@acelaya acelaya removed the blocked Issues with some external dependency preventing to work on them label Feb 20, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
Archived in project
Development

Successfully merging a pull request may close this issue.

2 participants
0