Class ResourceRegistry

java.lang.Object
com.linkedin.alpini.base.registry.ResourceRegistry
Direct Known Subclasses:
SyncResourceRegistry

public class ResourceRegistry extends Object
A registry to manage Shutdownable resources.
  • Field Details

    • SHUTDOWN_THREAD_PREFIX

      public static final String SHUTDOWN_THREAD_PREFIX
    • _state

      protected final com.linkedin.alpini.base.registry.ResourceRegistry.State _state
  • Constructor Details

    • ResourceRegistry

      public ResourceRegistry()
      Construct a ResourceRegistry class instance. When instances of these ResourceRegistry are garbage collected when not shut down, they will automatically behave as-if shutdown() was invoked and a warning is emitted to the logs.
    • ResourceRegistry

      public ResourceRegistry(boolean garbageCollectable)
      Construct a ResourceRegistry class instance. Instances constructed with this constructor will not emit any log when it is garbage collected.
      Parameters:
      garbageCollectable - If true, the ResourceRegistry will be shut down when no remaining references to the ResourceRegistry remain referenced.
  • Method Details

    • isFactoryInterface

      public static boolean isFactoryInterface(Class<?> clazz)
      Checks if the supplied class is a permissable factory class.
      Parameters:
      clazz - Class to be checked
      Returns:
      true iff class is not null and is a ResourceRegistry.Factory interface.
    • registerFactory

      public static <R extends ShutdownableResource, F extends ResourceRegistry.Factory<R>> F registerFactory(Class<F> clazz, F factory)
      Register the factory with the ResourceRegistry such that future invocations of factory(Class) will return an appropiate proxy for the factory.
      Type Parameters:
      R - Type of the resource which the factory will return.
      F - Type of the factory.
      Parameters:
      clazz - Interface being registered with the ResourceRegistry.
      factory - Factory being registered with the ResourceRegistry.
      Returns:
      the factory.
    • factory

      @Nonnull public <R extends ShutdownableResource, F extends ResourceRegistry.Factory<R>> F factory(@Nonnull Class<F> clazz)
      Return a factory which implements the requested factory class F.
      Type Parameters:
      R - Resource type which the factory will construct.
      F - Type of the factory.
      Parameters:
      clazz - Interface demanded.
      Returns:
      a factory.
    • register

      public <R extends ShutdownableResource> R register(R resource)
      Register a ShutdownableResource resource with this ResourceRegistry.
      Type Parameters:
      R - Type of the resource.
      Parameters:
      resource - Resource to be registered.
      Returns:
      the resource.
    • register

      public <R extends Shutdownable> R register(R resource)
      Register a Shutdownable resource with this ResourceRegistry.
      Type Parameters:
      R - Type of the resource.
      Parameters:
      resource - Resource to be registered.
      Returns:
      the resource.
    • register

      public <R extends SyncShutdownable> R register(R resource)
      Register a SyncShutdownable resource with this ResourceRegistry.
      Type Parameters:
      R - Type of the resource.
      Parameters:
      resource - Resource to be registered.
      Returns:
      the resource.
    • remove

      public <R extends ShutdownableResource> void remove(R resource)
      Removes the specified ShutdownableResource from this ResourceRegistry.
      Type Parameters:
      R - Type of the resource.
      Parameters:
      resource - Resource to be removed.
    • remove

      public <R extends Shutdownable> void remove(R resource)
      Removes the specified Shutdownable from this ResourceRegistry.
      Type Parameters:
      R - Type of the resource.
      Parameters:
      resource - Resource to be removed.
    • remove

      public <R extends SyncShutdownable> void remove(R resource)
      Removes the specified SyncShutdownable from this ResourceRegistry.
      Type Parameters:
      R - Type of the resource.
      Parameters:
      resource - Resource to be removed.
    • vacuum

      public void vacuum()
      Vacuums any already-terminated resources.
    • shutdown

      public void shutdown()
      Starts the shutdown process. It is recommended to perform the actual shutdown activity in a separate thread from the thread that calls shutdown
    • waitToStartShutdown

      public void waitToStartShutdown() throws InterruptedException
      Waits until another caller calls shutdown() on this resource registry.
      Throws:
      InterruptedException - when the wait is interrupted
    • waitToStartShutdown

      public void waitToStartShutdown(long timeoutInMs) throws InterruptedException, TimeoutException
      Waits until another caller calls shutdown() on this resource registry.
      Parameters:
      timeoutInMs - Time to wait, in milliseconds.
      Throws:
      InterruptedException - when the wait is interrupted
      TimeoutException - when the operation times out
    • isShutdown

      public final boolean isShutdown()
      Returns true if this resource has been shut down.
      Returns:
      true if this resource has been shut down
    • isTerminated

      public final boolean isTerminated()
      Returns true if the resource has completed shutting down. Note that isTerminated is never true unless shutdown was called first.
      Returns:
      true if the resource has completed shutting down.
    • waitForShutdown

      public void waitForShutdown() throws InterruptedException, IllegalStateException
      Waits for shutdown to complete
      Throws:
      InterruptedException - when the wait is interrupted
      IllegalStateException - when the method is invoked before shutdown has started
    • waitForShutdown

      public void waitForShutdown(long timeoutInMs) throws InterruptedException, IllegalStateException, TimeoutException
      Waits for shutdown to complete with a timeout
      Parameters:
      timeoutInMs - number of milliseconds to wait before throwing TimeoutException
      Throws:
      InterruptedException - when the wait is interrupted
      IllegalStateException - when the method is invoked before shutdown has been started
      TimeoutException - when the wait times out
    • iterator

      protected Iterator<ShutdownableResource> iterator()
    • toString

      public String toString()
      Overrides:
      toString in class Object
      See Also:
    • globalShutdown

      public static void globalShutdown() throws InterruptedException
      Starts shutdown for all ResourceRegistry instances.
      Throws:
      InterruptedException - if the current thread is interrupted while waiting to acquire a lock
    • getGlobalShutdownDelayMillis

      public static long getGlobalShutdownDelayMillis()
      Get the delay for global shutdown. globalShutdown will wait this many millis before shutting down.
    • setGlobalShutdownDelayMillis

      public static void setGlobalShutdownDelayMillis(long globalShutdownDelayMillis)
      Set a delay for global shutdown. globalShutdown will wait this many millis before shutting down.