Christopher Coco


Posted January 17, 2018

📆 January 2018 Release Notes - Version 18.1.0

Time to turn the calendar to a new year and a new release — our January release is here!

Finagle 18.1.0, Finatra 18.1.0, Scrooge 18.1.0, TwitterServer 18.1.0, and Util 18.1.0.


New Features:

  • finagle-core: FailureDetector has a new method, onClose, which provides a Future that is satisfied when the FailureDetector marks a peer as Closed. 186f0949

  • finagle-core: Introduce trace logging of requests as they flow through a Finagle client or server. These logs can be turned on at runtime by setting the “com.twitter.finagle.request.Logger” logger to trace level. 203fed55

  • finagle-http2: HTTP/2 clients now expose the number of currently opened streams under the $client/streams gauge. add0050e

  • finagle-http2: HTTP/2 servers now expose the number of currently opened streams under the $server/streams gauge. ed6800a3

  • finagle-memcached: By default, the Memcached client now creates two connections to each endpoint, instead of 4. 1c5d9eac

  • finagle-redis: Add support for redis Geo Commands. d32d1236 based on the PR written by Mura-Mi []

  • finagle-thrift: Add c.t.f.thrift.service.ThriftServiceBuilder and c.t.f.thrift.service.ReqRepThriftServiceBuilder for backwards compatibility of creating higher-kinded method-per-endpoint clients. f61b6f99

  • finagle-core: c.t.f.http.MethodBuilder and c.t.f.thriftmux.MethodBuilder now expose idempotent and nonIdempotent methods, which can be used to configure retries and the sending of backup requests. 2c1105e5

Bug Fixes:

  • finagle-mysql: Fix a bug with transactions where an exception during a rollback could leave the connection with a partially committed transaction. 4b76bfc2

  • finagle-toggle: c.t.f.toggle.Toggles are independent; that is, applying the same value to two different toggles with the same fraction will produce independent true/false values. 8ef6acb1

Runtime Behavior Changes:

  • finagle-core, finagle-netty4: When creating engines, SslClientEngineFactories now use SslClientEngineFactory.getHostString instead of SslClientEngineFactory.getHostname. This no longer performs an unnecessary reverse lookup when a hostname is not supplied as part of the SslClientConfiguration. d05d1299

  • finagle-http2: Supplies a dependency on io.netty.netty-tcnative-boringssl-static, which adds support for ALPN, which is necessary for encrypted http/2. To use a different static ssl dependency, exclude the tcnative-boringssl dependency and manually depend on the one you want to use. 246be7e5

Breaking API Changes:

  • finagle-base-http, finagle-http: Removed Apache Commons Lang dependency, org.apache.commons.lang3.time.FastDateFormat now is java.time.format.DateTimeFormatter. 8cd6a882

  • finagle-base-http: c.t.f.http.Message.headerMap is now an abstract method. 24e74e52

  • finagle-core: c.t.f.ssl.server.SslServerSessionVerifier no longer uses the unauthenticated host information from SSLSession. 559ae4ad

  • finagle-memcached: ConcurrentLoadBalancerFactory was removed and its behavior was replaced by a Stack.Param inside finagle-core’s LoadBalancerFactory. 502a91d5

  • finagle-thrift, finagle-thriftmux: Remove ReqRep specific methods. Since the “ReqRep” builders are now subclasses of their non-“ReqRep” counterparts their is no longer a need to expose “ReqRep” specific methods. 9737ead8


  • finagle-exp: c.t.f.exp.BackupRequestFilter has been deprecated. Please use c.t.f.client.BackupRequestFilter instead. 3326d2fd

  • finagle-http: c.t.f.http.Request.multipart has been deprecated. Use c.t.f.http.exp.MultipartDecoder instead. a205bd20




  • finatra-http: Change visibility of internal class c.t.finatra.http.internal.marshalling.RequestInjectableValues to be correctly specified as private to the http package. 712edf91


  • finatra-http: Ensure we close resources in the ResponseBuilder. Addresses #440. dafe7259



  • scrooge-generator: Update c.t.fingale.thrit.service.MethodPerEndpointBuilder to build MethodPerEndpoint types. Add new ThriftServiceBuilder for building the higher-kinded form from a ServicePerEndpoint. Users should prefer using the MethodPerEndpointBuilder. 08b25e3d

  • scrooge-generator: Add more metadata to generated java objects 46dd949c Includes:

    • struct and field annotations from the idl files
    • which fields have default values
    • which field values of TType.STRING are actually binary fields
  • scrooge: Add support for scrooge.Request and scrooge.Response types in generated ThriftMethod code. 80bfa731


  • No changes


New Features:

  • util-security: Added for reading Certificate Revocation List PEM formatted X509CRL files. 32d8cc8a