String + Symfony Mailer causes circular reference for service 'entity_type.manager'

Created on 21 March 2025, 3 months ago

Problem/Motivation

After installing the dev version of the String module (while upgrading a project to Drupal 11), I encountered the following fatal error:

"Circular reference detected for service 'entity_type.manager', path: 'easy_email.purger β†’ entity_type.manager β†’ string_translation β†’ string_translator.string.defaults β†’ plugin.manager.email_builder'."

Steps to reproduce

  1. Install Drupal 11.
  2. Install and enable String 1.0.x-dev.
  3. Install and enable Symfony Mailer (any version compatible with Drupal 11β€”I tried versions 1.5, 1.6, and 2.0).
  4. Clear the cache. The error appears.
  5. Disable any of the modules, clear the cacheβ€”the error disappears.

I'm not sure if this is an issue with the String module, as similar issues have been reported for Symfony Mailer and were already fixed:
Issue #3355846 πŸ› Circular reference on multi-language sites Fixed
Issue #3370109 πŸ› Circular reference detected for service symfony mailer config override in multilingual sites Fixed

πŸ› Bug report
Status

Active

Version

1.0

Component

Code

Created by

πŸ‡ΊπŸ‡¦Ukraine Anna D

Live updates comments and jobs are added and updated live.
Sign in to follow issues

