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 extendsFailureFlags
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 byc.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, theFailureFlags.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 aFuture[Unit]
instead of the broadFuture[Result]
ADT.PHAB_ID=D160215
finagle-toggle: Changed
ToggleMap.Mutable
from a trait to an abstract class, andToggleMap.Proxy
no longer extendsToggleMap
, but now has a self-type that conforms toToggleMap
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 usingsun.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 takesstringLengthLimit
andcontainerLengthLimit
,NO_LENGTH_LIMIT
value changed from 0 to -1.PHAB_ID=D124620
๐ finagle-thrift: Move "stateless" methods in
c.t.finagle.thrift.ThriftRichClient
toc.t.finagle.thrift.ThriftClient
. Then mix theThriftClient
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_=
; usec.t.f.Cookie.value
instead.PHAB_ID=D148266
๐ finagle-base-http: Removed deprecated
c.t.f.Cookie.domain_=
; usec.t.f.Cookie.domain
instead.PHAB_ID=D148266
๐ finagle-base-http: Removed deprecated
c.t.f.Cookie.path_=
; usec.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_
, andc.t.f.http.Cookie.commentUrl_=
.comment
andcommentUrl
per RFC-6265.PHAB_ID=D137538
๐ finagle-base-http: Removed deprecated
c.t.f.http.Cookie.isDiscard
andc.t.f.http.Cookie.isDiscard_=
, per RFC-6265.PHAB_ID=D138109
๐ finagle-base-http: Removed deprecated
c.t.f.http.Cookie.ports
andc.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 toRequestBuilder.Valid
.PHAB_ID=D122227
๐ finagle-base-http: Removed deprecated
c.t.f.Cookie.isSecure
; usec.t.f.Cookie.secure
instead. Removed deprecatedc.t.f.Cookie.isSecure_=
.PHAB_ID=D140435
๐ finagle-base-http: Removed deprecated
c.t.f.http.Cookie.version
andc.t.f.http.Cookie.version_=
, per RFC-6265.PHAB_ID=D142672
๐ finagle-base-http: Removed deprecated
c.t.f.Cookie.httpOnly_=
; usec.t.f.Cookie.httpOnly
instead.PHAB_ID=D143177
๐ finagle-base-http: Removed deprecated
c.t.f.Cookie.maxAge_=
; usec.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 usingc.t.f.ssl.client.SslClientEngineFactory
orc.t.f.ssl.server.SslServerEngineFactory
instead.PHAB_ID=D135908
๐ finagle-core: Removed
newSslEngine
andnewFinagleSslEngine
fromServerBuilder
. Please implement a class which extendsc.t.f.ssl.server.SslServerEngineFactory
with the previously passed in function used as the implementation of theapply
method. Then use the created engine factory with one of thetls
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 usec.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 usingc.t.f.ssl.client.SslClientEngineFactory
orc.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 ac.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 thatUpdater
imposes more overhead than simple synchronization while complicating the result of callingrebuild()
since we don't know if the rebuild actually occurred by the time we attempt to use the distributor again.PHAB_ID=D126486
- finagle-core:
-
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 ofSslClientEngineFactory.getHostname
. This no longer performs an unnecessary reverse lookup when a hostname is not supplied as part of theSslClientConfiguration
.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'sLoadBalancerFactory
.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 ajava.util.function.Function
.c.t.f.common.net.pool.DynamicHostSet.HostChangeMonitor.onChange
now takes ajava.util.Set
.c.t.f.common.zookeeper.ZooKeeperUtils.OPEN_ACL_UNSAFE
is is now ajava.util.List
.c.t.f.common.zookeeper.ZooKeeperUtils.EVERYONE_READ_CREATOR_ALL
is is now ajava.util.List
.c.t.f.common.zookeeper.ZooKeeperClient
constructor now takes ajava.util.Optional
.
๐ finagle-thrift: Move
ThriftRichClient
andThriftRichServer
toc.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 whichmux.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
andNetty4ServerEngineFactory
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 toClient
trait, and removedCursors
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