Finagle v20.12.0 Release Notes

  • ๐Ÿ†• New Features

    
    * finagle-benchmark: Add a benchmark for LocalContext. ``PHAB_ID=D588632``
    
    * finagle-core: Add a new filter, `ClientExceptionTracingFilter`, that records error annotations for
      completed spans. Annotations include `error`, `exception.type`, and `exception.message`. 
      See https://github.com/open-telemetry/opentelemetry-specification for naming details.
      ``PHAB_ID=D583001``
    
    * finagle-core: Add a new stat (histogram) that reports how long a task has been sitting in the
      offload queue. This instrumentation is sampled at the given interval (100ms by default) that
      can be overridden with a global flag `com.twitter.finagle.offload.statsSampleInterval`.
      ``PHAB_ID=D571980``
    
    * finagle-core: Add a new experimental flag `com.twitter.finagle.offload.queueSize` that allows to
      put bounds on the offload queue. Any excess work that can't be offloaded due to a queue overflow
      is run on IO (Netty) thread instead. Put this way, this flag enables the simplest form of
      backpressure on the link between Netty and OffloadFilter. ``PHAB_ID=D573328``
    
    * finagle-netty4: Add `ExternalClientEngineFactory` to the open source version of Finagle. This
      `SslClientEngineFactory` acts as a better example of how to build custom client and server engine
      factories in order to reuse SSL contexts for performance concerns. ``PHAB_ID=D572567``
    
    * ๐Ÿ”ง finagle-core: Provide `com.twitter.finagle.naming.DisplayBoundName` for configuring how to
      display the bound `Name` for a given client in metrics metadata. ``PHAB_ID=D573905``
    
    * finagle-core: Provide `ClientParamsInjector`, a class that will be service-loaded at run-time
      by Finagle clients, and will allow generic configuration of all sets of parameters.
      ``PHAB_ID=D574861``
    
    ๐Ÿ’ฅ Breaking API Changes
    
    • ๐Ÿšš finagle-core: Move DarkTrafficFilter and AbstractDarkTrafficFilter from the experimental finagle-exp to supported finagle-core. The package containing these classes changed from c.t.finagle.exp to c.t.finagle.filter. PHAB_ID=D572384

    • ๐Ÿšš finagle-core, finagle-thrift: Move ForwardingWarmUpFilter and ThriftForwardingWarmUpFilter from the experimental finagle-exp to supported finagle-core, and finagle-thrift, respectively. The package containing ForwardingWarmUpFilter changed from c.t.finagle.exp to c.t.finagle.filter, and the package containing ThriftForwardingWarmUpFilter changed from c.t.finagle.exp to c.t.finagle.thrift.filter. PHAB_ID=D573545

    • finagle-core: FailureAccrualFactory.isSuccess has been replaced with the method def classify(ReqRep): ResponseClass to allow expressing that a failure should be ignored. PHAB_ID=D571093

    โš™ Runtime Behavior Changes

    
    * 0๏ธโƒฃ finagle-core: Use Scala default implementation to calculate Hashcode and equals method for
      ServiceFactoryProxy. ``PHAB_ID=D569045``
    
    * โšก๏ธ finagle: Update build.sbt to get aarch64 binaries and try the fast path acquire up to 5 times
      before failing over to the AbstractQueuedSynchronizer slow path in NonReentrantReadWriteLock
      for Arm64. ``PHAB_ID=D589167``
    
    ๐Ÿ› Bug Fixes
    ~~~~~~~~~
    
    * ๐Ÿ‘€ finagle-core: Users should no longer see the problematic
      `java.lang.UnsupportedOperationException: tail of empty stream` when a `c.t.f.s.RetryPolicy`
      is converted to a String for showing. ``PHAB_ID=D582199``