Finagle 6.36.0

@cacoco cacoco released this Jul 7, 2016 · 29 commits to develop since this release


  • 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.

  • 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.

  • finagle-core: Removed "closechans" and "closed" counters from ChannelStatsHandler.

  • 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.

  • 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-http: Deprecate channelBufferUsageTracker in favor of maxRequestSize.

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

  • finagle-redis: Deprecated methods have been removed from the client API.

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

  • 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-memcached: c.t.f.memcached.Client now uses c.t.bijection.Bijection
    instead of c.t.u.Bijection. RB_ID=834383

  • 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-zipkin: Moved case classes and companion objects Span, ZipkinAnnotation,
    BinaryAnnotation, Endpoint, Sampler and SamplingTracer to finagle-zipkin-core.

  • 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

  • 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.

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

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.


Finagle 6.35.0

@cacoco cacoco released this Apr 27, 2016 · 227 commits to develop since this release

Note: This is the final release that will support Scala 2.10 and Java 7.


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


Finagle 6.34.0

@cacoco cacoco released this Mar 10, 2016 · 337 commits to develop since this release

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.

  • 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.

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.


  • 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 bee removed -
    use c.t.f.service.exp.FailureAccrualPolicy 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 6.33.0

@kevinoliver kevinoliver released this Feb 4, 2016 · 387 commits to develop since this release

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


  • 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. RB_ID=774658
  • 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

  • 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.


Finagle 6.31.0

@kevinoliver kevinoliver released this Dec 3, 2015 · 488 commits to develop since this release

New Features

  • finagle-core: c.t.f.Server now has a serveAndAnnounce method that accepts a SocketAddress
    as an address. RB_ID=758862

  • finagle-core: c.t.f.service.Retries now supports adding delay between each automatic retry.
    This is configured via the Retries.Budget. RB_ID=768883

  • finagle-core: FailureAccrualFactory now uses a FailureAccrualPolicy to determine when to
    mark an endpoint dead. The default policy, FailureAccrualPolicy.consecutiveFailures(),
    mimicks existing functionality, and FailureAccrualPolicy.successRate() operates on the
    exponentially weighted average success rate over a window of requests.RB_ID=756921

  • finagle-core: Introduce c.t.f.transport.Transport.Options to configure transport-level options
    (i.e., socket options TCP_NODELAY and SO_REUSEADDR). RB_ID=773824

  • finagle-http: c.t.f.http.exp.Multipart now supports both in-memory and on-disk file uploads.

  • finagle-netty4: Hello World. Introduce a Listener for Netty 4.1. This is still considered beta.

  • finagle-netty4: Introduce ChannelTransport for Netty 4.1. RB_ID=763435

  • finagle-thrift: c.t.f.ThriftRichClient implementations of newServiceIface
    method that accept a label argument to pass to the ScopedStats instance. RB_ID=760157

  • finagle-stats: Added c.t.f.stats now has a statsFilterFile flag which will read a blacklist
    of regex, newline-separated values. It will be used along with the statsFilter flag for stats
    filtering. RB_ID=764914


  • finagle-core: the #channelFactory method of c.t.f.builder.ServerBuilder has been deprecated in favor of the c.t.f.netty3.numWorkers flag. RB_ID=718688

Runtime Behavior Changes

  • finagle-core: The behavior for c.t.f.util.DefaultMonitor has changed such that
    unhandled exceptions are propagated to c.t.u.RootMonitor except for
    c.t.f.Failures with a log Level below INFO. RB_ID=758056

  • finagle-core: The metrics for requeues requeue/requeues, requeue/budget and
    requeue/budget_exhausted have moved under retries. They are now retries/requeues,
    retries/budget and retries/budget_exhausted. RB_ID=760213

  • finagle-core: c.t.f.service.RetryFilter and c.t.f.service.RetryExceptionsFilter
    now default to using a RetryBudget to mitigate retry amplification on downstream
    services. The previous behavior can be achieved by explicitly passing in
    RetryBudget.Infinite. RB_ID=766302

  • finagle-core: c.t.f.factory.TrafficDistributor now suppresses changes when a bound
    address is updated from a valid set to an error. Instead, it continues using stale
    data until it gets a successful update.

  • finagle-http: Unhandled exceptions from user defined HTTP services are now converted
    into very basic 500 responses so clients talking to those services see standard HTTP
    responses instead of a dropped connection. RB_ID=755846

  • finagle-memcached: Moved metrics from underlying KetamaPartitionedClient for Memcached clients
    to share the same scope of the underlying finagle client. RB_ID=771691

  • finagle-mux: com.twitter.finagle.mux.ThresholdFailureDetector is turned on by
    default. RB_ID=756213

  • finagle-serversets: The c.t.f.serverset2.Zk2Resolver now surfaces Addr.Pending
    when it detects that its underlying ZooKeeper client is unhealthy. Unhealthy is defined
    as non-connected for greater than its 'unhealthyWindow' (which defaults to 5 minutes).

  • finagle-serversets: The c.t.f.serverset2.ZkSession now uses an unbounded semaphore to
    limit to 100 outstanding zookeeper requests at any one moment. RB_ID=771399

