object ThriftResponseClassifier
ResponseClassifiers for use with finagle-thrift
request/responses.
Thrift (and ThriftMux) services are a bit unusual in that
there is only a single Service from Array[Byte]
to Array[Byte] for all the methods of an IDL's service.
Thrift classifiers should be written in terms
of the Scrooge generated request $Service.$Method.Args type and the
method's response type. This is because there is support in Scrooge
and Thrift.newService/newClient
to deserialize the responses into the expected application types
so that classifiers can be written in a normal way.
Given an idl:
exception NotFoundException { 1: string reason }
exception RateLimitedException { 1: string reason }
service SocialGraph {
i32 follow(1: i64 follower, 2: i64 followee) throws (
1: NotFoundException ex, 2: RateLimitedException ex
)
}
One possible custom classifier would be:
val classifier: ResponseClassifier = { case ReqRep(_, Throw(_: RateLimitedException)) => RetryableFailure case ReqRep(_, Throw(_: NotFoundException)) => NonRetryableFailure case ReqRep(_, Return(x: Int)) if x == 0 => NonRetryableFailure case ReqRep(SocialGraph.Follow.Args(a, b), _) if a <= 0 || b <= 0 => NonRetryableFailure // avoid this style! }
Often times, a good default classifier is ThriftResponseClassifier.ThriftExceptionsAsFailures which treats any Thrift response that deserializes into an Exception as a non-retryable failure.
- See also
The user guide for more information on Response Classification of Thrift and ThriftMux Clients and Servers.
- Alphabetic
- By Inheritance
- ThriftResponseClassifier
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
val
ThriftExceptionsAsFailures: ResponseClassifier
Categorizes responses where the deserialized response is a Thrift Exception as a
ResponseClass.NonRetryableFailure. -
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()