All Versions
Latest Version
Avg Release Cycle
30 days
Latest Release
21 days ago

Changelog History
Page 1

  • v20.1.0

    January 29, 2020

    🆕 New Features

    • ⬆️ finagle-memcached: Upgrade to Bijection 0.9.7. de0ec2c6
    • 🏗 finagle-opencensus-tracing: Enables cross-build for 2.13.0. fee83b10
    • 👍 finagle-thriftmux: Add support for automatically negotiating compression between a client
      🔧 and server. Off by default, clients and servers must be configured to negotiate.
    • 🏗 finagle-stats: Enables cross-build for 2.13.0. 4144d73c
    • 🏗 finagle-stats-core: Enables cross-build for 2.13.0. 4144d73c
    • 📇 finagle-serversets: Add generic metadata support in ServerSet. Add support for announcing the
      📇 generic metadata via ZkAnnouncer. Add support to resolve the generic metadata via Zk2Resolver

    💥 Breaking API Changes

    • 📇 finagle-partitioning: ZKMetadata case class has a new default argument breaking API for
      Java users. 180bb925
    • 📇 finagle-serversets: Endpoint case class has a new metadata argument. 180bb925
  • v19.12.0

    December 13, 2019

    🆕 New Features

    * finagle-core, finagle-exp: Add annotations to ``DarkTrafficFilter`` to identify which span
      is dark, as well as which light span it correlates with. ``PHAB_ID=D402864``
    * finagle-core: Introduce `Trace#traceLocal` for creating local spans within a trace context.
    ⚙ Runtime Behavior Changes
    • ⬆️ finagle: Upgrade to jackson 2.9.10 and jackson-databind PHAB_ID=D410846

    • finagle-core: Per-method metrics on MethodBuilder are now created lazily, so if you have methods that you don't use, the associated metrics won't be exported. PHAB_ID=D400382

    • ⏪ finagle-mysql: The RollbackFactory no longer attempts to roll back if the underlying session is closed since it is highly unlikely to succeed. It now simply poisons the session and calls close. PHAB_ID=D408155

    • finagle-netty4: Change the 'connection_requests' metric to debug verbosity. PHAB_ID=D391289

    • finagle-serversets: Ensure ZkSession#retrying is resilient to ZK host resolution failure. PHAB_ID=D403895

    • finagle-thrift: Per-method metrics are now created lazily, so if you have methods on a Thrift service that you don't use, the associated metrics won't be exported. PHAB_ID=D400382

    • finagle-zipkin-core: Tracing produces microsecond resolution timestamps in JDK9 or later. PHAB_ID=D400661

    • finagle-core: Trace#time and Trace#timeFuture no longer generate timestamped annotations or silently discard timing information. They now instead generate a BinaryAnnotation containing the timing information. In order to also get timestamped Annotations for when the operation began and ended, use in conjunction with Trace#traceLocal. PHAB_ID=D404869

    💥 Breaking API Changes

    * finagle-core: The `RetryPolicy` companion object is no longer a `JavaSingleton`.
    * finagle-thrift: The RichClientParam constructors are now all either
      deprecated, so to construct it, you must call one of the RichClientParam.apply
      methods.  ``PHAB_ID=D400382``
    🗄 Deprecations
    • 🗄 finagle-core: Deprecate Tracing#record(message, duration) as it does not have the intended effect and silently discards any duration information in the resulting trace. Instead you should use either Tracing#recordBinary or a combination of Trace#traceLocal and Trace#time. PHAB_ID=D404869

    🐛 Bug Fixes

    * finagle-core: `ClosableService` client stack module that prevents the reuse of closed services
      when `FactoryToService` is not set. This is important for clients making use of the `newClient`
      api. ``PHAB_ID=D407805``
  • 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