Breaking API Changes

  • finagle-core: BackupRequestLost is no longer itself an Exception. Use
    BackupRequestLost.Exception in its place. RB_ID=758056

  • finagle-core: Replaced c.t.f.builder.ClientConfig.Retries with
    c.t.f.service.Retries.Policy. RB_ID=760213

  • finagle-core: A deprecated c.t.f.CancelledReadException has been removed.

  • finagle-http: c.t.f.http.exp.Multipart.decodeNonChunked has been removed from
    the public API. Use c.t.f.http.Request.multipart instead. Also
    c.t.f.http.exp.Multipart.FileUpload is no longer a case class, but base trait
    for Multipart.InMemoryFileUpload and Multipart.OnDiskFileUpload. RB_ID=769889

  • finagle-mux: c.t.f.FailureDetector.apply method is changed to private scope,
    to reduce API surface area. Using FailureDetector.Config is enough to config
    session based failure detection behavior. RB_ID=756833

  • finagle-mux: closeThreshold in c.t.f.mux.FailureDetector.ThresholdConfig is
    changed to closeTimeout, from an integer that was used as a multiplier to time
    duration. This makes it easier to config. RB_ID=759406

Bug Fixes

  • finagle-thrift: c.t.f.ThriftRichClient scoped stats label is now threaded properly through newServiceIface RB_ID=760157


Finagle 6.30.0

@kevinoliver kevinoliver released this Oct 15, 2015 · 569 commits to develop since this release

New Features

  • finagle-core: com.twitter.finagle.client.LatencyCompensator allows its
    default Compensator value to be set via an API call. This allows
    libraries to set defaults for clients that have not configured this module.

  • finagle-core: New Resolver com.twitter.finagle.FixedInetResolver extends
    InetResolver by caching successful DNS lookups indefinitely. It's scheme is 'fixedinet'.
    This is used by clients or resolvers that do not want or expect
    host->ip map changes (such as the zk2 resolver and twemcache client).

Runtime Behavior Changes

  • finagle-core: RetryPolicy.tries now uses jittered backoffs instead of
    having no delay. RB_ID=752629

  • finagle-core: FailureAccrualFactory uses jittered backoffs as the duration
    to mark dead for, if markDeadFor is not configured. RB_ID=746930

  • finagle-core: The transit latency (transit_latency_ms) and deadline budget
    (deadline_budget_ms) stats are now only recorded for servers, not for
    clients anymore, since they're only meaningful for servers. RB_ID=75268

  • finagle-http: Clients sending requests with payloads larger than the server
    accepts (default 5MB) now receive a HTTP 413 response instead of a channel
    closed exception. RB_ID=753664

Breaking API Changes

  • finagle-core: TimerFromNettyTimer is renamed to HashedWheelTimer and
    the constructor accepting org.jboss.netty.util.Timer made private. For
    compatibility, HashedWheelTimer has additional constructors to match
    those provided by org.jboss.netty.util.HashedWheelTimer. RB_ID=748514

  • finagle-httpx / finagle-httpx-compat: Renamed to finagle-http and
    finagle-http-compat respectively. This changes the package names, e.g.:
    com.twitter.finagle.httpx to com.twitter.finagle.http. RB_ID=751876

  • finagle-core: Marked HandletimeFilter private[finagle], and renamed it to
    ServerStatsFilter. RB_ID=75268

  • finagle-zipkin: Drop c.t.zipkin.thrift.Annotation.duration and associated thrift field
    c.t.f.thrift.thrift.Annotation.duration. RB_ID=751986

  • finagle-stress: Project has been removed from Finagle. RB_ID=752201

  • finagle-swift: Project has been moved off of Finagle to . RB_ID=752826


Finagle 6.29.0

@kevinoliver kevinoliver released this Sep 28, 2015 · 611 commits to develop since this release


  • finagle-http: Deprecated in favour of finagle-httpx and now removed.

New Features

  • finagle-core: Provides a RetryFilter which takes a
    RetryPolicy[(Req, Try[Rep])] and allows you to retry on both "successful"
    requests, such as HTTP 500s, as well as failed requests. The Req
    parameterization facilitates using the request to determine if retrying is
    safe (i.e. the request is idempotent).

  • finagle-httpx: Experimental support multipart/form-data (file uploads)
    decoding via c.t.f.httpx.exp.Multipart. RB_ID=730102

