Releases: twitter/finagle
Finagle 6.37.0
Deprecations
- finagle-core:
c.t.f.Deadline
is deprecated in favor ofc.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
- finagle-core: Expose metrics on util's default
FuturePool
implementations
unboundedPool
andinterruptibleUnboundedPool
:
"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-thrift: maxThriftBufferSize is now tunable via parameter for Thrift
servers. It previously only was for ThriftMux servers.RB_ID=860102
- 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
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
Finagle 6.36.0
Deprecations
- finagle-http: Removed DtabFilter.Finagle in favor of DtabFilter.Extractor.
RB_ID=840600
- finagle-zipkin: Deprecate
ZipkinTracer
in favor ofScribeZipkinTracer
.
RB_ID=840494
Breaking API Changes
- finagle: Builds are now only for Java 8 and Scala 2.11. See the
blog post 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 property
scala.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-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-memcached:
c.t.f.memcached.Client
now usesc.t.bijection.Bijection
instead ofc.t.u.Bijection
.RB_ID=834383
- finagle-thrift: As part of the migration off of
Codec
, remove
c.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-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, thecom.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
- 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
Finagle 6.35.0
Note: This is the final release that will support Scala 2.10 and Java 7.
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-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-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-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
Finagle 6.34.0
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 extendc.t.f.HasRemoteInfo
(includingc.t.f.SourcedException
),
accessible via theremoteInfo
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
andresponse_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 inStringUtil
to parse strings to boolean consistently.
RB_ID=804056
Breaking API Changes
-
finagle-core:
c.t.f.Codec.prepareConnFactory(ServiceFactory)
is markedfinal
, override
c.t.f.Codec.prepareConnFactory(ServiceFactory, Stack.Params)
instead.RB_ID=797821
-
finagle-core:
c.t.f.Codec.newClientDispatcher(Transport)
is markedfinal
, 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 withService.close()
. - Removed
c.t.f.ServiceFactory.make
, replace usage withServiceFactory.apply
. - Removed
c.t.f.ProxyServiceFactory
, replace usage withServiceFactoryProxy
. - Removed deprecated
c.t.f.service.FailureAccrualFactory
constructor. - Removed
c.t.f.netty3.ChannelBufferBuf.apply
, replace usage withChannelBufferBuf.Owned.apply
. - Removed
c.t.f.util.InetAddressUtil.Loopback
, replace usage withjava.net.InetAddress.getLoopbackAddress
. - Removed
c.t.f.tracing.TracingFilter
, replace usage withTraceInitializationFilter
and(Client|Server)TracingFilter
.
- Removed
-
finagle-core:
c.t.f.Addr.Bound.addr
type changed fromSet[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 handleSet[c.t.f.Address]
instead of
Set[SocketAddresses]
. If you do something with theSocketAddress
and expect the underlying
type to beInetSocketAddress
, usec.t.f.Address.Inet.addr
to get the underlying
InetSocketAddress
.c.t.f.Addr
constructors andc.t.f.Name.bound
method now acceptc.t.f.Address
instead
ofSocketAddress
. For most cases, wrapping theInetSocketAddress
in anAddress.Inet
will fix the compile error.Any other
SocketAddress
subclass is currently incompatible withc.t.f.Address
. Instead,
you should encode any additional information in the metadata field ofc.t.f.Address.Inet
orc.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 ofInetSocketAddress
instead of
SocketAddress
. If you get a compile error, change the static type toInetSocketAddress
if
you can. Otherwise, cast it at runtime toInetSocketAddress
.RB_ID=792209
-
finagle-core:
c.t.f.client.Transporter.EndpointAddr
takes ac.t.f.Address
as its
parameter instead ofSocketAddress
.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 bee removed -
usec.t.f.service.exp.FailureAccrualPolicy
instead. -
finagle-memcached:
c.t.f.memcached.protocol.text.Memcached
no longer takes aStatsReceiver
,
pass it to a(Client/Server)Builder
instead.RB_ID=797821
-
finagle-redis:
c.t.f.redis.Redis
no longer takes aStatsReceiver
, pass it to a
(Client/Server)Builder
instead.RB_ID=797821
Finagle 6.33.0
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 paramc.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
theServerAdmissionControl.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 byStatsFilter
andFailureAccrualFactory
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 thewith
-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 richer
checkAndSet
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 fromc.t.f.Thrift.Client
and
c.t.f.Thrift.Server
. This behavior may now be controlled withc.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 withResponseClassifier.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
- 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 fromc.t.f.Thrift.Client
and
c.t.f.Thrift.Server
. This behavior may now be controlled withc.t.f.Thrift.param.Framed
.
Finagle 6.31.0
New Features
- finagle-core:
c.t.f.Server
now has aserveAndAnnounce
method that accepts aSocketAddress
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 theRetries.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 optionsTCP_NODELAY
andSO_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 ofnewServiceIface
method that accept alabel
argument to pass to theScopedStats
instance.RB_ID=760157
- finagle-stats: Added
c.t.f.stats
now has astatsFilterFile
flag which will read a blacklist
of regex, newline-separated values. It will be used along with thestatsFilter
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
- finagle-core: The behavior for
c.t.f.util.DefaultMonitor
has changed such that
unhandled exceptions are propagated toc.t.u.RootMonitor
except for
c.t.f.Failures
with a logLevel
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 nowretries/requeues
,
retries/budget
andretries/budget_exhausted
.RB_ID=760213
- finagle-core:
c.t.f.service.RetryFilter
andc.t.f.service.RetryExceptionsFilter
now default to using aRetryBudget
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 surfacesAddr.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 anException
. 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. Usec.t.f.http.Request.multipart
instead. Also
c.t.f.http.exp.Multipart.FileUpload
is no longer a case class, but base trait
forMultipart.InMemoryFileUpload
andMultipart.OnDiskFileUpload
.RB_ID=769889
- finagle-mux:
c.t.f.FailureDetector.apply
method is changed to private scope,
to reduce API surface area. UsingFailureDetector.Config
is enough to config
session based failure detection behavior.RB_ID=756833
- finagle-mux:
closeThreshold
inc.t.f.mux.FailureDetector.ThresholdConfig
is
changed tocloseTimeout
, 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 throughnewServiceIface
RB_ID=760157
Finagle 6.30.0
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 toHashedWheelTimer
and
the constructor acceptingorg.jboss.netty.util.Timer
made private. For
compatibility,HashedWheelTimer
has additional constructors to match
those provided byorg.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
Finagle 6.29.0
Deprecations
- finagle-http: Deprecated in favour of finagle-httpx and now removed.
New Features
- finagle-core: Provides a
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. 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 tonetworkaddress.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 nextmarkDeadFor
period.RB_ID=747541
- finagle-serversets: DNS lookups in Zk2Resolver are no longer
cached within Finagle according tonetworkaddress.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.
RetryExceptionsFilteris 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 andKetamaPartitionClient
andKetamaFailureAccrualFactory
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.
Finagle 6.28.0
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, theTrafficDistributor
. 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 aFailure.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 acom.twitter.concurrent.AsyncSemaphore
instead of an integer representing the max concurrency.RB_ID=696934
- finagle-core: removed
c.t.f.asyncDns
flag andc.t.f.SyncInetResolver
; DNS resolution is
now always asynchronous.RB_ID=734427
- finagle-core:
ClientBuilder.ClientConfig.DefaultParams
,ClientBuilder.ClientConfig.DestName
,
ClientBuilder.ClientConfig.GlobalTimeout
,ClientBuilder.ClientConfig.Daemonize
, and
ClientBuilder.ClientConfig.MonitorFactory
are now private tocom.twitter.finagle.builder
.
ClientBuilder.ClientConfig.Retries
is now private tocom.twitter
.RB_ID=727245
- finagle-httpx:
Method
no longer has an extractor. To access the name of
custom methods, usetoString
.RB_ID=722913
- finagle-mux:
c.t.f.mux.exp.FailureDetector
andc.t.f.mux.exp.sessionFailureDetector
are
moved out of exp package into mux package.RB_ID=725350
Finagle 6.27.0
New Features
- finagle-http: Support nacks between Finagle Http clients and servers. When a server fails
with retryable exceptions (exceptions wrapped byFailure.rejected
), it sends back a "Nack"
response, i.e. 503 Response code with a new "finagle-http-nack" header. This allows clients
to safely retry failed requests, and keep connections open.RB_ID=705948
Runtime Behavior Changes
- finagle-core: FailFast parameter renamed from
onOrOff
toenabled
.RB_ID=720781
- finagle-core: When evaluating NameTree unions, return components of the union in Ok state rather
than waiting for all components to be Ok. This enables resilience of unions when part of the
tree cannot be resolved.RB_ID=697114
- finagle-stats: Standard of deviation is no longer calculated. It is exported as a constant 0.0
for "$statName.stddev".RB_ID=717647
Breaking API Changes
- finagle-stream: Introduce StreamRequest as a replacement for Netty's
HttpRequest, and converted the rest of the public API to not leak
other Netty types (notably ChannelBuffer is replaced by Buf).RB_ID=695896
- finagle-core: Dtab does not implement the Namer interface anymore. Use
c.t.f.naming.DefaultInterpreter
to bind a name via a Dtab. Support for Dtab entries starting
with /#/ has been removed.c.t.f.Namer.bindAndEval
has been removed. Use
c.t.f.Namer.resolve
instead.RB_ID=711681
- finagle:
LoadService
andThriftRichClient
migrated off of deprecatedClassManifest
toClassTag
.RB_ID=720455