Reschedule bounce task
[MAILPOET-2100]
This commit is contained in:
@ -122,6 +122,7 @@ class Scheduler {
|
||||
'post notification set status to sending',
|
||||
['newsletter_id' => $newsletter->id, 'task_id' => $queue->task_id]
|
||||
);
|
||||
$this->reScheduleBounceTask();
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -158,6 +159,7 @@ class Scheduler {
|
||||
$task->save();
|
||||
// update newsletter status
|
||||
$newsletter->setStatus(Newsletter::STATUS_SENDING);
|
||||
$this->reScheduleBounceTask();
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -233,6 +235,18 @@ class Scheduler {
|
||||
ScheduledTask::touchAllByIds($ids);
|
||||
}
|
||||
|
||||
private function reScheduleBounceTask() {
|
||||
$bounce_tasks = Bounce::getScheduledTasks($future = true);
|
||||
if (count($bounce_tasks)) {
|
||||
$bounce_task = reset($bounce_tasks);
|
||||
if (Carbon::createFromTimestamp(current_time('timestamp'))->addHour(42)->lessThan($bounce_task->scheduled_at)) {
|
||||
$random_offset = rand(-6 * 60 * 60, 6 * 60 * 60);
|
||||
$bounce_task->scheduled_at = Carbon::createFromTimestamp(current_time('timestamp'))->addSecond((36 * 60 * 60) + $random_offset);
|
||||
$bounce_task->save();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static function getScheduledQueues() {
|
||||
return SendingTask::getScheduledQueues(self::TASK_BATCH_SIZE);
|
||||
}
|
||||
|
@ -125,6 +125,10 @@ abstract class SimpleWorker {
|
||||
return $date;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param bool $future
|
||||
* @return ScheduledTask[]
|
||||
*/
|
||||
static function getScheduledTasks($future = false) {
|
||||
$dateWhere = ($future) ? 'whereGt' : 'whereLte';
|
||||
$wp = new WPFunctions();
|
||||
|
@ -552,6 +552,38 @@ class SchedulerTest extends \MailPoetTest {
|
||||
$scheduler->process();
|
||||
}
|
||||
|
||||
function testItReSchedulesBounceTask() {
|
||||
$task = ScheduledTask::createOrUpdate([
|
||||
'type' => 'bounce',
|
||||
'status' => ScheduledTask::STATUS_SCHEDULED,
|
||||
'scheduled_at' => Carbon::createFromTimestamp(current_time('timestamp'))->addMonths(1),
|
||||
]);
|
||||
$newsletter = $this->_createNewsletter(Newsletter::TYPE_STANDARD, Newsletter::STATUS_DRAFT);
|
||||
$queue = $this->_createQueue($newsletter->id);
|
||||
$finder = $this->makeEmpty(SubscribersFinder::class);
|
||||
$scheduler = new Scheduler($finder);
|
||||
|
||||
$scheduler->processScheduledStandardNewsletter($newsletter, $queue);
|
||||
$refetched_task = ScheduledTask::where('id', $task->id)->findOne();
|
||||
expect($refetched_task->scheduled_at)->lessThan(Carbon::createFromTimestamp(current_time('timestamp'))->addHours(42));
|
||||
}
|
||||
|
||||
function testItDoesNotReSchedulesBounceTaskWhenSoon() {
|
||||
$task = ScheduledTask::createOrUpdate([
|
||||
'type' => 'bounce',
|
||||
'status' => ScheduledTask::STATUS_SCHEDULED,
|
||||
'scheduled_at' => Carbon::createFromTimestamp(current_time('timestamp'))->addMinute(5),
|
||||
]);
|
||||
$newsletter = $this->_createNewsletter(Newsletter::TYPE_STANDARD, Newsletter::STATUS_DRAFT);
|
||||
$queue = $this->_createQueue($newsletter->id);
|
||||
$finder = $this->makeEmpty(SubscribersFinder::class);
|
||||
$scheduler = new Scheduler($finder);
|
||||
|
||||
$scheduler->processScheduledStandardNewsletter($newsletter, $queue);
|
||||
$refetched_task = ScheduledTask::where('id', $task->id)->findOne();
|
||||
expect($refetched_task->scheduled_at)->lessThan(Carbon::createFromTimestamp(current_time('timestamp'))->addHours(1));
|
||||
}
|
||||
|
||||
function testItProcessesScheduledJobsWhenNewsletterIsScheduled() {
|
||||
$newsletter = $this->_createNewsletter(Newsletter::TYPE_STANDARD, Newsletter::STATUS_SCHEDULED);
|
||||
$queue = $this->_createQueue($newsletter->id);
|
||||
|
Reference in New Issue
Block a user