Class ResourceRegistry
- java.lang.Object
-
- com.linkedin.alpini.base.registry.ResourceRegistry
-
- Direct Known Subclasses:
SyncResourceRegistry
public class ResourceRegistry extends java.lang.Object
A registry to manageShutdownable
resources.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
ResourceRegistry.Factory<R extends ShutdownableResource>
Factories must implement this interface.static interface
ResourceRegistry.ShutdownFirst
Resources which implementResourceRegistry.ShutdownFirst
will be shut down during the first phase.static interface
ResourceRegistry.ShutdownLast
Resources which implementResourceRegistry.ShutdownLast
will be shut down during the last phase.static interface
ResourceRegistry.Sync
Resources which implementResourceRegistry.Sync
will be shut down after preceding resources have finished shutting down and further resources will shut down after it has completed shutting down.
-
Field Summary
Fields Modifier and Type Field Description protected com.linkedin.alpini.base.registry.ResourceRegistry.State
_state
static java.lang.String
SHUTDOWN_THREAD_PREFIX
-
Constructor Summary
Constructors Constructor Description ResourceRegistry()
Construct a ResourceRegistry class instance.ResourceRegistry(boolean garbageCollectable)
Construct a ResourceRegistry class instance.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description <R extends ShutdownableResource,F extends ResourceRegistry.Factory<R>>
Ffactory(java.lang.Class<F> clazz)
Return a factory which implements the requested factory class F.static long
getGlobalShutdownDelayMillis()
Get the delay for global shutdown.static void
globalShutdown()
Starts shutdown for all ResourceRegistry instances.static boolean
isFactoryInterface(java.lang.Class<?> clazz)
Checks if the supplied class is a permissable factory class.boolean
isShutdown()
Returns true if this resource has been shut down.boolean
isTerminated()
Returns true if the resource has completed shutting down.protected java.util.Iterator<ShutdownableResource>
iterator()
<R extends ShutdownableResource>
Rregister(R resource)
Register aShutdownableResource
resource with thisResourceRegistry
.static <R extends ShutdownableResource,F extends ResourceRegistry.Factory<R>>
FregisterFactory(java.lang.Class<F> clazz, F factory)
Register the factory with theResourceRegistry
such that future invocations offactory(Class)
will return an appropiate proxy for the factory.<R extends ShutdownableResource>
voidremove(R resource)
Removes the specifiedShutdownableResource
from thisResourceRegistry
.static void
setGlobalShutdownDelayMillis(long globalShutdownDelayMillis)
Set a delay for global shutdown.void
shutdown()
Starts the shutdown process.java.lang.String
toString()
void
vacuum()
Vacuums any already-terminated resources.void
waitForShutdown()
Waits for shutdown to completevoid
waitForShutdown(long timeoutInMs)
Waits for shutdown to complete with a timeoutvoid
waitToStartShutdown()
Waits until another caller callsshutdown()
on this resource registry.void
waitToStartShutdown(long timeoutInMs)
Waits until another caller callsshutdown()
on this resource registry.
-
-
-
Constructor Detail
-
ResourceRegistry
public ResourceRegistry()
Construct a ResourceRegistry class instance. When instances of theseResourceRegistry
are garbage collected when not shut down, they will automatically behave as-ifshutdown()
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 Detail
-
isFactoryInterface
public static boolean isFactoryInterface(java.lang.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(java.lang.Class<F> clazz, F factory)
Register the factory with theResourceRegistry
such that future invocations offactory(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 java.lang.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 aShutdownableResource
resource with thisResourceRegistry
.- 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 aShutdownable
resource with thisResourceRegistry
.- 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 aSyncShutdownable
resource with thisResourceRegistry
.- 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 specifiedShutdownableResource
from thisResourceRegistry
.- Type Parameters:
R
- Type of the resource.- Parameters:
resource
- Resource to be removed.
-
remove
public <R extends Shutdownable> void remove(R resource)
Removes the specifiedShutdownable
from thisResourceRegistry
.- Type Parameters:
R
- Type of the resource.- Parameters:
resource
- Resource to be removed.
-
remove
public <R extends SyncShutdownable> void remove(R resource)
Removes the specifiedSyncShutdownable
from thisResourceRegistry
.- 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 java.lang.InterruptedException
Waits until another caller callsshutdown()
on this resource registry.- Throws:
java.lang.InterruptedException
- when the wait is interrupted
-
waitToStartShutdown
public void waitToStartShutdown(long timeoutInMs) throws java.lang.InterruptedException, java.util.concurrent.TimeoutException
Waits until another caller callsshutdown()
on this resource registry.- Parameters:
timeoutInMs
- Time to wait, in milliseconds.- Throws:
java.lang.InterruptedException
- when the wait is interruptedjava.util.concurrent.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 java.lang.InterruptedException, java.lang.IllegalStateException
Waits for shutdown to complete- Throws:
java.lang.InterruptedException
- when the wait is interruptedjava.lang.IllegalStateException
- when the method is invoked before shutdown has started
-
waitForShutdown
public void waitForShutdown(long timeoutInMs) throws java.lang.InterruptedException, java.lang.IllegalStateException, java.util.concurrent.TimeoutException
Waits for shutdown to complete with a timeout- Parameters:
timeoutInMs
- number of milliseconds to wait before throwing TimeoutException- Throws:
java.lang.InterruptedException
- when the wait is interruptedjava.lang.IllegalStateException
- when the method is invoked before shutdown has been startedjava.util.concurrent.TimeoutException
- when the wait times out
-
iterator
protected java.util.Iterator<ShutdownableResource> iterator()
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
- See Also:
Object.toString()
-
globalShutdown
public static void globalShutdown() throws java.lang.InterruptedException
Starts shutdown for all ResourceRegistry instances.- Throws:
java.lang.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.
-
-