Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 0d8f5fe

Browse files
Merge branch '4.3' into 4.4
* 4.3: fix tests [Validator] Added support for validation of giga values Fix Debug component tests [Messenger] fixed UnrecoverableExceptionInterface handling in Worker (fixes #32325) [Messenger] pass transport name to factory
2 parents edd4a74 + f805fe3 commit 0d8f5fe

File tree

6 files changed

+55
-5
lines changed

6 files changed

+55
-5
lines changed

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1742,7 +1742,7 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
17421742

17431743
$transportDefinition = (new Definition(TransportInterface::class))
17441744
->setFactory([new Reference('messenger.transport_factory'), 'createTransport'])
1745-
->setArguments([$transport['dsn'], $transport['options'], new Reference($serializerId)])
1745+
->setArguments([$transport['dsn'], $transport['options'] + ['transport_name' => $name], new Reference($serializerId)])
17461746
->addTag('messenger.receiver', ['alias' => $name])
17471747
;
17481748
$container->setDefinition($transportId = 'messenger.transport.'.$name, $transportDefinition);

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -706,7 +706,7 @@ public function testMessengerTransports()
706706
$this->assertEquals([new Reference('messenger.transport_factory'), 'createTransport'], $transportFactory);
707707
$this->assertCount(3, $transportArguments);
708708
$this->assertSame('amqp://localhost/%2f/messages?exchange_name=exchange_name', $transportArguments[0]);
709-
$this->assertEquals(['queue' => ['name' => 'Queue']], $transportArguments[1]);
709+
$this->assertEquals(['queue' => ['name' => 'Queue'], 'transport_name' => 'customised'], $transportArguments[1]);
710710
$this->assertEquals(new Reference('messenger.transport.native_php_serializer'), $transportArguments[2]);
711711

712712
$this->assertTrue($container->hasDefinition('messenger.transport.amqp.factory'));

src/Symfony/Component/Messenger/Tests/WorkerTest.php

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use Symfony\Component\Messenger\Event\WorkerMessageHandledEvent;
1818
use Symfony\Component\Messenger\Event\WorkerMessageReceivedEvent;
1919
use Symfony\Component\Messenger\Event\WorkerStoppedEvent;
20+
use Symfony\Component\Messenger\Exception\HandlerFailedException;
2021
use Symfony\Component\Messenger\Exception\UnrecoverableMessageHandlingException;
2122
use Symfony\Component\Messenger\MessageBusInterface;
2223
use Symfony\Component\Messenger\Retry\RetryStrategyInterface;
@@ -120,6 +121,37 @@ public function testDispatchCausesRetry()
120121
$this->assertSame(1, $receiver->getAcknowledgeCount());
121122
}
122123

124+
public function testUnrecoverableMessageHandlingExceptionPreventsRetries()
125+
{
126+
$envelope1 = new Envelope(new DummyMessage('Unwrapped Exception'), [new SentStamp('Some\Sender', 'transport1')]);
127+
$envelope2 = new Envelope(new DummyMessage('Wrapped Exception'), [new SentStamp('Some\Sender', 'transport1')]);
128+
129+
$receiver = new DummyReceiver([
130+
[$envelope1],
131+
[$envelope2],
132+
]);
133+
134+
$bus = $this->getMockBuilder(MessageBusInterface::class)->getMock();
135+
$bus->expects($this->at(0))->method('dispatch')->willThrowException(new UnrecoverableMessageHandlingException());
136+
$bus->expects($this->at(1))->method('dispatch')->willThrowException(
137+
new HandlerFailedException($envelope2, [new UnrecoverableMessageHandlingException()])
138+
);
139+
140+
$retryStrategy = $this->getMockBuilder(RetryStrategyInterface::class)->getMock();
141+
$retryStrategy->expects($this->never())->method('isRetryable')->willReturn(true);
142+
143+
$worker = new Worker(['transport1' => $receiver], $bus, ['transport1' => $retryStrategy]);
144+
$worker->run([], function (?Envelope $envelope) use ($worker) {
145+
// stop after the messages finish
146+
if (null === $envelope) {
147+
$worker->stop();
148+
}
149+
});
150+
151+
// message was rejected
152+
$this->assertSame(2, $receiver->getRejectCount());
153+
}
154+
123155
public function testDispatchCausesRejectWhenNoRetry()
124156
{
125157
$receiver = new DummyReceiver([

src/Symfony/Component/Messenger/Worker.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,20 @@ private function dispatchEvent($event)
190190

191191
private function shouldRetry(\Throwable $e, Envelope $envelope, RetryStrategyInterface $retryStrategy): bool
192192
{
193+
// if ALL nested Exceptions are an instance of UnrecoverableExceptionInterface we should not retry
194+
if ($e instanceof HandlerFailedException) {
195+
$shouldNotRetry = true;
196+
foreach ($e->getNestedExceptions() as $nestedException) {
197+
if (!$nestedException instanceof UnrecoverableExceptionInterface) {
198+
$shouldNotRetry = false;
199+
break;
200+
}
201+
}
202+
if ($shouldNotRetry) {
203+
return false;
204+
}
205+
}
206+
193207
if ($e instanceof UnrecoverableExceptionInterface) {
194208
return false;
195209
}

src/Symfony/Component/Validator/Constraints/File.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,10 @@ private function normalizeBinaryFormat($maxSize)
105105
$factors = [
106106
'k' => 1000,
107107
'ki' => 1 << 10,
108-
'm' => 1000000,
108+
'm' => 1000 * 1000,
109109
'mi' => 1 << 20,
110+
'g' => 1000 * 1000 * 1000,
111+
'gi' => 1 << 30,
110112
];
111113
if (ctype_digit((string) $maxSize)) {
112114
$this->maxSize = (int) $maxSize;

src/Symfony/Component/Validator/Tests/Constraints/FileTest.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,10 @@ public function provideValidSizes()
9797
['1MI', 1048576, true],
9898
['3m', 3000000, false],
9999
['3M', 3000000, false],
100+
['1gi', 1073741824, true],
101+
['1GI', 1073741824, true],
102+
['4g', 4000000000, false],
103+
['4G', 4000000000, false],
100104
];
101105
}
102106

@@ -107,8 +111,6 @@ public function provideInvalidSizes()
107111
['foo'],
108112
['1Ko'],
109113
['1kio'],
110-
['1G'],
111-
['1Gi'],
112114
];
113115
}
114116

0 commit comments

Comments
 (0)