From 3bf800b51d78bebdb76cfa706f47fa640df01c10 Mon Sep 17 00:00:00 2001 From: Vlad Date: Sun, 14 Jan 2018 12:39:16 -0500 Subject: [PATCH] Adds filter to set custom batch processing size --- .../Workers/SendingQueue/SendingQueue.php | 7 ++--- .../Workers/SendingQueue/SendingQueueTest.php | 26 +++++++++++++++---- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/lib/Cron/Workers/SendingQueue/SendingQueue.php b/lib/Cron/Workers/SendingQueue/SendingQueue.php index 94858fed25..f75fa2fab4 100644 --- a/lib/Cron/Workers/SendingQueue/SendingQueue.php +++ b/lib/Cron/Workers/SendingQueue/SendingQueue.php @@ -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\Newsletter as NewsletterTask; use MailPoet\Mailer\MailerLog; -use MailPoet\Models\Newsletter as NewsletterModel; use MailPoet\Models\SendingQueue as SendingQueueModel; use MailPoet\Models\StatisticsNewsletters as StatisticsNewslettersModel; use MailPoet\Models\Subscriber as SubscriberModel; use MailPoet\Segments\SubscribersFinder; +use MailPoet\WP\Hooks as WPHooks; if(!defined('ABSPATH')) exit; @@ -24,6 +24,7 @@ class SendingQueue { $this->mailer_task = ($mailer_task) ? $mailer_task : new MailerTask(); $this->newsletter_task = ($newsletter_task) ? $newsletter_task : new NewsletterTask(); $this->timer = ($timer) ? $timer : microtime(true); + $this->batch_size = WPHooks::applyFilters('mailpoet_cron_worker_sending_queue_bach_size', self::BATCH_SIZE); } function process() { @@ -47,7 +48,7 @@ class SendingQueue { $queue->subscribers = $queue->getSubscribers(); $subscriber_batches = array_chunk( $queue->subscribers['to_process'], - self::BATCH_SIZE + $this->batch_size ); foreach($subscriber_batches as $subscribers_to_process_ids) { if(!empty($newsletter_segments_ids[0])) { @@ -199,4 +200,4 @@ class SendingQueue { ->whereNull('type') ->findMany(); } -} +} \ No newline at end of file diff --git a/tests/unit/Cron/Workers/SendingQueue/SendingQueueTest.php b/tests/unit/Cron/Workers/SendingQueue/SendingQueueTest.php index 6db76930e9..de69389ae8 100644 --- a/tests/unit/Cron/Workers/SendingQueue/SendingQueueTest.php +++ b/tests/unit/Cron/Workers/SendingQueue/SendingQueueTest.php @@ -1,4 +1,5 @@ sending_queue_worker->batch_size)->equals(SendingQueueWorker::BATCH_SIZE); expect($this->sending_queue_worker->mailer_task instanceof MailerTask); expect($this->sending_queue_worker->newsletter_task instanceof NewsletterTask); expect(strlen($this->sending_queue_worker->timer))->greaterOrEquals(5); @@ -219,7 +222,7 @@ class SendingQueueTest extends \MailPoetTest { Stub::make( new MailerTask(), array( - 'send' => Stub::exactly(1, function($newsletter, $subscriber, $extra_params) use($directUnsubscribeURL) { + 'send' => Stub::exactly(1, function($newsletter, $subscriber, $extra_params) use ($directUnsubscribeURL) { expect(isset($extra_params['unsubscribe_url']))->true(); expect($extra_params['unsubscribe_url'])->equals($directUnsubscribeURL); return true; @@ -239,7 +242,7 @@ class SendingQueueTest extends \MailPoetTest { Stub::make( new MailerTask(), array( - 'send' => Stub::exactly(1, function($newsletter, $subscriber, $extra_params) use($trackedUnsubscribeURL) { + 'send' => Stub::exactly(1, function($newsletter, $subscriber, $extra_params) use ($trackedUnsubscribeURL) { expect(isset($extra_params['unsubscribe_url']))->true(); expect($extra_params['unsubscribe_url'])->equals($trackedUnsubscribeURL); return true; @@ -458,9 +461,11 @@ class SendingQueueTest extends \MailPoetTest { $sending_queue_worker = $this->sending_queue_worker; $sending_queue_worker->mailer_task = Stub::make( new MailerTask(), - array('send' => Stub::exactly(1, function() { - return true; - })), + array( + 'send' => Stub::exactly(1, function() { + return true; + }) + ), $this ); $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() { \ORM::raw_execute('TRUNCATE ' . Subscriber::$_table); \ORM::raw_execute('TRUNCATE ' . SubscriberSegment::$_table);