Skip to content

Redis::hMset() SSL error: 0A00010F:SSL routines::bad length #1545

@gbalduzzi

Description

@gbalduzzi

Horizon Version

5.31.1

Laravel Version

12.7.2

PHP Version

8.2.22

Redis Driver

PhpRedis

Redis Version

6.0

Database Driver & Version

No response

Description

My project is running on digital ocean clusters with a Digital ocean managed redis database.

Lately, the traffic on the server increased and a bunch of this error started to pop up, right now it affects around 1 every 5 scheduled jobs. This is the stacktrace:

Redis::hMset(): SSL operation failed with code 1. OpenSSL Error messages:
error:0A00010F:SSL routines::bad length {"exception":"[object] (ErrorException(code: 0): Redis::hMset(): SSL operation failed with code 1. OpenSSL Error messages:
error:0A00010F:SSL routines::bad length at /var/www/vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php:116)
[stacktrace]
#0 /var/www/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(256): Illuminate\\Foundation\\Bootstrap\\HandleExceptions->handleError(2, 'Redis::hMset():...', '/var/www/vendor...', 116)
#1 [internal function]: Illuminate\\Foundation\\Bootstrap\\HandleExceptions->Illuminate\\Foundation\\Bootstrap\\{closure}(2, 'Redis::hMset():...', '/var/www/vendor...', 116)
#2 /var/www/vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php(116): Redis->hMset('524397ee-1948-4...', Array)
#3 /var/www/vendor/laravel/framework/src/Illuminate/Redis/Connections/PhpRedisConnection.php(531): Illuminate\\Redis\\Connections\\Connection->command('hmset', Array)
#4 /var/www/vendor/laravel/framework/src/Illuminate/Redis/Connections/PhpRedisConnection.php(136): Illuminate\\Redis\\Connections\\PhpRedisConnection->command('hmset', Array)
#5 /var/www/vendor/laravel/horizon/src/Repositories/RedisJobRepository.php(373): Illuminate\\Redis\\Connections\\PhpRedisConnection->hmset('524397ee-1948-4...', Array)
#6 /var/www/vendor/laravel/horizon/src/Listeners/MarkJobAsReserved.php(36): Laravel\\Horizon\\Repositories\\RedisJobRepository->reserved('redis', 'default', Object(Laravel\\Horizon\\JobPayload))
#7 /var/www/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php(479): Laravel\\Horizon\\Listeners\\MarkJobAsReserved->handle(Object(Laravel\\Horizon\\Events\\JobReserved))
#8 /var/www/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php(286): Illuminate\\Events\\Dispatcher->Illuminate\\Events\\{closure}('Laravel\\\\Horizon...', Array)
#9 /var/www/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php(266): Illuminate\\Events\\Dispatcher->invokeListeners('Laravel\\\\Horizon...', Array, false)
#10 /var/www/vendor/laravel/horizon/src/RedisQueue.php(204): Illuminate\\Events\\Dispatcher->dispatch('Laravel\\\\Horizon...')
#11 /var/www/vendor/laravel/horizon/src/RedisQueue.php(141): Laravel\\Horizon\\RedisQueue->event('default', Object(Laravel\\Horizon\\Events\\JobReserved))
#12 /var/www/vendor/laravel/framework/src/Illuminate/Support/helpers.php(399): Laravel\\Horizon\\RedisQueue->Laravel\\Horizon\\{closure}(Object(Illuminate\\Queue\\Jobs\\RedisJob))
#13 /var/www/vendor/laravel/horizon/src/RedisQueue.php(139): tap(Object(Illuminate\\Queue\\Jobs\\RedisJob), Object(Closure))
#14 /var/www/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(350): Laravel\\Horizon\\RedisQueue->pop('default', 0)
#15 /var/www/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(365): Illuminate\\Queue\\Worker->Illuminate\\Queue\\{closure}('default', 0)
#16 /var/www/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(163): Illuminate\\Queue\\Worker->getNextJob(Object(Laravel\\Horizon\\RedisQueue), 'default')
#17 /var/www/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(148): Illuminate\\Queue\\Worker->daemon('redis', 'default', Object(Illuminate\\Queue\\WorkerOptions))
#18 /var/www/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(131): Illuminate\\Queue\\Console\\WorkCommand->runWorker('redis', 'default')
#19 /var/www/vendor/laravel/horizon/src/Console/WorkCommand.php(51): Illuminate\\Queue\\Console\\WorkCommand->handle()
#20 /var/www/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Laravel\\Horizon\\Console\\WorkCommand->handle()
#21 /var/www/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#22 /var/www/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\Container\\Util::unwrapIfClosure(Object(Closure))
#23 /var/www/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\Container\\BoundMethod::callBoundMethod(Object(Illuminate\\Foundation\\Application), Array, Object(Closure))
#24 /var/www/vendor/laravel/framework/src/Illuminate/Container/Container.php(754): Illuminate\\Container\\BoundMethod::call(Object(Illuminate\\Foundation\\Application), Array, Array, NULL)
#25 /var/www/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\Container\\Container->call(Array)
#26 /var/www/vendor/symfony/console/Command/Command.php(279): Illuminate\\Console\\Command->execute(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#27 /var/www/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\Component\\Console\\Command\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#28 /var/www/vendor/symfony/console/Application.php(1094): Illuminate\\Console\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#29 /var/www/vendor/symfony/console/Application.php(342): Symfony\\Component\\Console\\Application->doRunCommand(Object(Laravel\\Horizon\\Console\\WorkCommand), Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#30 /var/www/vendor/symfony/console/Application.php(193): Symfony\\Component\\Console\\Application->doRun(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#31 /var/www/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(197): Symfony\\Component\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#32 /var/www/artisan(33): Illuminate\\Foundation\\Console\\Kernel->handle(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))

I'm posting here because redis is used for cache, session and to store a bunch of other data with pretty heavy traffic and I'm only receiving this specific error on the Redis::hMset by horizon.

My config:

database.php:

'default' => [
            'scheme' => env('REDIS_SCHEME', 'tls'),
            'url' => env('REDIS_URL'),
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => env('REDIS_DB', 0),
            'timeout' => 2,
            'read_timeout' => 3,
            'persistent' => true,
        ],

queue.php

'redis' => [
            'driver' => 'redis',
            'connection' => 'default',
            'queue' => 'default',
            'retry_after' => 65,
            'block_for' => 2,
        ],

horizon.php

'supervisor-prod' => [
                'connection' => 'redis',
                'queue' => ['default'],
                'balance' => 'auto',
                'maxProcesses' => env('HORIZON_MAX_PROCESSES', 10),
                'minProcesses' => env('HORIZON_MIN_PROCESSES', 3),
                'memory' => 128,
                'tries' => 3,
                'nice' => 0,
            ],

Steps To Reproduce

Unsure, hard to reproduce locally because of the tsl connection required

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions