Skip to content

Commit acfe3b4

Browse files
Merge branch '5.4' into 6.0
* 5.4: [PhpUnitBridge] Fix test [RateLimiter] Add typecase to SlidingWindow::getExpirationTime Bump Symfony version to 5.4.8 Update VERSION for 5.4.7 Update CHANGELOG for 5.4.7 Bump Symfony version to 4.4.41 Update VERSION for 4.4.40 Update CONTRIBUTORS for 4.4.40 Update CHANGELOG for 4.4.40 [Messenger] reset connection on worker shutdown reset Twig form theme resources between requests
2 parents 3d1b9ce + d540d98 commit acfe3b4

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

Tests/WorkerTest.php

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
use Symfony\Component\Messenger\Transport\Receiver\ReceiverInterface;
4141
use Symfony\Component\Messenger\Worker;
4242
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
43+
use Symfony\Contracts\Service\ResetInterface;
4344

4445
/**
4546
* @group time-sensitive
@@ -98,6 +99,19 @@ public function testHandlingErrorCausesReject()
9899
$this->assertSame(0, $receiver->getAcknowledgeCount());
99100
}
100101

102+
public function testWorkerResetsConnectionIfReceiverIsResettable()
103+
{
104+
$resettableReceiver = new ResettableDummyReceiver([]);
105+
106+
$bus = $this->createMock(MessageBusInterface::class);
107+
$dispatcher = new EventDispatcher();
108+
109+
$worker = new Worker([$resettableReceiver], $bus, $dispatcher);
110+
$worker->stop();
111+
$worker->run();
112+
$this->assertTrue($resettableReceiver->hasBeenReset());
113+
}
114+
101115
public function testWorkerDoesNotSendNullMessagesToTheBus()
102116
{
103117
$receiver = new DummyReceiver([
@@ -538,3 +552,18 @@ private function process(array $jobs): void
538552
}
539553
}
540554
}
555+
556+
class ResettableDummyReceiver extends DummyReceiver implements ResetInterface
557+
{
558+
private $hasBeenReset = false;
559+
560+
public function reset()
561+
{
562+
$this->hasBeenReset = true;
563+
}
564+
565+
public function hasBeenReset(): bool
566+
{
567+
return $this->hasBeenReset;
568+
}
569+
}

Worker.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
use Symfony\Component\Messenger\Transport\Receiver\QueueReceiverInterface;
3030
use Symfony\Component\Messenger\Transport\Receiver\ReceiverInterface;
3131
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
32+
use Symfony\Contracts\Service\ResetInterface;
3233

3334
/**
3435
* @author Samuel Roze <samuel.roze@gmail.com>
@@ -133,6 +134,7 @@ public function run(array $options = []): void
133134

134135
$this->flush(true);
135136
$this->dispatchEvent(new WorkerStoppedEvent($this));
137+
$this->resetReceiverConnections();
136138
}
137139

138140
private function handleMessage(Envelope $envelope, string $transportName): void
@@ -256,6 +258,15 @@ public function getMetadata(): WorkerMetadata
256258
return $this->metadata;
257259
}
258260

261+
private function resetReceiverConnections(): void
262+
{
263+
foreach ($this->receivers as $receiver) {
264+
if ($receiver instanceof ResetInterface) {
265+
$receiver->reset();
266+
}
267+
}
268+
}
269+
259270
private function dispatchEvent(object $event): void
260271
{
261272
if (null === $this->eventDispatcher) {

0 commit comments

Comments
 (0)