Runtime Behavior Changes

  • finagle-core: InetResolver.bind will now succeed if any hostname resolution
    succeeds. Previous behavior required that all hosts are successfully resolved.

  • finagle-core: DNS lookups in InetResolver are no longer cached
    within Finagle according to networkaddress.cache.ttl; we rely
    instead on however caching is configured in the JVM and OS. RB_ID=735006

  • finagle-core: After being revived, a FailureAccrualFactory enters a
    'probing' state wherein it must successfully satisfy a request before
    accepting more. If the request fails, it waits for the next markDeadFor
    period. RB_ID=747541

  • finagle-serversets: DNS lookups in Zk2Resolver are no longer
    cached within Finagle according to networkaddress.cache.ttl;
    instead they are cached indefinitely. RB_ID=735006

  • finagle-redis: c.t.f.Redis now uses a pipelined dispatcher along with
    a concurrent load balancer to help eliminate head-of-line blocking.

Breaking API Changes

  • finagle-core: RetryingFilter, which takes a RetryPolicy[Try[Nothing]]and
    is invoked only on exceptions, has been renamed to
    RetryExceptionsFilteris a subclass ofRetryFilter, which takes a
    RetryPolicy[(Req, Try[Rep])]and allows you to retry on both "successful"
    requests, such as HTTP 500s, as well as failed requests. The
    parameterization facilitates using the request to determine if retrying is
    safe (i.e. the request is idempotent).

  • finagle-core: Name.all is now private to com.twitter.finagle.

  • finagle-memcached: Unified stack-based construction APIs and cleanup internal
    constructors. In particular, KetamaClient was removed and KetamaPartitionClient
    and KetamaFailureAccrualFactory are now sealed inside Finagle. See
    [[com.twitter.finagle.Memcached]] for how to construct a finagle-memcached client.

  • finagle-redis: Port the c.t.f.Redis protocol object to the StackClient API.
    A redis client can now be constructed and configured like the rest of the
    finagle subprojects.


Finagle 6.28.0

@kevinoliver kevinoliver released this Aug 27, 2015 · 666 commits to develop since this release

Runtime Behavior Changes

  • finagle-core: Weights are no longer supported by the load balancers. They are moved
    one level above and interpreted by a new module, the TrafficDistributor. This
    frees the balancers to have non-linear load metrics. It also changes the semantics
    of weights. They are now normalized by size of endpoints that share the same weight
    and interpreted proportional to offered load (however, they can still be though of,
    roughly, as multipliers for traffic). RB_ID=677416

  • finagle-core: The RequestSemaphoreFilter now sheds load by dropping the tail of the queue
    and failing it with a Failure.Restartable. Previously, the filter had an unbounded
    queue but now the default size is 0 (i.e. no queueing). The dropped requests are in
    turn requeued by Finagle clients with protocol support (e.g. Http, ThriftMux).

  • finagle-core: ServerBuilder.ServerConfig.BindTo, ServerBuilder.ServerConfig.MonitorFactory,
    and ServerBuilder.ServerConfig.Daemonize, are now private to com.twitter.finagle.builder. RB_ID=730865

  • finagle-memcachedx: Renamed to finagle-memcached.

  • finagle-stats: Standard deviation ("$statName.stddev") is no longer exported.
    RB_ID=726309 (follow up to RB_ID=717647)

  • finagle-serversets: namer/bind_latency_us stat now counts only
    time in name resolution, not service acquisition.
    namer/{dtabcache,namecache,nametreecache}/misstime_ms stats are
    no longer exported. RB_ID=730309

Breaking API Changes

  • finagle-core: c.t.f.jsr166y has been replaced with Java 7 API. finagle: Replace JSR166y
    with Java 7 API. RB_ID=720903

  • finagle-core: LoadBalancerFactory no longer takes endpoints with weights as
    per the decoupling mentioned in runtime changes. RB_ID=677416

  • finagle-core: RequestSemaphoreFilter.Param now accepts a com.twitter.concurrent.AsyncSemaphore
    instead of an integer representing the max concurrency. RB_ID=696934

  • finagle-core: removed c.t.f.asyncDns flag and c.t.f.SyncInetResolver; DNS resolution is
    now always asynchronous. RB_ID=734427

  • finagle-core: ClientBuilder.ClientConfig.DefaultParams, ClientBuilder.ClientConfig.DestName,
    ClientBuilder.ClientConfig.GlobalTimeout, ClientBuilder.ClientConfig.Daemonize, and
    ClientBuilder.ClientConfig.MonitorFactory are now private to com.twitter.finagle.builder.
    ClientBuilder.ClientConfig.Retries is now private to com.twitter. RB_ID=727245

  • finagle-httpx: Method no longer has an extractor. To access the name of
    custom methods, use toString. RB_ID=722913

  • finagle-mux: c.t.f.mux.exp.FailureDetector and c.t.f.mux.exp.sessionFailureDetector are
    moved out of exp package into mux package. RB_ID=725350


