Finagle v6.45.0 Release Notes

  • ๐Ÿ†• New Features

    
    * finagle: Changed dependencies of Netty from 4.1.9 to 4.1.10 and tcnative
      from 2.0.0 to 2.0.1. ``RB_ID=916056``
    
    * finagle-core: `c.t.f.n.ssl.SslConnectHandler` is no longer exported publicly.
      It has also been renamed to `c.t.f.n.ssl.client.SslClientConnectHandler`.
      ``RB_ID=916932``
    
    * finagle-core: c.t.f.factory.ServiceFactoryCache is now exported publicly.
      ``RB_ID=915064``
    
    * finagle-core: Allow customization of load balancer behavior when no nodes
      are `Status.Open`. See the user guide for details:
      https://twitter.github.io/finagle/guide/Clients.html#behavior-when-no-nodes-are-available
      ``RB_ID=916145``
    
    * finagle-core: The global `c.t.f.naming.NameInterpreter` can be optionally set using
      service loader. ``RB_ID=917082``
    
    * ๐Ÿ‘ finagle-redis: Support scanning over sets and sorted sets with SSCAN and ZSCAN.
      ``RB_ID=916484``
    
    ๐Ÿ› Bug Fixes
    ~~~~~~~~~
    
    * finagle-mux: Disable Netty4RefCountingControl decoder when message fragmentation
      is enabled. ``PHAB_ID=D58153``
    
    * ๐Ÿ›  finagle: Fixed Java API for `withStack` for Client and Server implementations.
      Java users now get the correct types for calls such as `c.t.f.Http.client().withStack`
      and `c.t.f.Http.server().withStack`. ``RB_ID=915440``
    
    * finagle-thrift, finagle-thriftmux: Clients created using `newServiceIface` now use the
      configured `c.t.f.service.ResponseClassifier` (or `c.t.f.service.ResponseClassifier.Default` if
      not configured) for per-method stats and usage in `c.t.f.liveness.FailureAccrualFactory` and
      `c.t.f.stats.StatsFilter`. ``RB_ID=917010``
    
    โš™ Runtime Behavior Changes
    
    • 0๏ธโƒฃ finagle: Add a floor of 8 to the default values of the flags c.t.f.netty3.numWorkers and c.t.f.netty4.numWorkers. RB_ID=916465

    • 0๏ธโƒฃ finagle-core: c.t.f.util.DefaultTimer is decoupled from Netty 3 and is loaded via the LoadService machinery. If no timers are available on the class path, the JavaTimer instead is used instead. This ony affects direct usages of DefaultTimer as all Finagle protocols are using Netty 4 HashedWheelTimer at this point. RB_ID=915924

    • finagle-core: The load balancer implementations no longer close the endpoint resources when they are closed. Instead, they treat them as externally managed resources and expect the layers above to manage them. No change is required if using the Balancers in the context of a Finagle client. If that's not the case, however, managing the life cycle of the passed in endpoints is necessary. RB_ID=916415

    • finagle-core: Aperture load balancers now expire idle sessions which fall out of the aperture window. RB_ID=916508

    • 0๏ธโƒฃ finagle-http: Uses Netty 4 as the default transport implementation. Use .configured(Http.Netty3Impl) to switch implementation over to Netty 3. PHAB_ID=D58698 RB_ID=917936

    • finagle-memcached: If the client decoder detects a protocol failure, the ClientTransport will close the connection. RB_ID=917685

    • ๐Ÿšš finagle-netty4: poolReceiveBuffers toggle is removed (suppressed by UsePooling). RB_ID=917912

    • finagle-http: To conform to RFC 2616, a message body is NO LONGER sent when 1xx, 204 and 304 responses are returned. To conform with RFC 7230, a Content-Length header field is NOT sent for 1xx and 204 responses. Both rules are enforced even if users intentionally add body data or the header field for these responses. If violation of these rules is detected then an error message is logged. RB_ID=917827

    ๐Ÿ’ฅ Breaking API Changes

    
    * ๐Ÿšš finagle: `$protocol.Client.params/stack` and `$protocol.Server.params/stack` are removed,
      use similar methods on instances instead: `$protocol.client.params/stack` and
      `$protocol.server.params/stack` instead. ``RB_ID=915703``
    
    * ๐Ÿ— finagle-core: Remove deprecated `c.t.f.builder.ClientBuilder.tracerFactory`.
      Use `c.t.f.builder.ClientBuilder.tracer` instead. Remove deprecated
      `c.t.f.tracing.Tracer.Factory`. Use `c.t.f.tracing.Tracer` instead.
      ``RB_ID=915481``
    
    * ๐Ÿšš finagle-core: Remove deprecated `c.t.f.Deadline`. Use `c.t.f.context.Deadline` instead.
      ``RB_ID=915550``
    
    * ๐Ÿ— finagle-core: Remove deprecated `c.t.f.builder.ClientBuilder.cluster` and
      `c.t.f.builder.ClientBuilder.group`. Use `c.t.f.builder.ClientBuilder.dest` instead.
      ``RB_ID=915098``
    
    * ๐Ÿšš finagle-core: Remove deprecated `c.t.f.tracing.Trace.recordRpcName`. Use
      `c.t.f.tracing.Trace.recordRpc` and `c.t.f.tracing.Trace.recordServiceName` instead.
      ``RB_ID=916426``
    
    * ๐Ÿ— finagle-core: Remove deprecated `c.t.f.builder.Cluster`. Use `com.twitter.finagle.Name` to
      represent clusters instead. ``RB_ID=916162``
    
    * finagle-core: LoadBalancerFactory now takes an EndpointFactory which is an
      extension of ServiceFactory that carries an address and has the ability to
      be rebuilt. ``RB_ID=916956``
    
    * ๐Ÿšš finagle-base-http: Remove deprecated `c.t.f.http.Message.ContentTypeWwwFrom`.
      Use `c.t.f.http.Message.ContentTypeWwwForm` instead. ``RB_ID=915543``
    
    * ๐Ÿšš finagle-exception: Remove deprecated `c.t.f.exception.Reporter.clientReporter` and
      `c.t.f.exception.Reporter.sourceReporter`. Use `c.t.f.exception.Reporter.monitorFactory`
      instead. ``RB_ID=916403``
    
    * ๐Ÿšš finagle-http: Remove deprecated `c.t.f.http.HttpMuxer.pattern`. Specify a route
      using `c.t.f.http.HttpMuxer.route(pattern, this)` instead. ``RB_ID=915551``
    
    * ๐Ÿšš finagle-http: Remove deprecated `c.t.f.http.filter.ValidateRequestFilter`. Create a custom
      filter if this behavior is needed. ``RB_ID=915548``
    
    * ๐Ÿšš finagle-kestrel: Remove deprecated methods on `c.t.f.kestrel.MultiReader`:
      - `apply(cluster: Cluster[SocketAddress], queueName: String)`
      - `apply(clients: Seq[Client], queueName: String)`
      - `apply(handles: ju.Iterator[ReadHandle])`
      - `newBuilder(cluster: Cluster[SocketAddress], queueName: String)`
      - `merge(readHandleCluster: Cluster[ReadHandle])`
      Use the `c.t.f.Var[Addr]`-based `apply` methods on `c.t.f.kestrel.MultiReaderMemcache` or `c.t.f.kestrel.MultiReaderThriftMux` instead. ``RB_ID=914910``
    
    * ๐Ÿšš finagle-kestrel: Removed from the project. ``RB_ID=915221``
      https://finagle.github.io/blog/2017/04/06/announce-removals/
    
    * ๐Ÿšš finagle-mdns: Removed from the project. ``RB_ID=915216``
      https://finagle.github.io/blog/2017/04/06/announce-removals/
    
    * ๐Ÿšš finagle-memcached: Remove deprecated `c.t.f.memcached.BaseClient.cas` methods.
      Use `c.t.f.memcached.BaseClient.checkAndSet` instead. ``RB_ID=914678``
    
    * finagle-memcached: `c.t.f.memcached.protocol.text.Encoder` object is now private.
      ``RB_ID=917214``
    
    * finagle-memcached: Make memcached Response subtypes with no fields case objects.
      ``RB_ID=917137``
    
    * ๐Ÿšš finagle-mysql: Remove deprecated methods on `c.t.f.Mysql`:
    
        - `withCredentials`; use `c.t.f.Mysql.client.withCredentials` instead
        - `withDatabase`; use `c.t.f.Mysql.client.withDatabase` instead
        - `withCharset`; use `c.t.f.Mysql.client.withCharset` instead
        - `configured`; use `c.t.f.Mysql.client.configured` instead
    
      ``RB_ID=916418``
    
    * ๐Ÿšš finagle-native: Removed from the project. ``RB_ID=915204``
      https://finagle.github.io/blog/2017/04/06/announce-removals/
    
    * finagle-netty4: `AnyToHeapInboundHandler` is gone. Use `BufCodec` while designing
      new Finagle protocols. ``RB_ID=915251``
    
    * ๐Ÿšš finagle-ostrich4: Removed from the project. ``RB_ID=915327``
      https://finagle.github.io/blog/2017/04/06/announce-removals/
    
    * ๐Ÿšš finagle-redis: `ChannelBuffer` methods and converters are removed. Use `Buf`-based API
      instead. Removed APIs: ``RB_ID=916015``
    
        - `c.t.f.redis.NettyConverters`
        - `c.t.f.redis.util.StringToChannelBuffer`
        - `c.t.f.redis.Client.watch(Seq[ChannelBuffer])`
    
    * ๐Ÿšš finagle-stream: Removed from the project. ``RB_ID=915200``
      https://finagle.github.io/blog/2017/04/06/announce-removals/
    
    * ๐Ÿšš finagle-thrift: Remove deprecated `c.t.f.thrift.transport.netty3.ThriftServerBufferedCodec`
      and `c.t.f.thrift.transport.netty3.ThriftServerBufferedCodecFactory`. Use the `c.t.f.Thrift`
      object to build a server. ``RB_ID=915656``
    
    * ๐Ÿšš finagle-thriftmux: Remove deprecated `c.t.f.ThrifMux.withClientId`. Use
      `c.t.f.ThriftMux.client.withClientId`. Remove deprecated `c.t.f.ThrifMux.withProtocolFactory`.
      Use `c.t.f.ThriftMux.client.withProtocolFactory`. ``RB_ID=915655``