Changelog History
Page 7
-
v7.1.0 Changes
๐ New Features
* ๐ง finagle-core: If a `c.t.u.tunable.Tunable` request or total timeout has been configured on a client which uses a `c.t.f.client.DynamicTimeout` filter, the current value of tunable will be used in the case of no dynamic timeout set for a request. ``PHAB_ID=D81886`` * finagle-core: `FailFastException` now captures the throwable that caused it. ``PHAB_ID=D86396`` * finagle-redis: finagle interface for redis DBSIZE command. ``PHAB_ID=D85305`` ๐ Bug Fixes
finagle-core: Unregister
ServerRegistry
entry onStackServer#close
. A StackServer entry is registered in theServerRegistry
on serve of the server but never unregistered. It is now unregistered on close of the StackServer.PHAB_ID=D83200
finagle-mux: Fix two issues with mux leases. In one bug, a new lease wouldn't be sent to the client if it was issued within 1 second of when the existing lease was set to expire. In a second bug, the server would only nack if the issued lease was 0, but didn't consider whether the lease had expired.
PHAB_ID=D91645
finagle-netty4:
Netty4ClientEngineFactory
andNetty4ServerEngineFactory
now properly load all chain certificates when theSslClientConfiguration
orSslServerConfiguration
usesKeyCredentials.CertKeyAndChain
instead of just the first one in the file.PHAB_ID=D82414
๐ง finagle-thrift/thriftmux: Thrift/ThriftMux servers and clients now can be configured with
withMaxReusableBufferSize
to specify the max size of the reusable buffer for Thrift responses.PHAB_ID=D83190
โ Runtime Behavior Changes
* finagle-stats: Verbosity levels are now respected: debug-metrics aren't exported by default. ``PHAB_ID=D85278`` * finagle-netty4: `ChannelTransport` no longer considers the `Channel.isWritable` result when determining status. ``PHAB_ID=D82670`` ๐ Deprecations
finagle-base-http: Encoding/decoding methods on
c.t.f.http.Request
andc.t.f.http.Response
to/from Strings and arrays of bytes have been deprecated. Use the methods onc.t.f.http.codec.HttpCodec
instead:- For
c.t.f.http.Request.encodeString
, usec.t.f.Http.codec.HttpCodec.encodeRequestToString
- For
c.t.f.http.Request.encodeBytes
, usec.t.f.Http.codec.HttpCodec.encodeRequestToBytes
- For
c.t.f.http.Request.decodeString
, usec.t.f.Http.codec.HttpCodec.decodeStringToRequest
- For c.t.f.http.Request.decodeBytes
, use
c.t.f.Http.codec.HttpCodec.decodeBytesToRequest` - For
c.t.f.http.Response.encodeString
, usec.t.f.Http.codec.HttpCodec.encodeResponseToString
- For
c.t.f.http.Response.decodeString
, usec.t.f.Http.codec.HttpCodec.decodeStringToResponse
- For
c.t.f.http.Response.decodeBytes
, usec.t.f.Http.codec.HttpCodec.decodeBytesToResponse
- For
PHAB_ID=D81341
๐ฅ Breaking API Changes
* ๐ finagle-core: Remove deprecated method `httpProxyTo(String, Option[Transporter.Credentials])`. Use `httpProxyTo(String, Transporter.Credentials]` instead. ``PHAB_ID=D84077`` * ๐ finagle-\*-http: Netty 3 specific HTTP transport related code has been moved into its own project, finagle-netty3-http, in preparation for removing it from Finagle. ``PHAB_ID=D84101`` * ๐ finagle-memcached: Remove deprecated method `BaseClient.release()`. Use `BaseClient.close()` instead. ``PHAB_ID=D83168`` ๐ Deprecations
๐ finagle-memcached: Move
c.t.f.memcached.java.Client
toc.t.f.memcached.JavaClient
,c.t.f.memcached.java.ClientBase
toc.t.f.memcached.JavaClientBase
, andc.t.f.memcached.java.ResultWithCAS
toc.t.f.memcached.ResultWithCAS
.PHAB_ID=D83719
finagle-core: Added a new type member
Context
toTransport
, and a method that returns a context, which has most of the methods currently directly onTransport
. Also deprecates most of those methods--please start using the context instead of theTransport
directly. Also added type parameters toTransporter
,Listener
, and type members toStackClient
andStackServer
.PHAB_ID=D83972
finagle-core:
com.twitter.finagle.loadbalancer.DeterministicOrdering
was renamed tocom.twitter.finagle.loadbalancer.ProcessCoordinate
and the internalCoord
ADT was changed as well.PHAB_ID=D84452
๐ finagle-thrift: Move
Thrift.Server.param.MaxReusableBufferSize
toThrift.param.MaxReusableBufferSize
for both server and client use.PHAB_ID=D83190
-
v7.0.0 Changes
๐ New Features
* ๐ง finagle-core: A `StackClient` can be configured with a `c.t.u.tunable.Tunable` request timeout using `.withRequestTimeout(tunable)`; this facilitates changing the timeout at runtime, without server restart. See https://twitter.github.io/finagle/guide/Configuration.html#tunables for details. ``PHAB_ID=D80751``. * finagle-core: `SslClientSessionVerifier` and `SslServerSessionVerifier` have been added as `Stack` params for executing custom SSL/TLS `Session` verification logic on the establishment of an SSL/TLS `Session`. ``PHAB_ID=D63256`` * finagle-core: `tls` methods which take an `SslClientSessionVerifier` have been added to `ClientBuilder` and `ClientTransportParams` (withTransport.tls). `tls` methods which take an `SslServerSessionVerifier` have been added to `ServerBuilder` and `ServerTransportParams` (withTransport.tls). ``PHAB_ID=D68645`` * 0๏ธโฃ finagle-core: Timer tasks submitted to the `c.t.f.util.DefaultTimer` can have their execution time monitored. Slow executing tasks may result in a log message at level WARN and a counter of slow tasks is kept under `finagle/timer/slow`. This can be enabled using the global flag `c.t.f.util.defaultTimerProbeSlowTasks` and the maximum allowed runtime and minimum duration between log messages can be tuned using the global flags `c.t.f.util.defaultTimerSlowTaskMaxRuntime`, and `c.t.f.util.defaultTimerSlowTaskLogMinInterval`, respectively. ``PHAB_ID=D70279`` * ๐ finagle-core: The JVM metrics for GC, allocations, memory, and more have moved here from TwitterServer. See the new JVM section in the user guide for details: https://twitter.github.io/finagle/guide/Metrics.html ``PHAB_ID=D80883`` * finagle-http, finagle-thriftmux: `MethodBuilder` has been promoted out of experimental. `MethodBuilder` is a collection of APIs for client configuration at a higher level than the Finagle 6 APIs while improving upon the deprecated `ClientBuilder`. See the user guide for details: https://twitter.github.io/finagle/guide/MethodBuilder.html ``PHAB_ID=D60032`` * finagle-http: add `withNoAutomaticContinue` api to disable automatically sending 100 CONTINUE responses. ``PHAB_ID=D80017`` * finagle-http: The nack related logic in the `c.t.f.h.c.HttpClientDispatcher` has been moved into a filter, `c.t.f.h.f.ClientNackFilter` which has been added to the client stack and can now be removed based on its `Stack.Role`. ``PHAB_ID=D78902`` * ๐ finagle-init: Introduce a module to support service-loading initialization code. ``PHAB_ID=D75950`` * ๐ finagle-memcached: Added support for partitioned backends in finagle client. Introducing the new PartitioningService (``PHAB_ID=D75143``), KetamaPartitioningService (``PHAB_ID=D77499``) and MemcachedPartitioningService (``PHAB_ID=D78927``), which provide this support at different levels of abstraction. The c.t.f.Memcached util, that is used for creating new memcached clients, now creates a new partitioning client that utilizes these new services for the Memcached protocol. The new memcached client can be enabled by setting the toggle "com.twitter.finagle.memcached.UsePartitioningMemcachedClient" to 1.0. ``PHAB_ID=D80352`` * 0๏ธโฃ finagle-mux: Default to new more efficient decoder. ``PHAB_ID=D80225`` * ๐ finagle-mysql: `IsolationLevel` support was added with `Transactions.transactionWithIsolation` method, so the default level can be overridden at the transaction level. ``PHAB_ID=D68944`` * ๐ finagle-mysql: Add support for unsigned integers. When enabled, unsigned integers that do not fit into the existing signed representation are widened. For example an unsigned Int32 is represented as a Java Long, etc. Because this changes the `c.t.f.mysql.Value` variant returned by the row, it is disabled by default and must be enabled with the param `c.t.f.Mysql.param.UnsignedColumns`. ``PHAB_ID=D78721`` * 0๏ธโฃ finagle-netty4: Adds support for passing a chain file to the default TLS implementation. ``PHAB_ID=D59531`` * 0๏ธโฃ finagle-netty4: Netty 4 transports now use pooled allocators by default. ``PHAB_ID=D75014`` * finagle-netty4: `KeyCredentials.CertKeyAndChain` is now available to use with `Netty4ServerEngineFactory`. ``PHAB_ID=D80494`` * 0๏ธโฃ finagle-netty4: `c.t.f.netty4.trackReferenceLeaks` is now a CLI flag (default: disabled) rather than a toggle. ``PHAB_ID=D80654`` * finagle-stats: Metrics now report verbosity levels via `MetricsView.verbosity`. ``PHAB_ID=D78150`` * 0๏ธโฃ finagle-stats: `JsonExporter` now respects verbosity levels (current default behavior is to keep exporting "debug" metrics). Adjust `com.twitter.finagle.stats.verbose` tunable whitelist to change it. ``PHAB_ID=D79571`` * finagle-tunable: `StandardTunableMap` is now public. Users can access file-based, in-memory, and service-loaded tunable values using the map. See https://twitter.github.io/finagle/guide/Configuration.html#tunables for details. ``PHAB_ID=D80751``. * finagle: Changed dependencies of Netty from 4.1.10 to 4.1.12. ``PHAB_ID=D60438`` ๐ Bug Fixes
- finagle-mysql: Fix decoding error for medium length integers.
PHAB_ID=D78505
๐ฅ Breaking API Changes
* finagle: Finagle is now decoupled from Netty 3. Depend on `finagle-netty3` explicitly if needed. ``PHAB_ID=D65268`` * ๐จ finagle-base-http: The HTTP message model has been refactored to remove backing Netty 3 types. Additionally, the `Request` and `Response` classes now have private constructors to enforce a more appropriate inheritance model: `Request.Proxy` and `Response.Proxy` are now the point of entry for extending the HTTP model types. Along with the model changes the InputStream generated `.getInputStream()` method of HTTP messages no longer consumes the messages body. ``PHAB_ID=D74519`` * finagle-core: The Framer type has been transformed into a specialized version of a more generic abstraction, Decoder[T]. ``PHAB_ID=D59495`` * finagle-core: Replace the `c.t.f.context.RemoteInfo.Available` constructor which takes `ClientId` in favor of a version taking `String`. `ClientId` is Twitter's Thrift specific concept and this should be more generic. ``PHAB_ID=D60136`` * ๐ finagle-core: Remove the ability to set a global address sort. This is no longer necessary as setting this per client is sufficient. ``PHAB_ID=D60698`` * ๐ finagle-core: Remove global flag `com.twitter.finagle.tracing.debugTrace`. This functionality is better suited as a concrete `Tracer` implementation instead of mixed into the generic code. ``PHAB_ID=D63252`` * finagle-core: ``PHAB_ID=D63526`` - `ClientBuilder.codec` and `ServerBuilder.codec` have been removed. Use `.stack` instead. - `ClientBuilder.channelFactory` and `ServerBuilder.channelFactory` have been removed. Use `.stack` instead. * finagle-core: LoadBalancerFactory now takes `Stack.Params` which allows a client to more easily pass in the stack context. ``PHAB_ID=D73129`` * finagle-memcached: Add `c.t.util.Closable` trait to `c.t.f.memcached.BaseClient`. ``PHAB_ID=D63970`` * finagle-mysql: A number of implementation details were made private such as specific `Row` implementations and `ResultSet` builder functions that consume raw packets. ``PHAB_ID=D78721`` * finagle-netty4-http: HTTP/1.1 implementation based on Netty 4 is no longer experimental and is moved out of the `exp` package. ``PHAB_ID=D80181`` * ๐ finagle-serversets: Remove `ZkMetaData.AddressOrdering``, it is no longer used. ``PHAB_ID=D60698`` * finagle-stats: `c.t.f.stats.MetricsStatsReceiver` no longer has constructor variants which take a `c.t.u.events.Sink` as util-events is now deprecated. ``PHAB_ID=D64437`` * ๐ finagle-thrift: The Netty3 thrift implementation has been removed. ``PHAB_ID=D63670`` * finagle-zipkin-core: `c.t.f.zipkin.core.SamplingTracer` no longer has constructor which takes a `c.t.u.events.Sink` as util-events is now deprecated. ``PHAB_ID=D64437`` * finagle-zipkin: Zipkin Tracer now exports only three counters: `requests`, `failures`, `success`. ``PHAB_ID=D71965`` โ Runtime Behavior Changes
finagle-core: The
AsyncSemaphore
which sequences dispatches inGenSerialClientDispatcher
is now failed with a retryableFailure
so that the retry logic knows that requests that which failed to acquire the semaphore are safe to retry.PHAB_ID=D78904
finagle-http:
serverErrorsAsFailuresV2
toggle is turned into a flagserverErrorsAsFailures
.PHAB_ID=D73265
finagle-http: Dispatcher stats are now exported under the client scope like all other client stats.
PHAB_ID=D72265
finagle-http: It's now possible to send a response from the HTTP server that has a Content-Length header so long as the 'Transfer-Encoding: chunked' isn't set on the response.
PHAB_ID=D80087
finagle-http: Non-streaming servers strip 'expect' headers when a 100 CONTINUE response is sent.
PHAB_ID=D80017
finagle-serversets:
Stabilizer
is no longer exportingpending_tasks
anddeviation_ms
stats. Seenotify_ms
instead.PHAB_ID=D65571
finagle-stats, finagle-zipkin-core: No longer publishing
c.t.u.events
as util-events is now deprecated.PHAB_ID=D64437
finagle-stats: No longer backed by commons metrics, now its own thing.
PHAB_ID=D73497
0๏ธโฃ finagle-netty4: Unset Netty's default timeout (10 seconds) for SSL handshake on clients. Use
.withSession.acquisitionTimeout
instead.PHAB_ID=D78500
- finagle-mysql: Fix decoding error for medium length integers.
-
v6.45.0 Changes
๐ New Features
* finagle: Changed dependencies of Netty from 4.1.9 to 4.1.10 and tcnative from 2.0.0 to 2.0.1. ``RB_ID=916056`` * finagle-core: `c.t.f.n.ssl.SslConnectHandler` is no longer exported publicly. It has also been renamed to `c.t.f.n.ssl.client.SslClientConnectHandler`. ``RB_ID=916932`` * finagle-core: c.t.f.factory.ServiceFactoryCache is now exported publicly. ``RB_ID=915064`` * finagle-core: Allow customization of load balancer behavior when no nodes are `Status.Open`. See the user guide for details: https://twitter.github.io/finagle/guide/Clients.html#behavior-when-no-nodes-are-available ``RB_ID=916145`` * finagle-core: The global `c.t.f.naming.NameInterpreter` can be optionally set using service loader. ``RB_ID=917082`` * ๐ finagle-redis: Support scanning over sets and sorted sets with SSCAN and ZSCAN. ``RB_ID=916484`` ๐ Bug Fixes
finagle-mux: Disable Netty4RefCountingControl decoder when message fragmentation is enabled.
PHAB_ID=D58153
๐ finagle: Fixed Java API for
withStack
for Client and Server implementations. Java users now get the correct types for calls such asc.t.f.Http.client().withStack
andc.t.f.Http.server().withStack
.RB_ID=915440
finagle-thrift, finagle-thriftmux: Clients created using
newServiceIface
now use the configuredc.t.f.service.ResponseClassifier
(orc.t.f.service.ResponseClassifier.Default
if not configured) for per-method stats and usage inc.t.f.liveness.FailureAccrualFactory
andc.t.f.stats.StatsFilter
.RB_ID=917010
โ Runtime Behavior Changes
* 0๏ธโฃ finagle: Add a floor of 8 to the default values of the flags `c.t.f.netty3.numWorkers` and `c.t.f.netty4.numWorkers`. ``RB_ID=916465`` * 0๏ธโฃ finagle-core: `c.t.f.util.DefaultTimer` is decoupled from Netty 3 and is loaded via the `LoadService` machinery. If no timers are available on the class path, the `JavaTimer` instead is used instead. This ony affects direct usages of `DefaultTimer` as all Finagle protocols are using Netty 4 `HashedWheelTimer` at this point. ``RB_ID=915924`` * finagle-core: The load balancer implementations no longer close the endpoint resources when they are closed. Instead, they treat them as externally managed resources and expect the layers above to manage them. No change is required if using the Balancers in the context of a Finagle client. If that's not the case, however, managing the life cycle of the passed in endpoints is necessary. ``RB_ID=916415`` * finagle-core: Aperture load balancers now expire idle sessions which fall out of the aperture window. ``RB_ID=916508`` * 0๏ธโฃ finagle-http: Uses Netty 4 as the default transport implementation. Use `.configured(Http.Netty3Impl)` to switch implementation over to Netty 3. ``PHAB_ID=D58698`` ``RB_ID=917936`` * finagle-memcached: If the client decoder detects a protocol failure, the ClientTransport will close the connection. ``RB_ID=917685`` * ๐ finagle-netty4: `poolReceiveBuffers` toggle is removed (suppressed by `UsePooling`). ``RB_ID=917912`` * finagle-http: To conform to RFC 2616, a message body is NO LONGER sent when 1xx, 204 and 304 responses are returned. To conform with RFC 7230, a Content-Length header field is NOT sent for 1xx and 204 responses. Both rules are enforced even if users intentionally add body data or the header field for these responses. If violation of these rules is detected then an error message is logged. ``RB_ID=917827`` ๐ฅ Breaking API Changes
๐ finagle:
$protocol.Client.params/stack
and$protocol.Server.params/stack
are removed, use similar methods on instances instead:$protocol.client.params/stack
and$protocol.server.params/stack
instead.RB_ID=915703
๐ finagle-core: Remove deprecated
c.t.f.builder.ClientBuilder.tracerFactory
. Usec.t.f.builder.ClientBuilder.tracer
instead. Remove deprecatedc.t.f.tracing.Tracer.Factory
. Usec.t.f.tracing.Tracer
instead.RB_ID=915481
๐ finagle-core: Remove deprecated
c.t.f.Deadline
. Usec.t.f.context.Deadline
instead.RB_ID=915550
๐ finagle-core: Remove deprecated
c.t.f.builder.ClientBuilder.cluster
andc.t.f.builder.ClientBuilder.group
. Usec.t.f.builder.ClientBuilder.dest
instead.RB_ID=915098
๐ finagle-core: Remove deprecated
c.t.f.tracing.Trace.recordRpcName
. Usec.t.f.tracing.Trace.recordRpc
andc.t.f.tracing.Trace.recordServiceName
instead.RB_ID=916426
๐ finagle-core: Remove deprecated
c.t.f.builder.Cluster
. Usecom.twitter.finagle.Name
to represent clusters instead.RB_ID=916162
finagle-core: LoadBalancerFactory now takes an EndpointFactory which is an extension of ServiceFactory that carries an address and has the ability to be rebuilt.
RB_ID=916956
๐ finagle-base-http: Remove deprecated
c.t.f.http.Message.ContentTypeWwwFrom
. Usec.t.f.http.Message.ContentTypeWwwForm
instead.RB_ID=915543
๐ finagle-exception: Remove deprecated
c.t.f.exception.Reporter.clientReporter
andc.t.f.exception.Reporter.sourceReporter
. Usec.t.f.exception.Reporter.monitorFactory
instead.RB_ID=916403
๐ finagle-http: Remove deprecated
c.t.f.http.HttpMuxer.pattern
. Specify a route usingc.t.f.http.HttpMuxer.route(pattern, this)
instead.RB_ID=915551
๐ finagle-http: Remove deprecated
c.t.f.http.filter.ValidateRequestFilter
. Create a custom filter if this behavior is needed.RB_ID=915548
๐ finagle-kestrel: Remove deprecated methods on
c.t.f.kestrel.MultiReader
:apply(cluster: Cluster[SocketAddress], queueName: String)
apply(clients: Seq[Client], queueName: String)
apply(handles: ju.Iterator[ReadHandle])
newBuilder(cluster: Cluster[SocketAddress], queueName: String)
merge(readHandleCluster: Cluster[ReadHandle])
Use thec.t.f.Var[Addr]
-basedapply
methods onc.t.f.kestrel.MultiReaderMemcache
orc.t.f.kestrel.MultiReaderThriftMux
instead.RB_ID=914910
๐ finagle-kestrel: Removed from the project.
RB_ID=915221
https://finagle.github.io/blog/2017/04/06/announce-removals/๐ finagle-mdns: Removed from the project.
RB_ID=915216
https://finagle.github.io/blog/2017/04/06/announce-removals/๐ finagle-memcached: Remove deprecated
c.t.f.memcached.BaseClient.cas
methods. Usec.t.f.memcached.BaseClient.checkAndSet
instead.RB_ID=914678
finagle-memcached:
c.t.f.memcached.protocol.text.Encoder
object is now private.RB_ID=917214
finagle-memcached: Make memcached Response subtypes with no fields case objects.
RB_ID=917137
๐ finagle-mysql: Remove deprecated methods on
c.t.f.Mysql
:withCredentials
; usec.t.f.Mysql.client.withCredentials
insteadwithDatabase
; usec.t.f.Mysql.client.withDatabase
insteadwithCharset
; usec.t.f.Mysql.client.withCharset
insteadconfigured
; usec.t.f.Mysql.client.configured
instead
RB_ID=916418
๐ finagle-native: Removed from the project.
RB_ID=915204
https://finagle.github.io/blog/2017/04/06/announce-removals/finagle-netty4:
AnyToHeapInboundHandler
is gone. UseBufCodec
while designing new Finagle protocols.RB_ID=915251
๐ finagle-ostrich4: Removed from the project.
RB_ID=915327
https://finagle.github.io/blog/2017/04/06/announce-removals/๐ finagle-redis:
ChannelBuffer
methods and converters are removed. UseBuf
-based API instead. Removed APIs:RB_ID=916015
c.t.f.redis.NettyConverters
c.t.f.redis.util.StringToChannelBuffer
c.t.f.redis.Client.watch(Seq[ChannelBuffer])
๐ finagle-stream: Removed from the project.
RB_ID=915200
https://finagle.github.io/blog/2017/04/06/announce-removals/๐ finagle-thrift: Remove deprecated
c.t.f.thrift.transport.netty3.ThriftServerBufferedCodec
andc.t.f.thrift.transport.netty3.ThriftServerBufferedCodecFactory
. Use thec.t.f.Thrift
object to build a server.RB_ID=915656
๐ finagle-thriftmux: Remove deprecated
c.t.f.ThrifMux.withClientId
. Usec.t.f.ThriftMux.client.withClientId
. Remove deprecatedc.t.f.ThrifMux.withProtocolFactory
. Usec.t.f.ThriftMux.client.withProtocolFactory
.RB_ID=915655
-
v6.44.0 Changes
๐ New Features
* finagle-thriftmux: Allow ThriftMux.Servers to be filtered, also add `withStack` method to server side as well. ``RB_ID=915095`` * finagle-core: FailureAccrual is now production ready. It has been promoted out of experimental and moved from com.twitter.finagle.service.exp to com.twitter.finagle.liveness. ``RB_ID=914662`` * finagle-core: SSL/TLS APIs have been changed to include methods which work based on an SSL configuration, and an SSL configuration and an SSL engine factory. ``RB_ID=911209`` * finagle-core: LoadBalancerFactory now exposes a mechanism to order the collection of endpoints passed to the balancer implementations. This allows a consistent ordering of endpoints across process boundaries. ``RB_ID=910372`` * finagle-core: Introduce `c.t.f.client.EndpointerStackClient`, a mechanism for making clients that don't need a transporter and dispatcher. This simplifies making non-netty clients. ``RB_ID=912889`` * ๐ง finagle-http2: Add support for liveness detection via pings. It can be configured the same way as it is in mux. ``RB_ID=913341`` * finagle-toggle: Standard toggles now track the last value produced from `apply`. These values are visible via TwitterServer's /admin/toggles endpoint. ``RB_ID=913925`` ๐ฅ Breaking API Changes
๐ finagle-mysql: Support for Netty 3 has been removed, making Netty 4 the only transport implementation.
RB_ID=914661
finagle-core: com.twitter.finagle.service.exp.FailureAccrualPolicy has been promoted to com.twitter.finagle.liveness.FailureAccrualPolicy
๐ finagle-commons-stats: Remove finagle-commons-stats, which was a compatibility layer for a deprecated stats library. Please move to finagle-stats instead.
RB_ID=910964
finagle-core: SSL/TLS stack params for Finagle running Netty 4 have changed.
- The
TlsConfig
param inTransport
has been removed. - For client engines, the same two parameters as Finagle running Netty 3 are now used:
ClientSsl
inTransport
, which is used for configuring a clientEngine
's hostname, key credentials, trust credentials, cipher suites, protocols, and application protocols.SslClientEngineFactory
inSslClientEngineFactory
, which determines how theEngine
is created based off of anAddress
and anSslClientConfiguration
.- For server engines, the same two parameters as Finagle running Netty 3 are now used:
ServerSsl
inTransport
, which is used for configuring a serverEngine
's key credentials, trust credentials, cipher suites, protocols, application protocols, and where the server supports or requires client authentication.SslServerEngineFactory
inSslServerEngineFactory
, which determines how theEngine
is created based off of anSslServerConfiguration
.- Note: Not all client and server configurations work with all engine factories. Each engine factory should document what is not supported by that specific engine factory.
- Note: By default, Finagle on Netty 4 will use the
Netty4ClientEngineFactory
andNetty4ServerEngineFactory
respectively.
- The
RB_ID=910500
finagle-core: Change the API to LoadBalancerFactory to a more concrete
Activity[IndexedSeq[ServiceFactory[Req, Rep]]]
since the majority of the load balancer implementations don't need the properties of a Set but instead need ordering guarantees and efficient random access.RB_ID=910372
finagle-core: Balancers.aperture now has a new parameter
useDeterministicOrdering
, which is set to false by default. This feature is still experimental and under construction. This will break the Java API and require the additional param to be passed in explicitly.RB_ID=911541
finagle-core: The logic for tracking sessions that was in StdStackServer has been lifted into a new template, ListeningStackServer where implementations define the creation of a ListeningServer from a ServiceFactory, SocketAddress, and a function that tracks accepted sessions.
RB_ID=914124
finagle-core: Change the AddressOrdering param to no longer take a StatsReceiver, since orderings were simplified and are no longer composite.
RB_ID=914113
๐ finagle-core: Remove deprecated methods on
c.t.f.Client
:- newClient(dest: Group[SocketAddress])
- newService(dest: Group[SocketAddress])
RB_ID=914787
finagle-core:
c.t.f.ListeningServer
no longer extendsc.t.f.Group
. Usec.t.f.ListeningServer.boundAddress
to extract the address from the server.RB_ID=914693
๐ finagle-core: Remove deprecated
c.t.f.group.StabilizingGroup
. Usec.t.f.addr.StabilizingAddr
instead.RB_ID=914823
finagle-core: Constructors for
c.t.f.ChannelException
and its subclasses now have overloads that takeOption
\s instead of allowingnull
. While the existing constructors remain, and forward to the new ones, this can still cause compilation failures when the arguments are ambiguous.RB_ID=914800
๐ finagle-core: Remove MimimumSetCluster since it has been deperecated for quite some time. Instead, use finagle logical destinations via
Name
s.RB_ID=914849
๐ finagle-core: Remove deprecated
c.t.f.Resolver.resolve
. Usec.t.f.Resolver.bind
instead. Remove deprecatedc.t.f.BaseResolver.resolve
. Usec.t.f.Resolver.eval
instead.RB_ID=914986
finagle-http:
c.t.f.http.Http
codec has disappeared as part of Netty 4 migration. Usec.t.f.Http.client
orc.t.f.Http.server
stacks instead.RB_ID=912427
๐ finagle-kestrel: Remove
c.t.f.kestrel.param.KestrelImpl.
Kestrel clients and servers now use Netty 4 and cannot be configured for Netty 3.RB_ID=911031
๐ finagle-memcached: Remove
c.t.f.memcached.param.MemcachedImpl.
Memcached clients and servers now use Netty 4 and cannot be configured for Netty 3.RB_ID=911031
๐ finagle-kestrel: Remove commands that are not supported by the client:
com.twitter.finagle.kestrel.protocol.DumpConfig
com.twitter.finagle.kestrel.protocol.DumpStats
com.twitter.finagle.kestrel.protocol.FlushAll
com.twitter.finagle.kestrel.protocol.Reload
com.twitter.finagle.kestrel.protocol.ShutDown
com.twitter.finagle.kestrel.protocol.Stats
com.twitter.finagle.kestrel.protocol.Version
RB_ID=911206
๐ finagle-memcached: Remove deprecated
c.t.f.memcached.KetamaClientBuilder
. Usec.t.f.Memcached.client
to create a Memcached client.RB_ID=907352
๐ finagle-memcached: Remove deprecated
c.t.f.memcached.replication.ReplicationClient
. Usec.t.f.memcached.replication.BaseReplicationClient
with clients created usingc.t.f.Memcached.client
.RB_ID=907352
๐ finagle-memcached: Remove deprecated methods on
c.t.f.memcached.Client
:apply(name: Name)
apply(host: String)
Use
c.t.f.Memcached.client
to create a Memcached client.RB_ID=908442
๐ finagle-memcached: Remove deprecated
c.t.f.memcached.protocol.text.Memcached
object. Usec.t.f.Memcached.client
to create Memcached clients.RB_ID=908442
๐ finagle-memcached: Remove deprecated
c.t.f.memcached.Server
class. Usec.t.f.memcached.integration.TestMemcachedServer
for a quick test server.RB_ID=914827
โ Remove deprecated
c.t.f.memcached.PartitionedClient
object. Usec.t.f.memcached.CacheNodeGroup.apply
instead ofc.t.f.memcached.PartitionedClient.parseHostWeights
.RB_ID=914827
โ Remove deprecated
c.t.f.memcached.util.ParserUtils.DIGITS
. Use "\d+$" instead. Remove deprecatedc.t.f.memcached.util.ParserUtils.DigitsPattern
. Use Pattern.compile(\d+$) instead.RB_ID=914827
๐ finagle-memcached: Remove old
c.t.f.memcached.replicated.BaseReplicationClient
andc.t.f.memcached.migration.MigrationClient
, and mostc.t.f.memcached.CachePoolCluster
methods.RB_ID=910986
๐ finagle-memcached: Remove old
c.t.f.memcached.migration.DarkRead
, andc.t.f.memcached.migration.DarkWrite
.RB_ID=911367
๐ finagle-memcached: Remove
c.t.f.memcached.CachePoolConfig
.RB_ID=914623
๐ finagle-mux: Netty 3 implementation of Mux is removed. Default is Netty 4.
RB_ID=914239
finagle-netty4:
DirectToHeapInboundHandler
was renamed toAnyToHeapInboundHandler
and now copies any inbound buffer (not just directs) on heap.RB_ID=913984
๐ finagle-thrift, finagle-thriftmux: Remove rich client/server support for prior versions of Scrooge generated code.
RB_ID=911515
finagle-core:
c.t.f.client.Transporter
no longer has a close method, which was introduced in 6.43.0. It was sort of a hack, and we saw the opportunity to do it properly.RB_ID=912889
๐ finagle-core, finagle-mux: Move FailureDetector from
c.t.f.mux
toc.t.f.liveness
. This also means that thesessionFailureDetector
flag is nowc.t.f.liveness.sessionFailureDetector
.RB_ID=912337
๐ Bug Fixes
* ๐ฒ finagle-exp: `DarkTrafficFilter` now respects the log level when `HasLogLevel`, and otherwise defaults the level to `warning` instead of `error`. ``RB_ID=914805`` * ๐ finagle-netty4: Fixed connection stall on unsuccessful proxy handshakes in Finagle clients configured with HTTP proxy (`Transporter.HttpProxyTo`). ``RB_ID=913358`` โ Runtime Behavior Changes
๐ฒ finagle-netty4: Finagle is no longer logging the failed proxy handshake response.
RB_ID=913358
finagle-netty4: SOCKS5 proxies are now bypassed if the connect destination is localhost. This matches Finagle's prior behavior from when Netty 3 was the default transport implementation.
RB_ID=914494
Dependencies
* ๐ finagle-memcached: Remove dependency on com.twitter.common:io-json. ``RB_ID=914623``
-
v6.43.0 Changes
๐ New Features
* finagle-base-http: `c.t.f.http.Message` now has a Java friendly method to set the HTTP version: `Message.version(Version)`. ``RB_ID=906946`` * finagle-base-http: Added Java friendly methods to the HTTP model including `c.t.f.http.Message.contentLength(Long)`, `c.t.f.http.Message.contentLengthOrElse(Long): Long`, and `c.t.f.http.Request.method(Method)`. ``RB_ID=907501`` * finagle-base-http: `c.t.f.http.HeaderMap` now has a method, `HeaderMap.newHeaderMap` for creating new empty `HeaderMap` instances. ``RB_ID=907397`` * ๐ง finagle-core: SSL/TLS client and server configurations and engine factories have been added for finer grained control when using TLS with Finagle. ``RB_ID=907191`` * finagle-netty4: Introducing a new toggle `com.twitter.finagle.netty4.UsePooling` that enables byte buffers pooling in Netty 4 pipelines. ``RB_ID=912789`` ๐ฅ Breaking API Changes
finagle-base-http:
c.t.f.http.MapHeaderMap
has been made private. Please useHeaderMap.apply
orHeaderMap.newHeaderMap
to construct a newHeaderMap
instance.RB_ID=907397
finagle-base-http:
c.t.f.http.Version
is no longer represented by case objects and has been replaced by val instances of a case class.RB_ID=906946
finagle-base-http: The common HTTP methods are no longer modeled by case objects but as instances of a single c.t.f.http.Method class. The string representation of the HTTP method is now available via the
Method.name
method.RB_ID=906697
๐ finagle-core: Move the
java.net.SocketAddress
argument from theapply
method oncom.twitter.finagle.client.Transporter
to thenewTransporter
method ofcom.twitter.finagle.client.StackClient
.RB_ID=907544
finagle-core: Load Balancer implementations no longer mix-in the OnReady trait and OnReady was removed.
RB_ID=908863
finagle-core: HeapBalancer, ApertureLoadBalancer, and RoundRobinBalancer classes were made package private. To construct load balancers for use within a Finagle client, use the
com.twitter.finagle.loadbalancer.Balancers
object.RB_ID=909245
finagle-core: The
aperture
constructor on theBalancers
object no longer takes a Timer since it was unused.RB_ID=909245
finagle-core: The load balancer algorithm is now further scoped under "algorithm".
RB_ID=909309
๐ finagle-core: Remove
Ring
from Finagle core's util since it is unused internally.RB_ID=909718
finagle-core: SSL/TLS stack params for Finagle running Netty 3 have changed.
- The
TLSClientEngine
param inTransport
has been replaced by two parameters:ClientSsl
inTransport
, which is used for configuring a clientEngine
's hostname, key credentials, trust credentials, cipher suites, protocols, and application protocols.SslClientEngineFactory
inSslClientEngineFactory
, which determines how theEngine
is created based off of anAddress
and anSslClientConfiguration
.
- The
TLSHostname
param inTransporter
has been removed. Hostnames should be set as part of theSslClientConfiguration
now. - The
TLSServerEngine
param inTransport
has been replaced by two parameters:ServerSsl
inTransport
, which is used for configuring a serverEngine
's key credentials, trust credentials, cipher suites, protocols, application protocols, and whether the server supports or requires client authentication.SslServerEngineFactory
inSslServerEngineFactory
, which determines how theEngine
is created based off of anSslServerConfiguration
.
- Note: Not all client and server configurations work with all engine factories. Each engine factory should document what is not supported by that specific engine factory.
- Note: Users using Finagle-Native should in the short term use
LegacyServerEngineFactory
and in the long term move to usingNetty4ServerEngineFactory
. - Note: With this change, private keys are expected to explicitly be PKCS#8 PEM-encoded keys.
Users using PKCS#1 keys should in the short term use
LegacyKeyServerEngineFactory
and in the longer term switch to using PKCS#8 keys, or use your ownSslServerEngineFactory
which can explicitly handle those type of keys. - Note: By default, Finagle on Netty 3 will use the
JdkClientEngineFactory
andJdkServerEngineFactory
respectively.
RB_ID=907923
- The
๐ finagle-core:
withLoadBalancer.connectionsPerEndpoint
was removed and moved into finagle-memcached, which was the only client that uses the feature.RB_ID=908354
๐ finagle-core:
ClientBuilder.expHttpProxy
andClientBuilder.expSocksProxy
are removed. Use$Protocol.withTransport.httpProxyTo
instead (requires Netty 4 transport).RB_ID=909739
๐ finagle-kestrel: Remove the deprecated
codec
method onc.t.f.kestrel.MultiReaderMemcache
. Use.stack(Kestrel.client)
on the configuredc.t.f.builder.ClientBuilder
instead.RB_ID=907184
๐ finagle-kestrel: Removed
c.t.f.kestrel.Server
. A local Kestrel server is preferred for testing.RB_ID=907334
๐ finagle-kestrel: Removed deprecated
c.t.f.kestrel.protocol.Kestrel
. To create a Finagle Kestrel client, usec.t.f.Kestrel.client
.RB_ID=907422
๐ finagle-serversets: Removed the unapply method and modified the signature of fromAddrMetadata method in
c.t.f.serverset2.addr.ZkMetadata
. Instead of pattern matching use the modified fromAddrMetadata method.RB_ID=908186
๐ finagle-stats: Remove the
com.twitter.finagle.stats.exportEmptyHistograms
toggle which has defaulted to 0.0 for quite some time. Change the default value of thecom.twitter.finagle.stats.includeEmptyHistograms
flag to false to retain the behavior.RB_ID=907186
๐จ finagle-thrift:
ThriftServiceIface
was refactored to be in terms ofThriftMethod.Args
toThriftMethod.SuccessType
instead ofThriftMethod.Args
toThriftMethod.Result
.RB_ID=908846
๐ finagle-redis: Remove pendingCommands from
c.t.f.finagle.redis.SentinelClient.Node
and add linkPendingCommands for compatibility with redis 3.2 and newer.RB_ID=913516
โ Runtime Behavior Changes
* finagle-http: Responses with a server error status code (500s) are now classified as a failure. This effects success rate metrics and failure accrual. See the `com.twitter.finagle.http.serverErrorsAsFailuresV2` toggle for opting out of this behavior. ``RB_ID=909315`` * finagle-netty4: Servers no longer set SO_LINGER=0 on sockets. ``RB_ID=907325`` ๐ Deprecations
finagle-base-http: The
c.t.f.http.Response
methodsgetStatusCode()
andsetStatusCode()
have been deprecated. Use the methodsstatusCode
andstatusCode(Int)
instead.RB_ID=908409
๐ finagle-core:
c.t.f.builder.ClientBuilder.group
andc.t.f.builder.ClientBuilder.cluster
have been deprecated. Usec.t.f.builder.ClientBuilder.dest
with ac.t.f.Name
instead.RB_ID=914879
finagle-http: Now that
c.t.f.http.Method
andc.t.f.http.Version
are represented by instances and thus easier to use from Java, the Java helpersc.t.f.http.Versions
,c.t.f.http.Statuses
, andc.t.f.http.Methods
have been deprecated.RB_ID=907680
๐ finagle-memcached:
c.t.f.memcached.replication.ReplicationClient
is now deprecated. Usec.t.f.memcached.replication.BaseReplicationClient
with clients created usingc.t.f.Memcached.client
.RB_ID=907384
finagle-thrift: As part of the Netty 4 migration, all
c.t.f.Codec
andc.t.f.CodecFactory
types in finagle-thrift are now deprecated. Use thec.t.f.Thrift
object to make clients and servers.RB_ID=907626
๐ Bug Fixes
* finagle-core: Fix `ConcurrentModificationException` thrown by calling `close()` on `c.t.f.factory.ServiceFactoryCache`. ``RB_ID=910407`` * finagle-http: The HTTP/1.x Client will no longer force-close the socket after receiving a response that lacks content-length and transfer-encoding headers but is required per RFC 7230 to not have a body. ``RB_ID=908593`` * finagle-redis: The HSCAN and SCAN commands take an optional argument for pattern matching. This argument has been fixed to use the correct name of 'MATCH' instead of the incorrect 'PATTERN'. ``RB_ID=908817`` * finagle-thrift: Properly locate sub-classed MethodIface services to instantiate for serving BaseServiceIface implemented thrift services. ``RB_ID=907608`` * finagle-redis: The SentinelClient will no longer throw an NoSuchElementException when initializing connections to a redis 3.2 or greater sentinel server. ``RB_ID=913516`` Dependencies
- finagle: Bump guava to 19.0.
RB_ID=907807
-
v6.42.0 Changes
๐ New Features
* finagle-commons-stats: Provide a TwitterServer exporter for commons stats. This simplifies migration for folks who don't want to switch to commons metrics and TwitterServer in one go. It will export stats on the /vars.json endpoint. ``RB_ID=902921`` * finagle-http: Introduce `HeaderMap.getOrNull(header)`, a Java-friendly variant of `HeaderMap.get(header).orNull`. ``RB_ID=904093`` ๐ฅ Breaking API Changes
๐ finagle: finagle-http-compat has been removed as part of migration off Netty 3. Use finagle-http types/APIs directly.
RB_ID=903647
๐ finagle: finagle-spdy has been removed as part of the migration off Netty 3. Please use finagle-http2 as a replacement.
RB_ID=906033
finagle-base-http:
Message.write(ChannelBuffer)
has been replaced with a method that receives aBuf
. The semantics of calling thewrite
method on chunked messages has changed from potentially throwing an exception based on the state of theWriter
to always throwing anIllegalStateException
. Existing users of thewrite(..)
methods on chunked messages should use theWriter
directly.RB_ID=900091
fingle-base-http:
HeaderMap.getAll(key)
now returns aSeq[String]
as opposed to aIterable[String]
.RB_ID=905019
finagle-core: The ChannelTransport implementations which transforms a Netty pipeline into a finagle Transport[Req, Rep] have been specialized to Transport[Any, Any] to avoid the illusion of a runtime checked cast. Transport.cast has been changed to receive either a Class[T] or an implicit Manifest[T] in order to check the inbound cast at runtime. For users of the ChannelTransport types, use the Transport.cast method to get a Transport of the right type.
RB_ID=902053
๐ finagle-memcached: Remove deprecated methods on
c.t.f.memcached.Client
:apply(group: Group[SocketAddress])
apply(cluster: Cluster[SocketAddress])
Use
c.t.f.Memcached.client
to create a Memcached client.RB_ID=899331
- finagle-toggle:
ToggleMap
Toggles
now rehash the inputs toapply
andisDefinedAt
in order to promote a relatively even distribution even when the inputs do not have a good distribution. This allows users to get away with using a poor hashing function such asString.hashCode
.RB_ID=899195
๐ Deprecations
* ๐ finagle-base-http: Deprecate `c.t.f.http.MapHeaderMap` as it will soon be private. Use `c.t.f.http.HeaderMap.apply(..)` to get a HeaderMap instance. ``RB_ID=906497`` * ๐ finagle-base-http: Deprecate `c.t.f.http.HeaderMap += (String, Date)`. Use `c.t.f.http.HeaderMap.set(String, Date)` instead. ``RB_ID=906497`` * ๐ finagle-base-http: Deprecate `c.t.f.http.Message.ContentTypeWwwFrom`. Use `c.t.f.http.Message.ContentTypeWwwForm` instead. ``RB_ID=901041`` * ๐ finagle-base-http: Deprecate `c.t.f.http.Message.headers()`. Use `c.t.f.http.Message.headerMap` instead. ``RB_ID=905019`` * ๐ finagle-base-http: Deprecate the lazy `response: Response` field on the Request type. This field is potentially hazardous as it's not necessarily the Response that will be returned by a Service but it is often used as such. Construct a Response using the static constructor methods. ``RB_ID=899983`` * finagle-base-http: Numerous protected[finagle] methods on `http.Request` and `http.Response` that deal in Netty 3 types have been deprecated as part of the migration to Netty 4. ``RB_ID=905761`` * ๐ finagle-http: Deprecate ValidateRequestFilter which now has limited utility. See entry in Runtime Behavior Changes. If this is still needed, copy the remaining behavior into a new filter. ``RB_ID=899895`` * ๐ finagle-memcached: Deprecate methods on `c.t.f.memcached.Client`: - `apply(name: Name)` - `apply(host: String)` Use `c.t.f.Memcached.client` to create a Memcached client. `RB_ID=899331`` * ๐ finagle-memcached: Deprecate `c.t.f.memcached.protocol.text.Memcached` object. Use `c.t.f.Memcached.client` to create Memcached clients. ``RB_ID=899009`` * ๐ finagle-memcached: Deprecations on `c.t.f.memcached.util.ParserUtils`: - For `isDigits(ChannelBuffer)` use `ParserUtils.isDigits(Buf)` instead. - `DIGITS` - `DigitsPattern` ``RB_ID=905253`` โ Runtime Behavior Changes
finagle-http: The HTTP client will no longer emit a Netty 3/4
TooLongFrameException
when a response exceeds the specified MaxResponseSize parameter, and instead emits a Finagle specificTooLongMessageException
which wraps the Netty exception.RB_ID=905567
finagle-http: ValidateRequestFilter doesn't look for the uri "/bad-http-request" which had been indicative of the netty3 http codec giving up on decoding a http request. These events are caught lower in the pipeline and should not bubble up to the level of this filter.
RB_ID=899895
finagle-netty4: DirectToHeapHandler is now aware of
ByteBufHolder
types hence can copy them on to heap.RB_ID=906602
finagle-redis: Transport implementation is now based on Netty 4 (instead of Netty 3).
RB_ID=895728
๐ Bug Fixes
* finagle-core: Properly compute length when converting a `Buf.ByteArray` to a Netty 4 `ByteBuf`. ``RB_ID=901605`` * ๐ finagle-memcached: AtomicMap change lock function to synchronize on map object. ``DIFF_ID=D18735`` * ๐ง finagle-netty4: Fixed connection stall in Finagle clients configured with both HTTP proxy (`Transporter.HttpProxyTo`) and TLS/SSL enabled. ``RB_ID=904831`` * ๐ง finagle-netty4: Fixed connection stall in Finagle clients configured with both HTTP proxy (`Transporter.HttpProxy`) and TLS/SSL enabled. ``RB_ID=904803``
-
v6.41.0 Changes
๐ New Features
* finagle-core: Added stat "pending_requests/rejected" for the number of requests rejected by `c.t.f.PendingRequestFilter`. ``RB_ID=898184`` ๐ฅ Breaking API Changes
๐ finagle-core: Remove the
Filter#andThen(Req1 => Future[Rep1]): Req2 => Future[Rep2]
method. This overload is no longer usable in scala 2.12, becauseService
is a SAM. Because of the order in which SAMs get resolved, literal functions in scala will get confused about which method they should use. Instead of passing a Function directly, wrap the Function with a Service.mk.RB_ID=896524
๐ finagle-core:
CancelledWriteException
was removed as it is no longer used.RB_ID=896757
finagle-core: The structure of Context and its subtypes, LocalContext and MarshalledContext, have been significantly refined, eliminating StackOverflowErrors and memory leaks while also refining the API. The
letClear()
method, which cleared all items from the context, has been renamed toletClearAll
to avoid confusion with otherletClear
methods which clear individual keys. The bulkletClear
method now takes a collection ofKey[_]
s, making it usable from Java. Bulklet
operations can now be done using a collection ofKeyValuePair
s.RB_ID=896663
๐ finagle-kestrel: The
codec
method has been removed from the kestrel MultiReader object. Configure a ClientBuilder protocol using the default thrift StackClient, Thrift.client, via thestack
method of ClientBuilder.RB_ID=894297
๐ finagle-memcached: Remove deprecated
cluster
method onc.t.f.memcached.KetamaClientBuilder
.RB_ID=898365
โ Runtime Behavior Changes
* ๐ finagle-core: `c.t.f.builder.ClientBuilder` remove deprecated methods. The same functionality is available through the Stack-based APIs or `ClientBuilder.configured`, with the exception of `channelFactory`, which has no analog because it exposes a Netty 3 API. ``RB_ID=893147`` - `channelFactory` - `expHostConnectionBufferSize` - `hostConnectionIdleTime` - `hostConnectionMaxIdleTime` - `hostConnectionMaxLifeTime` - `hostConnectionMaxWaiters` - `readerIdleTimeout` - `recvBufferSize` - `sendBufferSize` - `writerIdleTimeout` * 0๏ธโฃ finagle-core: Lower logging level used in `c.t.f.util.DefaultMonitor` for expected exceptions: `CancelledRequestException`, `TooManyWaitersException`, `CancelledConnectionException`, `FailedFastException`. ``RB_ID=895702`` * ๐ finagle-core: `c.t.f.util.DefaultMonitor` now logs most exceptions at `WARNING` level instead of `FATAL`. ``RB_ID=895983`` * 0๏ธโฃ finagle-core: `c.t.f.util.DefaultMonitor` works harder to find the appropriate log level by walking the exception's causes to find `c.t.util.TimeoutExceptions` and `c.t.logging.HasLogLevel`. ``RB_ID=896695`` * finagle-core: The `c.t.f.service.Retries` module will now flag a response as `NonRetryable` if either the retry limit is reached or the retry budget is exhausted. ``RB_ID=897800`` * finagle-mdns: Uses only one implementation backed by jmdns instead of trying to use a platform specific implementation of DDNS if present. ``RB_ID=897917`` * finagle-netty4: Client initiated TLS/SSL session renegotiations are now rejected by default. ``RB_ID=895871`` * finagle-netty4: `ChannelTransport` no longer interrupts netty write operations in order to temporarily unblock rollout of netty4. This reverts netty4 back to netty3 semantics for writes. ``RB_ID=896757`` ๐ Deprecations
- ๐ finagle-kestrel: Deprecate the
codec
method onc.t.f.kestrel.MultiReaderMemcache
. Use.stack(Kestrel.client)
on the configuredc.t.f.builder.ClientBuilder
instead.RB_ID=895989
-
v6.40.0 Changes
๐ New Features
* finagle: Most libraries (excluding finagle-thrift{,mux}) no longer need to add an additional resolver that points to maven.twttr.com. ``RB_ID=878967`` * finagle: Introducing a new Finagle module `finagle-base-http` that provides a common ground for both Netty 3 (`finagle-http`) and Netty 4 (`finagle-netty4-http`) HTTP implementations. Netty 3 is still a default transport used in Finagle's `Http.client` and `Http.server`. ```RB_ID=884614`` * finagle-core: Introduce the `c.t.f.client.DynamicTimeout` module allowing clients to specify call-site specific timeouts. ``RB_ID=885005`` * finagle-core: A new module, `c.t.f.service.DeadlineFilter`, can be added to stack-based servers and clients, which rejects requests with expired deadlines ``RB_ID=895820`` * finagle-memcached: Introduce `c.t.f.memcached.CasResult.replaced: Boolean` to help transition usage off of the deprecated `cas` client method to `checkAndSet`. ``RB_ID=891628`` * finagle-thrift: We now depend on a fork of libthrift hosted in the Central Repository. The new package lives in the 'com.twitter' organization. This removes the necessity of depending on maven.twttr.com. This also means that eviction will not be automatic and using a newer libthrift library requires manual eviction if artifacts are being pulled in transitively. ``RB_ID=885879`` โ Runtime Behavior Changes
๐ฒ finagle-core:
Monitor
logging is improved in Finagle.RB_ID=878890
- All exceptions caught in the stack are now logged by Finagle's
DefaultMonitor
(previously Util'sRootMonitor
) such that Twitter's logging framework is used instead of JDK logging. DefaultMonitor
is now installed implicitly such that it will be composed (viaorElse
) with the monitor passed by a user through the stack param. The logic behind this compostion is quite straightforward: exceptions that are't handled by a user-defined monitor propagated to the default monitor.DefaultMonitor
now logs upstream socket address, downstream socket address, and a client/server label if those are available.RootMonitor
is still used to handle fatal exceptions from pending side-effect-only closures (i.e.,onFailure
,onSuccess
) on a service future/promise.
- All exceptions caught in the stack are now logged by Finagle's
๐ finagle-core:
c.t.f.service.DeadlineStatsFilter
has been removed from the server stack, along with all related stats. The "admission_control/deadline/transit_latency_ms" stat has been moved toc.t.f.filter.ServerStatsFilter
and re-scoped as "transit_latency_ms"RB_ID=895820
finagle-mux:
com.twitter.finagle.Failures
are now sent over the wire with their flags intact viacom.twitter.finagle.mux.transport.MuxFailure
in the previously unused Rdispatch context. This allows for greater signaling along a chain of services. See the "MuxFailure Flags" section of the mux protocol spec in finagle-mux/src/main/scala/c/t/f/mux/package.scalaRB_ID=882431
finagle-netty4: The netty4 listener + transporter no longer manage direct byte buffers by default. c.t.f.netty4.channel.DirectToHeapInboundHandler is introduced to help protocol builders manage them.
RB_ID=881648
0๏ธโฃ finagle-stats: Changed the default behavior of empty histograms to only export the count. Thus the
com.twitter.finagle.stats.exportEmptyHistograms
toggle now defaults to0.0
.RB_ID=882522
๐ฅ Breaking API Changes
* ๐ง finagle: Some APIs around configuring TLS/SSL on Finagle clients have changed to unblock Netty 4 adoption. ``RB_ID=890935`` - `c.t.f.Http.client.withTls(Netty3TransporterTLSConfig)` is removed. Use variations of `c.t.f.Http.client.withTransport.tls` instead. - `c.t.f.netty3.Netty3TransporterTLSConfig` is removed. * ๐ง finagle: Some APIs around configuring TLS/SSL on Finagle servers have changed to unblock Netty 4 adoption. ``RB_ID=891270`` - `c.t.f.Http.server.withTls(Netty3ListenerTLSConfig)` is removed. Use variations of `c.t.f.Http.server.withTransport.tls` instead. - `c.t.f.netty3.Netty3ListenerTLSConfig` is removed. * ๐ finagle-core: Removed the protected and unused method `read(permit: Permit): Future[Rep]` from `SerialClientDispatcher`. ``RB_ID=881978`` * ๐ finagle-core: Removed a gauge, `idle`, from `c.t.f.factory.ServiceFactoryCache`. ``RB_ID=884210`` * finagle-core: `ServiceTimeoutException` now extends `NoStackTrace`. ``RB_ID=886809`` * finagle-core: Marked `com.twitter.finagle.util.ConcurrentRingBuffer` as private. It doesn't fit the typical programming model we encourage for users of finagle, and so we found it was rarely used. ``RB_ID=888801`` * finagle-core: Marked `transform` in `com.twitter.finagle.Stack` as protected. It is too powerful and unnecessary for users, and should be used by implementors only. * ๐ finagle-core: Removed the `StatsReceiver` argument from `TimeoutFilter`. ``RB_ID=891380`` * finagle-core: Stopped exporting a few metrics related to deadlines, and replaced with a simpler one. There was a per-`TimeoutFilter` one named `timeout/expired_deadline_ms`, and a per-server one named `admission_control/deadline/deadline_budget_ms`. We added instead a per-server one named `admission_control/deadline/exceeded_ms`. ``RB_ID=891380`` * finagle-http: HttpMuxer now takes in a Seq[Route] instead of a Seq[(String, Service[Request, Response])]. ``RB_ID=886829`` * finagle-http: As part of the first step towards restructuring Finagle HTTP modules required for Netty 4 adoption, HTTP params are moved from the inner object `c.t.f.Http.param` into their own package `c.t.f.http.param`. ``RB_ID=885155`` * finagle-redis: A couple of methods had to be renamed (and return type changed) to unblock Netty 4 adoption. ``RB_ID=882622`` - `Command.toChannelBuffer` renamed to `Command.toBuf` and return type changed from N3 `ChannelBuffer` to Finagle `Buf`. - `Command.toByteArray` is removed. - Both `Command.key` and `Command.value` now implemented in terms of `Buf`s (no `ChannelBuffers`). * finagle-redis: An API around `c.t.f.redis.protocol.Command` was modernized as part of major restructuring required for the Netty 4 adoption. ``RB_ID=885811`` - `RedisMessage` (a common parent for both `Command` and `Reply`) has been removed. - The encoding machinery was restructured to eliminate duplicated and dead code. * ๐ finagle-thrift: Removed deprecated `ThriftRichClient.newServiceIface` methods which did not take a label. Use the versions that take a String label. ``RB_ID=891004`` * ๐ finagle-thrift: Removed deprecated `ThriftRichClient.newIface` methods based on `Groups`. Use the versions that a `dest` or `Name`. ``RB_ID=891004`` * ๐ finagle-thriftmux: Removed deprecated classes `ThriftMuxClient`, `ThriftMuxClientLike`, `ThriftMuxServer`, and `ThriftMuxServerLike`. ``RB_ID=880924`` ๐ Bug Fixes
finagle-core: The
withTlsWithoutValidation
andtlsWithoutValidation
APIs have been fixed for an issue on Java 8 where certificate validation was being attempted instead of bypassed.RB_ID=881660
finagle-http: The toggle implementation for
com.twitter.finagle.http.serverErrorsAsFailures
had a bug when toggled on. That toggle is no longer used and is superseded bycom.twitter.finagle.http.serverErrorsAsFailuresV2
.RB_ID=882151
finagle-netty4: Connecting to a Socks 5 proxy using Finagle with Netty 4 now works properly. This previously resulted in a timeout and
ProxyConnectException
.RB_ID=884344
finagle-netty4: Don't swallow bind failures.
RB_ID=892217
๐ Deprecations
* ๐ finagle-core: `c.t.f.builder.ClientBuilder` deprecate some seldom used methods. The same functionality is available through the Stack-based APIs or `ClientBuilder.configured`. ``RB_ID=881612`` - `hostConnectionIdleTime` - `hostConnectionMaxIdleTime` - `hostConnectionMaxLifeTime` - `hostConnectionMaxWaiters`
-
v6.39.0 Changes
๐ New Features
* finagle-core: `com.twitter.finagle.Failure` has a new flag, `NonRetryable`, which signifies that a request should not be retried. The flag is respected by all of Finagle's retry mechanisms. ``RB_ID=878766`` * ๐ finagle-thriftmux: Allow ThriftMux.Clients to be filtered. This is supported in the the StdStackClient but ThriftMux.Client is a StackBasedClient. ``RB_ID=874560`` * finagle-netty4: Add boolean flag `com.twitter.finagle.netty4.poolReceiveBuffers` that enables/disables pooling of receive buffers (disabled by default). When enabled, lowers the CPU usage and allocation rate (GC pressure) with the cost of increased memory footprint at the startup. ``RB_ID=872940`` * finagle-netty4: Add new histogram `receive_buffer_bytes` (only enabled with pooling) to keep track of the receive buffer sizes (useful for tuning pooling). ``RB_ID=877080`` ๐ Deprecations
๐ finagle-core:
c.t.f.builder.ClientBuilder
deprecate some seldom used methods. The same functionality is available through the Stack-based APIs orClientBuilder.configured
.RB_ID=878009
readerIdleTimeout
writerIdleTimeout
recvBufferSize
sendBufferSize
channelFactory
expHostConnectionBufferSize
๐ finagle-kestrel: Deprecate
c.t.f.kestrel.protocol.Kestrel()
,c.t.f.kestrel.protocol.Kestrel(failFast)
, andc.t.f.kestrel.protocol.Kestrel.get()
. To create a Kestrel client using ClientBuilder, use.stack(c.t.f.Kestrel.client)
.RB_ID=870686
๐ฅ Breaking API Changes
* finagle-core: The constructors for both `c.t.f.netty3.Netty3Listener` and `c.t.f.netty3.Netty3Transporter` now take `Stack.Params` instead of individual parameters. ``RB_ID=871251`` * ๐ฆ finagle-thrift: The c.t.f.thrift.legacy package has been removed which included the public types `ThriftCall`, `ThriftReply`, and `ThriftCallFactory`. ``RB_ID=873982`` โ Runtime Behavior Changes
finagle-core: Tolerate TraceIds that are greater than 64 bits in preparation of moving to 128 bit ids.
RB_ID=874365
finagle-http:
c.t.f.http.service.HttpResponseClassifier.ServerErrorsAsFailures
now classifies a retryable nack as aResponseClass.RetryableFailure
.RB_ID=869182
finagle-http:
c.t.f.Http.{Client,Server}
is moving towards treating HTTP 5xx status codes as failures viac.t.f.http.service.HttpResponseClassifier.ServerErrorsAsFailures
. This can be disabled by setting the toggle "com.twitter.finagle.http.serverErrorsAsFailures" to0.0
or explicitly setting it usingwithResponseClassifier
.RB_ID=869303
,RB_ID=875367
๐ finagle-http:
c.t.f.http.HttpServerDispatcher
now removes the bodies from responses to HEAD requests in order to avoid a HTTP protocol error and logs the event at level error. Associated with this, thec.t.f.http.filter.HeadFilter
will now strip the body from a chunked response, but in these cases theWriter
associated with the response will receive aReaderDiscarded
exception if a write is attempted after the filter has run.RB_ID=872106
finagle-thrift: Also track response failures in the
c.t.finagle.thrift.ThriftServiceIface#statsFilter
in addition to successful responses that encode an Error or Exception.RB_ID=879075
๐ Bug Fixes
* finagle-http: Fix issue in `c.t.finagle.http.RequestBuilder` when the URI host contains underscores. ``RB_ID=870978`` * finagle-http: A connection for HTTP/1.0 or non-keep-alive requests is now closed gracefully so that all requests that have been issued received responses. ``RB_ID=868767`` * finagle-http: The HTTP/1.x server dispatcher no longer clobbers 'Connection: close' headers set by a service, resulting in the graceful shutdown of the connection. ``RB_ID=880007`` * finagle-netty4: `ChannelTransport` now drains messages before reading more data off the transport which should reduce memory pressure in streaming protocols. ``RB_ID=872639``
-
v6.38.0 Changes
๐ New Features
* finagle-http: `HttpNackFilter` now handles both retryable and non-retryable nacks via a new header: "finagle-http-nonretryable-nack". These are converted to non-retryable `c.t.f.Failures` and counted by a new counter "nonretryable_nacks". ``RB_ID=865468`` * finagle-toggle: Is no longer considered experimental. ``RB_ID=868819`` ๐ฅ Breaking API Changes
finagle-kestrel:
c.t.f.kestrel.protocol.ResponseToEncoding
is now private[finagle].RB_ID=866612
finagle-memcached:
c.t.f.memcached.protocol.text.{CommandToEncoding, ResponseToEncoding}
,c.t.f.memcached.protocol.text.client.{AbstractDecodingToResponse, ClientTransport, DecodingToResponse}
are now private[finagle].RB_ID=866612
๐ฆ finagle-netty4: Move
numWorkers
flag out of the package object so it gets a user friendly name:c.t.f.netty4.numWorkers
instead ofc.t.f.netty4$.package$.numWorkers
.RB_ID=123567
๐ท finagle-core:
c.t.f.netty3.WorkerPool
is no longer visible outside ofc.t.f.netty3
.RB_ID=123567
finagle-core: The
content
parameter of theClientSslContext
andClientSslContextAndHostname
TlsConfig
options has been renamed tocontext
.RB_ID=868791
โ Runtime Behavior Changes
* โฌ๏ธ finagle-thriftmux: Removed "<server_label>/thriftmux/downgraded_connections" and "<server_label>/thriftmux/connections" gauges. Counters are still available at "<server_label>/thrifmux/connects" and "<server_label>thriftmux/downgraded_connects". ``RB_ID=867459``