10000 [Messenger] add handler description as array key to `HandlerFailedExc… · symfony/symfony@61a5a06 · GitHub
[go: up one dir, main page]

Skip to content

Commit 61a5a06

Browse files
committed
[Messenger] add handler description as array key to HandlerFailedException::getNestedExceptions()
1 parent 7d310a3 commit 61a5a06

File tree

4 files changed

+38
-4
lines changed

4 files changed

+38
-4
lines changed

src/Symfony/C 8000 omponent/Messenger/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ CHANGELOG
77
* Deprecate `StopWorkerOnSignalsListener` in favor of using the `SignalableCommandInterface`
88
* Add `HandlerDescriptor::getOptions`
99
* Add support for multiple Redis Sentinel hosts
10+
* Add handler description as array key to `HandlerFailedException::getNestedExceptions()`
1011

1112
6.3
1213
---

src/Symfony/Component/Messenger/Exception/HandlerFailedException.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class HandlerFailedException extends RuntimeException
1919
private Envelope $envelope;
2020

2121
/**
22-
* @param \Throwable[] $exceptions
22+
* @param array<string, \Throwable> $exceptions The name of the handler should be given as key
2323
*/
2424
public function __construct(Envelope $envelope, array $exceptions)
2525
{
@@ -46,7 +46,7 @@ public function getEnvelope(): Envelope
4646
}
4747

4848
/**
49-
* @return \Throwable[]
49+
* @return array<string, \Throwable> The name of the handler should be given as key
5050
*/
5151
public function getNestedExceptions(): array
5252
{

src/Symfony/Component/Messenger/Middleware/HandleMessageMiddleware.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ public function handle(Envelope $envelope, StackInterface $stack): Envelope
9595
$envelope = $envelope->with($handledStamp);
9696
$this->logger?->info('Message {class} handled by {handler}', $context + ['handler' => $handledStamp->getHandlerName()]);
9797
} catch (\Throwable $e) {
98-
$exceptions[] = $e;
98+
$exceptions[$handlerDescriptor->getName()] = $e;
9999
}
100100
}
101101

@@ -107,7 +107,7 @@ public function handle(Envelope $envelope, StackInterface $stack): Envelope
107107
$handler = $stamp->getHandlerDescriptor()->getBatchHandler();
108108
$handler->flush($flushStamp->force());
109109
} catch (\Throwable $e) {
110-
$exceptions[] = $e;
110+
$exceptions[$stamp->getHandlerDescriptor()->getName()] = $e;
111111
}
112112
}
113113
}

src/Symfony/Component/Messenger/Tests/Middleware/HandleMessageMiddlewareTest.php

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,31 @@ public function testItCallsTheHandlerAndNextMiddleware()
4747
$middleware->handle($envelope, $this->getStackMock());
4848
}
4949

50+
public function testItKeysTheHandlerFailedNestedExceptionsByHandlerDescription()
51+
{
52+
$message = new DummyMessage('Hey');
53+
$envelope = new Envelope($message);
54+
$handler = new FailingHandleMessageMiddlewareTestCallable();
55+
56+
$middleware = new HandleMessageMiddleware(new HandlersLocator([
57+
DummyMessage::class => [$handler],
58+
]));
59+
60+
try {
61+
$middleware->handle($envelope, $this->getStackMock(false));
62+
} catch (HandlerFailedException $e) {
63+
$key = (new HandlerDescriptor($handler))->getName();
64+
65+
$this->assertCount(1, $e->getNestedExceptions());
66+
$this->assertArrayHasKey($key, $e->getNestedExceptions());
67+
$this->assertSame('failed', $e->getNestedExceptions()[$key]->getMessage());
68+
69+
return;
70+
}
71+
72+
$this->fail('Exception not thrown.');
73+
}
74+
5075
/**
5176
* @dataProvider itAddsHandledStampsProvider
5277
*/
@@ -335,6 +360,14 @@ public function __invoke()
335360
}
336361
}
337362

363+
class FailingHandleMessageMiddlewareTestCallable
364+
{
365+
public function __invoke()
366+
{
367+
throw new \Exception('failed');
368+
}
369+
}
370+
338371
class HandleMessageMiddlewareNamedArgumentTestCallable
339372
{
340373
public function __invoke(object $message, $namedArgument)

0 commit comments

Comments
 (0)
0