Skip to content

Commit 79fdc47

Browse files
Merge remote-tracking branch '40110/baudeval-patch-1' into commpr-21755-0809
2 parents 835e075 + 0f26960 commit 79fdc47

File tree

2 files changed

+62
-10
lines changed

2 files changed

+62
-10
lines changed

app/code/Magento/MessageQueue/Model/Cron/ConsumersRunner.php

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?php
22
/**
3-
* Copyright © Magento, Inc. All rights reserved.
4-
* See COPYING.txt for license details.
3+
* Copyright 2017 Adobe
4+
* All Rights Reserved.
55
*/
66
namespace Magento\MessageQueue\Model\Cron;
77

@@ -139,8 +139,7 @@ public function run(): void
139139
];
140140

141141
if ($maxMessages) {
142-
$arguments[] =
143-
'--max-messages=' . min($consumer->getMaxMessages() ?? $maxMessages, $maxMessages);
142+
$arguments = $this->addMaxMessagesArgument($arguments, $consumer, $maxMessages);
144143
}
145144

146145
$command = $php . ' ' . BP . '/bin/magento queue:consumers:start %s %s'
@@ -155,7 +154,7 @@ public function run(): void
155154
];
156155

157156
if ($maxMessages) {
158-
$arguments[] = '--max-messages=' . min($consumer->getMaxMessages() ?? $maxMessages, $maxMessages);
157+
$arguments = $this->addMaxMessagesArgument($arguments, $consumer, $maxMessages);
159158
}
160159

161160
$command = $php . ' ' . BP . '/bin/magento queue:consumers:start %s %s'
@@ -166,6 +165,38 @@ public function run(): void
166165
}
167166
}
168167

168+
/**
169+
* Add max-messages argument and log warning if exceeds default
170+
*
171+
* @param array $arguments Arguments array to append to
172+
* @param ConsumerConfigItemInterface $consumer
173+
* @param int $defaultMaxMessages
174+
* @return array
175+
*/
176+
private function addMaxMessagesArgument(
177+
array $arguments,
178+
ConsumerConfigItemInterface $consumer,
179+
int $defaultMaxMessages
180+
): array {
181+
$consumerMaxMessages =$consumer->getMaxMessages() ?? $defaultMaxMessages;
182+
183+
if ($consumerMaxMessages > $defaultMaxMessages) {
184+
$this->logger->warning(
185+
__(
186+
'Consumer "%1" has max-messages=%2 which exceeds the configured default (%3). '
187+
. 'This may probably cause high memory usage or long processing times.',
188+
$consumer->getName(),
189+
$consumerMaxMessages,
190+
$defaultMaxMessages
191+
)
192+
);
193+
}
194+
195+
$arguments[] = '--max-messages=' . $consumerMaxMessages;
196+
197+
return $arguments;
198+
}
199+
169200
/**
170201
* Checks that the consumer can be run
171202
*

app/code/Magento/MessageQueue/Test/Unit/Model/Cron/ConsumersRunnerTest.php

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?php
22
/**
3-
* Copyright © Magento, Inc. All rights reserved.
4-
* See COPYING.txt for license details.
3+
* Copyright 2017 Adobe
4+
* All Rights Reserved.
55
*/
66
declare(strict_types=1);
77

@@ -18,6 +18,7 @@
1818
use PHPUnit\Framework\MockObject\MockObject;
1919
use PHPUnit\Framework\TestCase;
2020
use Symfony\Component\Process\PhpExecutableFinder;
21+
use Psr\Log\LoggerInterface;
2122

2223
/**
2324
* Unit tests for ConsumersRunner.
@@ -64,6 +65,11 @@ class ConsumersRunnerTest extends TestCase
6465
*/
6566
private $consumersRunner;
6667

68+
/**
69+
* @var LoggerInterface
70+
*/
71+
private $loggerMock;
72+
6773
/**
6874
* {@inheritdoc}
6975
*/
@@ -89,14 +95,18 @@ protected function setUp(): void
8995
->getMock();
9096
$this->connectionTypeResolver->method('getConnectionType')->willReturn('something');
9197

98+
$this->loggerMock = $this->getMockBuilder(LoggerInterface::class)
99+
->disableOriginalConstructor()
100+
->getMock();
101+
92102
$this->consumersRunner = new ConsumersRunner(
93103
$this->phpExecutableFinderMock,
94104
$this->consumerConfigMock,
95105
$this->deploymentConfigMock,
96106
$this->shellBackgroundMock,
97107
$this->lockManagerMock,
98108
$this->connectionTypeResolver,
99-
null,
109+
$this->loggerMock,
100110
$this->checkIsAvailableMessagesMock
101111
);
102112
}
@@ -124,6 +134,7 @@ public function testRunDisabled()
124134