Finagle 6.27.0

@kevinoliver kevinoliver released this Jul 27, 2015 · 708 commits to develop since this release

New Features

  • finagle-http: Support nacks between Finagle Http clients and servers. When a server fails with retryable exceptions (exceptions wrapped by Failure.rejected), it sends back a "Nack" response, i.e. 503 Response code with a new "finagle-http-nack" header. This allows clients to safely retry failed requests, and keep connections open. RB_ID=705948

Runtime Behavior Changes

  • finagle-core: FailFast parameter renamed from onOrOff to enabled. RB_ID=720781

  • finagle-core: When evaluating NameTree unions, return components of the union in Ok state rather
    than waiting for all components to be Ok. This enables resilience of unions when part of the
    tree cannot be resolved. RB_ID=697114

  • finagle-stats: Standard of deviation is no longer calculated. It is exported as a constant 0.0
    for "$statName.stddev". RB_ID=717647

Breaking API Changes

  • finagle-stream: Introduce StreamRequest as a replacement for Netty's
    HttpRequest, and converted the rest of the public API to not leak
    other Netty types (notably ChannelBuffer is replaced by Buf). RB_ID=695896

  • finagle-core: Dtab does not implement the Namer interface anymore. Use
    c.t.f.naming.DefaultInterpreter to bind a name via a Dtab. Support for Dtab entries starting
    with /#/ has been removed. c.t.f.Namer.bindAndEval has been removed. Use
    c.t.f.Namer.resolve instead. RB_ID=711681

  • finagle: LoadService and ThriftRichClient migrated off of deprecated ClassManifest
    to ClassTag. RB_ID=720455


Finagle 6.26.0

@kevinoliver kevinoliver released this Jun 23, 2015 · 768 commits to develop since this release


  • finagle-memcached: Deprecated in favor of finagle-memcachedx and now removed.

New Features

  • finagle-httpx: Support nacks between Finagle Http clients and servers. When a server fails with retryable exceptions (exceptions wrapped by Failure.rejected), it sends back a "Nack" response, i.e. 503 Response code with a new "finagle-http-nack" header. This allows clients to safely retry failed requests, and keep connections open. RB_ID=670046

Breaking API Changes

  • finagle-core: Moved netty3 specific things into a netty3 namespace. For
    these symbols, the namespace translation follows this pattern:
    c.t.f.$MODULE._ => c.t.f.netty3.$MODULE._. RB_ID=691746

  • finagle-core: Define WeightedSocketAddress as a case class. Add
    WeightedSocketAddress.extract method to extract weight. RB_ID=614228

  • finagle-core: Constructing a new Balancer that can be injected into a Finagle client
    was unnecessarily complex and non-uniform. We removed the legacy constructors around
    defining the collection of endpoints and simplified the interface to LoadBalancerFactory.
    Now, com.twitter.finagle.loadbalancer.Balancers defines the collection of balancer
    constructors. RB_ID=660730

  • finagle-core: Aperture can no longer be enabled via command line flags. Configuring
    per-client settings globally is generally not a good idea and we're working to remove
    these flags from Finagle. Use the constructors in com.twitter.finagle.loadbalancer.Balancers
    to create an instance that can be injected into a client. RB_ID=663194

  • finagle-core: The default load balancer has changed to p2c from heap. RB_ID=693450

  • finagle-core: Service.isAvailable and ServiceFactory.isAvailable is finalized.
    Service.status and ServiceFactory.status supersedes isAvailable usage since 6.24.0 release.

  • finagle-core: ClientBuilder.failureAccrual method is removed. Use ClientBuilder.failureAccrualFactory
    instead. RB_ID=689076

  • finagle-core: Stack param ClientBuilder.ClientConfig.FailureAccrualFac is removed.
    Use ClientBuilder.failureAccrualFactory instead. RB_ID=689076

  • finagle-exception: com.twitter.finagle.exception.ExceptionReporter is no longer used
    as the default com.twitter.finagle.util.ReporterFactory. RB_ID=674646

  • finagle-kestrel: Replace deprecated finagle-kestrel package with finagle-kestrelx.

  • finagle-core: Add new method noFailureAccrual on ClientBuilder that completely disables
    FailureAccrualFactory in the underlying stack. RB_ID=689076

New Features

  • finagle-thrift: Support for finagle Services per thrift method.