the-algorithm/tweetypie/common/src/scala/com/twitter/tweetypie/util/RetryPolicyBuilder.scala

46 lines
1.4 KiB
Scala

package com.twitter.tweetypie.util
import com.twitter.finagle.Backoff
import com.twitter.finagle.service.RetryPolicy
import com.twitter.finagle.service.RetryPolicy.RetryableWriteException
import com.twitter.servo.exception.thriftscala.ServerError
import com.twitter.util.Duration
import com.twitter.util.Throw
import com.twitter.util.TimeoutException
import com.twitter.util.Try
object RetryPolicyBuilder {
/**
* Retry on any exception.
*/
def anyFailure[A](backoffs: Stream[Duration]): RetryPolicy[Try[A]] =
RetryPolicy.backoff[Try[A]](Backoff.fromStream(backoffs)) {
case Throw(_) => true
}
/**
* Retry on com.twitter.util.TimeoutException
*/
def timeouts[A](backoffs: Stream[Duration]): RetryPolicy[Try[A]] =
RetryPolicy.backoff[Try[A]](Backoff.fromStream(backoffs)) {
case Throw(_: TimeoutException) => true
}
/**
* Retry on com.twitter.finagle.service.RetryableWriteExceptions
*/
def writes[A](backoffs: Stream[Duration]): RetryPolicy[Try[A]] =
RetryPolicy.backoff[Try[A]](Backoff.fromStream(backoffs)) {
case Throw(RetryableWriteException(_)) => true
}
/**
* Retry on com.twitter.servo.exception.thriftscala.ServerError
*/
def servoServerError[A](backoffs: Stream[Duration]): RetryPolicy[Try[A]] =
RetryPolicy.backoff[Try[A]](Backoff.fromStream(backoffs)) {
case Throw(ServerError(_)) => true
}
}