Skip to content

Commit f33b586

Browse files
authored
Merge pull request #33 from Dwolla/thrift-configuration
Add a configuration object for thrift builder
2 parents 5bbd4f8 + d27b8de commit f33b586

3 files changed

Lines changed: 37 additions & 5 deletions

File tree

twitter-finagle/src/main/scala-ce2/com/dwolla/util/async/finagle/ThriftClient.scala

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,30 @@ import com.dwolla.util.async.twitter._
99
import com.twitter.finagle.Thrift
1010
import com.twitter.util.Closable
1111

12-
import scala.reflect.ClassTag
1312
import scala.language.reflectiveCalls
13+
import scala.reflect.ClassTag
1414

1515
object ThriftClient {
1616
def apply[Alg[_[_]] <: AnyRef {def asClosable: Closable}] = new PartiallyAppliedThriftClient[Alg]()
1717

1818
class PartiallyAppliedThriftClient[Alg[_[_]] <: AnyRef {def asClosable: Closable} ] private[ThriftClient] (val dummy: Unit = ()) extends AnyVal {
19-
def apply[G[_] : Async : ContextShift, F[_]](dest: String)
19+
def apply[G[_] : Async : ContextShift, F[_]](dest: String, config: ThriftClientConfiguration = ThriftClientConfiguration())
2020
(implicit
2121
AFK: F ~~> G,
2222
AlgR: Alg[ReaderT[F, Alg[F], *]],
2323
CT: ClassTag[Alg[F]],
2424
FK: FunctorK[Alg]): Resource[G, Alg[G]] = {
25-
val acquire = Sync[G].delay(Thrift.client.build[Alg[F]](dest)).map(_.asyncMapK[G])
25+
val acquire =
26+
Sync[G].delay(
27+
Thrift
28+
.client
29+
.withSessionPool.maxSize(config.sessionPoolMax)
30+
.withRequestTimeout(config.requestTimeout)
31+
.withTransport.connectTimeout(config.transportConnectTimeout)
32+
.withSession.acquisitionTimeout(config.sessionAcquisitionTimeout)
33+
.withRetryBudget(config.retryBudget)
34+
.build[Alg[F]](dest)
35+
).map(_.asyncMapK[G])
2636
val release: Alg[G] => G[Unit] = alg => liftFuture(Sync[G].delay(alg.asClosable.close()))
2737

2838
Resource.make(acquire)(release)

twitter-finagle/src/main/scala-ce3/com/dwolla/util/async/finagle/ThriftClient.scala

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,23 @@ object ThriftClient {
1616
def apply[Alg[_[_]] <: AnyRef {def asClosable: Closable}] = new PartiallyAppliedThriftClient[Alg]()
1717

1818
class PartiallyAppliedThriftClient[Alg[_[_]] <: AnyRef {def asClosable: Closable} ] private[ThriftClient] (val dummy: Unit = ()) extends AnyVal {
19-
def apply[G[_] : Async, F[_]](dest: String)
19+
def apply[G[_] : Async, F[_]](dest: String, config: ThriftClientConfiguration = ThriftClientConfiguration())
2020
(implicit
2121
AFK: F ~~> G,
2222
AlgR: Alg[ReaderT[F, Alg[F], *]],
2323
CT: ClassTag[Alg[F]],
2424
FK: FunctorK[Alg]): Resource[G, Alg[G]] = {
25-
val acquire = Sync[G].delay(Thrift.client.build[Alg[F]](dest)).map(_.asyncMapK[G])
25+
val acquire =
26+
Sync[G].delay(
27+
Thrift
28+
.client
29+
.withSessionPool.maxSize(config.sessionPoolMax)
30+
.withRequestTimeout(config.requestTimeout)
31+
.withSession.acquisitionTimeout(config.sessionAcquisitionTimeout)
32+
.withTransport.connectTimeout(config.transportConnectTimeout)
33+
.withRetryBudget(config.retryBudget)
34+
.build[Alg[F]](dest)
35+
).map(_.asyncMapK[G])
2636
val release: Alg[G] => G[Unit] = alg => liftFuture(Sync[G].delay(alg.asClosable.close()))
2737

2838
Resource.make(acquire)(release)
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.dwolla.util.async.finagle
2+
3+
import com.twitter.finagle.service.RetryBudget
4+
import com.twitter.util.Duration
5+
6+
case class ThriftClientConfiguration(
7+
requestTimeout: Duration = Duration.fromMinutes(4),
8+
sessionAcquisitionTimeout: Duration = Duration.fromSeconds(30),
9+
transportConnectTimeout: Duration = Duration.fromSeconds(30),
10+
sessionPoolMax: Int = 50,
11+
retryBudget: RetryBudget = RetryBudget.Empty
12+
)

0 commit comments

Comments
 (0)