All Versions
172
Latest Version
Avg Release Cycle
28 days
Latest Release
-

Changelog History
Page 6

  • v18.7.0 Changes

    ๐Ÿ†• New Features

    
    * finagle-core: Promote the push-based API's out of experimental. For protocols that
      have eager read paths, for example multiplexed protocols and non-streaming clients,
      a push-based protocol implementation can provide significant performance benefits
      by avoiding the impedance mismatch between the underlying Netty framework and the
      pull-based Transport model. ``PHAB_ID=D189187``
    
    * 0๏ธโƒฃ finagle-core: There is now an implicit instance for Finagle's default timer:
      `DefaultTimer.Implicit`. ``PHAB_ID=D185896``
    
    * finagle-core: Introduce new command-line flag `c.t.f.tracing.enabled` to entirely
      disable/enable tracing for a given process (default: `true`).  ``PHAB_ID=D186557``
    
    * finagle-mux: Promote the push-based Mux implementation out of experimental status.
      ``PHAB_ID=D189187``
    
    * finagle-mysql: `com.twitter.util.Time` can now be used with
      `PreparedStatement`s without converting the `ctu.Time` to a `java.sql.Timestamp`.
      ``PHAB_ID=D182973``
    
    * ๐Ÿ‘• finagle-stats: Adds a lint rule to detect when metrics with colliding names are used.
      ``PHAB_ID=D183494``
    
    * ๐Ÿ”ง finagle-core: Client side `NackAdmissionFilter` can now be configured more easily by
      calling `$client.withAdmissionControl.nackAdmissionControl(window, threshold)`.
      ``PHAB_ID=D188877``
    
    * finagle-thrift: Trait c.t.scrooge.ThriftService is now c.t.finagle.thrift.ThriftService.
      Scrooge generated service objects now all inherit from c.t.finagle.thrift.GeneratedThriftService.
      ``PHAB_ID=D180341``
    
    ๐Ÿ’ฅ Breaking API Changes
    
    • finagle-core: c.t.f.dispatch.ClientDispatcher.wrapWriteException has been turned from a partial function instance into a static total function. PHAB_ID=D189639

    • finagle-mux: ClientDiscardedRequestException now extends FailureFlags and is no longer a case class. PHAB_ID=D183456

    ๐Ÿ› Bug Fixes

    
    * finagle-core: `c.t.f.filter.NackAdmissionFilter` is now aware of `FailureFlags` encoded
      failures. ``PHAB_ID=D193390``
    
    * finagle-mux: Mux's server dispatcher is now aware of `FailureFlags` encoded failures.
      ``PHAB_ID=D193456``
    
    โš™ Runtime Behavior Changes
    
    • finagle-core: Server-side rejections from c.t.f.filter.RequestSempahoreFilter.module are now captured by c.t.f.service.StatsFilter. They will roll up under "/failures", "/failures/rejected", and "/failures/restartable" in stats. PHAB_ID=D187127

    • finagle-core: c.t.f.tracing.Trace.tracers now returns only distinct tracers stored in the local context (returned all tracers before). PHAB_ID=D188389

    • finagle-http: HTTP param decoding is no longer truncated to 1024 params. PHAB_ID=D190113

    • finagle-mux: When mux propagates an interrupt started by BackupRequestFilter over the network, the FailureFlags.Ignorable status is propagated with it. PHAB_ID=D183456

  • 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.
      ``PHAB_ID=D174401``
    
    ๐Ÿ†• 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
    
      package com.foo
    
      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
    
      package com.foo
    
      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 "com.foo.MyFilter1.andThen(com.foo.MyFilter2)"
    
    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:
    "com.foo.MyFilter1.andThen(com.foo.MyFilter2).andThen(com.twitter.finagle.service.ConstantService(ConstFuture(2)))"
    
    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 `javax.net.ssl.KeyManagerFactory` and `javax.net.ssl.TrustManagerFactory` respectively.
      ``PHAB_ID=D177484``
    
    ๐Ÿ’ฅ Breaking API Changes
    ~~~~~~~~~~~~~~~~~~~~
    
    * finagle-core: Rename `DeadlineFilter.Param(maxRejectFraction)` to
      `DeadlineFilter.MaxRejectFraction(maxRejectFraction)` to reduce confusion
      when adding additional params.
      ``PHAB_ID=D172402``
    
    
    ๐Ÿ› 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 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``
    
  • 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.
      ``PHAB_ID=D150503``
    
    * 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.
      ``PHAB_ID=D144184``
    
    * ๐Ÿ‘ 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 sun.security.util.HostnameChecker which is no longer accessible in JDK 9. PHAB_ID=D144149

    • โฌ†๏ธ 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
      `sun.security.util.HostnameChecker` 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
      `javax.net.ssl.CertificateException`. ``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.
      ``PHAB_ID=D124620``
    
  • 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 `c.t.f.Stack.Params.plus` for easily adding Params to a Param map from Java.
      ``PHAB_ID=D139660``
    
    ๐Ÿ› 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. PHAB_ID=D122227

    • ๐Ÿšš finagle-base-http: Removed deprecated c.t.f.Cookie.isSecure; use c.t.f.Cookie.secure 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. PHAB_ID=D135908

    • ๐Ÿšš finagle-core: The deprecated c.t.f.loadbalancer.DefaultBalancerFactory has been removed. PHAB_ID=D139814

    • ๐Ÿšš 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. PHAB_ID=D141940

  • v18.2.0 Changes

    ๐Ÿ†• New Features

    
    * finagle-core: Add orElse to allow composition of `FailureAccrualPolicy`s.
      ``PHAB_ID=D131156``
    
    * 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. PHAB_ID=D126486

  • 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.
      ``PHAB_ID=D126840``
    
    * ๐ŸŒฒ 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.
      ``PHAB_ID=D124352``
    
    * 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
      https://github.com/twitter/finagle/pull/628 written by Mura-Mi [https://github.com/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.Toggle`s 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`.
      ``PHAB_ID=D116081``
    
    ๐Ÿ’ฅ 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.
      • c.t.f.common.net.pool.DynamicHostSet.HostChangeMonitor.onChange 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.
      ``PHAB_ID=D116722``
    
    * ๐Ÿšš 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.
      ``PHAB_ID=D105627``
    
    ๐Ÿ› 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. PHAB_ID=D107280

    • 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. PHAB_ID=D103766

    • โฌ†๏ธ 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. PHAB_ID=D98069

    • finagle-http: Netty 3 HeaderMap was replaced with our own implementation. PHAB_ID=D99127

    ๐Ÿ—„ 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 `c.t.f.http.Cookie.secure` 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. PHAB_ID=D100357