Finagle v6.33.0 Release Notes

  • ๐Ÿ†• New Features

    
    * finagle-core: Introduce the `c.t.f.service.PendingRequestFactory` module in the client Stack.
      The module allows clients to limit the number of pending requests per connection. It is disabled
      by default. ``RB_ID=795491``
    
    * finagle-core: Introduce the `c.t.f.filter.ServerAdmissionControl` module in the server Stack,
      which is enabled through the param `c.t.f.param.EnableServerAdmissionControl`. Users can define
      their own admission control filters, which reject requests when the server operates beyond
      its capacity. These rejections apply backpressure and allow clients to retry requests on
      servers that may not be over capacity. The filter implementation should define its own logic
      to determine over capacity. One or more admission control filters can be installed through
      the `ServerAdmissionControl.register` method. ``RB_ID=776385``
    
    * finagle-core: Introduce `c.t.f.service.ResponseClassifier` which allows developers to
      give Finagle the additional application specific knowledge necessary in order to properly
      classify them. Without this, Finagle can only safely make judgements about transport
      level failures. This is now used by `StatsFilter` and `FailureAccrualFactory` so that
      application level failures can be used for both success metrics and failure accrual.
      ``RB_ID=772906``
    
    * finagle-core: Added a new 'Endpoints' section on client pages, listing the weights, paths,
      and resolved endpoints for each dtab.``RB_ID=779001``
    
    * finagle-core: Introduce discoverable stack params which are available on every client/server
      via the `with`-prefixed methods. ``RB_ID=781833``
    
    * finagle-memcached: Added `c.t.f.memcached.BaseClient.checkAndSet` which exposes the difference
      between a conflict and a not found result.
    
    * finagle-mux: Add a Wireshark dissector that can decode Mux messages. ``RB_ID=779482``
    
    * finagle-stats: Define flag `c.t.f.stats.statsFilterFile` as GlobalFlag[Set[File]] to take
      comma-separated multiple files. ``RB_ID=793397``
    
    * finagle-mux: Tinit/Rinit are now available and permit feature negotiation. ``RB_ID=793350``
    
    ๐Ÿ—„ Deprecations
    
    • ๐Ÿ—„ finagle-memcached: c.t.f.memcached.BaseClient.cas is deprecated in favor of the richer checkAndSet method.

    ๐Ÿ’ฅ Breaking API Changes

    
    * ๐Ÿšš finagle-core: All the deprecated exceptions from `Exceptions.scala` have been removed.
      ``RB_ID=774658``
    * ๐Ÿšš finagle-thrift: Remove the `framed` attributes from `c.t.f.Thrift.Client` and
      `c.t.f.Thrift.Server`.  This behavior may now be controlled with `c.t.f.Thrift.param.Framed`.
    * ๐Ÿ— finagle-core: Unused `c.t.f.builder.NonShrinkingCluster` has been removed.
      ``RB_ID=779001``
    
    * finagle-thrift: `c.t.f.ThriftRichClient` has a new abstract protected method
      `responseClassifier: ResponseClassifier`. If your implementation does not need
      this, you can implement it with `ResponseClassifier.Default`. ``RB_ID=791470``
    
    โš™ Runtime Behavior Changes
    
    • finagle-thrift,thriftmux: Deserialization of Thrift responses now happens as part of service application which means that it will now be part of the latency reported by StatsFilter. The actual latency as perceived by clients will not have changed, but for clients that spend significant time deserializing and do not have higher level metrics this may come as a surprise. RB_ID=772931

    • 0๏ธโƒฃ finagle-mux,thriftmux: The default closeTimeout in ping based failure detection is changed from Duration.Top to 4 seconds, to allow a session to be closed by default when a ping response times out after 4 seconds. This allows sessions to be reestablished when there may be a networking issue, so that it can choose an alternative networking path instead. RB_ID=773649

    ๐Ÿ’ฅ Breaking API Changes

    
    * ๐Ÿšš finagle-thrift: Remove the `framed` attributes from `c.t.f.Thrift.Client` and
      `c.t.f.Thrift.Server`.  This behavior may now be controlled with `c.t.f.Thrift.param.Framed`.