Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Renaming an asset folder causes the UpdateAssetReferences job to time out and relinking does not occur.

Open
#13,813 2 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
38/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Stale
Tech stack
laravel, php
Domain
backend

Research direction

Start by reading Statamic\Listeners\UpdateAssetReferences and Statamic\Data\DataReferenceUpdater, especially the calls shown in the stack trace. Reproduce by renaming an asset folder on a content-heavy site with update_references enabled, then trace why reference updating takes longer than the queue timeout. Done when references are relinked without the job timing out.

Written by the indexing model from the issue text.

Description

assets
Bug description

When an asset folder is renamed we get failing Statamic\Listeners\UpdateAssetReferences jobs in the queue. The timeout happens at 30, 60 and 120 seconds. This issue is similar to #11769, but in this case relates to renaming folders rather than replacing assets.

How to reproduce

On a content-heavy site with update_references set to true, rename an asset folder. The UpdateAssetReferences job will time out.

Logs
Exception
Illuminate\Queue\TimeoutExceededException: Statamic\Listeners\UpdateAssetReferences has timed out. in /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Queue/TimeoutExceededException.php:15
Stack trace:
#0 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(873): Illuminate\Queue\TimeoutExceededException::forJob(Object(Illuminate\Queue\Jobs\RedisJob))
#1 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(242): Illuminate\Queue\Worker->timeoutExceededException(Object(Illuminate\Queue\Jobs\RedisJob))
#2 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Collections/Traits/EnumeratesValues.php(1070): Illuminate\Queue\Worker->Illuminate\Queue\{closure}(14, Array)
#3 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Collections/Collection.php(44): Illuminate\Support\Collection->getArrayableItems(Array)
#4 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Collections/Collection.php(142): Illuminate\Support\Collection->__construct(Array)
#5 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Collections/Traits/EnumeratesValues.php(442): Illuminate\Support\Collection->collapse()
#6 /home/unite/releases/20260129113559/vendor/statamic/cms/src/Fields/Fields.php(225): Illuminate\Support\Collection->flatMap(Object(Closure))
#7 /home/unite/releases/20260129113559/vendor/statamic/cms/src/Fields/Fields.php(40): Statamic\Fields\Fields->resolveFields()
#8 /home/unite/releases/20260129113559/vendor/statamic/cms/src/Fields/Fields.php(29): Statamic\Fields\Fields->setItems(Array)
#9 /home/unite/releases/20260129113559/vendor/statamic/cms/src/Fields/Tab.php(55): Statamic\Fields\Fields->__construct(Array)
#10 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Collections/HigherOrderCollectionProxy.php(66): Statamic\Fields\Tab->fields()
#11 [internal function]: Illuminate\Support\HigherOrderCollectionProxy->Illuminate\Support\{closure}(Object(Statamic\Fields\Tab), 'article')
#12 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Collections/Arr.php(823): array_map(Object(Closure), Array, Array)
#13 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Collections/Collection.php(844): Illuminate\Support\Arr::map(Array, Object(Closure))
#14 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Collections/HigherOrderCollectionProxy.php(63): Illuminate\Support\Collection->map(Object(Closure))
#15 /home/unite/releases/20260129113559/vendor/statamic/cms/src/Fields/Blueprint.php(354): Illuminate\Support\HigherOrderCollectionProxy->__call('fields', Array)
#16 /home/unite/releases/20260129113559/vendor/spatie/blink/src/Blink.php(306): Statamic\Fields\Blueprint->Statamic\Fields\{closure}()
#17 /home/unite/releases/20260129113559/vendor/statamic/cms/src/Support/Blink.php(18): Spatie\Blink\Blink->once('blueprint-field...', Object(Closure))
#18 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(363): Statamic\Support\Blink->__call('once', Array)
#19 /home/unite/releases/20260129113559/vendor/statamic/cms/src/Fields/Blueprint.php(357): Illuminate\Support\Facades\Facade::__callStatic('once', Array)
#20 /home/unite/releases/20260129113559/vendor/statamic/cms/src/Data/DataReferenceUpdater.php(79): Statamic\Fields\Blueprint->fields()
#21 /home/unite/releases/20260129113559/vendor/statamic/cms/src/Data/DataReferenceUpdater.php(63): Statamic\Data\DataReferenceUpdater->getTopLevelFields()
#22 /home/unite/releases/20260129113559/vendor/statamic/cms/src/Listeners/UpdateAssetReferences.php(95): Statamic\Data\DataReferenceUpdater->updateReferences('event/ch-spital...', NULL)
#23 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Collections/Traits/EnumeratesValues.php(272): Statamic\Listeners\UpdateAssetReferences->Statamic\Listeners\{closure}(Object(Statamic\Eloquent\Entries\Entry), 4696)
#24 /home/unite/releases/20260129113559/vendor/statamic/cms/src/Listeners/UpdateAssetReferences.php(92): Illuminate\Support\LazyCollection->each(Object(Closure))
#25 /home/unite/releases/20260129113559/vendor/statamic/cms/src/Listeners/UpdateAssetReferences.php(70): Statamic\Listeners\UpdateAssetReferences->replaceReferences(Object(Statamic\Assets\Asset), 'event/ch-spital...', NULL)
#26 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Events/CallQueuedListener.php(113): Statamic\Listeners\UpdateAssetReferences->handleDeleted(Object(Statamic\Events\AssetDeleted))
#27 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\Events\CallQueuedListener->handle(Object(Illuminate\Foundation\Application))
#28 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#29 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\Container\Util::unwrapIfClosure(Object(Closure))
#30 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#31 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
#32 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(129): Illuminate\Container\Container->call(Array)
#33 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}(Object(Illuminate\Events\CallQueuedListener))
#34 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Events\CallQueuedListener))
#35 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(133): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#36 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(134): Illuminate\Bus\Dispatcher->dispatchNow(Object(Illuminate\Events\CallQueuedListener), false)
#37 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Queue\CallQueuedHandler->Illuminate\Queue\{closure}(Object(Illuminate\Events\CallQueuedListener))
#38 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Events\CallQueuedListener))
#39 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(127): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#40 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(68): Illuminate\Queue\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\Queue\Jobs\RedisJob), Object(Illuminate\Events\CallQueuedListener))
#41 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(102): Illuminate\Queue\CallQueuedHandler->call(Object(Illuminate\Queue\Jobs\RedisJob), Array)
#42 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(485): Illuminate\Queue\Jobs\Job->fire()
#43 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(435): Illuminate\Queue\Worker->process('redis', Object(Illuminate\Queue\Jobs\RedisJob), Object(Illuminate\Queue\WorkerOptions))
#44 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(201): Illuminate\Queue\Worker->runJob(Object(Illuminate\Queue\Jobs\RedisJob), 'redis', Object(Illuminate\Queue\WorkerOptions))
#45 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(148): Illuminate\Queue\Worker->daemon('redis', 'default', Object(Illuminate\Queue\WorkerOptions))
#46 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(131): Illuminate\Queue\Console\WorkCommand->runWorker('redis', 'default')
#47 /home/unite/releases/20260129113559/vendor/laravel/horizon/src/Console/WorkCommand.php(52): Illuminate\Queue\Console\WorkCommand->handle()
#48 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Laravel\Horizon\Console\WorkCommand->handle()
#49 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#50 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\Container\Util::unwrapIfClosure(Object(Closure))
#51 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#52 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
#53 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\Container\Container->call(Array)
#54 /home/unite/releases/20260129113559/vendor/symfony/console/Command/Command.php(341): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
#55 /home/unite/releases/20260129113559/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))
#56 /home/unite/releases/20260129113559/vendor/symfony/console/Application.php(1102): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#57 /home/unite/releases/20260129113559/vendor/symfony/console/Application.php(356): Symfony\Component\Console\Application->doRunCommand(Object(Laravel\Horizon\Console\WorkCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#58 /home/unite/releases/20260129113559/vendor/symfony/console/Application.php(195): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#59 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#60 /home/unite/releases/20260129113559/artisan(35): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#61 {main}
Environment
Environment
Application Name: XXXXX
Laravel Version: 12.49.0
PHP Version: 8.2.29
Composer Version: 2.9.4
Environment: local
Debug Mode: ENABLED
URL: XXXXX
Maintenance Mode: OFF
Timezone: UTC
Locale: en

