Kevin Oliver


Posted August 7, 2018

🌫 August 2018 Release Notes — Version 18.8.0

Fogust is upon us and brings the August releases.

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


New Features

  • finagle-core: Introducing the new c.t.f.tracing.Tracing API for more efficient tracing (dramatically reduces the number of context lookups; see scaladoc for c.t.f.tracing.Trace). 547cd864

  • finagle-core: c.t.f.tracing.Trace facade API now provides forwarding record methods for all kinds of annotations and is a preffered way of recording traces. 50c00d88

  • finagle-thriftmux: Promote the push-based ThriftMux implementation out of experimental status. eedd1fd8

Breaking API Changes

  • finagle-base-http: c.t.f.http.cookie.exp.supportSameSiteCodec has been moved out of the exp package to c.t.f.http.cookie.supportSameSiteCodec. 5e5ea390

  • finagle-core: c.t.f.tracing.Trace.record(Record) now accepts the record argument by value (previously by name). 33841d21

  • finagle-mysql: c.t.f.mysql.CanBeParameter‘s implicit conversions timestampCanBeParameter, sqlDateCanBeParameter, and javaDateCanBeParameter have been consolidated into a single implicit, dateCanBeParameter. b486772d

Bug Fixes

  • finagle-http2: Fixed a race condition caused by c.t.f.http.transport.StreamTransports being closed, but that status not being reflected right away, causing a second request to fail. 68f1035f

Runtime Behavior Changes

  • finagle-core: c.t.f.tracing.Trace API is no longer guarding Trace.record calls behind Trace.isActivelyTracing. Add Trace.isActivelyTracing guards on the call sites if materializing tracing annotations is a performance concern. 33841d21

  • finagle-mysql: Clients will now issue a ROLLBACK each time a service is checked back into the connection pool. This can be disabled via Mysql.Client.withNoRollback. e3221597

  • finagle-thriftmux: The push-based server muxer is now the default. In both synthetic tests and production it has shown signifcant performance benefits and is simpler to maintain. 735a6bae


  • finagle-mux: The pull based mux implementation, c.t.f.Mux, has been deprecated in favor of the push-based mux implementation, c.t.f.pushsession.MuxPush. 735a6bae



  • finatra-http: (BREAKING API CHANGE) Typical TLS Configuration for an HTTPS server has been moved into a trait, c.t.finatra.http.Tls which also defines the relevant flags (and overridable defaults) for specifying the SSL cert and key paths. Users can choose to mix this trait into their c.t.finatra.http.HttpServer classes in order to specify an HTTPS server. Users who wish to maintain the current HTTPS functionality SHOULD mix in the Tls trait to their HttpServer: e.g., class FooService extends HttpServer with Tls { ... } Additionally, TLS transport configuration for the underlying Finagle c.t.finagle.Http.Server is no longer done by default when creating and running an HTTPS server. This is to allow for more flexible configuration on the underlying c.t.finagle.Http.Server when setting up TLS. Thus it is recommended that users ensure to either mix in the provided Tls trait or provide the correct c.t.finagle.Http.Server transport configuration via the configureHttpsServer method. 3c19b2df

  • finatra-http: Rename defaultFinatraHttpPort to defaultHttpPort. 6fe4a3bf

  • finatra-utils: Remove deprecated c.t.f.utils.Handler. 1088ca4b


Bug Fixes

  • util-core: Fixed an issue with Future.joinWith where it waits for completion of both futures even if one has failed. This also affects the join method, which is implemented in terms of joinWith. 9b598f3f


New Features

  • Add onExit lifecycle callback to c.t.server.Hook (which is now an abstract class) to allow implemented hooks to execute functions in the App#onExit lifecycle phase. Note: c.t.server.Hook#premain now has a default implementation and requires the override modifier. 06836d39


  • scrooge-core: Add an interface for Scala generated Enum objects. c27d13ef

  • scrooge-core: Trait c.t.scrooge.ThriftService is now c.t.finagle.thrift.ThriftServiceMarker. Scrooge generated service objects now all inherit from c.t.finagle.thrift.ThriftService. Also, the AsClosableMethodName string was formerly part of c.t.finagle.thrift.ThriftService, but now is defined in the c.t.scrooge package object. 125e955e

  • scrooge-generator: Thrift service objects now contain unsafeBuildFromMethods, which constructs a ReqRepServicePerEndpoint from a map of ThriftMethod -> ThriftMethod.ReqRepServicePerEndpointServiceType. It is unsafe because the types are not checked upon service construction, only when a request is attempted. 125e955e