/**
  * Re-queue job that is frozen, or drop the job if it has
  * been frozen for too long.
  *
  * @param Connection $conn
  */
 private function requeueRetry(Connection $conn)
 {
     $diff = time() - $this->params['createdAt'];
     $dropTimeout = $conn->getSettings()->getDropDelayedJobsAfter();
     if ($diff > $dropTimeout) {
         LoggerFactory::getInstance('CirrusSearchChangeFailed')->warning("Dropping delayed ElasticaWrite job for DataSender::{method} in cluster {cluster} after waiting {diff}s", array('method' => $this->params['method'], 'cluster' => $conn->getClusterName(), 'diff' => $diff));
     } else {
         $delay = self::backoffDelay($this->params['retryCount']);
         $job = clone $this;
         $job->params['retryCount']++;
         $job->params['cluster'] = $conn->getClusterName();
         $job->setDelay($delay);
         LoggerFactory::getInstance('CirrusSearch')->debug("ElasticaWrite job reported frozen on cluster {cluster}. Requeueing job with delay of {delay}s", array('cluster' => $conn->getClusterName(), 'delay' => $delay));
         JobQueueGroup::singleton()->push($job);
     }
 }