Finagle v6.31.0 Release Notes

  • ๐Ÿ†• New Features

    
    * finagle-core: `c.t.f.Server` now has a `serveAndAnnounce` method that accepts a `SocketAddress`
      as an address. ``RB_ID=758862``
    
    * ๐Ÿ‘ finagle-core: `c.t.f.service.Retries` now supports adding delay between each automatic retry.
      This is configured via the `Retries.Budget`. ``RB_ID=768883``
    
    * finagle-core: FailureAccrualFactory now uses a FailureAccrualPolicy to determine when to
      mark an endpoint dead. The default policy, FailureAccrualPolicy.consecutiveFailures(),
      mimicks existing functionality, and FailureAccrualPolicy.successRate() operates on the
      exponentially weighted average success rate over a window of requests.``RB_ID=756921``
    
    * ๐Ÿ”ง finagle-core: Introduce `c.t.f.transport.Transport.Options` to configure transport-level options
      (i.e., socket options `TCP_NODELAY` and `SO_REUSEADDR`). ``RB_ID=773824``
    
    * ๐Ÿ‘ finagle-http: `c.t.f.http.exp.Multipart` now supports both in-memory and on-disk file uploads.
      ``RB_ID=RB_ID=769889``
    
    * finagle-netty4: Hello World. Introduce a `Listener` for Netty 4.1. This is still considered beta.
      ``RB_ID=718688``
    
    * finagle-netty4: Introduce `ChannelTransport` for Netty 4.1. ``RB_ID=763435``
    
    * finagle-thrift: `c.t.f.ThriftRichClient` implementations of `newServiceIface`
      method that accept a `label` argument to pass to the `ScopedStats` instance. ``RB_ID=760157``
    
    * finagle-stats: Added `c.t.f.stats` now has a `statsFilterFile` flag which will read a blacklist
      of regex, newline-separated values. It will be used along with the `statsFilter` flag for stats
      filtering. ``RB_ID=764914``
    
    ๐Ÿ—„ Deprecations
    
    • ๐Ÿ— finagle-core: the #channelFactory method of c.t.f.builder.ServerBuilder has been deprecated in favor of the c.t.f.netty3.numWorkers flag. RB_ID=718688

    โš™ Runtime Behavior Changes

    
    * 0๏ธโƒฃ finagle-core: The behavior for `c.t.f.util.DefaultMonitor` has changed such that
      unhandled exceptions are propagated to `c.t.u.RootMonitor` except for
      `c.t.f.Failures` with a log `Level` below INFO. ``RB_ID=758056``
    
    * finagle-core: The metrics for requeues `requeue/requeues`, `requeue/budget` and
      `requeue/budget_exhausted` have moved under retries. They are now `retries/requeues`,
      `retries/budget` and `retries/budget_exhausted`. ``RB_ID=760213``
    
    * finagle-core: `c.t.f.service.RetryFilter` and `c.t.f.service.RetryExceptionsFilter`
      now default to using a `RetryBudget` to mitigate retry amplification on downstream
      services. The previous behavior can be achieved by explicitly passing in
      `RetryBudget.Infinite`. ``RB_ID=766302``
    
    * finagle-core: `c.t.f.factory.TrafficDistributor` now suppresses changes when a bound
      address is updated from a valid set to an error. Instead, it continues using stale
      data until it gets a successful update.
    
    * finagle-http: Unhandled exceptions from user defined HTTP services are now converted
      into very basic 500 responses so clients talking to those services see standard HTTP
      responses instead of a dropped connection. ``RB_ID=755846``
    
    * ๐Ÿšš finagle-memcached: Moved metrics from underlying `KetamaPartitionedClient` for Memcached clients
      to share the same scope of the underlying finagle client. ``RB_ID=771691``
    
    * finagle-mux: `com.twitter.finagle.mux.ThresholdFailureDetector` is turned on by
      default. ``RB_ID=756213``
    
    * finagle-serversets: The `c.t.f.serverset2.Zk2Resolver` now surfaces `Addr.Pending`
      when it detects that its underlying ZooKeeper client is unhealthy. Unhealthy is defined
      as non-connected for greater than its 'unhealthyWindow' (which defaults to 5 minutes).
      ``RB_ID=760771``
    
    * finagle-serversets: The `c.t.f.serverset2.ZkSession` now uses an unbounded semaphore to
      limit to 100 outstanding zookeeper requests at any one moment. ``RB_ID=771399``
    
    
    ๐Ÿ’ฅ Breaking API Changes
    ~~~~~~~~~~~~~~~~~~~~
    
    * ๐Ÿ‘ป finagle-core: `BackupRequestLost` is no longer itself an `Exception`. Use
      `BackupRequestLost.Exception` in its place. ``RB_ID=758056``
    
    * ๐Ÿ— finagle-core: Replaced `c.t.f.builder.ClientConfig.Retries` with
      `c.t.f.service.Retries.Policy`. ``RB_ID=760213``
    
    * ๐Ÿšš finagle-core: A deprecated `c.t.f.CancelledReadException` has been removed.
      ``RB=763435``
    
    * ๐Ÿšš finagle-http: `c.t.f.http.exp.Multipart.decodeNonChunked` has been removed from
      the public API. Use `c.t.f.http.Request.multipart` instead. Also
      `c.t.f.http.exp.Multipart.FileUpload` is no longer a case class, but base trait
      for `Multipart.InMemoryFileUpload` and `Multipart.OnDiskFileUpload`. ``RB_ID=769889``
    
    * finagle-mux: `c.t.f.FailureDetector.apply` method is changed to private scope,
      to reduce API surface area. Using `FailureDetector.Config` is enough to config
      session based failure detection behavior. ``RB_ID=756833``
    
    * finagle-mux: `closeThreshold` in `c.t.f.mux.FailureDetector.ThresholdConfig` is
      changed to `closeTimeout`, from an integer that was used as a multiplier to time
      duration. This makes it easier to config. ``RB_ID=759406``
    
    ๐Ÿ› Bug Fixes
    ~~~~~~~~~
    
    * finagle-thrift: `c.t.f.ThriftRichClient` scoped stats label is now threaded
      properly through `newServiceIface` ``RB_ID=760157``