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

Changelog History
Page 5

  • v6.41.0

    🆕 New Features

    * finagle-core: Added stat "pending_requests/rejected" for the number of requests
      rejected by `c.t.f.PendingRequestFilter`. ``RB_ID=898184``
    💥 Breaking API Changes
    • 🚚 finagle-core: Remove the Filter#andThen(Req1 => Future[Rep1]): Req2 => Future[Rep2] method. This overload is no longer usable in scala 2.12, because Service is a SAM. Because of the order in which SAMs get resolved, literal functions in scala will get confused about which method they should use. Instead of passing a Function directly, wrap the Function with a RB_ID=896524

    • 🚚 finagle-core: CancelledWriteException was removed as it is no longer used. RB_ID=896757

    • finagle-core: The structure of Context and its subtypes, LocalContext and MarshalledContext, have been significantly refined, eliminating StackOverflowErrors and memory leaks while also refining the API. The letClear() method, which cleared all items from the context, has been renamed to letClearAll to avoid confusion with other letClear methods which clear individual keys. The bulk letClear method now takes a collection of Key[_]s, making it usable from Java. Bulk let operations can now be done using a collection of KeyValuePairs. RB_ID=896663

    • 🚚 finagle-kestrel: The codec method has been removed from the kestrel MultiReader object. Configure a ClientBuilder protocol using the default thrift StackClient, Thrift.client, via the stack method of ClientBuilder. RB_ID=894297

    • 🚚 finagle-memcached: Remove deprecated cluster method on c.t.f.memcached.KetamaClientBuilder. RB_ID=898365

    ⚙ Runtime Behavior Changes

    * 🏗 finagle-core: `c.t.f.builder.ClientBuilder` remove deprecated methods.
      The same functionality is available through the Stack-based APIs or
      `ClientBuilder.configured`, with the exception of `channelFactory`, which
      has no analog because it exposes a Netty 3 API. ``RB_ID=893147``
        - `channelFactory`
        - `expHostConnectionBufferSize`
        - `hostConnectionIdleTime`
        - `hostConnectionMaxIdleTime`
        - `hostConnectionMaxLifeTime`
        - `hostConnectionMaxWaiters`
        - `readerIdleTimeout`
        - `recvBufferSize`
        - `sendBufferSize`
        - `writerIdleTimeout`
    * 0️⃣ finagle-core: Lower logging level used in `c.t.f.util.DefaultMonitor` for expected
      exceptions: `CancelledRequestException`, `TooManyWaitersException`,
      `CancelledConnectionException`, `FailedFastException`. ``RB_ID=895702``
    * 🔊 finagle-core: `c.t.f.util.DefaultMonitor` now logs most exceptions at
      `WARNING` level instead of `FATAL`. ``RB_ID=895983``
    * 0️⃣ finagle-core: `c.t.f.util.DefaultMonitor` works harder to find the appropriate
      log level by walking the exception's causes to find `c.t.util.TimeoutExceptions`
      and `c.t.logging.HasLogLevel`. ``RB_ID=896695``
    * finagle-core: The `c.t.f.service.Retries` module will now flag a response as
      `NonRetryable` if either the retry limit is reached or the retry budget is exhausted.
    * finagle-mdns: Uses only one implementation backed by jmdns instead of trying
      to use a platform specific implementation of DDNS if present. ``RB_ID=897917``
    * finagle-netty4: Client initiated TLS/SSL session renegotiations are now rejected
      by default. ``RB_ID=895871``
    * finagle-netty4: `ChannelTransport` no longer interrupts netty write operations
      in order to temporarily unblock rollout of netty4. This reverts netty4 back
      to netty3 semantics for writes. ``RB_ID=896757``
    🗄 Deprecations
    • 🗄 finagle-kestrel: Deprecate the codec method on c.t.f.kestrel.MultiReaderMemcache. Use .stack(Kestrel.client) on the configured c.t.f.builder.ClientBuilder instead. RB_ID=895989
  • v6.40.0

    🆕 New Features

    * finagle: Most libraries (excluding finagle-thrift{,mux}) no longer need to
      add an additional resolver that points to ``RB_ID=878967``
    * finagle: Introducing a new Finagle module `finagle-base-http` that provides
      a common ground for both Netty 3 (`finagle-http`) and Netty 4 (`finagle-netty4-http`)
      HTTP implementations. Netty 3 is still a default transport used in Finagle's
      `Http.client` and `Http.server`. ```RB_ID=884614``
    * finagle-core: Introduce the `c.t.f.client.DynamicTimeout` module allowing clients
      to specify call-site specific timeouts. ``RB_ID=885005``
    * finagle-core: A new module, `c.t.f.service.DeadlineFilter`, can be added to stack-based servers
      and clients, which rejects requests with expired deadlines ``RB_ID=895820``
    * finagle-memcached: Introduce `c.t.f.memcached.CasResult.replaced: Boolean`
      to help transition usage off of the deprecated `cas` client method to
      `checkAndSet`. ``RB_ID=891628``
    * finagle-thrift: We now depend on a fork of libthrift hosted in the Central Repository.
      The new package lives in the 'com.twitter' organization. This removes the necessity of
      depending on This also means that eviction will not be automatic and
      using a newer libthrift library requires manual eviction if artifacts are being pulled
      in transitively. ``RB_ID=885879``
    ⚙ Runtime Behavior Changes
    • 🌲 finagle-core: Monitor logging is improved in Finagle. RB_ID=878890

      • All exceptions caught in the stack are now logged by Finagle's DefaultMonitor (previously Util's RootMonitor) such that Twitter's logging framework is used instead of JDK logging.
      • DefaultMonitor is now installed implicitly such that it will be composed (via orElse) with the monitor passed by a user through the stack param. The logic behind this compostion is quite straightforward: exceptions that are't handled by a user-defined monitor propagated to the default monitor.
      • DefaultMonitor now logs upstream socket address, downstream socket address, and a client/server label if those are available.
      • RootMonitor is still used to handle fatal exceptions from pending side-effect-only closures (i.e., onFailure, onSuccess) on a service future/promise.
    • 🚚 finagle-core: c.t.f.service.DeadlineStatsFilter has been removed from the server stack, along with all related stats. The "admission_control/deadline/transit_latency_ms" stat has been moved to c.t.f.filter.ServerStatsFilter and re-scoped as "transit_latency_ms" RB_ID=895820

    • finagle-mux: com.twitter.finagle.Failures are now sent over the wire with their flags intact via com.twitter.finagle.mux.transport.MuxFailure in the previously unused Rdispatch context. This allows for greater signaling along a chain of services. See the "MuxFailure Flags" section of the mux protocol spec in finagle-mux/src/main/scala/c/t/f/mux/package.scala RB_ID=882431

    • finagle-netty4: The netty4 listener + transporter no longer manage direct byte buffers by default. is introduced to help protocol builders manage them. RB_ID=881648

    • 0️⃣ finagle-stats: Changed the default behavior of empty histograms to only export the count. Thus the com.twitter.finagle.stats.exportEmptyHistograms toggle now defaults to 0.0. RB_ID=882522

    💥 Breaking API Changes

    * 🔧 finagle: Some APIs around configuring TLS/SSL on Finagle clients have changed to
      unblock Netty 4 adoption. ``RB_ID=890935``
      - `c.t.f.Http.client.withTls(Netty3TransporterTLSConfig)` is removed. Use
        variations of `c.t.f.Http.client.withTransport.tls` instead.
      - `c.t.f.netty3.Netty3TransporterTLSConfig` is removed.
    * 🔧 finagle: Some APIs around configuring TLS/SSL on Finagle servers have changed to
      unblock Netty 4 adoption. ``RB_ID=891270``
      - `c.t.f.Http.server.withTls(Netty3ListenerTLSConfig)` is removed. Use
        variations of `c.t.f.Http.server.withTransport.tls` instead.
      - `c.t.f.netty3.Netty3ListenerTLSConfig` is removed.
    * 🚚 finagle-core: Removed the protected and unused method `read(permit: Permit): Future[Rep]`
      from `SerialClientDispatcher`. ``RB_ID=881978``
    * 🚚 finagle-core: Removed a gauge, `idle`, from `c.t.f.factory.ServiceFactoryCache`.
    * finagle-core: `ServiceTimeoutException` now extends `NoStackTrace`. ``RB_ID=886809``
    * finagle-core: Marked `com.twitter.finagle.util.ConcurrentRingBuffer` as
      private.  It doesn't fit the typical programming model we encourage for
      users of finagle, and so we found it was rarely used.  ``RB_ID=888801``
    * finagle-core: Marked `transform` in `com.twitter.finagle.Stack` as protected. It is
      too powerful and unnecessary for users, and should be used by implementors only.
    * 🚚 finagle-core: Removed the `StatsReceiver` argument from `TimeoutFilter`.  ``RB_ID=891380``
    * finagle-core: Stopped exporting a few metrics related to deadlines, and replaced with a simpler
      one.  There was a per-`TimeoutFilter` one named `timeout/expired_deadline_ms`, and a per-server
      one named `admission_control/deadline/deadline_budget_ms`.  We added instead a per-server one
      named `admission_control/deadline/exceeded_ms`. ``RB_ID=891380``
    * finagle-http: HttpMuxer now takes in a Seq[Route] instead of a
      Seq[(String, Service[Request, Response])]. ``RB_ID=886829``
    * finagle-http: As part of the first step towards restructuring Finagle HTTP modules
      required for Netty 4 adoption, HTTP params are moved from the inner object `c.t.f.Http.param`
      into their own package `c.t.f.http.param`. ``RB_ID=885155``
    * finagle-redis: A couple of methods had to be renamed (and return type changed) to
      unblock Netty 4 adoption. ``RB_ID=882622``
      - `Command.toChannelBuffer` renamed to `Command.toBuf` and return
        type changed from N3 `ChannelBuffer` to Finagle `Buf`.
      - `Command.toByteArray` is removed.
      - Both `Command.key` and `Command.value` now implemented in terms of `Buf`s
        (no `ChannelBuffers`).
    * finagle-redis: An API around `c.t.f.redis.protocol.Command` was modernized as part of
      major restructuring required for the Netty 4 adoption. ``RB_ID=885811``
      - `RedisMessage` (a common parent for both `Command` and `Reply`) has been removed.
      - The encoding machinery was restructured to eliminate duplicated and dead code.
    * 🚚 finagle-thrift: Removed deprecated `ThriftRichClient.newServiceIface` methods
      which did not take a label. Use the versions that take a String label.
    * 🚚 finagle-thrift: Removed deprecated `ThriftRichClient.newIface` methods based
      on `Groups`. Use the versions that a `dest` or `Name`. ``RB_ID=891004``
    * 🚚 finagle-thriftmux: Removed deprecated classes `ThriftMuxClient`, `ThriftMuxClientLike`,
      `ThriftMuxServer`, and `ThriftMuxServerLike`. ``RB_ID=880924``
    🐛 Bug Fixes
    • finagle-core: The withTlsWithoutValidation and tlsWithoutValidation APIs have been fixed for an issue on Java 8 where certificate validation was being attempted instead of bypassed. RB_ID=881660

    • finagle-http: The toggle implementation for com.twitter.finagle.http.serverErrorsAsFailures had a bug when toggled on. That toggle is no longer used and is superseded by com.twitter.finagle.http.serverErrorsAsFailuresV2. RB_ID=882151

    • finagle-netty4: Connecting to a Socks 5 proxy using Finagle with Netty 4 now works properly. This previously resulted in a timeout and ProxyConnectException. RB_ID=884344

    • finagle-netty4: Don't swallow bind failures. RB_ID=892217

    🗄 Deprecations

    * 🏗 finagle-core: `c.t.f.builder.ClientBuilder` deprecate some seldom used methods.
      The same functionality is available through the Stack-based APIs or
      `ClientBuilder.configured`. ``RB_ID=881612``
       - `hostConnectionIdleTime`
       - `hostConnectionMaxIdleTime`
       - `hostConnectionMaxLifeTime`
       - `hostConnectionMaxWaiters`
  • v6.39.0

    🆕 New Features

    * finagle-core: `com.twitter.finagle.Failure` has a new flag, `NonRetryable`,
      which signifies that a request should not be retried. The flag is respected by
      all of Finagle's retry mechanisms. ``RB_ID=878766``
    * 👍 finagle-thriftmux: Allow ThriftMux.Clients to be filtered. This is supported
      in the the StdStackClient but ThriftMux.Client is a StackBasedClient. ``RB_ID=874560``
    * finagle-netty4: Add boolean flag `com.twitter.finagle.netty4.poolReceiveBuffers` that
      enables/disables pooling of receive buffers (disabled by default). When enabled, lowers
      the CPU usage and allocation rate (GC pressure) with the cost of increased memory
      footprint at the startup. ``RB_ID=872940``
    * finagle-netty4: Add new histogram `receive_buffer_bytes` (only enabled with pooling)
      to keep track of the receive buffer sizes (useful for tuning pooling). ``RB_ID=877080``
    🗄 Deprecations
    • 🏗 finagle-core: c.t.f.builder.ClientBuilder deprecate some seldom used methods. The same functionality is available through the Stack-based APIs or ClientBuilder.configured. RB_ID=878009

      • readerIdleTimeout
      • writerIdleTimeout
      • recvBufferSize
      • sendBufferSize
      • channelFactory
      • expHostConnectionBufferSize
    • 🗄 finagle-kestrel: Deprecate c.t.f.kestrel.protocol.Kestrel(), c.t.f.kestrel.protocol.Kestrel(failFast), and c.t.f.kestrel.protocol.Kestrel.get(). To create a Kestrel client using ClientBuilder, use .stack(c.t.f.Kestrel.client). RB_ID=870686

    💥 Breaking API Changes

    * finagle-core: The constructors for both `c.t.f.netty3.Netty3Listener` and
      `c.t.f.netty3.Netty3Transporter` now take `Stack.Params` instead of
      individual parameters. ``RB_ID=871251``
    * 📦 finagle-thrift: The c.t.f.thrift.legacy package has been removed which included
      the public types `ThriftCall`, `ThriftReply`, and `ThriftCallFactory`.
    ⚙ Runtime Behavior Changes
    • finagle-core: Tolerate TraceIds that are greater than 64 bits in preparation of moving to 128 bit ids. RB_ID=874365

    • finagle-http: c.t.f.http.service.HttpResponseClassifier.ServerErrorsAsFailures now classifies a retryable nack as a ResponseClass.RetryableFailure. RB_ID=869182

    • finagle-http: c.t.f.Http.{Client,Server} is moving towards treating HTTP 5xx status codes as failures via c.t.f.http.service.HttpResponseClassifier.ServerErrorsAsFailures. This can be disabled by setting the toggle "com.twitter.finagle.http.serverErrorsAsFailures" to 0.0 or explicitly setting it using withResponseClassifier. RB_ID=869303, RB_ID=875367

    • 🚚 finagle-http: c.t.f.http.HttpServerDispatcher now removes the bodies from responses to HEAD requests in order to avoid a HTTP protocol error and logs the event at level error. Associated with this, the c.t.f.http.filter.HeadFilter will now strip the body from a chunked response, but in these cases the Writer associated with the response will receive a ReaderDiscarded exception if a write is attempted after the filter has run. RB_ID=872106

    • finagle-thrift: Also track response failures in the c.t.finagle.thrift.ThriftServiceIface#statsFilter in addition to successful responses that encode an Error or Exception. RB_ID=879075

    🐛 Bug Fixes

    * finagle-http: Fix issue in `c.t.finagle.http.RequestBuilder` when the URI host contains
      underscores. ``RB_ID=870978``
    * finagle-http: A connection for HTTP/1.0 or non-keep-alive requests is now closed
      gracefully so that all requests that have been issued received responses.
    * finagle-http: The HTTP/1.x server dispatcher no longer clobbers 'Connection: close'
      headers set by a service, resulting in the graceful shutdown of the connection.
    * finagle-netty4: `ChannelTransport` now drains messages before reading more data off the
      transport which should reduce memory pressure in streaming protocols. ``RB_ID=872639``
  • v6.38.0

    🆕 New Features

    * finagle-http: `HttpNackFilter` now handles both retryable and non-retryable nacks via a new
      header: "finagle-http-nonretryable-nack". These are converted to non-retryable `c.t.f.Failures`
      and counted by a new counter "nonretryable_nacks". ``RB_ID=865468``
    * finagle-toggle: Is no longer considered experimental. ``RB_ID=868819``
    💥 Breaking API Changes
    • finagle-kestrel: c.t.f.kestrel.protocol.ResponseToEncoding is now private[finagle]. RB_ID=866612

    • finagle-memcached: c.t.f.memcached.protocol.text.{CommandToEncoding, ResponseToEncoding}, c.t.f.memcached.protocol.text.client.{AbstractDecodingToResponse, ClientTransport, DecodingToResponse} are now private[finagle]. RB_ID=866612

    • 📦 finagle-netty4: Move numWorkers flag out of the package object so it gets a user friendly name: c.t.f.netty4.numWorkers instead of c.t.f.netty4$.package$.numWorkers. RB_ID=123567

    • 👷 finagle-core: c.t.f.netty3.WorkerPool is no longer visible outside of c.t.f.netty3. RB_ID=123567

    • finagle-core: The content parameter of the ClientSslContext and ClientSslContextAndHostname TlsConfig options has been renamed to context. RB_ID=868791

    ⚙ Runtime Behavior Changes

    * ⬇️ finagle-thriftmux: Removed "<server_label>/thriftmux/downgraded_connections" and
      "<server_label>/thriftmux/connections" gauges. Counters are still available at
      "<server_label>/thrifmux/connects" and "<server_label>thriftmux/downgraded_connects".
  • v6.37.0

    🗄 Deprecations

    * 🗄 finagle-core: `c.t.f.Deadline` is deprecated in favor of `c.t.f.context.Deadline`.
    💥 Breaking API Changes
    • 🚚 finagle-core: As part of a move away from encoding/decoding in the Netty pipeline, removed FrameEncoder and FrameDecoder types, found in c.t.f.codec. RB_ID=847716

    • finagle-core: Delete IdleConnectionFilter, which is no longer hooked up in the server, and no longer seems to be useful. RB_ID=856377

    • 🏗 finagle-core: Remove deprecated methods from c.t.f.builder.ClientBuilder RB_ID=864622

      • connectionTimeout, use tcpConnectTimeout
      • expFailFast, use failFast
      • buildFactory, use other buildFactory methods
      • build, use other build methods
    • finagle-exp: Abstract out parts of the DarkTrafficFilter for potential re-use. We also canonicalize the DarkTrafficFilter stats scope which changes from "darkTrafficFilter" to "dark_traffic_filter". E.g.: "dark_traffic_filter/forwarded", "dark_traffic_filter/skipped", and "dark_traffic_filter/failed". RB_ID=852548

    • finagle-mysql: Mysql has been promoted out of experimental. Please change all references of com.twitter.finagle.exp.{M,m}ysql to com.twitter.finagle.{M,m}ysql

    • 👀 finagle-redis: Server-side support for Redis is removed. See this finaglers@ thread (!topic/finaglers/dCyt60TJ7eM) for discussion. Note that constructors for Redis commands no longer accept raw byte arrays. RB_ID=848815

    • 🚚 finagle-redis: Redis codec (i.e., c.t.f.Codec) is removed. Use c.t.f.Redis.client instead. RB_ID=848815

    🆕 New Features

    * 0️⃣ finagle-core: Expose metrics on util's default `FuturePool` implementations
      `unboundedPool` and `interruptibleUnboundedPool`:
      "finagle/future_pool/pool_size", "finagle/future_pool/queue_size",
      "finagle/future_pool/active_tasks", and "finagle/future_pool/completed_tasks".
    * finagle-core: Mux Clients now propagate the number of times the client retried
      the request in the request's c.t.f.context.Context, available via
      c.t.f.context.Retries. ``RB_ID=862640``
    * finagle-http: HTTP Clients now propagate the number of times the client retried
      the request in the request's c.t.f.context.Context, available via
      c.t.f.context.Retries. ``RB_ID=864852``
    * finagle-thrift: maxThriftBufferSize is now tunable via parameter for Thrift
      servers. It previously only was for ThriftMux servers. ``RB_ID=860102``
    ⚙ Runtime Behavior Changes
    • finagle-http: HttpTransport now eagerly closes client connection after processing non-keepalive requests.

    • finagle-redis: c.t.f.redis.Client now uses the pipelining dispatcher. RB_ID=848815

    • finagle-serversets: c.t.f.serverset2.Stabilizer no longer uses a timer to implement stabilization periods if the periods are 0 seconds long. RB_ID=861561

    • finagle-core: 'c.t.f.Failure' has a new flag, Rejected, to indicate that a given request was rejected. All Failures generated with the Failure.rejected constructor are flagged Rejected and Restartable. RB_ID=863356

    • 🛠 finagle-core: c.t.f.FixedInetResolver now optionally retries failed DNS lookups with provided backoff, and c.t.f.serverset2.Zk2Resolver uses this retry functionality infinitely, exponentially backing off from 1 second to 5 minutes. RB_ID=860058

  • v6.36.0

    🗄 Deprecations

    * 🚚 finagle-http: Removed DtabFilter.Finagle in favor of DtabFilter.Extractor.
    * 🗄 finagle-zipkin: Deprecate `ZipkinTracer` in favor of `ScribeZipkinTracer`.
    💥 Breaking API Changes
    • 🏗 finagle: Builds are now only for Java 8 and Scala 2.11. See the blog post <>_ for details. RB_ID=828898

    • 👯 finagle: Finagle is no longer depending on Twitter's clone of JSR166e, JDK 8 API is used instead. RB_ID=833652

    • 📦 finagle-cacheresolver: package contents merged into finagle-memcached. RB_ID=833602

    • finagle-core: Renamed DeadlineFilter to DeadlineStatsFilter, which now only records stats for the number of requests with exceeded deadlines, the remaining deadline budget, and the transit latency of requests. It no longer rejects requests and has no configuration. We have decided not to pursue Deadline Admission Control at this time. RB_ID=829372

    • 🚚 finagle-core: ClientBuilder.socksProxy(SocketAddress) is removed. Use command line flags (see c.t.f.socks.SocksProxyFlags.scala) instead. RB_ID=834634

    • 🚚 finagle-core: Removed "closechans" and "closed" counters from ChannelStatsHandler. RB_ID=835194

    • 🚚 finagle-core: Removed the "load" gauge from StatsFilter as it was duplicated by the "pending" gauge. RB_ID=835199

    • 🚚 finagle-core: c.t.finagle.NoStacktrace is removed. Use scala.util.control.NoStackTrace instead. RB_ID=833188

    • 🚚 finagle-core: c.t.finagle.Failure.withStackTrace is removed. Use system property scala.control.noTraceSuppression instead to fill stacktraces in Finagle's failures. RB_ID=833188

    • 🚚 finagle-core: c.t.f.filter.RequestSerializingFilter is removed. Use c.t.f.filter.RequestSemaphoreFilter instead. RB_ID=839372

    • finagle-core: SessionParams no longer contains acquisitionTimeout. Instead, it was extracted into ClientSessionParams. RB_ID=837726

    • finagle-core: Changed visibility of PipeliningDispatcher to private[finagle]. Clients should not be affected, since it's not a part of the end-user API. RB_ID=843153.

    • finagle-core: Simplified and unified the constructors for FailureAccrualFactory into a single constructor. RB_ID=849660

    • 🗄 finagle-http: Deprecate channelBufferUsageTracker in favor of maxRequestSize. RB_ID=831233

    • finagle-http: HttpClientDispatcher, HttpServerDispatcher, and ConnectionManager are no longer public. RB_ID=830150

    • 🚚 finagle-redis: Deprecated methods have been removed from the client API. RB_ID=843455

    • 📦 finagle-redis: c.t.f.redis.*Commands traits are now package-private. RB_ID=843455

    • finagle-redis: Replace ChannelBuffer with Buf in client's:

      • HashCommands: RB_ID=843596
      • ListCommands: RB_ID=844596
      • BtreeSortedSetCommands: RB_ID=844862
      • HyperLogLogCommands: RB_ID=844945
      • PubSubCommands: RB_ID=845087
      • SetCommands: RB_ID=845578
      • SortedSetCommands: RB_ID=846074
    • 🚚 finagle-thrift: As part of the migration off of Codec, remove c.t.f.thrift.ThriftClientBufferedCodec and c.t.f.thrift.ThriftClientBufferedCodecFactory which were used by ClientBuilder.codec and ServerBuilder.codec. Replace usage with ClientBuilder.stack(Thrift.client.withBufferedTransport) or ServerBuilder.stack(Thrift.server.withBufferedTransport). RB_ID=838146

    • finagle-memcached: c.t.f.memcached.Client now uses c.t.bijection.Bijection instead of c.t.u.Bijection. RB_ID=834383

    • 🚚 finagle-zipkin: Moved case classes and companion objects Span, ZipkinAnnotation, BinaryAnnotation, Endpoint, Sampler and SamplingTracer to finagle-zipkin-core. RB_ID=840494

    • 🚚 finagle-mysql: Removed c.t.f.exp.mysql.transport.MysqlTransporter, as it was not useful for it to be public. RB_ID=840718

    🐛 Bug Fixes

    * finagle-core: PipeliningDispatcher now serializes "write and enqueue Promise" so it's no longer
      possible for the wrong response to be given to a request. ``RB_ID=834927``
    * finagle-http: Servers which aggregate content chunks (streaming == false) now return a 413
      response for streaming clients who exceed the servers' configured max request size.
    * finagle-mysql: `c.t.f.exp.mysql.PreparedCache` now closes prepared statements when no one holds
      a reference to the cached future any longer.  This fixes a race condition where the cached
      future could be evicted and the prepared statement closed while a user tries to use that
      prepared statement.  ``RB_ID=833970``
    * 👀 finagle-netty4-http: Servers now see the correct client host address for requests. ``RB_ID=844076``
    🆕 New Features
    • ⏱ finagle-core: Added gauge, "scheduler/blocking_ms" measuring how much time, in milliseconds, the com.twitter.concurrent.Scheduler is spending doing blocking operations on threads that have opted into tracking. This also moves the "scheduler/dispatches" gauge out of TwitterServer into Finagle. RB_ID=828289

    • finagle-core: Added a FailureAccrualPolicy that marks an endpoint dead when the success rate in a specified time window is under the required threshold. RB_ID=829984

    • 0️⃣ finagle-core: StackServer now installs an ExpiringService module by default. This allows servers to have control over session lifetime and brings the StackServer to feature parity with ServerBuilder. RB_ID=837726

    • finagle-exp: Changed DarkTrafficFilter to forward interrupts to dark service. RB_ID=839286

    • 🚚 finagle-http: ContextFilter and Dtab-extractor/injector logic has been moved from the http dispatchers into the client and server stacks. RB_ID=840600

    • finagle-mysql: Added a withMaxConcurrentPreparedStatements method to the client which lets you specify how many prepared statements you want to cache at a time. RB_ID=833970

    • 👍 finagle-redis: Adds support for scripting commands. RB_ID=837538

    • 👍 finagle-netty4: SOCKS5 proxy support. RB_ID=839856

    • finagle-zipkin-core: A new module containing most of the functionality from finagle-zipkin, leaving finagle-zipkin with only Scribe specific code and a service loader. This allows for other transports to be implemented in separate modules. For example the upcoming finagle-zipkin-kafka. RB_ID=840494

    • finagle-thriftmux: Introduce a Netty4 implementation of mux and thrift-mux. RB_ID=842869

    ⚙ Runtime Behavior Changes

    * 🔧 finagle-core: For SSLEngine implementations supplied via configuration or
      created by Finagle, the setEnableSessionCreation method is no longer called.
      The supplied value, true, is the default for JSSE implementations, and for
      other engines this can be an unsupported operation. ``RB_ID=845765``
    * finagle-core: Pipelined protocols (memcached, redis) no longer prevent
      connections from being cut by interrupts.  Instead, interrupts are masked
      until a subsequent ten second timeout has expired without a response in the
      pipeline. ``RB_ID=843153``
    * finagle-core: MonitorFilter now installs the parameterized monitor, and will
      no longer fail the request automatically if any exception is thrown
      synchronously (like if an exception is thrown in an onSuccess or onFailure
      block).  This removes a race, and makes Finagle more deterministic.
  • v6.35.0

    🗄 Deprecations

    * 📦 finagle: remove unused finagle-validate and finagle-testers packages. ``RB_ID=818726``
    ⚙ Runtime Behavior Changes
    • finagle-core: DeadlineFilter is now per-connection, so the max rejection percentage is not shared across clients. This prevents a single client from exceeding the rejection budget. RB_ID=813731.

    • 🚚 finagle-core: The use of keytool in PEMEncodedKeyManager has been removed and instead the keystore is being loaded from the pkcs12 file. RB_ID=832070

    • finagle-http: Local Dtabs are now encoded into the Dtab-Local header. X-Dtab headers may still be read but should be considered deprecated. RB_ID=815092

    • 🚚 finagle-thrift: Removed duplicate "thrift" label on Thrift/ThriftMux scrooge-related server stats. RB_ID=816825

    💥 Breaking API Changes

    * 🗄 finagle-redis: Deprecated ChannelBuffer exposing apis for string commands. ``RB_ID=817766``.
    * 🚚 finagle-core: DefaultClient has been removed. Implementors should prefer `c.t.f.StackClient`
    * finagle-core: When a client is created, its server set resolution is started eagerly.
    * finagle-core: Dentry now takes a Dentry.Prefix instead of a Path. ``RB_ID=813914``
    * 🚚 finagle-core: Remove `*.client.withTransport.socksProxy` param as part of the initiative to
      move to CLI flags based configuration for SOCKS. ``RB_ID=842512``
    * finagle-thrift/thriftmux: Thrift servers constructed using `Thrift.serveIface` now use
      `Thrift.server.serveIface`. ThriftMux servers constructed using `ThriftMux.serveIface` now use
      `ThriftMux.server.serveIface`. ``RB_ID=824865``
    * 🚚 finagle-cache-resolver: `c.t.f.cacheresolver.ZookeeperCacheNodeGroup` has been removed from the
      API since we no longer check for the zookeeper data for the cache pool size to refresh for the
      changes in the serverset. ``RB_ID=811190``
    🆕 New Features
    • 🔧 finagle-http: http 1.1 running on netty4 is configurable via c.t.finagle.netty4.http.exp.Netty4Impl. It has not been tested in production and should be considered beta software. RB_ID=828188

    • finagle-core: Multi-line Dtabs may now contain line-oriented comments beginning with '#'. Comments are omitted from parsed Dtabs. RB_ID=818752

    • finagle-http: new stack params MaxChunkSize, MaxHeaderSize, and MaxInitialLineLength are available to configure the http codec. RB_ID=811129

    • 🛰 finagle-mux: Mux now has support for fragmenting Tdispatch and Rdispatch payloads. This helps with head-of-line blocking in the presence of large payloads and allows long transmissions to be interrupted. RB_ID=794641.

    • 🛠 finagle-core: Dtabs allow wildcard path elements in prefixes. RB_ID=813914

    • 👍 finagle-netty4: HTTP proxy support for any Finagle Netty 4 client. RB_ID=819752

    • finagle-core: Gauge for dns resolutions awaiting lookups. RB_ID=822410

    🐛 Bug Fixes

    * finagle-http: Ensure that service closure is delayed until chunked response bodies
      have been processed. ``RB_ID=813110``
    * finagle-stats: Ensure that histogram snapshotting does not fall behind if snapshot()
      is not called at least once per interval. ``RB_ID=826149``
  • v6.34.0

    ⚙ Runtime Behavior Changes

    * finagle-core: GenSerialClientDispatcher fails pending and subsequent requests when
      its underlying transport closes. ``RB_ID=807590``
    🆕 New Features
    • finagle-core: Include upstream/downstream addresses/client ids and request trace id in exceptions that extend c.t.f.HasRemoteInfo (including c.t.f.SourcedException), accessible via the remoteInfo value. RB_ID=797082

    • finagle-core: Introduce c.t.f.service.ResponseClassifier for HTTP servers, which allows developers to give Finagle the additional application specific knowledge necessary in order to properly classify responses.RB_ID=800179

    • 🛰 finagle: Export two new histograms: request_payload_bytes and response_payload_bytes for the following protocols: HTTP (non-chunked), Mux, ThriftMux and Thrift. RB_ID=797821

    • finagle-core: Define c.t.f.Address to represent an endpoint's physical location. Resolvers and namers may attach metadata such as weight to individual endpoint addresses. RB_ID=792209

    • finagle-http: Introduce convenience extractors to pattern match c.t.f.http.Response.status against the different categories. RB_ID=802953

    • 📜 finagle-http: Add toBoolean method in StringUtil to parse strings to boolean consistently. RB_ID=804056

    • finagle-http: Servers now actually decompress requests when decompression is turned on. RB_ID=810629

    • 👍 finagle-redis: Add support for SENTINEL commands. RB_ID=810663

    • 👍 finagle-redis: Support for Pub/Sub. RB_ID=810610

    💥 Breaking API Changes

    * finagle-core: `c.t.f.Codec.prepareConnFactory(ServiceFactory)` is marked `final`, override
      `c.t.f.Codec.prepareConnFactory(ServiceFactory, Stack.Params)` instead. ``RB_ID=797821``
    * finagle-core: `c.t.f.Codec.newClientDispatcher(Transport)` is marked `final`, override
      `c.t.f.Codec.newClientDispatcher(Transport, Stack.Params)` instead. ``RB_ID=797821``
    * 🚚 finagle-core: Removed deprecations: ``RB_ID=800974``
      - Removed `c.t.f.Service.release`, replace usage with `Service.close()`.
      - Removed `c.t.f.ServiceFactory.make`, replace usage with `ServiceFactory.apply`.
      - Removed `c.t.f.ProxyServiceFactory`, replace usage with `ServiceFactoryProxy`.
      - Removed deprecated `c.t.f.service.FailureAccrualFactory` constructor.
      - Removed `c.t.f.netty3.ChannelBufferBuf.apply`, replace usage with `ChannelBufferBuf.Owned.apply`.
      - Removed `c.t.f.util.InetAddressUtil.Loopback`, replace usage with ``.
      - Removed `c.t.f.tracing.TracingFilter`, replace usage with `TraceInitializationFilter` and `(Client|Server)TracingFilter`.
    * finagle-core: `c.t.f.Addr.Bound.addr` type changed from `Set[SocketAddress]` to
      `Set[c.t.f.Address]`. We provide a migration guide below for the most common cases.
      Callers of `c.t.f.Addr.Bound.addr` must handle `Set[c.t.f.Address]` instead of
      `Set[SocketAddresses]`. If you do something with the `SocketAddress` and expect the underlying
      type to be `InetSocketAddress`, use `c.t.f.Address.Inet.addr` to get the underlying
      `c.t.f.Addr` constructors and `c.t.f.Name.bound` method now accept `c.t.f.Address` instead
      of `SocketAddress`. For most cases, wrapping the `InetSocketAddress` in an `Address.Inet`
      will fix the compile error.
      Any other `SocketAddress` subclass is currently incompatible with `c.t.f.Address`. Instead,
      you should encode any additional information in the metadata field of `c.t.f.Address.Inet`
      or `c.t.f.exp.Address.ServiceFactory`. ``RB_ID=792209``
    * finagle-core: Delete `c.t.f.ServiceFactorySocketAddress` and replace usages with
      `c.t.f.exp.Address.ServiceFactory`. ``RB_ID=792209``
    * finagle-core: Delete `c.t.f.WeightedSocketAddress` and instead use
      `c.t.f.addr.WeightedAddress` to represent address weights. ``RB_ID=792209``
    * 🏗 finagle-core: `c.t.f.builder.ClientBuilder.hosts` takes a Seq of `InetSocketAddress` instead of
      `SocketAddress`. If you get a compile error, change the static type to `InetSocketAddress` if
      you can. Otherwise, cast it at runtime to `InetSocketAddress`. ``RB_ID=792209``
    * finagle-core: `c.t.f.client.Transporter.EndpointAddr` takes a `c.t.f.Address` as its
      parameter instead of `SocketAddress`. ``RB_ID=792209``
    * 🚚 finagle-core: `c.t.f.service.FauilureAccrualFactory.Param(FailureAccrualPolicy)` is removed -
      it's not safe to configure Failure Accrual with a shareable instance of the policy, use
      `() => FailureAccrualPolicy` instead. ``RB_ID=802953``
    * 🚚 finagle-core: `$Client.withSessionQualifier.failureAccrualPolicy` has been removed from the API
      since it enables an experimental feature (use Stack's `.configured` API instead). ``RB_ID=802953``
    * 🚚 finagle-core: `c.t.f.service.exp.FailureAccrualPolicies` (Java-friendly API) has been removed -
      use `c.t.f.service.exp.FailureAccrualPolicy` instead.
    * 🚚 finagle-core: DefaultServer is removed. Protocol implementors should use StackServer instead.
    * finagle-memcached: `c.t.f.memcached.protocol.text.Memcached` no longer takes a `StatsReceiver`,
      pass it to a `(Client/Server)Builder` instead. ``RB_ID=797821``
    * finagle-redis: `c.t.f.redis.Redis` no longer takes a `StatsReceiver`, pass it to a
      `(Client/Server)Builder` instead. ``RB_ID=797821``
    * finagle-core: `c.t.f.http.MapHeaderMap` no longer takes a `mutable.Map[String, Seq[String]]` as
      a constructor parameter. `apply` method provides a similar functionality.
    🐛 Bug Fixes
    • 🛠 finagle-core: Fixed getAll method on c.t.f.http.MapHeaderMap, now it is case insensitive. apply method was altering the provided header names. This is fixed it is now possible to iterate on the original header names.
  • v6.33.0

    🆕 New Features

    * finagle-core: Introduce the `c.t.f.service.PendingRequestFactory` module in the client Stack.
      The module allows clients to limit the number of pending requests per connection. It is disabled
      by default. ``RB_ID=795491``
    * finagle-core: Introduce the `c.t.f.filter.ServerAdmissionControl` module in the server Stack,
      which is enabled through the param `c.t.f.param.EnableServerAdmissionControl`. Users can define
      their own admission control filters, which reject requests when the server operates beyond
      its capacity. These rejections apply backpressure and allow clients to retry requests on
      servers that may not be over capacity. The filter implementation should define its own logic
      to determine over capacity. One or more admission control filters can be installed through
      the `ServerAdmissionControl.register` method. ``RB_ID=776385``
    * finagle-core: Introduce `c.t.f.service.ResponseClassifier` which allows developers to
      give Finagle the additional application specific knowledge necessary in order to properly
      classify them. Without this, Finagle can only safely make judgements about transport
      level failures. This is now used by `StatsFilter` and `FailureAccrualFactory` so that
      application level failures can be used for both success metrics and failure accrual.
    * finagle-core: Added a new 'Endpoints' section on client pages, listing the weights, paths,
      and resolved endpoints for each dtab.``RB_ID=779001``
    * finagle-core: Introduce discoverable stack params which are available on every client/server
      via the `with`-prefixed methods. ``RB_ID=781833``
    * finagle-memcached: Added `c.t.f.memcached.BaseClient.checkAndSet` which exposes the difference
      between a conflict and a not found result.
    * finagle-mux: Add a Wireshark dissector that can decode Mux messages. ``RB_ID=779482``
    * finagle-stats: Define flag `c.t.f.stats.statsFilterFile` as GlobalFlag[Set[File]] to take
      comma-separated multiple files. ``RB_ID=793397``
    * finagle-mux: Tinit/Rinit are now available and permit feature negotiation. ``RB_ID=793350``
    🗄 Deprecations
    • 🗄 finagle-memcached: c.t.f.memcached.BaseClient.cas is deprecated in favor of the richer checkAndSet method.

    💥 Breaking API Changes

    * 🚚 finagle-core: All the deprecated exceptions from `Exceptions.scala` have been removed.
    * 🚚 finagle-thrift: Remove the `framed` attributes from `c.t.f.Thrift.Client` and
      `c.t.f.Thrift.Server`.  This behavior may now be controlled with `c.t.f.Thrift.param.Framed`.
    * 🏗 finagle-core: Unused `c.t.f.builder.NonShrinkingCluster` has been removed.
    * finagle-thrift: `c.t.f.ThriftRichClient` has a new abstract protected method
      `responseClassifier: ResponseClassifier`. If your implementation does not need
      this, you can implement it with `ResponseClassifier.Default`. ``RB_ID=791470``
    ⚙ Runtime Behavior Changes
    • finagle-thrift,thriftmux: Deserialization of Thrift responses now happens as part of service application which means that it will now be part of the latency reported by StatsFilter. The actual latency as perceived by clients will not have changed, but for clients that spend significant time deserializing and do not have higher level metrics this may come as a surprise. RB_ID=772931

    • 0️⃣ finagle-mux,thriftmux: The default closeTimeout in ping based failure detection is changed from Duration.Top to 4 seconds, to allow a session to be closed by default when a ping response times out after 4 seconds. This allows sessions to be reestablished when there may be a networking issue, so that it can choose an alternative networking path instead. RB_ID=773649

    💥 Breaking API Changes

    * 🚚 finagle-thrift: Remove the `framed` attributes from `c.t.f.Thrift.Client` and
      `c.t.f.Thrift.Server`.  This behavior may now be controlled with `c.t.f.Thrift.param.Framed`.
  • v6.32.0