Skip to content

Commit f3821df

Browse files
committed
✨ Implement resetting state interfaces from symfony/service-contracts and declare DI tags to ensure state resetted always, not only if event system properly handled it
1 parent d01c306 commit f3821df

File tree

10 files changed

+76
-14
lines changed

10 files changed

+76
-14
lines changed

composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414
"symfony/dependency-injection": "^4.4|^5.4|^6.0",
1515
"symfony/event-dispatcher": "^4.4|^5.4|^6.0",
1616
"symfony/http-kernel": "^4.4|^5.4|^6.0",
17-
"symfony/yaml": "^4.4|^5.4|^6.0"
17+
"symfony/yaml": "^4.4|^5.4|^6.0",
18+
"symfony/service-contracts": "^2|^3"
1819
},
1920
"minimum-stability": "dev",
2021
"prefer-stable": true

src/Bridge/BackgroundSpanHandler.php

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@
1212
use Jaeger\Tag\SpanKindServerTag;
1313
use Jaeger\Tracer\TracerInterface;
1414
use Symfony\Component\HttpFoundation\Request;
15+
use Symfony\Contracts\Service\ResetInterface;
1516

16-
class BackgroundSpanHandler
17+
class BackgroundSpanHandler implements ResetInterface
1718
{
1819
private ?SpanInterface $span = null;
1920

@@ -47,8 +48,13 @@ public function flush(): BackgroundSpanHandler
4748
return $this;
4849
}
4950
$this->span->finish();
50-
$this->span = null;
51+
$this->reset();
5152

5253
return $this;
5354
}
55+
56+
public function reset(): void
57+
{
58+
$this->span = null;
59+
}
5460
}

src/Bridge/MainSpanHandler.php

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@
1212
use Jaeger\Tag\SpanKindServerTag;
1313
use Jaeger\Tracer\TracerInterface;
1414
use Symfony\Component\HttpFoundation\Request;
15+
use Symfony\Contracts\Service\ResetInterface;
1516

