Jordan Parker


Posted September 18, 2018

⛱️ September 2018 Release Notes 🐚 — Version 18.9.0

September is beach season here in the Bay Area! Time to finally get out to the beach and cut fresh new versions of our libraries.

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


New Features

  • finagle-core: c.t.f.FailureFlags is now a public API. This is Finagle’s API for attaching metadata to an exception. As an example this is used to check if an exception is known to be safe to retry. Java compatibility has also been added. e6389831

  • finagle-core: Introducing StackTransformer, a consistent mechanism for accessing and transforming the default ServerStack. 0b6844cd

  • finagle-netty4: Allow sockets to be configured with the SO_REUSEPORT option when using native epoll, which allows multiple processes to bind and accept connections from the same port. 0316ac89

Breaking API Changes

  • finagle-core: Address.hashOrdering now takes a seed parameter and PeerCoordinate.setCoordinate does not take a peerOffset any longer. 9e6734b2

  • finagle-core: Removed deprecated members c.t.f.Failure.{Interrupted, Ignorable, DeadlineExceeded, Rejected, NonRetryable, flagsOf}. 54435221

  • finagle-core: SingletonPool now takes an additional parameter which indicates if interrupts should propagate to the underlying resource. c83ad5d1

  • finagle-core: Remove TimeoutFactory.Role in favor of passing a role to the module function. Since this module is a re-used within the client stack, it needs unique identifiers for each distinct module. 4c46b80d

  • finagle-core: the valid range for the argument to WindowedPercentileHistogram.percentile is now [0.0..1.0], e.g., 0.95 means 95th percentile. 8ad96f96

  • finagle-mux: The old pull-based mux implementations have been removed. d1baeff9

  • finagle-netty3: The type of context of a ChannelTransport has been changed from a LegacyContext to a ChannelTransportContext. 4cdd15d9

  • finagle-netty4: The type of context of a ChannelTransport has been changed from a Netty4Context to a ChannelTransportContext. edce8093

  • finagle-netty4: c.t.f.netty4.param.useUnpoolledByteBufAllocator flag has been removed. There is no good reason to opt-out of a more efficient, pooled allocator. 07495a14

  • finagle-thrift: DeserializeCtx became ClientDeserializeCtx for client side response classification, add ServerDeserializeCtx to handle server side response classification. a8be34bd

  • finagle-serversets: ZkMetadata.shardHashOrdering now takes a seed parameter. 9e6734b2

Bug Fixes

  • finagle-thrift: Thrift clients created via .servicePerEndpoint now propagate exceptions appropriately when the method return type is void. bb2654e1

  • finagle-thrift, finagle-thriftmux: Response classification is enabled in server side. a8be34bd

Runtime Behavior Changes

  • finagle-memcached: A Memcached client (c.t.f.Memcached.Client) is now backed by a more efficient, push-based implementation. c0a1f295

  • finagle-netty4: Finagle’s Netty 4 implementation now defaults to use Linux’s native epoll transport, when available. Run with -com.twitter.finagle.netty4.useNativeEpoll=false to opt out. 137f5672



  • inject-core: Remove unnecessary Await.result Future.Value in TestMixin. 1616188c


New Features

  • scrooge-generator: Scala and Java generated Thrift exceptions now implement c.t.f.FailureFlags. This allows exceptions to carry Finagle metadata such as non-retryable. 438599b0

Twitter Server

Runtime Behavior Changes

  • Move logic to parse the server file out the c.t.server.handler.ServerInfoHandler and into a utility object, c.t.server.BuildProperties to allow for accessing by other server logic such that the properties do not need to be re-parsed anytime access is desired. Failure to load the properties can result in the server not starting in the case of a Fatal exception being thrown. 4c193594

  • Update TwitterServer trait to override the inherited ShutdownTimer to be the Finagle DefaultTimer instead of the c.t.util.JavaTimer defined by default in Also update the overridden suppressGracefulShutdownErrors in TwitterServer to be a val since it is constant (instead of a def). 944b7294


New Features

  • util-logging: New way to construct ScribeHandler for java interoperability. 845620b4

  • util-core: Added Reader#fromAsyncStream for consuming an AsyncStream as a Reader. 39ec9849

  • util-core: Introducing Reader.chunked that chunks the output of a given reader. 1a7c54f9

  • util-core: Added Reader#framed for consuming data framed by a user supplied function. 2316aa5d

  • util-security: Add NullSslSession related objects for use with non-existent SSLSessions. f12de479f

  • util-tunable: Introducing Tunable.asVar that allows observing changes to tunables. 94864832

Breaking API Changes

  • util-core: and are now abstracted over the type they produce/consume (Reader[A] and Writer[A]) and are no longer fixed to Buf. 7718fa29

  • util-core: InMemoryStatsReceiver now eagerly creates the mappings for Counters and Stats instead of waiting for the first call to Counter.incr and Stat.add. 97f0f0fa

  • util-core: is now Both Writable type and its factory method are deprecated; use new Pipe[A] instead. cbff9760

  • util-slf4j-api: Ensure that marker information is used when determining if log level is enabled for methods which support markers. 02d80820

  • util-slfj4-api: Finalize the underlying logger def in the Logging trait as it is not expected that this be overridable. If users wish to change how the underlying logger is constructed they should simply use the Logger and its methods directly rather than configuring the the underlying logger of the Logging trait. Add better Java compatibility for constructing a Logger. 56569b9f