Changeset View
Changeset View
Standalone View
Standalone View
src/applications/metamta/PhabricatorMetaMTAWorker.php
<?php | <?php | ||||
final class PhabricatorMetaMTAWorker | final class PhabricatorMetaMTAWorker | ||||
extends PhabricatorWorker { | extends PhabricatorWorker { | ||||
private $message; | public function getMaximumRetryCount() { | ||||
return 250; | |||||
public function getWaitBeforeRetry(PhabricatorWorkerTask $task) { | |||||
$message = $this->loadMessage(); | |||||
if (!$message) { | |||||
return null; | |||||
} | } | ||||
$wait = max($message->getNextRetry() - time(), 0) + 15; | public function getWaitBeforeRetry(PhabricatorWorkerTask $task) { | ||||
return $wait; | return ($task->getFailureCount() * 15); | ||||
} | } | ||||
public function doWork() { | public function doWork() { | ||||
$message = $this->loadMessage(); | $message = $this->loadMessage(); | ||||
if (!$message | if (!$message) { | ||||
|| $message->getStatus() != PhabricatorMetaMTAMail::STATUS_QUEUE) { | throw new PhabricatorWorkerPermanentFailureException( | ||||
pht('Unable to load message!')); | |||||
} | |||||
if ($message->getStatus() != PhabricatorMetaMTAMail::STATUS_QUEUE) { | |||||
return; | return; | ||||
} | } | ||||
$id = $message->getID(); | $id = $message->getID(); | ||||
$message->sendNow(); | $message->sendNow(); | ||||
// task failed if the message is still queued | // task failed if the message is still queued | ||||
// (instead of sent, void, or failed) | // (instead of sent, void, or failed) | ||||
if ($message->getStatus() == PhabricatorMetaMTAMail::STATUS_QUEUE) { | if ($message->getStatus() == PhabricatorMetaMTAMail::STATUS_QUEUE) { | ||||
throw new Exception('Failed to send message'); | throw new Exception( | ||||
pht('Failed to send message.')); | |||||
} | } | ||||
} | } | ||||
private function loadMessage() { | private function loadMessage() { | ||||
if (!$this->message) { | |||||
$message_id = $this->getTaskData(); | $message_id = $this->getTaskData(); | ||||
$this->message = id(new PhabricatorMetaMTAMail())->load($message_id); | return id(new PhabricatorMetaMTAMail())->load($message_id); | ||||
if (!$this->message) { | |||||
return null; | |||||
} | |||||
} | |||||
return $this->message; | |||||
} | } | ||||
public function renderForDisplay(PhabricatorUser $viewer) { | public function renderForDisplay(PhabricatorUser $viewer) { | ||||
return phutil_tag( | return phutil_tag( | ||||
'pre', | 'pre', | ||||
array( | array( | ||||
), | ), | ||||
'phabricator/ $ ./bin/mail show-outbound --id '.$this->getTaskData()); | 'phabricator/ $ ./bin/mail show-outbound --id '.$this->getTaskData()); | ||||
} | } | ||||
} | } |