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

Changelog History
Page 4

  • v18.1.0

    🆕 New Features

    * finagle-core: `FailureDetector` has a new method, `onClose`, which provides
      a Future that is satisfied when the `FailureDetector` marks a peer as Closed.
    * 🌲 finagle-core: Introduce trace logging of requests as they flow through a
      Finagle client or server. These logs can be turned on at runtime by setting
      the "com.twitter.finagle.request.Logger" logger to trace level.
    * finagle-http2: HTTP/2 clients now expose the number of currently opened streams under
      the `$client/streams` gauge. ``PHAB_ID=D127238``
    * finagle-http2: HTTP/2 servers now expose the number of currently opened streams under
      the `$server/streams` gauge. ``PHAB_ID=D127667``
    * 0️⃣ finagle-memcached: By default, the Memcached client now creates two connections
      to each endpoint, instead of 4. ``PHAB_ID=D119619``
    * 👍 finagle-redis: Add support for redis Geo Commands. ``PHAB_ID=D123167`` based on the PR written by Mura-Mi []
    * finagle-thrift: Add `c.t.f.thrift.service.ThriftServiceBuilder` and
      `c.t.f.thrift.service.ReqRepThriftServiceBuilder` for backwards compatibility
      of creating higher-kinded method-per-endpoint clients. ``PHAB_ID=D127538``
    * finagle-core: `c.t.f.http.MethodBuilder` and `c.t.f.thriftmux.MethodBuilder` now
      expose `idempotent` and `nonIdempotent` methods, which can be used to configure
      retries and the sending of backup requests. ``PHAB_ID=D122087``
    🐛 Bug Fixes
    • ⏪ finagle-mysql: Fix a bug with transactions where an exception during a rollback could leave the connection with a partially committed transaction. PHAB_ID=D122771

    • finagle-toggle: c.t.f.toggle.Toggles are independent; that is, applying the same value to two different toggles with the same fraction will produce independent true/false values. PHAB_ID=D128172

    ⚙ Runtime Behavior Changes

    * finagle-core, finagle-netty4: When creating engines, SslClientEngineFactories now use
      `SslClientEngineFactory.getHostString` instead of `SslClientEngineFactory.getHostname`.
      This no longer performs an unnecessary reverse lookup when a hostname is not supplied
      as part of the `SslClientConfiguration`.  ``PHAB_ID=D124369``
    * finagle-http2: Supplies a dependency on io.netty.netty-tcnative-boringssl-static,
      which adds support for ALPN, which is necessary for encrypted http/2.  To use a
      different static ssl dependency, exclude the tcnative-boringssl dependency and
      manually depend on the one you want to use. ``PHAB_ID=D119555``
    💥 Breaking API Changes
    • 🚚 finagle-base-http, finagle-http: Removed Apache Commons Lang dependency, org.apache.commons.lang3.time.FastDateFormat now is java.time.format.DateTimeFormatter. PHAB_ID=D121479

    • finagle-base-http: c.t.f.http.Message.headerMap is now an abstract method. PHAB_ID=D120931

    • finagle-core: c.t.f.ssl.server.SslServerSessionVerifier no longer uses the unauthenticated host information from SSLSession. PHAB_ID=D124815

    • 🚚 finagle-memcached: ConcurrentLoadBalancerFactory was removed and its behavior was replaced by a Stack.Param inside finagle-core's LoadBalancerFactory. PHAB_ID=D119394

    • finagle-netty4: Netty4ClientEngineFactory and Netty4ServerEngineFactory were finalized. PHAB_ID=D128708

    • 🚚 finagle-thrift, finagle-thriftmux: Remove ReqRep specific methods. Since the "ReqRep" builders are now subclasses of their non-"ReqRep" counterparts their is no longer a need to expose "ReqRep" specific methods. PHAB_ID=D123341

    🗄 Deprecations

    * 🗄 finagle-exp: `c.t.f.exp.BackupRequestFilter` has been deprecated. Please use
      `c.t.f.client.BackupRequestFilter` instead. ``PHAB_ID=D122344``
    * 🗄 finagle-http: `c.t.f.http.Request.multipart` has been deprecated.
      Use `c.t.f.http.exp.MultipartDecoder` instead. ``PHAB_ID=D126013``
  • v17.12.0

    🆕 New Features

    * ⚡️ finagle-core: Expose Tunables for MethodBuilder timeout configuration. Update
      the http.MethodBuilder and thriftmux.MethodBuilder to accept Tunables for
      configuring total and per-request timeouts. ``PHAB_ID=D118114``
    * 👍 finagle-thrift, finagle-thriftmux: Add support for Scrooge
      `ReqRepServicePerEndpoint` functionality. ``PHAB_ID=D107397``
    * 👍 finagle-thriftmux: Add support for Scrooge `ServicePerEndpoint` and
      `ReqRepServicePerEndpoint` functionality to `thriftmux.MethodBuilder`.
    💥 Breaking API Changes
    • 🚚 finagle-base-http: Remove deprecated [Request|Response].[encode|decode][Bytes|String] methods. Use c.t.f.h.codec.HttpCodec methods instead. PHAB_ID=D116350

    • 🚚 finagle-memcached: ConcurrentLoadBalancerFactory was removed and its behavior was replaced by a Stack.Param inside finagle-core's LoadBalancerFactory. PHAB_ID=D119394

    • 🚚 finagle-serversets: Removed Guava dependency which broke some APIs. PHAB_ID=D119555

      • c.t.f.common.zookeeper.ServerSets.TO_ENDPOINT is now a java.util.function.Function.
      • now takes a java.util.Set.
      • c.t.f.common.zookeeper.ZooKeeperUtils.OPEN_ACL_UNSAFE is is now a java.util.List.
      • c.t.f.common.zookeeper.ZooKeeperUtils.EVERYONE_READ_CREATOR_ALL is is now a java.util.List.
      • c.t.f.common.zookeeper.ZooKeeperClient constructor now takes a java.util.Optional.
    • 🚚 finagle-thrift: Move ThriftRichClient and ThriftRichServer to c.t.finagle.thrift package. PHAB_ID=D115284

    ⚙ Runtime Behavior Changes

    * 🚚 finagle-core: Remove `NackAdmissionControl` from the default client stack.
      Add it to the finagle-{http,mux} client stacks; note that it is added to
      finagle-http2 via finagle-http and finagle-thriftmux via finalge-mux. It is
      no longer part of the finagle-{memcached,mysql,redis} client stacks.
    * 🚚 finagle-core: The "pipelining/pending" stat has been removed from protocols
      using `c.t.f.dispatch.PipeliningClientDispatcher`. Refer to the "pending" stat
      for the number of outstanding requests. ``PHAB_ID=D113424``
    * 🚚 finagle-thrift,thriftmux: Tracing of RPC method names has been removed. This
      concern has moved into Scrooge. ``PHAB_ID=D115294``
    🗄 Deprecations
    • 🗄 finagle-core: c.t.f.BackupRequestLost has been deprecated. Please use a c.t.f.Failure flagged c.t.f.Failure.Ignorable instead. PHAB_ID=D113466
  • v17.11.0

    🆕 New Features

    * finagle-core: Add `ResponseClassifier`s, RetryOnTimeout and RetryOnChannelClosed,
      for exceptions that are commonly retried when building from ClientBuilder but had
      no MethodBuilder equivalents. ``PHAB_ID=D106706``
    * finagle-netty4: `Netty4Transporter` and `Netty4Listener` are now accessible, which
      allows external users to create their own protocols for use with Finagle on Netty 4.
    🐛 Bug Fixes
    • 🚤 finagle-exp: Fix race condition in LatencyHistogram which could lead to the wrong value returned for quantile. PHAB_ID=D106330

    💥 Breaking API Changes

    * finagle-core: Numerous overloads of `c.t.f.Server.serve` have been marked final.
    * finagle-thrift: Correctly send `mux.Request#contexts` in all cases. There were some
      cases in which `mux.Request#contexts` were not always propagated. The contexts are
      now always written across the transport. Note that there may be duplicated contexts
      between "local" context values and "broadcast" context values. Local values will
      precede broadcast values in sequence. ``PHAB_ID=D107921``
  • v17.10.0

    🚀 Release Version Format

    * 🚀 From now on, release versions will be based on release date in the format of
      YY.MM.x where x is a patch number. ``PHAB_ID=D101244``
    🆕 New Features
    • finagle-core: DeadlineFilter may now be created from the class and used as a regular Filter in addition to a stack module as before. PHAB_ID=D94517

    • finagle-mysql: Add ability to toggle the CLIENT_FOUND_ROWS flag. PHAB_ID=D91406

    • finagle-http: Separated the DtabFilter.Extractor from the ServerContextFilter into a new module: ServerDtabContextFilter. While this is still enabled in the default Http server stack, it can be disabled independently of the ServerContextFilter. PHAB_ID=D94306

    ⚙ Runtime Behavior Changes

    * finagle-netty4: `Netty4ClientEngineFactory` and `Netty4ServerEngineFactory` now
      validate loaded certificates in all cases to ensure that the current date
      range is within the validity range specified in the certificate. ``PHAB_ID=D88664``
    * finagle-netty4: `TrustCredentials.Insecure` now works with native SSL/TLS engines.
    * ⬆️ finagle-http2: Upgraded to the new netty http/2 API in netty version 4.1.16.Final,
      which fixes several long-standing bugs but has some bugs around cleartext http/2.
      One of the work-arounds modifies the visibility of a private field, so it's incompatible
      with security managers.  This is only true for http/2--all other protocols will be unaffected.
    * finagle-http: Netty 3 `HeaderMap` was replaced with our own implementation.
    🗄 Deprecations
    • finagle-base-http: With the intention to make c.t.f.http.Cookie immutable, set methods on c.t.f.http.Cookie have been deprecated:

      • comment_=
      • commentUrl_=
      • domain_=
      • maxAge_=
      • path_=
      • ports_=
      • value_=
      • version_=
      • httpOnly_=
      • isDiscard_=
      • isSecure_=

    Use the c.t.f.http.Cookie constructor to set domain, maxAge, path, value, httpOnly, and secure. comment, commentUrl, ports, version, and discard have been removed per RFC-6265. PHAB_ID=D82164.

    Alternatively, use the domain, maxAge, path, httpOnly, and secure methods to create a new Cookie with the existing fields set, and the respective field set to a given value. PHAB_ID=D83226

    • finagle-base-http: c.t.f.http.Cookie.isSecure and c.t.f.http.Cookie.isDiscard have been deprecated. Use for c.t.f.http.Cookie.isSecure. isDiscard has been removed per RFC-6265. PHAB_ID=D82164

    💥 Breaking API Changes

    * 🚚 finagle-mysql: Moved `Cursors.cursor` method to `Client` trait, and removed `Cursors` trait.
      This allows cursor queries to used with transactions.  ``PHAB_ID=D91789``
    * finagle-mux: Expose transport contexts in mux.Request and mux.Response. ``PHAB_ID=D92998``
    * 🚚 finagle-mux: The "leased" gauge has been removed from the mux client implementation since the
      metric is reported as the sum of the value over all clients which is unlikely to be useful.
  • v7.1.0

    🆕 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 on StackServer#close. A StackServer entry is registered in the ServerRegistry 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 and Netty4ServerEngineFactory now properly load all chain certificates when the SslClientConfiguration or SslServerConfiguration uses KeyCredentials.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 and c.t.f.http.Response to/from Strings and arrays of bytes have been deprecated. Use the methods on c.t.f.http.codec.HttpCodec instead:

      • For c.t.f.http.Request.encodeString, use c.t.f.Http.codec.HttpCodec.encodeRequestToString
      • For c.t.f.http.Request.encodeBytes, use c.t.f.Http.codec.HttpCodec.encodeRequestToBytes
      • For c.t.f.http.Request.decodeString, use c.t.f.Http.codec.HttpCodec.decodeStringToRequest
      • For c.t.f.http.Request.decodeBytes, usec.t.f.Http.codec.HttpCodec.decodeBytesToRequest`
      • For c.t.f.http.Response.encodeString, use c.t.f.Http.codec.HttpCodec.encodeResponseToString
      • For c.t.f.http.Response.decodeString, use c.t.f.Http.codec.HttpCodec.decodeStringToResponse
      • For c.t.f.http.Response.decodeBytes, use c.t.f.Http.codec.HttpCodec.decodeBytesToResponse


    💥 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.
    * 🚀 finagle-memcached: Remove deprecated method `BaseClient.release()`. Use
      `BaseClient.close()` instead. ``PHAB_ID=D83168``
    🗄 Deprecations
    • 🚚 finagle-memcached: Move to c.t.f.memcached.JavaClient, to c.t.f.memcached.JavaClientBase, and to c.t.f.memcached.ResultWithCAS. PHAB_ID=D83719

    • finagle-core: Added a new type member Context to Transport, and a method that returns a context, which has most of the methods currently directly on Transport. Also deprecates most of those methods--please start using the context instead of the Transport directly. Also added type parameters to Transporter, Listener, and type members to StackClient and StackServer. PHAB_ID=D83972

    • finagle-core: com.twitter.finagle.loadbalancer.DeterministicOrdering was renamed to com.twitter.finagle.loadbalancer.ProcessCoordinate and the internal Coord ADT was changed as well. PHAB_ID=D84452

    • 🚚 finagle-thrift: Move Thrift.Server.param.MaxReusableBufferSize to Thrift.param.MaxReusableBufferSize for both server and client use. PHAB_ID=D83190

  • v7.0.0

    🆕 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 for details.
    * 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:
    * 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:
    * 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.
    * 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`.
    * 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 for details.
    * 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.
    * 🚚 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`.
    * finagle-mysql: A number of implementation details were made private such as specific
      `Row` implementations and `ResultSet` builder functions that consume raw packets.
    * 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.
    * finagle-stats: `c.t.f.stats.MetricsStatsReceiver` no longer has constructor variants
      which take a `` as util-events is now deprecated. ``PHAB_ID=D64437``
    * 🚚 finagle-thrift: The Netty3 thrift implementation has been removed.
    * finagle-zipkin-core: `c.t.f.zipkin.core.SamplingTracer` no longer has constructor
      which takes a `` 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 in GenSerialClientDispatcher is now failed with a retryable Failure 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 flag serverErrorsAsFailures. 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 exporting pending_tasks and deviation_ms stats. See notify_ms instead. PHAB_ID=D65571

    • finagle-stats, finagle-zipkin-core: No longer publishing 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

  • v6.45.0

    🆕 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`.
    * finagle-core: c.t.f.factory.ServiceFactoryCache is now exported publicly.
    * finagle-core: Allow customization of load balancer behavior when no nodes
      are `Status.Open`. See the user guide for details:
    * 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.
    🐛 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 as c.t.f.Http.client().withStack and c.t.f.Http.server().withStack. RB_ID=915440

    • finagle-thrift, finagle-thriftmux: Clients created using newServiceIface now use the configured c.t.f.service.ResponseClassifier (or c.t.f.service.ResponseClassifier.Default if not configured) for per-method stats and usage in c.t.f.liveness.FailureAccrualFactory and c.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`).
    * 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. Use c.t.f.builder.ClientBuilder.tracer instead. Remove deprecated c.t.f.tracing.Tracer.Factory. Use c.t.f.tracing.Tracer instead. RB_ID=915481

    • 🚚 finagle-core: Remove deprecated c.t.f.Deadline. Use c.t.f.context.Deadline instead. RB_ID=915550

    • 🏗 finagle-core: Remove deprecated c.t.f.builder.ClientBuilder.cluster and Use c.t.f.builder.ClientBuilder.dest instead. RB_ID=915098

    • 🚚 finagle-core: Remove deprecated c.t.f.tracing.Trace.recordRpcName. Use c.t.f.tracing.Trace.recordRpc and c.t.f.tracing.Trace.recordServiceName instead. RB_ID=916426

    • 🏗 finagle-core: Remove deprecated c.t.f.builder.Cluster. Use com.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. Use c.t.f.http.Message.ContentTypeWwwForm instead. RB_ID=915543

    • 🚚 finagle-exception: Remove deprecated c.t.f.exception.Reporter.clientReporter and c.t.f.exception.Reporter.sourceReporter. Use c.t.f.exception.Reporter.monitorFactory instead. RB_ID=916403

    • 🚚 finagle-http: Remove deprecated c.t.f.http.HttpMuxer.pattern. Specify a route using c.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 the c.t.f.Var[Addr]-based apply methods on c.t.f.kestrel.MultiReaderMemcache or c.t.f.kestrel.MultiReaderThriftMux instead. RB_ID=914910
    • 🚚 finagle-kestrel: Removed from the project. RB_ID=915221

    • 🚚 finagle-mdns: Removed from the project. RB_ID=915216

    • 🚚 finagle-memcached: Remove deprecated c.t.f.memcached.BaseClient.cas methods. Use c.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; use c.t.f.Mysql.client.withCredentials instead
      • withDatabase; use c.t.f.Mysql.client.withDatabase instead
      • withCharset; use c.t.f.Mysql.client.withCharset instead
      • configured; use c.t.f.Mysql.client.configured instead


    • 🚚 finagle-native: Removed from the project. RB_ID=915204

    • finagle-netty4: AnyToHeapInboundHandler is gone. Use BufCodec while designing new Finagle protocols. RB_ID=915251

    • 🚚 finagle-ostrich4: Removed from the project. RB_ID=915327

    • 🚚 finagle-redis: ChannelBuffer methods and converters are removed. Use Buf-based API instead. Removed APIs: RB_ID=916015

      • c.t.f.redis.NettyConverters
      • c.t.f.redis.util.StringToChannelBuffer
    • 🚚 finagle-stream: Removed from the project. RB_ID=915200

    • 🚚 finagle-thrift: Remove deprecated c.t.f.thrift.transport.netty3.ThriftServerBufferedCodec and c.t.f.thrift.transport.netty3.ThriftServerBufferedCodecFactory. Use the c.t.f.Thrift object to build a server. RB_ID=915656

    • 🚚 finagle-thriftmux: Remove deprecated c.t.f.ThrifMux.withClientId. Use c.t.f.ThriftMux.client.withClientId. Remove deprecated c.t.f.ThrifMux.withProtocolFactory. Use c.t.f.ThriftMux.client.withProtocolFactory. RB_ID=915655

  • v6.44.0

    🆕 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.
    * 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 in Transport has been removed.
      • For client engines, the same two parameters as Finagle running Netty 3 are now used:
      • ClientSsl in Transport, which is used for configuring a client Engine's hostname, key credentials, trust credentials, cipher suites, protocols, and application protocols.
      • SslClientEngineFactory in SslClientEngineFactory, which determines how the Engine is created based off of an Address and an SslClientConfiguration.
      • For server engines, the same two parameters as Finagle running Netty 3 are now used:
      • ServerSsl in Transport, which is used for configuring a server Engine's key credentials, trust credentials, cipher suites, protocols, application protocols, and where the server supports or requires client authentication.
      • SslServerEngineFactory in SslServerEngineFactory, which determines how the Engine is created based off of an SslServerConfiguration.
      • 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 and Netty4ServerEngineFactory respectively.


    • 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])


    • finagle-core: c.t.f.ListeningServer no longer extends c.t.f.Group. Use c.t.f.ListeningServer.boundAddress to extract the address from the server. RB_ID=914693

    • 🚚 finagle-core: Remove deprecated Use c.t.f.addr.StabilizingAddr instead. RB_ID=914823

    • finagle-core: Constructors for c.t.f.ChannelException and its subclasses now have overloads that take Option\s instead of allowing null. 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 Names. RB_ID=914849

    • 🚚 finagle-core: Remove deprecated c.t.f.Resolver.resolve. Use c.t.f.Resolver.bind instead. Remove deprecated c.t.f.BaseResolver.resolve. Use c.t.f.Resolver.eval instead. RB_ID=914986

    • finagle-http: c.t.f.http.Http codec has disappeared as part of Netty 4 migration. Use c.t.f.Http.client or c.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


    • 🚚 finagle-memcached: Remove deprecated c.t.f.memcached.KetamaClientBuilder. Use c.t.f.Memcached.client to create a Memcached client. RB_ID=907352

    • 🚚 finagle-memcached: Remove deprecated c.t.f.memcached.replication.ReplicationClient. Use c.t.f.memcached.replication.BaseReplicationClient with clients created using c.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. Use c.t.f.Memcached.client to create Memcached clients. RB_ID=908442

    • 🚚 finagle-memcached: Remove deprecated c.t.f.memcached.Server class. Use c.t.f.memcached.integration.TestMemcachedServer for a quick test server. RB_ID=914827

    • ✂ Remove deprecated c.t.f.memcached.PartitionedClient object. Use c.t.f.memcached.CacheNodeGroup.apply instead of c.t.f.memcached.PartitionedClient.parseHostWeights. RB_ID=914827

    • ✂ Remove deprecated c.t.f.memcached.util.ParserUtils.DIGITS. Use "\d+$" instead. Remove deprecated c.t.f.memcached.util.ParserUtils.DigitsPattern. Use Pattern.compile(\d+$) instead. RB_ID=914827

    • 🚚 finagle-memcached: Remove old c.t.f.memcached.replicated.BaseReplicationClient and c.t.f.memcached.migration.MigrationClient, and most c.t.f.memcached.CachePoolCluster methods. RB_ID=910986

    • 🚚 finagle-memcached: Remove old c.t.f.memcached.migration.DarkRead, and c.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 to AnyToHeapInboundHandler 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 to c.t.f.liveness. This also means that the sessionFailureDetector flag is now c.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


    * 🚚 finagle-memcached: Remove dependency on com.twitter.common:io-json. ``RB_ID=914623``
  • v6.43.0

    🆕 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 use HeaderMap.apply or HeaderMap.newHeaderMap to construct a new HeaderMap 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. RB_ID=906697

    • 🚚 finagle-core: Move the argument from the apply method on com.twitter.finagle.client.Transporter to the newTransporter method of com.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 the Balancers 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 in Transport has been replaced by two parameters:
        • ClientSsl in Transport, which is used for configuring a client Engine's hostname, key credentials, trust credentials, cipher suites, protocols, and application protocols.
        • SslClientEngineFactory in SslClientEngineFactory, which determines how the Engine is created based off of an Address and an SslClientConfiguration.
      • The TLSHostname param in Transporter has been removed. Hostnames should be set as part of the SslClientConfiguration now.
      • The TLSServerEngine param in Transport has been replaced by two parameters:
        • ServerSsl in Transport, which is used for configuring a server Engine's key credentials, trust credentials, cipher suites, protocols, application protocols, and whether the server supports or requires client authentication.
        • SslServerEngineFactory in SslServerEngineFactory, which determines how the Engine is created based off of an SslServerConfiguration.
      • 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 using Netty4ServerEngineFactory.
      • 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 own SslServerEngineFactory which can explicitly handle those type of keys.
      • Note: By default, Finagle on Netty 3 will use the JdkClientEngineFactory and JdkServerEngineFactory respectively.


    • 🚚 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 and ClientBuilder.expSocksProxy are removed. Use $Protocol.withTransport.httpProxyTo instead (requires Netty 4 transport). RB_ID=909739

    • 🚚 finagle-kestrel: Remove the deprecated codec method on c.t.f.kestrel.MultiReaderMemcache. Use .stack(Kestrel.client) on the configured c.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, use c.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 the com.twitter.finagle.stats.includeEmptyHistograms flag to false to retain the behavior. RB_ID=907186

    • ♻️ finagle-thrift: ThriftServiceIface was refactored to be in terms of ThriftMethod.Args to ThriftMethod.SuccessType instead of ThriftMethod.Args to ThriftMethod.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 methods getStatusCode() and setStatusCode() have been deprecated. Use the methods statusCode and statusCode(Int) instead. RB_ID=908409

    • 🏗 finagle-core: and c.t.f.builder.ClientBuilder.cluster have been deprecated. Use c.t.f.builder.ClientBuilder.dest with a c.t.f.Name instead. RB_ID=914879

    • finagle-http: Now that c.t.f.http.Method and c.t.f.http.Version are represented by instances and thus easier to use from Java, the Java helpers c.t.f.http.Versions, c.t.f.http.Statuses, and c.t.f.http.Methods have been deprecated. RB_ID=907680

    • 🗄 finagle-memcached: c.t.f.memcached.replication.ReplicationClient is now deprecated. Use c.t.f.memcached.replication.BaseReplicationClient with clients created using c.t.f.Memcached.client. RB_ID=907384

    • finagle-thrift: As part of the Netty 4 migration, all c.t.f.Codec and c.t.f.CodecFactory types in finagle-thrift are now deprecated. Use the c.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``
    • finagle: Bump guava to 19.0. RB_ID=907807
  • v6.42.0

    🆕 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 a Buf. The semantics of calling the write method on chunked messages has changed from potentially throwing an exception based on the state of the Writer to always throwing an IllegalStateException. Existing users of the write(..) methods on chunked messages should use the Writer directly. RB_ID=900091

    • fingle-base-http: HeaderMap.getAll(key) now returns a Seq[String] as opposed to a Iterable[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 to apply and isDefinedAt 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 as String.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`
    ⚙ 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 specific TooLongMessageException 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``