Cache
Config: NOT CACHED
Events: NOT CACHED
Routes: NOT CACHED
Views: NOT CACHED

Drivers
Broadcasting: null
Cache: redis
Database: mysql
Logs: stack / single
Mail: smtp
Queue: redis
Session: file

Storage
public/storage: NOT LINKED

Statamic
Addons: 8
Sites: 12 (Global (English), Germany (German), UK (English), and 9 more)
Stache Watcher: Enabled
Static Caching: Disabled
Version: 5.73.2 PRO

Statamic Addons
edalzell/forma: 3.1.2
robole/advanced-table: 0.0.0
silentz/akismet: 5.1
statamic-rad-pack/runway: 8.9.0
statamic/eloquent-driver: 4.36.0
thoughtco/statamic-cache-tracker: 1.1.0
withcandour/aardvark-seo: 5.0.5
withcandour/statamic-markdown-table: 1.0.0-beta

Statamic Eloquent Driver
Asset Containers: file
Assets: file
Blueprints: file
Collection Trees: file
Collections: file
Entries: eloquent
Fieldsets: file
Form Submissions: file
Forms: file
Global Sets: file
Global Variables: file
Navigation Trees: file
Navigations: file
Revisions: file
Sites: file
Taxonomies: file
Terms: file
Tokens: file
Installation

Fresh statamic/statamic site via CLI

Additional details

I think you will need to come up either some serious optimisation to the traversal in replaceReferences() or allow for chunking the update job (eg. by collection).

Dominant language
PHP
Stars
4.9k
Forks
647
Avg merge
1d 9h
Merged PRs (30d)
102

Getting set up

This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from statamic/cms

All issues in statamic/cms

Similar issues

More PHP issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.