Package

colossus

service

Permalink

package service

Visibility
  1. Public
  2. All

Type Members

  1. trait Async[M[_]] extends AnyRef

    Permalink

    A Typeclass for abstracting over callbacks and futures

  2. trait AsyncBuilder[M[_], E] extends AnyRef

    Permalink

    A Typeclass for building Async instances, used internally by ClientFactory.

    A Typeclass for building Async instances, used internally by ClientFactory. This is needed to get the environment into the Async.

  3. class AsyncHandlerGenerator[C <: Protocol] extends AnyRef

    Permalink

    So we need to take a type-parameterized request object, package it into a monomorphic case class to send to the worker, and have the handler that receives that object able to pattern match out the parameterized object, all without using reflection.

    So we need to take a type-parameterized request object, package it into a monomorphic case class to send to the worker, and have the handler that receives that object able to pattern match out the parameterized object, all without using reflection. We can do that with some nifty path-dependant types

  4. class BasicLiftedClient[C <: Protocol, M[_]] extends LiftedClient[C, M]

    Permalink
  5. trait BasicServiceDSL[P <: Protocol] extends AnyRef

    Permalink

    A one stop shop for a fully working Server DSL without any custom functionality.

    A one stop shop for a fully working Server DSL without any custom functionality. Just provide a codec and you're good to go

  6. sealed trait Callback[+O] extends AnyRef

    Permalink

    A Callback is a Monad for doing in-thread non-blocking operations.

    A Callback is a Monad for doing in-thread non-blocking operations. It is essentially a "function builder" that uses function composition to chain together a callback function that is eventually passed to another function.

    Normally if you have a function that requires a callback, the function looks something like:

    def doSomething(param, param, callBack: result => Unit)

    and then you'd call it like

    doSomething(arg1, arg2, result => println("got the result"))

    This is the well-known continuation pattern, and it something we'd like to avoid due to the common occurrance of deeply nested "callback hell". Instead, the Callback allows us to define out function as

    def doSomething(param1, param2): Callback[Result]

    and call it like

    val c = doSomething(arg1, arg2)
    c.map{ result =>
      println("got the result")
    }.execute()

    Thus, in practice working with Callbacks is very similar to working with Futures. The big differences from a future are:

    1. Callbacks are not thread safe at all. They are entirely intended to stay inside a single worker. Otherwise just use Futures.

    2. The execute() method needs to be called once the callback has been fully built, which unlike futures requires some part of the code to know when a callback is ready to be invoked

    Using Callbacks in Services

    When building services, particularly when working with service clients, you will usually be getting Callbacks back from clients when requests are sent. *Do not call execute yourself!* on these Callbacks. They must be returned as part of request processing, and Colossus will invoke the callback itself.

    Using Callbacks elsewhere

    If you are using Callbacks in some custom situation outside of services, be aware that exceptions thrown inside a map or flatMap are properly caught and can be recovered using recover and recoverWith, however exceptions thrown in the "final" handler passed to execute are not caught. This is because the final block cannot be mapped on (since it is only passed when the callback is executed) and throwing the exception is preferrable to suppressing it.

    Any exception that is thrown in this block is however rethrown as a CallbackExecutionException. Therefore, any "trigger" function you wrap inside a callback should properly catch this exception.

  7. trait CallbackClient[P <: Protocol] extends Client[P, Callback]

    Permalink
  8. class CallbackExecutionException extends Exception

    Permalink

    This exception is only thrown when there's a uncaught exception in the execution block of a Callback.

    This exception is only thrown when there's a uncaught exception in the execution block of a Callback. For example,

    val c: Callback[Foo] = getCallback()
    c.execute{
      case Success(foo) => throw new Exception("exception")
    }

    will result in a CallbackExecutionException being thrown, however

    c.map{_ => throw new Exception("exception")}.execute()

    will not because the exception can still be recovered

  9. case class CallbackExecutor(context: ExecutionContext, executor: ActorRef) extends Product with Serializable

    Permalink

    A CallbackExecutor represents a scheduler and execution environment for Callbacks and is required when either converting a Future to a Callback or scheduling delayed execution of a Callback.

    A CallbackExecutor represents a scheduler and execution environment for Callbacks and is required when either converting a Future to a Callback or scheduling delayed execution of a Callback. Every Worker provides an CallbackExecutor that can be imported when doing such operations.

  10. class CallbackPromise[T] extends AnyRef

    Permalink

    A CallbackPromise creates a callback which can be eventually filled in with a value.

    A CallbackPromise creates a callback which can be eventually filled in with a value. This works similarly to a scala Promise. CallbackPromises are not thread-safe. For thread-safety, simply use a scala Promise and use Callback.fromFuture on it's corresponding Future.

  11. trait Client[P <: Protocol, M[_]] extends Sender[P, M]

    Permalink
  12. case class ClientConfig(address: InetSocketAddress, requestTimeout: Duration, name: MetricAddress, pendingBufferSize: Int = 500, sentBufferSize: Int = 100, failFast: Boolean = false, connectRetry: RetryPolicy = ..., idleTimeout: Duration = Duration.Inf, maxResponseSize: DataSize = 1.MB) extends Product with Serializable

    Permalink

    Configuration used to specify a Client's parameters

    Configuration used to specify a Client's parameters

    address

    The address with which to connect

    requestTimeout

    The request timeout value

    name

    The MetricAddress associated with this client

    pendingBufferSize

    Size of the pending buffer

    sentBufferSize

    Size of the sent buffer

    failFast

    When a failure is detected, immediately fail all pending requests.

    connectRetry

    Retry policy for connections.

    idleTimeout

    How long the connection can remain idle (both sending and receiving data) before it is closed. This should be significantly higher than requestTimeout.

    maxResponseSize

    max allowed response size -- larger responses are dropped

  13. abstract class ClientFactories[C <: Protocol, T[M[_]] <: Sender[C, M[_]]] extends AnyRef

    Permalink

    Mixed into protocols to provide simple methods for creating clients.

  14. trait ClientFactory[C <: Protocol, M[_], T <: Sender[C, M], E] extends AnyRef

    Permalink
  15. trait ClientLifter[C <: Protocol, T[M[_]] <: Sender[C, M[_]]] extends AnyRef

    Permalink

    This has to be implemented per codec in order to lift generic Sender traits to a type-specific trait

    This has to be implemented per codec in order to lift generic Sender traits to a type-specific trait

    For example this is how we go from ServiceClient[HttpRequest, HttpResponse] to HttpClient[Callback]

  16. class ClientOverloadedException extends ServiceClientException

    Permalink

    Thrown when the pending buffer is full

  17. sealed trait ClientState extends AnyRef

    Permalink
  18. class CodecClientFactory[C <: Protocol, M[_], B <: Sender[C, M], T[M[_]] <: Sender[C, M[_]], E] extends ClientFactory[C, M, T[M], E]

    Permalink
  19. class ConnectionLostException extends ServiceClientException

    Permalink

    Thrown when a request is lost in transit

  20. case class ConstantCallback[O](value: Try[O]) extends Callback[O] with Product with Serializable

    Permalink

    A Callback containing a constant value, usually created as the result of calling Callback.success or Callback.failure.

    A Callback containing a constant value, usually created as the result of calling Callback.success or Callback.failure. See the docs for Callback for more information.

  21. abstract class DSLService[C <: Protocol] extends ServiceServer[C] with DownstreamEventHandler[GenRequestHandler[C]]

    Permalink
  22. class DataException extends ServiceClientException

    Permalink

    Thrown when there's some kind of data error

  23. class DefaultTagDecorator[P <: Protocol] extends TagDecorator[P]

    Permalink
  24. class DroppedReplyException extends ServiceServerException

    Permalink
  25. class FatalServiceServerException extends ServiceServerException

    Permalink
  26. class FutureAsync extends Async[Future]

    Permalink
  27. trait FutureClient[C <: Protocol] extends Client[C, Future]

    Permalink
  28. class FutureClientFactory[P <: Protocol] extends ClientFactory[P, Future, FutureClient[P], IOSystem]

    Permalink
  29. abstract class GenRequestHandler[P <: Protocol] extends DownstreamEvents with HandlerTail with UpstreamEventHandler[ServiceUpstream[P]]

    Permalink
  30. abstract class HandlerGenerator[T] extends AnyRef

    Permalink
  31. case class IrrecoverableError[C](reason: Throwable) extends ProcessingFailure[C] with Product with Serializable

    Permalink
  32. trait LiftedClient[C <: Protocol, M[_]] extends Sender[C, M]

    Permalink
  33. class LoadBalancingClient[P <: Protocol] extends WorkerItem with Sender[P, Callback]

    Permalink

    The LoadBalancingClient will evenly distribute requests across a set of clients.

    The LoadBalancingClient will evenly distribute requests across a set of clients. If one client begins failing, the balancer will retry up to numRetries times across the other clients (with each failover hitting different clients to avoid a cascading pileup

    Note that the balancer will never try the same client twice for a request, so setting maxTries to a very large number will mean that every client will be tried once

    TODO: does this need to actually be a WorkerItem anymore?

  34. class LoadBalancingClientException extends Exception

    Permalink
  35. case class MappedCallback[I, O](trigger: ((Try[I]) ⇒ Unit) ⇒ Unit, handler: (Try[I]) ⇒ Try[O]) extends Callback[O] with Product with Serializable

    Permalink

    A Callback that has been mapped on.

    A Callback that has been mapped on. See the docs for Callback for more information

  36. class NotConnectedException extends ServiceClientException

    Permalink

    Throw when a request is attempted while not connected

  37. class PermutationGenerator[T] extends Iterator[List[T]]

    Permalink

    The PermutationGenerator creates permutations such that consecutive calls are guaranteed to cycle though all items as the first element.

    The PermutationGenerator creates permutations such that consecutive calls are guaranteed to cycle though all items as the first element.

    This currently doesn't iterate through every possible permutation, but it does evenly distribute 1st and 2nd tries...needs some more work

  38. sealed trait ProcessingFailure[C] extends AnyRef

    Permalink
  39. class PromiseException extends Exception

    Permalink
  40. trait Protocol extends AnyRef

    Permalink
  41. class ProxyWatchdog extends Actor

    Permalink
  42. class ReceiveException extends Exception

    Permalink
  43. case class RecoverableError[C](request: C, reason: Throwable) extends ProcessingFailure[C] with Product with Serializable

    Permalink
  44. class RequestBufferFullException extends ServiceServerException

    Permalink
  45. trait RequestFormatter[I] extends AnyRef

    Permalink
  46. class RequestHandlerException extends Exception

    Permalink
  47. class RequestTimeoutException extends ServiceClientException

    Permalink

    Returned when a request has been pending for too long

  48. class SendFailedException extends Exception

    Permalink
  49. trait Sender[C <: Protocol, M[_]] extends AnyRef

    Permalink

    A Sender is anything that is able to asynchronously send a request and receive a corresponding response

  50. class ServiceClient[P <: Protocol] extends ControllerDownstream[controller.Encoding.Client[P]] with HasUpstream[ControllerUpstream[controller.Encoding.Client[P]]] with Sender[P, Callback] with HandlerTail

    Permalink

    A ServiceClient is a non-blocking, synchronous interface that handles sending atomic commands on a connection and parsing their replies

    A ServiceClient is a non-blocking, synchronous interface that handles sending atomic commands on a connection and parsing their replies

    Notice - The client will not begin to connect until it is bound to a worker, so when using the default constructor a service client will not connect on it's own. You must either call bind on the client or use the constructor that accepts a worker

    TODO: make underlying output controller data size configurable

  51. class ServiceClientException extends Exception

    Permalink
  52. trait ServiceClientFactory[P <: Protocol] extends ClientFactory[P, Callback, ServiceClient[P], WorkerRef]

    Permalink
  53. class ServiceClientPool[T <: Sender[_, Callback]] extends AnyRef

    Permalink

    A ClientPool is a simple container of open connections.

    A ClientPool is a simple container of open connections. It can receive updates and will open/close connections accordingly.

    note that config will be copied for each client, replacing only the address

  54. case class ServiceConfig(requestTimeout: Duration, requestBufferSize: Int, logErrors: Boolean, requestMetrics: Boolean, maxRequestSize: DataSize) extends Product with Serializable

    Permalink

    Configuration class for a Service Server Connection Handler

    Configuration class for a Service Server Connection Handler

    requestTimeout

    how long to wait until we timeout the request

    requestBufferSize

    how many concurrent requests a single connection can be processing

    logErrors

    if true, any uncaught exceptions or service-level errors will be logged

    requestMetrics

    toggle request metrics

    maxRequestSize

    max size allowed for requests TODO: remove name from config, this should be the same as a server's name and pulled from the ServerRef, though this requires giving the ServiceServer access to the ServerRef

  55. class ServiceConfigException extends Exception

    Permalink
  56. trait ServiceDSL[T, I <: ServiceInitializer[T]] extends AnyRef

    Permalink
  57. trait ServiceInitializer[T] extends HandlerGenerator[T]

    Permalink
  58. abstract class ServiceServer[P <: Protocol] extends ControllerDownstream[Server[P]] with ServiceUpstream[P] with UpstreamEventHandler[ControllerUpstream[Server[P]]]

    Permalink

    The ServiceServer provides an interface and basic functionality to create a server that processes requests and returns responses over a codec.

    The ServiceServer provides an interface and basic functionality to create a server that processes requests and returns responses over a codec.

    A Codec is simply the format in which the data is represented. Http, Redis protocol, Memcached protocl are all examples(and natively supported). It is entirely possible to use an additional Codec by creating a Codec to parse the desired protocol.

    Requests can be processed synchronously or asynchronously. The server will ensure that all responses are written back in the order that they are received.

  59. class ServiceServerException extends Exception

    Permalink
  60. trait ServiceUpstream[P <: Protocol] extends UpstreamEvents

    Permalink
  61. class StaleClientException extends Exception

    Permalink

    This is thrown when a Client is manually disconnected, and subsequent attempt is made to reconnect.

    This is thrown when a Client is manually disconnected, and subsequent attempt is made to reconnect. To simplify the internal workings of Clients, instead of trying to reset its internal state, it throws. Create a new Client to reestablish a connection.

  62. trait TagDecorator[P <: Protocol] extends AnyRef

    Permalink
  63. class UnbindHandler extends PipelineHandler with ManualUnbindHandler

    Permalink
  64. class UnhandledRequestException extends Exception

    Permalink
  65. case class UnmappedCallback[I](trigger: ((Try[I]) ⇒ Unit) ⇒ Unit) extends Callback[I] with Product with Serializable

    Permalink

    A Callback that has not been mapped.

    A Callback that has not been mapped. See the docs for Callback for more information

Value Members

  1. object AsyncBuilder

    Permalink
  2. object Callback

    Permalink
  3. object CallbackAsync extends Async[Callback]

    Permalink
  4. object CallbackExecutor extends Serializable

    Permalink
  5. object ClientConfig extends Serializable

    Permalink
  6. object ClientState

    Permalink
  7. object FutureClient

    Permalink
  8. object Protocol

    Permalink
  9. object ServiceClientFactory

    Permalink
  10. object ServiceConfig extends Serializable

    Permalink
  11. object ServiceServer

    Permalink
  12. object TagDecorator

    Permalink

Ungrouped