Possible recursion when clearing caches from the UI

Problem statement The cache metrics module uses the current user's username in its metrics.

However, this requires the entity types to be discovered. Calling into the $this->currentUser->getAccountName() with an empty entity-type cache, will attempt discovery. This in term will attempt a cache get. Which will attempt to get the username, which will attempt discovery and so on.

In my setup this leads to recursion.

Steps to reproduce Clear the cache from the UI at admin/config/development/performance

Stack trace

Drupal\Core\Cache\ChainedFastBackend->getMultiple() (Line: 103)
Drupal\Core\Cache\ChainedFastBackend->get() (Line: 37)
Drupal\Core\Plugin\DefaultPluginManager->cacheGet() (Line: 207)
Drupal\Core\Plugin\DefaultPluginManager->getCachedDefinitions() (Line: 173)
Drupal\Core\Plugin\DefaultPluginManager->getDefinitions() (Line: 22)
Drupal\Core\Plugin\DefaultPluginManager->getDefinition() (Line: 143)
Drupal\Core\Entity\EntityTypeManager->getDefinition() (Line: 269)
Drupal\Core\Entity\EntityTypeManager->getHandler() (Line: 208)
Drupal\Core\Entity\EntityTypeManager->getStorage() (Line: 202)
Drupal\Core\Session\AccountProxy->loadUserEntity() (Line: 77)
Drupal\Core\Session\AccountProxy->getAccount() (Line: 140)
Drupal\Core\Session\AccountProxy->getAccountName() (Line: 83)
Drupal\cache_metrics\CacheBackendWrapper->get() (Line: 292)
Drupal\Core\Extension\ModuleHandler->getHookInfo() (Line: 625)
Drupal\Core\Extension\ModuleHandler->buildImplementationInfo() (Line: 590)
Drupal\Core\Extension\ModuleHandler->getImplementationInfo() (Line: 328)
Drupal\Core\Extension\ModuleHandler->getImplementations() (Line: 127)
Drupal\Core\Entity\EntityTypeManager->findDefinitions() (Line: 175)
Drupal\Core\Plugin\DefaultPluginManager->getDefinitions() (Line: 22)
Drupal\Core\Plugin\DefaultPluginManager->getDefinition() (Line: 143)
Drupal\Core\Entity\EntityTypeManager->getDefinition() (Line: 269)
Drupal\Core\Entity\EntityTypeManager->getHandler() (Line: 208)
Drupal\Core\Entity\EntityTypeManager->getStorage() (Line: 202)
Drupal\Core\Session\AccountProxy->loadUserEntity() (Line: 77)
Drupal\Core\Session\AccountProxy->getAccount() (Line: 140)
Drupal\Core\Session\AccountProxy->getAccountName() (Line: 83)
Drupal\cache_metrics\CacheBackendWrapper->get() (Line: 292)
Drupal\Core\Extension\ModuleHandler->getHookInfo() (Line: 625)
Drupal\Core\Extension\ModuleHandler->buildImplementationInfo() (Line: 590)
Drupal\Core\Extension\ModuleHandler->getImplementationInfo() (Line: 328)
Drupal\Core\Extension\ModuleHandler->getImplementations() (Line: 127)
Drupal\Core\Entity\EntityTypeManager->findDefinitions() (Line: 175)
Drupal\Core\Plugin\DefaultPluginManager->getDefinitions() (Line: 22)
Drupal\Core\Plugin\DefaultPluginManager->getDefinition() (Line: 143)
Drupal\Core\Entity\EntityTypeManager->getDefinition() (Line: 269)
Drupal\Core\Entity\EntityTypeManager->getHandler() (Line: 208)
Drupal\Core\Entity\EntityTypeManager->getStorage() (Line: 202)
Drupal\Core\Session\AccountProxy->loadUserEntity() (Line: 77)
Drupal\Core\Session\AccountProxy->getAccount() (Line: 140)
Drupal\Core\Session\AccountProxy->getAccountName() (Line: 83)
Drupal\cache_metrics\CacheBackendWrapper->get() (Line: 292)
Drupal\Core\Extension\ModuleHandler->getHookInfo() (Line: 625)
Drupal\Core\Extension\ModuleHandler->buildImplementationInfo() (Line: 590)
Drupal\Core\Extension\ModuleHandler->getImplementationInfo() (Line: 328)
Drupal\Core\Extension\ModuleHandler->getImplementations() (Line: 127)
Drupal\Core\Entity\EntityTypeManager->findDefinitions() (Line: 175)
Drupal\Core\Plugin\DefaultPluginManager->getDefinitions() (Line: 22)
Drupal\Core\Plugin\DefaultPluginManager->getDefinition() (Line: 143)
Drupal\Core\Entity\EntityTypeManager->getDefinition() (Line: 269)
Drupal\Core\Entity\EntityTypeManager->getHandler() (Line: 208)
Drupal\Core\Entity\EntityTypeManager->getStorage() (Line: 202)
Drupal\Core\Session\AccountProxy->loadUserEntity() (Line: 77)
Drupal\Core\Session\AccountProxy->getAccount() (Line: 140)
Drupal\Core\Session\AccountProxy->getAccountName() (Line: 83)
Drupal\cache_metrics\CacheBackendWrapper->get() (Line: 292)
Drupal\Core\Extension\ModuleHandler->getHookInfo() (Line: 625)
Drupal\Core\Extension\ModuleHandler->buildImplementationInfo() (Line: 590)
Drupal\Core\Extension\ModuleHandler->getImplementationInfo() (Line: 328)
Drupal\Core\Extension\ModuleHandler->getImplementations() (Line: 127)
Drupal\Core\Entity\EntityTypeManager->findDefinitions() (Line: 175)
Drupal\Core\Plugin\DefaultPluginManager->getDefinitions() (Line: 22)
Drupal\Core\Plugin\DefaultPluginManager->getDefinition() (Line: 143)
Drupal\Core\Entity\EntityTypeManager->getDefinition() (Line: 269)
Drupal\Core\Entity\EntityTypeManager->getHandler() (Line: 208)
Drupal\Core\Entity\EntityTypeManager->getStorage() (Line: 202)
Drupal\Core\Session\AccountProxy->loadUserEntity() (Line: 77)
Drupal\Core\Session\AccountProxy->getAccount() (Line: 140)
Drupal\Core\Session\AccountProxy->getAccountName() (Line: 83)
Drupal\cache_metrics\CacheBackendWrapper->get() (Line: 292)
Drupal\Core\Extension\ModuleHandler->getHookInfo() (Line: 625)
Drupal\Core\Extension\ModuleHandler->buildImplementationInfo() (Line: 590)
Drupal\Core\Extension\ModuleHandler->getImplementationInfo() (Line: 328)
Drupal\Core\Extension\ModuleHandler->getImplementations() (Line: 127)
Drupal\Core\Entity\EntityTypeManager->findDefinitions() (Line: 175)
Drupal\Core\Plugin\DefaultPluginManager->getDefinitions() (Line: 22)
Drupal\Core\Plugin\DefaultPluginManager->getDefinition() (Line: 143)
Drupal\Core\Entity\EntityTypeManager->getDefinition() (Line: 269)
Drupal\Core\Entity\EntityTypeManager->getHandler() (Line: 208)
Drupal\Core\Entity\EntityTypeManager->getStorage() (Line: 202)
Drupal\Core\Session\AccountProxy->loadUserEntity() (Line: 77)
Drupal\Core\Session\AccountProxy->getAccount() (Line: 140)
Drupal\Core\Session\AccountProxy->getAccountName() (Line: 83)
Drupal\cache_metrics\CacheBackendWrapper->get() (Line: 292)
Drupal\Core\Extension\ModuleHandler->getHookInfo() (Line: 625)
Drupal\Core\Extension\ModuleHandler->buildImplementationInfo() (Line: 590)
Drupal\Core\Extension\ModuleHandler->getImplementationInfo() (Line: 328)
Drupal\Core\Extension\ModuleHandler->getImplementations() (Line: 127)
Drupal\Core\Entity\EntityTypeManager->findDefinitions() (Line: 175)
Drupal\Core\Plugin\DefaultPluginManager->getDefinitions() (Line: 22)
Drupal\Core\Plugin\DefaultPluginManager->getDefinition() (Line: 143)
Drupal\Core\Entity\EntityTypeManager->getDefinition() (Line: 269)
Drupal\Core\Entity\EntityTypeManager->getHandler() (Line: 208)
Drupal\Core\Entity\EntityTypeManager->getStorage() (Line: 202)
Drupal\Core\Session\AccountProxy->loadUserEntity() (Line: 77)
Drupal\Core\Session\AccountProxy->getAccount() (Line: 140)
Drupal\Core\Session\AccountProxy->getAccountName() (Line: 83)
Drupal\cache_metrics\CacheBackendWrapper->get() (Line: 292)
Drupal\Core\Extension\ModuleHandler->getHookInfo() (Line: 625)
Drupal\Core\Extension\ModuleHandler->buildImplementationInfo() (Line: 590)
Drupal\Core\Extension\ModuleHandler->getImplementationInfo() (Line: 328)
Drupal\Core\Extension\ModuleHandler->getImplementations() (Line: 127)
Drupal\Core\Entity\EntityTypeManager->findDefinitions() (Line: 175)
Drupal\Core\Plugin\DefaultPluginManager->getDefinitions() (Line: 22)
Drupal\Core\Plugin\DefaultPluginManager->getDefinition() (Line: 143)
Drupal\Core\Entity\EntityTypeManager->getDefinition() (Line: 269)
Drupal\Core\Entity\EntityTypeManager->getHandler() (Line: 208)
Drupal\Core\Entity\EntityTypeManager->getStorage() (Line: 202)
Drupal\Core\Session\AccountProxy->loadUserEntity() (Line: 77)
Drupal\Core\Session\AccountProxy->getAccount() (Line: 140)
Drupal\Core\Session\AccountProxy->getAccountName() (Line: 83)
Drupal\cache_metrics\CacheBackendWrapper->get() (Line: 292)
Drupal\Core\Extension\ModuleHandler->getHookInfo() (Line: 625)
Drupal\Core\Extension\ModuleHandler->buildImplementationInfo() (Line: 590)
Drupal\Core\Extension\ModuleHandler->getImplementationInfo() (Line: 328)
Drupal\Core\Extension\ModuleHandler->getImplementations() (Line: 127)
Drupal\Core\Entity\EntityTypeManager->findDefinitions() (Line: 175)
Drupal\Core\Plugin\DefaultPluginManager->getDefinitions() (Line: 22)
Drupal\Core\Plugin\DefaultPluginManager->getDefinition() (Line: 143)
Drupal\Core\Entity\EntityTypeManager->getDefinition() (Line: 269)
Drupal\Core\Entity\EntityTypeManager->getHandler() (Line: 208)
Drupal\Core\Entity\EntityTypeManager->getStorage() (Line: 202)
Drupal\Core\Session\AccountProxy->loadUserEntity() (Line: 77)
Drupal\Core\Session\AccountProxy->getAccount() (Line: 140)
Drupal\Core\Session\AccountProxy->getAccountName() (Line: 83)
Drupal\cache_metrics\CacheBackendWrapper->get() (Line: 292)
Drupal\Core\Extension\ModuleHandler->getHookInfo() (Line: 625)
Drupal\Core\Extension\ModuleHandler->buildImplementationInfo() (Line: 590)
Drupal\Core\Extension\ModuleHandler->getImplementationInfo() (Line: 328)
Drupal\Core\Extension\ModuleHandler->getImplementations() (Line: 127)
Drupal\Core\Entity\EntityTypeManager->findDefinitions() (Line: 175)
Drupal\Core\Plugin\DefaultPluginManager->getDefinitions() (Line: 22)
Drupal\Core\Plugin\DefaultPluginManager->getDefinition() (Line: 143)
Drupal\Core\Entity\EntityTypeManager->getDefinition() (Line: 269)
Drupal\Core\Entity\EntityTypeManager->getHandler() (Line: 208)
Drupal\Core\Entity\EntityTypeManager->getStorage() (Line: 202)
Drupal\Core\Session\AccountProxy->loadUserEntity() (Line: 77)
Drupal\Core\Session\AccountProxy->getAccount() (Line: 140)
Drupal\Core\Session\AccountProxy->getAccountName() (Line: 83)
Drupal\cache_metrics\CacheBackendWrapper->get() (Line: 292)
Drupal\Core\Extension\ModuleHandler->getHookInfo() (Line: 625)
Drupal\Core\Extension\ModuleHandler->buildImplementationInfo() (Line: 590)
Drupal\Core\Extension\ModuleHandler->getImplementationInfo() (Line: 328)
Drupal\Core\Extension\ModuleHandler->getImplementations() (Line: 127)
Drupal\Core\Entity\EntityTypeManager->findDefinitions() (Line: 175)
Drupal\Core\Plugin\DefaultPluginManager->getDefinitions() (Line: 22)
Drupal\Core\Plugin\DefaultPluginManager->getDefinition() (Line: 143)
Drupal\Core\Entity\EntityTypeManager->getDefinition() (Line: 269)
Drupal\Core\Entity\EntityTypeManager->getHandler() (Line: 208)
Drupal\Core\Entity\EntityTypeManager->getStorage() (Line: 202)
Drupal\Core\Session\AccountProxy->loadUserEntity() (Line: 77)
Drupal\Core\Session\AccountProxy->getAccount() (Line: 140)
Drupal\Core\Session\AccountProxy->getAccountName() (Line: 83)
Drupal\cache_metrics\CacheBackendWrapper->get() (Line: 292)
Drupal\Core\Extension\ModuleHandler->getHookInfo() (Line: 625)
Drupal\Core\Extension\ModuleHandler->buildImplementationInfo() (Line: 590)
Drupal\Core\Extension\ModuleHandler->getImplementationInfo() (Line: 328)
Drupal\Core\Extension\ModuleHandler->getImplementations() (Line: 127)
Drupal\Core\Entity\EntityTypeManager->findDefinitions() (Line: 175)
Drupal\Core\Plugin\DefaultPluginManager->getDefinitions() (Line: 22)
Drupal\Core\Plugin\DefaultPluginManager->getDefinition() (Line: 143)
Drupal\Core\Entity\EntityTypeManager->getDefinition() (Line: 269)
Drupal\Core\Entity\EntityTypeManager->getHandler() (Line: 208)
Drupal\Core\Entity\EntityTypeManager->getStorage() (Line: 202)
Drupal\Core\Session\AccountProxy->loadUserEntity() (Line: 77)
Drupal\Core\Session\AccountProxy->getAccount() (Line: 140)
Drupal\Core\Session\AccountProxy->getAccountName() (Line: 83)
Drupal\cache_metrics\CacheBackendWrapper->get() (Line: 292)
Drupal\Core\Extension\ModuleHandler->getHookInfo() (Line: 625)
Drupal\Core\Extension\ModuleHandler->buildImplementationInfo() (Line: 590)
Drupal\Core\Extension\ModuleHandler->getImplementationInfo() (Line: 328)
Drupal\Core\Extension\ModuleHandler->getImplementations() (Line: 127)
Drupal\Core\Entity\EntityTypeManager->findDefinitions() (Line: 175)
Drupal\Core\Plugin\DefaultPluginManager->getDefinitions() (Line: 22)
Drupal\Core\Plugin\DefaultPluginManager->getDefinition() (Line: 143)
Drupal\Core\Entity\EntityTypeManager->getDefinition() (Line: 269)
Drupal\Core\Entity\EntityTypeManager->getHandler() (Line: 208)
Drupal\Core\Entity\EntityTypeManager->getStorage() (Line: 202)
Drupal\Core\Session\AccountProxy->loadUserEntity() (Line: 77)
Drupal\Core\Session\AccountProxy->getAccount() (Line: 140)
Drupal\Core\Session\AccountProxy->getAccountName() (Line: 83)
Drupal\cache_metrics\CacheBackendWrapper->get() (Line: 292)
Drupal\Core\Extension\ModuleHandler->getHookInfo() (Line: 625)
Drupal\Core\Extension\ModuleHandler->buildImplementationInfo() (Line: 590)
Drupal\Core\Extension\ModuleHandler->getImplementationInfo() (Line: 328)
Drupal\Core\Extension\ModuleHandler->getImplementations() (Line: 127)
Drupal\Core\Entity\EntityTypeManager->findDefinitions() (Line: 175)
Drupal\Core\Plugin\DefaultPluginManager->getDefinitions() (Line: 22)
Drupal\Core\Plugin\DefaultPluginManager->getDefinition() (Line: 143)
Drupal\Core\Entity\EntityTypeManager->getDefinition() (Line: 269)
Drupal\Core\Entity\EntityTypeManager->getHandler() (Line: 208)
Drupal\Core\Entity\EntityTypeManager->getStorage() (Line: 202)
Drupal\Core\Session\AccountProxy->loadUserEntity() (Line: 77)
Drupal\Core\Session\AccountProxy->getAccount() (Line: 140)
Drupal\Core\Session\AccountProxy->getAccountName() (Line: 83)
Drupal\cache_metrics\CacheBackendWrapper->get() (Line: 292)
Drupal\Core\Extension\ModuleHandler->getHookInfo() (Line: 625)
Drupal\Core\Extension\ModuleHandler->buildImplementationInfo() (Line: 590)
Drupal\Core\Extension\ModuleHandler->getImplementationInfo() (Line: 328)
Drupal\Core\Extension\ModuleHandler->getImplementations() (Line: 127)
Drupal\Core\Entity\EntityTypeManager->findDefinitions() (Line: 175)
Drupal\Core\Plugin\DefaultPluginManager->getDefinitions() (Line: 22)
Drupal\Core\Plugin\DefaultPluginManager->getDefinition() (Line: 143)
Drupal\Core\Entity\EntityTypeManager->getDefinition() (Line: 269)
Drupal\Core\Entity\EntityTypeManager->getHandler() (Line: 208)
Drupal\Core\Entity\EntityTypeManager->getStorage() (Line: 202)
Drupal\Core\Session\AccountProxy->loadUserEntity() (Line: 77)
Drupal\Core\Session\AccountProxy->getAccount() (Line: 140)
Drupal\Core\Session\AccountProxy->getAccountName() (Line: 83)
Drupal\cache_metrics\CacheBackendWrapper->get() (Line: 292)
Drupal\Core\Extension\ModuleHandler->getHookInfo() (Line: 625)
Drupal\Core\Extension\ModuleHandler->buildImplementationInfo() (Line: 590)
Drupal\Core\Extension\ModuleHandler->getImplementationInfo() (Line: 328)
Drupal\Core\Extension\ModuleHandler->getImplementations() (Line: 127)
Drupal\Core\Entity\EntityTypeManager->findDefinitions() (Line: 175)
Drupal\Core\Plugin\DefaultPluginManager->getDefinitions() (Line: 22)
Drupal\Core\Plugin\DefaultPluginManager->getDefinition() (Line: 143)
Drupal\Core\Entity\EntityTypeManager->getDefinition() (Line: 269)
Drupal\Core\Entity\EntityTypeManager->getHandler() (Line: 208)
Drupal\Core\Entity\EntityTypeManager->getStorage() (Line: 202)
Drupal\Core\Session\AccountProxy->loadUserEntity() (Line: 77)
Drupal\Core\Session\AccountProxy->getAccount() (Line: 140)
Drupal\Core\Session\AccountProxy->getAccountName() (Line: 83)
Drupal\cache_metrics\CacheBackendWrapper->get() (Line: 292)
Drupal\Core\Extension\ModuleHandler->getHookInfo() (Line: 625)
Drupal\Core\Extension\ModuleHandler->buildImplementationInfo() (Line: 590)
Drupal\Core\Extension\ModuleHandler->getImplementationInfo() (Line: 328)
Drupal\Core\Extension\ModuleHandler->getImplementations() (Line: 127)
Drupal\Core\Entity\EntityTypeManager->findDefinitions() (Line: 175)
Drupal\Core\Plugin\DefaultPluginManager->getDefinitions() (Line: 22)
Drupal\Core\Plugin\DefaultPluginManager->getDefinition() (Line: 143)
Drupal\Core\Entity\EntityTypeManager->getDefinition() (Line: 269)
Drupal\Core\Entity\EntityTypeManager->getHandler() (Line: 208)
Drupal\Core\Entity\EntityTypeManager->getStorage() (Line: 202)
Drupal\Core\Session\AccountProxy->loadUserEntity() (Line: 77)
Drupal\Core\Session\AccountProxy->getAccount() (Line: 140)
Drupal\Core\Session\AccountProxy->getAccountName() (Line: 83)
Drupal\cache_metrics\CacheBackendWrapper->get() (Line: 581)
Drupal\Core\Extension\ModuleHandler->getImplementationInfo() (Line: 328)
Drupal\Core\Extension\ModuleHandler->getImplementations() (Line: 400)
Drupal\Core\Extension\ModuleHandler->invokeAll() (Line: 570)
drupal_flush_all_caches() (Line: 205)