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 thec.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``
- ๐ finagle-core: the #channelFactory method of