Comments & Activities

  • Issue created by @Anna D
  • πŸ‡©πŸ‡ͺGermany D34dMan Hamburg

    The following code $this->themeHandler->getThemeDirectories(); in a Plugin manager is calling \Drupal::service('config.factory')->get('core.extension') somewhere down the lane. This apparently is resulting in circular dependency error.

    I have not yet figured out how the circular dependency is getting generator. However, doing something like $a = \Drupal::service('config.factory')->get('core.extension'); in https://git.drupalcode.org/project/string/-/blob/1.0.x/src/StringManager... results in this error.

    Not sure what is happening here.

  • πŸ‡©πŸ‡ͺGermany D34dMan Hamburg
  • πŸ‡©πŸ‡ͺGermany D34dMan Hamburg

    This can be reproduced only when clearing cache using Drush. The error appears during alternate invocation of cache clear using drush. Probably some cache issue.

    Clearing cache using Drupal's User Interface doesn't have this issue.

  • πŸ‡©πŸ‡ͺGermany D34dMan Hamburg

    Update:
    The problem appears when running `updb` as well

    ddev drush updb --debug                                            
     [preflight] Config paths: /var/www/html/vendor/drush/drush/drush.yml
     [preflight] Alias paths: /var/www/html/web/drush/sites,/var/www/html/drush/sites
     [preflight] Commandfile search paths: /var/www/html/vendor/drush/drush/src
     [info] Starting bootstrap to full [1.15 sec, 3.27 MB]
     [info] Drush bootstrap phase 5 [1.16 sec, 3.27 MB]
     [info] Try to validate bootstrap phase 5 [1.16 sec, 3.27 MB]
     [info] Try to validate bootstrap phase 5 [1.16 sec, 3.27 MB]
     [info] Try to bootstrap at phase 5 [1.16 sec, 3.27 MB]
     [info] Drush bootstrap phase: bootstrapDrupalRoot() [1.16 sec, 3.27 MB]
     [info] Change working directory to /var/www/html/web [1.16 sec, 3.27 MB]
     [info] Initialized Drupal 10.4.6 root directory at /var/www/html/web [1.16 sec, 3.27 MB]
     [info] Try to validate bootstrap phase 5 [1.16 sec, 3.27 MB]
     [info] Try to bootstrap at phase 5 [1.16 sec, 3.39 MB]
     [info] Drush bootstrap phase: bootstrapDrupalSite() [1.16 sec, 3.39 MB]
     [debug] Could not find a Drush config file at sites/default/drush.yml. [1.16 sec, 3.5 MB]
     [info] Initialized Drupal site spar-lxp.ddev.site at sites/default [1.16 sec, 3.5 MB]
     [info] Try to validate bootstrap phase 5 [1.16 sec, 3.5 MB]
     [info] Try to bootstrap at phase 5 [1.16 sec, 3.5 MB]
     [info] Drush bootstrap phase: bootstrapDrupalConfiguration() [1.16 sec, 3.5 MB]
     [info] Try to validate bootstrap phase 5 [1.16 sec, 3.53 MB]
     [info] Try to bootstrap at phase 5 [1.18 sec, 3.68 MB]
     [info] Drush bootstrap phase: bootstrapDrupalDatabase() [1.18 sec, 3.68 MB]
     [info] Successfully connected to the Drupal database. [1.18 sec, 3.68 MB]
     [info] Try to validate bootstrap phase 5 [1.18 sec, 3.68 MB]
     [info] Try to bootstrap at phase 5 [1.18 sec, 3.68 MB]
     [info] Drush bootstrap phase: bootstrapDrupalFull() [1.18 sec, 3.68 MB]
     [debug] Start bootstrap of the Drupal Kernel. [1.18 sec, 3.68 MB]
     [debug] Get container builder [1.24 sec, 5.78 MB]
     [debug] Finished bootstrap of the Drupal Kernel. [1.81 sec, 16.01 MB]
     [debug] Loading drupal module drush commands & etc. [1.81 sec, 16.01 MB]
     [debug] Found drush.services.yml for default_content Drush commands [1.81 sec, 16.03 MB]
     [debug] Found drush.services.yml for key Drush commands [1.81 sec, 16.03 MB]
     [debug] Found drush.services.yml for token Drush commands [1.81 sec, 16.03 MB]
     [debug] Found drush.services.yml for ultimate_cron Drush commands [1.81 sec, 16.03 MB]
     [debug] Found drush.services.yml for votingapi Drush commands [1.81 sec, 16.03 MB]
    
    
    In Container.php line 222:
                                                                                                                                                
      [Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException]                                                       
      Circular reference detected for service "entity_type.manager", path: "entity_field.manager -> entity_type.manager -> plugin.manager.emai  
      l_builder -> entity_type.manager".                                                                                                        
                                                                                                                                                
    
    Exception trace:
      at /var/www/html/vendor/symfony/dependency-injection/Container.php:222
     Symfony\Component\DependencyInjection\Container::make() at /var/www/html/vendor/symfony/dependency-injection/Container.php:211
     Symfony\Component\DependencyInjection\Container->get() at /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php:547
     Symfony\Component\DependencyInjection\ContainerBuilder->doGet() at /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php:1258
     Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices() at /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php:1210
     Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices() at /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php:1110
     Symfony\Component\DependencyInjection\ContainerBuilder->createService() at /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php:586
     Symfony\Component\DependencyInjection\ContainerBuilder->doGet() at /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php:531
     Symfony\Component\DependencyInjection\ContainerBuilder->get() at /var/www/html/web/core/lib/Drupal.php:197
     Drupal::service() at /var/www/html/web/modules/contrib/symfony_mailer/src/Processor/MailerConfigOverride.php:90
     Drupal\symfony_mailer\Processor\MailerConfigOverride->buildCache() at /var/www/html/web/modules/contrib/symfony_mailer/src/Processor/MailerConfigOverride.php:52
     Drupal\symfony_mailer\Processor\MailerConfigOverride->loadOverrides() at /var/www/html/web/core/lib/Drupal/Core/Config/ConfigFactory.php:209
     Drupal\Core\Config\ConfigFactory->loadOverrides() at /var/www/html/web/core/lib/Drupal/Core/Config/ConfigFactory.php:169
     Drupal\Core\Config\ConfigFactory->doLoadMultiple() at /var/www/html/web/core/lib/Drupal/Core/Config/ConfigFactory.php:104
     Drupal\Core\Config\ConfigFactory->doGet() at /var/www/html/web/core/lib/Drupal/Core/Config/ConfigFactory.php:89
     Drupal\Core\Config\ConfigFactory->get() at /var/www/html/web/core/lib/Drupal/Core/Extension/ThemeHandler.php:70
     Drupal\Core\Extension\ThemeHandler->listInfo() at /var/www/html/web/core/lib/Drupal/Core/Extension/ThemeHandler.php:161
     Drupal\Core\Extension\ThemeHandler->getThemeDirectories() at /var/www/html/web/modules/contrib/string/src/StringManager.php:77
     Drupal\string\StringManager->getDiscovery() at /var/www/html/web/modules/contrib/string/src/StringManager.php:137
     Drupal\string\StringManager->findDefinitions() at /var/www/html/web/core/lib/Drupal/Core/Plugin/DefaultPluginManager.php:213
     Drupal\Core\Plugin\DefaultPluginManager->getDefinitions() at /var/www/html/web/modules/contrib/string/src/Translator/StringTranslationDefaults.php:55
     Drupal\string\Translator\StringTranslationDefaults->getDefaultValues() at /var/www/html/web/modules/contrib/string/src/Translator/StringTranslationDefaults.php:44
     Drupal\string\Translator\StringTranslationDefaults->__construct() at n/a:n/a
     ReflectionClass->newInstanceArgs() at /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php:1140
     Symfony\Component\DependencyInjection\ContainerBuilder->createService() at /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php:586
     Symfony\Component\DependencyInjection\ContainerBuilder->doGet() at /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php:1258
     Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices() at /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php:1210
     Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices() at /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php:1673
     Symfony\Component\DependencyInjection\ContainerBuilder->callMethod() at /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php:1166
     Symfony\Component\DependencyInjection\ContainerBuilder->createService() at /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php:586
     Symfony\Component\DependencyInjection\ContainerBuilder->doGet() at /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php:1258
     Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices() at /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php:1210
     Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices() at /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php:1110
     Symfony\Component\DependencyInjection\ContainerBuilder->createService() at /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php:586
     Symfony\Component\DependencyInjection\ContainerBuilder->doGet() at /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php:1258
     Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices() at /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php:1210
     Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices() at /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php:1110
     Symfony\Component\DependencyInjection\ContainerBuilder->createService() at /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php:586
     Symfony\Component\DependencyInjection\ContainerBuilder->doGet() at /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php:531
     Symfony\Component\DependencyInjection\ContainerBuilder->get() at /var/www/html/vendor/drush/drush/src/Runtime/LegacyServiceInstantiator.php:288
     Drush\Runtime\LegacyServiceInstantiator->resolveFromContainer() at /var/www/html/vendor/drush/drush/src/Runtime/LegacyServiceInstantiator.php:253
     Drush\Runtime\LegacyServiceInstantiator->resolveArgument() at n/a:n/a
     array_map() at /var/www/html/vendor/drush/drush/src/Runtime/LegacyServiceInstantiator.php:223
     Drush\Runtime\LegacyServiceInstantiator->resolveArguments() at /var/www/html/vendor/drush/drush/src/Runtime/LegacyServiceInstantiator.php:193
     Drush\Runtime\LegacyServiceInstantiator->instantiateObject() at /var/www/html/vendor/drush/drush/src/Runtime/LegacyServiceInstantiator.php:174
     Drush\Runtime\LegacyServiceInstantiator->create() at /var/www/html/vendor/drush/drush/src/Runtime/LegacyServiceInstantiator.php:128
     Drush\Runtime\LegacyServiceInstantiator->instantiateServices() at /var/www/html/vendor/drush/drush/src/Runtime/LegacyServiceInstantiator.php:60
     Drush\Runtime\LegacyServiceInstantiator->loadServiceFiles() at /var/www/html/vendor/drush/drush/src/Boot/DrupalBoot8.php:239
     Drush\Boot\DrupalBoot8->addDrupalModuleDrushCommands() at /var/www/html/vendor/drush/drush/src/Boot/DrupalBoot8.php:215
     Drush\Boot\DrupalBoot8->bootstrapDrupalFull() at /var/www/html/vendor/drush/drush/src/Boot/BootstrapManager.php:236
     Drush\Boot\BootstrapManager->doBootstrap() at /var/www/html/vendor/drush/drush/src/Boot/BootstrapManager.php:377
     Drush\Boot\BootstrapManager->bootstrapToPhaseIndex() at /var/www/html/vendor/drush/drush/src/Boot/BootstrapManager.php:329
     Drush\Boot\BootstrapManager->bootstrapToPhase() at /var/www/html/vendor/drush/drush/src/Boot/BootstrapHook.php:36
     Drush\Boot\BootstrapHook->initialize() at /var/www/html/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/InitializeHookDispatcher.php:44
     Consolidation\AnnotatedCommand\Hooks\Dispatchers\InitializeHookDispatcher->doInitializeHook() at /var/www/html/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/InitializeHookDispatcher.php:36
     Consolidation\AnnotatedCommand\Hooks\Dispatchers\InitializeHookDispatcher->callInitializeHook() at /var/www/html/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/InitializeHookDispatcher.php:29
     Consolidation\AnnotatedCommand\Hooks\Dispatchers\InitializeHookDispatcher->initialize() at /var/www/html/vendor/consolidation/annotated-command/src/CommandProcessor.php:145
     Consolidation\AnnotatedCommand\CommandProcessor->initializeHook() at /var/www/html/vendor/consolidation/annotated-command/src/AnnotatedCommand.php:376
     Consolidation\AnnotatedCommand\AnnotatedCommand->initialize() at /var/www/html/vendor/symfony/console/Command/Command.php:292
     Symfony\Component\Console\Command\Command->run() at /var/www/html/vendor/symfony/console/Application.php:1096
     Symfony\Component\Console\Application->doRunCommand() at /var/www/html/vendor/symfony/console/Application.php:324
     Symfony\Component\Console\Application->doRun() at /var/www/html/vendor/symfony/console/Application.php:175
     Symfony\Component\Console\Application->run() at /var/www/html/vendor/drush/drush/src/Runtime/Runtime.php:110
     Drush\Runtime\Runtime->doRun() at /var/www/html/vendor/drush/drush/src/Runtime/Runtime.php:40
     Drush\Runtime\Runtime->run() at /var/www/html/vendor/drush/drush/drush.php:139
     require() at /var/www/html/vendor/drush/drush/drush:4
     include() at /var/www/html/vendor/bin/drush:119
    
    

    This call seems to be causing the issue

     Drupal::service() at /var/www/html/web/modules/contrib/symfony_mailer/src/Processor/MailerConfigOverride.php:90
    

    The code at
    https://git.drupalcode.org/project/symfony_mailer/-/blob/1.x/src/Process...
    indicates by using \Drupal::service, the circular dependency should have been avoided.

          // We cannot use dependency injection because that creates a circular
          // dependency.
          /** @var \Drupal\symfony_mailer\Processor\EmailBuilderManagerInterface $builderManager */
          $builderManager = \Drupal::service('plugin.manager.email_builder');
    
  • πŸ‡©πŸ‡ͺGermany D34dMan Hamburg

    Attaching a temporary fix for those who wan't to unblock themselves

    • d34dman β†’ committed f78038a7 on 1.1.x
      Issue #3514618: Apply temporary fix to avoid site crashing when circular...
    • d34dman β†’ committed f78038a7 on 1.x
      Issue #3514618: Apply temporary fix to avoid site crashing when circular...
Production build 0.71.5 2024