Skip to content

Releases: twitter/finagle

Finagle 6.37.0

26 Aug 03:52
Compare
Choose a tag to compare

Deprecations

  • finagle-core: c.t.f.Deadline is deprecated in favor of c.t.f.context.Deadline.
    RB_ID=864148

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
    (https://groups.google.com/forum/#!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

  • 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".
    RB_ID=850652
  • finagle-thrift: maxThriftBufferSize is now tunable via parameter for Thrift
    servers. It previously only was for ThriftMux servers. RB_ID=860102
  • 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

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

Finagle 6.36.0

08 Jul 18:29
Compare
Choose a tag to compare

Deprecations

  • finagle-http: Removed DtabFilter.Finagle in favor of DtabFilter.Extractor.
    RB_ID=840600
  • finagle-zipkin: Deprecate ZipkinTracer in favor of ScribeZipkinTracer.
    RB_ID=840494

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

Finagle 6.35.0

27 Apr 23:10
Compare
Choose a tag to compare

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

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-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
    RB_ID=812681.
  • finagle-core: When a client is created, its server set resolution is started eagerly.
    RB_ID=806940
  • 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

11 Mar 06:59
Compare
Choose a tag to compare

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

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 java.net.InetAddress.getLoopbackAddress.
    • 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
    InetSocketAddress.

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

08 Mar 04:19
Compare
Choose a tag to compare

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

08 Mar 04:18
Compare
Choose a tag to compare

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.
    RB_ID=RB_ID=769889
  • finagle-netty4: Hello World. Introduce a Listener for Netty 4.1. This is still considered beta.
    RB_ID=718688
  • 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

Deprecations

  • 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).
    RB_ID=760771
  • 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.
    RB=763435
  • 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

08 Mar 04:17
Compare
Choose a tag to compare

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.
    RB_ID=750228
  • 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).
    RB_ID=753712

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
    https://github.com/finagle/finagle-swift . RB_ID=752826

Finagle 6.29.0

08 Mar 04:17
Compare
Choose a tag to compare

Deprecations

  • 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.
    RB_ID=737748
  • 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 toRetryExceptionsFilter. 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. TheReq`
    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

08 Mar 04:16
Compare
Choose a tag to compare

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

08 Mar 04:15
Compare
Choose a tag to compare

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