Adds filter to set custom batch processing size

This commit is contained in:
Vlad
2018-01-14 12:39:16 -05:00
parent 9910072e72
commit 3bf800b51d
2 changed files with 25 additions and 8 deletions

View File

@ -6,11 +6,11 @@ use MailPoet\Cron\Workers\SendingQueue\Tasks\Links;
use MailPoet\Cron\Workers\SendingQueue\Tasks\Mailer as MailerTask; use MailPoet\Cron\Workers\SendingQueue\Tasks\Mailer as MailerTask;
use MailPoet\Cron\Workers\SendingQueue\Tasks\Newsletter as NewsletterTask; use MailPoet\Cron\Workers\SendingQueue\Tasks\Newsletter as NewsletterTask;
use MailPoet\Mailer\MailerLog; use MailPoet\Mailer\MailerLog;
use MailPoet\Models\Newsletter as NewsletterModel;
use MailPoet\Models\SendingQueue as SendingQueueModel; use MailPoet\Models\SendingQueue as SendingQueueModel;
use MailPoet\Models\StatisticsNewsletters as StatisticsNewslettersModel; use MailPoet\Models\StatisticsNewsletters as StatisticsNewslettersModel;
use MailPoet\Models\Subscriber as SubscriberModel; use MailPoet\Models\Subscriber as SubscriberModel;
use MailPoet\Segments\SubscribersFinder; use MailPoet\Segments\SubscribersFinder;
use MailPoet\WP\Hooks as WPHooks;
if(!defined('ABSPATH')) exit; if(!defined('ABSPATH')) exit;
@ -24,6 +24,7 @@ class SendingQueue {
$this->mailer_task = ($mailer_task) ? $mailer_task : new MailerTask(); $this->mailer_task = ($mailer_task) ? $mailer_task : new MailerTask();
$this->newsletter_task = ($newsletter_task) ? $newsletter_task : new NewsletterTask(); $this->newsletter_task = ($newsletter_task) ? $newsletter_task : new NewsletterTask();
$this->timer = ($timer) ? $timer : microtime(true); $this->timer = ($timer) ? $timer : microtime(true);
$this->batch_size = WPHooks::applyFilters('mailpoet_cron_worker_sending_queue_bach_size', self::BATCH_SIZE);
} }
function process() { function process() {
@ -47,7 +48,7 @@ class SendingQueue {
$queue->subscribers = $queue->getSubscribers(); $queue->subscribers = $queue->getSubscribers();
$subscriber_batches = array_chunk( $subscriber_batches = array_chunk(
$queue->subscribers['to_process'], $queue->subscribers['to_process'],
self::BATCH_SIZE $this->batch_size
); );
foreach($subscriber_batches as $subscribers_to_process_ids) { foreach($subscriber_batches as $subscribers_to_process_ids) {
if(!empty($newsletter_segments_ids[0])) { if(!empty($newsletter_segments_ids[0])) {

View File

@ -1,4 +1,5 @@
<?php <?php
namespace MailPoet\Test\Cron\Workers\SendingQueue; namespace MailPoet\Test\Cron\Workers\SendingQueue;
use AspectMock\Test as Mock; use AspectMock\Test as Mock;
@ -24,6 +25,7 @@ use MailPoet\Newsletter\Links\Links;
use MailPoet\Router\Endpoints\Track; use MailPoet\Router\Endpoints\Track;
use MailPoet\Router\Router; use MailPoet\Router\Router;
use MailPoet\Subscription\Url; use MailPoet\Subscription\Url;
use MailPoet\WP\Hooks;
class SendingQueueTest extends \MailPoetTest { class SendingQueueTest extends \MailPoetTest {
function _before() { function _before() {
@ -93,6 +95,7 @@ class SendingQueueTest extends \MailPoetTest {
} }
function testItConstructs() { function testItConstructs() {
expect($this->sending_queue_worker->batch_size)->equals(SendingQueueWorker::BATCH_SIZE);
expect($this->sending_queue_worker->mailer_task instanceof MailerTask); expect($this->sending_queue_worker->mailer_task instanceof MailerTask);
expect($this->sending_queue_worker->newsletter_task instanceof NewsletterTask); expect($this->sending_queue_worker->newsletter_task instanceof NewsletterTask);
expect(strlen($this->sending_queue_worker->timer))->greaterOrEquals(5); expect(strlen($this->sending_queue_worker->timer))->greaterOrEquals(5);
@ -458,9 +461,11 @@ class SendingQueueTest extends \MailPoetTest {
$sending_queue_worker = $this->sending_queue_worker; $sending_queue_worker = $this->sending_queue_worker;
$sending_queue_worker->mailer_task = Stub::make( $sending_queue_worker->mailer_task = Stub::make(
new MailerTask(), new MailerTask(),
array('send' => Stub::exactly(1, function() { array(
'send' => Stub::exactly(1, function() {
return true; return true;
})), })
),
$this $this
); );
$sending_queue_worker->process(); $sending_queue_worker->process();
@ -613,6 +618,17 @@ class SendingQueueTest extends \MailPoetTest {
); );
} }
function testItAllowsSettingCustomBatchSize() {
$custom_batch_size_value = 10;
$filter = function() use ($custom_batch_size_value) {
return $custom_batch_size_value;
};
Hooks::addFilter('mailpoet_cron_worker_sending_queue_bach_size', $filter);
$sending_queue_worker = new SendingQueueWorker();
expect($sending_queue_worker->batch_size)->equals($custom_batch_size_value);
Hooks::addFilter('mailpoet_cron_worker_sending_queue_bach_size', $filter);
}
function _after() { function _after() {
\ORM::raw_execute('TRUNCATE ' . Subscriber::$_table); \ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
\ORM::raw_execute('TRUNCATE ' . SubscriberSegment::$_table); \ORM::raw_execute('TRUNCATE ' . SubscriberSegment::$_table);