Finagle v18.5.0 Release Notes

  • ๐Ÿ†• New Features

    
    * finagle-base-http: Added ability to add SameSite attribute to Cookies to
      comply with https://tools.ietf.org/html/draft-west-first-party-cookies-07.
      The attribute may be set in the constructor via the `c.t.f.http.Cookie`
      `sameSite` param or via the `c.t.f.http.Cookie.sameSite` method. ``PHAB_ID=D157942``
    
      - Pass `SameSite.Lax` to the `Cookie` to add the "Lax" attribute.
      - Pass `SameSite.Strict` to the `Cookie` to add the "Strict" attribute.
    
    * finagle-base-http: Introduced an API to extract query string params from a
      `c.t.f.http.Request`, `c.t.f.http.Uri.fromRequest` and `c.t.f.http.Uri#params`.
      ``PHAB_ID=D160298``
    
    * finagle-mysql: Added APIs to `Row` which simplify the common access pattern.
      For example, `Row.stringOrNull(columnName: String): String` and
      `Row.getString(columnName: String): Option[String]`.
      ``PHAB_ID=D156926``, ``PHAB_ID=D157360``
    
    * finagle-mysql: Added `read` and `modify` APIs to `c.t.f.mysql.Client` and
      `c.t.f.mysql.PreparedStatement` for that return the specific type of
      `Result` for those operations, `ResultSet` and `OK` respectively.
      ``PHAB_ID=D160215``
    
    * finagle-serversets: Zk2Session's AsyncSemaphore which controls the maximum
      concurrent Zk operations is configurable (GlobalFlag c.t.f.serverset2.zkConcurrentOperations).
      ```PHAB_ID=D157709```
    
    * finagle-mysql: Address `CursoredStatement` usability from Java via
      `CursoredStatement.asJava()`. Through this, you can use the API with
      varargs and Java 8 lambdas. ``PHAB_ID=D158399``
    
    * finagle-toggle: Improved Java compatibility for `ToggleMap` and `Toggle`. ``PHAB_ID=D164489``
    
    * finagle-toggle: `StandardToggleMap.apply` and `StandardToggleMap.registeredLibraries` now
      use `ToggleMap.Mutable` to better support mutating the underlying mutable `ToggleMap`.
      ``PHAB_ID=D167046``
    
    ๐Ÿ’ฅ Breaking API Changes
    
    • finagle-mux: With the introduction of the push-based mux client, we've removed the need for the optimized c.t.f.Mux.Netty4RefCountingControl MuxImpl, which has been removed. PHAB_ID=D141010

    • finagle-mysql: c.t.f.mysql.Client.ping now returns a Future[Unit] instead of the broad Future[Result] ADT. PHAB_ID=D160215

    • finagle-toggle: Changed ToggleMap.Mutable from a trait to an abstract class, and ToggleMap.Proxy no longer extends ToggleMap, but now has a self-type that conforms to ToggleMap instead. PHAB_ID=D164489

    โš™ Runtime Behavior Changes

    
    * ๐Ÿ‘ finagle-core: Add `c.t.f.SslException` to better model exceptions related to SSL/TLS.
      The `c.t.f.ChannelException.apply` method will now wrap `javax.net.ssl.SSLException`s in
      `c.t.f.SslException`. ``PHAB_ID=D158344``
    
    * finagle-core: MethodBuilder metrics now include failures.
      ``PHAB_ID=D167589``, ``PHAB_ID=D168095``
    
    * finagle-http: ServerAdmissionControl is circumvented for HTTP requests that have
      a body unless the request contains the header 'finagle-http-retryable-request' since
      it cannot be known whether the client can actually retry them, potentially resulting
      in depressed success rates during periods of throttling. ``PHAB_ID=D134209``
    
    * โฌ†๏ธ finagle-http2: Clients and servers no longer attempt a cleartext upgrade if the
      first request of the HTTP/1.1 session has a body. ``PHAB_ID=D153986``
    
    * 0๏ธโƒฃ finagle-thriftmux: The push-based client muxer is now the default muxer implementation.
      The push-based muxer has better performance and a simpler architecture. ``PHAB_ID=D158134``
    
    * finagle-toggle: `ToggleMap.Proxy#underlying` is now public, and `ToggleMap.Proxy`
      participates in `ToggleMap.components`. ``PHAB_ID=D167046``
    
    ๐Ÿ› Bug Fixes
    ~~~~~~~~~
    
    * 0๏ธโƒฃ finagle-base-http: Concurrent modification of the `c.t.f.http.DefaultHeaderMap` could
      result in an infinite loop due to HashMap corruption. Access is now synchronized to avoid
      the infinite loop. ``PHAB_ID=D159250``
    
    * finagle-core: `FailureFlags` that have their flags set modified will now
      retain the original stack trace, suppressed Throwables, and cause when possible.
      ``PHAB_ID=D160402``
    
    * ๐Ÿ‘ finagle-memcached: Added the missing support for partial success for the batch
      operations in the new PartitioningService based Memcached client. ``PHAB_ID=D161249``
    
    * ๐Ÿšš finagle-thrift: Removed copied libthrift files. ``PHAB_ID=D165455``
    
    * 0๏ธโƒฃ finagle-thrift/thriftmux: Server side per-endpoint statsFilter by default is disabled now.
      It can be set via `c.t.f.thrift.RichServerParam` or a `with`-method as
      `Thrift{Mux}.server.withPerEndpointStats`. ``PHAB_ID=D167433``