the-algorithm/home-mixer/server/src/main/scala/com/twitter/home_mixer/module/OptimizedStratoClientModule.scala
twitter-team ef4c5eb65e Twitter Recommendation Algorithm
Please note we have force-pushed a new initial commit in order to remove some publicly-available Twitter user information. Note that this process may be required in the future.
2023-03-31 17:36:31 -05:00

47 lines
1.7 KiB
Scala

package com.twitter.home_mixer.module
import com.google.inject.Provides
import com.twitter.conversions.DurationOps._
import com.twitter.finagle.mtls.authentication.ServiceIdentifier
import com.twitter.finagle.service.Retries
import com.twitter.finagle.service.RetryPolicy
import com.twitter.finagle.ssl.OpportunisticTls
import com.twitter.finagle.stats.StatsReceiver
import com.twitter.home_mixer.param.HomeMixerInjectionNames.BatchedStratoClientWithModerateTimeout
import com.twitter.inject.TwitterModule
import com.twitter.strato.client.Client
import com.twitter.strato.client.Strato
import com.twitter.util.Try
import javax.inject.Named
import javax.inject.Singleton
object OptimizedStratoClientModule extends TwitterModule {
private val ModerateStratoServerClientRequestTimeout = 150.millis
private val DefaultRetryPartialFunction: PartialFunction[Try[Nothing], Boolean] =
RetryPolicy.TimeoutAndWriteExceptionsOnly
.orElse(RetryPolicy.ChannelClosedExceptionsOnly)
protected def mkRetryPolicy(tries: Int): RetryPolicy[Try[Nothing]] =
RetryPolicy.tries(tries, DefaultRetryPartialFunction)
@Singleton
@Provides
@Named(BatchedStratoClientWithModerateTimeout)
def providesStratoClient(
serviceIdentifier: ServiceIdentifier,
statsReceiver: StatsReceiver
): Client = {
Strato.client
.withMutualTls(serviceIdentifier, opportunisticLevel = OpportunisticTls.Required)
.withSession.acquisitionTimeout(150.milliseconds)
.withRequestTimeout(ModerateStratoServerClientRequestTimeout)
.withPerRequestTimeout(ModerateStratoServerClientRequestTimeout)
.withRpcBatchSize(5)
.configured(Retries.Policy(mkRetryPolicy(1)))
.withStatsReceiver(statsReceiver.scope("strato_client"))
.build()
}
}