/**
  * @task break
  */
 protected function breakLease(DrydockLease $lease, Exception $ex)
 {
     switch ($lease->getStatus()) {
         case DrydockLeaseStatus::STATUS_BROKEN:
         case DrydockLeaseStatus::STATUS_RELEASED:
         case DrydockLeaseStatus::STATUS_DESTROYED:
             throw new PhutilProxyException(pht('Unexpected failure while destroying lease ("%s").', $lease->getPHID()), $ex);
     }
     $lease->setStatus(DrydockLeaseStatus::STATUS_BROKEN)->save();
     $lease->logEvent(DrydockLeaseActivationFailureLogType::LOGCONST, array('class' => get_class($ex), 'message' => $ex->getMessage()));
     $lease->awakenTasks();
     $this->queueTask(__CLASS__, array('leasePHID' => $lease->getPHID()), array('objectPHID' => $lease->getPHID()));
     throw new PhabricatorWorkerPermanentFailureException(pht('Permanent failure while activating lease ("%s"): %s', $lease->getPHID(), $ex->getMessage()));
 }