All Versions
Latest Version
Avg Release Cycle
28 days
Latest Release

Changelog History
Page 6

  • v18.6.0 Changes

    โš™ Runtime Behavior Changes

    * 0๏ธโƒฃ finagle-core: By default, the deterministic aperture load balancer doesn't expand
      based on the loadband. This is because the loadband is influenced by a degree of
      randomness, and this breaks the deterministic part of deterministic aperture and
      can lead to aggressive banding on backends. ``PHAB_ID=D180922``
    * finagle-http2: Unprocessed streams are retryable in case of GOAWAY.
    ๐Ÿ†• New Features
    • finagle-core: Add PropagateDeadlines Stack.Param to TimeoutFilter for disabling propagation of deadlines to outbound requests. PHAB_ID=D168405

    • finagle-core: Add toString implementations to c.t.finagle.Service and c.t.finagle.Filter. Update in Filter#andThen composition to expose a useful toString for composed Filters and a composed Service (a Filter chain with a terminal Service or ServiceFactory).

    The default implementation for Filter and Service is getClass.getName. When composing filters, the andThen composition method correctly tracks the composed parts to produce a useful toString, e.g.,

    .. code-block:: scala


    import com.twitter.finagle.{Filter, Service} import com.twitter.util.Future

    class MyFilter1 extends Filter[Int, Int, Int, Int] { def apply(request: Int, service: Service[Int, Int]): Future[Int] = ??? }

    .. code-block:: scala


    import com.twitter.finagle.{Filter, Service} import com.twitter.util.Future

    class MyFilter2 extends Filter[Int, Int, Int, Int] { def apply(request: Int, service: Service[Int, Int]): Future[Int] = ??? }

    .. code-block:: scala

    val filters = (new MyFilter1).andThen(new MyFilter2)

    filters.toString would emit the String ""

    If a Service (or ServiceFactory) were then added:

    .. code-block:: scala

    import com.twitter.finagle.{Filter, Service} import com.twitter.finagle.service.ConstantService import com.twitter.util.Future


    val svc: Service[Int, Int] = filters.andThen(new ConstantService[Int, Int](Future.value(2)))

    Then, svc.toString would thus return the String: ""

    Filter implementations are permitted to override their toString implementations which would 0๏ธโƒฃ replace the default of getClass.getName. PHAB_ID=D172526

    • finagle-core: Make Filter.TypeAgnostic an abstract class for Java usability. PHAB_ID=D172716

    • finagle-core: c.t.f.filter.NackAdmissionFilter is now public. PHAB_ID=D177322

    • finagle-core: Extended c.t.f.ssl.KeyCredentials and c.t.f.ssl.TrustCredentials to work with and respectively. PHAB_ID=D177484

    ๐Ÿ’ฅ Breaking API Changes

    * finagle-core: Rename `DeadlineFilter.Param(maxRejectFraction)` to
      `DeadlineFilter.MaxRejectFraction(maxRejectFraction)` to reduce confusion
      when adding additional params.
    ๐Ÿ› Bug Fixes
    • finagle-http2: StreamTransportFactory now marks itself as dead/closed when it runs out of HTTP/2 stream IDs instead of stalling. This allows the connection to be closed/reestablished in accordance with the spec PHAB_ID=D175898

    • finagle-netty4: SslServerSessionVerifier is now supplied with the proper peer address rather than Address.failing. PHAB_ID=D168334

    • 0๏ธโƒฃ finagle-thrift/thriftmux: Disabled client side per-endpoint stats by default for client ServicePerEndpoint. It can be set via c.t.f.thrift.RichClientParam or a with-method as Thrift{Mux}.client.withPerEndpointStats. PHAB_ID=D169427

    • finagle-netty4: Avoid NoClassDefFoundError if netty-transport-native-epoll is not available on the classpath.

  • v18.5.0 Changes

    ๐Ÿ†• New Features

    * finagle-base-http: Added ability to add SameSite attribute to Cookies to
      comply with
      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`.
    * 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.
    * finagle-serversets: Zk2Session's AsyncSemaphore which controls the maximum
      concurrent Zk operations is configurable (GlobalFlag c.t.f.serverset2.zkConcurrentOperations).
    * 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`.
    ๐Ÿ’ฅ 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: 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 ``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

  • v18.4.0 Changes

    ๐Ÿ†• New Features

    * finagle-core: `c.t.f.filter.NackAdmissionFilter` can now be disabled via a `with`-method.
      `$Protocol.client.withAdmissionControl.noNackAdmissionControl` ``PHAB_ID=D146873``
    * finagle-mysql: Exceptions now include the SQL that was being executed when possible.
    * finagle-mysql: Address `PreparedStatement` usability from Java via
      `PreparedStatement.asJava()`. Through this, you can use the API with
      varargs and Java 8 lambdas. ``PHAB_ID=D156755``
    * ๐Ÿ‘ finagle-mysql: Added support for `Option`\s to `Parameter` implicits. This
      allows for the natural representation of nullable columns with an `Option`
      where a `None` is treated as a `null`. ``PHAB_ID=D156186``
    * finagle-netty4: Add 'tls/connections' gauge for Finagle on Netty 4 which tracks the number
      of open SSL/TLS connections per Finagle client or server.
    * ๐Ÿ‘ finagle-redis: Support has been added for a number of new cluster commands
      introduced in Redis 3.0.0. ``PHAB_ID=D152186``
    ๐Ÿ› Bug Fixes
    • finagle-mysql: Fix handling of interrupts during transactions. PHAB_ID=D154441

    ๐Ÿ’ฅ Breaking API Changes

    * ๐Ÿšš finagle-core: `c.t.f.ssl.client.HostnameVerifier` has been removed since it was using
      `` which is no longer accessible in JDK 9.
    * โฌ†๏ธ finagle-thrift: Upgraded libthrift to 0.10.0, `c.t.f.thrift.Protocols.TFinagleBinaryProtocol`
      constructor now takes `stringLengthLimit` and `containerLengthLimit`, `NO_LENGTH_LIMIT` value
      changed from 0 to -1. ``PHAB_ID=D124620``
    * ๐Ÿšš finagle-thrift: Move "stateless" methods in `c.t.finagle.thrift.ThriftRichClient`
      to `c.t.finagle.thrift.ThriftClient`. Then mix the `ThriftClient` trait into the
      ThriftMux and Thrift Client companions to make it clearer that these stateless methods
      are not affected by the changing state of the configured client instance but are instead
      simply utility methods which convert or wrap the incoming argument. ``PHAB_ID=D143185``
    * ๐Ÿšš finagle-base-http: Removed deprecated `c.t.f.Cookie.value_=`; use `c.t.f.Cookie.value`
      instead. ``PHAB_ID=D148266``
    * ๐Ÿšš finagle-base-http: Removed deprecated `c.t.f.Cookie.domain_=`; use `c.t.f.Cookie.domain`
      instead. ``PHAB_ID=D148266``
    * ๐Ÿšš finagle-base-http: Removed deprecated `c.t.f.Cookie.path_=`; use `c.t.f.Cookie.path`
      instead. ``PHAB_ID=D148266``
    โš™ Runtime Behavior Changes
    • finagle-core: Add minimum request threshold for successRateWithinDuration failure accrual. PHAB_ID=D154129

    • finagle-core: c.t.f.filter.NackAdmissionFilter no longer takes effect when the client's request rate is too low to accurately update the EMA value or drop requests. PHAB_ID=D143996

    • finagle-core: SSL/TLS client hostname verification is no longer performed by c.t.f.ssl.client.HostnameVerifier. The same underlying library is used to perform the hostname verification. However it now occurs before the SSL/TLS handshake has been completed, and the exception on failure has changes from a c.t.f.SslHostVerificationException to a PHAB_ID=D144149

    • finagle-core: Closing c.t.f.NullServer is now a no-op. PHAB_ID=D156098

    • 0๏ธโƒฃ finagle-netty4: Netty ByteBuf leak tracking is enabled by default. PHAB_ID=D152828

    ๐Ÿ—„ Deprecations

    * ๐Ÿ—„ finagle-thrift: System property "-Dorg.apache.thrift.readLength" is deprecated. Use
      constructors to set read length limit for TBinaryProtocol.Factory and TCompactProtocol.Factory.
  • v18.3.0 Changes

    ๐Ÿ†• New Features

    * finagle-core: `c.t.f.client.BackupRequestFilter.filterService` for wrapping raw services in a
      `c.t.f.client.BackupRequestFilter` is now public. ``PHAB_ID=D135484``
    * finagle-core: Introduce `c.t.f.Stacks.EMPTY_PARAMS` for getting an empty Param map from
      Java, and `` for easily adding Params to a Param map from Java.
    ๐Ÿ› Bug Fixes
    • finagle-core: c.t.f.liveness.FailureAccrualFactory takes no action on c.t.f.Failure.Ignorable responses. PHAB_ID=D135435

    • finagle-core: c.t.f.pool.WatermarkPool is resilient to multiple closes on a service instance. PHAB_ID=D137198

    • finagle-core: c.t.f.pool.CachingPool service wrapper instances are resilient to multiple closes. PHAB_ID=D136781

    • finagle-core: Requeue module now closes sessions it prevented from propagating up the stack. PHAB_ID=D142457

    • finagle-base-http: c.t.f.http.Netty4CookieCodec.encode now wraps Cookie values that would be wrapped in c.t.f.http.Netty3CookieCodec.encode. PHAB_ID=D134566

    • 0๏ธโƒฃ finagle-base-http: c.t.f.http.Cookie.maxAge returns c.t.f.http.Cookie.DefaultMaxAge (instead of null) if maxAge has been set to null or None in the copy constructor PHAB_ID=D138393.

    • finagle-http: The HTTP client will not attempt to retry nacked requests with streaming bodies since it is likely that at least part of the body was already consumed and therefore it isn't safe to retry. PHAB_ID=D136053

    ๐Ÿ’ฅ Breaking API Changes

    * finagle-base-http: Removed `c.t.f.http.Cookie.comment_`, `c.t.f.http.Cookie.comment_=`,
      `c.t.f.http.Cookie.commentUrl_`, and `c.t.f.http.Cookie.commentUrl_=`. `comment` and `commentUrl`
      per RFC-6265. ``PHAB_ID=D137538``
    * ๐Ÿšš finagle-base-http: Removed deprecated `c.t.f.http.Cookie.isDiscard` and
      `c.t.f.http.Cookie.isDiscard_=`, per RFC-6265. ``PHAB_ID=D138109``
    * ๐Ÿšš finagle-base-http: Removed deprecated `c.t.f.http.Cookie.ports` and
      `c.t.f.http.Cookie.ports_=`, per RFC-6265. ``PHAB_ID=D139243``
    * ๐Ÿšš finagle-base-http: `c.t.f.http.RequestBuilder` has been moved to the finagle-http target
      and the implicit evidence, `RequestConfig.Yes` has been renamed to `RequestBuilder.Valid`.
    * ๐Ÿšš finagle-base-http: Removed deprecated `c.t.f.Cookie.isSecure`; use ``
      instead. Removed deprecated `c.t.f.Cookie.isSecure_=`. ``PHAB_ID=D140435``
    * ๐Ÿšš finagle-base-http: Removed deprecated `c.t.f.http.Cookie.version` and
      `c.t.f.http.Cookie.version_=`, per RFC-6265. ``PHAB_ID=D142672``
    * ๐Ÿšš finagle-base-http: Removed deprecated `c.t.f.Cookie.httpOnly_=`; use `c.t.f.Cookie.httpOnly`
      instead. ``PHAB_ID=D143177``
    * ๐Ÿšš finagle-base-http: Removed deprecated `c.t.f.Cookie.maxAge_=`; use `c.t.f.Cookie.maxAge`
      instead. ``PHAB_ID=D143177``
    * finagle-core: `c.t.f.pool.WatermarkPool` was finalized. ``PHAB_ID=D137198``
    * finagle-core: `c.t.finagle.ssl.Ssl` and related classes have been
      removed. They were replaced as the primary way of using SSL/TLS
      within Finagle in release 6.44.0 (April 2017). Please migrate to using
      `c.t.f.ssl.client.SslClientEngineFactory` or
      `c.t.f.ssl.server.SslServerEngineFactory` instead. ``PHAB_ID=D135908``
    * ๐Ÿšš finagle-core: Removed `newSslEngine` and `newFinagleSslEngine` from
      `ServerBuilder`. Please implement a class which extends
      `c.t.f.ssl.server.SslServerEngineFactory` with the previously passed in
      function used as the implementation of the `apply` method. Then use the
      created engine factory with one of the `tls` methods instead.
    * ๐Ÿšš finagle-core: The deprecated `c.t.f.loadbalancer.DefaultBalancerFactory` has been removed.
    * ๐Ÿšš finagle-exp: The deprecated `c.t.f.exp.BackupRequestFilter` has been removed. Please use
      `c.t.f.client.BackupRequestFilter` instead. ``PHAB_ID=D143333``
    * ๐Ÿšš finagle-http: Removed the `c.t.f.Http.Netty3Impl`. Netty4 is now the only
      underlying HTTP implementation available. ``PHAB_ID=D136705``
    * finagle-zipkin-scribe: Renamed the finagle-zipkin module to finagle-zipkin-scribe, to
      better advertise that this is just the scribe implementation, instead of the default.
  • v18.2.0 Changes

    ๐Ÿ†• New Features

    * finagle-core: Add orElse to allow composition of `FailureAccrualPolicy`s.
    * finagle-core: `c.t.f.http.MethodBuilder` now exposes a method `newService` without a
      `methodName` to create a client. `c.t.f.thriftmux.MethodBuilder` now exposes a
      method `servicePerEndpoint` without a `methodName` to create a client. ``PHAB_ID=D131809``
    * ๐Ÿ”ง finagle-thriftmux: Expose the underlying configured client `label` in the
      `c.t.finagle.thriftmux.MethodBuilder`. ``PHAB_ID=D129109``
    ๐Ÿ› Bug Fixes
    • finagle-http2: http2 servers no longer leak ping bodies. PHAB_ID=D130503

    ๐Ÿ—„ Deprecations

    * finagle-core: `c.t.finagle.ssl.Ssl` and related classes have been
      deprecated. They were replaced as the primary way of using SSL/TLS
      within Finagle in release 6.44.0 (April 2017). Please migrate to using
      `c.t.f.ssl.client.SslClientEngineFactory` or
      `c.t.f.ssl.server.SslServerEngineFactory` instead. ``PHAB_ID=D129692``
    ๐Ÿ’ฅ Breaking API Changes
    • ๐Ÿšš finagle-base-http: c.t.f.h.codec.HttpCodec has been moved to the finagle-http project. PHAB_ID=D116364

    • ๐Ÿšš finagle base-http: c.t.f.h.Request.multipart has been removed. Use c.t.f.h.exp.MultipartDecoder instead. PHAB_ID=D129158

    • finagle-http: Split the toggle 'c.t.f.h.UseH2C' into a client-side toggle and a server-side toggle, named 'c.t.f.h.UseH2CClients', and 'c.t.f.h.UseH2CServers', respectively. PHAB_ID=D130988

    โš™ Runtime Behavior Changes

    * finagle-core: Finagle clients with retry budgets or backoffs should no
      longer have infinite hash codes. ``PHAB_ID=D128594``
    * โšก๏ธ finagle-core: `c.t.f.l.Balancer` no longer uses a `c.t.f.u.Updater` as its underlying
      concurrency primitive as it was found that in practice coalescing updates almost never
      happens and in the absence of that `Updater` imposes more overhead than simple
      synchronization while complicating the result of calling `rebuild()` since we don't know
      if the rebuild actually occurred by the time we attempt to use the distributor again.
  • v18.1.0 Changes

    ๐Ÿ†• New Features

    * finagle-core: `FailureDetector` has a new method, `onClose`, which provides
      a Future that is satisfied when the `FailureDetector` marks a peer as Closed.
    * ๐ŸŒฒ finagle-core: Introduce trace logging of requests as they flow through a
      Finagle client or server. These logs can be turned on at runtime by setting
      the "com.twitter.finagle.request.Logger" logger to trace level.
    * finagle-http2: HTTP/2 clients now expose the number of currently opened streams under
      the `$client/streams` gauge. ``PHAB_ID=D127238``
    * finagle-http2: HTTP/2 servers now expose the number of currently opened streams under
      the `$server/streams` gauge. ``PHAB_ID=D127667``
    * 0๏ธโƒฃ finagle-memcached: By default, the Memcached client now creates two connections
      to each endpoint, instead of 4. ``PHAB_ID=D119619``
    * ๐Ÿ‘ finagle-redis: Add support for redis Geo Commands. ``PHAB_ID=D123167`` based on the PR written by Mura-Mi []
    * finagle-thrift: Add `c.t.f.thrift.service.ThriftServiceBuilder` and
      `c.t.f.thrift.service.ReqRepThriftServiceBuilder` for backwards compatibility
      of creating higher-kinded method-per-endpoint clients. ``PHAB_ID=D127538``
    * finagle-core: `c.t.f.http.MethodBuilder` and `c.t.f.thriftmux.MethodBuilder` now
      expose `idempotent` and `nonIdempotent` methods, which can be used to configure
      retries and the sending of backup requests. ``PHAB_ID=D122087``
    ๐Ÿ› Bug Fixes
    • โช finagle-mysql: Fix a bug with transactions where an exception during a rollback could leave the connection with a partially committed transaction. PHAB_ID=D122771

    • finagle-toggle: c.t.f.toggle.Toggles are independent; that is, applying the same value to two different toggles with the same fraction will produce independent true/false values. PHAB_ID=D128172

    โš™ Runtime Behavior Changes

    * finagle-core, finagle-netty4: When creating engines, SslClientEngineFactories now use
      `SslClientEngineFactory.getHostString` instead of `SslClientEngineFactory.getHostname`.
      This no longer performs an unnecessary reverse lookup when a hostname is not supplied
      as part of the `SslClientConfiguration`.  ``PHAB_ID=D124369``
    * finagle-http2: Supplies a dependency on io.netty.netty-tcnative-boringssl-static,
      which adds support for ALPN, which is necessary for encrypted http/2.  To use a
      different static ssl dependency, exclude the tcnative-boringssl dependency and
      manually depend on the one you want to use. ``PHAB_ID=D119555``
    ๐Ÿ’ฅ Breaking API Changes
    • ๐Ÿšš finagle-base-http, finagle-http: Removed Apache Commons Lang dependency, org.apache.commons.lang3.time.FastDateFormat now is java.time.format.DateTimeFormatter. PHAB_ID=D121479

    • finagle-base-http: c.t.f.http.Message.headerMap is now an abstract method. PHAB_ID=D120931

    • finagle-core: c.t.f.ssl.server.SslServerSessionVerifier no longer uses the unauthenticated host information from SSLSession. PHAB_ID=D124815

    • ๐Ÿšš finagle-memcached: ConcurrentLoadBalancerFactory was removed and its behavior was replaced by a Stack.Param inside finagle-core's LoadBalancerFactory. PHAB_ID=D119394

    • finagle-netty4: Netty4ClientEngineFactory and Netty4ServerEngineFactory were finalized. PHAB_ID=D128708

    • ๐Ÿšš finagle-thrift, finagle-thriftmux: Remove ReqRep specific methods. Since the "ReqRep" builders are now subclasses of their non-"ReqRep" counterparts their is no longer a need to expose "ReqRep" specific methods. PHAB_ID=D123341

    ๐Ÿ—„ Deprecations

    * ๐Ÿ—„ finagle-exp: `c.t.f.exp.BackupRequestFilter` has been deprecated. Please use
      `c.t.f.client.BackupRequestFilter` instead. ``PHAB_ID=D122344``
    * ๐Ÿ—„ finagle-http: `c.t.f.http.Request.multipart` has been deprecated.
      Use `c.t.f.http.exp.MultipartDecoder` instead. ``PHAB_ID=D126013``
  • v17.12.0 Changes

    ๐Ÿ†• New Features

    * โšก๏ธ finagle-core: Expose Tunables for MethodBuilder timeout configuration. Update
      the http.MethodBuilder and thriftmux.MethodBuilder to accept Tunables for
      configuring total and per-request timeouts. ``PHAB_ID=D118114``
    * ๐Ÿ‘ finagle-thrift, finagle-thriftmux: Add support for Scrooge
      `ReqRepServicePerEndpoint` functionality. ``PHAB_ID=D107397``
    * ๐Ÿ‘ finagle-thriftmux: Add support for Scrooge `ServicePerEndpoint` and
      `ReqRepServicePerEndpoint` functionality to `thriftmux.MethodBuilder`.
    ๐Ÿ’ฅ Breaking API Changes
    • ๐Ÿšš finagle-base-http: Remove deprecated [Request|Response].[encode|decode][Bytes|String] methods. Use c.t.f.h.codec.HttpCodec methods instead. PHAB_ID=D116350

    • ๐Ÿšš finagle-memcached: ConcurrentLoadBalancerFactory was removed and its behavior was replaced by a Stack.Param inside finagle-core's LoadBalancerFactory. PHAB_ID=D119394

    • ๐Ÿšš finagle-serversets: Removed Guava dependency which broke some APIs. PHAB_ID=D119555

      • c.t.f.common.zookeeper.ServerSets.TO_ENDPOINT is now a java.util.function.Function.
      • now takes a java.util.Set.
      • c.t.f.common.zookeeper.ZooKeeperUtils.OPEN_ACL_UNSAFE is is now a java.util.List.
      • c.t.f.common.zookeeper.ZooKeeperUtils.EVERYONE_READ_CREATOR_ALL is is now a java.util.List.
      • c.t.f.common.zookeeper.ZooKeeperClient constructor now takes a java.util.Optional.
    • ๐Ÿšš finagle-thrift: Move ThriftRichClient and ThriftRichServer to c.t.finagle.thrift package. PHAB_ID=D115284

    โš™ Runtime Behavior Changes

    * ๐Ÿšš finagle-core: Remove `NackAdmissionControl` from the default client stack.
      Add it to the finagle-{http,mux} client stacks; note that it is added to
      finagle-http2 via finagle-http and finagle-thriftmux via finalge-mux. It is
      no longer part of the finagle-{memcached,mysql,redis} client stacks.
    * ๐Ÿšš finagle-core: The "pipelining/pending" stat has been removed from protocols
      using `c.t.f.dispatch.PipeliningClientDispatcher`. Refer to the "pending" stat
      for the number of outstanding requests. ``PHAB_ID=D113424``
    * ๐Ÿšš finagle-thrift,thriftmux: Tracing of RPC method names has been removed. This
      concern has moved into Scrooge. ``PHAB_ID=D115294``
    ๐Ÿ—„ Deprecations
    • ๐Ÿ—„ finagle-core: c.t.f.BackupRequestLost has been deprecated. Please use a c.t.f.Failure flagged c.t.f.Failure.Ignorable instead. PHAB_ID=D113466
  • v17.11.0 Changes

    ๐Ÿ†• New Features

    * finagle-core: Add `ResponseClassifier`s, RetryOnTimeout and RetryOnChannelClosed,
      for exceptions that are commonly retried when building from ClientBuilder but had
      no MethodBuilder equivalents. ``PHAB_ID=D106706``
    * finagle-netty4: `Netty4Transporter` and `Netty4Listener` are now accessible, which
      allows external users to create their own protocols for use with Finagle on Netty 4.
    ๐Ÿ› Bug Fixes
    • ๐Ÿšค finagle-exp: Fix race condition in LatencyHistogram which could lead to the wrong value returned for quantile. PHAB_ID=D106330

    ๐Ÿ’ฅ Breaking API Changes

    * finagle-core: Numerous overloads of `c.t.f.Server.serve` have been marked final.
    * finagle-thrift: Correctly send `mux.Request#contexts` in all cases. There were some
      cases in which `mux.Request#contexts` were not always propagated. The contexts are
      now always written across the transport. Note that there may be duplicated contexts
      between "local" context values and "broadcast" context values. Local values will
      precede broadcast values in sequence. ``PHAB_ID=D107921``
  • v17.10.0 Changes

    ๐Ÿš€ Release Version Format

    * ๐Ÿš€ From now on, release versions will be based on release date in the format of
      YY.MM.x where x is a patch number. ``PHAB_ID=D101244``
    ๐Ÿ†• New Features
    • finagle-core: DeadlineFilter may now be created from the class and used as a regular Filter in addition to a stack module as before. PHAB_ID=D94517

    • finagle-mysql: Add ability to toggle the CLIENT_FOUND_ROWS flag. PHAB_ID=D91406

    • finagle-http: Separated the DtabFilter.Extractor from the ServerContextFilter into a new module: ServerDtabContextFilter. While this is still enabled in the default Http server stack, it can be disabled independently of the ServerContextFilter. PHAB_ID=D94306

    โš™ Runtime Behavior Changes

    * finagle-netty4: `Netty4ClientEngineFactory` and `Netty4ServerEngineFactory` now
      validate loaded certificates in all cases to ensure that the current date
      range is within the validity range specified in the certificate. ``PHAB_ID=D88664``
    * finagle-netty4: `TrustCredentials.Insecure` now works with native SSL/TLS engines.
    * โฌ†๏ธ finagle-http2: Upgraded to the new netty http/2 API in netty version 4.1.16.Final,
      which fixes several long-standing bugs but has some bugs around cleartext http/2.
      One of the work-arounds modifies the visibility of a private field, so it's incompatible
      with security managers.  This is only true for http/2--all other protocols will be unaffected.
    * finagle-http: Netty 3 `HeaderMap` was replaced with our own implementation.
    ๐Ÿ—„ Deprecations
    • finagle-base-http: With the intention to make c.t.f.http.Cookie immutable, set methods on c.t.f.http.Cookie have been deprecated:

      • comment_=
      • commentUrl_=
      • domain_=
      • maxAge_=
      • path_=
      • ports_=
      • value_=
      • version_=
      • httpOnly_=
      • isDiscard_=
      • isSecure_=

    Use the c.t.f.http.Cookie constructor to set domain, maxAge, path, value, httpOnly, and secure. comment, commentUrl, ports, version, and discard have been removed per RFC-6265. PHAB_ID=D82164.

    Alternatively, use the domain, maxAge, path, httpOnly, and secure methods to create a new Cookie with the existing fields set, and the respective field set to a given value. PHAB_ID=D83226

    • finagle-base-http: c.t.f.http.Cookie.isSecure and c.t.f.http.Cookie.isDiscard have been deprecated. Use for c.t.f.http.Cookie.isSecure. isDiscard has been removed per RFC-6265. PHAB_ID=D82164

    ๐Ÿ’ฅ Breaking API Changes

    * ๐Ÿšš finagle-mysql: Moved `Cursors.cursor` method to `Client` trait, and removed `Cursors` trait.
      This allows cursor queries to used with transactions.  ``PHAB_ID=D91789``
    * finagle-mux: Expose transport contexts in mux.Request and mux.Response. ``PHAB_ID=D92998``
    * ๐Ÿšš finagle-mux: The "leased" gauge has been removed from the mux client implementation since the
      metric is reported as the sum of the value over all clients which is unlikely to be useful.
  • v7.1.0 Changes

    ๐Ÿ†• New Features

    * ๐Ÿ”ง finagle-core: If a `c.t.u.tunable.Tunable` request or total timeout has been configured
      on a client which uses a `c.t.f.client.DynamicTimeout` filter, the current value of tunable will
      be used in the case of no dynamic timeout set for a request. ``PHAB_ID=D81886``
    * finagle-core: `FailFastException` now captures the throwable that caused it. ``PHAB_ID=D86396``
    * finagle-redis: finagle interface for redis DBSIZE command. ``PHAB_ID=D85305``
    ๐Ÿ› Bug Fixes
    • finagle-core: Unregister ServerRegistry entry on StackServer#close. A StackServer entry is registered in the ServerRegistry on serve of the server but never unregistered. It is now unregistered on close of the StackServer. PHAB_ID=D83200

    • finagle-mux: Fix two issues with mux leases. In one bug, a new lease wouldn't be sent to the client if it was issued within 1 second of when the existing lease was set to expire. In a second bug, the server would only nack if the issued lease was 0, but didn't consider whether the lease had expired. PHAB_ID=D91645

    • finagle-netty4: Netty4ClientEngineFactory and Netty4ServerEngineFactory now properly load all chain certificates when the SslClientConfiguration or SslServerConfiguration uses KeyCredentials.CertKeyAndChain instead of just the first one in the file. PHAB_ID=D82414

    • ๐Ÿ”ง finagle-thrift/thriftmux: Thrift/ThriftMux servers and clients now can be configured with withMaxReusableBufferSize to specify the max size of the reusable buffer for Thrift responses. PHAB_ID=D83190

    โš™ Runtime Behavior Changes

    * finagle-stats: Verbosity levels are now respected: debug-metrics aren't exported
      by default.  ``PHAB_ID=D85278``
    * finagle-netty4: `ChannelTransport` no longer considers the `Channel.isWritable` result
      when determining status. ``PHAB_ID=D82670``
    ๐Ÿ—„ Deprecations
    • finagle-base-http: Encoding/decoding methods on c.t.f.http.Request and c.t.f.http.Response to/from Strings and arrays of bytes have been deprecated. Use the methods on c.t.f.http.codec.HttpCodec instead:

      • For c.t.f.http.Request.encodeString, use c.t.f.Http.codec.HttpCodec.encodeRequestToString
      • For c.t.f.http.Request.encodeBytes, use c.t.f.Http.codec.HttpCodec.encodeRequestToBytes
      • For c.t.f.http.Request.decodeString, use c.t.f.Http.codec.HttpCodec.decodeStringToRequest
      • For c.t.f.http.Request.decodeBytes, usec.t.f.Http.codec.HttpCodec.decodeBytesToRequest`
      • For c.t.f.http.Response.encodeString, use c.t.f.Http.codec.HttpCodec.encodeResponseToString
      • For c.t.f.http.Response.decodeString, use c.t.f.Http.codec.HttpCodec.decodeStringToResponse
      • For c.t.f.http.Response.decodeBytes, use c.t.f.Http.codec.HttpCodec.decodeBytesToResponse


    ๐Ÿ’ฅ Breaking API Changes

    * ๐Ÿšš finagle-core: Remove deprecated method `httpProxyTo(String, Option[Transporter.Credentials])`.
      Use `httpProxyTo(String, Transporter.Credentials]` instead. ``PHAB_ID=D84077``
    * ๐Ÿšš finagle-\*-http: Netty 3 specific HTTP transport related code has been moved into its own
      project, finagle-netty3-http, in preparation for removing it from Finagle.
    * ๐Ÿš€ finagle-memcached: Remove deprecated method `BaseClient.release()`. Use
      `BaseClient.close()` instead. ``PHAB_ID=D83168``
    ๐Ÿ—„ Deprecations
    • ๐Ÿšš finagle-memcached: Move to c.t.f.memcached.JavaClient, to c.t.f.memcached.JavaClientBase, and to c.t.f.memcached.ResultWithCAS. PHAB_ID=D83719

    • finagle-core: Added a new type member Context to Transport, and a method that returns a context, which has most of the methods currently directly on Transport. Also deprecates most of those methods--please start using the context instead of the Transport directly. Also added type parameters to Transporter, Listener, and type members to StackClient and StackServer. PHAB_ID=D83972

    • finagle-core: com.twitter.finagle.loadbalancer.DeterministicOrdering was renamed to com.twitter.finagle.loadbalancer.ProcessCoordinate and the internal Coord ADT was changed as well. PHAB_ID=D84452

    • ๐Ÿšš finagle-thrift: Move Thrift.Server.param.MaxReusableBufferSize to Thrift.param.MaxReusableBufferSize for both server and client use. PHAB_ID=D83190