@ryanoneill ryanoneill released this Apr 21, 2017 · 1039 commits to develop since this release

Assets 2

New Features

  • finagle-core: FailureAccrual is now production ready. It has been promoted out of
    experimental and moved from com.twitter.finagle.service.exp to
    com.twitter.finagle.liveness. RB_ID=914662

  • finagle-core: SSL/TLS APIs have been changed to include methods which work
    based on an SSL configuration, and an SSL configuration and an SSL engine factory.

  • finagle-core: LoadBalancerFactory now exposes a mechanism to order the collection
    of endpoints passed to the balancer implementations. This allows a consistent ordering
    of endpoints across process boundaries. RB_ID=910372

  • finagle-core: Introduce c.t.f.client.EndpointerStackClient, a mechanism for
    making clients that don't need a transporter and dispatcher. This simplifies
    making non-netty clients. RB_ID=912889

  • finagle-http2: Add support for liveness detection via pings. It can be configured
    the same way as it is in mux. RB_ID=913341

  • finagle-toggle: Standard toggles now track the last value produced from apply.
    These values are visible via TwitterServer's /admin/toggles endpoint. RB_ID=913925

Breaking API Changes

  • finagle-mysql: Support for Netty 3 has been removed, making Netty 4 the only transport
    implementation. RB_ID=914661

  • finagle-core: com.twitter.finagle.service.exp.FailureAccrualPolicy has been promoted to

  • finagle-commons-stats: Remove finagle-commons-stats, which was a compatibility layer
    for a deprecated stats library. Please move to finagle-stats instead. RB_ID=910964

  • finagle-core: SSL/TLS stack params for Finagle running Netty 4 have changed.

    • The TlsConfig param in Transport has been removed.
    • For client engines, the same two parameters as Finagle running Netty 3 are now used:
      • ClientSsl in Transport, which is used for configuring a client Engine's hostname,
        key credentials, trust credentials, cipher suites, protocols, and application protocols.
      • SslClientEngineFactory in SslClientEngineFactory, which determines how the Engine
        is created based off of an Address and an SslClientConfiguration.
    • For server engines, the same two parameters as Finagle running Netty 3 are now used:
      • ServerSsl in Transport, which is used for configuring a server Engine's key
        credentials, trust credentials, cipher suites, protocols, application protocols, and
        where the server supports or requires client authentication.
      • SslServerEngineFactory in SslServerEngineFactory, which determines how the Engine
        is created based off of an SslServerConfiguration.
    • Note: Not all client and server configurations work with all engine factories. Each engine
      factory should document what is not supported by that specific engine factory.
    • Note: By default, Finagle on Netty 4 will use the Netty4ClientEngineFactory and
      Netty4ServerEngineFactory respectively.
  • finagle-core: Change the API to LoadBalancerFactory to a more concrete
    Activity[IndexedSeq[ServiceFactory[Req, Rep]]] since the majority of the
    load balancer implementations don't need the properties of a Set but instead
    need ordering guarantees and efficient random access. RB_ID=910372

  • finagle-core: Balancers.aperture now has a new parameter useDeterministicOrdering,
    which is set to false by default. This feature is still experimental and under
    construction. This will break the Java API and require the additional param to
    be passed in explicitly. RB_ID=911541

  • finagle-core: The logic for tracking sessions that was in StdStackServer has been lifted into
    a new template, ListeningStackServer where implementations define the creation of a
    ListeningServer from a ServiceFactory, SocketAddress, and a function that tracks accepted
    sessions. RB_ID=914124

  • finagle-core: Change the AddressOrdering param to no longer take a StatsReceiver,
    since orderings were simplified and are no longer composite. RB_ID=914113

  • finagle-core: Remove deprecated methods on c.t.f.Client:

    • newClient(dest: Group[SocketAddress])
    • newService(dest: Group[SocketAddress])
  • finagle-core: c.t.f.ListeningServer no longer extends c.t.f.Group. Use
    c.t.f.ListeningServer.boundAddress to extract the address from the server.

  • finagle-core: Remove deprecated c.t.f.group.StabilizingGroup. Use
    c.t.f.addr.StabilizingAddr instead. RB_ID=914823

  • finagle-core: Constructors for c.t.f.ChannelException and its subclasses now have
    overloads that take Option\s instead of allowing null. While the existing
    constructors remain, and forward to the new ones, this can still cause compilation
    failures when the arguments are ambiguous. RB_ID=914800

  • finagle-core: Remove MimimumSetCluster since it has been deperecated for quite
    some time. Instead, use finagle logical destinations via Names. RB_ID=914849

  • finagle-core: Remove deprecated c.t.f.Resolver.resolve. Use c.t.f.Resolver.bind
    instead. Remove deprecated c.t.f.BaseResolver.resolve. Use c.t.f.Resolver.eval
    instead. RB_ID=914986

  • finagle-http: c.t.f.http.Http codec has disappeared as part of Netty 4 migration. Use
    c.t.f.Http.client or c.t.f.Http.server stacks instead. RB_ID=912427

  • finagle-kestrel: Remove c.t.f.kestrel.param.KestrelImpl. Kestrel clients and servers
    now use Netty 4 and cannot be configured for Netty 3. RB_ID=911031

  • finagle-memcached: Remove c.t.f.memcached.param.MemcachedImpl. Memcached clients and servers
    now use Netty 4 and cannot be configured for Netty 3. RB_ID=911031

  • finagle-kestrel: Remove commands that are not supported by the client:

    • com.twitter.finagle.kestrel.protocol.DumpConfig
    • com.twitter.finagle.kestrel.protocol.DumpStats
    • com.twitter.finagle.kestrel.protocol.FlushAll
    • com.twitter.finagle.kestrel.protocol.Reload
    • com.twitter.finagle.kestrel.protocol.ShutDown
    • com.twitter.finagle.kestrel.protocol.Stats
    • com.twitter.finagle.kestrel.protocol.Version
  • finagle-memcached: Remove deprecated c.t.f.memcached.KetamaClientBuilder. Use
    c.t.f.Memcached.client to create a Memcached client. RB_ID=907352

  • finagle-memcached: Remove deprecated c.t.f.memcached.replication.ReplicationClient. Use
    c.t.f.memcached.replication.BaseReplicationClient with clients created using
    c.t.f.Memcached.client. RB_ID=907352

  • finagle-memcached: Remove deprecated methods on c.t.f.memcached.Client:

    • apply(name: Name)
    • apply(host: String)

    Use c.t.f.Memcached.client to create a Memcached client. RB_ID=908442

  • finagle-memcached: Remove deprecated c.t.f.memcached.protocol.text.Memcached object.
    Use c.t.f.Memcached.client to create Memcached clients. RB_ID=908442

  • finagle-memcached: Remove deprecated c.t.f.memcached.Server class. Use
    c.t.f.memcached.integration.TestMemcachedServer for a quick test server.

  • Remove deprecated c.t.f.memcached.PartitionedClient object. Use
    c.t.f.memcached.CacheNodeGroup.apply instead of
    c.t.f.memcached.PartitionedClient.parseHostWeights. RB_ID=914827

  • Remove deprecated c.t.f.memcached.util.ParserUtils.DIGITS. Use "^\d+$" instead.
    Remove deprecated c.t.f.memcached.util.ParserUtils.DigitsPattern. Use Pattern.compile(^\d+$)
    instead. RB_ID=914827

  • finagle-memcached: Remove old c.t.f.memcached.replicated.BaseReplicationClient and
    c.t.f.memcached.migration.MigrationClient, and most c.t.f.memcached.CachePoolCluster
    methods. RB_ID=910986

  • finagle-memcached: Remove old c.t.f.memcached.migration.DarkRead, and
    c.t.f.memcached.migration.DarkWrite. RB_ID=911367

  • finagle-memcached: Remove c.t.f.memcached.CachePoolConfig. RB_ID=914623

  • finagle-mux: Netty 3 implementation of Mux is removed. Default is
    Netty 4. RB_ID=914239

  • finagle-netty4: DirectToHeapInboundHandler was renamed to AnyToHeapInboundHandler
    and now copies any inbound buffer (not just directs) on heap. RB_ID=913984

  • finagle-thrift, finagle-thriftmux: Remove rich client/server support for prior
    versions of Scrooge generated code. RB_ID=911515

  • finagle-core: c.t.f.client.Transporter no longer has a close method, which
    was introduced in 6.43.0. It was sort of a hack, and we saw the opportunity
    to do it properly. RB_ID=912889

  • finagle-core, finagle-mux: Move FailureDetector from c.t.f.mux to c.t.f.liveness.
    This also means that the sessionFailureDetector flag is now
    c.t.f.liveness.sessionFailureDetector. RB_ID=912337

Bug Fixes

  • finagle-exp: DarkTrafficFilter now respects the log level when HasLogLevel,
    and otherwise defaults the level to warning instead of error. RB_ID=914805

  • finagle-netty4: Fixed connection stall on unsuccessful proxy handshakes in Finagle clients
    configured with HTTP proxy (Transporter.HttpProxyTo). RB_ID=913358

Runtime Behavior Changes

  • finagle-netty4: Finagle is no longer logging the failed proxy handshake response.

  • finagle-netty4: SOCKS5 proxies are now bypassed if the connect destination is
    localhost. This matches Finagle's prior behavior from when Netty 3 was the default
    transport implementation. RB_ID=914494


  • finagle-memcached: Remove dependency on com.twitter.common:io-json. RB_ID=914623