Finagle v6.44.0 Release Notes

  • ๐Ÿ†• New Features

    
    * finagle-thriftmux: Allow ThriftMux.Servers to be filtered, also add `withStack`
      method to server side as well. ``RB_ID=915095``
    
    * finagle-core: FailureAccrual is now production ready. It has been promoted out of
      experimental and moved from com.twitter.finagle.service.exp to
      com.twitter.finagle.liveness. ``RB_ID=914662``
    
    * finagle-core: SSL/TLS APIs have been changed to include methods which work
      based on an SSL configuration, and an SSL configuration and an SSL engine factory.
      ``RB_ID=911209``
    
    * finagle-core: LoadBalancerFactory now exposes a mechanism to order the collection
      of endpoints passed to the balancer implementations. This allows a consistent ordering
      of endpoints across process boundaries. ``RB_ID=910372``
    
    * finagle-core: Introduce `c.t.f.client.EndpointerStackClient`, a mechanism for
      making clients that don't need a transporter and dispatcher. This simplifies
      making non-netty clients. ``RB_ID=912889``
    
    * ๐Ÿ”ง finagle-http2: Add support for liveness detection via pings.  It can be configured
      the same way as it is in mux. ``RB_ID=913341``
    
    * finagle-toggle: Standard toggles now track the last value produced from `apply`.
      These values are visible via TwitterServer's /admin/toggles endpoint. ``RB_ID=913925``
    
    ๐Ÿ’ฅ Breaking API Changes
    
    • ๐Ÿšš finagle-mysql: Support for Netty 3 has been removed, making Netty 4 the only transport implementation. RB_ID=914661

    • finagle-core: com.twitter.finagle.service.exp.FailureAccrualPolicy has been promoted to com.twitter.finagle.liveness.FailureAccrualPolicy

    • ๐Ÿšš finagle-commons-stats: Remove finagle-commons-stats, which was a compatibility layer for a deprecated stats library. Please move to finagle-stats instead. RB_ID=910964

    • finagle-core: SSL/TLS stack params for Finagle running Netty 4 have changed.

      • The TlsConfig param in Transport has been removed.
      • For client engines, the same two parameters as Finagle running Netty 3 are now used:
      • ClientSsl in Transport, which is used for configuring a client Engine's hostname, key credentials, trust credentials, cipher suites, protocols, and application protocols.
      • SslClientEngineFactory in SslClientEngineFactory, which determines how the Engine is created based off of an Address and an SslClientConfiguration.
      • For server engines, the same two parameters as Finagle running Netty 3 are now used:
      • ServerSsl in Transport, which is used for configuring a server Engine's key credentials, trust credentials, cipher suites, protocols, application protocols, and where the server supports or requires client authentication.
      • SslServerEngineFactory in SslServerEngineFactory, which determines how the Engine is created based off of an SslServerConfiguration.
      • Note: Not all client and server configurations work with all engine factories. Each engine factory should document what is not supported by that specific engine factory.
      • Note: By default, Finagle on Netty 4 will use the Netty4ClientEngineFactory and Netty4ServerEngineFactory respectively.

    RB_ID=910500

    • finagle-core: Change the API to LoadBalancerFactory to a more concrete Activity[IndexedSeq[ServiceFactory[Req, Rep]]] since the majority of the load balancer implementations don't need the properties of a Set but instead need ordering guarantees and efficient random access. RB_ID=910372

    • finagle-core: Balancers.aperture now has a new parameter useDeterministicOrdering, which is set to false by default. This feature is still experimental and under construction. This will break the Java API and require the additional param to be passed in explicitly. RB_ID=911541

    • finagle-core: The logic for tracking sessions that was in StdStackServer has been lifted into a new template, ListeningStackServer where implementations define the creation of a ListeningServer from a ServiceFactory, SocketAddress, and a function that tracks accepted sessions. RB_ID=914124

    • finagle-core: Change the AddressOrdering param to no longer take a StatsReceiver, since orderings were simplified and are no longer composite. RB_ID=914113

    • ๐Ÿšš finagle-core: Remove deprecated methods on c.t.f.Client:

      • newClient(dest: Group[SocketAddress])
      • newService(dest: Group[SocketAddress])

    RB_ID=914787

    • finagle-core: c.t.f.ListeningServer no longer extends c.t.f.Group. Use c.t.f.ListeningServer.boundAddress to extract the address from the server. RB_ID=914693

    • ๐Ÿšš finagle-core: Remove deprecated c.t.f.group.StabilizingGroup. Use c.t.f.addr.StabilizingAddr instead. RB_ID=914823

    • finagle-core: Constructors for c.t.f.ChannelException and its subclasses now have overloads that take Option\s instead of allowing null. While the existing constructors remain, and forward to the new ones, this can still cause compilation failures when the arguments are ambiguous. RB_ID=914800

    • ๐Ÿšš finagle-core: Remove MimimumSetCluster since it has been deperecated for quite some time. Instead, use finagle logical destinations via Names. RB_ID=914849

    • ๐Ÿšš finagle-core: Remove deprecated c.t.f.Resolver.resolve. Use c.t.f.Resolver.bind instead. Remove deprecated c.t.f.BaseResolver.resolve. Use c.t.f.Resolver.eval instead. RB_ID=914986

    • finagle-http: c.t.f.http.Http codec has disappeared as part of Netty 4 migration. Use c.t.f.Http.client or c.t.f.Http.server stacks instead. RB_ID=912427

    • ๐Ÿšš finagle-kestrel: Remove c.t.f.kestrel.param.KestrelImpl. Kestrel clients and servers now use Netty 4 and cannot be configured for Netty 3. RB_ID=911031

    • ๐Ÿšš finagle-memcached: Remove c.t.f.memcached.param.MemcachedImpl. Memcached clients and servers now use Netty 4 and cannot be configured for Netty 3. RB_ID=911031

    • ๐Ÿšš finagle-kestrel: Remove commands that are not supported by the client:

      • com.twitter.finagle.kestrel.protocol.DumpConfig
      • com.twitter.finagle.kestrel.protocol.DumpStats
      • com.twitter.finagle.kestrel.protocol.FlushAll
      • com.twitter.finagle.kestrel.protocol.Reload
      • com.twitter.finagle.kestrel.protocol.ShutDown
      • com.twitter.finagle.kestrel.protocol.Stats
      • com.twitter.finagle.kestrel.protocol.Version

    RB_ID=911206

    • ๐Ÿšš finagle-memcached: Remove deprecated c.t.f.memcached.KetamaClientBuilder. Use c.t.f.Memcached.client to create a Memcached client. RB_ID=907352

    • ๐Ÿšš finagle-memcached: Remove deprecated c.t.f.memcached.replication.ReplicationClient. Use c.t.f.memcached.replication.BaseReplicationClient with clients created using c.t.f.Memcached.client. RB_ID=907352

    • ๐Ÿšš finagle-memcached: Remove deprecated methods on c.t.f.memcached.Client:

      • apply(name: Name)
      • apply(host: String)

    Use c.t.f.Memcached.client to create a Memcached client. RB_ID=908442

    • ๐Ÿšš finagle-memcached: Remove deprecated c.t.f.memcached.protocol.text.Memcached object. Use c.t.f.Memcached.client to create Memcached clients. RB_ID=908442

    • ๐Ÿšš finagle-memcached: Remove deprecated c.t.f.memcached.Server class. Use c.t.f.memcached.integration.TestMemcachedServer for a quick test server. RB_ID=914827

    • โœ‚ Remove deprecated c.t.f.memcached.PartitionedClient object. Use c.t.f.memcached.CacheNodeGroup.apply instead of c.t.f.memcached.PartitionedClient.parseHostWeights. RB_ID=914827

    • โœ‚ Remove deprecated c.t.f.memcached.util.ParserUtils.DIGITS. Use "\d+$" instead. Remove deprecated c.t.f.memcached.util.ParserUtils.DigitsPattern. Use Pattern.compile(\d+$) instead. RB_ID=914827

    • ๐Ÿšš finagle-memcached: Remove old c.t.f.memcached.replicated.BaseReplicationClient and c.t.f.memcached.migration.MigrationClient, and most c.t.f.memcached.CachePoolCluster methods. RB_ID=910986

    • ๐Ÿšš finagle-memcached: Remove old c.t.f.memcached.migration.DarkRead, and c.t.f.memcached.migration.DarkWrite. RB_ID=911367

    • ๐Ÿšš finagle-memcached: Remove c.t.f.memcached.CachePoolConfig. RB_ID=914623

    • ๐Ÿšš finagle-mux: Netty 3 implementation of Mux is removed. Default is Netty 4. RB_ID=914239

    • finagle-netty4: DirectToHeapInboundHandler was renamed to AnyToHeapInboundHandler and now copies any inbound buffer (not just directs) on heap. RB_ID=913984

    • ๐Ÿšš finagle-thrift, finagle-thriftmux: Remove rich client/server support for prior versions of Scrooge generated code. RB_ID=911515

    • finagle-core: c.t.f.client.Transporter no longer has a close method, which was introduced in 6.43.0. It was sort of a hack, and we saw the opportunity to do it properly. RB_ID=912889

    • ๐Ÿšš finagle-core, finagle-mux: Move FailureDetector from c.t.f.mux to c.t.f.liveness. This also means that the sessionFailureDetector flag is now c.t.f.liveness.sessionFailureDetector. RB_ID=912337

    ๐Ÿ› Bug Fixes

    
    * ๐ŸŒฒ finagle-exp: `DarkTrafficFilter` now respects the log level when `HasLogLevel`,
      and otherwise defaults the level to `warning` instead of `error`. ``RB_ID=914805``
    
    * ๐Ÿ›  finagle-netty4: Fixed connection stall on unsuccessful proxy handshakes in Finagle clients
      configured with HTTP proxy (`Transporter.HttpProxyTo`).  ``RB_ID=913358``
    
    โš™ Runtime Behavior Changes
    
    • ๐ŸŒฒ finagle-netty4: Finagle is no longer logging the failed proxy handshake response. RB_ID=913358

    • finagle-netty4: SOCKS5 proxies are now bypassed if the connect destination is localhost. This matches Finagle's prior behavior from when Netty 3 was the default transport implementation. RB_ID=914494

    Dependencies

    
    * ๐Ÿšš finagle-memcached: Remove dependency on com.twitter.common:io-json. ``RB_ID=914623``