Jing Yan


Posted September 10, 2019

September 2019 Release Notes - Version 19.9.0 🍁

Embrace a beautiful fall with our freshly baked September release! 🍪



New Feature

  • finagle-{core,init,toggle,netty4}: Enables cross-build for 2.13.0. f21a54e0
  • finagle-base-http: Add None as a valid SameSite header value. 0c43561a

Breaking API Changes

  • finagle-core: The constructor on c.t.f.filter.NackAdmissionFilter used for testing that took an Ema.Monotime has been removed. 38fae802
  • finagle-core: The Adddress.ServiceFactory variant has been promoted from experimental status and moved to be properly part of c.t.f.Address. 68cf34b8
  • finagle-http: improve performance of c.t.f.http.filter.StatsFilter. This results in two notable API changes: 1. There is a private[filter] constructor which can take a () => Long for determining the current time in milliseconds (the existing StatsFilter(StatsReceiver) constructor defaults to using Stopwatch.systemMillis for determining the current time in milliseconds. 2. The protected count(Duration, Response) method has been changed to private[this] count(Long, Response) and is no longer part of the public API. f6ce4529
  • finagle-partitioning: the hash-based routing that memcached uses has been relocated to a new top-level module so that it can be used more broadly across protocols. This results in several classes moving to the c.t.f.partitioning package: 1. The Memcached.param.EjectFailedHost, KeyHasher, and NumReps parameters are now available under c.t.f.partitioning.param 2. The FailureAccrualException and CacheNode definitions are now in the c.t.f.paritioning package. 3. The ZkMetadata class has moved to c.t.f.p.zk and the finagle-serverset module now depends on finagle-partitioning. f27073dc

Runtime Behavior Changes

  • finagle-http: c.t.f.http.service.NotFoundService has been changed to no longer use Request.response. Use of Request.response is deprecated and discouraged. acac9c38
  • finagle-mysql: Handshaking for the MySQL ‘Connection Phase’ now occurs as part of session acquisition. As part of this change, the com.twitter.finagle.mysql.IncludeHandshakeInServiceAcquisition toggle has been removed and it no longer applies. cd4877c1
  • finagle: Upgrade to Netty 4.1.39.Final. 001b0940
  • finagle-http: Enable Ping Failure Detection for MultiplexHandler based HTTP/2 clients. Note that the Ping Failure Detection implementation has been removed completely from the non-MultiplexHandler based HTTP/2 client. 8af32742
  • finagle: Added a dependency on Scala Collections Compat 2.1.2. f21a54e0

Bug Fixes

  • finagle-base-http: Removes the Cookie header of a c.t.f.http.Message whenever its cookie map becomes empty. f9b76a0f



  • finatra-kafka: Add withConfig method variant which takes a Map[String, String] to allow for more complex configurations 60b5d3f1


  • finatra: Remove commons-lang as a dependency and replace it with alternatives from stdlib when possible. 1c32f9a7
  • inject-server: Changed c.t.inject.server.InMemoryStatsReceiverUtility to show the expected and actual values as part of the error message when metric values do not match. cefb1749
  • finatra-kafka-streams: Improve StaticPartitioning error message ec0f87fd


  • finatra-http: Support Http 405 response code, improve routing performance for non-constant route 983a2c8f
  • inject-app: Update c.t.inject.app.App to only recurse through modules once. We currently call TwitterModule#modules more than once in reading flags and parsing the list of modules over which to create the injector. When TwitterModule#modules is a function that inlines the instantiation of new modules we can end up creating multiple instances causing issues with the list of flags defined in the application. This is especially true in instances of TwitterModule implemented in Java as there is no way to implement the trait TwitterModule#modules method as a eagerly evaluated value. We also don’t provide an ergonomic method for Java users to define dependent modules like we do in apps and servers via App#javaModules. Thus we also add a TwitterModule#javaModules function which expresses a better API for Java users. 8d0a59fa


Runtime Behavior Changes

  • util-app: Better handling of exceptions when awaiting on the c.t.app.App to close at the end of the main function. We Await.ready on this as the last step of App#nonExitingMain which can potentially throw a TimeoutException which was previously unhandled. We have updated the logic to ensure that TimeoutExceptions are handled accordingly. b17297c7
  • util: Upgrade to Scala Collections Compat 2.1.2. d4117162

Breaking API Changes

  • util-core: BoundedStack is unused and really old code. Delete it. eeb0e947
  • util-logging: com.twitter.logging.ScribeHandler and com.twitter.logging.ScribeHandlers have been removed. Users are encouraged to use slf4j for logging. However, if a util-logging integrated ScribeHandler is still required, users can either build their own Finagle-based scribe client as in ScribeRawZipkinTracer in finagle-zipkin-scribe, or copy the old ScribeHandler implementation directly into their code. f4e56599


  • scrooge-generator: Introduce i8 type identifier as an alias for byte type. 03d84aea

Twitter Server

No Changes