Package

com.twitter.finagle.thrift

service

Permalink

package service

Visibility
  1. Public
  2. All

Type Members

  1. trait Filterable[+T] extends service.Filterable[T]

    Permalink

    Used in conjunction with a ServicePerEndpoint builder to allow for filtering of a ServicePerEndpoint.

  2. trait MethodPerEndpointBuilder[ServicePerEndpoint, MethodPerEndpoint] extends AnyRef

    Permalink

    A typeclass to construct a MethodPerEndpoint by wrapping a ServicePerEndpoint.

    A typeclass to construct a MethodPerEndpoint by wrapping a ServicePerEndpoint. This is a compatibility constructor to replace an existing Future interface with one built from a ServicePerEndpoint.

    Scrooge generates implementations of this builder.

  3. trait ReqRepMethodPerEndpointBuilder[ReqRepServicePerEndpoint, MethodPerEndpoint] extends MethodPerEndpointBuilder[ReqRepServicePerEndpoint, MethodPerEndpoint]

    Permalink

    A typeclass to construct a MethodPerEndpoint by wrapping a ReqRepServicePerEndpoint.

    A typeclass to construct a MethodPerEndpoint by wrapping a ReqRepServicePerEndpoint.

    This is a compatibility constructor to replace an existing Future interface with one built from a ReqRepServicePerEndpoint.

    Scrooge generates implementations of this builder.

  4. trait ReqRepServicePerEndpointBuilder[ReqRepServicePerEndpoint <: Filterable[ReqRepServicePerEndpoint]] extends ServicePerEndpointBuilder[ReqRepServicePerEndpoint]

    Permalink

    Typeclass ReqRepServicePerEndpointBuilder[T] creates T-typed interfaces from thrift clients.

    Typeclass ReqRepServicePerEndpointBuilder[T] creates T-typed interfaces from thrift clients.

    Scrooge generates implementations of this builder.

  5. trait ServicePerEndpointBuilder[ServicePerEndpoint <: Filterable[ServicePerEndpoint]] extends AnyRef

    Permalink

    Typeclass ServicePerEndpointBuilder[T] creates T-typed interfaces from thrift clients.

    Typeclass ServicePerEndpointBuilder[T] creates T-typed interfaces from thrift clients. Scrooge generates implementations of this builder.

  6. trait ThriftServiceBuilder[ServicePerEndpoint, ThriftService] extends AnyRef

    Permalink

    A typeclass to construct a ThriftService by wrapping a ServicePerEndpoint.

    A typeclass to construct a ThriftService by wrapping a ServicePerEndpoint. This is a compatibility constructor to replace an existing Future interface with one built from a ServicePerEndpoint.

    Scrooge generates implementations of this builder.

    Annotations
    @deprecated
    Deprecated

    (Since version 2018-01-12) Use MethodPerEndpointBuilder

Value Members

  1. object ThriftReqRepServicePerEndpoint

    Permalink

    Construct Service[scrooge.Request[method.Args],scrooge.Response[method.SuccessType]] interface for a ThriftMethod.

    Construct Service[scrooge.Request[method.Args],scrooge.Response[method.SuccessType]] interface for a ThriftMethod.

    There are two ways to use a Scrooge-generated Thrift Service with Finagle:

    1. Using a Service interface, i.e. a collection of Finagle Services, e.g., ReqRepServicePerEndpoint.

    2. Using a method interface, i.e. a collection of methods returning Futures, e.g, MethodPerEndpoint.

    Example: for a Thrift service IDL:

    service Logger {
      string log(1: string message, 2: i32 logLevel);
      i32 getLogSize();
    }

    the Service interface, or ReqRepServicePerEndpoint, is

    trait LoggerServiceIface {
      val log: com.twitter.finagle.Service[scrooge.Request[Logger.Log.Args], scrooge.Response[Logger.Log.SuccessType]]
      val getLogSize: com.twitter.finagle.Service[[scrooge.Request[Logger.GetLogSize.Args], scrooge.Response[Logger.GetLogSize.SuccessType]]
    }

    and the method interface, or MethodPerEndpoint, is

    trait Logger[Future] {
      def log(message: String, logLevel: Int): Future[String]
      def getLogSize(): Future[Int]
    }

    ReqRepServicePerEndpoints can be modified and composed with Finagle Filters.

  2. object ThriftResponseClassifier

    Permalink

    ResponseClassifiers for use with finagle-thrift request/responses.

    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.

  3. object ThriftServicePerEndpoint

    Permalink

    Construct Service interface for a Thrift method.

    Construct Service interface for a Thrift method.

    There are two ways to use a Scrooge-generated Thrift Service with Finagle:

    1. Using a Service interface, i.e. a collection of Finagle Services.

    2. Using a method interface, i.e. a collection of methods returning Futures.

    Example: for a Thrift service IDL:

    service Logger {
      string log(1: string message, 2: i32 logLevel);
      i32 getLogSize();
    }

    the Service interface, or ServicePerEndpoint, is

    trait LoggerServicePerEndpoint {
      val log: com.twitter.finagle.Service[Logger.Log.Args, Logger.Log.SuccessType]
      val getLogSize: com.twitter.finagle.Service[Logger.GetLogSize.Args, Logger.GetLogSize.SuccessType]
    }

    and the method interface, or MethodPerEndpoint, is

    trait Logger[Future] {
      def log(message: String, logLevel: Int): Future[String]
      def getLogSize(): Future[Int]
    }

    Service interfaces can be modified and composed with Finagle Filters.

Ungrouped