Changelog History
Page 8
-
v6.37.0 Changes
๐ Deprecations
* ๐ finagle-core: `c.t.f.Deadline` is deprecated in favor of `c.t.f.context.Deadline`. ``RB_ID=864148`` ๐ฅ Breaking API Changes
๐ finagle-core: As part of a move away from encoding/decoding in the Netty pipeline, removed
FrameEncoder
andFrameDecoder
types, found inc.t.f.codec
.RB_ID=847716
finagle-core: Delete IdleConnectionFilter, which is no longer hooked up in the server, and no longer seems to be useful.
RB_ID=856377
๐ finagle-core: Remove deprecated methods from
c.t.f.builder.ClientBuilder
RB_ID=864622
connectionTimeout
, usetcpConnectTimeout
expFailFast
, usefailFast
buildFactory
, use otherbuildFactory
methodsbuild
, use otherbuild
methods
finagle-exp: Abstract out parts of the DarkTrafficFilter for potential re-use. We also canonicalize the DarkTrafficFilter stats scope which changes from "darkTrafficFilter" to "dark_traffic_filter". E.g.: "dark_traffic_filter/forwarded", "dark_traffic_filter/skipped", and "dark_traffic_filter/failed".
RB_ID=852548
finagle-mysql: Mysql has been promoted out of experimental. Please change all references of com.twitter.finagle.exp.{M,m}ysql to com.twitter.finagle.{M,m}ysql
๐ finagle-redis: Server-side support for Redis is removed. See this finaglers@ thread (https://groups.google.com/forum/#!topic/finaglers/dCyt60TJ7eM) for discussion. Note that constructors for Redis commands no longer accept raw byte arrays.
RB_ID=848815
๐ finagle-redis: Redis codec (i.e.,
c.t.f.Codec
) is removed. Usec.t.f.Redis.client
instead.RB_ID=848815
๐ New Features
* 0๏ธโฃ finagle-core: Expose metrics on util's default `FuturePool` implementations `unboundedPool` and `interruptibleUnboundedPool`: "finagle/future_pool/pool_size", "finagle/future_pool/queue_size", "finagle/future_pool/active_tasks", and "finagle/future_pool/completed_tasks". ``RB_ID=850652`` * finagle-core: Mux Clients now propagate the number of times the client retried the request in the request's c.t.f.context.Context, available via c.t.f.context.Retries. ``RB_ID=862640`` * finagle-http: HTTP Clients now propagate the number of times the client retried the request in the request's c.t.f.context.Context, available via c.t.f.context.Retries. ``RB_ID=864852`` * finagle-thrift: maxThriftBufferSize is now tunable via parameter for Thrift servers. It previously only was for ThriftMux servers. ``RB_ID=860102`` โ Runtime Behavior Changes
finagle-http: HttpTransport now eagerly closes client connection after processing non-keepalive requests.
finagle-redis:
c.t.f.redis.Client
now uses the pipelining dispatcher.RB_ID=848815
finagle-serversets:
c.t.f.serverset2.Stabilizer
no longer uses a timer to implement stabilization periods if the periods are 0 seconds long.RB_ID=861561
finagle-core: 'c.t.f.Failure' has a new flag, Rejected, to indicate that a given request was rejected. All Failures generated with the Failure.rejected constructor are flagged Rejected and Restartable.
RB_ID=863356
๐ finagle-core:
c.t.f.FixedInetResolver
now optionally retries failed DNS lookups with provided backoff, andc.t.f.serverset2.Zk2Resolver
uses this retry functionality infinitely, exponentially backing off from 1 second to 5 minutes.RB_ID=860058
-
v6.36.0 Changes
๐ Deprecations
* ๐ finagle-http: Removed DtabFilter.Finagle in favor of DtabFilter.Extractor. ``RB_ID=840600`` * ๐ finagle-zipkin: Deprecate `ZipkinTracer` in favor of `ScribeZipkinTracer`. ``RB_ID=840494`` ๐ฅ Breaking API Changes
๐ finagle: Builds are now only for Java 8 and Scala 2.11. See the
blog post <https://finagle.github.io/blog/2016/04/20/scala-210-and-java7/>
_ for details.RB_ID=828898
๐ฏ finagle: Finagle is no longer depending on Twitter's clone of JSR166e, JDK 8 API is used instead.
RB_ID=833652
๐ฆ finagle-cacheresolver: package contents merged into finagle-memcached.
RB_ID=833602
finagle-core: Renamed DeadlineFilter to DeadlineStatsFilter, which now only records stats for the number of requests with exceeded deadlines, the remaining deadline budget, and the transit latency of requests. It no longer rejects requests and has no configuration. We have decided not to pursue Deadline Admission Control at this time.
RB_ID=829372
๐ finagle-core:
ClientBuilder.socksProxy(SocketAddress)
is removed. Use command line flags (seec.t.f.socks.SocksProxyFlags.scala
) instead.RB_ID=834634
๐ finagle-core: Removed "closechans" and "closed" counters from
ChannelStatsHandler
.RB_ID=835194
๐ finagle-core: Removed the "load" gauge from
StatsFilter
as it was duplicated by the "pending" gauge.RB_ID=835199
๐ finagle-core:
c.t.finagle.NoStacktrace
is removed. Usescala.util.control.NoStackTrace
instead.RB_ID=833188
๐ finagle-core:
c.t.finagle.Failure.withStackTrace
is removed. Use system propertyscala.control.noTraceSuppression
instead to fill stacktraces in Finagle's failures.RB_ID=833188
๐ finagle-core:
c.t.f.filter.RequestSerializingFilter
is removed. Usec.t.f.filter.RequestSemaphoreFilter
instead.RB_ID=839372
finagle-core:
SessionParams
no longer containsacquisitionTimeout
. Instead, it was extracted intoClientSessionParams
.RB_ID=837726
finagle-core: Changed visibility of PipeliningDispatcher to private[finagle]. Clients should not be affected, since it's not a part of the end-user API.
RB_ID=843153
.finagle-core: Simplified and unified the constructors for FailureAccrualFactory into a single constructor.
RB_ID=849660
๐ finagle-http: Deprecate channelBufferUsageTracker in favor of maxRequestSize.
RB_ID=831233
finagle-http: HttpClientDispatcher, HttpServerDispatcher, and ConnectionManager are no longer public.
RB_ID=830150
๐ finagle-redis: Deprecated methods have been removed from the client API.
RB_ID=843455
๐ฆ finagle-redis:
c.t.f.redis.*Commands
traits are now package-private.RB_ID=843455
finagle-redis: Replace
ChannelBuffer
withBuf
in client's:HashCommands
:RB_ID=843596
ListCommands
:RB_ID=844596
BtreeSortedSetCommands
:RB_ID=844862
HyperLogLogCommands
:RB_ID=844945
PubSubCommands
:RB_ID=845087
SetCommands
:RB_ID=845578
SortedSetCommands
:RB_ID=846074
๐ finagle-thrift: As part of the migration off of
Codec
, removec.t.f.thrift.ThriftClientBufferedCodec
andc.t.f.thrift.ThriftClientBufferedCodecFactory
which were used byClientBuilder.codec
andServerBuilder.codec
. Replace usage withClientBuilder.stack(Thrift.client.withBufferedTransport)
orServerBuilder.stack(Thrift.server.withBufferedTransport)
.RB_ID=838146
finagle-memcached:
c.t.f.memcached.Client
now usesc.t.bijection.Bijection
instead ofc.t.u.Bijection
.RB_ID=834383
๐ finagle-zipkin: Moved case classes and companion objects
Span
,ZipkinAnnotation
,BinaryAnnotation
,Endpoint
,Sampler
andSamplingTracer
to finagle-zipkin-core.RB_ID=840494
๐ finagle-mysql: Removed
c.t.f.exp.mysql.transport.MysqlTransporter
, as it was not useful for it to be public.RB_ID=840718
๐ Bug Fixes
* finagle-core: PipeliningDispatcher now serializes "write and enqueue Promise" so it's no longer possible for the wrong response to be given to a request. ``RB_ID=834927`` * finagle-http: Servers which aggregate content chunks (streaming == false) now return a 413 response for streaming clients who exceed the servers' configured max request size. ``RB_ID=828741`` * finagle-mysql: `c.t.f.exp.mysql.PreparedCache` now closes prepared statements when no one holds a reference to the cached future any longer. This fixes a race condition where the cached future could be evicted and the prepared statement closed while a user tries to use that prepared statement. ``RB_ID=833970`` * ๐ finagle-netty4-http: Servers now see the correct client host address for requests. ``RB_ID=844076`` ๐ New Features
โฑ finagle-core: Added gauge, "scheduler/blocking_ms" measuring how much time, in milliseconds, the
com.twitter.concurrent.Scheduler
is spending doing blocking operations on threads that have opted into tracking. This also moves the "scheduler/dispatches" gauge out of TwitterServer into Finagle.RB_ID=828289
finagle-core: Added a FailureAccrualPolicy that marks an endpoint dead when the success rate in a specified time window is under the required threshold.
RB_ID=829984
0๏ธโฃ finagle-core:
StackServer
now installs anExpiringService
module by default. This allows servers to have control over session lifetime and brings theStackServer
to feature parity withServerBuilder
.RB_ID=837726
finagle-exp: Changed DarkTrafficFilter to forward interrupts to dark service.
RB_ID=839286
๐ finagle-http: ContextFilter and Dtab-extractor/injector logic has been moved from the http dispatchers into the client and server stacks.
RB_ID=840600
finagle-mysql: Added a
withMaxConcurrentPreparedStatements
method to the client which lets you specify how many prepared statements you want to cache at a time.RB_ID=833970
๐ finagle-redis: Adds support for scripting commands.
RB_ID=837538
๐ finagle-netty4: SOCKS5 proxy support.
RB_ID=839856
finagle-zipkin-core: A new module containing most of the functionality from finagle-zipkin, leaving finagle-zipkin with only Scribe specific code and a service loader. This allows for other transports to be implemented in separate modules. For example the upcoming finagle-zipkin-kafka.
RB_ID=840494
finagle-thriftmux: Introduce a Netty4 implementation of mux and thrift-mux.
RB_ID=842869
โ Runtime Behavior Changes
* ๐ง finagle-core: For SSLEngine implementations supplied via configuration or created by Finagle, the setEnableSessionCreation method is no longer called. The supplied value, true, is the default for JSSE implementations, and for other engines this can be an unsupported operation. ``RB_ID=845765`` * finagle-core: Pipelined protocols (memcached, redis) no longer prevent connections from being cut by interrupts. Instead, interrupts are masked until a subsequent ten second timeout has expired without a response in the pipeline. ``RB_ID=843153`` * finagle-core: MonitorFilter now installs the parameterized monitor, and will no longer fail the request automatically if any exception is thrown synchronously (like if an exception is thrown in an onSuccess or onFailure block). This removes a race, and makes Finagle more deterministic. ``RB_ID=832979``
-
v6.35.0 Changes
๐ Deprecations
* ๐ฆ finagle: remove unused finagle-validate and finagle-testers packages. ``RB_ID=818726`` โ Runtime Behavior Changes
finagle-core: DeadlineFilter is now per-connection, so the max rejection percentage is not shared across clients. This prevents a single client from exceeding the rejection budget.
RB_ID=813731
.๐ finagle-core: The use of keytool in PEMEncodedKeyManager has been removed and instead the keystore is being loaded from the pkcs12 file.
RB_ID=832070
finagle-http: Local Dtabs are now encoded into the
Dtab-Local
header.X-Dtab
headers may still be read but should be considered deprecated.RB_ID=815092
๐ finagle-thrift: Removed duplicate "thrift" label on Thrift/ThriftMux scrooge-related server stats.
RB_ID=816825
๐ฅ Breaking API Changes
* ๐ finagle-redis: Deprecated ChannelBuffer exposing apis for string commands. ``RB_ID=817766``. * ๐ finagle-core: DefaultClient has been removed. Implementors should prefer `c.t.f.StackClient` ``RB_ID=812681``. * finagle-core: When a client is created, its server set resolution is started eagerly. ``RB_ID=806940`` * finagle-core: Dentry now takes a Dentry.Prefix instead of a Path. ``RB_ID=813914`` * ๐ finagle-core: Remove `*.client.withTransport.socksProxy` param as part of the initiative to move to CLI flags based configuration for SOCKS. ``RB_ID=842512`` * finagle-thrift/thriftmux: Thrift servers constructed using `Thrift.serveIface` now use `Thrift.server.serveIface`. ThriftMux servers constructed using `ThriftMux.serveIface` now use `ThriftMux.server.serveIface`. ``RB_ID=824865`` * ๐ finagle-cache-resolver: `c.t.f.cacheresolver.ZookeeperCacheNodeGroup` has been removed from the API since we no longer check for the zookeeper data for the cache pool size to refresh for the changes in the serverset. ``RB_ID=811190`` ๐ New Features ~~~~~~~~~~~~ * ๐ง finagle-http: http 1.1 running on netty4 is configurable via `c.t.finagle.netty4.http.exp.Netty4Impl`. It has not been tested in production and should be considered beta software. ``RB_ID=828188`` * finagle-core: Multi-line Dtabs may now contain line-oriented comments beginning with '#'. Comments are omitted from parsed Dtabs. ``RB_ID=818752`` * finagle-http: new stack params MaxChunkSize, MaxHeaderSize, and MaxInitialLineLength are available to configure the http codec. ``RB_ID=811129`` * ๐ฐ finagle-mux: Mux now has support for fragmenting Tdispatch and Rdispatch payloads. This helps with head-of-line blocking in the presence of large payloads and allows long transmissions to be interrupted. ``RB_ID=794641``. * ๐ finagle-core: Dtabs allow wildcard path elements in prefixes. ``RB_ID=813914`` * ๐ finagle-netty4: HTTP proxy support for any Finagle Netty 4 client. ``RB_ID=819752`` * finagle-core: Gauge for dns resolutions awaiting lookups. ``RB_ID=822410`` ๐ Bug Fixes ~~~~~~~~~ * finagle-http: Ensure that service closure is delayed until chunked response bodies have been processed. ``RB_ID=813110`` * finagle-stats: Ensure that histogram snapshotting does not fall behind if snapshot() is not called at least once per interval. ``RB_ID=826149``
-
v6.34.0 Changes
โ Runtime Behavior Changes
* finagle-core: GenSerialClientDispatcher fails pending and subsequent requests when its underlying transport closes. ``RB_ID=807590`` ๐ New Features ~~~~~~~~~~~~ * finagle-core: Include upstream/downstream addresses/client ids and request trace id in exceptions that extend `c.t.f.HasRemoteInfo` (including `c.t.f.SourcedException`), accessible via the `remoteInfo` value. ``RB_ID=797082`` * finagle-core: Introduce `c.t.f.service.ResponseClassifier` for HTTP servers, which allows developers to give Finagle the additional application specific knowledge necessary in order to properly classify responses.``RB_ID=800179`` * ๐ฐ finagle: Export two new histograms: `request_payload_bytes` and `response_payload_bytes` for the following protocols: HTTP (non-chunked), Mux, ThriftMux and Thrift. ``RB_ID=797821`` * finagle-core: Define `c.t.f.Address` to represent an endpoint's physical location. Resolvers and namers may attach metadata such as weight to individual endpoint addresses. ``RB_ID=792209`` * finagle-http: Introduce convenience extractors to pattern match `c.t.f.http.Response.status` against the different categories. ``RB_ID=802953`` * ๐ finagle-http: Add `toBoolean` method in `StringUtil` to parse strings to boolean consistently. ``RB_ID=804056`` * finagle-http: Servers now actually decompress requests when decompression is turned on. ``RB_ID=810629`` * ๐ finagle-redis: Add support for SENTINEL commands. ``RB_ID=810663`` * ๐ finagle-redis: Support for Pub/Sub. ``RB_ID=810610`` ๐ฅ Breaking API Changes ~~~~~~~~~~~~~~~~~~~~ * finagle-core: `c.t.f.Codec.prepareConnFactory(ServiceFactory)` is marked `final`, override `c.t.f.Codec.prepareConnFactory(ServiceFactory, Stack.Params)` instead. ``RB_ID=797821`` * finagle-core: `c.t.f.Codec.newClientDispatcher(Transport)` is marked `final`, override `c.t.f.Codec.newClientDispatcher(Transport, Stack.Params)` instead. ``RB_ID=797821`` * ๐ finagle-core: Removed deprecations: ``RB_ID=800974`` - Removed `c.t.f.Service.release`, replace usage with `Service.close()`. - Removed `c.t.f.ServiceFactory.make`, replace usage with `ServiceFactory.apply`. - Removed `c.t.f.ProxyServiceFactory`, replace usage with `ServiceFactoryProxy`. - Removed deprecated `c.t.f.service.FailureAccrualFactory` constructor. - Removed `c.t.f.netty3.ChannelBufferBuf.apply`, replace usage with `ChannelBufferBuf.Owned.apply`. - Removed `c.t.f.util.InetAddressUtil.Loopback`, replace usage with `java.net.InetAddress.getLoopbackAddress`. - Removed `c.t.f.tracing.TracingFilter`, replace usage with `TraceInitializationFilter` and `(Client|Server)TracingFilter`. * finagle-core: `c.t.f.Addr.Bound.addr` type changed from `Set[SocketAddress]` to `Set[c.t.f.Address]`. We provide a migration guide below for the most common cases. Callers of `c.t.f.Addr.Bound.addr` must handle `Set[c.t.f.Address]` instead of `Set[SocketAddresses]`. If you do something with the `SocketAddress` and expect the underlying type to be `InetSocketAddress`, use `c.t.f.Address.Inet.addr` to get the underlying `InetSocketAddress`. `c.t.f.Addr` constructors and `c.t.f.Name.bound` method now accept `c.t.f.Address` instead of `SocketAddress`. For most cases, wrapping the `InetSocketAddress` in an `Address.Inet` will fix the compile error. Any other `SocketAddress` subclass is currently incompatible with `c.t.f.Address`. Instead, you should encode any additional information in the metadata field of `c.t.f.Address.Inet` or `c.t.f.exp.Address.ServiceFactory`. ``RB_ID=792209`` * finagle-core: Delete `c.t.f.ServiceFactorySocketAddress` and replace usages with `c.t.f.exp.Address.ServiceFactory`. ``RB_ID=792209`` * finagle-core: Delete `c.t.f.WeightedSocketAddress` and instead use `c.t.f.addr.WeightedAddress` to represent address weights. ``RB_ID=792209`` * ๐ finagle-core: `c.t.f.builder.ClientBuilder.hosts` takes a Seq of `InetSocketAddress` instead of `SocketAddress`. If you get a compile error, change the static type to `InetSocketAddress` if you can. Otherwise, cast it at runtime to `InetSocketAddress`. ``RB_ID=792209`` * finagle-core: `c.t.f.client.Transporter.EndpointAddr` takes a `c.t.f.Address` as its parameter instead of `SocketAddress`. ``RB_ID=792209`` * ๐ finagle-core: `c.t.f.service.FauilureAccrualFactory.Param(FailureAccrualPolicy)` is removed - it's not safe to configure Failure Accrual with a shareable instance of the policy, use `() => FailureAccrualPolicy` instead. ``RB_ID=802953`` * ๐ finagle-core: `$Client.withSessionQualifier.failureAccrualPolicy` has been removed from the API since it enables an experimental feature (use Stack's `.configured` API instead). ``RB_ID=802953`` * ๐ finagle-core: `c.t.f.service.exp.FailureAccrualPolicies` (Java-friendly API) has been removed - use `c.t.f.service.exp.FailureAccrualPolicy` instead. * ๐ finagle-core: DefaultServer is removed. Protocol implementors should use StackServer instead. ``RB_ID=811918`` * finagle-memcached: `c.t.f.memcached.protocol.text.Memcached` no longer takes a `StatsReceiver`, pass it to a `(Client/Server)Builder` instead. ``RB_ID=797821`` * finagle-redis: `c.t.f.redis.Redis` no longer takes a `StatsReceiver`, pass it to a `(Client/Server)Builder` instead. ``RB_ID=797821`` * finagle-core: `c.t.f.http.MapHeaderMap` no longer takes a `mutable.Map[String, Seq[String]]` as a constructor parameter. `apply` method provides a similar functionality. ๐ Bug Fixes ~~~~~~~~~ * ๐ finagle-core: Fixed `getAll` method on `c.t.f.http.MapHeaderMap`, now it is case insensitive. `apply` method was altering the provided header names. This is fixed it is now possible to iterate on the original header names.
-
v6.33.0 Changes
๐ New Features
* finagle-core: Introduce the `c.t.f.service.PendingRequestFactory` module in the client Stack. The module allows clients to limit the number of pending requests per connection. It is disabled by default. ``RB_ID=795491`` * finagle-core: Introduce the `c.t.f.filter.ServerAdmissionControl` module in the server Stack, which is enabled through the param `c.t.f.param.EnableServerAdmissionControl`. Users can define their own admission control filters, which reject requests when the server operates beyond its capacity. These rejections apply backpressure and allow clients to retry requests on servers that may not be over capacity. The filter implementation should define its own logic to determine over capacity. One or more admission control filters can be installed through the `ServerAdmissionControl.register` method. ``RB_ID=776385`` * finagle-core: Introduce `c.t.f.service.ResponseClassifier` which allows developers to give Finagle the additional application specific knowledge necessary in order to properly classify them. Without this, Finagle can only safely make judgements about transport level failures. This is now used by `StatsFilter` and `FailureAccrualFactory` so that application level failures can be used for both success metrics and failure accrual. ``RB_ID=772906`` * finagle-core: Added a new 'Endpoints' section on client pages, listing the weights, paths, and resolved endpoints for each dtab.``RB_ID=779001`` * finagle-core: Introduce discoverable stack params which are available on every client/server via the `with`-prefixed methods. ``RB_ID=781833`` * finagle-memcached: Added `c.t.f.memcached.BaseClient.checkAndSet` which exposes the difference between a conflict and a not found result. * finagle-mux: Add a Wireshark dissector that can decode Mux messages. ``RB_ID=779482`` * finagle-stats: Define flag `c.t.f.stats.statsFilterFile` as GlobalFlag[Set[File]] to take comma-separated multiple files. ``RB_ID=793397`` * finagle-mux: Tinit/Rinit are now available and permit feature negotiation. ``RB_ID=793350`` ๐ Deprecations
- ๐ finagle-memcached:
c.t.f.memcached.BaseClient.cas
is deprecated in favor of the richercheckAndSet
method.
๐ฅ Breaking API Changes
* ๐ finagle-core: All the deprecated exceptions from `Exceptions.scala` have been removed. ``RB_ID=774658`` * ๐ finagle-thrift: Remove the `framed` attributes from `c.t.f.Thrift.Client` and `c.t.f.Thrift.Server`. This behavior may now be controlled with `c.t.f.Thrift.param.Framed`. * ๐ finagle-core: Unused `c.t.f.builder.NonShrinkingCluster` has been removed. ``RB_ID=779001`` * finagle-thrift: `c.t.f.ThriftRichClient` has a new abstract protected method `responseClassifier: ResponseClassifier`. If your implementation does not need this, you can implement it with `ResponseClassifier.Default`. ``RB_ID=791470`` โ Runtime Behavior Changes
finagle-thrift,thriftmux: Deserialization of Thrift responses now happens as part of service application which means that it will now be part of the latency reported by
StatsFilter
. The actual latency as perceived by clients will not have changed, but for clients that spend significant time deserializing and do not have higher level metrics this may come as a surprise.RB_ID=772931
0๏ธโฃ finagle-mux,thriftmux: The default
closeTimeout
in ping based failure detection is changed from Duration.Top to 4 seconds, to allow a session to be closed by default when a ping response times out after 4 seconds. This allows sessions to be reestablished when there may be a networking issue, so that it can choose an alternative networking path instead.RB_ID=773649
๐ฅ Breaking API Changes
* ๐ finagle-thrift: Remove the `framed` attributes from `c.t.f.Thrift.Client` and `c.t.f.Thrift.Server`. This behavior may now be controlled with `c.t.f.Thrift.param.Framed`.
- ๐ finagle-memcached:
-
v6.32.0 Changes
๐ NOT RELEASED
-
v6.31.0 Changes
๐ New Features
* finagle-core: `c.t.f.Server` now has a `serveAndAnnounce` method that accepts a `SocketAddress` as an address. ``RB_ID=758862`` * ๐ finagle-core: `c.t.f.service.Retries` now supports adding delay between each automatic retry. This is configured via the `Retries.Budget`. ``RB_ID=768883`` * finagle-core: FailureAccrualFactory now uses a FailureAccrualPolicy to determine when to mark an endpoint dead. The default policy, FailureAccrualPolicy.consecutiveFailures(), mimicks existing functionality, and FailureAccrualPolicy.successRate() operates on the exponentially weighted average success rate over a window of requests.``RB_ID=756921`` * ๐ง finagle-core: Introduce `c.t.f.transport.Transport.Options` to configure transport-level options (i.e., socket options `TCP_NODELAY` and `SO_REUSEADDR`). ``RB_ID=773824`` * ๐ finagle-http: `c.t.f.http.exp.Multipart` now supports both in-memory and on-disk file uploads. ``RB_ID=RB_ID=769889`` * finagle-netty4: Hello World. Introduce a `Listener` for Netty 4.1. This is still considered beta. ``RB_ID=718688`` * finagle-netty4: Introduce `ChannelTransport` for Netty 4.1. ``RB_ID=763435`` * finagle-thrift: `c.t.f.ThriftRichClient` implementations of `newServiceIface` method that accept a `label` argument to pass to the `ScopedStats` instance. ``RB_ID=760157`` * finagle-stats: Added `c.t.f.stats` now has a `statsFilterFile` flag which will read a blacklist of regex, newline-separated values. It will be used along with the `statsFilter` flag for stats filtering. ``RB_ID=764914`` ๐ Deprecations
- ๐ finagle-core: the #channelFactory method of
c.t.f.builder.ServerBuilder
has been deprecated in favor of thec.t.f.netty3.numWorkers
flag.RB_ID=718688
โ Runtime Behavior Changes
* 0๏ธโฃ finagle-core: The behavior for `c.t.f.util.DefaultMonitor` has changed such that unhandled exceptions are propagated to `c.t.u.RootMonitor` except for `c.t.f.Failures` with a log `Level` below INFO. ``RB_ID=758056`` * finagle-core: The metrics for requeues `requeue/requeues`, `requeue/budget` and `requeue/budget_exhausted` have moved under retries. They are now `retries/requeues`, `retries/budget` and `retries/budget_exhausted`. ``RB_ID=760213`` * finagle-core: `c.t.f.service.RetryFilter` and `c.t.f.service.RetryExceptionsFilter` now default to using a `RetryBudget` to mitigate retry amplification on downstream services. The previous behavior can be achieved by explicitly passing in `RetryBudget.Infinite`. ``RB_ID=766302`` * finagle-core: `c.t.f.factory.TrafficDistributor` now suppresses changes when a bound address is updated from a valid set to an error. Instead, it continues using stale data until it gets a successful update. * finagle-http: Unhandled exceptions from user defined HTTP services are now converted into very basic 500 responses so clients talking to those services see standard HTTP responses instead of a dropped connection. ``RB_ID=755846`` * ๐ finagle-memcached: Moved metrics from underlying `KetamaPartitionedClient` for Memcached clients to share the same scope of the underlying finagle client. ``RB_ID=771691`` * finagle-mux: `com.twitter.finagle.mux.ThresholdFailureDetector` is turned on by default. ``RB_ID=756213`` * finagle-serversets: The `c.t.f.serverset2.Zk2Resolver` now surfaces `Addr.Pending` when it detects that its underlying ZooKeeper client is unhealthy. Unhealthy is defined as non-connected for greater than its 'unhealthyWindow' (which defaults to 5 minutes). ``RB_ID=760771`` * finagle-serversets: The `c.t.f.serverset2.ZkSession` now uses an unbounded semaphore to limit to 100 outstanding zookeeper requests at any one moment. ``RB_ID=771399`` ๐ฅ Breaking API Changes ~~~~~~~~~~~~~~~~~~~~ * ๐ป finagle-core: `BackupRequestLost` is no longer itself an `Exception`. Use `BackupRequestLost.Exception` in its place. ``RB_ID=758056`` * ๐ finagle-core: Replaced `c.t.f.builder.ClientConfig.Retries` with `c.t.f.service.Retries.Policy`. ``RB_ID=760213`` * ๐ finagle-core: A deprecated `c.t.f.CancelledReadException` has been removed. ``RB=763435`` * ๐ finagle-http: `c.t.f.http.exp.Multipart.decodeNonChunked` has been removed from the public API. Use `c.t.f.http.Request.multipart` instead. Also `c.t.f.http.exp.Multipart.FileUpload` is no longer a case class, but base trait for `Multipart.InMemoryFileUpload` and `Multipart.OnDiskFileUpload`. ``RB_ID=769889`` * finagle-mux: `c.t.f.FailureDetector.apply` method is changed to private scope, to reduce API surface area. Using `FailureDetector.Config` is enough to config session based failure detection behavior. ``RB_ID=756833`` * finagle-mux: `closeThreshold` in `c.t.f.mux.FailureDetector.ThresholdConfig` is changed to `closeTimeout`, from an integer that was used as a multiplier to time duration. This makes it easier to config. ``RB_ID=759406`` ๐ Bug Fixes ~~~~~~~~~ * finagle-thrift: `c.t.f.ThriftRichClient` scoped stats label is now threaded properly through `newServiceIface` ``RB_ID=760157``
- ๐ finagle-core: the #channelFactory method of
-
v6.30.0 Changes
๐ New Features
* ๐ค finagle-core: `com.twitter.finagle.client.LatencyCompensator` allows its default Compensator value to be set via an API call. This allows libraries to set defaults for clients that have not configured this module. ``RB_ID=750228`` * ๐ finagle-core: New Resolver `com.twitter.finagle.FixedInetResolver` extends InetResolver by caching successful DNS lookups indefinitely. It's scheme is 'fixedinet'. This is used by clients or resolvers that do not want or expect host->ip map changes (such as the zk2 resolver and twemcache client). ``RB_ID=753712`` โ Runtime Behavior Changes
finagle-core:
RetryPolicy.tries
now uses jittered backoffs instead of having no delay.RB_ID=752629
finagle-core:
FailureAccrualFactory
uses jittered backoffs as the duration to mark dead for, ifmarkDeadFor
is not configured.RB_ID=746930
๐ค finagle-core: The transit latency (transit_latency_ms) and deadline budget (deadline_budget_ms) stats are now only recorded for servers, not for clients anymore, since they're only meaningful for servers.
RB_ID=75268
๐ฐ finagle-http: Clients sending requests with payloads larger than the server accepts (default 5MB) now receive a HTTP 413 response instead of a channel closed exception.
RB_ID=753664
๐ฅ Breaking API Changes
* finagle-core: `TimerFromNettyTimer` is renamed to `HashedWheelTimer` and the constructor accepting `org.jboss.netty.util.Timer` made private. For compatibility, `HashedWheelTimer` has additional constructors to match those provided by `org.jboss.netty.util.HashedWheelTimer`. ``RB_ID=748514`` * finagle-httpx / finagle-httpx-compat: Renamed to finagle-http and finagle-http-compat respectively. This changes the package names, e.g.: com.twitter.finagle.httpx to com.twitter.finagle.http. ``RB_ID=751876`` * finagle-core: Marked `HandletimeFilter` private[finagle], and renamed it to `ServerStatsFilter`. ``RB_ID=75268`` * finagle-zipkin: Drop `c.t.zipkin.thrift.Annotation.duration` and associated thrift field `c.t.f.thrift.thrift.Annotation.duration`. ``RB_ID=751986`` * ๐ finagle-stress: Project has been removed from Finagle. ``RB_ID=752201`` * ๐ finagle-swift: Project has been moved off of Finagle to https://github.com/finagle/finagle-swift . ``RB_ID=752826``
-
v6.29.0 Changes
๐ Deprecations
* ๐ finagle-http: Deprecated in favour of finagle-httpx and now removed. ๐ New Features
finagle-core: Provides a
RetryFilter
which takes aRetryPolicy[(Req, Try[Rep])]
and allows you to retry on both "successful" requests, such as HTTP 500s, as well as failed requests. TheReq
parameterization facilitates using the request to determine if retrying is safe (i.e. the request is idempotent).๐ finagle-httpx: Experimental support
multipart/form-data
(file uploads) decoding viac.t.f.httpx.exp.Multipart
.RB_ID=730102
โ Runtime Behavior Changes
* finagle-core: `InetResolver.bind` will now succeed if any hostname resolution succeeds. Previous behavior required that all hosts are successfully resolved. ``RB_ID=737748`` * finagle-core: DNS lookups in InetResolver are no longer cached within Finagle according to `networkaddress.cache.ttl`; we rely instead on however caching is configured in the JVM and OS. ``RB_ID=735006`` * finagle-core: After being revived, a `FailureAccrualFactory` enters a 'probing' state wherein it must successfully satisfy a request before accepting more. If the request fails, it waits for the next `markDeadFor` period. ``RB_ID=747541`` * finagle-serversets: DNS lookups in Zk2Resolver are no longer cached within Finagle according to `networkaddress.cache.ttl`; instead they are cached indefinitely. ``RB_ID=735006`` * finagle-redis: c.t.f.Redis now uses a pipelined dispatcher along with a concurrent load balancer to help eliminate head-of-line blocking. ๐ฅ Breaking API Changes ~~~~~~~~~~~~~~~~~~~~ * finagle-core: `RetryingFilter`, which takes a RetryPolicy[Try[Nothing]]` and is invoked only on exceptions, has been renamed to `RetryExceptionsFilter`. `RetryExceptionsFilter` is a subclass of `RetryFilter`, which takes a `RetryPolicy[(Req, Try[Rep])]` and allows you to retry on both "successful" requests, such as HTTP 500s, as well as failed requests. The `Req` parameterization facilitates using the request to determine if retrying is safe (i.e. the request is idempotent). * finagle-core: Name.all is now private to `com.twitter.finagle`. * finagle-memcached: Unified stack-based construction APIs and cleanup internal constructors. In particular, `KetamaClient` was removed and `KetamaPartitionClient` and `KetamaFailureAccrualFactory` are now sealed inside Finagle. See [[com.twitter.finagle.Memcached]] for how to construct a finagle-memcached client. * finagle-redis: Port the c.t.f.Redis protocol object to the StackClient API. A redis client can now be constructed and configured like the rest of the finagle subprojects.
-
v6.28.0 Changes
๐ New Features
โ Runtime Behavior Changes
๐ finagle-core: Weights are no longer supported by the load balancers. They are moved one level above and interpreted by a new module, the
TrafficDistributor
. This frees the balancers to have non-linear load metrics. It also changes the semantics of weights. They are now normalized by size of endpoints that share the same weight and interpreted proportional to offered load (however, they can still be though of, roughly, as multipliers for traffic).RB_ID=677416
finagle-core: The RequestSemaphoreFilter now sheds load by dropping the tail of the queue and failing it with a
Failure.Restartable
. Previously, the filter had an unbounded queue but now the default size is 0 (i.e. no queueing). The dropped requests are in turn requeued by Finagle clients with protocol support (e.g. Http, ThriftMux).RB_ID=696934
finagle-core:
ServerBuilder.ServerConfig.BindTo
,ServerBuilder.ServerConfig.MonitorFactory
, andServerBuilder.ServerConfig.Daemonize
, are now private tocom.twitter.finagle.builder
.RB_ID=730865
finagle-memcachedx: Renamed to finagle-memcached.
finagle-stats: Standard deviation ("$statName.stddev") is no longer exported.
RB_ID=726309
(follow up toRB_ID=717647
)๐ค finagle-serversets:
namer/bind_latency_us
stat now counts only time in name resolution, not service acquisition.namer/{dtabcache,namecache,nametreecache}/misstime_ms
stats are no longer exported.RB_ID=730309
๐ฅ Breaking API Changes
* finagle-core: `c.t.f.jsr166y` has been replaced with Java 7 API. finagle: Replace JSR166y with Java 7 API. ``RB_ID=720903`` * finagle-core: `LoadBalancerFactory` no longer takes endpoints with weights as per the decoupling mentioned in runtime changes. ``RB_ID=677416`` * finagle-core: `RequestSemaphoreFilter.Param` now accepts a `com.twitter.concurrent.AsyncSemaphore` instead of an integer representing the max concurrency. ``RB_ID=696934`` * ๐ finagle-core: removed `c.t.f.asyncDns` flag and `c.t.f.SyncInetResolver`; DNS resolution is now always asynchronous. ``RB_ID=734427`` * 0๏ธโฃ finagle-core: `ClientBuilder.ClientConfig.DefaultParams`, `ClientBuilder.ClientConfig.DestName`, `ClientBuilder.ClientConfig.GlobalTimeout`, `ClientBuilder.ClientConfig.Daemonize`, and `ClientBuilder.ClientConfig.MonitorFactory` are now private to `com.twitter.finagle.builder`. `ClientBuilder.ClientConfig.Retries` is now private to `com.twitter`. ``RB_ID=727245`` * finagle-httpx: `Method` no longer has an extractor. To access the name of custom methods, use `toString`. ``RB_ID=722913`` * finagle-mux: `c.t.f.mux.exp.FailureDetector` and `c.t.f.mux.exp.sessionFailureDetector` are moved out of exp package into mux package. ``RB_ID=725350``