2023-04-01 00:36:31 +02:00
|
|
|
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
|
2023-07-07 23:01:54 +02:00
|
|
|
import com.twitter.inject.annotations.Flag
|
2023-04-01 00:36:31 +02:00
|
|
|
import com.twitter.storage.client.manhattan.kv.Guarantee
|
|
|
|
import com.twitter.storehaus_internal.manhattan.ManhattanClusters
|
|
|
|
import com.twitter.timelines.clients.manhattan.store._
|
2023-07-07 23:01:54 +02:00
|
|
|
import com.twitter.timelines.impressionbloomfilter.{thriftscala => blm}
|
2023-04-01 00:36:31 +02:00
|
|
|
import com.twitter.timelines.impressionstore.impressionbloomfilter.ImpressionBloomFilterManhattanKeyValueDescriptor
|
2023-07-07 23:01:54 +02:00
|
|
|
import com.twitter.util.Duration
|
2023-04-01 00:36:31 +02:00
|
|
|
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
|
2023-07-07 23:01:54 +02:00
|
|
|
private final val Timeout = "mh_impression_store_bloom_filter.timeout"
|
|
|
|
|
|
|
|
flag[Duration](Timeout, 150.millis, "Timeout per request")
|
2023-04-01 00:36:31 +02:00
|
|
|
|
|
|
|
@Provides
|
|
|
|
@Singleton
|
|
|
|
def providesImpressionBloomFilter(
|
2023-07-07 23:01:54 +02:00
|
|
|
@Flag(Timeout) timeout: Duration,
|
2023-04-01 00:36:31 +02:00
|
|
|
serviceIdentifier: ServiceIdentifier,
|
|
|
|
statsReceiver: StatsReceiver
|
2023-07-07 23:01:54 +02:00
|
|
|
): ManhattanStoreClient[blm.ImpressionBloomFilterKey, blm.ImpressionBloomFilterSeq] = {
|
2023-04-01 00:36:31 +02:00
|
|
|
val (appId, dataset) = serviceIdentifier.environment.toLowerCase match {
|
|
|
|
case "prod" => (ProdAppId, ProdDataset)
|
|
|
|
case _ => (StagingAppId, StagingDataset)
|
|
|
|
}
|
|
|
|
|
2023-07-07 23:01:54 +02:00
|
|
|
implicit val manhattanKeyValueDescriptor: ImpressionBloomFilterManhattanKeyValueDescriptor =
|
|
|
|
ImpressionBloomFilterManhattanKeyValueDescriptor(
|
|
|
|
dataset = dataset,
|
|
|
|
ttl = DefaultTTL
|
|
|
|
)
|
2023-04-01 00:36:31 +02:00
|
|
|
|
2023-07-07 23:01:54 +02:00
|
|
|
ManhattanStoreClientBuilder.buildManhattanClient(
|
2023-04-01 00:36:31 +02:00
|
|
|
serviceIdentifier = serviceIdentifier,
|
|
|
|
cluster = ManhattanClusters.nash,
|
|
|
|
appId = appId,
|
2023-07-07 23:01:54 +02:00
|
|
|
defaultMaxTimeout = timeout,
|
2023-04-01 00:36:31 +02:00
|
|
|
maxRetryCount = 2,
|
|
|
|
defaultGuarantee = Some(Guarantee.SoftDcReadMyWrites),
|
|
|
|
isReadOnly = false,
|
|
|
|
statsScope = ClientStatsScope,
|
|
|
|
statsReceiver = statsReceiver
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|