com.twitter.finagle

util

package util

Resource Management

Disposable represents a live resource that must be disposed after use. Managed is a factory for creating and composing such resources. Managed resources are composed together so their lifetimes are synchronized.

The following example shows how to build and use composite managed resources:

// Create managed Tracer
def mkManagedTracer() = new Managed[Tracer] {
  def make() = new Disposable[Tracer] {
    val underlying = new Tracer()
    def get = underlying
    def dispose(deadline: Time) = underlying.close() // assumes Tracer uses relese() to manage lifetime
  }
}

// Create managed Server using Tracer as dependency
def mkManagedServer(t: Tracer) = new Managed[Server] {
  def make() = new Disposable[Server] {
    val underlying = new Server(t) // Server requires tracer to be created
    def get = underlying
    def dispose(deadline: Time) = underlying.close() // assumes Server uses close() to manage lifetime
  }
}

// Create composite resource
val compRes: Managed[Server] = for {
  a <- mkManagedTracer()
  b <- mkManagedServer(a)
} yield b

// Use composite resource in safe fashion. It's guaranteed that both resources
// will be properly closed/released when done using them.
compRes foreach { b =>
  // use b (which is type Server in this case)
} // dispose called on both resources

Disposable/Managed Semantics

Disposable: get can be called multiple times and should return same instance; dispose can be called only once and should release resource that get is returning; calling get after dispose is undefined.

Managed: multiple calls to make could return a) new instance or b) ref counted instance of the underlying resource or c) same instance when resource doesn't need to be actually disposed, etc.

Visibility
  1. Public
  2. All

Type Members

  1. class AsyncLatch extends AnyRef

    The AsyncLatch is an asynchronous latch.

  2. trait Chan[-T] extends AnyRef

  3. trait CloseNotifier extends AnyRef

    Allows resources to register their handlers to be invoked when service is closing.

  4. class ConcurrentRingBuffer[T] extends AnyRef

    A simple, lock-free, non-blocking ring buffer.

  5. trait Disposable[+T] extends AnyRef

    Disposable is a container for a resource that must be explicitly disposed when no longer needed.

  6. class DoubleTrouble extends Exception

  7. trait FinagleTimer extends AnyRef

    A Finagle-managed timer, with interfaces for both {{com.

  8. trait Managed[+T] extends AnyRef

    Managed[T] is a resource of type T which lifetime is explicitly managed.

  9. trait Proc[-T] extends Chan[T]

    A Proc is a process that can receive messages.

  10. class TimerFromNettyTimer extends Timer

    Implements a com.twitter.util.Timer in terms of a org.jboss.netty.util.Timer.

Value Members

  1. object ByteArrays extends AnyRef

  2. object CloseNotifier extends AnyRef

  3. val DefaultLogger: Logger

    Definition Classes
    package
  4. object DefaultMonitor extends Monitor

  5. object DefaultTimer extends HashedWheelTimer

  6. object Disposable extends AnyRef

  7. object ExitGuard extends AnyRef

    ExitGuard prevents the process from exiting normally by use of a nondaemon thread whenever there is at least one guarder.

  8. object InetSocketAddressUtil extends AnyRef

  9. object LoadService extends AnyRef

    Load a singleton class using java.util.ServiceLoader.

  10. object Managed extends AnyRef

  11. object Proc extends AnyRef