125135
/**
126136
* @param int $maxMessages
137+
* @param int $maxMessagesConsumer
127138
* @param bool $isLocked
128139
* @param string $php
129140
* @param string $command
@@ -135,6 +146,7 @@ public function testRunDisabled()
135146
*/
136147
public function testRun(
137148
$maxMessages,
149+
$maxMessagesConsumer,
138150
$isLocked,
139151
$php,
140152
$command,
@@ -161,6 +173,7 @@ public function testRun(
161173
$consumer = $this->getMockBuilder(ConsumerConfigItemInterface::class)
162174
->getMockForAbstractClass();
163175
$consumer->method('getName')->willReturn($consumerName);
176+
$consumer->method('getMaxMessages')->willReturn($maxMessagesConsumer);
164177

165178
$this->phpExecutableFinderMock->expects($this->once())
166179
->method('find')
@@ -190,6 +203,7 @@ public static function runDataProvider()
190203
return [
191204
[
192205
'maxMessages' => 20000,
206+
'maxMessagesConsumer' => 20000,
193207
'isLocked' => false,
194208
'php' => '',
195209
'command' => 'php ' . BP . '/bin/magento queue:consumers:start %s %s %s',
@@ -200,16 +214,18 @@ public static function runDataProvider()
200214
],
201215
[
202216
'maxMessages' => 10000,
217+
'maxMessagesConsumer' => 30000,
203218
'isLocked' => false,
204219
'php' => '',
205220
'command' => 'php ' . BP . '/bin/magento queue:consumers:start %s %s %s',
206-
'arguments' => ['consumerName', '--single-thread', '--max-messages=10000'],
221+
'arguments' => ['consumerName', '--single-thread', '--max-messages=30000'],
207222
'allowedConsumers' => [],
208223
'shellBackgroundExpects' => 1,
209224
'isRunExpects' => 1,
210225
],
211226
[
212227
'maxMessages' => 10000,
228+
'maxMessagesConsumer' => 10000,
213229
'isLocked' => false,
214230
'php' => '',
215231
'command' => 'php ' . BP . '/bin/magento queue:consumers:start %s %s %s',
@@ -220,6 +236,7 @@ public static function runDataProvider()
220236
],
221237
[
222238
'maxMessages' => 10000,
239+
'maxMessagesConsumer' => 10000,
223240
'isLocked' => true,
224241
'php' => '',
225242
'command' => 'php ' . BP . '/bin/magento queue:consumers:start %s %s %s',
@@ -230,6 +247,7 @@ public static function runDataProvider()
230247
],
231248
[
232249
'maxMessages' => 10000,
250+
'maxMessagesConsumer' => 10000,
233251
'isLocked' => true,
234252
'php' => '',
235253
'command' => 'php ' . BP . '/bin/magento queue:consumers:start %s %s %s',
@@ -240,6 +258,7 @@ public static function runDataProvider()
240258
],
241259
[
242260
'maxMessages' => 10000,
261+
'maxMessagesConsumer' => 10000,
243262
'isLocked' => true,
244263
'php' => '',
245264
'command' => 'php ' . BP . '/bin/magento queue:consumers:start %s %s %s',
@@ -250,16 +269,18 @@ public static function runDataProvider()
250269
],
251270
[
252271
'maxMessages' => 10000,
272+
'maxMessagesConsumer' => 500,
253273
'isLocked' => false,
254274
'php' => '',
255275
'command' => 'php ' . BP . '/bin/magento queue:consumers:start %s %s %s',
256-
'arguments' => ['consumerName', '--single-thread', '--max-messages=10000'],
276+
'arguments' => ['consumerName', '--single-thread', '--max-messages=500'],
257277
'allowedConsumers' => ['consumerName'],
258278
'shellBackgroundExpects' => 1,
259279
'isRunExpects' => 1,
260280
],
261281
[
262282
'maxMessages' => 0,
283+
'maxMessagesConsumer' => 0,
263284
'isLocked' => false,
264285
'php' => '/bin/php',
265286
'command' => '/bin/php ' . BP . '/bin/magento queue:consumers:start %s %s',

0 commit comments

Comments
 (0)