All Versions
Latest Version
Avg Release Cycle
28 days
Latest Release
5 days ago

Changelog History
Page 1

  • v19.11.0

    November 06, 2019

    🆕 New Features

    • finagle-base-http: The Uri class now provides access publicly to its
      path, which is the request uri without the query parameters.
    • 👍 finagle-mysql: Adding native support to finagle-mysql for MySQL JSON Data Type. A client
      can now use jsonAsObjectOrNull[T] or getJsonAsObject[T] APIs on c.t.f.mysql.Row to
      read the underlying json value as type T or use jsonBytesOrNull API to get a raw byte
      array of the the json column value. 4d403051
    • ✅ MySQL integration tests can now run on a port other than the default (3306). Add a port
      ✅ property to .finagle-mysql/ to customize the value.

    ⚙ Runtime Behavior Changes

    • ⬆️ finagle: Upgrade to Netty 4.1.43.Final and netty-tcnative 2.0.26.Final. cfaaa471
    • 👍 finagle: Add initial support for JDK 11 compatibility. 04def84b
    • ⬆️ finagle: Upgrade to caffeine 2.8.0 c335b29e
    • ✨ finagle-http2: Nacks in the form of RST(STREAM_REFUSED | ENHANCE_YOUR_CALM) no
      longer surface as a RstException, instead opting for a generic Failure to be
      symmetric with the HTTP/1.x nack behavior. cb67fa33
    • 🚤 finagle-mux: The mux handshake latency stat has be changed to Debug
      verbosity. 0eb2cfb6
    • ⬇️ finagle-serversets: finagle/serverset2/stabilizer/notify_ms histogram has been downgraded to
      debug verbosity. 30d3d0ea

    💥 Breaking API Changes

    • 🚚 finagle-base-http: c.t.f.http.codec.HttpContext moved into c.t.f.http.codec.context.HttpContext
  • v19.10.0

    October 08, 2019

    🆕 New Features

    * 🏗 finagle-partition: Enables cross-build for 2.13.0. ``PHAB_ID=D380444``
    * 🏗 finagle-exception: Enables cross-build for 2.13.0. ``PHAB_ID=D381107``
    * 🏗 finagle-exp: Enables cross-build for 2.13.0. ``PHAB_ID=D380497``
    * finagle-http: Expose header validation API to public. ``PHAB_ID=D381771``
    * 🏗 finagle-mysql: Enables cross-build for 2.13.0. ``PHAB_ID=D377721``
    * 🏗 finagle-{mux,thrift,thrift-mux}: Enables cross-build for 2.13.0. ``PHAB_ID=D373165``
    * 0️⃣ finagle-netty4: Add support to stop default Finagle Netty 4 Timer. ``PHAB_ID=D381605``
    * 🏗 finagle-redis: Enables cross-build for 2.13.0. ``PHAB_ID=D381107``
    * 🏗 finagle-tunable: Enables cross-build for 2.13.0. ``PHAB_ID=D373170``
    * 🏗 finagle-grpc-context: Enables cross-build for 2.13.0. ``PHAB_ID=D373168``
    * finagle-thrift: Pass a factory to create a TReusableBuffer as the parameter of a finagle client
      to allow multiple clients share one TReusableBuffer. ``PHAB_ID=D378466``
    * 🏗 finagle-zipkin-{core,scribe}: Enables cross-build for 2.13.0. ``PHAB_ID=D381675``
    ⚙ Runtime Behavior Changes
    • 🐎 finagle-base-http: Better performance for the default HeaderMap.add method for headers with the same name. PHAB_ID=D381142

    • finagle-http2: H2ServerFilter will no longer swallow exceptions that fire via exceptionCaught in the Netty pipeline. PHAB_ID=D369185

    • 🚚 finagle-http: Remove legacy HTTP/2 client implementation and make the MultiplexHandler-based implementation the default HTTP/2. PHAB_ID=D362950

    💥 Breaking API Changes

    * finagle-core: `c.t.f.l.FailureAccrualFactory`'s `didMarkDead()` changed to `didMarkDead(Duration)`.
      The `Duration` is the length of time the endpoint is marked dead. ``PHAB_ID=D369209``
    * 🚚 finagle-core: removed the `staticDetermisticApertureWidth` flag. The behavior is now as if the flag
      was set to `true` which was also the default behavior. ``PHAB_ID=D382779``
    🐛 Bug Fixes
    • finagle-mux: Mux now properly propagates Ignorable failures multiple levels for superseded backup requests. This allows for more accurate success rate metrics for downstream services, when using backup requests. PHAB_ID=D365729
  • v19.9.0

    September 10, 2019

    🆕 New Features

    • 🏗 finagle-{core,init,toggle,netty4}: Enables cross-build for 2.13.0. f21a54e0
    • finagle-base-http: Add None as a valid SameSite header value. 0c43561a

    💥 Breaking API Changes

    • ✅ finagle-core: The constructor on c.t.f.filter.NackAdmissionFilter used for testing that
      🚚 took an Ema.Monotime has been removed. 38fae802
    • finagle-core: The Adddress.ServiceFactory variant has been promoted from experimental
      🚚 status and moved to be properly part of c.t.f.Address. 68cf34b8
    • 🐎 finagle-http: improve performance of c.t.f.http.filter.StatsFilter. This results in two notable
      API changes: 1. There is a private[filter] constructor which can take a () => Long for
      determining the current time in milliseconds (the existing StatsFilter(StatsReceiver)
      0️⃣ constructor defaults to using Stopwatch.systemMillis for determining the current time in
      milliseconds. 2. The protected count(Duration, Response) method has been changed to
      private[this] count(Long, Response) and is no longer part of the public API.
    • finagle-partitioning: the hash-based routing that memcached uses has been relocated to a new
      top-level module so that it can be used more broadly across protocols. This results
      📦 in several classes moving to the c.t.f.partitioning package: 1. The Memcached.param.EjectFailedHost, KeyHasher, and NumReps parameters are now
      available under c.t.f.partitioning.param 2. The FailureAccrualException and CacheNode definitions are now in the c.t.f.paritioning
      📇 package. 3. The ZkMetadata class has moved to c.t.f.p.zk and the finagle-serverset module now depends
      on finagle-partitioning.

    ⚙ Runtime Behavior Changes

    • finagle-http: c.t.f.http.service.NotFoundService has been changed to no longer
      🗄 use Request.response. Use of Request.response is deprecated and discouraged.
    • finagle-mysql: Handshaking for the MySQL 'Connection Phase' now occurs as part of session
      acquisition. As part of this change, the
      com.twitter.finagle.mysql.IncludeHandshakeInServiceAcquisition toggle
      🚚 has been removed and it no longer applies. cd4877c1
    • ⬆️ finagle: Upgrade to Netty 4.1.39.Final. 001b0940
    • finagle-http: Enable Ping Failure Detection for MultiplexHandler based HTTP/2 clients. Note that
      🚚 the Ping Failure Detection implementation has been removed completely from the
      non-MultiplexHandler based HTTP/2 client. 8af32742
    • finagle: Added a dependency on Scala Collections Compat 2.1.2. f21a54e0

    🐛 Bug Fixes

    • 🚚 finagle-base-http: Removes the Cookie header of a c.t.f.http.Message whenever its cookie map
      becomes empty. f9b76a0f
  • v19.8.0

    August 06, 2019

    💥 Breaking API Changes

    * finagle-core: The contents of the `c.t.f.dispatch.GenSerialClientDispatcher` object have been
      moved to the new `c.t.f.dispatch.ClientDispatcher` object. The stats receiver free constructors
      of `GenSerialClientDispatcher` and `SerialClientDispatcher` have been removed.
    * 🗄 finagle-thrift: The deprecated `ReqRepThriftServiceBuilder` object has been
      removed. Users should migrate to `ReqRepMethodPerEndpointBuilder`. ``PHAB_ID=D345740``
    ⚙ Runtime Behavior Changes
    • 🐧 finagle-core: Failed reads on Linux due to a remote peer disconnecting should now be properly seen as c.t.f.ChannelClosedException instead of a c.t.f.UnknownChannelException. PHAB_ID=D336428

    • ⬆️ finagle: Upgrade to Jackson 2.9.9. PHAB_ID=D345969

    • ⬆️ finagle: Upgrade to Netty 4.1.38.Final. PHAB_ID=D346259

    • 📦 finagle-base-http: Moved c.t.f.http.serverErrorsAsFailures out of its package object, which changes its name from com.twitter.finagle.http.package$serverErrorsAsFailures to com.twitter.finagle.http.serverErrorsAsFailures. PHAB_ID=D353045

    • 📦 finagle-thrift: Moved c.t.f.thrift.maxReusableBufferSize out of its package object, which changes its name from com.twitter.finagle.thrift.package$maxReusableBufferSize to com.twitter.finagle.thrift.maxReusableBufferSize. PHAB_ID=D353045

  • v19.7.0

    July 18, 2019

    🆕 New Features

    🛰 finagle-http: Measure streaming (message.isChunked) chunk payload size with two new histograms:
    🛰 stream/request/chunk_payload_bytes and stream/response/chunk_payload_bytes, they are
    🛰 published with a debug verbosity level. These chunk payload sizes are also traced via the same
    trace keys. 11f4e32

    👍 finagle-base-http: Add support for new "b3" tracing header. 8721837

    finagle-core: Allow to not bypass SOCKS proxy for localhost by using the GlobalFlag
    -com.twitter.finagle.socks.socksProxyForLocalhost 5521bc8

    finagle-core: OffloadFilter flag to reduce network contention. 2bd4d61

    finagle-exp: Add private c.t.f.exp.ConcurrencyLimitFilter for rejecting requests
    that exceed estimated concurrency limit e331491

    ⚙ Runtime Behavior Changes

    finagle-http: c.t.f.http.Cors has been changed to no longer use the c.t.f.http.Response
    associated with the passed in c.t.f.http.Request. 455718a

    finagle-http: c.t.f.http.filter.ExceptionFilter has been changed to no longer
    👉 use the c.t.f.http.Response associated with the passed in. 54d4acf

    ⚡️ finagle-http: Optimize creation of new Http Dispatchers by re-using created metrics and loggers.

    💥 Breaking API Changes

    🚚 finagle-base-http: Removed the methods setStatusCode and getStatusCode from
    🗄 c.t.f.http.Response which have been deprecated since 2017. 20b37b0

    🏗 finagle-core: All deprecated c.t.f.builder.ServerBuilder#build methods have
    🏗 been removed. Users should migrate to using the build method which takes a
    ServiceFactory[Req, Rep] as a parameter. 7ae208d

    🚚 finagle-core: The c.t.f.ssl.client.SslClientEngineFactory#getHostname method has been removed.
    All uses should be changed to use the getHostString method of SslClientEngineFactory instead.

    finagle-http: The setOriginAndCredentials, setMaxAge, setMethod, and setHeaders methods
    of c.t.f.http.Cors.HttpFilter are no longer overridable. 455718a

    finagle-http: The details of the c.t.f.Http.HttpImpl class are meant to be implementation
    details so the class constructor was made private along with the fields. Along these same lines
    🚚 the c.t.f.Http.H2ClientImpl.transporter method has been moved to a private location.

    🐛 Bug Fixes

    🚚 finagle-core: Ensure ClientDispatcher queueSize gauge is removed on transport
    close, instead of waiting for clean-up at GC time. 963e9b8

    finagle-http2: Don't propagate stream dependency information for the H2 client.

  • v19.6.0

    June 19, 2019

    🆕 New Features

    • finagle-core: SSL/TLS session information has been added to c.t.f.ClientConnection.
    • finagle-core: Add a Stack Module with 7 parameters for convenience sake. 6f9d7f0d
    • finagle-core: For both, servers and clients, introduce a way to shift application-level future
      callbacks off of IO threads, into a given FuturePool or ExecutorService.
      🔧 Use withExecutionOffloaded configuration method (on a client or a server) to access
      🆕 new functionality. 40431bb4
    • finagle-http: Added counters for request/response stream as: stream/request/closed,
      stream/request/failures, stream/request/failures/<exception_name>, stream/request/opened,
      stream/request/pending and stream/response/closed, stream/response/failures,
      stream/response/failures/<exception_name>, stream/response/opened, stream/response/pending.
      The counters will be populated when isChunked is set to true, the failures counters will be
      populated when isChunked is set to true and the stream fails before it has been fully read in the
      request and response respectively. d9b69bdc
    • 🚚 finagle-http: Add two new API variants in CookieMap: addAll and removeAll that allow for
      ➕ adding and removing cookies in bulk, without triggering a header rewrite on each item.
    • 👍 finagle-mysql: finagle-mysql now supports using SSL/TLS with MySQL. SSL/TLS can be turned on by
      calling withTransport.tls(sslClientConfiguration) with a specified
      c.t.f.ssl.client.SslClientConfiguration. 0b6c20ac

    ⚙ Runtime Behavior Changes

    • ⬆️ finagle: Upgrade to Netty 4.1.35.Final and netty-tcnative 2.0.25.Final.
    • 0️⃣ finagle-core: The default failure accrual policy has been changed from one
      which uses only consecutive failures to a hybrid model which uses both
      success rate over a window and consecutive failures. Previously this was
      🔄 changeable via toggle. The toggle has been removed, and the hybrid version
      0️⃣ has been made the default. 6f85c56e
    • finagle-http: Rename request_stream_duration_ms to stream/request/duration_ms and
      response_stream_duration_ms to stream/response/duration_ms. The stats will be
      populated when isChunked is set to true in the request and response respectively.
    • 👀 finagle-http2: Disable ping-based failure detector in HTTP/2 client as it seems to do
      more harm than good. ea5b0c77
    • 0️⃣ finagle-http2: Frame logging is now disabled by default for clients. To enable,
      👉 use the c.t.f.http2.param.FrameLogging.Enabled Stack Param. For example:
      🔧 Http.client.configured(FrameLogging.Enabled). 0b2ec201
    • finagle-netty4: When using a Netty LocalChannel, the value of the BackPressure
      stack param is effectively changed to backPressureDisabled so that other functionality
      (e.g. SSL/TLS) works as expected. 3a8e5c19
    • finagle-netty4: finagle/netty/pooling/used now includes the size of the buffers in the
      thread-local caches. 824596f0
    • finagle-core: Stats and retry modules use a ResponseClassifier to give hints
      for how to handle failure (e.g., Is this a success or is it a failure? If
      it's a failure, may I retry the request?). The stats module increments a
      success counter for successes, and increments a failure counter for failures.
      But there isn't a way to tell the stats module to just do nothing. And, this
      is exactly what the stats module should do (nothing) in the case of ignorable
      failures (e.g. backup request cancellations). To represent these cases, we
      introduce a new ResponseClass: Ignorable. 256b79b8

    🐛 Bug Fixes

    • finagle-core: UsingSslSessionInfo would fail to be constructed properly when
      SSLSession.getLocalCertificates returns 'null'. 8d984963
    • finagle-http: Finagle now properly sets the Transport.peerCertificate local context
      when using HTTP/2. a661fef4
    • finagle-http: c.t.f.http.collection.RecordSchema.Record is now thread-safe.
    • finagle-zipkin-core: Fix a race condition which could cause a span to get logged
      missing some annotations. 53901a28
    • 🌲 finagle-mysql: Don't log c.t.f.ChannelClosedException when rolling back a transaction
      fails. 29cfffe6

    💥 Breaking API Changes

    • finagle-core: The exceptions c.t.f.SslHandshakeException and
      c.t.f.SslHostVerificationException were no longer used and have
      🚚 been removed. 2a53531d
    • finagle-mysql: The structure of c.t.f.mysql.Request has changed. It is now based on
      a higher level c.t.f.mysql.ProtocolMessage and the cmd field must contain a value.
      Additionally, the synthetic Command.COM_NO_OP has been removed, as due to the
      restructuring it was no longer necessary. d6e4042f
    • finagle-mysql: Uses of the abbreivation 'cap' have been renamed to the full
      word: 'capabilities', including for the baseCapabilities of Capability.

    🗄 Deprecations

    • 🚚 finagle-http: Removed deprecated response_size in Finagle Http stats. This is a duplicate stat
      🛰 of response_payload_bytes. 1286c438
  • v19.5.1

    May 21, 2019

    No Changes

  • v19.5.0

    May 17, 2019

    🆕 New Features

    • finagle-http: Add two new methods to com.twitter.finagle.http.MediaType,
      MediaType#typeEquals for checking if two media types have the same type and
      subtype, ignoring their charset, and MediaType#addUtf8Charset for easily
      setting a utf-8 charset. ec0953f1

    🐛 Bug Fixes

    • finagle-http: Ensure server returns 400 Bad Request when
      non-ASCII characters are present in the HTTP request URI path. a7dae7ea

    ⚙ Runtime Behavior Changes

    • finagle-core: Deterministic aperture (d-aperture) load balancers no longer export
      "loadband" scoped metrics: "widen", "narrow", "offered_load_ema". These were not
      necessary as d-aperture does not change the aperture size at runtime. 20029ac5
    • 🔧 finagle-core: Request logging now defaults to disabled. Enable it by configuring the
      RequestLogger Stack parameter on your Client or Server. ee9cb4ec
    • finagle-core: Subtree binding failures in NameTree.Union's are ignored in the
      final binding result. 2fde4d2d

    💥 Breaking API Changes

    • finagle-core: The c.t.f.client.EndpointerModule and c.t.f.pushsession.PushStackClient public
      and protected APIs have been changed to use the abstract instead of the
      concrete as relying on the concrete implementation was not
      necessary. 77a3cdfd
    • finagle-http: For Finagle HTTP clients, the withMaxRequestSize(size) API
      🚚 method has been removed. For Finagle HTTP servers, the
      🚚 withMaxResponseSize(size) method has been removed. The underlying Stack
      params which are set by these methods are respectively HTTP server and HTTP
      🚚 client side params only. Using these removed methods had no effect on the
      setup of Finagle HTTP clients and servers. 5eb3ae24
    • 🚚 finagle-mysql: HandshakeResponse has been removed from finagle-mysql's public
      API. It is expected that users of the library are relying entirely on
      finagle-mysql for handshaking. f0ab09a6
  • v19.4.0

    April 18, 2019


    🆕 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.
    • 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.
    • 🚤 finagle-core: LatencyCompensation now applies to service acquisition. 1ec020a5
    • finagle-http: HTTP headers validation on the outbound path is now in compliance with RFC7230.
    • 0️⃣ finagle-netty4: Netty's reference leak tracking now defaults to disabled.
      Set the flag com.twitter.finagle.netty4.trackReferenceLeaks to true to enable.

    💥 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

    0️⃣ c.t.f.http.Cookie no longer takes Netty's DefaultCookie in the constructor

    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.

    finagle-core: The com.twitter.finagle.core.UseClientNackAdmissionFilter toggle
    has been replaced by a global flag, com.twitter.finagle.client.useNackAdmissionFilter.

    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
  • v19.3.0

    March 13, 2019

    🆕 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 and c.t.f.builder.ServerBuilder. Users should migrate to
      using the tls(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.