protected function isTemporaryException(Exception $ex) { if ($ex instanceof PhabricatorWorkerYieldException) { return true; } if ($ex instanceof DrydockSlotLockException) { return true; } if ($ex instanceof PhutilAggregateException) { $any_temporary = false; foreach ($ex->getExceptions() as $sub) { if ($this->isTemporaryException($sub)) { $any_temporary = true; break; } } if ($any_temporary) { return true; } } if ($ex instanceof PhutilProxyException) { return $this->isTemporaryException($ex->getPreviousException()); } return false; }