the-algorithm/home-mixer/server/src/main/scala/com/twitter/home_mixer/module/ManhattanTweetImpressionStoreModule.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

53 lines
2.0 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.stats.StatsReceiver
import com.twitter.inject.TwitterModule
import com.twitter.storage.client.manhattan.kv.Guarantee
import com.twitter.storehaus_internal.manhattan.ManhattanClusters
import com.twitter.timelines.clients.manhattan.mhv3.ManhattanClientBuilder
import com.twitter.timelines.impressionstore.store.ManhattanTweetImpressionStoreClientConfig
import com.twitter.timelines.impressionstore.store.ManhattanTweetImpressionStoreClient
import javax.inject.Singleton
object ManhattanTweetImpressionStoreModule extends TwitterModule {
private val ProdAppId = "timelines_tweet_impression_store_v2"
private val ProdDataset = "timelines_tweet_impressions_v2"
private val StagingAppId = "timelines_tweet_impression_store_staging"
private val StagingDataset = "timelines_tweet_impressions_staging"
private val StatsScope = "manhattanTweetImpressionStoreClient"
private val DefaultTTL = 2.days
@Provides
@Singleton
def providesManhattanTweetImpressionStoreClient(
serviceIdentifier: ServiceIdentifier,
statsReceiver: StatsReceiver
): ManhattanTweetImpressionStoreClient = {
val (appId, dataset) = serviceIdentifier.environment.toLowerCase match {
case "prod" => (ProdAppId, ProdDataset)
case _ => (StagingAppId, StagingDataset)
}
val config = ManhattanTweetImpressionStoreClientConfig(
cluster = ManhattanClusters.nash,
appId = appId,
dataset = dataset,
statsScope = StatsScope,
defaultGuarantee = Guarantee.SoftDcReadMyWrites,
defaultMaxTimeout = 100.milliseconds,
maxRetryCount = 2,
isReadOnly = false,
serviceIdentifier = serviceIdentifier,
ttl = DefaultTTL
)
val manhattanEndpoint = ManhattanClientBuilder.buildManhattanEndpoint(config, statsReceiver)
ManhattanTweetImpressionStoreClient(config, manhattanEndpoint, statsReceiver)
}
}