Skip empty subscribers batches during sending

[MAILPOET-3418]
This commit is contained in:
Rostislav Wolny
2021-03-29 15:55:40 +02:00
committed by Veljko V
parent 5331d76c79
commit bbd4cb98f8
2 changed files with 39 additions and 0 deletions

View File

@ -168,6 +168,10 @@ class SendingQueue {
$this->newsletterTask->markNewsletterAsSent($newsletter, $queue); $this->newsletterTask->markNewsletterAsSent($newsletter, $queue);
continue; continue;
} }
// if there aren't any subscribers to process in batch (e.g. all unsubscribed or were deleted) continue with next batch
if (count($foundSubscribersIds) === 0) {
continue;
}
} }
$this->loggerFactory->getLogger(LoggerFactory::TOPIC_NEWSLETTERS)->addInfo( $this->loggerFactory->getLogger(LoggerFactory::TOPIC_NEWSLETTERS)->addInfo(
'before queue chunk processing', 'before queue chunk processing',

View File

@ -629,6 +629,41 @@ class SendingQueueTest extends \MailPoetTest {
expect(count($statistics))->equals(1); expect(count($statistics))->equals(1);
} }
public function testItDoesNotCallMailerWithEmptyBatch() {
$queue = $this->queue;
$subscribers = [];
while (count($subscribers) < 2 * SendingQueueWorker::BATCH_SIZE) {
$subscribers[] = 1234564545 + count($subscribers);
}
$subscribers[] = $this->subscriber->id();
$queue->setSubscribers($subscribers);
$queue->countTotal = count($subscribers);
$queue->save();
$sendingQueueWorker = $this->sendingQueueWorker;
$sendingQueueWorker->mailerTask = Stub::make(
new MailerTask(),
[
'send' => Expected::exactly(1, function() {
return $this->mailerTaskDummyResponse;
}),
],
$this
);
$sendingQueueWorker->process();
/** @var SendingQueue $updatedQueue */
$updatedQueue = SendingQueue::findOne($queue->id);
$updatedQueue = SendingTask::createFromQueue($updatedQueue);
// queue subscriber processed/to process count is updated
expect($updatedQueue->getSubscribers(ScheduledTaskSubscriber::STATUS_UNPROCESSED))
->equals([]);
expect($updatedQueue->getSubscribers(ScheduledTaskSubscriber::STATUS_PROCESSED))
->equals([$this->subscriber->id]);
expect($updatedQueue->countTotal)->equals(1);
expect($updatedQueue->countProcessed)->equals(1);
expect($updatedQueue->countToProcess)->equals(0);
}
public function testItUpdatesQueueSubscriberCountWhenNoneOfSubscribersExist() { public function testItUpdatesQueueSubscriberCountWhenNoneOfSubscribersExist() {
$queue = $this->queue; $queue = $this->queue;
$queue->setSubscribers([ $queue->setSubscribers([