Package

com.twitter.finagle.thriftmux

service

Permalink

package service

Visibility
  1. Public
  2. All

Value Members

  1. object ThriftMuxResponseClassifier

    Permalink

    ResponseClassifiers for use with finagle-thriftmux request/responses.

    ResponseClassifiers for use with finagle-thriftmux request/responses.

    Thrift (and ThriftMux) services are a bit unusual in that there is only a single com.twitter.finagle.Service from Array[Byte] to Array[Byte] for all the methods of an IDL's service.

    ThriftMux 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 ThriftMux.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
    }

    Often times, a good default classifier is ThriftMuxResponseClassifier.ThriftExceptionsAsFailures which treats any Thrift response that deserializes into an Exception as a non-retryable failure.

Ungrouped