getParameter('sentry.tracing.cache.enabled')) { return; } foreach ($container->findTaggedServiceIds('cache.pool') as $serviceId => $tags) { $cachePoolDefinition = $container->getDefinition($serviceId); if ($cachePoolDefinition->isAbstract()) { continue; } $definitionClass = $this->resolveDefinitionClass($container, $cachePoolDefinition); if (null === $definitionClass) { continue; } if (is_subclass_of($definitionClass, TagAwareAdapterInterface::class)) { $traceableCachePoolDefinition = new ChildDefinition('sentry.tracing.traceable_tag_aware_cache_adapter'); } else { $traceableCachePoolDefinition = new ChildDefinition('sentry.tracing.traceable_cache_adapter'); } $traceableCachePoolDefinition->setDecoratedService($serviceId); $traceableCachePoolDefinition->replaceArgument(1, new Reference($serviceId . '.traceable.inner')); $container->setDefinition($serviceId . '.traceable', $traceableCachePoolDefinition); } } private function resolveDefinitionClass(ContainerBuilder $container, Definition $definition): ?string { $class = $definition->getClass(); while (null === $class && $definition instanceof ChildDefinition) { $definition = $container->findDefinition($definition->getParent()); $class = $definition->getClass(); } return $class; } }