Abstract Namer class for Java compatibility.
An abstract class version of Resolver for java compatibility.
An address identifies the location of an object--it is a bound name.
An address identifies the location of an object--it is a bound name. An object may be replicated, and thus bound to multiple physical locations (see com.twitter.finagle.Address).
The user guide for further details.
An Address represents the physical location of a single host or endpoint.
An Address represents the physical location of a single host or endpoint. It also includes Addr.Metadata (typically set by Namers and Resolvers) that provides additional configuration to client stacks.
Note that a bound Addr contains a set of Addresses and Addr.Metadata that pertains to the entire set.
Indicates that a forum string passed to an com.twitter.finagle.Announcer was invalid according to the forum grammar [1].
Indicates that a forum string passed to an com.twitter.finagle.Announcer was invalid according to the forum grammar [1].
[1] https://twitter.github.io/finagle/guide/Names.html
Indicates that an com.twitter.finagle.Announcer was not found for the
given scheme
.
Indicates that an com.twitter.finagle.Announcer was not found for the
given scheme
.
Announcers are discovered via Finagle's com.twitter.finagle.util.LoadService mechanism. These exceptions typically suggest that there are no libraries on the classpath that define an Announcer for the given scheme.
A base class for exceptions encountered on account of incorrect API usage.
A typeclass for "stackable" items.
A typeclass for "stackable" items. This is used by the StackBuilder to provide a convenient interface for constructing Stacks.
A Future is satisfied with this exception when the process of establishing a session is interrupted.
A Future is satisfied with this exception when the process of establishing a session is interrupted. Sessions are not preemptively established in Finagle, rather requests are taxed with session establishment when necessary. For example, this exception can occur if a request is interrupted while waiting for an available session or if an interrupt is propagated from a Finagle server during session establishment.
The user guide for additional details.
com.twitter.finagle.CancelledRequestException
Indicates that a request was cancelled.
Indicates that a request was cancelled. Cancellation is propagated between a Finagle server and a client intra-process when the server is interrupted by an upstream service. In such cases, the pending Future is interrupted with this exception. The client will cancel its pending request which will by default propagate an interrupt to its downstream, and so on. This is done to conserve resources.
The user guide for additional details.
Indicates that an error occurred on account of incorrect usage of a org.jboss.netty.buffer.ChannelBuffer.
Indicates that an error occurred on account of incorrect usage of a org.jboss.netty.buffer.ChannelBuffer.
TODO: Probably remove this exception class once we migrate away from Netty usage in public APIs.
Indicates that a given channel was closed, for instance if the connection was reset by a peer or a proxy.
An exception encountered within the context of a given socket channel.
Default implementation for WriteException that wraps an underlying exception.
RPC clients with Req
-typed requests and Rep
typed replies.
RPC clients with Req
-typed requests and Rep
typed replies.
RPC destinations are represented by names. Names are bound
for each request.
Clients are implemented by the various protocol packages in finagle, for example com.twitter.finagle.Http:
object Http extends Client[HttpRequest, HttpResponse] ... val service: Service[HttpRequest, HttpResponse] = Http.newService("google.com:80")
Information about a client, passed to a Service factory for each new connection.
Indicates that the client failed to establish a connection.
Indicates that the client failed to establish a connection. Typically this class will be extended to provide additional information relevant to a particular category of connection failure.
Indicates that connecting to a given remoteAddress
was refused.
Trait Dentry describes a delegation table entry.
Trait Dentry describes a delegation table entry. prefix
describes
the paths that the entry applies to. dst
describes the resulting
tree for this prefix on lookup.
Indicates that a com.twitter.finagle.transport.Transport write associated with the request was dropped by the transport (usually to respect backpressure).
A Dtab--short for delegation table--comprises a sequence of delegation rules.
A Dtab--short for delegation table--comprises a sequence of delegation rules. Together, these describe how to bind a com.twitter.finagle.Path to a set of com.twitter.finagle.Addr. com.twitter.finagle.naming.DefaultInterpreter implements the default binding strategy.
The user guide for further details.
Turns a com.twitter.finagle.ServiceFactory into a com.twitter.finagle.Service which acquires a new service for each request.
Used by com.twitter.finagle.service.FailFastFactory to indicate that a request failed because all hosts in the cluster to which the client is connected have been marked as failed.
Used by com.twitter.finagle.service.FailFastFactory to indicate that a request failed because all hosts in the cluster to which the client is connected have been marked as failed. See com.twitter.finagle.service.FailFastFactory for details on this behavior.
The user guide for additional details.
Base exception for all Finagle originated failures.
Base exception for all Finagle originated failures. These are
Exceptions, but with additional sources
and flags
. Sources
describe the origins of the failure to aid in debugging and flags
mark attributes of the Failure (e.g. Restartable).
A Filter acts as a decorator/transformer of a service.
A Filter acts as a decorator/transformer of a service. It may apply transformations to the input and output of that service:
(* MyService *) [ReqIn -> (ReqOut -> RepIn) -> RepOut]
For example, you may have a service that takes Strings
and
parses them as Ints
. If you want to expose this as a Network
Service via Thrift, it is nice to isolate the protocol handling
from the business rules. Hence you might have a Filter that
converts back and forth between Thrift structs. Again, your service
deals with plain objects:
[ThriftIn -> (String -> Int) -> ThriftOut]
Thus, a Filter[A, B, C, D]
converts a Service[C, D]
to a Service[A, B]
.
In other words, it converts a Service[ReqOut, RepIn]
to a
Service[ReqIn, RepOut]
.
The user guide for details and examples.
Indicates that a request timed out, where "request" comprises a full RPC from the perspective of the application.
Indicates that a request timed out, where "request" comprises a full RPC from the perspective of the application. For instance, multiple retried Finagle-level requests could constitute the single request that this exception pertains to.
A trait for exceptions that contain remote information: the downstream address/client id, upstream address/client id (if applicable), and trace id of the request.
A trait for exceptions that contain remote information: the downstream address/client id, upstream address/client id (if applicable), and trace id of the request. RemoteInfo.NotAvailable is used if no remote information has been set.
Indicates that some client state was inconsistent with the observed state of some server.
Indicates that some client state was inconsistent with the observed state of some server. For example, the client could receive a channel-connection event from a proxy when there is no outstanding connect request.
Indicates that a single Finagle-level request timed out.
Indicates that a single Finagle-level request timed out. In contrast to com.twitter.finagle.RequestTimeoutException, an "individual request" could be a single request-retry performed as a constituent of an application-level RPC.
Trait ListeningServer represents a bound and listening server.
Trait ListeningServer represents a bound and listening server. Closing a server instance unbinds the port and relinquishes resources that are associated with the server.
Indicates that multiple Announcers were
discovered for given scheme
.
Indicates that multiple Announcers were
discovered for given scheme
.
Announcers are discovered via Finagle's com.twitter.finagle.util.LoadService mechanism. These exceptions typically suggest that there are multiple libraries on the classpath with conflicting scheme definitions.
Indicates that multiple Resolvers were
discovered for given scheme
.
Indicates that multiple Resolvers were
discovered for given scheme
.
Resolvers are discovered via Finagle's com.twitter.finagle.util.LoadService mechanism. These exceptions typically suggest that there are multiple libraries on the classpath with conflicting scheme definitions.
Names identify network locations.
Names identify network locations. They come in two varieties:
2. Path names are unbound paths, representing an abstract location which must be resolved by some context, usually the Dtab.
In practice, clients use a com.twitter.finagle.Resolver to resolve a
destination name string into a Name
. This is achieved by passing a
destination name into methods such as
ClientBuilder.dest or
the newClient
method of the appropriate protocol object
(e.g. Http.newClient(/s/org/servicename)
). These APIs use Resolver
under
the hood to resolve the destination names into the Name
representation
of the appropriate cluster.
As names are bound, a Namer may elect to bind only a Name prefix, leaving an unbound residual name to be processed by a downstream Namer.
The user guide for further details.
Name trees represent a composite T-typed name whose interpretation is subject to evaluation rules.
Name trees represent a composite T-typed name whose interpretation is subject to evaluation rules. Typically, a Namer is used to provide evaluation context for these trees.
A namer is a context in which a NameTree is bound.
Indicates that a request failed because no servers were available.
Indicates that a request failed because no servers were available. The Finagle client's internal load balancer was empty. This typically occurs under one of the following conditions:
- The cluster is actually down. No servers are available. - A service discovery failure. This can be due to a number of causes, such as the client being constructed with an invalid cluster destination name [1] or a failure in the service discovery system (e.g. DNS, ZooKeeper).
A good way to diagnose NoBrokersAvailableExceptions is to reach out to the owners of the service to which the client is attempting to connect and verify that the service is operational. If so, then investigate the service discovery mechanism that the client is using (e.g. the com.twitter.finagle.Resolver that is it configured to use and the system backing it).
[1] https://twitter.github.io/finagle/guide/Names.html
Indicates that the request was not servable, according to some policy.
Indicates that the request was not servable, according to some policy. See com.twitter.finagle.service.OptionallyServableFilter as an example.
Indicates that the client failed to distribute a given request according to some sharding strategy.
Indicates that the client failed to distribute a given request according to some sharding strategy. See com.twitter.finagle.service.ShardingService for details on this behavior.
A Path comprises a sequence of byte buffers naming a hierarchically-addressed object.
A Path comprises a sequence of byte buffers naming a hierarchically-addressed object.
The user guide for further details.
Indicates that either SOCKS or HTTP(S) proxy server rejected client's connect request.
Indicates that a read from a given remoteAddress
timed out.
Indicates that requests were failed by a rate-limiter.
Indicates that requests were failed by a rate-limiter. See com.twitter.finagle.service.RateLimitingFilter for details.
A base class for request failures.
A base class for request failures. Indicates that some failure occurred before a request could be successfully serviced.
Indicates that a request timed out.
Indicates that a request timed out. See com.twitter.finagle.IndividualRequestTimeoutException and com.twitter.finagle.GlobalRequestTimeoutException for details on the different request granularities that this exception class can pertain to.
A resolver binds a name, represented by a string, to a variable address.
A resolver binds a name, represented by a string, to a variable address. Resolvers have an associated scheme which is used for lookup so that names may be resolved in a global context.
These are loaded by Finagle through the
service loading mechanism. Thus, in
order to implement a new resolver, a class implementing Resolver
with a
0-arg constructor must be registered in a file named
META-INF/services/com.twitter.finagle.Resolver
included in the classpath; see
Oracle's
ServiceLoader
documentation for further details.
Indicates that a destination name string passed to a com.twitter.finagle.Resolver was invalid according to the destination name grammar [1].
Indicates that a destination name string passed to a com.twitter.finagle.Resolver was invalid according to the destination name grammar [1].
[1] https://twitter.github.io/finagle/guide/Names.html
Indicates that a com.twitter.finagle.Resolver was not found for the
given scheme
.
Indicates that a com.twitter.finagle.Resolver was not found for the
given scheme
.
Resolvers are discovered via Finagle's com.twitter.finagle.util.LoadService mechanism. These exceptions typically suggest that there are no libraries on the classpath that define a Resolver for the given scheme.
Servers implement RPC servers with Req
-typed requests and
Rep
-typed responses.
Servers implement RPC servers with Req
-typed requests and
Rep
-typed responses. Servers dispatch requests to a
com.twitter.finagle.Service or
com.twitter.finagle.ServiceFactory provided through serve
.
Servers are implemented by the various protocol packages in finagle, for example com.twitter.finagle.Http:
object Http extends Server[HttpRequest, HttpResponse] ... val server = Http.serve(":*", new Service[HttpRequest, HttpResponse] { def apply(req: HttpRequest): Future[HttpResponse] = ... })
Will bind to an ephemeral port (":*") and dispatch request to
server.boundAddress
to the provided
com.twitter.finagle.Service instance.
The serve
method has two variants: one for instances of
Service
, and another for ServiceFactory
. The ServiceFactory
variants are used for protocols in which connection state is
significant: a new Service
is requested from the
ServiceFactory
for each new connection, and requests on that
connection are dispatched to the supplied service. The service is
also closed when the client disconnects or the connection is
otherwise terminated.
A Service
is an asynchronous function from a Request
to a Future[Response]
.
A Service
is an asynchronous function from a Request
to a Future[Response]
.
It is the basic unit of an RPC interface.
Service.mk for a convenient way to create new instances.
The user guide for details and examples.
Indicates that a request was applied to a com.twitter.finagle.Service that is closed (i.e.
Indicates that a request was applied to a com.twitter.finagle.Service that is closed (i.e. the connection is closed).
A trait for exceptions related to a com.twitter.finagle.Service.
A ServiceFactory that proxies all calls to another ServiceFactory.
A ServiceFactory that proxies all calls to another
ServiceFactory. This can be useful if you want to modify
an existing ServiceFactory
.
A ServiceFactoryWrapper adds behavior to an underlying ServiceFactory.
Base-trait for Namers that bind to a local Service.
Base-trait for Namers that bind to a local Service.
Implementers with a 0-argument constructor may be named and
auto-loaded with /$/pkg.cls
syntax.
Note that this can't actually be accomplished in a type-safe manner since the naming step obscures the service's type to observers.
Indicates that a request was applied to a com.twitter.finagle.Service that is unavailable.
Indicates that a request was applied to a com.twitter.finagle.Service that is unavailable. This constitutes a fail-stop condition.
A simple proxy Service that forwards all calls to another Service.
A simple proxy Service that forwards all calls to another Service. This is useful if you want to wrap-but-modify an existing service.
Indicates that the connection was not established within the timeouts.
Indicates that the connection was not established within the timeouts. This type of exception should generally be safe to retry.
Indicates that the shard to which a request was assigned was not available.
Indicates that the shard to which a request was assigned was not available. See com.twitter.finagle.service.ShardingService for details on this behavior.
A Filter where the request and reply types are the same.
A trait for exceptions that have a source.
A trait for exceptions that have a source. The name of the source is
specified as a serviceName
. The "unspecified" value is used if no
serviceName
is provided by the implementation.
Indicates that an SSL/TLS exception occurred.
Indicates that an error occurred while an SSL handshake was being performed
with a server at a given remoteAddress
.
Indicates that the certificate for a given session was invalidated.
Indicates that an error occurred while SslClientSessionVerification
was
being performed, or the server disconnected from the client in a way that
indicates that there was high probability that the server failed to verify
the client's certificate.
Stacks represent stackable elements of type T.
Stacks represent stackable elements of type T. It is assumed that T-typed elements can be stacked in some meaningful way; examples are functions (function composition) Filters (chaining), and ServiceFactories (through transformers). T-typed values are also meant to compose: the stack itself materializes into a T-typed value.
Stacks are persistent, allowing for nondestructive transformations; they are designed to represent 'template' stacks which can be configured in various ways before materializing the stack itself.
Note: Stacks are advanced and sometimes subtle. For expert use only!
StackBuilders are imperative-style builders for Stacks.
StackBuilders are imperative-style builders for Stacks. It maintains a stack onto which new elements can be pushed (defining a new stack).
stack.nilStack for starting construction of an empty stack for ServiceFactorys.
Produce a stack from a T
-typed element.
Status tells the condition of a networked endpoint.
Status tells the condition of a networked endpoint. They are used to indicate the health of Service, ServiceFactory, and of transport.Transport.
Object Status$ contains the status definitions.
Indicates that a given stream was closed, for instance if the stream was reset by a peer or a proxy.
Indicates that an operation exceeded some timeout duration before completing.
Indicates that an operation exceeded some timeout duration before completing. Differs from com.twitter.util.TimeoutException in that this trait doesn't extend java.util.concurrent.TimeoutException, provides more context in its error message (e.g. the source and timeout value), and is only used within the confines of Finagle.
Indicates that the client has issued more concurrent requests than are allowable, where "allowable" is typically determined based on some configurable maximum.
Used by com.twitter.finagle.pool.WatermarkPool to indicate that a request failed because too many requests are already waiting for a connection to become available from a client's connection pool.
A base class for exceptions encountered in the context of a com.twitter.finagle.transport.Transport.
A catch-all exception class for uncategorized ChannelExceptions.
Marker trait to indicate there was an exception before writing any of the request.
Marker trait to indicate there was an exception before writing any of the request. These exceptions should generally be retryable.
Indicates that a write to a given remoteAddress
timed out.
A group is a dynamic set of T
-typed values.
A group is a dynamic set of T
-typed values. It is used to
represent dynamic hosts and operations over such lists. Its
flexibility is derived from the ability to map, creating
derived groups. The map operation ensures that each element is
mapped over exactly once, allowing side-effecting operations to
rely on this to implement safe semantics.
Note: querying groups is nonblocking, which means that derived groups are effectively eventually consistent.
Note: T
s must be hashable, defining hashCode
and
equals
to ensure that maps have exactly-once semantics.
Note: Groups are invariant because Scala's Sets are. In the case of sets, this is an implementation artifact, and is unfortunate, but it's better to keep things simpler and consistent.
(Since version 6.7.x) Use com.twitter.finagle.Name
to represent clusters instead
A mixin trait to assign a
to the group.name
A mixin trait to assign a
to the group. This is used
to assign labels to groups that ascribe meaning to them.
name
(Since version 6.7.x) Use com.twitter.finagle.Name
to represent clusters instead
(Since version 6.7.x) Use com.twitter.finagle.Name
to represent clusters instead
Note: There is a Java-friendly API for this object: com.twitter.finagle.Addrs.
A Java adaptation of the com.twitter.finagle.Address companion object.
A Java adaptation of the com.twitter.finagle.Addr companion object.
Object Dtab manages 'base' and 'local' Dtabs.
FailureFlags
may be applied to any Failure/Exception encountered during the
handling of a request.
InetResolver that caches all successful DNS lookups indefinitely and does not poll for updates.
InetResolver that caches all successful DNS lookups indefinitely and does not poll for updates.
Clients should only use this in scenarios where host -> IP map changes do not occur.
Resolver for inet scheme.
The NameTree object comprises NameTree types as well as binding and evaluation routines.
An empty ListeningServer that can be used as a placeholder.
An empty ListeningServer that can be used as a placeholder. For example:
@volatile var server = NullServer def main() { server = Http.serve(...) } def exit() { server.close() }
The default Resolver used by Finagle.
Java APIs for Resolver.
stack.nilStack for starting construction of an empty stack for ServiceFactorys.
Stack.Params
forwarder to provide a clean Java API.
Define valid Status! values.
Define valid Status! values. They are, in order from most to least healthy:
(An scala.math.Ordering is defined in these terms.)
Package exp contains experimental code.
Package exp contains experimental code. This can be removed or stabilized (moved elsewhere) at any time.
This package implements client side load balancing algorithms.
This package implements client side load balancing algorithms.
As an end-user, see the Balancers API to create instances which can be used to configure a Finagle client with various load balancing strategies.
As an implementor, each algorithm gets its own subdirectory and is exposed via the Balancers object. Several convenient traits are provided which factor out common behavior and can be mixed in (i.e. Balancer, DistributorT, NodeT, and Updating).
Defines common com.twitter.finagle.Stack.Param's shared between finagle clients and servers.
An exception that is raised on requests that are discarded because their corresponding backup requests succeeded first.
An exception that is raised on requests that are discarded because
their corresponding backup requests succeeded first. See
com.twitter.finagle.exp.BackupRequestFilter
for details.
(Since version 2017-11-20) Use Failure flagged Failure.Ignorable
Finagle is an extensible RPC system.
Services are represented by class com.twitter.finagle.Service. Clients make use of com.twitter.finagle.Service objects while servers implement them.
Finagle contains a number of protocol implementations; each of these implement Client and/or com.twitter.finagle.Server. For example, Finagle's HTTP implementation, com.twitter.finagle.Http (in package
finagle-http
), exposes both.Thus a simple HTTP server is built like this:
We first define a service to which requests are dispatched. In this case, the service returns immediately with a HTTP 200 OK response, and with no content.
This service is then served via the Http protocol on TCP port 8080. Finally we wait for the server to stop serving.
We can now query our web server:
Building an HTTP client is also simple. (Note that type annotations are added for illustration.)
Http.client.newService("localhost:8080")
constructs a new com.twitter.finagle.Service instance connected to localhost TCP port 8080. We then issue a HTTP/1.1 GET request to URI "/". The service returns a com.twitter.util.Future representing the result of the operation. We listen to this future, printing an appropriate message when the response arrives.The Finagle homepage contains useful documentation and resources for using Finagle.