the-algorithm/home-mixer/server/src/main/scala/com/twitter/home_mixer/module/ImpressionBloomFilterModule.scala

60 lines
2.3 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.inject.annotations.Flag
import com.twitter.storage.client.manhattan.kv.Guarantee
import com.twitter.storehaus_internal.manhattan.ManhattanClusters
import com.twitter.timelines.clients.manhattan.store._
import com.twitter.timelines.impressionbloomfilter.{thriftscala => blm}
import com.twitter.timelines.impressionstore.impressionbloomfilter.ImpressionBloomFilterManhattanKeyValueDescriptor
import com.twitter.util.Duration
import javax.inject.Singleton
object ImpressionBloomFilterModule extends TwitterModule {
private val ProdAppId = "impression_bloom_filter_store"
private val ProdDataset = "impression_bloom_filter"
private val StagingAppId = "impression_bloom_filter_store_staging"
private val StagingDataset = "impression_bloom_filter_staging"
private val ClientStatsScope = "tweetBloomFilterImpressionManhattanClient"
private val DefaultTTL = 7.days
private final val Timeout = "mh_impression_store_bloom_filter.timeout"
flag[Duration](Timeout, 150.millis, "Timeout per request")
@Provides
@Singleton
def providesImpressionBloomFilter(
@Flag(Timeout) timeout: Duration,
serviceIdentifier: ServiceIdentifier,
statsReceiver: StatsReceiver
): ManhattanStoreClient[blm.ImpressionBloomFilterKey, blm.ImpressionBloomFilterSeq] = {
val (appId, dataset) = serviceIdentifier.environment.toLowerCase match {
case "prod" => (ProdAppId, ProdDataset)
case _ => (StagingAppId, StagingDataset)
}
implicit val manhattanKeyValueDescriptor: ImpressionBloomFilterManhattanKeyValueDescriptor =
ImpressionBloomFilterManhattanKeyValueDescriptor(
dataset = dataset,
ttl = DefaultTTL
)
ManhattanStoreClientBuilder.buildManhattanClient(
serviceIdentifier = serviceIdentifier,
cluster = ManhattanClusters.nash,
appId = appId,
defaultMaxTimeout = timeout,
maxRetryCount = 2,
defaultGuarantee = Some(Guarantee.SoftDcReadMyWrites),
isReadOnly = false,
statsScope = ClientStatsScope,
statsReceiver = statsReceiver
)
}
}