Finagle v20.7.0 Release Notes

Release Date: 2020-07-22 // 18 days ago
  • 20.7.0

    💥 Breaking API Changes

    • finagle-core: Correct the spelling of Tracing.recordClientSendFrargmet() to
      Tracing.recordClientSendFragment() 30726c01
    • finagle-redis: Use StrictKeyCommand for XDEL d174f9d6
    • finagle-toggle: Toggle.isDefinedAt(i: Int) has become Toggle.isDefined. Additionally, a new method Toggle.isUndefined has been added. 3bb78ce8
    • 🚚 finagle-zipkin-scribe: The scribe.thrift file was moved to finagle-thrift/src/main/thrift under a new
      namespace. com.twitter.finagle.thrift.scribe.(thrift|thriftscala) 01a20b79

    🐛 Bug Fixes

    • 🔧 finagle-zipkin-scribe: The scribe client should be configured using the NullTracer. Otherwise, spans
      produced by the client stack will be sampled at initialSampleRate. 0446dd3e

Previous changes from v20.6.0

  • ⚙ Runtime Behavior Changes

    • finagle-core: FailFastFactory is now disabled at runtime when a client's destination has only
      one endpoint, since the client cannot do anything meaningful by breaking the circuit early.
      0️⃣ This is recommended as a best practice anyway, now it's the default behavior. Less things
      🔧 to configure and worry about! f2c100e8
    • 🛠 finagle-core: namer annotations are prefixed with "clnt/". c8680fff
    • finagle-core: namer.success & namer.failure are not annotated as they are not request based.
      🚚 namer.tree annotation was also removed to reduce the size of traces. c8680fff
    • finagle-core: The offload filter client annotation is annotated under the child request span instead of
      its parent. The offload filter annotations are also changed to be binary annotations with the key
      (clnt|srv)/finagle.offload_pool_size and the value being the pool size 011f096d
    • finagle-memcached: The key in RetrievalCommand are ommited in traces. The total number of Hits
      and Misses are annotated via a counter instead under clnt/memcached.(hits/misses) 6fd0e2c9

    💥 Breaking API Changes

    • finagle-core: Migrated List[Tracer] to Seq[Tracer] in Tracing, and tracersCtx.
    • 🛰 finagle-core: PayloadSizeFilter and WireTracingFilter are now public APIs.
    • finagle-zipkin-core: initialSampleRate flag will now fail if the sample rate is not in the range
      [0.0, 1.0]. 180f333c
    • 🛠 finagle-mysql: mysql client annos are prefixed with clnt/ 37d55c2a

    🆕 New Features

    • finagle-thrift: Expose c.t.f.thrift.exp.partitioning.PartitioningStrategy,
      the bundled PartitioningStrategy APIs are public for experiments.
    • finagle-http: Add LoadBalancedHostFilter to allow setting host header after LoadBalancer
    • finagle-core: Trace the request's protocol identified by the ProtocolLibrary of the client
      stack. This is annotated under clnt/finagle.protocol. 464bbeb6
    • finagle-core: Add letTracers to allow setting multiple tracers onto the tracer stack.
    • finagle-core: DeadlineFilter now exposes a metric admission_control/deadline/remaining_ms
      which tracks the remaining time in non-expired deadlines on the server side. An increase in this
      🚤 stat, assuming request latency is constant and timeout configurations upstream have not changed,
      may indicate that upstream services have become slower. 939f9a3e
    • finagle-redis: Make partitionedClient accessible. 7ba107e1
    • finagle-core, finagle-http, finagle-thriftmux: introduce MethodBuilder maxRetries
      🔧 configuration. A ThriftMux or HTTP method can now be configured to allow a specific number of
      🔧 maximum retries per request, where the retries are gated by the configured RetryBudget. This
      🔧 configuration can be applied via Http.client.methodBuilder(name).withMaxRetries(n) or
      ThriftMux.client.methodBuilder(name).withMaxRetries(n). 4328896d
    • finagle-memcached: Annotate the shard id of the backend the request will reach. 6fd0e2c9

    🐛 Bug Fixes

    • 🚚 finagle-zipkin-core: Remove flush and late-arrival annotations, which artificially extend
      trace durations. 967ef1fc
    • finagle-core: namer annotations are added at the Service level instead of ServiceFactory as
      traces are intended to be request based c8680fff