Jordan Parker


Posted October 27, 2017

🎃 October 2017 Release Notes - Version 17.10.0

The October releases have arrived! For this release and hereafter, Finagle, Finatra, Scrooge, Util, and TwitterServer will be versioned as $year.$month.$patch, as opposed to $major.$minor.$patch. This means that all project versions will be in sync.

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


New Features:

  • finagle-core: DeadlineFilter may now be created from the class and used as a regular Filter in addition to a stack module as before. b80a1df4

  • finagle-mysql: Add ability to toggle the CLIENT_FOUND_ROWS flag. fae2e69d

  • finagle-http: Separated the DtabFilter.Extractor from the ServerContextFilter into a new module: ServerDtabContextFilter. While this is still enabled in the default Http server stack, it can be disabled independently of the ServerContextFilter. 335d639f

Runtime Behavior Changes:

  • finagle-netty4: Netty4ClientEngineFactory and Netty4ServerEngineFactory now validate loaded certificates in all cases to ensure that the current date range is within the validity range specified in the certificate. dc3230e3

  • finagle-netty4: TrustCredentials.Insecure now works with native SSL/TLS engines. 6b822e94

  • finagle-http2: Upgraded to the new netty http/2 API in netty version 4.1.16.Final, which fixes several long-standing bugs but has some bugs around cleartext http/2. One of the work-arounds modifies the visibility of a private field, so it’s incompatible with security managers. This is only true for http/2–all other protocols will be unaffected. bb01393f

  • finagle-http: Netty 3 HeaderMap was replaced with our own implementation. 199dc51c


  • finagle-base-http: With the intention to make c.t.f.http.Cookie immutable, set methods on c.t.f.http.Cookie have been deprecated:
    • comment_=
    • commentUrl_=
    • domain_=
    • maxAge_=
    • path_=
    • ports_=
    • value_=
    • version_=
    • httpOnly_=
    • isDiscard_=
    • isSecure_= Use the c.t.f.http.Cookie constructor to set domain, maxAge, path, value, httpOnly, and secure. comment, commentUrl, ports, version, and discard have been removed per RFC-6265. 71760096.

Alternatively, use the domain, maxAge, path, httpOnly, and secure methods to create a new Cookie with the existing fields set, and the respective field set to a given value. 14beb975

  • finagle-base-http: c.t.f.http.Cookie.isSecure and c.t.f.http.Cookie.isDiscard have been deprecated. Use for c.t.f.http.Cookie.isSecure. isDiscard has been removed per RFC-6265. 71760096

Breaking API Changes:

  • finagle-mysql: Moved Cursors.cursor method to Client trait, and removed Cursors trait. This allows cursor queries to used with transactions. 1224721c

  • finagle-mux: Expose transport contexts in mux.Request and mux.Response. f0f46785

  • finagle-mux: The “leased” gauge has been removed from the mux client implementation since the metric is reported as the sum of the value over all clients which is unlikely to be useful. 1c31e384



  • inject-core: Remove deprecated c.t.inject.TestMixin#resetMocks. Properly use c.t.inject.Mockito trait in tests. Deprecate resetting of mocks and resettables in c.t.inject.IntegrationTestMixin. b8cfeb65

  • finatra-http: Parameterize @RouteParam,@QueryParam,@FormParam, and @Header to allow specifying the field name to read from the params or header map. Previously these annotations only looked for values by the case class field name leading to possible ugliness when defining case class fields (especially with @Header). 9913a6cc

  • finatra: Add support for using a java.lang.annotation.Annotation instance with the #bind[T] testing DSL. This adds a way to bind instances in tests that use the @Named binding annotation. f9503c4c

  • finatra-http: Allow setting the content type of a Mustache view. 2009159f


  • finatra-utils: Remove deprecated ExternalServiceExceptionMatcher. 9c78117a

  • finatra-jackson: ScalaType’s isMap and isCollection methods now check that the given object’s class is a subclass of scala.collection.Map[Any, Any] and scala.collection.Iterable[Any], respectively. Previously the superclasses’ packages were unspecified. This is a runtime behavior change. 15a4e529

  • finatra-http: Require that route URIs and prefixes begin with forward slash (/). 9bd53557

  • inject-utils: (BREAKING API CHANGE) RichOption toFutureOrFail, toTryOrFail, and toFutureOrElse signature changed to take the fail or else parameter by name. a1efd13f

  • inject-server: Remove usage of deprecated c.t.inject.logging.Slf4jBridgeUtility. Change usages to c.t.util.logging.Slf4jBridgeUtility. 4cf842ba

  • finatra-http, inject-thrift-client: Remove netty3 specific types and dependency. In finatra-http, the code using these types is deprecated and can be removed allowing us to remove netty3-specific dependencies. In inject-thrift-client we can default to use the DefaultTimer for the backupRequestFilter method param instead of the HashedWheelTimer. d8fb15fe


  • finatra-jackson: Fix issue causing IllegalArgumentException from Validations to be swallowed. A catch clause in the c.t.finatra.json.internal.caseclass.jackson.FinatraCaseClassDeserializer is too broad as it catches thrown IllegalArgumentExceptions from field validations when the annotation is applied to a field of the incorrect type, e.g., when @Max is applied to a String field. 37ec7050


API Changes:

  • util-app: and letClear are now generic in their return type. a58db289

Bug Fixes:

  • util-core: Fix Buf.ByteArray.Shared.apply(bytes,begin,end) constructor function. 36377837

Runtime Behavior Changes:

  • util-core: now validates its input arguments. 36377837

  • util-jvm: The jvm/mem/postGC/{poolName}/max metric has been removed because it is the same as the jvm/mem/current/{poolName}/max metric. 357912da

  • util-security: Assert validity of X.509 certificates when read from a file. Attempting to read a will now assert that the certificate is valid, i.e., if the current date and time are within the validity period given in the certificate. 9dc859ef


  • scrooge-generator: For generated scala $FinagleService, moved per-endpoint statsFilter to the outermost of filter chain so it can capture all exceptions, added per-endpoint response classification in statsFilter. 853323dc

  • scrooge-generator: Generated scala $FinagleClient takes a RichClientParam for all configuration params, such as TProtocolFactory, ResponseClassifier, maxReusableBufferSize, and StatsReceiver, $FinagleService takes a RichServerParam. 8bdf36cb

Twitter Server

  • TwitterServer now uses the slf4j-api for framework logging. Backwards compatibility is supplied via the twitter-server/slf4j-jdk14 library. See the TwitterServer documentation for more information. c458b881

  • All admin endpoints except ping + healthcheck are now by-default served outside the global worker pool. acf13a2a

  • Rename AdminHttpServer#defaultHttpPort to AdminHttpServer#defaultAdminPort. 15e35a3a


  • Netty has been updated to 4.1.16 f28705d5