Releases: twitter/finagle
Finagle 19.4.0
19.4.0
New Features
- finagle-core: Make maxDepth in Namer configurable. 03cc3197
- namerMaxDepth in Namer now configurable through a global flag (namerMaxDepth)
- finagle-core: The newly renamed SslSessionInfo is now public. It is
intended for providing information about a connection's SSL/TLS session.
811fe004 - finagle-core: Added the c.t.finagle.DtabFlags trait which defines a Flag and function for
appending to the "base" c.t.finagle.Dtab delegation table. 675630df - finagle-http: Finagle HTTP implementation now supports trailing headers (trailers). Use
c.t.f.http.Message.trailers to access trailing headers on a fully-buffered message
(isChunked == false) or c.t.f.http.Message.chunkReader on a message with chunked payload
(isChunked == true). 351c43c1 - finagle-http,thriftmux: Added tracing annotations to backup requests. 48f54e82
- Binary annotation "srv/backup_request_processing", when servers are processing backup requests.
- finagle-http: Added new server metrics to keep track of inbound requests that are rejected due to
their headers containing invalid characters (as seen by RFC-7230): rejected_invalid_header_names
and rejected_invalid_header_values. 41bd061a - finagle-http: Added stats of the duration in milliseconds of request/response streams:
request_stream_duration_ms and response_stream_duration_ms. They are enabled by using
.withHttpStats on Http.Client and Http.Server 916f4a26 - finagle-mysql: A new toggle, "com.twitter.finagle.mysql.IncludeHandshakeInServiceAcquisition", has
been added. Turning on this toggle will move MySQL session establishment (connection phase) to be
part of service acqusition. fe4d8919
Runtime Behavior Changes
- finagle-core: Client-side nacking admission control now defaults on. See the documentation
on c.t.f.filter.NackAdmissionFilter for details. This can be disabled by setting the
global flag, com.twitter.finagle.client.useNackAdmissionFilter, to false.
aa36f56b - finagle-core: LatencyCompensation now applies to service acquisition. 1ec020a5
- finagle-http: HTTP headers validation on the outbound path is now in compliance with RFC7230.
5b2e9f95 - finagle-netty4: Netty's reference leak tracking now defaults to disabled.
Set the flag com.twitter.finagle.netty4.trackReferenceLeaks to true to enable.
f63d7f7a
Breaking API Changes
-
finagle: Dropped a dependency on Netty 3:
-
finagle-netty3 sub-project has been removed
-
finagle-http-cookie sub-project has been removed
-
c.t.f.http.Cookie no longer takes Netty's DefaultCookie in the constructor
03c773a5
-
-
finagle-core: The peerCertificate methods of c.t.f.t.TransportContext and
c.t.f.p.PushChannelHandle have been replaced with the more robust
sslSessionInfo. Users looking for just the functional equivalence of
peerCertificate can use sslSessionInfo.peerCertificates.headOption.
dc4bfbcf -
finagle-core: The com.twitter.finagle.core.UseClientNackAdmissionFilter toggle
has been replaced by a global flag, com.twitter.finagle.client.useNackAdmissionFilter.
aa36f56b -
finagle-thrift: Allow users to specify stringLengthLimit and containerLengthLimit 233150a9
- method parameter readLength in com.twitter.finagle.thrift.Protocols#binaryFactory renamed to stringLengthLimit to reflect usage
- method parameter containerLengthLimit added to com.twitter.finagle.thrift.Protocols#binaryFactory
Finagle 19.3.0
New Features
- finagle-core: Added tracing annotations to backup requests. 5201f623
- Timestamped annotation "Client Backup Request Issued"
- Timestamped annotation "Client Backup Request Won" or "Client Backup Request Lost"
- Binary annotation "clnt/backup_request_threshold_ms", with the current value of the
latency threshold, in milliseconds - Binary annotation "clnt/backup_request_span_id", with the span id of the backup request
Breaking API Changes
- finagle-core: Deprecated multi-param legacy
tls
methods have been removed in
c.t.f.param.ServerTransportParams
andc.t.f.builder.ServerBuilder
. Users should migrate to
using thetls(SslServerConfiguration)
method instead. ca646bd8
Runtime Behavior Changes
- finagle-core: The tracing annotations from
MkJvmFilter
have been enhanced. 0586f657- Timestamped annotations "GC Start" and "GC End" for each garbage collection event
that occurred during the request. - Binary annotation "jvm/gc_count", with the total number of garbage collection events
that occurred during the request. - Binary annotation "jvm/gc_ms", with the total milliseconds of garbage collection events
that occurred during the request.
- Timestamped annotations "GC Start" and "GC End" for each garbage collection event
Finagle 19.2.0
New Features
- finagle-core: Added gauge
is_marked_dead
as an indicator of whether the host is marked
as dead(1) or not(0) inFailFastFactory
. 068a15e6 - finagle-core:
KeyCredentials.CertsAndKey
has been added as an option for
c.t.f.ssl.KeyCredentials
for when the certificate and certificate chain are
contained within the same file. b4a9e8cd - finagle-thriftmux: Additional information is now annotated in traces for clients
using Scrooge generated Thrift bindings. c69a22f8, 32d9b56b,
6283c6ce.
This includes:- RPC method name
- Request serialization time, in nanoseconds
- Request deserialization time, in nanoseconds
- Response serialization time, in nanoseconds
- Response deserialization time, in nanoseconds
Breaking API Changes
-
finagle-http: Removed
Http.Client.withCompressionLevel
because it wasn't doing anything.
To migrate your client, simply remove the configuration--it had absolutely no effect.
87944371 -
finagle-http:
c.t.f.dispatch.ExpiringServerDispatcher
was dead code. We removed it.
ae0571c9 -
finagle-thrift: Removed
newIface
andnewServiceIface
methods from
c.t.f.thrift.ThriftRichClient.MultiplexedThriftClient
, which are deprecated in November 2017.
773b6e57 -
finagle-thrift: Removed deprecated APIs located in Thrift.scala:
1. c.t.f.Thrift.Client.stats => use c.t.f.Thrift.Client.clientParam.clientStats
2. c.t.f.Thrift.withProtocolFactory => use c.t.f.Thrift.client.withProtocolFactory
3. c.t.f.Thrift.withClientId => usec.t.f.Thrift.client.withClientId
4. c.t.f.Thrift.Server.serverLabel => use c.t.f.Thrift.Server.serverParam.serviceName
5. c.t.f.Thrift.Server.serverStats => use c.t.f.Thrift.Server.serverParam.serverStats
6. c.t.f.Thrift.Server.maxThriftBufferSize => use c.t.f.Thrift.Server.serverParam.maxThriftBufferSize
c6eb2020 -
finagle-thrift:
c.t.f.thrift.ThriftServiceIface.Filterable
is removed, use
c.t.f.thrift.service.Filterable
instead. 23affacc -
finagle-thrift:
c.t.f.thrift.ThriftServiceIface
is removed, use
c.t.f.thrift.service.ThriftServicePerEndpoint
instead. 23affacc -
finagle-thriftmux: Removed deprecated APIs located in ThriftMux.scala:
1. c.t.f.ThriftMux.Client.stats => use c.t.f.ThriftMux.Clien.clientParam.clientStats
2. c.t.f.ThriftMux.Server.serverLabel => use c.t.f.ThriftMux.Server.serverParam.serviceName
3. c.t.f.ThriftMux.Server.serverStats => use c.t.f.ThriftMux.Server.serverParam.serverStats
4. c.t.f.ThriftMux.Server.maxThriftBufferSize => use c.t.f.ThriftMux.Server.serverParam.maxThriftBufferSize
c6eb2020 -
finagle-thriftmux:
ThriftMux.Client.pushMuxer
is removed. UseThriftMux.Client.standardMuxer
instead. 90333b1a -
finagle-thriftmux:
ThriftMux.serverMuxer
is removed. UseThriftMux.Server.defaultMuxer
instead. 90333b1a -
finagle-base-http: Removed the
c.t.f.http.Statuses
java helper, which was deprecated two years
ago in favor of usingc.t.f.http.Status
directly. 75a4a209 -
finagle-base-http: Removed the
c.t.f.http.Versions
java helper, which was deprecated two years
ago in favor of usingc.t.f.http.Version
directly. f191f1db -
finagle-base-http: Removed the
c.t.f.http.Methods
java helper, which was deprecated two years
ago in favor of usingc.t.f.http.Method
directly. ccf10dbc -
finagle-http:
c.t.f.http.Response.Ok
was removed. Use justResponse()
orResponse.Proxy
if you need to mock it. d93bb1c9 -
finagle-core:
Drv.Aliased
andDrv.newVose
are now private, please
construct aDrv
instance usingDrv.apply
orDrv.fromWeights
.
9c810dd3 -
finagle-core:
c.t.f.BackupRequestLost
is now removed. Please usec.t.f.Failure.ignorable
instead. 02d3d524
Bug Fixes
- finagle-http: Fix for a bug where HTTP/2 clients could retry requests that had a chunked
body even if the request body was consumed. b031e757 - finagle-http: Fix for a bug where HTTP clients could assume connections are reusable, despite
having streaming requests in flight. 88a2d0ba
Runtime Behavior Changes
- finagle-core: Faster
Filters
. Removes unnecessaryService.rescue
proxies from
the intermediateandThen
-edFilters
. Previously in rare cases you might have seen
a rawException
not wrapped in aFuture
if theFilter
threw. These will now
consistently be lifted into aFuture.exception
. a2ddc727 - finagle-core: MethodBuilder metrics filtering updated to now report rolled-up
logical failures. 6e3bf33f - finagle-http: Disabling Netty3 cookies in favor of Netty4 cookies. fccd92c6
- finagle-http: Removed the debug metrics
http/cookie/dropped_samesites
and
http/cookie/flagless_samesites
. 2de928ce
Deprecations
- finagle-core: Multi-param legacy
tls
methods have been deprecated in
c.t.f.param.ServerTransportParams
andc.t.f.builder.ServerBuilder
. Users should migrate
to using thetls(SslServerConfiguration)
method instead. fbfc6d1a - finagle-core:
$client.withSession.maxIdleTime
is now deprecated; use
$client.withSessionPool.ttl
instead to set the maximum allowed duration a connection may be
cached for. 0f060e37 - finagle-serversets:
c.t.f.zookeeper.ZkResolver
has been deprecated in favor
ofc.t.f.serverset2.Zk2Resolver
. 9878a9ec
Finagle 19.1.0
New Features
- finagle-core: c.t.f.s.StackBasedServer has been changed to extend the
c.t.f.Stack.Transformable trait. This brings StackBasedServer into parity
with c.t.f.c.StackBasedClient, which already extends the
Stack.Transformable trait. 9f637b5e - finagle-http: HttpMuxer propagates the close signal to the underlying handlers.
6475680d
Breaking API Changes
- finagle-core: The deprecated c.t.f.b.ServerBuilder.stack method which takes a function
has been removed. Uses of this method should be changed to use the c.t.f.b.ServerBuilder.stack
method which takes a c.t.f.s.StackBasedServer instead. a05e5e7b - finagle-core: The type of c.t.f.b.ServerConfig.nilServer has been changed from
Server[Req, Rep] to StackBasedServer[Req, Rep]. 4be953d4 - finagle-core: The access level of the c.t.f.b.ServerBuilder.copy method has changed
from protected to private. 4be953d4 - finagle-core: The bridge type c.t.f.b.Server has been removed. Users should
change to use c.t.f.ListeningServer instead. Uses of the previously
deprecated Server.localAddress should use ListeningServer.boundAddress
instead. eb66ee71 - finagle-core: The deprecated c.t.f.t.Transport.localAddress and
c.t.f.t.Transport.remoteAddress methods are now final and can no longer
be extended. Users should migrate to the respective c.t.f.t.TransportContext
methods. b85f43a0 - finagle-thrift: The c.t.f.t.ThriftRichClient.protocolFactory and
c.t.f.t.ThriftRichServer.protocolFactory methods have been removed. Users should
switch to using ThriftRichClient.clientParam.protocolFactory and
ThriftRichServer.serverParam.protocolFactory instead. In addition, implementations
of the protocolFactory method have been removed from the concrete c.t.f.Thrift
and c.t.f.ThriftMux client and server. e33baf82
Bug Fixes
- finagle-core: Failed writes on Linux due to a remote peer disconnecting should now
be properly seen as a c.t.f.ChannelClosedException instead of a
c.t.f.UnknownChannelException. 8f5774cb - finagle-http: Compression level of 0 was failing on the server-side when speaking h2c.
Updated so that it can handle a request properly. 5f96fcb2 - finagle-thriftmux: A Java compatibility issue for users trying to call withOpportunisticTls
on ThriftMux clients and servers has been fixed. e57d2a91
Runtime Behavior Changes
- finagle-core: ServiceFactory.const propagates the close from the ServiceFactory
to the underlying service, instead of ignoring it. 6475680d
Finagle 18.12.0
18.12.0
New Features
- finagle-redis: Add support for the new stream API released in Redis 5.0. ba578c14
- finagle-core: Add Java compatibility for c.t.f.Filter.TypeAgnostic.Identity
via c.t.f.Filter.typeAgnosticIdentity(). cff9aedd - finagle-core: Add Java compatibility for c.t.f.Name through Names.
30a8000c - finagle-core: Introduce a StackServer.withStack overload that
makes modifying the existing Stack easier when using method chaining.
f1a980cf - finagle-thrift: Add c.t.finagle.thrift.MethodMetadata which provides a LocalContext Key
for setting information about the current Thrift method and an accessor for retrieving
the currently set value. 7b22e4ef - finagle-thrift: Update c.t.finagle.thrift.MethodMetadata to provide an
asCurrent method to set the current c.t.finagle.thrift.MethodMetadata in the
LocalContext. f46e1f77
Breaking API Changes
- finagle-core: The c.t.u.Closable trait has been removed from
c.t.f.t.TransportContext, as well as the close and onclose methods. Uses of
these methods within TransportContext should be changed to use the corresponding
methods on c.t.f.t.Transport instead. b8b850bb - finagle-core: The deprecated c.t.f.t.Transport.peerCertificate method on the Transport class
(not the Transport.peerCertificate Finagle context) has been removed. Uses of this
method should be changed to use c.t.f.t.TransportContext.peerCertificate instead.
ab0432b4 - finagle-core: The deprecated c.t.f.t.TransportContext.status method has been removed
from TransportContext. Uses of this method should be changed to use
c.t.f.t.Transport.status instead. fd97536f - finagle-mysql: c.t.f.m.Charset has been renamed to c.t.f.m.MysqlCharset to resolve
any ambiguity between it and the Charset Stack parameter. 05354cd5 - finagle-mysql: All Stack params (Charset, Credentials, Database, FoundRows,
MaxConcurrentPrepareStatements, UnsignedColumns) have been moved to the
com.twitter.finagle.mysql.param namespace. d30c5549 - finagle-mysql: The deprecated c.t.f.m.Client.apply(factory, statsReceiver) method
has been removed. 17747e1a - finagle-mysql: The c.t.f.m.Handshake class and companion object have been made
private. 20c8d50f - finagle-http: Rename the toggle 'c.t.f.h.UseH2CClients' to 'c.t.f.h.UseH2CClients2'.
43c0b69c
Runtime Behavior Changes
Finagle 18.11.0
New Features
- finagle-base-http: Add Message.httpDateFormat(millis) to format the epoch millis into
an RFC 7231 formatted String representation. eb9bec0e - finagle-core: Introduce an StackClient.withStack overload that
makes modifying the existing Stack easier when using method chaining.
8f69e833 - finagle-mysql: Introduce session to be able to perform multiple operations that require
session state on a guaranteed single connection. a06f7d67 - finagle-netty4: When using the native epoll transport, finagle now publishes the TCP window size
and number of retransmits based on the tcpInfo provided by from the channel. These stats are
published with a debug verbosity level. 16071088 - finagle-http: HTTP clients and servers now accept fixedLengthStreamedAfter param in their
withStreaming configuration (default: 5 MB when streaming is enabled). This new parameter
controls the limit after which Finagle will stop aggregating messages with known Content-Length
(payload will be available at .content) and switch into a streaming mode (payload will be
available at .reader). Note messages with Transfer-Encoding: chunked never aggregated.
842e5e1a
Breaking API Changes
- finagle-http: c.t.f.http.param.MaxChunkSize has been removed. There is no good reason to
configure it with anything but Int.MaxValue (unlimited). 990c8650 - finagle-exp: Update DarkTrafficFilter#handleFailedInvocation to accept the request type
for more fidelity in handling the failure. b247f941
Runtime Behavior Changes
- finagle-http: Unset maxChunkSize limit in Netty HTTP codecs. Now both clients and servers
emit all available data as a single chunk so we can put it into use quicker.
990c8650 - finagle-http: Streaming clients (withStreaming(true)) now aggregate inbound messages with known
Content-Length if their payloads are less than 5mb (8k before). Use withStreaming(true, 32.kb)
to override it with a different value. 24271b29 - finagle-http2: HTTP/2 servers perform a more graceful shutdown where an initial
GOAWAY is sent with the maximum possible stream id and waits for either the client
to hang up or for the close deadline, at which time a second GOAWAY is sent with
the true last processed stream and the connection is then closed.
93fee499
Deprecations
- finagle-core: Deprecate
EndpointerStackClient.transformed(Stack[ServiceFactory[Req, Rep]] => Stack[ServiceFactory[Req, Rep]])
in favor of the withStack variant. 8f69e833
Finagle 18.10.0
Deprecations
- finagle-core: Deprecation warnings have been removed from the 'status', 'onClose',
and 'close' methods onc.t.f.t.Transport
, and added to the corresponding methods
onc.t.f.t.TransportContext
. 9ae6d978
Runtime Behavior Changes
- finagle-netty3: Implementations for 'status', 'onClose', and 'close' methods have
been moved fromc.t.f.n.t.ChannelTransportContext
toc.t.f.n.t.ChannelTransport
.
9ae6d978
Finagle 18.9.1
Breaking API Changes
- finagle-base-http:
DefaultHeaderMap
now validates HTTP Header names and
values inadd
andset
.addUnsafe
andsetUnsafe
have been created to
allow adding and setting headers without validation. 3454f95d - finagle-core: Remove slow host detection from
ThresholdFailureDetector
.
c05f5832
Runtime Behavior Changes
- finagle-core: When Finagle would exhaust a retry budget with an exception that was
not aFailureFlags
, previously it would wrap that exception with a non-retryable
failure. This lead to surprising behavior for users. Those exceptions will no longer
be wrapped. 4ece3d2a - finagle-http: The finagle HTTP clients and servers now consider a
Retry-After: 0
header to be a retryable nack. Servers will set this header when the response is
a retryable failure, and clients will interpret responses with this header as a
Failure.RetryableNackFailure. 3c3fedc6
Finagle 18.9.0
18.9.0
New Features
- finagle-core: c.t.f.FailureFlags is now a public API. This is
Finagle's API for attaching metadata to an exception. As an example
this is used to check if an exception is known to be safe to retry.
Java compatibility has also been added.
e6389831 - finagle-core: Introducing StackTransformer, a consistent mechanism
for accessing and transforming the default ServerStack.
0b6844cd - finagle-netty4: Allow sockets to be configured with the
[SO_REUSEPORT](http://lwn.net/Articles/542629/) option when
using native epoll, which allows multiple processes to bind and
accept connections from the same port.
Breaking API Changes
- finagle: c.t.io.Reader and c.t.io.Writer are now abstracted over the
type they produce/consume (Reader[A] and Writer[A]) and are no
longer fixed to Buf.
5242d49d - finagle-core: Address.hashOrdering now takes a seed parameter and
PeerCoordinate.setCoordinate does not take a peerOffset any longer.
9e6734b2 - finagle-core: Removed deprecated members
c.t.f.Failure.{Interrupted, Ignorable, DeadlineExceeded,
Rejected, NonRetryable, flagsOf}.
54435221 - finagle-core: SingletonPool now takes an additional parameter which
indicates if interrupts should propagate to the underlying resource.
c83ad5d1 - finagle-core: Remove TimeoutFactory.Role in favor of passing a role
to the module function. Since this module is a re-used within the
client stack, it needs unique identifiers for each distinct module.
4c46b80d - finagle-core: the valid range for the argument to
WindowedPercentileHistogram.percentile is now [0.0..1.0], e.g.,
0.95 means 95th percentile.
8ad96f96 - finagle-mux: The old pull-based mux implementations have been
removed.
d1baeff9 - finagle-netty3: The type of context of a ChannelTransport has been
changed from a LegacyContext to a ChannelTransportContext.
4cdd15d9 - finagle-netty4: The type of context of a ChannelTransport has been
changed from a Netty4Context to a ChannelTransportContext.
edce8093 - finagle-netty4: c.t.f.netty4.param.useUnpoolledByteBufAllocator flag
has been removed. There is no good reason to opt-out of a more
efficient, pooled allocator.
07495a14 - finagle-thrift: DeserializeCtx became ClientDeserializeCtx for
client side response classification, add ServerDeserializeCtx to
handle server side response classification.
a8be34bd - finagle-serversets: ZkMetadata.shardHashOrdering now takes a seed
parameter.
9e6734b2
Bug Fixes
- finagle-thrift: Thrift clients created via .servicePerEndpoint now
propagate exceptions appropriately when the method return type is
void.
bb2654e1 - finagle-thrift, finagle-thriftmux: Response classification is
enabled in server side.
a8be34bd
Runtime Behavior Changes
- finagle-memcached: A Memcached client (c.t.f.Memcached.Client) is
now backed by a more efficient, push-based implementation.
c0a1f295 - finagle-netty4: Finagle's Netty 4 implementation now defaults to use
Linux's native epoll transport, when available. Run with
-com.twitter.finagle.netty4.useNativeEpoll=false to opt out.
137f5672
Finagle 18.8.0
18.8.0
New Features
- finagle-core: Introducing the new c.t.f.tracing.Tracing API for more efficient tracing
(dramatically reduces the number of context lookups; see scaladoc for c.t.f.tracing.Trace).
547cd864 - finagle-core: c.t.f.tracing.Trace facade API now provides forwarding record methods for
all kinds of annotations and is a preffered way of recording traces. 50c00d88 - finagle-thriftmux: Promote the push-based ThriftMux implementation out of experimental
status.eedd1fd8
Breaking API Changes
- finagle-base-http: c.t.f.http.cookie.exp.supportSameSiteCodec has been moved out of the
exp package to c.t.f.http.cookie.supportSameSiteCodec. 5e5ea390 - finagle-core: Parameter-less annotation classes (c.t.f.tracing.Annotation) have been
promoted to objects for efficiency reasons. 50c00d88 - finagle-core: c.t.f.tracing.Trace.record(Record) now accepts the record argument by
value (previously by name). 33841d21 - finagle-core: c.t.f.Failure.{Restartable, Interrupted, Ignorable, DeadlineExceeded,
Wrapped, Rejected, NonRetryable} are deprecated in favor of the c.t.f.FailureFlags
analogs. 0e0c7b43 - finagle-core: c.t.f.Leaf and c.t.f.Node are now private; use Stack.leaf and
Stack.node instead. cc49ee83 - finagle-core: Marked transform in com.twitter.finagle.Stack as protected. It is too
powerful and unnecessary for users, and should be for implementor use only. 99479f32 - finagle-mysql: c.t.f.mysql.CanBeParameter's implicit conversions timestampCanBeParameter,
sqlDateCanBeParameter, and javaDateCanBeParameter have been consolidated into a single
implicit, dateCanBeParameter. b486772d
Bug Fixes
- finagle-http2: Fixed a race condition caused by c.t.f.http.transport.StreamTransports being
closed, but that status not being reflected right away, causing a second request to fail.
68f1035f
Runtime Behavior Changes
- finagle-core: c.t.f.tracing.Trace API is no longer guarding Trace.record calls behind
Trace.isActivelyTracing. Add Trace.isActivelyTracing guards on the call sites if
materializing tracing annotations is a performance concern. 33841d21 - finagle-mysql: Clients will now issue a ROLLBACK each time a service is checked back
into the connection pool. This can be disabled via Mysql.Client.withNoRollback.
e3221597 - finagle-thriftmux: The push-based server muxer is now the default. In both synthetic tests
and production it has shown signifcant performance benefits and is simpler to maintain.
735a6bae - finagle-mysql: Remove deprecated TimestampValue.apply(Timestamp) and
TimestampValue.unapply(value) methods. Use TimestampValue.apply(TimeZone, TimeZone)
instead. e01f02f5
Deprecations
- finagle-mux: The pull based mux implementation, c.t.f.Mux, has been deprecated in favor of
the push-based mux implementation, c.t.f.pushsession.MuxPush. 735a6bae