Dave Rusek


Posted November 5, 2019

November 2019 Release Notes - Version 19.11.0 ❄️

Now that Halloween has come and gone, it’s time to get ready for cold weather fun! ❄️


New Features

  • finagle-base-http: The Uri class now provides access publicly to its path, which is the request uri without the query parameters. f40fe447
  • finagle-mysql: Adding native support to finagle-mysql for MySQL JSON Data Type. A client can now use jsonAsObjectOrNull[T] or getJsonAsObject[T] APIs on c.t.f.mysql.Row to read the underlying json value as type T or use jsonBytesOrNull API to get a raw byte array of the the json column value. 4d403051
  • MySQL integration tests can now run on a port other than the default (3306). Add a port property to .finagle-mysql/integration-test.properties to customize the value. 4d403051

Runtime Behavior Changes

  • finagle: Upgrade to Netty 4.1.43.Final and netty-tcnative 2.0.26.Final. cfaaa471
  • finagle: Add initial support for JDK 11 compatibility. 04def84b
  • finagle: Upgrade to caffeine 2.8.0 c335b29e
  • finagle-http2: Nacks in the form of RST(STREAM_REFUSED | ENHANCE_YOUR_CALM) no longer surface as a RstException, instead opting for a generic Failure to be symmetric with the HTTP/1.x nack behavior. cb67fa33
  • finagle-mux: The mux handshake latency stat has be changed to Debug verbosity. 0eb2cfb6
  • finagle-serversets: finagle/serverset2/stabilizer/notify_ms histogram has been downgraded to debug verbosity. 30d3d0ea

Breaking API Changes

  • finagle-base-http: c.t.f.http.codec.HttpContext moved into c.t.f.http.codec.context.HttpContext cc29b265



  • finatra-http: Better handling of URI decoding issues when extracting path parameters for routing. If we cannot extract a path pattern, and the exception is not intercepted by a user-defined Exception Mapper, we will now explicitly return a 400 - BAD REQUEST. Fixes #507. 5f293844


  • finatra: Add initial support for JDK 11 compatibility. dfc521c9
  • inject-core: Add support for optional binding in c.t.inject.TwitterModule. 285da3bb


  • finatra-http: (BREAKING API CHANGE) AsyncStream[Buf] => AsyncStream[String] and Reader[Buf] => Reader[String] handlers will always be tread the output as a JSON arrays of Strings. Whereas, before, the incoming bytes would have been converted to String and returned as-is. 43eaa555
  • finatra: Deprecate c.t.finatra.http.modules.DocRootModule. Introduce FileResolverModule. The DocRootModule defines configuration flags for the FileResolver which was moved from finatra/http to a more correctly generic location in finatra/utils. However, configuration for injection of a properly configured FileResolver is still incorrectly tied to HTTP because of the DocRootModule. Thus, we deprecate the DocRootModule and introduce the c.t.finatra.modules.FileResolverModule which is defined closer to the c.t.finatra.utils.FileResolver in finatra/utils. This allows the FileResolver to be properly configured outside of HTTP concerns. 5a97b2aa
  • finatra-thrift: Updated BUILD files for Pants 1:1:1 layout. c46209fd
  • inject-ports: Add finatra/inject/inject-ports which has c.t.inject.server.Ports and c.t.inject.server.PortUtils. 5676d038
  • inject-utils: Move AnnotationUtils to c.t.inject.utils.AnnotationUtils and make public for use. 0ac7af99
  • finatra-http: Updated package structure for Pants 1:1:1 layout. Moved META-INF/mime.types file to finatra/utils which is where the FileResolver is located for proper resolution of mime types from file extension. 57555f80


New Features

  • util: Add initial support for JDK 11 compatibility. e6970ed1

  • util-core: Created public method Closable.stopCollectClosablesThread that stops CollectClosables thread. a8260998

  • util-core: Introduced Reader.fromIterator to create a Reader from an iterator. It is not recommended to call iterator.next() after creating a Reader from it. Doing so will affect the behavior of Reader.read() because it will skip the value returned from iterator.next. d1b42f4b

Runtime Behavior Changes

  • util: Upgrade to caffeine 2.8.0 f35ae591

Breaking API Changes

  • util-core: Add c.t.io.BufReader.readAll to consume a Reader[Buf] and concat values to a Buf. Replace c.t.io.Reader.readAll with Reader.readAllItems, the new API consumes a generic Reader[T], and return a Seq of items. a47a219b
  • util-core: Moved c.t.io.Reader.chunked to c.t.io.BufReader.chunked, and Reader.framed to BufReader.framed. 459038f9
  • util-core: Moved c.t.io.Reader.copy to c.t.io.Pipe.copy, and Reader.copyMany to Pipe.copyMany. 5562ebf3


  • util-core: Mark c.t.io.BufReaders, c.t.io.Bufs, c.t.io.Readers, and c.t.io.Writers as Deprecated. These classes will no longer be needed, and will be removed, after 2.11 support is dropped. 844fe24d
  • util-stats: Removed deprecated methods stat0 and counter0 from StatsReceiver. 5119e65c

Twitter Server

  • Add initial support for JDK 11 compatibility. 99914111
  • The endpoints section of the clients page has been fixed to no longer render an incorrect html line break tag. 4463e9d5


  • scrooge: Add initial support for JDK 11 compatibility. e7b88e84