Hamdi Allam


Posted August 13, 2021

August 2021 Release Notes - Version 21.8.0

August release, hot off the press:


New Features

  • util-stats: add getAllExpressionsWithLabel utility to InMemoryStatsReceiver. 29602592
  • util-app: Experimentally crossbuilds with Scala 3. 94f1fa37
  • util-app-lifecycle: Experimentally crossbuilds with Scala 3. 5f67cddb
  • util-codec: Experimentally crossbuilds with Scala 3. 35b00359
  • util-hashing: Experimentally crossbuilds with Scala 3. b9ef5d06
  • util-lint: Experimentally crossbuilds with Scala 3. 5b960dd1
  • util-registry: Experimentally crossbuilds with Scala 3. 39b0355d
  • util-thrift: Experimentally crossbuilds with Scala 3. 3a93c8c7
  • util-app: Introduce a new Command class which provides a Reader interface to the output of a shell command. 8b88bcc6
  • util-core: Experimentally crossbuilds with Scala 3. d84bfbaa

Breaking API Changes

  • util-app: Flags and GlobalFlag now use ClassTag instead of Manifest. 94f1fa37
  • util-thrift: ThriftCodec now uses ClassTag instead of Manifest. In scala3 Manifest is intended for use by the compiler and should not be used in client code. 3a93c8c7
  • util-core (BREAKING): Remove AbstractSpool. Java users should use Spools static class or the Spool companion object to create instances of Spool. d84bfbaa

Runtime Behavior Changes

  • util: Update ScalaCheck to version 1.15.4 1efeb9d9
  • util-jackson: JsonDiff#toSortedString now includes null-type nodes, so that JsonDiff.Result#toString shows differences in objects due to such nodes. cd03cf0d


Runtime Behavior Changes

  • scrooge: Update ScalaCheck to version 1.15.4. scrooge-sbt-plugin and scrooge-generator still use the older version 1.14.3 because they compile with Scala 2.10. ad063665


New Features

  • finagle-mysql: introduce newRichClient(dest: String, label: String) method, which removes the need for extra boilerplate to convert the destination String to a c.t.finagle.Name when specifying both dest and label in String form. c211bfbe
  • finagle-http, finagle-thriftmux: introduce client.withSni() API. Use this api to specify an SNI hostname for TLS clients. a8ec457b

Runtime Behavior Changes

  • finagle: Update Caffeine cache library to version 2.9.1 d9e551a3
  • finagle: Update ScalaCheck to version 1.15.4 145ab4aa
  • finagle-core: change ServiceClosedException to extend FailureFlags and to be universally retryable e621e5ff
  • finagle-http: remove the com.twitter.finagle.http.UseH2, com.twitter.finagle.http.UseH2CClients2, com.twitter.finagle.http.UseH2CServers and com.twitter.finagle.http.UseHttp2MultiplexCodecClient toggles. The configuration for c.t.finagle.Http.client and c.t.finagle.Http.server now default to using the HTTP/2 based implementation. To disable this behavior, use c.t.finagle.Http.client.withNoHttp2 and c.t.finagle.Http.server.withNoHttp2 respectively.

    Alternatively, new GlobalFlag’s have been introduced to modify the default behavior of clients and servers that have not been explicitly configured, where the com.twitter.finagle.http.defaultClientProtocol and com.twitter.finagle.http.defaultServerProtocol flags can be set to HTTP/1.1 to modify the default client or server configuration, respectively. PHAB_ID=D625880`

  • finagle-netty4: Finagle now reuses Netty “boss” (or parent) threads instead of creating a new thread per server. Netty parent threads are servicing the server acceptor, a relatively lightweight component that listens for new incoming connections before handing them out to the global worker pool. 5e9998fc

  • finagle-http2: introduce optional parameter NackRstFrameHandling to enable or disable NACK conversion to RST_STREAM frames. 728aed03

  • finagle-thrift, finagle-thriftmux: clients may start reporting (correctly) lower success rate. Previously server exceptions not declared in IDL were erroneously considered as successes. The fgix also improves failure detection and thus nodes previously considered as healthy by failure accrual policy may be considered as unhealthy. 3bba41c6

Bug Fixes

  • finagle-core: Add BackupRequestFilter to client registry when configured. 56092e96
  • finagle-thrift, finagle-thriftmux: clients now treat server exceptions not declared in IDL as failures, rather than successes, and do not skip the configured response classifier for failure accrual. 3bba41c6



  • inject-core: Fixed a bug where c.t.inject.TestMixin#assertFailedFuture would incorrectly pass for non-failed c.t.util.Future in some cases where the tested failure is a supertype of org.scalatest.exceptions.TestFailedException. b1f14ebb

Breaking API Change

  • inject-utils: Removed deprecated c.t.inject.conversions.string, use c.t.conversions.StringOps in the util/util-core project instead. ceed4f4a
  • inject-utils: Removed deprecated c.t.inject.conversions.tuple, use c.t.conversions.TupleOps in the util/util-core project instead. 0c95c240
  • inject-utils: Removed deprecated c.t.inject.conversions.seq, use c.t.conversions.SeqOps in the util/util-core project instead. 8bd42557
  • inject-utils: Removed implicit class RichMap from c.t.inject.conversions.map, use c.t.conversions.MapOps in the util/util-core project instead. 19ad496a


  • thrift: Update the test c.t.finatra.thrift.ThriftClient to close client and clean-up resources during the EmbeddedTwitterServer close. e6c792ed
  • finatra: Update ScalaCheck to version 1.15.4 f40869cd

Twitter Server

Admin Endpoint Versions

  • Bump metric_metadata.json to version 3.2: CounterishGauge now exports with “kind”: “counterish_gauge”, instead of “counterish_gauge”: “true” 93121600.
  • Bump expressions.json to version 1.1: the labels field in the Metric Metadata Expressions output to return a dictionary instead of a well-defined JSON object. However, the existing fields in labels will be preserved for now. 4cda5ed0

Runtime Behavior Changes

  • Update ScalaCheck to version 1.15.4 2bd4d8b5