16-
class MainSpanHandler
17+
class MainSpanHandler implements ResetInterface
1718
{
1819
/**
1920
* @var Span
@@ -72,6 +73,12 @@ public function flush(): void
7273
return;
7374
}
7475
$this->span->finish((int)$this->durationUsec);
75-
$this->span = $this->durationUsec = null;
76+
$this->reset();
77+
}
78+
79+
public function reset(): void
80+
{
81+
$this->span = null;
82+
$this->durationUsec = null;
7683
}
7784
}

src/Context/Extractor/HeaderContextExtractor.php

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@
1010
use Symfony\Component\HttpKernel\Event\KernelEvent;
1111
use Symfony\Component\HttpKernel\Event\RequestEvent;
1212
use Symfony\Component\HttpKernel\Event\TerminateEvent;
13+
use Symfony\Contracts\Service\ResetInterface;
1314

14-
class HeaderContextExtractor implements ContextExtractorInterface, EventSubscriberInterface
15+
class HeaderContextExtractor implements ContextExtractorInterface, EventSubscriberInterface, ResetInterface
1516
{
1617
/**
1718
* @var CodecInterface[]
@@ -49,7 +50,8 @@ public function onTerminate(TerminateEvent $event): void
4950
if (false === $this->isMainRequestEvent($event)) {
5051
return;
5152
}
52-
$this->context = null;
53+
54+
$this->reset();
5355
}
5456

5557
public function onRequest(RequestEvent $event): void
@@ -79,4 +81,9 @@ private function isMainRequestEvent(KernelEvent $event): bool
7981

8082
return $event->isMasterRequest();
8183
}
84+
85+
public function reset(): void
86+
{
87+
$this->context = null;
88+
}
8289
}

src/Debug/Extractor/CookieDebugExtractor.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@
77
use Symfony\Component\HttpKernel\Event\KernelEvent;
88
use Symfony\Component\HttpKernel\Event\RequestEvent;
99
use Symfony\Component\HttpKernel\Event\TerminateEvent;
10+
use Symfony\Contracts\Service\ResetInterface;
1011

11-
class CookieDebugExtractor implements DebugExtractorInterface, EventSubscriberInterface
12+
class CookieDebugExtractor implements DebugExtractorInterface, EventSubscriberInterface, ResetInterface
1213
{
1314
private $debugId = '';
1415

@@ -36,6 +37,12 @@ public function onTerminate(TerminateEvent $event): void
3637
if (false === $this->isMainRequestEvent($event)) {
3738
return;
3839
}
40+
41+
$this->reset();
42+
}
43+
44+
public function reset(): void
45+
{
3946
$this->debugId = '';
4047
}
4148

src/Debug/Extractor/EnvDebugExtractor.php

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55

66
use Symfony\Component\Console\ConsoleEvents;
77
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
8+
use Symfony\Contracts\Service\ResetInterface;
89

9-
class EnvDebugExtractor implements DebugExtractorInterface, EventSubscriberInterface
10+
class EnvDebugExtractor implements DebugExtractorInterface, EventSubscriberInterface, ResetInterface
1011
{
1112
private $envName;
1213

@@ -27,11 +28,16 @@ public static function getSubscribedEvents(): array
2728

2829
public function onTerminate()
2930
{
30-
$this->debugId = '';
31+
$this->reset();
3132

3233
return $this;
3334
}
3435

36+
public function reset(): void
37+
{
38+
$this->debugId = '';
39+
}
40+
3541
public function getDebug(): string
3642
{
3743
return $this->debugId;

src/Name/Generator/ControllerNameGenerator.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@
66
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
77
use Symfony\Component\HttpKernel\Event\RequestEvent;
88
use Symfony\Component\HttpKernel\Event\TerminateEvent;
9+
use Symfony\Contracts\Service\ResetInterface;
910

10-
class ControllerNameGenerator implements NameGeneratorInterface, EventSubscriberInterface
11+
class ControllerNameGenerator implements NameGeneratorInterface, EventSubscriberInterface, ResetInterface
1112
{
1213
private string $controller = '';
1314

@@ -26,6 +27,11 @@ public function onRequest(RequestEvent $event): void
2627
}
2728

2829
public function onTerminate(): void
30+
{
31+
$this->reset();
32+
}
33+
34+
public function reset(): void
2935
{
3036
$this->controller = '';
3137
}

src/Name/Generator/DefaultNameGenerator.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@
88
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
99
use Symfony\Component\HttpKernel\Event\RequestEvent;
1010
use Symfony\Component\HttpKernel\Event\TerminateEvent;
11+
use Symfony\Contracts\Service\ResetInterface;
1112

12-
class DefaultNameGenerator implements NameGeneratorInterface, EventSubscriberInterface
13+
class DefaultNameGenerator implements NameGeneratorInterface, EventSubscriberInterface, ResetInterface
1314
{
1415
private string $name = '';
1516

@@ -48,6 +49,11 @@ public function onRequest(RequestEvent $event): void
4849
}
4950

5051
public function onTerminate(): void
52+
{
53+
$this->reset();
54+
}
55+
56+
public function reset(): void
5157
{
5258
$this->name = '';
5359
}

src/Name/Generator/RequestNameGenerator.php

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@
66
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
77
use Symfony\Component\HttpKernel\Event\RequestEvent;
88
use Symfony\Component\HttpKernel\Event\TerminateEvent;
9+
use Symfony\Contracts\Service\ResetInterface;
910

10-
class RequestNameGenerator implements NameGeneratorInterface, EventSubscriberInterface
11+
class RequestNameGenerator implements NameGeneratorInterface, EventSubscriberInterface, ResetInterface
1112
{
1213
/**
1314
* @var NameGeneratorInterface[] Key - regexp, value - name generator
@@ -47,11 +48,16 @@ public function onRequest(RequestEvent $event): void
4748

4849
public function onTerminate(): RequestNameGenerator
4950
{
50-
$this->route = '';
51+
$this->reset();
5152

5253
return $this;
5354
}
5455

56+
public function reset(): void
57+
{
58+
$this->route = '';
59+
}
60+
5561
public function generate(): string
5662
{
5763
foreach ($this->generators as $regexp => $generator) {

src/Resources/services.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ services:
103103
tags:
104104
- {name: 'kernel.event_subscriber' }
105105
- {name: 'jaeger.context.extractor'}
106+
- {name: 'kernel.reset', method: 'reset'}
106107
jaeger.context.extractor.chain:
107108
class: Jaeger\Symfony\Context\Extractor\ContextExtractorChain
108109
arguments:
@@ -116,13 +117,15 @@ services:
116117
tags:
117118
- {name: 'kernel.event_subscriber' }
118119
- {name: 'jaeger.debug.extractor'}
120+
- {name: 'kernel.reset', method: 'reset'}
119121
jaeger.debug.extractor.cookie:
120122
class: Jaeger\Symfony\Debug\Extractor\CookieDebugExtractor
121123
arguments:
122124
- '%env(JAEGER_DEBUG_COOKIE)%'
123125
tags:
124126
- {name: 'kernel.event_subscriber' }
125127
- {name: 'jaeger.debug.extractor'}
128+
- {name: 'kernel.reset', method: 'reset'}
126129
jaeger.debug.extractor.chain:
127130
class: Jaeger\Symfony\Debug\Extractor\DebugExtractorChain
128131
arguments:
@@ -133,16 +136,19 @@ services:
133136
class: Jaeger\Symfony\Name\Generator\ControllerNameGenerator
134137
tags:
135138
- {name: 'kernel.event_subscriber' }
139+
- {name: 'kernel.reset', method: 'reset'}
136140
jaeger.name.generator.default:
137141
class: Jaeger\Symfony\Name\Generator\DefaultNameGenerator
138142
tags:
139143
- {name: 'kernel.event_subscriber' }
140144
- {name: 'jaeger.name.generator', priority: -16384}
145+
- {name: 'kernel.reset', method: 'reset'}
141146
jaeger.name.generator.request:
142147
class: Jaeger\Symfony\Name\Generator\RequestNameGenerator
143148
tags:
144149
- {name: 'kernel.event_subscriber' }
145150
- {name: 'jaeger.name.generator', priority: -1024}
151+
- {name: 'kernel.reset', method: 'reset'}
146152
jaeger.name.generator.command:
147153
class: Jaeger\Symfony\Name\Generator\CommandNameGenerator
148154
tags:
@@ -157,9 +163,13 @@ services:
157163
jaeger.span.handler.background:
158164
class: Jaeger\Symfony\Bridge\BackgroundSpanHandler
159165
arguments: ['@jaeger.tracer']
166+
tags:
167+
- { name: 'kernel.reset', method: 'reset' }
160168
jaeger.span.handler.main:
161169
class: Jaeger\Symfony\Bridge\MainSpanHandler
162170
arguments: ['@jaeger.tracer', '@jaeger.name.generator']
171+
tags:
172+
- { name: 'kernel.reset', method: 'reset' }
163173
jaeger.span.handler.global: '@jaeger.span.handler.main'
164174
jaeger.debug.listener:
165175
class: Jaeger\Symfony\Bridge\DebugListener

0 commit comments

Comments
 (0)